diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache index 1231b88..d53d2a2 100644 --- a/.php-cs-fixer.cache +++ b/.php-cs-fixer.cache @@ -1 +1 @@ -{"php":"8.3.6","version":"3.95.1:v3.95.1#a9727678fbd12997f1d9de8f4a37824ed9df1065","indent":" ","lineEnding":"\n","rules":{"array_syntax":{"syntax":"short"},"binary_operator_spaces":{"default":"single_space","operators":{"=":"align","=>":"align"}},"blank_line_after_namespace":true,"blank_line_after_opening_tag":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"braces":true,"cast_spaces":true,"class_attributes_separation":{"elements":{"const":"one","method":"one","property":"one"}},"class_definition":true,"concat_space":{"spacing":"none"},"constant_case":{"case":"lower"},"declare_equal_normalize":true,"declare_strict_types":true,"echo_tag_syntax":{"format":"long"},"elseif":true,"encoding":true,"final_internal_class":true,"full_opening_tag":true,"fully_qualified_strict_types":true,"function_declaration":true,"function_typehint_space":true,"heredoc_to_nowdoc":true,"include":true,"increment_style":{"style":"post"},"indentation_type":true,"linebreak_after_opening_tag":true,"line_ending":true,"lowercase_cast":true,"lowercase_keywords":true,"lowercase_static_reference":true,"magic_method_casing":true,"magic_constant_casing":true,"method_argument_space":true,"multiline_whitespace_before_semicolons":{"strategy":"no_multi_line"},"native_function_casing":true,"new_with_braces":true,"no_alias_functions":true,"no_blank_lines_after_class_opening":true,"no_blank_lines_after_phpdoc":true,"no_closing_tag":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["extra","throw","use","use_trait"]},"no_leading_import_slash":true,"no_leading_namespace_whitespace":true,"no_mixed_echo_print":{"use":"echo"},"no_multiline_whitespace_around_double_arrow":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_after_function_name":true,"no_spaces_around_offset":{"positions":["inside"]},"no_spaces_inside_parenthesis":true,"no_trailing_comma_in_list_call":true,"no_trailing_comma_in_singleline_array":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","return","switch_case","yield"]},"no_unreachable_default_argument_value":true,"no_unused_imports":true,"no_useless_else":true,"no_useless_return":true,"no_whitespace_before_comma_in_array":true,"no_whitespace_in_blank_line":true,"normalize_index_brace":true,"not_operator_with_successor_space":true,"object_operator_without_whitespace":true,"ordered_class_elements":true,"ordered_imports":{"sort_algorithm":"alpha"},"php_unit_strict":true,"php_unit_test_class_requires_covers":true,"phpdoc_add_missing_param_annotation":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":true,"phpdoc_scalar":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_to_comment":{"ignored_tags":["var"]},"phpdoc_trim":true,"phpdoc_types":true,"phpdoc_var_without_name":true,"psr_autoloading":true,"self_accessor":true,"semicolon_after_instruction":true,"short_scalar_cast":true,"simplified_null_return":true,"single_blank_line_at_eof":true,"single_blank_line_before_namespace":true,"single_class_element_per_statement":{"elements":["const","property"]},"single_import_per_statement":true,"single_line_after_imports":true,"single_line_comment_style":{"comment_types":["hash"]},"single_quote":true,"single_trait_insert_per_statement":true,"space_after_semicolon":true,"standardize_not_equals":true,"strict_comparison":true,"strict_param":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"ternary_operator_spaces":true,"trailing_comma_in_multiline":{"elements":["arrays"]},"trim_array_spaces":true,"unary_operator_spaces":true,"visibility_required":{"elements":["property","method","const"]},"whitespace_after_comma_in_array":true},"ruleCustomisationPolicyVersion":"null-policy","hashes":{"src\/Binary\/Hex\/Writer.php":"590df3f3343c052d96d3cbbeb317f265","src\/Binary\/Buffer\/Writer\/Buffer.php":"80ab7029c26d83449a3529f4cee7a648","src\/Binary\/Buffer\/Writer\/Concerns\/Hex.php":"320937c99c2d66a2fe5c97396a994921","src\/Binary\/Buffer\/Writer\/Concerns\/Integer.php":"1f80863a79db7a412ed78fd647ff1cdf","src\/Binary\/Buffer\/Writer\/Concerns\/UnsignedInteger.php":"2ffba9fbbc552cb15166b7c47e22cd0e","src\/Binary\/Buffer\/Writer\/Concerns\/Generic.php":"76f295b93cc3d1327bf799f57d5a978c","src\/Binary\/Buffer\/Reader\/Buffer.php":"ec09343504cca539cf6bf91aace82464","src\/Binary\/Buffer\/Reader\/Concerns\/Hex.php":"3442407232a6093352c8e2b3146169f5","src\/Binary\/Buffer\/Reader\/Concerns\/Integer.php":"978f791a745c7b99d81032ef7f182558","src\/Binary\/Buffer\/Reader\/Concerns\/UnsignedInteger.php":"6a2f2ea4c5839184a7715dc633a504bd","src\/Exceptions\/InvalidUsernameException.php":"d392da166f80b3be9bdf4ba13d1e7b89","src\/Helpers.php":"90816e6ab5e44ebcb4c31770b610fa3b","src\/Enums\/ContractAbiType.php":"6aeea79e287ad76d65dc4ad0fcdf10eb","src\/Enums\/AbiFunction.php":"a2c304273177d019681bc95912bf69d6","src\/Enums\/ContractAddresses.php":"06e2508d6640ce4572565eadbd390a20","src\/Identities\/Address.php":"83f02a9f2e101ce9ed1748bd3c0a0aab","src\/Identities\/PrivateKey.php":"a4bd870539d13f97a21e714608310804","src\/Identities\/WIF.php":"60dd95da09bb6c240acd02cd3f52a6b8","src\/Identities\/PublicKey.php":"2deb4baddcc512f012a06ce5f3b39387","src\/Binary\/Hex\/Reader.php":"e28448b92fadb2979e1db484a6afca8d","src\/ByteBuffer\/Concerns\/Writes\/Hex.php":"169cc84b5e39930c7e168d7bdbbcd37d","src\/ByteBuffer\/Concerns\/Writes\/Strings.php":"ba4ebf613b130f41b0a531dbd07c43c5","src\/ByteBuffer\/Concerns\/Writes\/Integer.php":"6f717766d8775b349f0e474902f66511","src\/ByteBuffer\/Concerns\/Writes\/Floats.php":"f3797170755677f4776f1cefbda60cb6","src\/ByteBuffer\/Concerns\/Writes\/UnsignedInteger.php":"68a9620949ef00f0b9676f2a1433d849","src\/ByteBuffer\/Concerns\/Reads\/Hex.php":"f3cc0a816b6e9469740bf59575363516","src\/ByteBuffer\/Concerns\/Reads\/Strings.php":"17238cbe09b4b870fa66b5704709f18e","src\/ByteBuffer\/Concerns\/Reads\/Integer.php":"9fa6cb50cebf03b7bf00e3b5337d9873","src\/ByteBuffer\/Concerns\/Reads\/Floats.php":"056b5c5b629a9fd0231becaded2f6973","src\/ByteBuffer\/Concerns\/Reads\/UnsignedInteger.php":"3d29cc54a05f7c6a02973e5618f821ae","src\/Utils\/RlpEncoder.php":"3f12a6053f27f931d0fabbfb91e1a7cf","src\/Utils\/TransactionUtils.php":"6e5ec26cbe4b2125c59a37331083173a","src\/Utils\/TransactionTypeIdentifier.php":"f526604e7ba624aad82e01639ca0682a","src\/Utils\/Abi\/ArgumentDecoder.php":"6430cb971aa8e5927b62270afdec0af6","src\/Utils\/UnitConverter.php":"d716c75d97fb21408dd1b2d86d18c75d","src\/Utils\/TransactionEncoder.php":"a1cc9a1d3616cfe780d0f2c3e96c0c10","src\/Utils\/AbiEncoder.php":"e0edf2b073a0b0efe07896731846535c","src\/ByteBuffer\/LengthMap.php":"2f62d17297dc7387a39466df38b8649b","src\/ByteBuffer\/Concerns\/Transformable.php":"3d1f8aa43854c9417538e51dfdcd106f","src\/ByteBuffer\/Concerns\/Positionable.php":"86e5bc94fc7389aed28ba6fec9d7d2c2","src\/Binary\/Integer\/Reader.php":"fbe1a1af3821a1c2ee79e996a254ef2a","src\/Binary\/Integer\/Writer.php":"e6dbdb22282670b0547c66202cf25abf","src\/Binary\/UnsignedInteger\/Reader.php":"e9d87277e9f0e8cd6f3a63b6caa95ad2","src\/Binary\/UnsignedInteger\/Writer.php":"c0443907d9a5c9b2c027eca99ae775f5","src\/Utils\/Address.php":"410b85d6c0ba3764293463b48c03da91","src\/Utils\/AbiBase.php":"772be753e59f052101bc7616ecc2ca6d","src\/Utils\/RlpDecoder.php":"3fbea35725a5194184db4c650239418c","src\/Utils\/AbiDecoder.php":"034ad5743007a60ae8aa6059bcb23b86","src\/Utils\/Slot.php":"9674e711b193645b0b769514ab1d5907","src\/Utils\/Message.php":"6dc3cf7e0fe73c86d1eaa54ae0052ce7","src\/ByteBuffer\/Concerns\/Initialisable.php":"96a9455179a83ec00139d937bcd58626","src\/ByteBuffer\/Concerns\/Sizeable.php":"6b03f909020b0d15bc4c35256d85c896","src\/ByteBuffer\/Concerns\/Offsetable.php":"68179b59de54fe5a6233eb7111f6dc79","src\/ByteBuffer\/Concerns\/Readable.php":"518d72f8d0f926461b3248336640abae","src\/ByteBuffer\/Concerns\/Writeable.php":"6970a6fb60370c572f3a3febe6c3df09","src\/ByteBuffer\/ByteBuffer.php":"466a031832de383903af0251fc88be93","src\/ByteBuffer\/ByteOrder.php":"36dff8aac67cf33c653ba15e906e2680","src\/Transactions\/Builder\/EvmCallBuilder.php":"60eeff1cdc6dc59528d216db71211e49","src\/Transactions\/Builder\/TransferBuilder.php":"96ff6d1443e60e6c7ae5a37ed400a62f","src\/Transactions\/Builder\/ValidatorResignationBuilder.php":"ca8561048ac8aa2a0d623b7c327a0afd","src\/Transactions\/Builder\/UsernameRegistrationBuilder.php":"c9bb1a7376cadda5152abd5e46f0be8c","src\/Transactions\/Builder\/AbstractTransactionBuilder.php":"c984b9b1efeb4b7e389e9b01a24b5628","src\/Transactions\/Builder\/TokenTransferBuilder.php":"5a48ac7df4a614009c4b063343157ee0","src\/Transactions\/Builder\/UnvoteBuilder.php":"a37b3c38a9ce5f663579e3ce28e16ff3","src\/Transactions\/Builder\/TokenApproveBuilder.php":"c95653c20511eb4e9ba309260491a34d","src\/Transactions\/Builder\/UsernameResignationBuilder.php":"44ddc136b094777b3fb105fef647db11","src\/Transactions\/Builder\/MultipaymentBuilder.php":"562c803fa9e19a6873951f7cd1bad1c8","src\/Transactions\/Builder\/VoteBuilder.php":"02426dd1b4042447e25a64eb78188fb7","src\/Transactions\/Builder\/ValidatorRegistrationBuilder.php":"eb952b7d042301e02f0f59e4a0828ab6","src\/Transactions\/Types\/UsernameRegistration.php":"485b52c32da8b62826617708f3b4a6ec","src\/Transactions\/Types\/Vote.php":"90972b6a028a7652351655a1c1b08b34","src\/Transactions\/Types\/Multipayment.php":"b10ca169d3d37058ad7b940b48d11a8a","src\/Transactions\/Types\/EvmCall.php":"df3aa5b419b200b9eac9d5fc87d240c8","src\/Transactions\/Types\/ValidatorResignation.php":"090882c106dfa298a956bd8eeb49c447","src\/Transactions\/Types\/AbstractTransaction.php":"60222b9229ae21c646b2e30cc38b6871","src\/Transactions\/Types\/Transfer.php":"4d3a16aa308ccf80758b212eca33b669","src\/Transactions\/Types\/ValidatorRegistration.php":"b370ae219f09706187e0ed1051f11a06","src\/Transactions\/Types\/Unvote.php":"56b3c9b921f038639f4eac0d6239e437","src\/Transactions\/Types\/UsernameResignation.php":"68848e1cd4b4d341aa7ff831481ffe31","src\/Transactions\/Serializer.php":"54487af37809b3c134efdce4e26ed1b2","src\/Networks\/Mainnet.php":"3acffe72b51707db16ad4b1a78f050b1","src\/Networks\/AbstractNetwork.php":"5b1cb5aa9830faf93a7f68023614dc1c","src\/Networks\/Testnet.php":"60f72744f4691e2da852b66e9d85a5f0","tests\/Unit\/HelpersTest.php":"40826b23445858a4968985a8c27a7da0","tests\/Unit\/Enums\/AbiFunctionTest.php":"d9ff7604b7be95adad992489c7b0f3dc","tests\/Unit\/Identities\/PrivateKeyTest.php":"19275c459ca01885ae4bf73ffcbecd33","tests\/Unit\/Identities\/PublicKeyTest.php":"e406835540aa170e6e27d24a2a36c09a","tests\/Unit\/Identities\/AddressTest.php":"0e0b7cfefdec532df286f52ce9ddee0f","tests\/Unit\/Identities\/WIFTest.php":"5619ab75730edbb32603355767e5ff70","tests\/Unit\/Binary\/Hex\/WriterTest.php":"85dad01bc8693af66bc55c40a2e603c5","tests\/Unit\/Binary\/Hex\/ReaderTest.php":"f179cd6f729f0d866518038803446228","tests\/Unit\/Binary\/Buffer\/Writer\/BufferTest.php":"6372984efaf7d2a378a7c2ebc3019f3a","tests\/Unit\/Binary\/Buffer\/Reader\/BufferTest.php":"6c6996473bf7c7d8592e3639f5326dda","tests\/Unit\/Binary\/Integer\/WriterTest.php":"64a1f07dc16c4faf2c06a3e5092a107d","tests\/Unit\/Binary\/Integer\/ReaderTest.php":"599fef4860548866a39f64e3dbb44e7d","tests\/Unit\/Binary\/UnsignedInteger\/WriterTest.php":"c10138f97a2b9f34c80d6feae77e77cc","tests\/Unit\/Binary\/UnsignedInteger\/ReaderTest.php":"c88736b794a6320cae58e6554b2cd8bc","tests\/Unit\/Utils\/TransactionEncoderTest.php":"b936edc1da350532bfc87c5443bec12c","tests\/Unit\/Utils\/TransactionUtilsTest.php":"01a1855eacb299b74a997d7dd5987774","tests\/Unit\/Utils\/AddressTest.php":"e2851e599dd5b442cbe83e9c1f28e4b9","tests\/Unit\/ByteBuffer\/Concerns\/SizeableTest.php":"d1a553d36f3fec95b857c839e2d834cb","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/IntegerTest.php":"e5124461e7a97a3e2d78e5b6f5469991","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/HexTest.php":"1abfe709a9e787f7b4e4718d5af0e65c","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/UnsignedIntegerTest.php":"4f2ed9775cd92f3d136d9d6b1cd8f25c","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/FloatsTest.php":"9b45e3276289bb0c44faf94326d6ff76","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/StringsTest.php":"6f591e8733550f1ad0d231f7809ad0a5","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/IntegerTest.php":"3b113ff1f80a9e15ab7af1a29161259b","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/HexTest.php":"01aa9304919af4fa3fa6aaef2f897679","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/UnsignedIntegerTest.php":"cddc6997c7daf4c494b7a65b22823bc3","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/FloatsTest.php":"e4d5200763a77c3993047247d59b3488","tests\/Unit\/Utils\/AbiEncoderTest.php":"8e9601a7576c4e0590f9508267464ff6","tests\/Unit\/Utils\/RlpEncoderTest.php":"6710ec96e9603dbe073181e095674027","tests\/Unit\/Utils\/UnitConverterTest.php":"b4dfb4b2bdeac414b9c85b35a8e09d8c","tests\/Unit\/Utils\/AbiDecoderTest.php":"47c911cb143c9cd4e89b83568509de28","tests\/Unit\/Utils\/SlotTest.php":"ed89ae0182409d977a4faab9ca1eea95","tests\/Unit\/Utils\/RlpDecoderTest.php":"12f50e696926077dbbc1f005cbae2ef2","tests\/Unit\/Utils\/TransactionTypeIdentifierTest.php":"96b1e8b27ad9acf202c037919a7aa194","tests\/Unit\/Utils\/MessageTest.php":"71efee57f29dceda4e36e133169c5683","tests\/Unit\/Utils\/Abi\/ArgumentDecoderTest.php":"9e1fda36ecf2cde01b7db5c85658bc24","tests\/Unit\/ByteBuffer\/ByteBufferTest.php":"34237362a8d54d9c4d1610d59fedf7f8","src\/Transactions\/Deserializer.php":"32e5d5e8926ffda7402d6f43da2d02d4","src\/Configuration\/Network.php":"d908336264d1b5c789e42fe7ba0cfe2c","src\/BLS\/HashToCurve\/G2HashToCurve.php":"104f044fbd0bfc2d871412caf6284306","src\/BLS\/ProofOfPossession.php":"e939893481a3c5c9bca061a85366fc9d","src\/BLS\/Fields\/Fp2.php":"7685c72b29900bef127170b812134086","src\/BLS\/Fields\/Fp.php":"415f741a7ae6e45436e54f3258b95363","src\/BLS\/EIP2333.php":"8ae983f54821a7d04a215ab109f240d8","src\/BLS\/Curves\/G2.php":"69e7f11b35b6f66c22265d1242b4cbed","src\/BLS\/Curves\/G1.php":"7dc863fe9fc87415120143b23bf3172b","src\/Networks\/NetworkInterface.php":"b0aff2a147eb231da8cee50012841830","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/StringsTest.php":"344d7500a1776339f787c9f56be5b580","tests\/Unit\/ByteBuffer\/Concerns\/TransformableTest.php":"6230c022bbcada03e9e336e532b34b55","tests\/Unit\/ByteBuffer\/Concerns\/PositionableTest.php":"10004a8bf4ed76dc108dd5ae3db7596d","tests\/Unit\/ByteBuffer\/Concerns\/OffsetableTest.php":"6888874a372bccc480c2c7ebee35c4cf","tests\/Unit\/ByteBuffer\/Concerns\/InitialisableTest.php":"f9e38c617dea3bb087550a78fa333d2c","tests\/Unit\/ByteBuffer\/LengthMapTest.php":"7e8c04fdf23a09c06c3c77aa7dfb037a","tests\/Unit\/Transactions\/Builder\/TokenApproveBuilderTest.php":"eefe09a0b5c68542c7a33d3c2250b94b","tests\/Unit\/Transactions\/Builder\/TransferBuilderTest.php":"90a7ca6fed95fde81fc4f0d053264003","tests\/Unit\/Transactions\/Builder\/ValidatorResignationBuilderTest.php":"c744298864255a9851f85878c91fd5a6","tests\/Unit\/Transactions\/Builder\/UsernameResignationBuilderTest.php":"c3443fe93b7b10b85f33b6e3e5b6477a","tests\/Unit\/Transactions\/Builder\/TokenTransferBuilderTest.php":"d0afe43a3065f8f6c279deb940930ef5","tests\/Unit\/Transactions\/Builder\/UnvoteBuilderTest.php":"eed8e8215db82abd4a5c2994453b9772","tests\/Unit\/Transactions\/Builder\/MultipaymentBuilderTest.php":"f6aded1988aacb3c15a70885340e08f7","tests\/Unit\/Transactions\/Builder\/EvmCallBuilderTest.php":"1d95fae15d239d2eea1ab245609397da","tests\/Unit\/Transactions\/Builder\/ValidatorRegistrationBuilderTest.php":"e4bd5496e7f4263d4955e39efd7f65a0","tests\/Unit\/Transactions\/Builder\/UsernameRegistrationBuilderTest.php":"baba0df21fdb5fdedf41084b35c02cb9","tests\/Unit\/Transactions\/Builder\/VoteBuilderTest.php":"d3ec709c1e626422fa8a86eb833ae0ea","tests\/Unit\/Transactions\/Types\/TransferTest.php":"71110444ac25ca571c6dc6f855625c13","tests\/Unit\/Transactions\/Types\/ValidatorResignationTest.php":"1817a13685810de64b15df1630b11e5d","tests\/Unit\/Transactions\/Types\/EvmCallTest.php":"b37cff6589fa63bc43a196626853c208","tests\/Analysis\/AnalysisTest.php":"3dd50256922f683ee5ac773e20397598","tests\/Unit\/BLS\/EIP2333Test.php":"a7cbb6d601453304110e6e429ba9488b","tests\/Unit\/BLS\/ProofOfPossessionTest.php":"da07f67865e10035d6fde0c7d3727d9c","tests\/Unit\/Networks\/MainnetTest.php":"372a7750ae834599a0088b09a4fac760","tests\/Unit\/Networks\/TestnetTest.php":"c8dba3e353c84037c78d558548760872","tests\/Pest.php":"f56068e0b3ed7b33d7200c0d7684d2b4","tests\/Helpers.php":"362fa87b858b91ed6cb4112224fba1c2","tests\/TestCase.php":"4133b24901762dc409bb9a111c8c4853","tests\/Concerns\/Serialize.php":"5011734a689b042840e8c277c42b9a36","tests\/Concerns\/Deserialize.php":"d59555dc433a75a3e75d4483219c5e41","tests\/Concerns\/Fixtures.php":"db5b42eaf5cf381b51f8440c66669efd","tests\/Unit\/Transactions\/Types\/UnvoteTest.php":"9b57057eb1b0c17e7c783506a96c287a","tests\/Unit\/Transactions\/Types\/ValidatorRegistrationTest.php":"7b8b5c37a358ed4958a9950ca559df6e","tests\/Unit\/Transactions\/Types\/MultipaymentTest.php":"27d691ef2e4da83f8f4ff09e4c31c702","tests\/Unit\/Transactions\/Types\/UsernameRegistrationTest.php":"b5200bbac887cdbafd894d1883a593eb","tests\/Unit\/Transactions\/Types\/UsernameResignationTest.php":"69477c3478261dfdf7d4fe4eb96e0cd6","tests\/Unit\/Transactions\/Types\/VoteTest.php":"f87adb812093d3b257edae1778428c3a","tests\/Unit\/Transactions\/DeserializerTest.php":"c69a20d6f44306c0f6c136d0c6dc322a","tests\/Unit\/Transactions\/TransactionTest.php":"251c1ec6920f5aed952bfb1297ef1b1f","tests\/Unit\/Transactions\/SerializerTest.php":"6bef82d199db0b3991c9004f55074879","tests\/Unit\/Configuration\/NetworkTest.php":"fda057f8eb08ceb6c89e26e44b1acba1","src\/Identities\/LegacyAddress.php":"ddad24a8b70ed876c05032137d42b56a","src\/Transactions\/Builder\/BatchTransferBuilder.php":"61667bcef4d1bbdfce39d78721dbccc6","tests\/Unit\/Identities\/LegacyAddressTest.php":"061562efb8005bac42f41899d70f6a8e","tests\/Unit\/Transactions\/Builder\/BatchTransferBuilderTest.php":"c0961fd9bb26d6d6b0f23f2999c4ac5a","src\/Transactions\/Builder\/ValidatorUpdateBuilder.php":"74d8c0664e142c837f0b5a5bbce222cd","src\/Transactions\/Types\/ValidatorUpdate.php":"c281a203ab0b5c9da3c1e55b265a7406","tests\/Unit\/Transactions\/Builder\/ValidatorUpdateBuilderTest.php":"be3d766da787ad63ee1cd9aa830e2623"}} \ No newline at end of file +{"php":"8.3.6","version":"3.95.1:v3.95.1#a9727678fbd12997f1d9de8f4a37824ed9df1065","indent":" ","lineEnding":"\n","rules":{"array_syntax":{"syntax":"short"},"binary_operator_spaces":{"default":"single_space","operators":{"=":"align","=>":"align"}},"blank_line_after_namespace":true,"blank_line_after_opening_tag":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"braces":true,"cast_spaces":true,"class_attributes_separation":{"elements":{"const":"one","method":"one","property":"one"}},"class_definition":true,"concat_space":{"spacing":"none"},"constant_case":{"case":"lower"},"declare_equal_normalize":true,"declare_strict_types":true,"echo_tag_syntax":{"format":"long"},"elseif":true,"encoding":true,"final_internal_class":true,"full_opening_tag":true,"fully_qualified_strict_types":true,"function_declaration":true,"function_typehint_space":true,"heredoc_to_nowdoc":true,"include":true,"increment_style":{"style":"post"},"indentation_type":true,"linebreak_after_opening_tag":true,"line_ending":true,"lowercase_cast":true,"lowercase_keywords":true,"lowercase_static_reference":true,"magic_method_casing":true,"magic_constant_casing":true,"method_argument_space":true,"multiline_whitespace_before_semicolons":{"strategy":"no_multi_line"},"native_function_casing":true,"new_with_braces":true,"no_alias_functions":true,"no_blank_lines_after_class_opening":true,"no_blank_lines_after_phpdoc":true,"no_closing_tag":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["extra","throw","use","use_trait"]},"no_leading_import_slash":true,"no_leading_namespace_whitespace":true,"no_mixed_echo_print":{"use":"echo"},"no_multiline_whitespace_around_double_arrow":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_after_function_name":true,"no_spaces_around_offset":{"positions":["inside"]},"no_spaces_inside_parenthesis":true,"no_trailing_comma_in_list_call":true,"no_trailing_comma_in_singleline_array":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"no_unneeded_control_parentheses":{"statements":["break","clone","continue","echo_print","return","switch_case","yield"]},"no_unreachable_default_argument_value":true,"no_unused_imports":true,"no_useless_else":true,"no_useless_return":true,"no_whitespace_before_comma_in_array":true,"no_whitespace_in_blank_line":true,"normalize_index_brace":true,"not_operator_with_successor_space":true,"object_operator_without_whitespace":true,"ordered_class_elements":true,"ordered_imports":{"sort_algorithm":"alpha"},"php_unit_strict":true,"php_unit_test_class_requires_covers":true,"phpdoc_add_missing_param_annotation":true,"phpdoc_indent":true,"phpdoc_inline_tag_normalizer":true,"phpdoc_no_access":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_order":true,"phpdoc_scalar":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_to_comment":{"ignored_tags":["var"]},"phpdoc_trim":true,"phpdoc_types":true,"phpdoc_var_without_name":true,"psr_autoloading":true,"self_accessor":true,"semicolon_after_instruction":true,"short_scalar_cast":true,"simplified_null_return":true,"single_blank_line_at_eof":true,"single_blank_line_before_namespace":true,"single_class_element_per_statement":{"elements":["const","property"]},"single_import_per_statement":true,"single_line_after_imports":true,"single_line_comment_style":{"comment_types":["hash"]},"single_quote":true,"single_trait_insert_per_statement":true,"space_after_semicolon":true,"standardize_not_equals":true,"strict_comparison":true,"strict_param":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"ternary_operator_spaces":true,"trailing_comma_in_multiline":{"elements":["arrays"]},"trim_array_spaces":true,"unary_operator_spaces":true,"visibility_required":{"elements":["property","method","const"]},"whitespace_after_comma_in_array":true},"ruleCustomisationPolicyVersion":"null-policy","hashes":{"src\/Binary\/Hex\/Writer.php":"590df3f3343c052d96d3cbbeb317f265","src\/Binary\/Buffer\/Writer\/Buffer.php":"80ab7029c26d83449a3529f4cee7a648","src\/Binary\/Buffer\/Writer\/Concerns\/Hex.php":"320937c99c2d66a2fe5c97396a994921","src\/Binary\/Buffer\/Writer\/Concerns\/Integer.php":"1f80863a79db7a412ed78fd647ff1cdf","src\/Binary\/Buffer\/Writer\/Concerns\/UnsignedInteger.php":"2ffba9fbbc552cb15166b7c47e22cd0e","src\/Binary\/Buffer\/Writer\/Concerns\/Generic.php":"76f295b93cc3d1327bf799f57d5a978c","src\/Binary\/Buffer\/Reader\/Buffer.php":"ec09343504cca539cf6bf91aace82464","src\/Binary\/Buffer\/Reader\/Concerns\/Hex.php":"3442407232a6093352c8e2b3146169f5","src\/Binary\/Buffer\/Reader\/Concerns\/Integer.php":"978f791a745c7b99d81032ef7f182558","src\/Binary\/Buffer\/Reader\/Concerns\/UnsignedInteger.php":"6a2f2ea4c5839184a7715dc633a504bd","src\/Exceptions\/InvalidUsernameException.php":"d392da166f80b3be9bdf4ba13d1e7b89","src\/Helpers.php":"90816e6ab5e44ebcb4c31770b610fa3b","src\/Enums\/ContractAbiType.php":"6aeea79e287ad76d65dc4ad0fcdf10eb","src\/Enums\/AbiFunction.php":"a2c304273177d019681bc95912bf69d6","src\/Enums\/ContractAddresses.php":"06e2508d6640ce4572565eadbd390a20","src\/Identities\/Address.php":"83f02a9f2e101ce9ed1748bd3c0a0aab","src\/Identities\/PrivateKey.php":"a4bd870539d13f97a21e714608310804","src\/Identities\/WIF.php":"60dd95da09bb6c240acd02cd3f52a6b8","src\/Identities\/PublicKey.php":"2deb4baddcc512f012a06ce5f3b39387","src\/Binary\/Hex\/Reader.php":"e28448b92fadb2979e1db484a6afca8d","src\/ByteBuffer\/Concerns\/Writes\/Hex.php":"169cc84b5e39930c7e168d7bdbbcd37d","src\/ByteBuffer\/Concerns\/Writes\/Strings.php":"ba4ebf613b130f41b0a531dbd07c43c5","src\/ByteBuffer\/Concerns\/Writes\/Integer.php":"6f717766d8775b349f0e474902f66511","src\/ByteBuffer\/Concerns\/Writes\/Floats.php":"f3797170755677f4776f1cefbda60cb6","src\/ByteBuffer\/Concerns\/Writes\/UnsignedInteger.php":"68a9620949ef00f0b9676f2a1433d849","src\/ByteBuffer\/Concerns\/Reads\/Hex.php":"f3cc0a816b6e9469740bf59575363516","src\/ByteBuffer\/Concerns\/Reads\/Strings.php":"17238cbe09b4b870fa66b5704709f18e","src\/ByteBuffer\/Concerns\/Reads\/Integer.php":"9fa6cb50cebf03b7bf00e3b5337d9873","src\/ByteBuffer\/Concerns\/Reads\/Floats.php":"056b5c5b629a9fd0231becaded2f6973","src\/ByteBuffer\/Concerns\/Reads\/UnsignedInteger.php":"3d29cc54a05f7c6a02973e5618f821ae","src\/Utils\/RlpEncoder.php":"3f12a6053f27f931d0fabbfb91e1a7cf","src\/Utils\/TransactionUtils.php":"f185d1ce153e9422d9509ecc2f5e8475","src\/Utils\/TransactionTypeIdentifier.php":"f526604e7ba624aad82e01639ca0682a","src\/Utils\/Abi\/ArgumentDecoder.php":"6430cb971aa8e5927b62270afdec0af6","src\/Utils\/UnitConverter.php":"d716c75d97fb21408dd1b2d86d18c75d","src\/Utils\/TransactionEncoder.php":"a1cc9a1d3616cfe780d0f2c3e96c0c10","src\/Utils\/AbiEncoder.php":"e0edf2b073a0b0efe07896731846535c","src\/ByteBuffer\/LengthMap.php":"2f62d17297dc7387a39466df38b8649b","src\/ByteBuffer\/Concerns\/Transformable.php":"3d1f8aa43854c9417538e51dfdcd106f","src\/ByteBuffer\/Concerns\/Positionable.php":"86e5bc94fc7389aed28ba6fec9d7d2c2","src\/Binary\/Integer\/Reader.php":"fbe1a1af3821a1c2ee79e996a254ef2a","src\/Binary\/Integer\/Writer.php":"e6dbdb22282670b0547c66202cf25abf","src\/Binary\/UnsignedInteger\/Reader.php":"e9d87277e9f0e8cd6f3a63b6caa95ad2","src\/Binary\/UnsignedInteger\/Writer.php":"c0443907d9a5c9b2c027eca99ae775f5","src\/Utils\/Address.php":"410b85d6c0ba3764293463b48c03da91","src\/Utils\/AbiBase.php":"772be753e59f052101bc7616ecc2ca6d","src\/Utils\/RlpDecoder.php":"3fbea35725a5194184db4c650239418c","src\/Utils\/AbiDecoder.php":"034ad5743007a60ae8aa6059bcb23b86","src\/Utils\/Slot.php":"9674e711b193645b0b769514ab1d5907","src\/Utils\/Message.php":"6dc3cf7e0fe73c86d1eaa54ae0052ce7","src\/ByteBuffer\/Concerns\/Initialisable.php":"96a9455179a83ec00139d937bcd58626","src\/ByteBuffer\/Concerns\/Sizeable.php":"6b03f909020b0d15bc4c35256d85c896","src\/ByteBuffer\/Concerns\/Offsetable.php":"68179b59de54fe5a6233eb7111f6dc79","src\/ByteBuffer\/Concerns\/Readable.php":"518d72f8d0f926461b3248336640abae","src\/ByteBuffer\/Concerns\/Writeable.php":"6970a6fb60370c572f3a3febe6c3df09","src\/ByteBuffer\/ByteBuffer.php":"466a031832de383903af0251fc88be93","src\/ByteBuffer\/ByteOrder.php":"36dff8aac67cf33c653ba15e906e2680","src\/Transactions\/Builder\/EvmCallBuilder.php":"60eeff1cdc6dc59528d216db71211e49","src\/Transactions\/Builder\/TransferBuilder.php":"96ff6d1443e60e6c7ae5a37ed400a62f","src\/Transactions\/Builder\/ValidatorResignationBuilder.php":"ca8561048ac8aa2a0d623b7c327a0afd","src\/Transactions\/Builder\/UsernameRegistrationBuilder.php":"c9bb1a7376cadda5152abd5e46f0be8c","src\/Transactions\/Builder\/AbstractTransactionBuilder.php":"c984b9b1efeb4b7e389e9b01a24b5628","src\/Transactions\/Builder\/TokenTransferBuilder.php":"5a48ac7df4a614009c4b063343157ee0","src\/Transactions\/Builder\/UnvoteBuilder.php":"a37b3c38a9ce5f663579e3ce28e16ff3","src\/Transactions\/Builder\/TokenApproveBuilder.php":"c95653c20511eb4e9ba309260491a34d","src\/Transactions\/Builder\/UsernameResignationBuilder.php":"44ddc136b094777b3fb105fef647db11","src\/Transactions\/Builder\/MultipaymentBuilder.php":"562c803fa9e19a6873951f7cd1bad1c8","src\/Transactions\/Builder\/VoteBuilder.php":"02426dd1b4042447e25a64eb78188fb7","src\/Transactions\/Builder\/ValidatorRegistrationBuilder.php":"eb952b7d042301e02f0f59e4a0828ab6","src\/Transactions\/Types\/UsernameRegistration.php":"485b52c32da8b62826617708f3b4a6ec","src\/Transactions\/Types\/Vote.php":"90972b6a028a7652351655a1c1b08b34","src\/Transactions\/Types\/Multipayment.php":"b10ca169d3d37058ad7b940b48d11a8a","src\/Transactions\/Types\/EvmCall.php":"df3aa5b419b200b9eac9d5fc87d240c8","src\/Transactions\/Types\/ValidatorResignation.php":"090882c106dfa298a956bd8eeb49c447","src\/Transactions\/Types\/AbstractTransaction.php":"40881625ba6b8150415e2d6edb52d0a5","src\/Transactions\/Types\/Transfer.php":"4d3a16aa308ccf80758b212eca33b669","src\/Transactions\/Types\/ValidatorRegistration.php":"b370ae219f09706187e0ed1051f11a06","src\/Transactions\/Types\/Unvote.php":"56b3c9b921f038639f4eac0d6239e437","src\/Transactions\/Types\/UsernameResignation.php":"68848e1cd4b4d341aa7ff831481ffe31","src\/Transactions\/Serializer.php":"54487af37809b3c134efdce4e26ed1b2","src\/Networks\/Mainnet.php":"3acffe72b51707db16ad4b1a78f050b1","src\/Networks\/AbstractNetwork.php":"5b1cb5aa9830faf93a7f68023614dc1c","src\/Networks\/Testnet.php":"60f72744f4691e2da852b66e9d85a5f0","tests\/Unit\/HelpersTest.php":"40826b23445858a4968985a8c27a7da0","tests\/Unit\/Enums\/AbiFunctionTest.php":"d9ff7604b7be95adad992489c7b0f3dc","tests\/Unit\/Identities\/PrivateKeyTest.php":"19275c459ca01885ae4bf73ffcbecd33","tests\/Unit\/Identities\/PublicKeyTest.php":"e406835540aa170e6e27d24a2a36c09a","tests\/Unit\/Identities\/AddressTest.php":"0e0b7cfefdec532df286f52ce9ddee0f","tests\/Unit\/Identities\/WIFTest.php":"5619ab75730edbb32603355767e5ff70","tests\/Unit\/Binary\/Hex\/WriterTest.php":"85dad01bc8693af66bc55c40a2e603c5","tests\/Unit\/Binary\/Hex\/ReaderTest.php":"f179cd6f729f0d866518038803446228","tests\/Unit\/Binary\/Buffer\/Writer\/BufferTest.php":"6372984efaf7d2a378a7c2ebc3019f3a","tests\/Unit\/Binary\/Buffer\/Reader\/BufferTest.php":"6c6996473bf7c7d8592e3639f5326dda","tests\/Unit\/Binary\/Integer\/WriterTest.php":"64a1f07dc16c4faf2c06a3e5092a107d","tests\/Unit\/Binary\/Integer\/ReaderTest.php":"599fef4860548866a39f64e3dbb44e7d","tests\/Unit\/Binary\/UnsignedInteger\/WriterTest.php":"c10138f97a2b9f34c80d6feae77e77cc","tests\/Unit\/Binary\/UnsignedInteger\/ReaderTest.php":"c88736b794a6320cae58e6554b2cd8bc","tests\/Unit\/Utils\/TransactionEncoderTest.php":"b936edc1da350532bfc87c5443bec12c","tests\/Unit\/Utils\/TransactionUtilsTest.php":"01a1855eacb299b74a997d7dd5987774","tests\/Unit\/Utils\/AddressTest.php":"e2851e599dd5b442cbe83e9c1f28e4b9","tests\/Unit\/ByteBuffer\/Concerns\/SizeableTest.php":"d1a553d36f3fec95b857c839e2d834cb","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/IntegerTest.php":"e5124461e7a97a3e2d78e5b6f5469991","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/HexTest.php":"1abfe709a9e787f7b4e4718d5af0e65c","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/UnsignedIntegerTest.php":"4f2ed9775cd92f3d136d9d6b1cd8f25c","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/FloatsTest.php":"9b45e3276289bb0c44faf94326d6ff76","tests\/Unit\/ByteBuffer\/Concerns\/Writes\/StringsTest.php":"6f591e8733550f1ad0d231f7809ad0a5","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/IntegerTest.php":"3b113ff1f80a9e15ab7af1a29161259b","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/HexTest.php":"01aa9304919af4fa3fa6aaef2f897679","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/UnsignedIntegerTest.php":"cddc6997c7daf4c494b7a65b22823bc3","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/FloatsTest.php":"e4d5200763a77c3993047247d59b3488","tests\/Unit\/Utils\/AbiEncoderTest.php":"8e9601a7576c4e0590f9508267464ff6","tests\/Unit\/Utils\/RlpEncoderTest.php":"6710ec96e9603dbe073181e095674027","tests\/Unit\/Utils\/UnitConverterTest.php":"b4dfb4b2bdeac414b9c85b35a8e09d8c","tests\/Unit\/Utils\/AbiDecoderTest.php":"47c911cb143c9cd4e89b83568509de28","tests\/Unit\/Utils\/SlotTest.php":"ed89ae0182409d977a4faab9ca1eea95","tests\/Unit\/Utils\/RlpDecoderTest.php":"12f50e696926077dbbc1f005cbae2ef2","tests\/Unit\/Utils\/TransactionTypeIdentifierTest.php":"96b1e8b27ad9acf202c037919a7aa194","tests\/Unit\/Utils\/MessageTest.php":"71efee57f29dceda4e36e133169c5683","tests\/Unit\/Utils\/Abi\/ArgumentDecoderTest.php":"9e1fda36ecf2cde01b7db5c85658bc24","tests\/Unit\/ByteBuffer\/ByteBufferTest.php":"34237362a8d54d9c4d1610d59fedf7f8","src\/Transactions\/Deserializer.php":"b25462ab579729ededc0e51a186fd9ac","src\/Configuration\/Network.php":"d908336264d1b5c789e42fe7ba0cfe2c","src\/BLS\/HashToCurve\/G2HashToCurve.php":"104f044fbd0bfc2d871412caf6284306","src\/BLS\/ProofOfPossession.php":"e939893481a3c5c9bca061a85366fc9d","src\/BLS\/Fields\/Fp2.php":"7685c72b29900bef127170b812134086","src\/BLS\/Fields\/Fp.php":"415f741a7ae6e45436e54f3258b95363","src\/BLS\/EIP2333.php":"8ae983f54821a7d04a215ab109f240d8","src\/BLS\/Curves\/G2.php":"69e7f11b35b6f66c22265d1242b4cbed","src\/BLS\/Curves\/G1.php":"7dc863fe9fc87415120143b23bf3172b","src\/Networks\/NetworkInterface.php":"b0aff2a147eb231da8cee50012841830","tests\/Unit\/ByteBuffer\/Concerns\/Reads\/StringsTest.php":"344d7500a1776339f787c9f56be5b580","tests\/Unit\/ByteBuffer\/Concerns\/TransformableTest.php":"6230c022bbcada03e9e336e532b34b55","tests\/Unit\/ByteBuffer\/Concerns\/PositionableTest.php":"10004a8bf4ed76dc108dd5ae3db7596d","tests\/Unit\/ByteBuffer\/Concerns\/OffsetableTest.php":"6888874a372bccc480c2c7ebee35c4cf","tests\/Unit\/ByteBuffer\/Concerns\/InitialisableTest.php":"f9e38c617dea3bb087550a78fa333d2c","tests\/Unit\/ByteBuffer\/LengthMapTest.php":"7e8c04fdf23a09c06c3c77aa7dfb037a","tests\/Unit\/Transactions\/Builder\/TokenApproveBuilderTest.php":"eefe09a0b5c68542c7a33d3c2250b94b","tests\/Unit\/Transactions\/Builder\/TransferBuilderTest.php":"90a7ca6fed95fde81fc4f0d053264003","tests\/Unit\/Transactions\/Builder\/ValidatorResignationBuilderTest.php":"c744298864255a9851f85878c91fd5a6","tests\/Unit\/Transactions\/Builder\/UsernameResignationBuilderTest.php":"c3443fe93b7b10b85f33b6e3e5b6477a","tests\/Unit\/Transactions\/Builder\/TokenTransferBuilderTest.php":"d0afe43a3065f8f6c279deb940930ef5","tests\/Unit\/Transactions\/Builder\/UnvoteBuilderTest.php":"eed8e8215db82abd4a5c2994453b9772","tests\/Unit\/Transactions\/Builder\/MultipaymentBuilderTest.php":"f6aded1988aacb3c15a70885340e08f7","tests\/Unit\/Transactions\/Builder\/EvmCallBuilderTest.php":"1d95fae15d239d2eea1ab245609397da","tests\/Unit\/Transactions\/Builder\/ValidatorRegistrationBuilderTest.php":"e4bd5496e7f4263d4955e39efd7f65a0","tests\/Unit\/Transactions\/Builder\/UsernameRegistrationBuilderTest.php":"baba0df21fdb5fdedf41084b35c02cb9","tests\/Unit\/Transactions\/Builder\/VoteBuilderTest.php":"d3ec709c1e626422fa8a86eb833ae0ea","tests\/Unit\/Transactions\/Types\/TransferTest.php":"71110444ac25ca571c6dc6f855625c13","tests\/Unit\/Transactions\/Types\/ValidatorResignationTest.php":"1817a13685810de64b15df1630b11e5d","tests\/Unit\/Transactions\/Types\/EvmCallTest.php":"b37cff6589fa63bc43a196626853c208","tests\/Analysis\/AnalysisTest.php":"3dd50256922f683ee5ac773e20397598","tests\/Unit\/BLS\/EIP2333Test.php":"a7cbb6d601453304110e6e429ba9488b","tests\/Unit\/BLS\/ProofOfPossessionTest.php":"da07f67865e10035d6fde0c7d3727d9c","tests\/Unit\/Networks\/MainnetTest.php":"372a7750ae834599a0088b09a4fac760","tests\/Unit\/Networks\/TestnetTest.php":"c8dba3e353c84037c78d558548760872","tests\/Pest.php":"f56068e0b3ed7b33d7200c0d7684d2b4","tests\/Helpers.php":"362fa87b858b91ed6cb4112224fba1c2","tests\/TestCase.php":"4133b24901762dc409bb9a111c8c4853","tests\/Concerns\/Serialize.php":"5011734a689b042840e8c277c42b9a36","tests\/Concerns\/Deserialize.php":"d59555dc433a75a3e75d4483219c5e41","tests\/Concerns\/Fixtures.php":"db5b42eaf5cf381b51f8440c66669efd","tests\/Unit\/Transactions\/Types\/UnvoteTest.php":"9b57057eb1b0c17e7c783506a96c287a","tests\/Unit\/Transactions\/Types\/ValidatorRegistrationTest.php":"7b8b5c37a358ed4958a9950ca559df6e","tests\/Unit\/Transactions\/Types\/MultipaymentTest.php":"27d691ef2e4da83f8f4ff09e4c31c702","tests\/Unit\/Transactions\/Types\/UsernameRegistrationTest.php":"b5200bbac887cdbafd894d1883a593eb","tests\/Unit\/Transactions\/Types\/UsernameResignationTest.php":"69477c3478261dfdf7d4fe4eb96e0cd6","tests\/Unit\/Transactions\/Types\/VoteTest.php":"f87adb812093d3b257edae1778428c3a","tests\/Unit\/Transactions\/DeserializerTest.php":"c69a20d6f44306c0f6c136d0c6dc322a","tests\/Unit\/Transactions\/TransactionTest.php":"251c1ec6920f5aed952bfb1297ef1b1f","tests\/Unit\/Transactions\/SerializerTest.php":"6bef82d199db0b3991c9004f55074879","tests\/Unit\/Configuration\/NetworkTest.php":"fda057f8eb08ceb6c89e26e44b1acba1","src\/Identities\/LegacyAddress.php":"ddad24a8b70ed876c05032137d42b56a","src\/Transactions\/Builder\/BatchTransferBuilder.php":"61667bcef4d1bbdfce39d78721dbccc6","tests\/Unit\/Identities\/LegacyAddressTest.php":"061562efb8005bac42f41899d70f6a8e","tests\/Unit\/Transactions\/Builder\/BatchTransferBuilderTest.php":"c0961fd9bb26d6d6b0f23f2999c4ac5a","src\/Transactions\/Builder\/ValidatorUpdateBuilder.php":"74d8c0664e142c837f0b5a5bbce222cd","src\/Transactions\/Types\/ValidatorUpdate.php":"c281a203ab0b5c9da3c1e55b265a7406","tests\/Unit\/Transactions\/Builder\/ValidatorUpdateBuilderTest.php":"be3d766da787ad63ee1cd9aa830e2623","tests\/Unit\/Transactions\/LegacySecondSignatureTest.php":"e4c1a18cd6b449f2f3ece034975634d4"}} \ No newline at end of file diff --git a/src/Transactions/Deserializer.php b/src/Transactions/Deserializer.php index 59dc3e8..bd5f754 100644 --- a/src/Transactions/Deserializer.php +++ b/src/Transactions/Deserializer.php @@ -76,7 +76,9 @@ public function deserialize(): AbstractTransaction $data['s'] = $this->parseHex($decodedRlp[8]); } - // TODO: second signature handling + if (count($decodedRlp) === 10) { + $data['legacySecondSignature'] = $this->parseHex($decodedRlp[9]); + } $transaction = $this->guessTransactionFromData($data); diff --git a/src/Transactions/Types/AbstractTransaction.php b/src/Transactions/Types/AbstractTransaction.php index 2d56b64..d5d4d10 100644 --- a/src/Transactions/Types/AbstractTransaction.php +++ b/src/Transactions/Types/AbstractTransaction.php @@ -16,9 +16,15 @@ use BitWasp\Bitcoin\Crypto\EcAdapter\Signature\CompactSignatureInterface; use BitWasp\Buffertools\Buffer; use BitWasp\Buffertools\BufferInterface; +use kornrunner\Keccak; abstract class AbstractTransaction { + /** + * 0x8f ‖ "MAINSAIL_LSS_V1". + */ + private const LEGACY_SECOND_SIGNATURE_DOMAIN = '8f4d41494e5341494c5f4c53535f5631'; + public array $data; public Buffer $serialized; @@ -60,9 +66,13 @@ public function sign(PrivateKey $privateKey): static public function legacySecondSign(PrivateKey $privateKey): static { - $hash = $this->hash(skipSignature: true); + if (! isset($this->data['v'], $this->data['r'], $this->data['s']) || $this->data['v'] === '') { + throw new \RuntimeException('Transaction must be signed before adding a legacy second signature'); + } + + $hash = Keccak::hash(hex2bin(self::LEGACY_SECOND_SIGNATURE_DOMAIN.$this->hash()->getHex()), 256); - $this->data['legacySecondSignature'] = $privateKey->signToEcdsa($hash); + $this->data['legacySecondSignature'] = $privateKey->signToEcdsa(Buffer::hex($hash)); return $this; } diff --git a/src/Utils/TransactionUtils.php b/src/Utils/TransactionUtils.php index 952c2c8..456f8a7 100644 --- a/src/Utils/TransactionUtils.php +++ b/src/Utils/TransactionUtils.php @@ -18,8 +18,9 @@ class TransactionUtils * * @param array $transaction The transaction data. * @param bool $skipSignature + * @param bool $skipLegacySecondSignature */ - public static function toBuffer(array $transaction, bool $skipSignature = false): Buffer + public static function toBuffer(array $transaction, bool $skipSignature = false, bool $skipLegacySecondSignature = false): Buffer { $fields = [ self::toBeArray(isset($transaction['nonce']) ? $transaction['nonce'] : 0), @@ -34,10 +35,10 @@ public static function toBuffer(array $transaction, bool $skipSignature = false) if (! $skipSignature && isset($transaction['v'], $transaction['r'], $transaction['s']) && $transaction['v'] !== '') { $fields[] = self::toBeArray($transaction['v'] + Network::get()->chainId() * 2 + 35); - $fields[] = '0x'.$transaction['r']; - $fields[] = '0x'.$transaction['s']; + $fields[] = self::stripLeadingZeroBytes($transaction['r']); + $fields[] = self::stripLeadingZeroBytes($transaction['s']); - if (isset($transaction['legacySecondSignature'])) { + if (isset($transaction['legacySecondSignature']) && ! $skipLegacySecondSignature) { $fields[] = '0x'.$transaction['legacySecondSignature']; } } else { @@ -47,8 +48,6 @@ public static function toBuffer(array $transaction, bool $skipSignature = false) $fields[] = self::toBeArray(0); } - // TODO: second signature handling - $encoded = RlpEncoder::encode($fields); return new Buffer(hex2bin(substr($encoded, 2))); @@ -62,13 +61,22 @@ public static function toBuffer(array $transaction, bool $skipSignature = false) */ public static function toHash(array $transaction, bool $skipSignature = false): BufferInterface { - $encoding = self::toBuffer($transaction, $skipSignature); + // The transaction hash never covers the legacy second signature + $encoding = self::toBuffer($transaction, $skipSignature, skipLegacySecondSignature: true); $keccak = Keccak::hash($encoding->getBinary(), 256); return Buffer::hex($keccak); } + /** + * Strips the leading zero bytes so `r` and `s` are encoded as minimal integers. + */ + private static function stripLeadingZeroBytes(string $hex): string + { + return '0x'.preg_replace('/^(00)+/', '', $hex); + } + /** * Converts a big integer to a big-endian byte array. * diff --git a/tests/Unit/Transactions/LegacySecondSignatureTest.php b/tests/Unit/Transactions/LegacySecondSignatureTest.php new file mode 100644 index 0000000..2e9b11a --- /dev/null +++ b/tests/Unit/Transactions/LegacySecondSignatureTest.php @@ -0,0 +1,67 @@ +fixture = $this->getTransactionFixture('evm_call', 'transfer-legacy-second-signature-vector'); + + Network::set(new class($this->fixture['chainId']) extends Testnet { + public function __construct(private readonly int $id) + { + parent::__construct(); + } + + public function chainId(): int + { + return $this->id; + } + }); + + $this->unsignedData = array_diff_key($this->fixture['data'], array_flip(['legacySecondSignature', 'hash'])); +}); + +it('should sign the hash of the signed transaction with the second key', function () { + $transaction = new Transfer($this->unsignedData); + + $transaction->sign(PrivateKey::fromHex($this->fixture['privateKey'])); + + expect($transaction->serialize()->getHex())->toBe($this->fixture['signed']); + expect($transaction->hash()->getHex())->toBe($this->fixture['data']['hash']); + + $transaction->legacySecondSign(PrivateKey::fromHex($this->fixture['secondPrivateKey'])); + + expect($transaction->data['legacySecondSignature'])->toBe($this->fixture['data']['legacySecondSignature']); + expect($transaction->serialize()->getHex())->toBe($this->fixture['serialized']); + expect($transaction->hash()->getHex())->toBe($this->fixture['data']['hash']); +}); + +it('should use a 0 or 1 recovery id', function () { + $transaction = new Transfer($this->unsignedData); + + $transaction->sign(PrivateKey::fromHex($this->fixture['privateKey'])); + $transaction->legacySecondSign(PrivateKey::fromHex($this->fixture['secondPrivateKey'])); + + expect(substr($transaction->data['legacySecondSignature'], -2))->toBeIn(['00', '01']); +}); + +it('should require the primary signature first', function () { + $transaction = new Transfer($this->unsignedData); + + $transaction->legacySecondSign(PrivateKey::fromHex($this->fixture['secondPrivateKey'])); +})->throws(RuntimeException::class, 'Transaction must be signed before adding a legacy second signature'); + +it('should deserialize and hash only the first 9 fields', function () { + $transaction = Deserializer::new($this->fixture['serialized'])->deserialize(); + + expect($transaction->data['legacySecondSignature'])->toBe($this->fixture['data']['legacySecondSignature']); + expect($transaction->data['hash'])->toBe($this->fixture['data']['hash']); + expect($transaction->serialize()->getHex())->toBe($this->fixture['serialized']); + expect($transaction->verify())->toBeTrue(); +}); diff --git a/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature-vector.json b/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature-vector.json new file mode 100644 index 0000000..3039a00 --- /dev/null +++ b/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature-vector.json @@ -0,0 +1,17 @@ +{ + "chainId": 10000, + "privateKey": "314f59dbc54460b18fc036d67dac36ad6e1fa1c3c0e0b3427a84e43faabfcecb", + "secondPrivateKey": "4427335cab240f6cc651b1df5ce5ff489c5a0bcb952507b542afe8f6c90e98e7", + "data": { + "nonce": "0", + "gasPrice": "5000000000", + "gasLimit": "21000", + "to": "0x0DFeDD974c2e58Dc8E292ec159d1DC9AdeaFb1C0", + "value": "1000000000000000000", + "data": "", + "legacySecondSignature": "ea77adb968255ec1570c0e48cede8cceec3a9aff29e9dac1c53c2a6de4f2a18740df289edfcdfe97a189975cba8945334e5f230d66232751e468c5500dbe7dec01", + "hash": "27af7a389f34f32569c90815ced4e23e8770eb2d77ace6f29dabec1a10bef205" + }, + "signed": "f86e8085012a05f200825208940dfedd974c2e58dc8e292ec159d1dc9adeafb1c0880de0b6b3a764000080824e44a00f4f4ac7f1effa669ea1a8970ed37f367e4aa0b549636619feead2d4a2408ffca04492af59379f74385bd951d229456b3b23ead33ce1d10106535c6830a688733d", + "serialized": "f8b18085012a05f200825208940dfedd974c2e58dc8e292ec159d1dc9adeafb1c0880de0b6b3a764000080824e44a00f4f4ac7f1effa669ea1a8970ed37f367e4aa0b549636619feead2d4a2408ffca04492af59379f74385bd951d229456b3b23ead33ce1d10106535c6830a688733db841ea77adb968255ec1570c0e48cede8cceec3a9aff29e9dac1c53c2a6de4f2a18740df289edfcdfe97a189975cba8945334e5f230d66232751e468c5500dbe7dec01" +} diff --git a/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature.json b/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature.json index b803943..58de4b8 100644 --- a/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature.json +++ b/tests/fixtures/transactions/evm_call/transfer-legacy-second-signature.json @@ -10,10 +10,10 @@ "v": 0, "r": "a1f79cb40a4bb409d6cebd874002ceda3ec0ccb614c1d8155f5c2f7f798135f9", "s": "2d2ef517aaf6feed747385e260c206f46b2ce9d6b2a585427a111685a097bd79", - "legacySecondSignature": "094b33b2d10c4d48cff9a9b10f79990c9a902a762b00d2f2a4d2ddad7823b59332b2da193265068c67cefea9ca8bc84e47acec406f3300a0a10b77a56ea8c18801", + "legacySecondSignature": "a7576f15a3eb2b4cb54b83e97d25b70c88efb63c783120b81ab0eb4a958631d444347954726642779f019de3db05f568e78915b7f9cf319f7deb093353fa245b01", "senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d", "from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd", "hash": "a39435ec5de418e77479856d06a653efc171afe43e091472af22ee359eeb83be" }, - "serialized": "f8ad0185012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb228405f5e10080825c6ba0a1f79cb40a4bb409d6cebd874002ceda3ec0ccb614c1d8155f5c2f7f798135f9a02d2ef517aaf6feed747385e260c206f46b2ce9d6b2a585427a111685a097bd79b841094b33b2d10c4d48cff9a9b10f79990c9a902a762b00d2f2a4d2ddad7823b59332b2da193265068c67cefea9ca8bc84e47acec406f3300a0a10b77a56ea8c18801" + "serialized": "f8ad0185012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb228405f5e10080825c6ba0a1f79cb40a4bb409d6cebd874002ceda3ec0ccb614c1d8155f5c2f7f798135f9a02d2ef517aaf6feed747385e260c206f46b2ce9d6b2a585427a111685a097bd79b841a7576f15a3eb2b4cb54b83e97d25b70c88efb63c783120b81ab0eb4a958631d444347954726642779f019de3db05f568e78915b7f9cf319f7deb093353fa245b01" }