Skip to content
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
7ec9178
add checks to existing tests
zkzoomer Dec 21, 2025
a3915a3
rm comment
zkzoomer Dec 22, 2025
e40b4d1
refactor
zkzoomer Dec 22, 2025
a28cefe
add bundle attributes
zkzoomer Dec 22, 2025
2a8e9ca
split interop tests
zkzoomer Dec 22, 2025
16176d7
test fixes
zkzoomer Dec 22, 2025
189db1e
define getTransferAmount
zkzoomer Dec 22, 2025
154f49c
add debug logs
zkzoomer Dec 23, 2025
eb21a89
retry tbm
zkzoomer Dec 23, 2025
f92d456
Revert "add debug logs"
zkzoomer Dec 23, 2025
c4965c5
make verbose
zkzoomer Dec 23, 2025
b3adb92
bundle cases
zkzoomer Jan 4, 2026
e7869e4
await once
zkzoomer Jan 5, 2026
fe84886
add messages interop tests
zkzoomer Jan 5, 2026
caedd2b
touching waiting time
zkzoomer Jan 6, 2026
b599a3d
fixes
zkzoomer Jan 6, 2026
f8160f6
increase timeout
zkzoomer Jan 6, 2026
6349d93
state fixes
zkzoomer Jan 6, 2026
9a9b281
define dummy interop recipient per test
zkzoomer Jan 6, 2026
fa50f95
token balance fixes
zkzoomer Jan 6, 2026
1da0845
bump contracts
zkzoomer Jan 6, 2026
7c1415f
Merge remote-tracking branch 'origin/kl/medium-interop-support' into …
zkzoomer Jan 6, 2026
9c4c6db
bump contracts
zkzoomer Jan 6, 2026
7c6d81c
rearrange system contract addresses
zkzoomer Jan 7, 2026
0605e6b
skip locking for local single-suite runs
zkzoomer Jan 7, 2026
fbecdd0
try skip check token migration
zkzoomer Jan 7, 2026
9352260
temp skip upgrade tests when on gateway
zkzoomer Jan 7, 2026
13a7f11
define validium <> custom_token CI tests
zkzoomer Jan 7, 2026
1d328f6
fix second chain base token deposits
zkzoomer Jan 7, 2026
bedcc2f
mint base token for second chain
zkzoomer Jan 7, 2026
c4dfa04
proper deposit + cancel allowances
zkzoomer Jan 7, 2026
65fe52b
also mint to first chain
zkzoomer Jan 8, 2026
50f03bc
fixes
zkzoomer Jan 8, 2026
9fb4b45
refactor tests
zkzoomer Jan 8, 2026
05cbc4e
Revert "fixes"
zkzoomer Jan 8, 2026
1df1707
make some bundles permissionless
zkzoomer Jan 8, 2026
12a4548
rewording
zkzoomer Jan 8, 2026
51e10c2
bump contracts
zkzoomer Jan 8, 2026
e1dd9d0
linting
zkzoomer Jan 8, 2026
a70abb3
bump contracts
zkzoomer Jan 9, 2026
532b0cd
add unbundle tests
zkzoomer Jan 9, 2026
cd3d2cf
bump contracts
zkzoomer Jan 9, 2026
1c65aaa
bump contracts to head of draft-v31
zkzoomer Jan 9, 2026
f907848
try refactor to make tests faster
zkzoomer Jan 9, 2026
fef0cb6
reduce awaits
zkzoomer Jan 9, 2026
abff669
Revert "also mint to first chain"
zkzoomer Jan 10, 2026
a4c1dc1
Revert "proper deposit + cancel allowances"
zkzoomer Jan 10, 2026
3bb0d17
Revert "mint base token for second chain"
zkzoomer Jan 10, 2026
9da3a55
Revert "fix second chain base token deposits"
zkzoomer Jan 10, 2026
1524556
Revert "define validium <> custom_token CI tests"
zkzoomer Jan 11, 2026
c69e737
define validium <> custom_token CI tests
zkzoomer Jan 12, 2026
02ac58c
Revert "make verbose"
zkzoomer Jan 12, 2026
44860d6
Merge remote-tracking branch 'origin/kl/medium-interop-support' into …
zkzoomer Jan 12, 2026
83d1185
bump contracts to head of draft-v31
zkzoomer Jan 12, 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
2 changes: 2 additions & 0 deletions .github/workflows/ci-core-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,8 @@ jobs:
# Upgrade tests should run be separately,
# because as soon as they finish the bootloader will be different
- name: Run upgrade test
# TODO: Remove this. Temporarily skipping upgrade tests when settling on GW just to make CI green
if: matrix.use_gateway_chain == 'WITHOUT_GATEWAY'
run: |
ci_run zkstack dev init-test-wallet --chain era
if [ "${{ matrix.use_gateway_chain }}" == "WITH_GATEWAY" ]; then
Expand Down
10 changes: 5 additions & 5 deletions core/lib/constants/src/contracts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,11 @@ pub const UPGRADEABLE_BEACON_DEPLOYER_ADDRESS: Address = H160([
0x00, 0x01, 0x00, 0x0b,
]);

pub const L2_SYSTEM_CONTRACT_PROXY_ADMIN_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0c,
]);

pub const L2_INTEROP_CENTER_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0d,
Expand All @@ -231,11 +236,6 @@ pub const GW_ASSET_TRACKER_ADDRESS: Address = H160([
0x00, 0x01, 0x00, 0x10,
]);

pub const L2_SYSTEM_CONTRACT_PROXY_ADMIN_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0c,
]);

// todo FIXME, deploy normally instead using DUMMY_ADDRESS and deploying on genesis

pub const DUMMY_ADDRESS_1: Address = H160([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@ import { TESTED_CHAIN_TYPE, createChainAndStartServer, runIntegrationTests } fro
describe('Integration Test', () => {
it(`for ${TESTED_CHAIN_TYPE} chain`, async () => {
const testChain = await createChainAndStartServer(TESTED_CHAIN_TYPE, 'Main Node Integration Test');
// Define some chain B used for interop tests
const testSecondChain = await createChainAndStartServer('era', 'Main Node Integration Test');
// Define some chain B used for interop tests, only used when settling on gateway
let secondChainName;
if (process.env.USE_GATEWAY_CHAIN === 'WITH_GATEWAY') {
const secondChainType = TESTED_CHAIN_TYPE === 'validium' ? 'custom_token' : 'era';
const testSecondChain = await createChainAndStartServer(secondChainType, 'Main Node Integration Test');
secondChainName = testSecondChain.chainName;
}

await runIntegrationTests(testChain.chainName, testSecondChain.chainName);
await runIntegrationTests(testChain.chainName, secondChainName);
});
});
6 changes: 3 additions & 3 deletions core/tests/ts-integration/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ export const L2_MESSAGE_ROOT_ADDRESS = '0x00000000000000000000000000000000000100
export const L2_INTEROP_ROOT_STORAGE_ADDRESS = '0x0000000000000000000000000000000000010008';
export const L2_MESSAGE_VERIFICATION_ADDRESS = '0x0000000000000000000000000000000000010009';
export const L2_CHAIN_ASSET_HANDLER_ADDRESS = '0x000000000000000000000000000000000001000A';
export const L2_INTEROP_CENTER_ADDRESS = '0x000000000000000000000000000000000001000C';
export const L2_INTEROP_HANDLER_ADDRESS = '0x000000000000000000000000000000000001000D';
export const L2_ASSET_TRACKER_ADDRESS = '0x000000000000000000000000000000000001000E';
export const L2_INTEROP_CENTER_ADDRESS = '0x000000000000000000000000000000000001000D';
export const L2_INTEROP_HANDLER_ADDRESS = '0x000000000000000000000000000000000001000E';
export const L2_ASSET_TRACKER_ADDRESS = '0x000000000000000000000000000000000001000F';

// System contract addresses
export const SYSTEM_CONTEXT_ADDRESS = '0x000000000000000000000000000000000000800b';
Expand Down
43 changes: 33 additions & 10 deletions core/tests/ts-integration/src/context-owner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -266,14 +266,26 @@ export class TestContextOwner {
const wallets = this.createTestWallets(suites);
const bridgehubContract = await this.mainSyncWallet.getBridgehubContract();
const baseTokenAddress = await bridgehubContract.baseToken(this.env.l2ChainId);
await this.distributeL1BaseToken(wallets, l2ERC20AmountToDeposit, baseTokenAddress);
const secondChainBaseTokenAddress = this.env.l2ChainIdSecondChain
? await bridgehubContract.baseToken(this.env.l2ChainIdSecondChain)
: undefined;
await this.distributeL1BaseToken(this.mainSyncWallet, wallets, l2ERC20AmountToDeposit, baseTokenAddress);
if (this.env.l2ChainIdSecondChain) {
await this.distributeL1BaseToken(
this.secondChainMainSyncWallet!,
wallets,
l2ERC20AmountToDeposit,
secondChainBaseTokenAddress!
);
}
await this.cancelAllowances();
await this.distributeL1Tokens(
wallets,
l2ETHAmountToDeposit,
l2ETHAmountToDepositSecondChain,
l2ERC20AmountToDeposit,
baseTokenAddress
baseTokenAddress,
secondChainBaseTokenAddress
);
await this.distributeL2Tokens(wallets);

Expand Down Expand Up @@ -349,6 +361,7 @@ export class TestContextOwner {
* Additionally, deposits L1 tokens to the main account for further distribution on L2 (if required).
*/
private async distributeL1BaseToken(
mainSyncWallet: zksync.Wallet,
wallets: TestWallets,
l2erc20DepositAmount: bigint,
baseTokenAddress: zksync.types.Address
Expand All @@ -372,7 +385,7 @@ export class TestContextOwner {
const l1Erc20ABI = ['function mint(address to, uint256 amount)'];
const l1Erc20Contract = new ethers.Contract(baseTokenAddress, l1Erc20ABI, this.mainEthersWallet);
const baseMintPromise = l1Erc20Contract
.mint(this.mainSyncWallet.address, baseMintAmount, {
.mint(mainSyncWallet.address, baseMintAmount, {
nonce: nonce++,
gasPrice
})
Expand All @@ -385,7 +398,7 @@ export class TestContextOwner {

// Deposit base token if needed
const baseIsTransferred = true;
const baseDepositPromise = this.mainSyncWallet
const baseDepositPromise = mainSyncWallet
.deposit({
token: baseTokenAddress,
amount: l2erc20DepositAmount,
Expand Down Expand Up @@ -418,7 +431,7 @@ export class TestContextOwner {
// Send base token on L1.
const baseTokenTransfers = await sendTransfers(
baseTokenAddress,
this.mainEthersWallet,
mainSyncWallet.ethWallet(),
wallets,
ERC20_PER_ACCOUNT,
nonce,
Expand All @@ -444,9 +457,11 @@ export class TestContextOwner {
l2ETHAmountToDeposit: bigint,
l2ETHAmountToDepositSecondChain: bigint,
l2erc20DepositAmount: bigint,
baseTokenAddress: zksync.types.Address
baseTokenAddress: zksync.types.Address,
secondChainBaseTokenAddress: zksync.types.Address | undefined
) {
const ethIsBaseToken = baseTokenAddress == zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
const secondChainEthIsBaseToken = secondChainBaseTokenAddress == zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
this.reporter.startAction(`Distributing tokens on L1`);
const l1startNonce = await this.mainEthersWallet.getNonce();
this.reporter.debug(`Start nonce is ${l1startNonce}`);
Expand Down Expand Up @@ -494,20 +509,28 @@ export class TestContextOwner {
// we have to correctly send nonce.
const depositHandle = this.secondChainMainSyncWallet!.deposit({
token: zksync.utils.ETH_ADDRESS,
approveBaseERC20: true,
approveERC20: true,
amount: l2ETHAmountToDepositSecondChain as BigNumberish,
approveBaseOverrides: {
nonce: nonce,
gasPrice
},
overrides: {
nonce,
nonce: nonce + (secondChainEthIsBaseToken ? 0 : 1), // if eth is base token the approve tx does not happen
gasPrice
}
}).then((tx) => {
const amount = ethers.formatEther(l2ETHAmountToDeposit);
const amount = ethers.formatEther(l2ETHAmountToDepositSecondChain);
this.reporter.debug(
`Sent ETH deposit on second chain. Nonce ${tx.nonce}, amount: ${amount}, hash: ${tx.hash}`
);
return tx.wait();
});
nonce = nonce + 1;
this.reporter.debug(`Nonce changed by 1 for ETH deposit on second chain, new nonce: ${nonce}`);
nonce = nonce + 1 + (secondChainEthIsBaseToken ? 0 : 1);
this.reporter.debug(
`Nonce changed by ${1 + (secondChainEthIsBaseToken ? 0 : 1)} for ETH deposit on second chain, new nonce: ${nonce}`
);
await depositHandle;
}

Expand Down
Loading
Loading