Skip to content
Open
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f8c9083
feat: migrate interop-b tests from zksync-era to Anvil multichain har…
valera-grinenko-ai Apr 2, 2026
be18753
feat: add chain 14 with custom ERC20 base token for cross-base-token …
valera-grinenko-ai Apr 3, 2026
b1ff6c3
feat: regenerate v0.29.0 chain states with chain 14 (custom base token)
valera-grinenko-ai Apr 3, 2026
eefd41d
fix: regenerate v0.29.0 chain states with correct protocol version (v29)
valera-grinenko-ai Apr 3, 2026
ed4ec5d
style: format v0.29.0 chain state JSON files with prettier
valera-grinenko-ai Apr 4, 2026
28885e0
fix: address PR review — derive selectors from ABI, load bytecode fro…
valera-grinenko-ai Apr 6, 2026
7ea3b46
refactor: comprehensive test quality improvements
valera-grinenko-ai Apr 6, 2026
7529e27
style: fix prettier formatting
valera-grinenko-ai Apr 6, 2026
6370f80
fix: add IERC7786Attributes ABI to zkstack-out for CI compatibility
valera-grinenko-ai Apr 6, 2026
411609a
fix: embed DummyInteropRecipient bytecode for CI compatibility
valera-grinenko-ai Apr 6, 2026
30aa518
fix: add IERC7786Attributes to copy-to-zkstack-out script
valera-grinenko-ai Apr 6, 2026
0fc3b8e
fix: add trailing newline to IERC7786Attributes.json
valera-grinenko-ai Apr 6, 2026
3095784
fix: remove migration language from spec 08 comment
valera-grinenko-ai Apr 8, 2026
da0a0e8
fix: use different addresses for executionAddress and unbundlerAddress
valera-grinenko-ai Apr 8, 2026
103bd17
feat: randomize test amounts per test to avoid value-specific passes
valera-grinenko-ai Apr 8, 2026
c76763e
fix: load DummyInteropRecipient from zkstack-out, improve expectRevert
valera-grinenko-ai Apr 8, 2026
e0adb62
fix: regenerate v0.31.0 chain states after rebase on draft-v31
valera-grinenko-ai Apr 8, 2026
f955f52
fix: tighten interop-b revert assertions
valera-grinenko-ai Apr 8, 2026
d4718c3
fix: stabilize interop-b CI checks
valera-grinenko-ai Apr 8, 2026
54e2957
fix: sync DummyInteropRecipient zkstack artifact
valera-grinenko-ai Apr 9, 2026
493f14f
refactor: derive interop custom error selectors from ABI
valera-grinenko-ai Apr 9, 2026
5895863
fix: sync zkstack artifact and lint import style
valera-grinenko-ai Apr 9, 2026
fd3aed2
fix: serialize DummyInteropRecipient artifact like copy script
valera-grinenko-ai Apr 9, 2026
1507e14
docs: add suite overviews for interop specs
valera-grinenko-ai Apr 9, 2026
2f61058
refactor: load anvil deploy bytecode from forge out
valera-grinenko-ai Apr 9, 2026
50c69a0
test: simplify interop unbundle status assertions
valera-grinenko-ai Apr 9, 2026
ba37272
test: cover interop fixed-fee flows in anvil
valera-grinenko-ai Apr 9, 2026
de23f31
style: format regenerated anvil chain states
valera-grinenko-ai Apr 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions l1-contracts/scripts/copy-to-zkstack-out.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ const REQUIRED_CONTRACTS = [
"ISetupLegacyBridge.sol",
"DefaultUpgrade.sol",
// Used by anvil-interop test suite (contracts.ts)
"DummyInteropRecipient.sol",
"GWAssetTracker.sol",
"L2Bridgehub.sol",
"InteropCenter.sol",
Expand All @@ -62,6 +63,7 @@ const REQUIRED_CONTRACTS = [
"TestnetERC20Token.sol",
"L1AssetRouter.sol",
"InteropHandler.sol",
"IERC7786Attributes.sol",
"L2ComplexUpgrader.sol",
"L2GenesisUpgrade.sol",
"L2MessageRoot.sol",
Expand All @@ -75,6 +77,10 @@ const REQUIRED_CONTRACTS = [
"BaseTokenHolder.sol",
];

// Some Anvil interop tests deploy contracts from committed zkstack-out artifacts,
// so these entries must keep forge bytecode instead of being reduced to ABI-only JSON.
const FULL_ARTIFACT_CONTRACTS = new Set(["DummyInteropRecipient.sol"]);

async function copyContractAbi(src: string, dest: string): Promise<void> {
await fs.mkdir(dest, { recursive: true });
const entries = await fs.readdir(src, { withFileTypes: true });
Expand All @@ -86,12 +92,13 @@ async function copyContractAbi(src: string, dest: string): Promise<void> {
if (entry.isDirectory()) {
await copyContractAbi(srcPath, destPath);
} else if (entry.name.endsWith(".json")) {
// Read the JSON file, extract the ABI, and write it back
// Read the JSON file and either keep the full artifact or reduce to ABI-only JSON.
const content = await fs.readFile(srcPath, "utf-8");
const json = JSON.parse(content);

// Extract just the ABI field
if (json.abi) {
if (FULL_ARTIFACT_CONTRACTS.has(path.basename(src))) {
await fs.writeFile(destPath, JSON.stringify(json, null, 2));
} else if (json.abi) {
await fs.writeFile(destPath, JSON.stringify(json.abi, null, 2));
} else {
console.warn(`Warning: No ABI found in ${srcPath}`);
Expand Down
430 changes: 349 additions & 81 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/10.json

Large diffs are not rendered by default.

430 changes: 349 additions & 81 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/11.json

Large diffs are not rendered by default.

440 changes: 354 additions & 86 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/12.json

Large diffs are not rendered by default.

376 changes: 322 additions & 54 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/13.json

Large diffs are not rendered by default.

640 changes: 640 additions & 0 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/14.json

Large diffs are not rendered by default.

29,624 changes: 27,483 additions & 2,141 deletions l1-contracts/test/anvil-interop/chain-states/v0.29.0/31337.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,47 +1,52 @@
{
"l1Addresses": {
"bridgehub": "0xa8c43993c2895D5c6409D79d7a1E4ac773f708b6",
"l1SharedBridge": "0x9F4abD48770A7a2a016Fc52DFddD73a7FE1BBcD0",
"l1NullifierProxy": "0x492c938dDCd7844c81eAAa1271931ae112F7C0ea",
"l1NativeTokenVault": "0x833bD0dDd196Dc7e4c50548Cbdf36cB2A2b52e58",
"l1AssetTracker": "0xFaB6Aae9Dc64b10C8f22a8Ac24e8dc127fbb5aF3",
"l1ERC20Bridge": "0x4b0107e08400EA7bDCc96371BfeD55E523A0ef4d",
"governance": "0x07Cf1e0Ac582BB262c83303Cc47Ac61247bEEa23",
"transparentProxyAdmin": "0xA5A83455C6e48a5eB3A8d4ED8D0c53C3668e08b1",
"messageRoot": "0xD21d5b35F69c9137882751884139b6F87746ddF8",
"ctmDeploymentTracker": "0x4701D5691D410267F843877Fcb82C73dc10b8d7D"
"bridgehub": "0x6Cc160222EaFE8498E336f57b4f97303aD6d72CB",
"l1SharedBridge": "0xaAe819daDCfE23b81Bb712D59426E1Fc1Be210fB",
"l1NullifierProxy": "0xb5756a56934985a642DDdE452eAE1Dfa22114317",
"l1NativeTokenVault": "0x381329753DE5b84a3cCB07204AEd6832272Feb28",
"l1AssetTracker": "0xA10483df5b43699317Bdfb098A743cfe5f33d21e",
"l1ERC20Bridge": "0xCb68dc8cFa270732ec19D54b988f60762279b646",
"governance": "0x1834E7241EdEF674481F7Edb3A37a4588719893b",
"transparentProxyAdmin": "0xc17A879f121a9d57Ec4538488A10F62fc7E93Ed4",
"messageRoot": "0xB498bF71BCF077CA61156000b54A34e28aED506C",
"ctmDeploymentTracker": "0x13fb878A80C4f29ddBad7Af274105FDBfc67F426"
},
"ctmAddresses": {
"chainTypeManager": "0x06264314F4b1629aCf8C247491CA98CfB10e7eeF",
"chainAdmin": "0xa209705fD87557A2236349e228f7BEe7cA05624e",
"adminFacet": "0x5BD2e0944793fC0039061F9310feA5a1daf45c60",
"gettersFacet": "0x74a3BFf53860880b314ff3911A45A12239C5A373",
"mailboxFacet": "0x4314B4E88Ae81B75FCB88d08F28406B6D10b2B88",
"executorFacet": "0xe36edbe0997394b46e88024F628DE6D15d665142",
"verifier": "0xAf3Da4a14028D023E88fDfB8aD33fe49a7b47A10"
"chainTypeManager": "0x1bbfe0aF215c21A824681a1Df59F0BA6023d35AD",
"chainAdmin": "0x5D6eAE44f2eb0Ce11ffca13Ce207a459B00005C9",
"adminFacet": "0xb0c72c24401dAEB57dF1159DE1Fb27176a61829D",
"gettersFacet": "0x9d8E8e204a110DfdEb1bb69637151F373492fF5f",
"mailboxFacet": "0x910ba329A2D06431A6c43401e330cdd3247183D6",
"executorFacet": "0xB6cd8f988871b4a91279F9b219F80e9265BbD1e1",
"verifier": "0x20F58047bDcCCeca84D4Ec84a9C9CEfB95AD2Fc3"
},
"chainAddresses": [
{
"chainId": 10,
"diamondProxy": "0x7D6E87fcb9dAE20F0422C64A0b72245D8Aa80A11"
"diamondProxy": "0x467Dcdc47D9498d6fAF3B8152BD6D8b03e5870aB"
},
{
"chainId": 11,
"diamondProxy": "0x3C42C3B0AFA3Fb6E41F66FF5c2e541759cf98159"
"diamondProxy": "0xce0Ce434934eB67bCeb89f987f1b7E0F72747957"
},
{
"chainId": 12,
"diamondProxy": "0xE8336a70E578938548356c918e9aE14e8B8C8B26"
"diamondProxy": "0x4D5Cd4fD522f9E761A8059ee1deC559c96a29AF2"
},
{
"chainId": 13,
"diamondProxy": "0x38C33027681EaAEf60220722c048c69879099552"
"diamondProxy": "0xef228091C58048ab41c525c066037cf6df941ff4"
},
{
"chainId": 14,
"diamondProxy": "0x65f0675872693c595A9eD35845551cfdFdAcf363"
}
],
"testTokens": {
"10": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
"11": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
"12": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
"13": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
"13": "0x5FbDB2315678afecb367f032d93F642f64180aa3",
"14": "0x5FbDB2315678afecb367f032d93F642f64180aa3"
}
}
78 changes: 39 additions & 39 deletions l1-contracts/test/anvil-interop/chain-states/v0.31.0/10.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"block": {
"number": "0x4",
"beneficiary": "0x0000000000000000000000000000000000000000",
"timestamp": "0x2d",
"timestamp": "0x4a",
"gas_limit": 100000000,
"basefee": 682487809,
"difficulty": "0x0",
"prevrandao": "0x708cce2c46e8383bddb837b52b3b094456d0624ca26adb03f1ecf7b5b6aec03f",
"prevrandao": "0xb2d64d6ff0c61b70f79d7334e357e2398cc10ba36a76f059ad62c62d48708cda",
"blob_excess_gas_and_price": {
"excess_blob_gas": 0,
"blob_gasprice": 1
Expand Down Expand Up @@ -384,6 +384,33 @@
},
"best_block_number": 4,
"blocks": [
{
"header": {
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0x0000000000000000000000000000000000000000",
"stateRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x0",
"number": "0x0",
"gasLimit": "0x5f5e100",
"gasUsed": "0x0",
"timestamp": "0x1",
"extraData": "0x",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"baseFeePerGas": "0x3b9aca00",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"blobGasUsed": "0x0",
"excessBlobGas": "0x0",
"parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"transactions": [],
"ommers": []
},
{
"header": {
"parentHash": "0xbe5774d5e042f5fc82ae42ac00ada20a460a2ed088fd28da209b027bbe4041b4",
Expand All @@ -397,7 +424,7 @@
"number": "0x1",
"gasLimit": "0x5f5e100",
"gasUsed": "0x573eda",
"timestamp": "0x24",
"timestamp": "0x25",
"extraData": "0x",
"mixHash": "0xcd7abcd3762e0a0eabfdc6b3f72564423c2a92e458cd2c0478e81ad1f7e9a0ed",
"nonce": "0x0000000000000000",
Expand Down Expand Up @@ -435,7 +462,7 @@
},
{
"header": {
"parentHash": "0x540404dc298feac61ede23eb0568c0aa1c92edc3a40759fcf4bc581c550a5b3d",
"parentHash": "0x08cec1e2c1f8da3613b6b96e8fbc0e08530a376007e6eef34b360046fa203b7d",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0x0000000000000000000000000000000000000000",
"stateRoot": "0x287eaa8d10d09b4b940565d62d8cb39c3e5f294cad945b09cd439e7192fe57d4",
Expand All @@ -446,9 +473,9 @@
"number": "0x2",
"gasLimit": "0x5f5e100",
"gasUsed": "0xc533",
"timestamp": "0x24",
"timestamp": "0x25",
"extraData": "0x",
"mixHash": "0x12521558b6a007af9df06f7e1da2721ee5a46247366528320df69a3f1ce3507c",
"mixHash": "0x94d0f79a3df27f58c45260c47be4586772c978757ed044f1f395cac36bffadba",
"nonce": "0x0000000000000000",
"baseFeePerGas": "0x35018de1",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
Expand Down Expand Up @@ -484,34 +511,7 @@
},
{
"header": {
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0x0000000000000000000000000000000000000000",
"stateRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x0",
"number": "0x0",
"gasLimit": "0x5f5e100",
"gasUsed": "0x0",
"timestamp": "0x1",
"extraData": "0x",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"baseFeePerGas": "0x3b9aca00",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"blobGasUsed": "0x0",
"excessBlobGas": "0x0",
"parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
"requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"transactions": [],
"ommers": []
},
{
"header": {
"parentHash": "0x38cbc91007cb0ee58a3463cb686f528ba1c9b9766063adbe264de246e710c637",
"parentHash": "0x27a103dd7f59618100147b88227ad7e6a8e63125a51e785326ee01324567a670",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0x0000000000000000000000000000000000000000",
"stateRoot": "0xe123237264662397bd61409f5b83cef5014279da807acd8540e200885a1df498",
Expand All @@ -522,9 +522,9 @@
"number": "0x4",
"gasLimit": "0x5f5e100",
"gasUsed": "0x10acd",
"timestamp": "0x2d",
"timestamp": "0x4a",
"extraData": "0x",
"mixHash": "0x708cce2c46e8383bddb837b52b3b094456d0624ca26adb03f1ecf7b5b6aec03f",
"mixHash": "0xb2d64d6ff0c61b70f79d7334e357e2398cc10ba36a76f059ad62c62d48708cda",
"nonce": "0x0000000000000000",
"baseFeePerGas": "0x28adf001",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
Expand Down Expand Up @@ -560,7 +560,7 @@
},
{
"header": {
"parentHash": "0x926fe235d0b9d7b45b282d4bcec50c0cdec12781ac4a7a08bdb933916335c6f3",
"parentHash": "0xf599e9acd7f0b5ac89304006f98611ddaa816a9a17da3e9b527d23f41a104682",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0x0000000000000000000000000000000000000000",
"stateRoot": "0xa9fc09c2b4419130c4602be24159374fa4814c0459540300018d4997e1e85802",
Expand All @@ -571,9 +571,9 @@
"number": "0x3",
"gasLimit": "0x5f5e100",
"gasUsed": "0xbf311",
"timestamp": "0x2d",
"timestamp": "0x4a",
"extraData": "0x",
"mixHash": "0x67fda8d27b68eb504060ead7bd6d10ba16b529906341fb4f43d9bccbfaebd347",
"mixHash": "0x200cfe46e29d8ecd268d56f2d81713a0d5c9e0708536f0dd73b7b84e4033afc9",
"nonce": "0x0000000000000000",
"baseFeePerGas": "0x2e631291",
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
Expand Down
Loading
Loading