diff --git a/Cargo.lock b/Cargo.lock index a3dd8c7b3a..ab9b7c2904 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1576,14 +1576,13 @@ dependencies = [ [[package]] name = "fvm_ipld_kamt" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "270444092b6cb62319b5a8f1ca6ae21265d31e0c818019e9ebd63cf8b2d51cb5" +checksum = "105c2b4cfe7f633fdc55f09daa3d62d1c0cf143a4a8f9199ad6f89a67dee9cf8" dependencies = [ "anyhow", "byteorder", "cid", - "forest_hash_utils", "fvm_ipld_blockstore", "fvm_ipld_encoding", "multihash-codetable", diff --git a/Cargo.toml b/Cargo.toml index bd731bf3c3..6f13c5b95a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -135,7 +135,7 @@ fvm_shared = "4.6.0" fvm_ipld_encoding = "0.5.2" fvm_ipld_blockstore = "0.3.0" fvm_ipld_hamt = "0.10.2" -fvm_ipld_kamt = "0.4.3" +fvm_ipld_kamt = "0.4.4" fvm_ipld_amt = { version = "0.7.3" } fvm_ipld_bitfield = "0.7.0" diff --git a/actors/evm/tests/contracts/recall_contract/README.md b/actors/evm/tests/contracts/recall_contract/README.md new file mode 100644 index 0000000000..24d67a90d6 --- /dev/null +++ b/actors/evm/tests/contracts/recall_contract/README.md @@ -0,0 +1,10 @@ +# Recall Contract + +This directory contains compiled copies of https://github.com/recallnet taken from mainnet contracts. + +- Proxy contract: 0xf0438cd20Fa4855997297A9C1299469CA10b58bf +- Implementation contract: 0x1835374384AA51B169c0705DA26A84bB760F2B37 + +We're using these to reproduce https://github.com/recallnet/contracts/issues/98 + +These contracts are copyright 2025 the Recall Contributors, available under either the MIT or the Apache-2.0 license. diff --git a/actors/evm/tests/contracts/recall_contract/implementation.hex b/actors/evm/tests/contracts/recall_contract/implementation.hex new file mode 100644 index 0000000000..d4eef49f2d --- /dev/null +++ b/actors/evm/tests/contracts/recall_contract/implementation.hex @@ -0,0 +1 @@ +60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161333b90816100ed823960805181818161178901526118a80152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146123a85750806306fdde03146122a7578063095ea7b31461217957806309c6bed914612128578063129d8188146120f057806318160ddd1461209657806323b872dd14612038578063248a9ca314611fc85780632f2ff15d14611f4d578063313ce56714611f1457806336568abe14611e8c5780633f4ba83a14611d9357806340c10f1914611ba657806342966c6814611b635780634f1ef2861461180157806352d1902d146117445780635c975abb146116e557806370a082311461166357806375b238fc1461160b57806379cc6790146115b55780638456cb591461146457806391d14854146113d057806395d89b4114611280578063a217fddf14611248578063a60fee3714611102578063a9059cbb146110aa578063ad3cb1cc1461102f578063bc0ba3c514610eeb578063be13f47c146103d0578063d539139314610377578063d547741f146102f2578063d5f39488146102a1578063dd62ed3e146101ef5763e63ab1e914610194575f80fd5b346101ec57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b80fd5b50346101ec5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec576102276124ac565b73ffffffffffffffffffffffffffffffffffffffff61028b6102476124cf565b9273ffffffffffffffffffffffffffffffffffffffff165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b91165f52602052602060405f2054604051908152f35b50346101ec57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101ec5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec576103736004356103306124cf565b9061036e610369825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b612846565b612cef565b5080f35b50346101ec57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec5760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b50346101ec5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec576104086124ac565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159067ffffffffffffffff811680159081610ee3575b6001149081610ed9575b159081610ed0575b50610ea8578160017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610e53575b5060409182516104bc84826124f2565b600681527f526563616c6c000000000000000000000000000000000000000000000000000060208201528351906104f385836124f2565b600682527f524543414c4c00000000000000000000000000000000000000000000000000006020830152610525613215565b61052d613215565b80519067ffffffffffffffff8211610e2657819061056b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03546125c8565b601f8111610d99575b50602090601f8311600114610cbc578892610cb1575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03555b80519067ffffffffffffffff8211610c84576106187f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04546125c8565b601f8111610c02575b50602090601f8311600114610b0d5773ffffffffffffffffffffffffffffffffffffffff939291879183610b02575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04555b6106aa613215565b6106b2613215565b6106ba613215565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330055610728613215565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155602435600255337fffffffffffffffffffffffff0000000000000000000000000000000000000000845416178355610789336128cc565b50610793336129d5565b5061079d33612ad9565b507f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775600183852001547f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a685527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205281600185872001557f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a67fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8680a47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775600183852001547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a85527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205281600185872001557f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a7fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8680a47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775600183852001548185527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020528160018587200155817fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8680a4610a6f575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555160018152a180f35b015190505f80610650565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04875281872091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416885b818110610bea575091600193918573ffffffffffffffffffffffffffffffffffffffff97969410610bb3575b505050811b017f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04556106a2565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080610b86565b92936020600181928786015181550195019301610b5a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0487527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510610c7a575b601f0160051c01905b818110610c6f5750610621565b878155600101610c62565b9091508190610c59565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b015190505f8061058a565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038952818920927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016895b818110610d815750908460019594939210610d4a575b505050811b017f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03556105dc565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080610d1d565b92936020600181928786015181550195019301610d07565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0389529091507f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510610e1c575b90601f859493920160051c01905b818110610e0e5750610574565b898155849350600101610e01565b9091508190610df3565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6104ac565b6004847ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f610459565b303b159150610451565b839150610447565b5060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec578060043567ffffffffffffffff811161102c57610f3790369060040161259a565b9060243567ffffffffffffffff811161102757610f5890369060040161259a565b9260643567ffffffffffffffff811161102357610f7990369060040161259a565b919093610f8461276b565b73ffffffffffffffffffffffffffffffffffffffff6001541692610fa6612619565b90843b1561101f578896610ff092604051998a98899788977f70756cde00000000000000000000000000000000000000000000000000000000895260443594339060048b01612707565b039134905af18015611014576110035750f35b8161100d916124f2565b6101ec5780f35b6040513d84823e3d90fd5b8880fd5b8580fd5b505050fd5b50fd5b50346101ec57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec57506110a66040516110706040826124f2565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829182612464565b0390f35b50346101ec5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ec576110f76110e56124ac565b6110ed61276b565b6024359033612f97565b602060405160018152f35b5060a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576111356124ac565b60243567ffffffffffffffff81116112445761115590369060040161259a565b919060443567ffffffffffffffff81116112445761117790369060040161259a565b9260643560843567ffffffffffffffff81116112445761119b90369060040161259a565b6111a9839592953386612df7565b6111b161276b565b73ffffffffffffffffffffffffffffffffffffffff60015416946111d3612619565b93863b15611244575f98611217946040519b8c9a8b998a997f70756cde000000000000000000000000000000000000000000000000000000008b5260048b01612707565b039134905af180156112395761122b575080f35b61123791505f906124f2565b005b6040513d5f823e3d90fd5b5f80fd5b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445760206040515f8152f35b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576040515f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04546112dd816125c8565b808452906001811690811561138e5750600114611311575b6110a683611305818503826124f2565b60405191829182612464565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace045f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b808210611374575090915081016020016113056112f5565b91926001816020925483858801015201910190929161135c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061130590506112f5565b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576114076124cf565b6004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060ff60405f2054166040519015158152f35b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457335f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff1615611565576114d061276b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60245260445ffd5b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576112376115ef6124ac565b602435906115fb61276b565b611606823383612df7565b6130ed565b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445760206040517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b346112445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445773ffffffffffffffffffffffffffffffffffffffff6116af6124ac565b165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052602060405f2054604051908152f35b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036117d95760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576118336124ac565b6024359067ffffffffffffffff821161124457366023830112156112445781600401359061186082612560565b9161186e60405193846124f2565b8083526020830193366024838301011161124457815f9260246020930187378401015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611b21575b506117d9576118e06127be565b73ffffffffffffffffffffffffffffffffffffffff8116926040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181611aed575b5061196057847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc869203611ac25750823b15611a9757807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2825115611a65575f8091611237945190845af43d15611a5d573d91611a4183612560565b92611a4f60405194856124f2565b83523d5f602085013e61326c565b60609161326c565b50505034611a6f57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d602011611b19575b81611b09602093836124f2565b810103126112445751908661192f565b3d9150611afc565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415846118d3565b346112445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457611b9a61276b565b611237600435336130ed565b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457611bdd6124ac565b60243590611be961276b565b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090205460ff1615611d435773ffffffffffffffffffffffffffffffffffffffff16908115611d17577f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490808201809211611cea5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f937f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02558484527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00825260408420818154019055604051908152a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a660245260445ffd5b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457611dc96127be565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615611e64577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457611ec36124cf565b3373ffffffffffffffffffffffffffffffffffffffff821603611eec5761123790600435612cef565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457602060405160128152f35b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457611237600435611f8a6124cf565b90611fc3610369825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b612bdd565b346112445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445760206120306004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b346112445760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576110f76120726124ac565b61207a6124cf565b6044359161208661276b565b612091833383612df7565b612f97565b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112445760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576020612030612619565b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346112445760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576121b06124ac565b602435906121bc61276b565b331561227b5773ffffffffffffffffffffffffffffffffffffffff1690811561224f57335f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260409020825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b34611244575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611244576040515f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0354612304816125c8565b808452906001811690811561138e575060011461232b576110a683611305818503826124f2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace035f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061238e575090915081016020016113056112f5565b919260018160209254838588010152019101909291612376565b346112445760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261124457600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361124457817f7965db0b000000000000000000000000000000000000000000000000000000006020931490811561243a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483612433565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361124457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361124457565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761253357604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161253357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9181601f840112156112445782359167ffffffffffffffff8311611244576020838186019501011161124457565b90600182811c9216801561260f575b60208310146125e257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916125d7565b73ffffffffffffffffffffffffffffffffffffffff60015416602073ffffffffffffffffffffffffffffffffffffffff5f541660446002549160405194859384927fa5269ef1000000000000000000000000000000000000000000000000000000008452600484015260248301525afa908115611239575f9161269a575090565b90506020813d6020116126c1575b816126b5602093836124f2565b81010312611244575190565b3d91506126a8565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b94926127559473ffffffffffffffffffffffffffffffffffffffff6127689b999a989461274794895216602088015260c0604088015260c08701916126c9565b9184830360608601526126c9565b93608082015260a08185039101526126c9565b90565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541661279657565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16156127f657565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f2054161561289d5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff166129d05773ffffffffffffffffffffffffffffffffffffffff165f8181527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090205460ff166129d05773ffffffffffffffffffffffffffffffffffffffff165f8181527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d46020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff166129d05773ffffffffffffffffffffffffffffffffffffffff165f8181527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f14612ce957805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f14612ce957805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b9192612e408373ffffffffffffffffffffffffffffffffffffffff165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2054928484105f14612eb557505073ffffffffffffffffffffffffffffffffffffffff907ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b90937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8403612ee5575b50505050565b8303928311611cea5773ffffffffffffffffffffffffffffffffffffffff81161561227b5773ffffffffffffffffffffffffffffffffffffffff82161561224f57612f8273ffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff165f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160205260405f2090565b91165f5260205260405f20555f808080612edf565b73ffffffffffffffffffffffffffffffffffffffff169081156130c15773ffffffffffffffffffffffffffffffffffffffff16918215611d1757815f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260405f205481811061308f57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0084520360405f2055845f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00825260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b90919073ffffffffffffffffffffffffffffffffffffffff1680156130c157805f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0060205260405f20548381106131e2576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace008452036040862055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0255604051908152a3565b91507fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561324457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b906132a9575080511561328157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806132fc575b6132ba575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156132b256fea2646970667358221220b9c00e6f9224da766d1a42df1f1dd443185b4b870db0fc098429576738b8820964736f6c634300081a0033 \ No newline at end of file diff --git a/actors/evm/tests/contracts/recall_contract/proxy.hex b/actors/evm/tests/contracts/recall_contract/proxy.hex new file mode 100644 index 0000000000..6800c925db --- /dev/null +++ b/actors/evm/tests/contracts/recall_contract/proxy.hex @@ -0,0 +1 @@ +60806040526102a88038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b604051608d908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b630a12f52160e11b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea2646970667358221220d84369ae6f98a27679b5d10b53558f46164239ede3a4126e04298270c4193fd364736f6c634300081a00330000000000000000000000001835374384aa51b169c0705da26a84bb760f2b3700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000044be13f47c000000000000000000000000b5fb4be02232b1bba4dc8f81dc24c26980de9e3c341bb76302c76fb57d6fe6c003c4fc68e56cbe5c5a4c04bedf1522a15c7e41a000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/integration_tests/src/tests/evm_test.rs b/integration_tests/src/tests/evm_test.rs index 8ea1f41479..4180eb35d5 100644 --- a/integration_tests/src/tests/evm_test.rs +++ b/integration_tests/src/tests/evm_test.rs @@ -712,6 +712,94 @@ pub fn evm_staticcall_delegatecall_test(v: &dyn VM) { } } +#[allow(non_snake_case)] +#[vm_test] +pub fn evm_constructor_delegatecall_regression_test(v: &dyn VM) { + const IMP_INITCODE: &str = + include_str!("../../../actors/evm/tests/contracts/recall_contract/implementation.hex"); + const PROXY_INITCODE: &str = + include_str!("../../../actors/evm/tests/contracts/recall_contract/proxy.hex"); + + // Create accounts for deployment + let deployer = create_accounts(v, 1, &TokenAmount::from_whole(10_000))[0]; + + // 1. Deploy the implementation contract + let imp_bytecode = hex::decode(IMP_INITCODE).unwrap(); + let imp_deploy_result = v + .execute_message( + &deployer, + &EAM_ACTOR_ADDR, + &TokenAmount::zero(), + fil_actor_eam::Method::CreateExternal as u64, + Some(serialize_ok(&fil_actor_eam::CreateExternalParams(imp_bytecode))), + ) + .unwrap(); + + assert!( + imp_deploy_result.code.is_success(), + "Failed to deploy implementation contract: {}", + imp_deploy_result.message + ); + + let imp_return: fil_actor_eam::CreateExternalReturn = imp_deploy_result + .ret + .unwrap() + .deserialize() + .expect("Failed to decode implementation deployment results"); + + // Make sure we deployed an EVM actor + assert_eq!(&v.actor(&Address::new_id(imp_return.actor_id)).unwrap().code, &*EVM_ACTOR_CODE_ID); + + // 2. Deploy the proxy contract with implementation address in constructor, replacing the + // mainnet implementation address. + let proxy_initcode_fixed = PROXY_INITCODE.replace( + "1835374384aa51b169c0705da26a84bb760f2b37", + &hex::encode(imp_return.eth_address.0), + ); + let proxy_initcode = hex::decode(proxy_initcode_fixed).unwrap(); + + let proxy_deploy_result = v + .execute_message( + &deployer, + &EAM_ACTOR_ADDR, + &TokenAmount::zero(), + fil_actor_eam::Method::CreateExternal as u64, + Some(serialize_ok(&fil_actor_eam::CreateExternalParams(proxy_initcode))), + ) + .unwrap(); + + assert!( + proxy_deploy_result.code.is_success(), + "Failed to deploy proxy contract: {}", + proxy_deploy_result.message + ); + + let proxy_return: fil_actor_eam::CreateExternalReturn = proxy_deploy_result + .ret + .unwrap() + .deserialize() + .expect("Failed to decode proxy deployment results"); + + let proxy_robust_addr = proxy_return.robust_address.unwrap(); + + // Try to mint: + const PARAMS: &str = "40c10f1900000000000000000000000090f79bf6eb2c4f870365e785982e1f101e93b9060000000000000000000000000000000000000000000000008ac7230489e80000"; + let params = hex::decode(PARAMS).unwrap(); + + let mint_result = v + .execute_message( + &deployer, + &proxy_robust_addr, + &TokenAmount::zero(), + fil_actor_evm::Method::InvokeContract as u64, + Some(serialize_ok(&ContractParams(params))), + ) + .unwrap(); + + assert!(mint_result.code.is_success(), "Failed to mint: {}", mint_result.message); +} + +#[allow(non_snake_case)] #[vm_test] pub fn evm_init_revert_data_test(v: &dyn VM) { let account = create_accounts(v, 1, &TokenAmount::from_whole(10_000))[0]; diff --git a/test_vm/tests/suite/evm_test.rs b/test_vm/tests/suite/evm_test.rs index 6d39e12d97..1d1181b4ea 100644 --- a/test_vm/tests/suite/evm_test.rs +++ b/test_vm/tests/suite/evm_test.rs @@ -1,7 +1,8 @@ use fil_actors_integration_tests::tests::{ - evm_call_test, evm_create_test, evm_delegatecall_test, evm_empty_initcode_test, - evm_eth_create_external_test, evm_init_revert_data_test, evm_staticcall_delegatecall_test, - evm_staticcall_test, evm_transient_nested_test, evm_transient_reentry_test, + evm_call_test, evm_constructor_delegatecall_regression_test, evm_create_test, + evm_delegatecall_test, evm_empty_initcode_test, evm_eth_create_external_test, + evm_init_revert_data_test, evm_staticcall_delegatecall_test, evm_staticcall_test, + evm_transient_nested_test, evm_transient_reentry_test, }; use fil_actors_runtime::test_blockstores::MemoryBlockstore; use test_vm::TestVM; @@ -54,6 +55,13 @@ fn evm_staticcall_delegatecall() { evm_staticcall_delegatecall_test(&v); } +#[test] +fn evm_constructor_delegatecall_regression() { + let store = MemoryBlockstore::new(); + let v = TestVM::new_with_singletons(store); + evm_constructor_delegatecall_regression_test(&v); +} + #[test] fn evm_init_revert_data() { let store = MemoryBlockstore::new();