From ee2d18ea3c08b534af7cd016a82ff09201f53dd1 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 11 Jul 2025 13:17:44 +0200 Subject: [PATCH 01/11] cancellation tests --- offchain/deposit_signal_proof.rs | 6 +- offchain/sample_deposit_proof.rs | 10 +- test/ETHBridge/CancellableScenarios.t.sol | 67 +++++++++ test/ETHBridge/CrossChainDepositExists.t.sol | 3 + test/ETHBridge/EnumeratedScenarios.t.sol | 12 ++ test/ETHBridge/InitialState.t.sol | 4 +- test/ETHBridge/SampleDepositProof.t.sol | 136 ++++++++++--------- test/ETHBridge/UniversalTest.t.sol | 42 +++--- 8 files changed, 186 insertions(+), 94 deletions(-) create mode 100644 test/ETHBridge/CancellableScenarios.t.sol diff --git a/offchain/deposit_signal_proof.rs b/offchain/deposit_signal_proof.rs index 4b38aae5..6d81569d 100644 --- a/offchain/deposit_signal_proof.rs +++ b/offchain/deposit_signal_proof.rs @@ -22,7 +22,6 @@ async fn main() -> Result<()> { let data = bytes!(); let sender = address!("0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"); let amount = U256::from(4000000000000000000_u128); - let relayer = Address::ZERO; let (provider, _, _) = get_provider()?; @@ -38,7 +37,10 @@ async fn main() -> Result<()> { println!("Deployed ETH bridge at address: {}", eth_bridge.address()); println!("Sending ETH deposit..."); - let builder = eth_bridge.deposit(sender, data, bytes!()).value(amount); + let zero_canceler = Address::ZERO; + let builder = eth_bridge + .deposit(sender, data, bytes!(), zero_canceler) + .value(amount); let tx = builder.send().await?.get_receipt().await?; // Get deposit ID from the transaction receipt logs diff --git a/offchain/sample_deposit_proof.rs b/offchain/sample_deposit_proof.rs index b16368cf..f6650f57 100644 --- a/offchain/sample_deposit_proof.rs +++ b/offchain/sample_deposit_proof.rs @@ -7,7 +7,7 @@ mod utils; use utils::{deploy_eth_bridge, deploy_signal_service, get_proofs, get_provider, SignalProof}; use alloy::hex::decode; -use alloy::primitives::{Address, Bytes, FixedBytes, U256}; +use alloy::primitives::{address, Address, Bytes, FixedBytes, U256}; use std::fs; fn expand_vector(vec: Vec, name: &str) -> String { @@ -28,6 +28,7 @@ fn create_deposit_call( amount: U256, data: &str, context: &str, + canceler: &str, id: &FixedBytes<32>, ) -> String { let mut result = String::new(); @@ -50,6 +51,7 @@ fn create_deposit_call( result += format!("\t\tdeposit.amount = {};\n", amount).as_str(); result += format!("\t\tdeposit.data = bytes(hex\"{}\");\n", data).as_str(); result += format!("\t\tdeposit.context = bytes(hex\"{}\");\n", context).as_str(); + result += format!("\t\tdeposit.canceler = address({});\n", canceler).as_str(); result += format!("\t\t_createDeposit(\n\t\t\taccountProof,\n\t\t\tstorageProof,\n\t\t\tdeposit,\n\t\t\tbytes32({}),\n\t\t\tbytes32({})\n\t\t);\n", proof.slot, id).as_str(); return result; } @@ -76,7 +78,8 @@ fn deposit_specification() -> Vec { "5932a71200000000000000000000000000000000000000000000000000000000000004d2", // (valid) call to `someNonPayableFunction(1234)` ]; - let zero_canceler = Address::ZERO; + // _randomAddress("canceler"); + let canceler = address!("0xf9f5C5411F0bEf1880cE3B051BD14196479764D2"); let mut specifications = vec![]; for amount in amounts { @@ -86,7 +89,7 @@ fn deposit_specification() -> Vec { amount: U256::from(amount), data: data.to_string(), context: String::from(""), - canceler: zero_canceler, + canceler, }); } } @@ -145,6 +148,7 @@ async fn main() -> Result<()> { d.amount, d.data.as_str(), d.context.as_str(), + &d.canceler.to_string(), id, ) .as_str(); diff --git a/test/ETHBridge/CancellableScenarios.t.sol b/test/ETHBridge/CancellableScenarios.t.sol new file mode 100644 index 00000000..b913d998 --- /dev/null +++ b/test/ETHBridge/CancellableScenarios.t.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.28; + +import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; +import {IETHBridge} from "src/protocol/IETHBridge.sol"; + +/// This contract describes behaviours that should be valid when the deposit is cancellable. +abstract contract DepositIsCancellable is CrossChainDepositExists { + function test_cancelDeposit_shouldSucceed() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + vm.prank(cancellerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + } + + function test_cancelDeposit_shouldSetClaimedFlag() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + (, bytes32 id) = sampleDepositProof.getDepositInternals(_depositIdx()); + + assertFalse(bridge.processed(id), "deposit already marked as claimed"); + + vm.prank(cancellerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + assertTrue(bridge.processed(id), "deposit not marked as claimed"); + } + + function test_cancelDeposit_shouldEmitEvent() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + (, bytes32 id) = sampleDepositProof.getDepositInternals(_depositIdx()); + + vm.expectEmit(); + emit IETHBridge.DepositCancelled(id, cancellationRecipient); + + vm.prank(cancellerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + } + + function test_cancelDeposit_shouldSendETH() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + uint256 initialCancellationRecipientBalance = cancellationRecipient.balance; + uint256 initialRecipientBalance = recipient.balance; + uint256 initialBridgeBalance = address(bridge).balance; + + vm.prank(cancellerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + assertEq(recipient.balance, initialRecipientBalance, "recipient balance mismatch"); + assertEq( + cancellationRecipient.balance, + initialCancellationRecipientBalance + deposit.amount, + "cancel recipient balance mismatch" + ); + assertEq(address(bridge).balance, initialBridgeBalance - deposit.amount, "bridge balance mismatch"); + } + + function test_cancelDeposit_shouldRevertWhen_CancellerIsNotCaller() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.expectRevert(IETHBridge.OnlyCanceler.selector); + vm.prank(_randomAddress("notCanceller")); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + } +} diff --git a/test/ETHBridge/CrossChainDepositExists.t.sol b/test/ETHBridge/CrossChainDepositExists.t.sol index fa4911c8..e356cf4c 100644 --- a/test/ETHBridge/CrossChainDepositExists.t.sol +++ b/test/ETHBridge/CrossChainDepositExists.t.sol @@ -15,6 +15,9 @@ abstract contract CrossChainDepositExists is UniversalTest { // the sample deposit is to this address address recipient = _randomAddress("recipient"); + // the recipient that receives the cancelled deposit + address cancellationRecipient = _randomAddress("cancellationRecipient"); + uint256 HEIGHT = 1; function setUp() public virtual override { diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index 38feae42..6709dec1 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +import {DepositIsCancellable} from "./CancellableScenarios.t.sol"; import {BridgeHasNoEther, BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; import {DepositIsInvalidContractCall, DepositIsValidContractCall} from "./ContractCallValidityScenarios.t.sol"; @@ -41,6 +42,17 @@ contract SimpleDepositToEOA is } } +contract CancelDepositToEOA is + NonzeroETH_NoCalldata, + RecipientIsAnEOA, + BridgeSufficientlyCapitalized, + DepositIsCancellable +{ + function setUp() public override(CrossChainDepositExists, BridgeSufficientlyCapitalized) { + super.setUp(); + } +} + // Same transfer as above, but the bridge does not have ETH. It should fail. contract SimpleDepositToEOA_BridgeUndercollateralized is NonzeroETH_NoCalldata, diff --git a/test/ETHBridge/InitialState.t.sol b/test/ETHBridge/InitialState.t.sol index 912c5ef8..e224ee1d 100644 --- a/test/ETHBridge/InitialState.t.sol +++ b/test/ETHBridge/InitialState.t.sol @@ -7,6 +7,8 @@ import {SampleDepositProof} from "./SampleDepositProof.t.sol"; import {ETHBridge} from "src/protocol/ETHBridge.sol"; import {SignalService} from "src/protocol/SignalService.sol"; +import {console} from "forge-std/console.sol"; + abstract contract InitialState is Test { ETHBridge bridge; SignalService signalService; @@ -16,7 +18,7 @@ abstract contract InitialState is Test { bytes anyRelayer = new bytes(0); // zero address means deposit is uncancellable - address nonCancellableAddress = address(0); + address cancellerAddress = _randomAddress("canceler"); address trustedCommitmentPublisher = _randomAddress("trustedCommitmentPublisher"); diff --git a/test/ETHBridge/SampleDepositProof.t.sol b/test/ETHBridge/SampleDepositProof.t.sol index a98b4e34..1322dc10 100644 --- a/test/ETHBridge/SampleDepositProof.t.sol +++ b/test/ETHBridge/SampleDepositProof.t.sol @@ -23,215 +23,217 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 0 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = hex"e2a0364c1d30c1806da24e88e0a857e4520f5db1cf68dd0062081a0e4228f77539b901"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a0358693f503641099a1861efc44174580451adb33da479267f67dc12a8668453001"; deposit.nonce = 0; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex""); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x1e44da7772dd4f24931c42fcb5e68c8673f9b7560b8fdede360903011ed09000), - bytes32(0xc86deb495f158920b402152458621f9131f535c7fbd3e0b5ec852b7aa1baae68) + bytes32(0xfe97aa9c92e33e9443104a0c0b7371724b3a0020e7b9fe6e384c5fb95f32ed00), + bytes32(0xf2dc10a33f63dae4a3b8b76f9a9f19f640cecd9c6c62a62a1d0e6374caa2926d) ); // Populate proof 1 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; - storageProof = new bytes[](3); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = - hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; - storageProof[2] = hex"e2a020f0cfec76005c392ac1714cd5aa39c2adcef238b320f94b230b6a05b62c6ca701"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a036cefd9ac7aa8aad44275648ca7193500e3b670e774f4ffeacce9744ecb3d73401"; deposit.nonce = 1; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xf34fc2f940056cd918eb9bf82cd15c84d8a830825f6c9f2bca244a3d5ac72b00), - bytes32(0xe8acde42a830761087678a01dba05c3e1971428a97701e702f6e987c16b04a8c) + bytes32(0xe3e0bfbf835c03bedf947f24109d3f6c0f0d6b48d07209a2ac97d67b34990300), + bytes32(0x530c559481cc116d9025e0bf153363e18767ad75e3f8a202107ce33345620ae0) ); // Populate proof 2 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = hex"e2a03e3c562fa07f1399eaa3fdf0901cecf3a643b9dc7aad8866bc2a293ca1d2407d01"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a0377c2ce50abd193c6c9014228a73ea97269ecb51a0f0195b9f44c080e2ff5ad201"; deposit.nonce = 2; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x0c4fa7982c13d730d556d27f148fb90e14475cc99fc12cee90bfc13805f1a300), - bytes32(0x933f16b0513699dbe027e15c3ccb47324706b25da8a4a240b2de5e53c8345a9f) + bytes32(0xf0d507bf2a13757b7cf6963614a4b071304da098683247be5f07ed6cd69bce00), + bytes32(0x1442e0d7ad2ae4c7dff87ab98fc7a83b5b16d5f5d36f69c5395651f4054f47ca) ); // Populate proof 3 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = hex"e2a03298559ee3a1fc13f5d90911d10cd3f6e023dafdaab83dad6b553176288219d701"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a03fe6aca95ee567db22b9d8dcd52067878472fc5f090f2f2cee0be53dd68c2c0901"; deposit.nonce = 3; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x3362ef917f8cdd3ed09245590a73210baa4e415d01b89c4b96c43bc0c377ae00), - bytes32(0xa8ccb6cd36b998e6c2f35a4053fbbb361366f871605cfc6f3400d7303abcdb0b) + bytes32(0x9c6a0354ea48f6f6b6aa630e0b620698f69d6a8ad4ecca758d9d34aba195b400), + bytes32(0xfe9a082e9465578ff70da97a6edfe8b4afad0f3bfaeff6ac0c08effd118c54f7) ); // Populate proof 4 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = hex"e2a032f37e04aad6a253fdac683c9702c043edb2517b6ac2c5d1f4991a814fbba2dd01"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a030bc72e321ee1d414699e06be4e5518728ac158dab01a21b01ee12d2bd2cd31901"; deposit.nonce = 4; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex""); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xa10efb554b1ce391abb94d39441848daa1bddc7e28530d333cda842d3e4b9400), - bytes32(0x78d6063dc03515fedcfa706f4ae246707bfe12b4bb0d8f21330bc6b404a3bbec) + bytes32(0xf014786f0c5fe4dd2b28ee1a9aa5af98362f2c193194f81430ac76b1f58d2800), + bytes32(0x361c927d7ea5f36f846bd0e0c2b0eb2e1e70aeca48a0f0e530bf1e1032f59fe4) ); // Populate proof 5 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = hex"e2a03cad719b28877087569378c8a30b53f1f39801c45c7edd14a58e68cf3a9bd1ab01"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a03ac3de17f671e61277a1eb16d9b36f9054af4b54a1255b76aa5e97635d7097e101"; deposit.nonce = 5; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xe8b94839aa2eec31949ad4460fc0629de20e7367ed3b251df3920c8c3aafa600), - bytes32(0x1d180c134c2410c9e046ec13543ec5350348286669361e3d8f8d518344ed8154) + bytes32(0xc49d9d332db808565bdc8eeb44be4979fc5584bbf3aeaba7db7ea53713200600), + bytes32(0x0851809cbcca6c18f60fbed131128bcd0033977bd9e849146142a09f279f203f) ); // Populate proof 6 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; - storageProof = new bytes[](3); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = - hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; - storageProof[2] = hex"e2a020da500035aa803b6d4e3cd8ac4209e0c95810b2a3c45513e4d52d3886b9a20a01"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a0367baf079ef5a1697eff8bd262374e7734950f77b0ea0cc3d88369c0737a226701"; deposit.nonce = 6; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x39a0868654d724a1f040ec71a5a7e73ba7a3c725155db5f0ddc085d76e714000), - bytes32(0xd69bbbb7f9326f41024cbf37447fa35120732b98dc60b857a5e24c2b5d9597e7) + bytes32(0xb4f856ea53863d60d822452285d7c8c68258115f0d2e0f84ceb190a462925800), + bytes32(0x44afb31d90afcd53cc180ea63aceb942ca935260cb4c9938cff466b6280b09ef) ); // Populate proof 7 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a04f9b3074be6c1048a52625a98244b225239aeb72c6fe9a8b84295c54c11f7711a0bba366e6a2f8ee0148ec2fb8c8f612f97c5c013c92997f187dec28eab359bf9980a0ad32814d04dc4f3d2d4837d098843cdb23d3b2ff2998d68bd3d567c28351f678a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a09016cdf52377ca6d080a61a641119ebe8344e7efa3a347dbaf187d0bc706997ca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0253a8805e504ff1d068e38ce687ee7719d6428467537c6e0a9e380bab6c1e7cc80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a03135b57fa5c3a632d77d047ed9beb7ad2fb10175e0aaca41fbe4de814ed565a5a04c6a820395819646f26663eb133c936140a62bc46c8d408aa765d28abac30b48"; - storageProof = new bytes[](3); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + storageProof = new bytes[](2); storageProof[0] = - hex"f8d180a0c3fd297a8560d746e4780fae27a416a5e164111f3fbdeafed15debeeb6285ffc808080a033bc0bdee3ae72377d806414ce91a661c7113f3b2f536fccf941284eca737bca80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = - hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; - storageProof[2] = hex"e2a020820c5a5abbb0bb050f885a37d26e1d5311b4dcb2e8a2ba48c72de213b00a4301"; + hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; + storageProof[1] = hex"e2a0369d050420bb0f797e6088c7810b502ec36bdc811bb2722ad2ceca8f53f5b3a401"; deposit.nonce = 7; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xf55995bfd5a36e0f7738ee353ea9757d04379740a8a30cae67006b8f825ef700), - bytes32(0x0288428c4eaaf77d8195c0169f88f642b43f44955e36ab09d1e1942fe64d0ba9) + bytes32(0x2f340dd08c7b9eafd5cdd5097224c3d575a06e6d45dd5fb4227ffed1ecbad000), + bytes32(0x55a2cffcb5504a5fd544ca3f7bf97923f6c57174be5013898d534d9c68072329) ); } @@ -247,12 +249,12 @@ contract SampleDepositProof is ISampleDepositProof { /// @inheritdoc ISampleDepositProof function getStateRoot() public pure returns (bytes32) { - return bytes32(0xbf793a27cc4b534fdffda4c380f2cac2d70b3e1f663bdaaa826ede98f5b4790a); + return bytes32(0xaf2b8c521afbda1af6d5564b8f6a31a83aa03e8f5fc460e1a2a22e0ed63762e7); } /// @inheritdoc ISampleDepositProof function getBlockHash() public pure returns (bytes32) { - return bytes32(0xfa0e2ded914764f5f2bd4e6be751a6febe78f98b51d07aae71cf5b845276cfa7); + return bytes32(0x0e86695233fded5e6b8a1158c6b6bed9fa9c2e831112f6ed384b10615305ce0a); } /// @inheritdoc ISampleDepositProof diff --git a/test/ETHBridge/UniversalTest.t.sol b/test/ETHBridge/UniversalTest.t.sol index 6f09d7a1..a6bf04f0 100644 --- a/test/ETHBridge/UniversalTest.t.sol +++ b/test/ETHBridge/UniversalTest.t.sol @@ -23,12 +23,12 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); vm.prank(alice); - bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); vm.revertTo(snapshotId); vm.prank(alice); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); assertEq(id0, id1, "identical deposits produce different ids"); } @@ -37,12 +37,12 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); vm.prank(alice); - bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); vm.revertTo(snapshotId); vm.prank(bob); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); assertNotEq(id0, id1, "different caller produces same id"); } @@ -52,11 +52,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); assertNotEq(id0, id1, "different recipient produces same id"); } @@ -66,11 +66,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit{value: 0.5 ether}(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit{value: 0.5 ether}(bob, "", anyRelayer, cancellerAddress); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit{value: 1 ether}(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id1 = bridge.deposit{value: 1 ether}(bob, "", anyRelayer, cancellerAddress); assertNotEq(id0, id1, "different value produces same id"); } @@ -80,11 +80,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(bob, "somedata", anyRelayer, nonCancellableAddress); + bytes32 id1 = bridge.deposit(bob, "somedata", anyRelayer, cancellerAddress); assertNotEq(id0, id1, "different value produces same id"); } @@ -93,7 +93,7 @@ abstract contract UniversalTest is InitialState { uint256 initialNonce = getNonce(); vm.startPrank(alice); - bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bridge.deposit(bob, "", anyRelayer, cancellerAddress); assertEq(getNonce(), initialNonce + 1, "nonce not incremented"); } @@ -101,8 +101,8 @@ abstract contract UniversalTest is InitialState { function test_deposit_duplicateDepositsProduceDifferentIds() public { vm.startPrank(alice); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); - bytes32 id1 = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); assertNotEq(id0, id1, "duplicate deposits produce same id"); } @@ -115,12 +115,12 @@ abstract contract UniversalTest is InitialState { amount: 1 ether, data: "", context: anyRelayer, - canceler: nonCancellableAddress + canceler: cancellerAddress }); vm.prank(ethDeposit.from); bytes32 id = - bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, nonCancellableAddress); + bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, cancellerAddress); assertEq(id, bridge.getDepositId(ethDeposit), "id does not match getter"); } @@ -133,33 +133,33 @@ abstract contract UniversalTest is InitialState { amount: 1 ether, data: "", context: anyRelayer, - canceler: nonCancellableAddress + canceler: cancellerAddress }); bytes32 id = bridge.getDepositId(ethDeposit); vm.prank(ethDeposit.from); vm.expectEmit(); emit IETHBridge.DepositMade(id, ethDeposit); - bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, nonCancellableAddress); + bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, cancellerAddress); } function test_deposit_signalNotSavedUnderCaller() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); assertFalse(signalService.isSignalStored(id, alice), "signal saved under caller"); } function test_deposit_signalNotSavedUnderRecipient() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); assertFalse(signalService.isSignalStored(id, bob), "signal saved under recipient"); } function test_deposit_signalSavedUnderBridge() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); assertTrue(signalService.isSignalStored(id, address(bridge)), "signal not saved"); } @@ -171,7 +171,7 @@ abstract contract UniversalTest is InitialState { uint256 amount = 1 ether; vm.prank(alice); - bridge.deposit{value: amount}(bob, "", anyRelayer, nonCancellableAddress); + bridge.deposit{value: amount}(bob, "", anyRelayer, cancellerAddress); assertEq(alice.balance, initialAliceBalance - amount, "source balance mismatch"); assertEq(bob.balance, initialBobBalance, "recipient balance changed"); From 42de4fbd4129a540c1e218ca8f3ff1267ef47a89 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 11 Jul 2025 13:20:57 +0200 Subject: [PATCH 02/11] update claimed to processed in error, added test --- src/protocol/ETHBridge.sol | 2 +- src/protocol/IETHBridge.sol | 4 ++-- test/ETHBridge/CancellableScenarios.t.sol | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/protocol/ETHBridge.sol b/src/protocol/ETHBridge.sol index beb53885..a9e2b0cb 100644 --- a/src/protocol/ETHBridge.sol +++ b/src/protocol/ETHBridge.sol @@ -88,7 +88,7 @@ contract ETHBridge is IETHBridge, ReentrancyGuardTransient { bytes memory proof ) internal returns (bytes32 id) { id = _generateId(ethDeposit); - require(!processed(id), AlreadyClaimed()); + require(!processed(id), AlreadyProcessed()); signalService.verifySignal(height, trustedCommitmentPublisher, counterpart, id, proof); diff --git a/src/protocol/IETHBridge.sol b/src/protocol/IETHBridge.sol index bdbf75ac..b414fd99 100644 --- a/src/protocol/IETHBridge.sol +++ b/src/protocol/IETHBridge.sol @@ -42,8 +42,8 @@ interface IETHBridge { /// @dev Failed to call the receiver with value. error FailedClaim(); - /// @dev A deposit was already claimed. - error AlreadyClaimed(); + /// @dev A deposit was already claimed or cancelled + error AlreadyProcessed(); /// @dev Only canceler can cancel a deposit. error OnlyCanceler(); diff --git a/test/ETHBridge/CancellableScenarios.t.sol b/test/ETHBridge/CancellableScenarios.t.sol index b913d998..11bac9b2 100644 --- a/test/ETHBridge/CancellableScenarios.t.sol +++ b/test/ETHBridge/CancellableScenarios.t.sol @@ -56,6 +56,16 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { assertEq(address(bridge).balance, initialBridgeBalance - deposit.amount, "bridge balance mismatch"); } + function test_claimDeposit_shouldRevertWhen_DepositIsCancelled() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.prank(cancellerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + vm.expectRevert(IETHBridge.AlreadyProcessed.selector); + bridge.claimDeposit(deposit, HEIGHT, proof); + } + function test_cancelDeposit_shouldRevertWhen_CancellerIsNotCaller() public { IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); From bcd11c826e1620a7a411aab86880b793a30a13a7 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 11 Jul 2025 13:28:24 +0200 Subject: [PATCH 03/11] comment --- test/ETHBridge/InitialState.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ETHBridge/InitialState.t.sol b/test/ETHBridge/InitialState.t.sol index e224ee1d..1fffdba7 100644 --- a/test/ETHBridge/InitialState.t.sol +++ b/test/ETHBridge/InitialState.t.sol @@ -17,7 +17,7 @@ abstract contract InitialState is Test { // zero address means any relayer is allowed bytes anyRelayer = new bytes(0); - // zero address means deposit is uncancellable + // means deposit is cancellable address cancellerAddress = _randomAddress("canceler"); address trustedCommitmentPublisher = _randomAddress("trustedCommitmentPublisher"); From ceae1463a81c037982838e6aa98ba946da09dd3d Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 15 Jul 2025 12:59:35 +0200 Subject: [PATCH 04/11] update scenarios so not all deposits are cancelable --- offchain/deposit_signal_proof.rs | 2 +- offchain/sample_deposit_proof.rs | 27 ++- ...narios.t.sol => CancelableScenarios.t.sol} | 50 ++++- test/ETHBridge/EnumeratedScenarios.t.sol | 28 ++- test/ETHBridge/InitialState.t.sol | 8 +- test/ETHBridge/SampleDepositProof.t.sol | 208 ++++++++++++------ test/ETHBridge/SampleDepositScenarios.t.sol | 12 + test/ETHBridge/UniversalTest.t.sol | 43 ++-- 8 files changed, 264 insertions(+), 114 deletions(-) rename test/ETHBridge/{CancellableScenarios.t.sol => CancelableScenarios.t.sol} (67%) diff --git a/offchain/deposit_signal_proof.rs b/offchain/deposit_signal_proof.rs index 2c1ca4af..6d81569d 100644 --- a/offchain/deposit_signal_proof.rs +++ b/offchain/deposit_signal_proof.rs @@ -1,4 +1,4 @@ -use alloy::primitives::{address, bytes, U256}; +use alloy::primitives::{address, bytes, Address, U256}; use eyre::Result; mod utils; diff --git a/offchain/sample_deposit_proof.rs b/offchain/sample_deposit_proof.rs index f6650f57..2367582a 100644 --- a/offchain/sample_deposit_proof.rs +++ b/offchain/sample_deposit_proof.rs @@ -80,19 +80,40 @@ fn deposit_specification() -> Vec { // _randomAddress("canceler"); let canceler = address!("0xf9f5C5411F0bEf1880cE3B051BD14196479764D2"); + let zero_canceler = Address::ZERO; let mut specifications = vec![]; - for amount in amounts { - for data in calldata.iter() { + for &amount in &amounts { + for &data in &calldata { specifications.push(DepositSpecification { recipient: recipient.parse().unwrap(), amount: U256::from(amount), data: data.to_string(), context: String::from(""), - canceler, + canceler: zero_canceler, }); } } + + // Special canceler cases + + // Case 1: Empty calldata with non-zero canceler + specifications.push(DepositSpecification { + recipient: recipient.parse().unwrap(), + amount: U256::from(amounts[1]), + data: calldata[0].to_string(), + context: String::from(""), + canceler, + }); + + // Case 2: Valid calldata with non-zero canceler + specifications.push(DepositSpecification { + recipient: recipient.parse().unwrap(), + amount: U256::from(amounts[1]), + data: calldata[1].to_string(), + context: String::from(""), + canceler, + }); return specifications; } diff --git a/test/ETHBridge/CancellableScenarios.t.sol b/test/ETHBridge/CancelableScenarios.t.sol similarity index 67% rename from test/ETHBridge/CancellableScenarios.t.sol rename to test/ETHBridge/CancelableScenarios.t.sol index 11bac9b2..f33188e3 100644 --- a/test/ETHBridge/CancellableScenarios.t.sol +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.28; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; import {IETHBridge} from "src/protocol/IETHBridge.sol"; -/// This contract describes behaviours that should be valid when the deposit is cancellable. -abstract contract DepositIsCancellable is CrossChainDepositExists { +/// This contract describes behaviours that should be valid when the deposit is cancelable. +abstract contract DepositIsCancelable is CrossChainDepositExists { function test_cancelDeposit_shouldSucceed() public { IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); - vm.prank(cancellerAddress); + vm.prank(cancelerAddress); bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); } @@ -20,7 +20,7 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { assertFalse(bridge.processed(id), "deposit already marked as claimed"); - vm.prank(cancellerAddress); + vm.prank(cancelerAddress); bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); assertTrue(bridge.processed(id), "deposit not marked as claimed"); } @@ -33,7 +33,7 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { vm.expectEmit(); emit IETHBridge.DepositCancelled(id, cancellationRecipient); - vm.prank(cancellerAddress); + vm.prank(cancelerAddress); bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); } @@ -45,7 +45,7 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { uint256 initialRecipientBalance = recipient.balance; uint256 initialBridgeBalance = address(bridge).balance; - vm.prank(cancellerAddress); + vm.prank(cancelerAddress); bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); assertEq(recipient.balance, initialRecipientBalance, "recipient balance mismatch"); assertEq( @@ -60,7 +60,7 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); - vm.prank(cancellerAddress); + vm.prank(cancelerAddress); bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); vm.expectRevert(IETHBridge.AlreadyProcessed.selector); bridge.claimDeposit(deposit, HEIGHT, proof); @@ -75,3 +75,39 @@ abstract contract DepositIsCancellable is CrossChainDepositExists { bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); } } + +abstract contract DepositIsNotCancelable is CrossChainDepositExists { + function test_cancelDeposit_shouldRevertWhen_NoCancelerIsSet() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.expectRevert(IETHBridge.OnlyCanceler.selector); + vm.prank(cancelerAddress); + bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + } +} + +// // This contract describes behaviours that should be valid when the deposit is a valid call +// // to a recipient contract, and all other validity conditions are met. +// abstract contract DepositIsValidContractCall is +// RecipientIsAContract, +// BridgeSufficientlyCapitalized, +// DepositIsClaimable +// { +// function setUp() +// public +// virtual +// override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) +// { +// super.setUp(); +// } +// +// function test_claimDeposit_shouldInvokeRecipientContract() public { +// IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); +// bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); +// +// vm.expectEmit(); +// emit TransferRecipient.FunctionCalled(); +// bridge.claimDeposit(deposit, HEIGHT, proof); +// } +// } diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index 6709dec1..0e13ec2f 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import {DepositIsCancellable} from "./CancellableScenarios.t.sol"; +import {DepositIsCancelable, DepositIsNotCancelable} from "./CancelableScenarios.t.sol"; import {BridgeHasNoEther, BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; import {DepositIsInvalidContractCall, DepositIsValidContractCall} from "./ContractCallValidityScenarios.t.sol"; @@ -10,8 +10,10 @@ import {RecipientIsAContract, RecipientIsAnEOA} from "./RecipientScenarios.t.sol import { NonzeroETH_InvalidCallToPayableFn, NonzeroETH_NoCalldata, + NonzeroETH_NoCalldata_IsCancellable, NonzeroETH_ValidCallToNonpayableFn, NonzeroETH_ValidCallToPayableFn, + NonzeroETH_ValidCallToPayableFn_IsCancellable, ZeroETH_InvalidCallToPayableFn, ZeroETH_NoCalldata, ZeroETH_ValidCallToNonpayableFn, @@ -42,11 +44,19 @@ contract SimpleDepositToEOA is } } -contract CancelDepositToEOA is +// Same transfer as above, but the bridge does not have ETH. It should fail. +contract SimpleDepositToEOA_BridgeUndercollateralized is NonzeroETH_NoCalldata, RecipientIsAnEOA, + BridgeHasNoEther, + DepositIsNotClaimable +{} + +contract CancelDepositToEOA is + NonzeroETH_NoCalldata_IsCancellable, + RecipientIsAnEOA, BridgeSufficientlyCapitalized, - DepositIsCancellable + DepositIsCancelable { function setUp() public override(CrossChainDepositExists, BridgeSufficientlyCapitalized) { super.setUp(); @@ -54,12 +64,16 @@ contract CancelDepositToEOA is } // Same transfer as above, but the bridge does not have ETH. It should fail. -contract SimpleDepositToEOA_BridgeUndercollateralized is +contract SimpleDepositToEOA_NoCancelerIsSet is NonzeroETH_NoCalldata, RecipientIsAnEOA, - BridgeHasNoEther, - DepositIsNotClaimable -{} + BridgeSufficientlyCapitalized, + DepositIsNotCancelable +{ + function setUp() public override(CrossChainDepositExists, BridgeSufficientlyCapitalized) { + super.setUp(); + } +} // The bridge does a direct call (without the standard function invocation syntax). This means calldata passed to an EOA // is ignored diff --git a/test/ETHBridge/InitialState.t.sol b/test/ETHBridge/InitialState.t.sol index 1fffdba7..ec8f5fb5 100644 --- a/test/ETHBridge/InitialState.t.sol +++ b/test/ETHBridge/InitialState.t.sol @@ -7,8 +7,6 @@ import {SampleDepositProof} from "./SampleDepositProof.t.sol"; import {ETHBridge} from "src/protocol/ETHBridge.sol"; import {SignalService} from "src/protocol/SignalService.sol"; -import {console} from "forge-std/console.sol"; - abstract contract InitialState is Test { ETHBridge bridge; SignalService signalService; @@ -17,8 +15,10 @@ abstract contract InitialState is Test { // zero address means any relayer is allowed bytes anyRelayer = new bytes(0); - // means deposit is cancellable - address cancellerAddress = _randomAddress("canceler"); + // address that can cancel deposits (if specified in the ETHDeposit) + address cancelerAddress = _randomAddress("canceler"); + + address zeroCanceler = address(0); address trustedCommitmentPublisher = _randomAddress("trustedCommitmentPublisher"); diff --git a/test/ETHBridge/SampleDepositProof.t.sol b/test/ETHBridge/SampleDepositProof.t.sol index 1322dc10..766a975c 100644 --- a/test/ETHBridge/SampleDepositProof.t.sol +++ b/test/ETHBridge/SampleDepositProof.t.sol @@ -23,217 +23,285 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 0 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; storageProof = new bytes[](2); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a0358693f503641099a1861efc44174580451adb33da479267f67dc12a8668453001"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = hex"e2a0364c1d30c1806da24e88e0a857e4520f5db1cf68dd0062081a0e4228f77539b901"; deposit.nonce = 0; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex""); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xfe97aa9c92e33e9443104a0c0b7371724b3a0020e7b9fe6e384c5fb95f32ed00), - bytes32(0xf2dc10a33f63dae4a3b8b76f9a9f19f640cecd9c6c62a62a1d0e6374caa2926d) + bytes32(0x1e44da7772dd4f24931c42fcb5e68c8673f9b7560b8fdede360903011ed09000), + bytes32(0xc86deb495f158920b402152458621f9131f535c7fbd3e0b5ec852b7aa1baae68) ); // Populate proof 1 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a036cefd9ac7aa8aad44275648ca7193500e3b670e774f4ffeacce9744ecb3d73401"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; + storageProof[2] = hex"e2a020f0cfec76005c392ac1714cd5aa39c2adcef238b320f94b230b6a05b62c6ca701"; deposit.nonce = 1; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xe3e0bfbf835c03bedf947f24109d3f6c0f0d6b48d07209a2ac97d67b34990300), - bytes32(0x530c559481cc116d9025e0bf153363e18767ad75e3f8a202107ce33345620ae0) + bytes32(0xf34fc2f940056cd918eb9bf82cd15c84d8a830825f6c9f2bca244a3d5ac72b00), + bytes32(0xe8acde42a830761087678a01dba05c3e1971428a97701e702f6e987c16b04a8c) ); // Populate proof 2 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a0377c2ce50abd193c6c9014228a73ea97269ecb51a0f0195b9f44c080e2ff5ad201"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f85180808080808080808080808080a096ab9669b0848d89de29b11263945b269f24709d388bcfd8d7f9eaac2e4cce51a0cbb3ff216a0f71d93d13dd4f8dc6481e5d1f9030e457abedae6f673ced973f968080"; + storageProof[2] = hex"e2a0203c562fa07f1399eaa3fdf0901cecf3a643b9dc7aad8866bc2a293ca1d2407d01"; deposit.nonce = 2; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xf0d507bf2a13757b7cf6963614a4b071304da098683247be5f07ed6cd69bce00), - bytes32(0x1442e0d7ad2ae4c7dff87ab98fc7a83b5b16d5f5d36f69c5395651f4054f47ca) + bytes32(0x0c4fa7982c13d730d556d27f148fb90e14475cc99fc12cee90bfc13805f1a300), + bytes32(0x933f16b0513699dbe027e15c3ccb47324706b25da8a4a240b2de5e53c8345a9f) ); // Populate proof 3 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; storageProof = new bytes[](2); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a03fe6aca95ee567db22b9d8dcd52067878472fc5f090f2f2cee0be53dd68c2c0901"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = hex"e2a03298559ee3a1fc13f5d90911d10cd3f6e023dafdaab83dad6b553176288219d701"; deposit.nonce = 3; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 0; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x9c6a0354ea48f6f6b6aa630e0b620698f69d6a8ad4ecca758d9d34aba195b400), - bytes32(0xfe9a082e9465578ff70da97a6edfe8b4afad0f3bfaeff6ac0c08effd118c54f7) + bytes32(0x3362ef917f8cdd3ed09245590a73210baa4e415d01b89c4b96c43bc0c377ae00), + bytes32(0xa8ccb6cd36b998e6c2f35a4053fbbb361366f871605cfc6f3400d7303abcdb0b) ); // Populate proof 4 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; storageProof = new bytes[](2); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a030bc72e321ee1d414699e06be4e5518728ac158dab01a21b01ee12d2bd2cd31901"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = hex"e2a032f37e04aad6a253fdac683c9702c043edb2517b6ac2c5d1f4991a814fbba2dd01"; deposit.nonce = 4; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex""); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xf014786f0c5fe4dd2b28ee1a9aa5af98362f2c193194f81430ac76b1f58d2800), - bytes32(0x361c927d7ea5f36f846bd0e0c2b0eb2e1e70aeca48a0f0e530bf1e1032f59fe4) + bytes32(0xa10efb554b1ce391abb94d39441848daa1bddc7e28530d333cda842d3e4b9400), + bytes32(0x78d6063dc03515fedcfa706f4ae246707bfe12b4bb0d8f21330bc6b404a3bbec) ); // Populate proof 5 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a03ac3de17f671e61277a1eb16d9b36f9054af4b54a1255b76aa5e97635d7097e101"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f851808080808080a000aa4cad156beedbb925a97c52432b1a0aaa0ba154e6293c5e98d303695034fa8080808080a06028db865464ee19c0c3e330adb214412c80cb6e081b03948ed681079ff0aaba80808080"; + storageProof[2] = hex"e2a020ad719b28877087569378c8a30b53f1f39801c45c7edd14a58e68cf3a9bd1ab01"; deposit.nonce = 5; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xc49d9d332db808565bdc8eeb44be4979fc5584bbf3aeaba7db7ea53713200600), - bytes32(0x0851809cbcca6c18f60fbed131128bcd0033977bd9e849146142a09f279f203f) + bytes32(0xe8b94839aa2eec31949ad4460fc0629de20e7367ed3b251df3920c8c3aafa600), + bytes32(0x1d180c134c2410c9e046ec13543ec5350348286669361e3d8f8d518344ed8154) ); // Populate proof 6 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a0367baf079ef5a1697eff8bd262374e7734950f77b0ea0cc3d88369c0737a226701"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; + storageProof[2] = hex"e2a020da500035aa803b6d4e3cd8ac4209e0c95810b2a3c45513e4d52d3886b9a20a01"; deposit.nonce = 6; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, deposit, - bytes32(0xb4f856ea53863d60d822452285d7c8c68258115f0d2e0f84ceb190a462925800), - bytes32(0x44afb31d90afcd53cc180ea63aceb942ca935260cb4c9938cff466b6280b09ef) + bytes32(0x39a0868654d724a1f040ec71a5a7e73ba7a3c725155db5f0ddc085d76e714000), + bytes32(0xd69bbbb7f9326f41024cbf37447fa35120732b98dc60b857a5e24c2b5d9597e7) ); // Populate proof 7 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02ea1e92e6cb7173117f480e3fd33185068e655508d6d9b7986a6991e64b6c865a0080fde2865383740d520ac651f6037ff1d0721423639e54f00476a409f443caf80a05f22be3c325366e6ed899d039e7dd20ea7b466798fa8fd5963852ecebf4e56b3a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a098ddc0cda51e9af687f6cda58e0f4a5d9acd99bfa60922f07c03374062b553cca0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a0d2d52324483a577d97c6066f9e130d00c58275412808e1c99b30fda3595f014b80808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a045aaa662830dc5c67aee9dc886c1f5638be154a58de94a2087bf3cf209178a7da0941e869b0337ac6d16ec0814dabf95e76886605d005f3280c4dc276b1ee6e016"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); storageProof[0] = - hex"f901118080a08c5f183847a3164d2af1fccae211c43b32745b5ba0bd4efb6d4a641fcf8eff2ba096ce2d8ed1b8aedb02b7248703c4899364ee3bf70c93dc99aa75a0d86db4bf03a0b9fa3e84338318a35f23147764f475d2c1803b93d239c70f23d09b532470d06ea0710e558b2c1d3862e884a2abffa1c82f2ca3297ee6b3b2af127d3fc42d8a6d19a00ab13306396605ed18d72b341bbe585e5948cbebddea813ff4040afcb08e3ceaa01d582830fb0a387397723a1b00fcd7b20078802af81224776ca606609f18f8ed8080a0f6ab58118af2be0ae25fafc1d9e0a4c2218357c88f91768872ec43b5745795dd8080a066e5e85536e13952d7ae3d0e2274aca5003f5fffd0c5404f7ea544456278a193808080"; - storageProof[1] = hex"e2a0369d050420bb0f797e6088c7810b502ec36bdc811bb2722ad2ceca8f53f5b3a401"; + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f871a0ac0ab8236b89edcddfa59445ed79c6a0df2f3454ff2321552274c70e685a3bb680808080808080a010237a96531b9158ff3aafaee82ea5f130f545caf960b74cd6dae12d8224117c80a0b8032e9de4472649cdc452eb03ece2d845db06b5d219ffd1781c123e8a309cb2808080808080"; + storageProof[2] = hex"e2a020820c5a5abbb0bb050f885a37d26e1d5311b4dcb2e8a2ba48c72de213b00a4301"; deposit.nonce = 7; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); deposit.amount = 4000000000000000000; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xf55995bfd5a36e0f7738ee353ea9757d04379740a8a30cae67006b8f825ef700), + bytes32(0x0288428c4eaaf77d8195c0169f88f642b43f44955e36ab09d1e1942fe64d0ba9) + ); + + // Populate proof 8 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f85180808080808080808080808080a096ab9669b0848d89de29b11263945b269f24709d388bcfd8d7f9eaac2e4cce51a0cbb3ff216a0f71d93d13dd4f8dc6481e5d1f9030e457abedae6f673ced973f968080"; + storageProof[2] = hex"e2a020fa070d8cbdb614c3ff4e3c16bc142b171e5212a55605ffbcacf60cb4ae268101"; + deposit.nonce = 8; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x140e4f89503b61ca661d18021230c261f47dd8ef1c8fbe296f23878819bd5800), + bytes32(0x90e0b910cfc241e3a56547d04f545960aa8f06d4be88c0831b5af96a52e71eba) + ); + + // Populate proof 9 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; + storageProof[1] = + hex"f851808080808080a000aa4cad156beedbb925a97c52432b1a0aaa0ba154e6293c5e98d303695034fa8080808080a06028db865464ee19c0c3e330adb214412c80cb6e081b03948ed681079ff0aaba80808080"; + storageProof[2] = hex"e2a020c9322c2b5c4336b2464332ae3f2ddbe2ae221eb1043756167d4a38d60aee9901"; + deposit.nonce = 9; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); _createDeposit( accountProof, storageProof, deposit, - bytes32(0x2f340dd08c7b9eafd5cdd5097224c3d575a06e6d45dd5fb4227ffed1ecbad000), - bytes32(0x55a2cffcb5504a5fd544ca3f7bf97923f6c57174be5013898d534d9c68072329) + bytes32(0xef84d975bd035ebb480958cc639ddc548e17d1a94d2b0f7e97d76344db620200), + bytes32(0xfb0fdb65b68fec358045bdf860b18c8118544fa574d24b3429ea12286c8979db) ); } @@ -249,12 +317,12 @@ contract SampleDepositProof is ISampleDepositProof { /// @inheritdoc ISampleDepositProof function getStateRoot() public pure returns (bytes32) { - return bytes32(0xaf2b8c521afbda1af6d5564b8f6a31a83aa03e8f5fc460e1a2a22e0ed63762e7); + return bytes32(0x7cde9ce72e2121679400a66da043475a6919809e29f59a443cca26e2867d9554); } /// @inheritdoc ISampleDepositProof function getBlockHash() public pure returns (bytes32) { - return bytes32(0x0e86695233fded5e6b8a1158c6b6bed9fa9c2e831112f6ed384b10615305ce0a); + return bytes32(0x3b457a32611e0908dc8b5f9ddec02bf665a5db16fd305f2686c754e3809951a3); } /// @inheritdoc ISampleDepositProof diff --git a/test/ETHBridge/SampleDepositScenarios.t.sol b/test/ETHBridge/SampleDepositScenarios.t.sol index 3d1e6fa5..24602f59 100644 --- a/test/ETHBridge/SampleDepositScenarios.t.sol +++ b/test/ETHBridge/SampleDepositScenarios.t.sol @@ -52,3 +52,15 @@ abstract contract NonzeroETH_ValidCallToNonpayableFn is CrossChainDepositExists return 7; } } + +abstract contract NonzeroETH_NoCalldata_IsCancellable is CrossChainDepositExists { + function _depositIdx() internal pure override returns (uint256) { + return 8; + } +} + +abstract contract NonzeroETH_ValidCallToPayableFn_IsCancellable is CrossChainDepositExists { + function _depositIdx() internal pure override returns (uint256) { + return 9; + } +} diff --git a/test/ETHBridge/UniversalTest.t.sol b/test/ETHBridge/UniversalTest.t.sol index a6bf04f0..4f21c994 100644 --- a/test/ETHBridge/UniversalTest.t.sol +++ b/test/ETHBridge/UniversalTest.t.sol @@ -23,12 +23,12 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); vm.prank(alice); - bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); vm.prank(alice); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); assertEq(id0, id1, "identical deposits produce different ids"); } @@ -37,12 +37,12 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); vm.prank(alice); - bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); vm.prank(bob); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); assertNotEq(id0, id1, "different caller produces same id"); } @@ -52,11 +52,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); assertNotEq(id0, id1, "different recipient produces same id"); } @@ -66,11 +66,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit{value: 0.5 ether}(bob, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit{value: 0.5 ether}(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit{value: 1 ether}(bob, "", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit{value: 1 ether}(bob, "", anyRelayer, zeroCanceler); assertNotEq(id0, id1, "different value produces same id"); } @@ -80,11 +80,11 @@ abstract contract UniversalTest is InitialState { uint256 snapshotId = vm.snapshot(); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(bob, "somedata", anyRelayer, cancellerAddress); + bytes32 id1 = bridge.deposit(bob, "somedata", anyRelayer, zeroCanceler); assertNotEq(id0, id1, "different value produces same id"); } @@ -93,7 +93,7 @@ abstract contract UniversalTest is InitialState { uint256 initialNonce = getNonce(); vm.startPrank(alice); - bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bridge.deposit(bob, "", anyRelayer, zeroCanceler); assertEq(getNonce(), initialNonce + 1, "nonce not incremented"); } @@ -101,8 +101,8 @@ abstract contract UniversalTest is InitialState { function test_deposit_duplicateDepositsProduceDifferentIds() public { vm.startPrank(alice); - bytes32 id0 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); - bytes32 id1 = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); + bytes32 id1 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); assertNotEq(id0, id1, "duplicate deposits produce same id"); } @@ -115,12 +115,11 @@ abstract contract UniversalTest is InitialState { amount: 1 ether, data: "", context: anyRelayer, - canceler: cancellerAddress + canceler: zeroCanceler }); vm.prank(ethDeposit.from); - bytes32 id = - bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, cancellerAddress); + bytes32 id = bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, zeroCanceler); assertEq(id, bridge.getDepositId(ethDeposit), "id does not match getter"); } @@ -133,33 +132,33 @@ abstract contract UniversalTest is InitialState { amount: 1 ether, data: "", context: anyRelayer, - canceler: cancellerAddress + canceler: zeroCanceler }); bytes32 id = bridge.getDepositId(ethDeposit); vm.prank(ethDeposit.from); vm.expectEmit(); emit IETHBridge.DepositMade(id, ethDeposit); - bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, cancellerAddress); + bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, zeroCanceler); } function test_deposit_signalNotSavedUnderCaller() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, zeroCanceler); assertFalse(signalService.isSignalStored(id, alice), "signal saved under caller"); } function test_deposit_signalNotSavedUnderRecipient() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, zeroCanceler); assertFalse(signalService.isSignalStored(id, bob), "signal saved under recipient"); } function test_deposit_signalSavedUnderBridge() public { vm.prank(alice); - bytes32 id = bridge.deposit(bob, "", anyRelayer, cancellerAddress); + bytes32 id = bridge.deposit(bob, "", anyRelayer, zeroCanceler); assertTrue(signalService.isSignalStored(id, address(bridge)), "signal not saved"); } @@ -171,7 +170,7 @@ abstract contract UniversalTest is InitialState { uint256 amount = 1 ether; vm.prank(alice); - bridge.deposit{value: amount}(bob, "", anyRelayer, cancellerAddress); + bridge.deposit{value: amount}(bob, "", anyRelayer, zeroCanceler); assertEq(alice.balance, initialAliceBalance - amount, "source balance mismatch"); assertEq(bob.balance, initialBobBalance, "recipient balance changed"); From 6023b803f234811d156ae22d2c10a97dc23248bc Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 15 Jul 2025 13:47:28 +0200 Subject: [PATCH 05/11] cancel to payable function --- src/protocol/ETHBridge.sol | 1 + src/protocol/IETHBridge.sol | 3 ++ test/ETHBridge/CancelableScenarios.t.sol | 52 +++++++++++---------- test/ETHBridge/EnumeratedScenarios.t.sol | 18 ++++++- test/ETHBridge/SampleDepositScenarios.t.sol | 2 +- 5 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/protocol/ETHBridge.sol b/src/protocol/ETHBridge.sol index a9e2b0cb..a149ea80 100644 --- a/src/protocol/ETHBridge.sol +++ b/src/protocol/ETHBridge.sol @@ -51,6 +51,7 @@ contract ETHBridge is IETHBridge, ReentrancyGuardTransient { payable returns (bytes32 id) { + require(to != address(0), ZeroReceiver()); ETHDeposit memory ethDeposit = ETHDeposit(_globalDepositNonce, msg.sender, to, msg.value, data, context, canceler); id = _generateId(ethDeposit); diff --git a/src/protocol/IETHBridge.sol b/src/protocol/IETHBridge.sol index b414fd99..1187a05c 100644 --- a/src/protocol/IETHBridge.sol +++ b/src/protocol/IETHBridge.sol @@ -42,6 +42,9 @@ interface IETHBridge { /// @dev Failed to call the receiver with value. error FailedClaim(); + /// @dev To address is set to zero + error ZeroReceiver(); + /// @dev A deposit was already claimed or cancelled error AlreadyProcessed(); diff --git a/test/ETHBridge/CancelableScenarios.t.sol b/test/ETHBridge/CancelableScenarios.t.sol index f33188e3..37da5c62 100644 --- a/test/ETHBridge/CancelableScenarios.t.sol +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -1,7 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +import {BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; +import {TransferRecipient} from "./RecipientScenarios.t.sol"; +import {RecipientIsAContract} from "./RecipientScenarios.t.sol"; import {IETHBridge} from "src/protocol/IETHBridge.sol"; /// This contract describes behaviours that should be valid when the deposit is cancelable. @@ -87,27 +90,28 @@ abstract contract DepositIsNotCancelable is CrossChainDepositExists { } } -// // This contract describes behaviours that should be valid when the deposit is a valid call -// // to a recipient contract, and all other validity conditions are met. -// abstract contract DepositIsValidContractCall is -// RecipientIsAContract, -// BridgeSufficientlyCapitalized, -// DepositIsClaimable -// { -// function setUp() -// public -// virtual -// override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) -// { -// super.setUp(); -// } -// -// function test_claimDeposit_shouldInvokeRecipientContract() public { -// IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); -// bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); -// -// vm.expectEmit(); -// emit TransferRecipient.FunctionCalled(); -// bridge.claimDeposit(deposit, HEIGHT, proof); -// } -// } +// This contract describes behaviours that should be valid when the deposit is a valid call +// to a recipient contract, and all other validity conditions are met. +abstract contract CancelableDepositIsValidContractCall is + RecipientIsAContract, + BridgeSufficientlyCapitalized, + DepositIsCancelable +{ + function setUp() + public + virtual + override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) + { + super.setUp(); + } + + function test_cancelDeposit_shouldNotInvokeRecipientContract() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.expectCall(address(recipient), abi.encodeCall((TransferRecipient.somePayableFunction), (1234)), 0); + + vm.prank(cancelerAddress); + bridge.cancelDeposit(deposit, recipient, HEIGHT, proof); + } +} diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index 0e13ec2f..082b3b89 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -1,7 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import {DepositIsCancelable, DepositIsNotCancelable} from "./CancelableScenarios.t.sol"; +import { + CancelableDepositIsValidContractCall, + DepositIsCancelable, + DepositIsNotCancelable +} from "./CancelableScenarios.t.sol"; import {BridgeHasNoEther, BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; import {DepositIsInvalidContractCall, DepositIsValidContractCall} from "./ContractCallValidityScenarios.t.sol"; @@ -13,7 +17,7 @@ import { NonzeroETH_NoCalldata_IsCancellable, NonzeroETH_ValidCallToNonpayableFn, NonzeroETH_ValidCallToPayableFn, - NonzeroETH_ValidCallToPayableFn_IsCancellable, + NonzeroETH_ValidCallToPayableFn_IsCancelable, ZeroETH_InvalidCallToPayableFn, ZeroETH_NoCalldata, ZeroETH_ValidCallToNonpayableFn, @@ -96,6 +100,16 @@ contract DepositToPayableFunction is NonzeroETH_ValidCallToPayableFn, DepositIsV } } +// We should be able to send ETH to a payable function on a contract. This is a standard use case. +contract CancelableDepositToPayableFunction is + NonzeroETH_ValidCallToPayableFn_IsCancelable, + CancelableDepositIsValidContractCall +{ + function setUp() public override(CrossChainDepositExists, CancelableDepositIsValidContractCall) { + super.setUp(); + } +} + // We should not be able to send ETH to a nonpayable function on a contract. contract DepositToNonPayableFunction is NonzeroETH_ValidCallToNonpayableFn, DepositIsInvalidContractCall { function setUp() public override(CrossChainDepositExists, DepositIsInvalidContractCall) { diff --git a/test/ETHBridge/SampleDepositScenarios.t.sol b/test/ETHBridge/SampleDepositScenarios.t.sol index 24602f59..48b99d07 100644 --- a/test/ETHBridge/SampleDepositScenarios.t.sol +++ b/test/ETHBridge/SampleDepositScenarios.t.sol @@ -59,7 +59,7 @@ abstract contract NonzeroETH_NoCalldata_IsCancellable is CrossChainDepositExists } } -abstract contract NonzeroETH_ValidCallToPayableFn_IsCancellable is CrossChainDepositExists { +abstract contract NonzeroETH_ValidCallToPayableFn_IsCancelable is CrossChainDepositExists { function _depositIdx() internal pure override returns (uint256) { return 9; } From 23b951bc8b9d1f25834e8759f83400c1bbc9b860 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 15 Jul 2025 13:54:06 +0200 Subject: [PATCH 06/11] fix cancel scenario to contract --- test/ETHBridge/CancelableScenarios.t.sol | 29 ------------------- .../ContractCallValidityScenarios.t.sol | 26 +++++++++++++++++ test/ETHBridge/EnumeratedScenarios.t.sol | 12 ++++---- 3 files changed, 32 insertions(+), 35 deletions(-) diff --git a/test/ETHBridge/CancelableScenarios.t.sol b/test/ETHBridge/CancelableScenarios.t.sol index 37da5c62..70e22a8e 100644 --- a/test/ETHBridge/CancelableScenarios.t.sol +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -1,10 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import {BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; -import {TransferRecipient} from "./RecipientScenarios.t.sol"; -import {RecipientIsAContract} from "./RecipientScenarios.t.sol"; import {IETHBridge} from "src/protocol/IETHBridge.sol"; /// This contract describes behaviours that should be valid when the deposit is cancelable. @@ -89,29 +86,3 @@ abstract contract DepositIsNotCancelable is CrossChainDepositExists { bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); } } - -// This contract describes behaviours that should be valid when the deposit is a valid call -// to a recipient contract, and all other validity conditions are met. -abstract contract CancelableDepositIsValidContractCall is - RecipientIsAContract, - BridgeSufficientlyCapitalized, - DepositIsCancelable -{ - function setUp() - public - virtual - override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) - { - super.setUp(); - } - - function test_cancelDeposit_shouldNotInvokeRecipientContract() public { - IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); - bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); - - vm.expectCall(address(recipient), abi.encodeCall((TransferRecipient.somePayableFunction), (1234)), 0); - - vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, recipient, HEIGHT, proof); - } -} diff --git a/test/ETHBridge/ContractCallValidityScenarios.t.sol b/test/ETHBridge/ContractCallValidityScenarios.t.sol index df68f78b..d03976aa 100644 --- a/test/ETHBridge/ContractCallValidityScenarios.t.sol +++ b/test/ETHBridge/ContractCallValidityScenarios.t.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +import {DepositIsCancelable} from "./CancelableScenarios.t.sol"; import {BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; @@ -48,3 +49,28 @@ abstract contract DepositIsInvalidContractCall is super.setUp(); } } + +// This contract describes behaviours that should be valid when the deposit is a valid call +// to a recipient contract, and all other validity conditions are met. +abstract contract CancelableDepositIsValidContractCall is + RecipientIsAContract, + BridgeSufficientlyCapitalized, + DepositIsCancelable +{ + function setUp() + public + virtual + override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) + { + super.setUp(); + } + + function test_cancelDeposit_shouldNotInvokeRecipientContract() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.prank(cancelerAddress); + vm.expectRevert(IETHBridge.FailedClaim.selector); + bridge.cancelDeposit(deposit, recipient, HEIGHT, proof); + } +} diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index 082b3b89..b4791940 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; -import { - CancelableDepositIsValidContractCall, - DepositIsCancelable, - DepositIsNotCancelable -} from "./CancelableScenarios.t.sol"; +import {DepositIsCancelable, DepositIsNotCancelable} from "./CancelableScenarios.t.sol"; import {BridgeHasNoEther, BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; -import {DepositIsInvalidContractCall, DepositIsValidContractCall} from "./ContractCallValidityScenarios.t.sol"; +import { + CancelableDepositIsValidContractCall, + DepositIsInvalidContractCall, + DepositIsValidContractCall +} from "./ContractCallValidityScenarios.t.sol"; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; import {RecipientIsAContract, RecipientIsAnEOA} from "./RecipientScenarios.t.sol"; import { From 2732d1d5b65b359b85e0eeaf9491388382a23c5f Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 15 Jul 2025 16:37:07 +0200 Subject: [PATCH 07/11] change comments add more scenarios --- .../ContractCallValidityScenarios.t.sol | 4 ++-- test/ETHBridge/EnumeratedScenarios.t.sol | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/test/ETHBridge/ContractCallValidityScenarios.t.sol b/test/ETHBridge/ContractCallValidityScenarios.t.sol index d03976aa..edf9f76f 100644 --- a/test/ETHBridge/ContractCallValidityScenarios.t.sol +++ b/test/ETHBridge/ContractCallValidityScenarios.t.sol @@ -50,8 +50,8 @@ abstract contract DepositIsInvalidContractCall is } } -// This contract describes behaviours that should be valid when the deposit is a valid call -// to a recipient contract, and all other validity conditions are met. +// This contract describes the secnario where a cancelable deposit is made but the canceler +// specifies a contract as the recipient. abstract contract CancelableDepositIsValidContractCall is RecipientIsAContract, BridgeSufficientlyCapitalized, diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index b4791940..2ed1a3e7 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -56,7 +56,8 @@ contract SimpleDepositToEOA_BridgeUndercollateralized is DepositIsNotClaimable {} -contract CancelDepositToEOA is +// A cancelable deposit is made to an EOA with no calldata +contract CancelDeposit_WithNoCalldata_ToEOACancelRecipient is NonzeroETH_NoCalldata_IsCancellable, RecipientIsAnEOA, BridgeSufficientlyCapitalized, @@ -67,6 +68,18 @@ contract CancelDepositToEOA is } } +// A cancelable deposit is made to an contract with calldata, cancel recipient is an EOA +contract CancelDeposit_withCalldata_ToEOACancelRecipient is + NonzeroETH_ValidCallToPayableFn_IsCancelable, + RecipientIsAnEOA, + BridgeSufficientlyCapitalized, + DepositIsCancelable +{ + function setUp() public override(CrossChainDepositExists, BridgeSufficientlyCapitalized) { + super.setUp(); + } +} + // Same transfer as above, but the bridge does not have ETH. It should fail. contract SimpleDepositToEOA_NoCancelerIsSet is NonzeroETH_NoCalldata, @@ -100,8 +113,8 @@ contract DepositToPayableFunction is NonzeroETH_ValidCallToPayableFn, DepositIsV } } -// We should be able to send ETH to a payable function on a contract. This is a standard use case. -contract CancelableDepositToPayableFunction is +// Not be able to claim a deposit if the recipient to a cancelable deposit is a contract +contract CancelDeposit_WithCalldata_ToContractCancelRecipient is NonzeroETH_ValidCallToPayableFn_IsCancelable, CancelableDepositIsValidContractCall { From 3406250b1669b9333329fd75eb3a6dba96183c46 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 15 Jul 2025 17:05:32 +0200 Subject: [PATCH 08/11] nit --- test/ETHBridge/EnumeratedScenarios.t.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ETHBridge/EnumeratedScenarios.t.sol b/test/ETHBridge/EnumeratedScenarios.t.sol index 2ed1a3e7..5769a25c 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -69,7 +69,7 @@ contract CancelDeposit_WithNoCalldata_ToEOACancelRecipient is } // A cancelable deposit is made to an contract with calldata, cancel recipient is an EOA -contract CancelDeposit_withCalldata_ToEOACancelRecipient is +contract CancelDeposit_WithCalldata_ToEOACancelRecipient is NonzeroETH_ValidCallToPayableFn_IsCancelable, RecipientIsAnEOA, BridgeSufficientlyCapitalized, @@ -80,7 +80,7 @@ contract CancelDeposit_withCalldata_ToEOACancelRecipient is } } -// Same transfer as above, but the bridge does not have ETH. It should fail. +// Same transfer as above, but no canceler is set. Cancellation attempts should fail. contract SimpleDepositToEOA_NoCancelerIsSet is NonzeroETH_NoCalldata, RecipientIsAnEOA, @@ -113,7 +113,7 @@ contract DepositToPayableFunction is NonzeroETH_ValidCallToPayableFn, DepositIsV } } -// Not be able to claim a deposit if the recipient to a cancelable deposit is a contract +// Should not be able to claim a deposit if the recipient of a cancelable deposit is a contract contract CancelDeposit_WithCalldata_ToContractCancelRecipient is NonzeroETH_ValidCallToPayableFn_IsCancelable, CancelableDepositIsValidContractCall From 64b2d8b8d51bf2c3d7c5ef10545737d100e9e365 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 1 Aug 2025 13:15:44 +0400 Subject: [PATCH 09/11] merge and add cancel test --- test/ETHBridge/CancelDepositTest.t.sol | 2 +- test/ETHBridge/CancelableScenarios.t.sol | 16 ++++++++-------- .../ContractCallValidityScenarios.t.sol | 15 +++++++++++++-- test/ETHBridge/RecipientScenarios.t.sol | 8 ++++---- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/test/ETHBridge/CancelDepositTest.t.sol b/test/ETHBridge/CancelDepositTest.t.sol index 807ab8d0..a81faafd 100644 --- a/test/ETHBridge/CancelDepositTest.t.sol +++ b/test/ETHBridge/CancelDepositTest.t.sol @@ -165,7 +165,7 @@ contract CancelDepositTest is InitialState { // Try to cancel again - should revert vm.prank(canceler); - vm.expectRevert(IETHBridge.AlreadyClaimed.selector); + vm.expectRevert(IETHBridge.AlreadyProcessed.selector); bridge.cancelDeposit(ethDeposit, charlie, "cancel_data", HEIGHT, "proof"); } diff --git a/test/ETHBridge/CancelableScenarios.t.sol b/test/ETHBridge/CancelableScenarios.t.sol index 70e22a8e..e1de0463 100644 --- a/test/ETHBridge/CancelableScenarios.t.sol +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -10,7 +10,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); } function test_cancelDeposit_shouldSetClaimedFlag() public { @@ -21,7 +21,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { assertFalse(bridge.processed(id), "deposit already marked as claimed"); vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); assertTrue(bridge.processed(id), "deposit not marked as claimed"); } @@ -31,10 +31,10 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { (, bytes32 id) = sampleDepositProof.getDepositInternals(_depositIdx()); vm.expectEmit(); - emit IETHBridge.DepositCancelled(id, cancellationRecipient); + emit IETHBridge.DepositCancelled(id, cancellationRecipient, ""); vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); } function test_cancelDeposit_shouldSendETH() public { @@ -46,7 +46,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { uint256 initialBridgeBalance = address(bridge).balance; vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); assertEq(recipient.balance, initialRecipientBalance, "recipient balance mismatch"); assertEq( cancellationRecipient.balance, @@ -61,7 +61,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); vm.expectRevert(IETHBridge.AlreadyProcessed.selector); bridge.claimDeposit(deposit, HEIGHT, proof); } @@ -72,7 +72,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { vm.expectRevert(IETHBridge.OnlyCanceler.selector); vm.prank(_randomAddress("notCanceller")); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); } } @@ -83,6 +83,6 @@ abstract contract DepositIsNotCancelable is CrossChainDepositExists { vm.expectRevert(IETHBridge.OnlyCanceler.selector); vm.prank(cancelerAddress); - bridge.cancelDeposit(deposit, cancellationRecipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); } } diff --git a/test/ETHBridge/ContractCallValidityScenarios.t.sol b/test/ETHBridge/ContractCallValidityScenarios.t.sol index edf9f76f..897b4362 100644 --- a/test/ETHBridge/ContractCallValidityScenarios.t.sol +++ b/test/ETHBridge/ContractCallValidityScenarios.t.sol @@ -5,7 +5,7 @@ import {DepositIsCancelable} from "./CancelableScenarios.t.sol"; import {BridgeSufficientlyCapitalized} from "./CapitalizationScenarios.t.sol"; import {DepositIsClaimable, DepositIsNotClaimable} from "./ClaimableScenarios.t.sol"; import {CrossChainDepositExists} from "./CrossChainDepositExists.t.sol"; -import {RecipientIsAContract} from "./RecipientScenarios.t.sol"; +import {REQUIRED_INPUT, RecipientIsAContract, TransferRecipient} from "./RecipientScenarios.t.sol"; import {TransferRecipient} from "./RecipientScenarios.t.sol"; import {IETHBridge} from "src/protocol/IETHBridge.sol"; @@ -65,12 +65,23 @@ abstract contract CancelableDepositIsValidContractCall is super.setUp(); } + function test_cancelDeposit_canInvokeCancelerContract() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + bytes memory cancelCalldata = abi.encodeWithSignature("somePayableFunction(uint256)", (REQUIRED_INPUT)); + vm.prank(cancelerAddress); + vm.expectEmit(); + emit TransferRecipient.FunctionCalled(); + bridge.cancelDeposit(deposit, recipient, cancelCalldata, HEIGHT, proof); + } + function test_cancelDeposit_shouldNotInvokeRecipientContract() public { IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); vm.prank(cancelerAddress); vm.expectRevert(IETHBridge.FailedClaim.selector); - bridge.cancelDeposit(deposit, recipient, HEIGHT, proof); + bridge.cancelDeposit(deposit, recipient, "", HEIGHT, proof); } } diff --git a/test/ETHBridge/RecipientScenarios.t.sol b/test/ETHBridge/RecipientScenarios.t.sol index b6bc9b49..0f3c8c7e 100644 --- a/test/ETHBridge/RecipientScenarios.t.sol +++ b/test/ETHBridge/RecipientScenarios.t.sol @@ -19,11 +19,11 @@ abstract contract RecipientIsAnEOA is CrossChainDepositExists { // no need to do anything because the recipient defaults to no code } -contract TransferRecipient { - // Magic values to make the behaviour identifiable - uint256 public constant REQUIRED_INPUT = 1234; - uint256 public constant RETURN_VALUE = 5678; +// Magic values to make the behaviour identifiable +uint256 constant REQUIRED_INPUT = 1234; +uint256 constant RETURN_VALUE = 5678; +contract TransferRecipient { event FunctionCalled(); // valid calldata: 0x9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2 From d1a1cd851dc9cfe5b8c89a5a2d131333ef435928 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 1 Aug 2025 18:50:47 +0400 Subject: [PATCH 10/11] fix cancel tests --- gas-reports/minimal_inbox_publish.json | 4 +- offchain/sample_deposit_proof.rs | 4 +- src/protocol/IETHBridge.sol | 3 - test/ETHBridge/CancelableScenarios.t.sol | 2 +- test/ETHBridge/CrossChainDepositExists.t.sol | 2 +- test/ETHBridge/InitialState.t.sol | 2 +- test/ETHBridge/SampleDepositProof.t.sol | 511 +++++++++---------- 7 files changed, 240 insertions(+), 288 deletions(-) diff --git a/gas-reports/minimal_inbox_publish.json b/gas-reports/minimal_inbox_publish.json index c258a2f2..6ca4b95d 100644 --- a/gas-reports/minimal_inbox_publish.json +++ b/gas-reports/minimal_inbox_publish.json @@ -1,2 +1,2 @@ -{ "num_publications": 20, "average_gas_used_publish": 44563 } - +{num_publications:20, +average_gas_used_publish: 44563} \ No newline at end of file diff --git a/offchain/sample_deposit_proof.rs b/offchain/sample_deposit_proof.rs index ab85923a..5f38f5bf 100644 --- a/offchain/sample_deposit_proof.rs +++ b/offchain/sample_deposit_proof.rs @@ -78,8 +78,8 @@ fn deposit_specification() -> Vec { "5932a71200000000000000000000000000000000000000000000000000000000000004d2", // (valid) call to `someNonPayableFunction(1234)` ]; - // _randomAddress("canceler"); - let canceler = address!("0xf9f5C5411F0bEf1880cE3B051BD14196479764D2"); + // makeAddr("canceler"); + let canceler = address!("0x738b9be4596e37015bA15F17116c9B2eE971c238"); let zero_canceler = Address::ZERO; let mut specifications = vec![]; diff --git a/src/protocol/IETHBridge.sol b/src/protocol/IETHBridge.sol index c8144d95..c6a2d124 100644 --- a/src/protocol/IETHBridge.sol +++ b/src/protocol/IETHBridge.sol @@ -61,9 +61,6 @@ interface IETHBridge { /// @dev Only canceler can cancel a deposit. error OnlyCanceler(); - /// @dev Zero receiver - error ZeroReceiver(); - /// @dev Whether the deposit identified by `id` has been claimed or cancelled. /// @param id The deposit id function processed(bytes32 id) external view returns (bool); diff --git a/test/ETHBridge/CancelableScenarios.t.sol b/test/ETHBridge/CancelableScenarios.t.sol index e1de0463..0553e7ff 100644 --- a/test/ETHBridge/CancelableScenarios.t.sol +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -71,7 +71,7 @@ abstract contract DepositIsCancelable is CrossChainDepositExists { bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); vm.expectRevert(IETHBridge.OnlyCanceler.selector); - vm.prank(_randomAddress("notCanceller")); + vm.prank(makeAddr("notCanceller")); bridge.cancelDeposit(deposit, cancellationRecipient, "", HEIGHT, proof); } } diff --git a/test/ETHBridge/CrossChainDepositExists.t.sol b/test/ETHBridge/CrossChainDepositExists.t.sol index 59831f43..da0d5dc6 100644 --- a/test/ETHBridge/CrossChainDepositExists.t.sol +++ b/test/ETHBridge/CrossChainDepositExists.t.sol @@ -16,7 +16,7 @@ abstract contract CrossChainDepositExists is UniversalTest { address recipient = makeAddr("recipient"); // the recipient that receives the cancelled deposit - address cancellationRecipient = _randomAddress("cancellationRecipient"); + address cancellationRecipient = makeAddr("cancellationRecipient"); uint256 HEIGHT = 1; diff --git a/test/ETHBridge/InitialState.t.sol b/test/ETHBridge/InitialState.t.sol index 8c548557..96a083c7 100644 --- a/test/ETHBridge/InitialState.t.sol +++ b/test/ETHBridge/InitialState.t.sol @@ -16,7 +16,7 @@ abstract contract InitialState is Test { bytes anyRelayer = new bytes(0); // address that can cancel deposits (if specified in the ETHDeposit) - address cancelerAddress = _randomAddress("canceler"); + address cancelerAddress = makeAddr("canceler"); address zeroCanceler = address(0); diff --git a/test/ETHBridge/SampleDepositProof.t.sol b/test/ETHBridge/SampleDepositProof.t.sol index 40282ae8..c0313ad8 100644 --- a/test/ETHBridge/SampleDepositProof.t.sol +++ b/test/ETHBridge/SampleDepositProof.t.sol @@ -5,11 +5,12 @@ pragma solidity ^0.8.28; // Do not edit manually. // See ISampleDepositProof.t.sol for an explanation of its purpose. -import {ISampleDepositProof} from "./ISampleDepositProof.t.sol"; -import {IETHBridge} from "src/protocol/IETHBridge.sol"; import {ISignalService} from "src/protocol/ISignalService.sol"; +import {IETHBridge} from "src/protocol/IETHBridge.sol"; +import {ISampleDepositProof} from "./ISampleDepositProof.t.sol"; contract SampleDepositProof is ISampleDepositProof { + ISignalService.SignalProof[] private signalProofs; IETHBridge.ETHDeposit[] private deposits; bytes32[] private slots; @@ -19,290 +20,244 @@ contract SampleDepositProof is ISampleDepositProof { bytes[] memory accountProof; bytes[] memory storageProof; IETHBridge.ETHDeposit memory deposit; + + // Populate proof 0 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a02020858fa36572158255592dd4252184b8dcddfa7dd66d8bafac0c21be9247f801"; + deposit.nonce = 0; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x58887ff218f2583e37373509606997e41dfbd96b6b5a236aaacc1e9ef0472900), + bytes32(0x2d04141ab42f1e60d740a5a131f07aa6865af7efed674eef1aec49c3b20416a4) + ); - // Populate proof 0 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = - hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a02020858fa36572158255592dd4252184b8dcddfa7dd66d8bafac0c21be9247f801"; - deposit.nonce = 0; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x58887ff218f2583e37373509606997e41dfbd96b6b5a236aaacc1e9ef0472900), - bytes32(0x2d04141ab42f1e60d740a5a131f07aa6865af7efed674eef1aec49c3b20416a4) - ); + // Populate proof 1 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a020064e5d751baf5ba810a000ab852d98ab2d42de5db067a7bd1284c849961a4201"; + deposit.nonce = 1; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xdb5b63f47edc0299380a3fe693304cadc397fbd6545338f60909b1e11ac37f00), + bytes32(0xc7e6a3680fbabbe54f252da30fb2ad9d8d55e02076c55581a154e6eec59853cb) + ); - // Populate proof 1 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = - hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a020064e5d751baf5ba810a000ab852d98ab2d42de5db067a7bd1284c849961a4201"; - deposit.nonce = 1; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xdb5b63f47edc0299380a3fe693304cadc397fbd6545338f60909b1e11ac37f00), - bytes32(0xc7e6a3680fbabbe54f252da30fb2ad9d8d55e02076c55581a154e6eec59853cb) - ); + // Populate proof 2 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03355eab8e496e0c877a6644518b64d963b15d7e42d586e4ee997a52562ee9e6601"; + deposit.nonce = 2; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xe2c10eb6f6079601ef8a47131d553d6402ebc6e5634b46927bd5d0a2bc9c0600), + bytes32(0xfa50d1dc414c74ffa3ba764c8eb132fa50b0c78dd857883a7622dcc381095057) + ); - // Populate proof 2 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](2); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03355eab8e496e0c877a6644518b64d963b15d7e42d586e4ee997a52562ee9e6601"; - deposit.nonce = 2; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xe2c10eb6f6079601ef8a47131d553d6402ebc6e5634b46927bd5d0a2bc9c0600), - bytes32(0xfa50d1dc414c74ffa3ba764c8eb132fa50b0c78dd857883a7622dcc381095057) - ); + // Populate proof 3 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a020a5e16886f9569fc1d10f1a5b6f5388270af61ee808596dce95b45ef96578fa01"; + deposit.nonce = 3; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x21baf89acef14f3316986298be8f92a205be61339bb2d1e2d9df06d49c33dd00), + bytes32(0x67889b8f4911de8a705033cfbe00bbed9d87c75bd76eea7a23f53a32b0be4eb2) + ); - // Populate proof 3 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = - hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a020a5e16886f9569fc1d10f1a5b6f5388270af61ee808596dce95b45ef96578fa01"; - deposit.nonce = 3; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x21baf89acef14f3316986298be8f92a205be61339bb2d1e2d9df06d49c33dd00), - bytes32(0x67889b8f4911de8a705033cfbe00bbed9d87c75bd76eea7a23f53a32b0be4eb2) - ); + // Populate proof 4 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; + storageProof[2] = hex"e2a020a5bae38c2882532797a1e415bdc25b8b3d757c9f4a25d0045447c11f44c6a001"; + deposit.nonce = 4; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x2cfbd4a9e77589dd1b8ba127277d3e3e268382bb9342282b81a44e650bd49f00), + bytes32(0x8ed609e11bd6c25677d61324b2a88293233ad6a46e5cfa89a31adfc61ffb1515) + ); - // Populate proof 4 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](2); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03ca5bae38c2882532797a1e415bdc25b8b3d757c9f4a25d0045447c11f44c6a001"; - deposit.nonce = 4; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x2cfbd4a9e77589dd1b8ba127277d3e3e268382bb9342282b81a44e650bd49f00), - bytes32(0x8ed609e11bd6c25677d61324b2a88293233ad6a46e5cfa89a31adfc61ffb1515) - ); + // Populate proof 5 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; + storageProof[2] = hex"e2a02036961ea12d2a0af357d42cc777f6bbce82bb8964045e468b8f634223e97a3101"; + deposit.nonce = 5; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x8d6e366da1d1a183150d88d00c65dd9632870fa4bd29242749a828e84724a000), + bytes32(0x4d28311f702259a707c4c710de11a1df32db8cd733733e8e85e15f0d62c38857) + ); - // Populate proof 5 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = - hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; - storageProof[2] = hex"e2a02036961ea12d2a0af357d42cc777f6bbce82bb8964045e468b8f634223e97a3101"; - deposit.nonce = 5; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x8d6e366da1d1a183150d88d00c65dd9632870fa4bd29242749a828e84724a000), - bytes32(0x4d28311f702259a707c4c710de11a1df32db8cd733733e8e85e15f0d62c38857) - ); + // Populate proof 6 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; + storageProof[2] = hex"e2a020d753c6d0021760ebafd645ed76e06a4143a03a9047a5db312d02cd35b00f8601"; + deposit.nonce = 6; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x7f83d89c4f105f441e0009fb4335eec5aab55353bfd0e4a046813f81fc8fe600), + bytes32(0x40ed46291c61c227a0aa118fa80c2d6ff5d745f7bfa85e9f8927cf1e8878f150) + ); - // Populate proof 6 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = - hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; - storageProof[2] = hex"e2a020d753c6d0021760ebafd645ed76e06a4143a03a9047a5db312d02cd35b00f8601"; - deposit.nonce = 6; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x7f83d89c4f105f441e0009fb4335eec5aab55353bfd0e4a046813f81fc8fe600), - bytes32(0x40ed46291c61c227a0aa118fa80c2d6ff5d745f7bfa85e9f8927cf1e8878f150) - ); + // Populate proof 7 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03e5c83eba42cae419ace36c50da8ec0a0ba27fc69a6d03d07e00bef6d69ea2ee01"; + deposit.nonce = 7; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x46638e69576cb0ad6fe3711d605ac512e423414c192df77ab8b542e3a95f2b00), + bytes32(0xb59a1cfc7f461a83c3a4f326bba8b4546c19a25589be53ee32dbc6aba8f3c639) + ); - // Populate proof 7 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](2); - storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03e5c83eba42cae419ace36c50da8ec0a0ba27fc69a6d03d07e00bef6d69ea2ee01"; - deposit.nonce = 7; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x46638e69576cb0ad6fe3711d605ac512e423414c192df77ab8b542e3a95f2b00), - bytes32(0xb59a1cfc7f461a83c3a4f326bba8b4546c19a25589be53ee32dbc6aba8f3c639) - ); + // Populate proof 8 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03dc7561e6090944316bdff8882c9c874ae280ad778cd02a6491efe8ca8746ed001"; + deposit.nonce = 8; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x3bf7be4b5b2051777ce68a1d0f5c03a3b28d1abc54dd0e14a027db5d7f55b700), + bytes32(0x76f88b55720c2640ffd08de83a5fa5a2bce4706954c30c483e2a8def2a813f26) + ); - // Populate proof 8 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = - hex"f85180808080808080808080808080a096ab9669b0848d89de29b11263945b269f24709d388bcfd8d7f9eaac2e4cce51a0cbb3ff216a0f71d93d13dd4f8dc6481e5d1f9030e457abedae6f673ced973f968080"; - storageProof[2] = hex"e2a020fa070d8cbdb614c3ff4e3c16bc142b171e5212a55605ffbcacf60cb4ae268101"; - deposit.nonce = 8; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x140e4f89503b61ca661d18021230c261f47dd8ef1c8fbe296f23878819bd5800), - bytes32(0x90e0b910cfc241e3a56547d04f545960aa8f06d4be88c0831b5af96a52e71eba) - ); + // Populate proof 9 + accountProof = new bytes[](3); + accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; + storageProof[2] = hex"e2a020ca91520b9a90e18e1c9e94884cf638cdf33f03a7a38f101dbe344830920f2d01"; + deposit.nonce = 9; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xc52bb6ab2927ab974d54208d79cef54753586f3052e64b089d005d0a5f068600), + bytes32(0x9739552589751c3e481fff4628af3a6cf58ac8b332382e11846fa66e3c96016b) + ); - // Populate proof 9 - accountProof = new bytes[](3); - accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a00117adb63c224a950ca594ebe930ceb41b4b3997fecc58a16b16bddd9079b484a0929dafc59ad0ec3d26c6ec622c1656b88ec49f2673e5cb5ca4ce2bf7d6e24e5a80a01ac8825b988bd916f72d71b91ad70b76aeb2281492b14ed531dadb500ed7e7d6a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0ef39bb6b9f54457d157cafa1289da63fb5059a37a91c6bb1e5f87450151936f9a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = - hex"f85180808080a04efc72fb79edd49b26fe93702999204c45d096384fd7d3b65224b358790cc58080808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a0e7eefd8ba04e92d266fe2bd0e882a0aae1255659c02965110a693d25a3a0cc07a0bf80f96ed976bf2eaca63f8aa6153894b8c450b2bf2ac4762f1252d95b690ca9"; - storageProof = new bytes[](3); - storageProof[0] = - hex"f8d180a01eaa57f8237dd40a27df7db13cce1c44a6f8f5a24b2ee74f25563acae0e245e3808080a0b4231c7619022db6faebc81fb9be2742dd5574bd955b77914b2a1e6e17cb760c80a008da7afef899990836d7474b37dba4be023feff40beef8598837f46dd285be8da03032f295e4a1ec28653b9412977b641edde37ab05622bd1e70296ff9d43981b980a0277ced4f9566e5d05fe2c8ffe2aa09e8d4d679218e0f545f35ae5c57d77257b280a06465f9f60adda0e80794baebb3431f108a436c0958858df32ea220d788a9e1e580808080"; - storageProof[1] = - hex"f851808080808080a000aa4cad156beedbb925a97c52432b1a0aaa0ba154e6293c5e98d303695034fa8080808080a06028db865464ee19c0c3e330adb214412c80cb6e081b03948ed681079ff0aaba80808080"; - storageProof[2] = hex"e2a020c9322c2b5c4336b2464332ae3f2ddbe2ae221eb1043756167d4a38d60aee9901"; - deposit.nonce = 9; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x99A270Be1AA5E97633177041859aEEB9a0670fAa); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0xf9f5C5411F0bEf1880cE3B051BD14196479764D2); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xef84d975bd035ebb480958cc639ddc548e17d1a94d2b0f7e97d76344db620200), - bytes32(0xfb0fdb65b68fec358045bdf860b18c8118544fa574d24b3429ea12286c8979db) - ); } /// @inheritdoc ISampleDepositProof @@ -317,12 +272,12 @@ contract SampleDepositProof is ISampleDepositProof { /// @inheritdoc ISampleDepositProof function getStateRoot() public pure returns (bytes32) { - return bytes32(0xac16ef4302130a675256acb0606429e7d1963f7ec5cb0ca8c4b2562e075f9b94); + return bytes32(0x866be78f6283b8d194105179b72e6be3de8732bb625428c3200b3529ebacf93c); } /// @inheritdoc ISampleDepositProof function getBlockHash() public pure returns (bytes32) { - return bytes32(0xbc9016409878723d2d9f7dee69f0a27c76405010c7536ef8cc2eb9e81cf56eca); + return bytes32(0x1f59d18ca7a400806e952acb8e98fe8fd8a669adab51d216c02fe981585c80ab); } /// @inheritdoc ISampleDepositProof From 62935cb8fdb518d383a1668443369d2260da4643 Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 4 Aug 2025 10:56:53 +0200 Subject: [PATCH 11/11] fmt --- test/ETHBridge/SampleDepositProof.t.sol | 507 +++++++++++++----------- 1 file changed, 276 insertions(+), 231 deletions(-) diff --git a/test/ETHBridge/SampleDepositProof.t.sol b/test/ETHBridge/SampleDepositProof.t.sol index c0313ad8..47eae191 100644 --- a/test/ETHBridge/SampleDepositProof.t.sol +++ b/test/ETHBridge/SampleDepositProof.t.sol @@ -5,12 +5,11 @@ pragma solidity ^0.8.28; // Do not edit manually. // See ISampleDepositProof.t.sol for an explanation of its purpose. -import {ISignalService} from "src/protocol/ISignalService.sol"; -import {IETHBridge} from "src/protocol/IETHBridge.sol"; import {ISampleDepositProof} from "./ISampleDepositProof.t.sol"; +import {IETHBridge} from "src/protocol/IETHBridge.sol"; +import {ISignalService} from "src/protocol/ISignalService.sol"; contract SampleDepositProof is ISampleDepositProof { - ISignalService.SignalProof[] private signalProofs; IETHBridge.ETHDeposit[] private deposits; bytes32[] private slots; @@ -20,244 +19,290 @@ contract SampleDepositProof is ISampleDepositProof { bytes[] memory accountProof; bytes[] memory storageProof; IETHBridge.ETHDeposit memory deposit; - - // Populate proof 0 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a02020858fa36572158255592dd4252184b8dcddfa7dd66d8bafac0c21be9247f801"; - deposit.nonce = 0; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x58887ff218f2583e37373509606997e41dfbd96b6b5a236aaacc1e9ef0472900), - bytes32(0x2d04141ab42f1e60d740a5a131f07aa6865af7efed674eef1aec49c3b20416a4) - ); - // Populate proof 1 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a020064e5d751baf5ba810a000ab852d98ab2d42de5db067a7bd1284c849961a4201"; - deposit.nonce = 1; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xdb5b63f47edc0299380a3fe693304cadc397fbd6545338f60909b1e11ac37f00), - bytes32(0xc7e6a3680fbabbe54f252da30fb2ad9d8d55e02076c55581a154e6eec59853cb) - ); + // Populate proof 0 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a02020858fa36572158255592dd4252184b8dcddfa7dd66d8bafac0c21be9247f801"; + deposit.nonce = 0; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x58887ff218f2583e37373509606997e41dfbd96b6b5a236aaacc1e9ef0472900), + bytes32(0x2d04141ab42f1e60d740a5a131f07aa6865af7efed674eef1aec49c3b20416a4) + ); - // Populate proof 2 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](2); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03355eab8e496e0c877a6644518b64d963b15d7e42d586e4ee997a52562ee9e6601"; - deposit.nonce = 2; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xe2c10eb6f6079601ef8a47131d553d6402ebc6e5634b46927bd5d0a2bc9c0600), - bytes32(0xfa50d1dc414c74ffa3ba764c8eb132fa50b0c78dd857883a7622dcc381095057) - ); + // Populate proof 1 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a020064e5d751baf5ba810a000ab852d98ab2d42de5db067a7bd1284c849961a4201"; + deposit.nonce = 1; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xdb5b63f47edc0299380a3fe693304cadc397fbd6545338f60909b1e11ac37f00), + bytes32(0xc7e6a3680fbabbe54f252da30fb2ad9d8d55e02076c55581a154e6eec59853cb) + ); - // Populate proof 3 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; - storageProof[2] = hex"e2a020a5e16886f9569fc1d10f1a5b6f5388270af61ee808596dce95b45ef96578fa01"; - deposit.nonce = 3; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 0; - deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x21baf89acef14f3316986298be8f92a205be61339bb2d1e2d9df06d49c33dd00), - bytes32(0x67889b8f4911de8a705033cfbe00bbed9d87c75bd76eea7a23f53a32b0be4eb2) - ); + // Populate proof 2 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03355eab8e496e0c877a6644518b64d963b15d7e42d586e4ee997a52562ee9e6601"; + deposit.nonce = 2; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xe2c10eb6f6079601ef8a47131d553d6402ebc6e5634b46927bd5d0a2bc9c0600), + bytes32(0xfa50d1dc414c74ffa3ba764c8eb132fa50b0c78dd857883a7622dcc381095057) + ); - // Populate proof 4 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; - storageProof[2] = hex"e2a020a5bae38c2882532797a1e415bdc25b8b3d757c9f4a25d0045447c11f44c6a001"; - deposit.nonce = 4; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x2cfbd4a9e77589dd1b8ba127277d3e3e268382bb9342282b81a44e650bd49f00), - bytes32(0x8ed609e11bd6c25677d61324b2a88293233ad6a46e5cfa89a31adfc61ffb1515) - ); + // Populate proof 3 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; + storageProof[2] = hex"e2a020a5e16886f9569fc1d10f1a5b6f5388270af61ee808596dce95b45ef96578fa01"; + deposit.nonce = 3; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 0; + deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x21baf89acef14f3316986298be8f92a205be61339bb2d1e2d9df06d49c33dd00), + bytes32(0x67889b8f4911de8a705033cfbe00bbed9d87c75bd76eea7a23f53a32b0be4eb2) + ); - // Populate proof 5 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; - storageProof[2] = hex"e2a02036961ea12d2a0af357d42cc777f6bbce82bb8964045e468b8f634223e97a3101"; - deposit.nonce = 5; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x8d6e366da1d1a183150d88d00c65dd9632870fa4bd29242749a828e84724a000), - bytes32(0x4d28311f702259a707c4c710de11a1df32db8cd733733e8e85e15f0d62c38857) - ); + // Populate proof 4 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; + storageProof[2] = hex"e2a020a5bae38c2882532797a1e415bdc25b8b3d757c9f4a25d0045447c11f44c6a001"; + deposit.nonce = 4; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x2cfbd4a9e77589dd1b8ba127277d3e3e268382bb9342282b81a44e650bd49f00), + bytes32(0x8ed609e11bd6c25677d61324b2a88293233ad6a46e5cfa89a31adfc61ffb1515) + ); - // Populate proof 6 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; - storageProof[2] = hex"e2a020d753c6d0021760ebafd645ed76e06a4143a03a9047a5db312d02cd35b00f8601"; - deposit.nonce = 6; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x7f83d89c4f105f441e0009fb4335eec5aab55353bfd0e4a046813f81fc8fe600), - bytes32(0x40ed46291c61c227a0aa118fa80c2d6ff5d745f7bfa85e9f8927cf1e8878f150) - ); + // Populate proof 5 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; + storageProof[2] = hex"e2a02036961ea12d2a0af357d42cc777f6bbce82bb8964045e468b8f634223e97a3101"; + deposit.nonce = 5; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x8d6e366da1d1a183150d88d00c65dd9632870fa4bd29242749a828e84724a000), + bytes32(0x4d28311f702259a707c4c710de11a1df32db8cd733733e8e85e15f0d62c38857) + ); - // Populate proof 7 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](2); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03e5c83eba42cae419ace36c50da8ec0a0ba27fc69a6d03d07e00bef6d69ea2ee01"; - deposit.nonce = 7; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x0000000000000000000000000000000000000000); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x46638e69576cb0ad6fe3711d605ac512e423414c192df77ab8b542e3a95f2b00), - bytes32(0xb59a1cfc7f461a83c3a4f326bba8b4546c19a25589be53ee32dbc6aba8f3c639) - ); + // Populate proof 6 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; + storageProof[2] = hex"e2a020d753c6d0021760ebafd645ed76e06a4143a03a9047a5db312d02cd35b00f8601"; + deposit.nonce = 6; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x7f83d89c4f105f441e0009fb4335eec5aab55353bfd0e4a046813f81fc8fe600), + bytes32(0x40ed46291c61c227a0aa118fa80c2d6ff5d745f7bfa85e9f8927cf1e8878f150) + ); - // Populate proof 8 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](2); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03dc7561e6090944316bdff8882c9c874ae280ad778cd02a6491efe8ca8746ed001"; - deposit.nonce = 8; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex""); - deposit.context = bytes(hex""); - deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0x3bf7be4b5b2051777ce68a1d0f5c03a3b28d1abc54dd0e14a027db5d7f55b700), - bytes32(0x76f88b55720c2640ffd08de83a5fa5a2bce4706954c30c483e2a8def2a813f26) - ); + // Populate proof 7 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03e5c83eba42cae419ace36c50da8ec0a0ba27fc69a6d03d07e00bef6d69ea2ee01"; + deposit.nonce = 7; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x46638e69576cb0ad6fe3711d605ac512e423414c192df77ab8b542e3a95f2b00), + bytes32(0xb59a1cfc7f461a83c3a4f326bba8b4546c19a25589be53ee32dbc6aba8f3c639) + ); - // Populate proof 9 - accountProof = new bytes[](3); - accountProof[0] = hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; - accountProof[1] = hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; - accountProof[2] = hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; - storageProof = new bytes[](3); - storageProof[0] = hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; - storageProof[2] = hex"e2a020ca91520b9a90e18e1c9e94884cf638cdf33f03a7a38f101dbe344830920f2d01"; - deposit.nonce = 9; - deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); - deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); - deposit.amount = 4000000000000000000; - deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); - deposit.context = bytes(hex""); - deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); - _createDeposit( - accountProof, - storageProof, - deposit, - bytes32(0xc52bb6ab2927ab974d54208d79cef54753586f3052e64b089d005d0a5f068600), - bytes32(0x9739552589751c3e481fff4628af3a6cf58ac8b332382e11846fa66e3c96016b) - ); + // Populate proof 8 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](2); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = hex"e2a03dc7561e6090944316bdff8882c9c874ae280ad778cd02a6491efe8ca8746ed001"; + deposit.nonce = 8; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex""); + deposit.context = bytes(hex""); + deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0x3bf7be4b5b2051777ce68a1d0f5c03a3b28d1abc54dd0e14a027db5d7f55b700), + bytes32(0x76f88b55720c2640ffd08de83a5fa5a2bce4706954c30c483e2a8def2a813f26) + ); + // Populate proof 9 + accountProof = new bytes[](3); + accountProof[0] = + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + accountProof[1] = + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + accountProof[2] = + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); + storageProof[0] = + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + storageProof[1] = + hex"f85180808080808080a04108a7449c747bd99ef5ab1fce9bbf0d4eb8a74eee87cec60ff0898bfc4bfe2780808080a0d64345f2550e4c09e3fe4e8fd7d817a0a671ebabf39c92707695c7805829909a80808080"; + storageProof[2] = hex"e2a020ca91520b9a90e18e1c9e94884cf638cdf33f03a7a38f101dbe344830920f2d01"; + deposit.nonce = 9; + deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); + deposit.to = address(0x006217c47ffA5Eb3F3c92247ffFE22AD998242c5); + deposit.amount = 4000000000000000000; + deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); + deposit.context = bytes(hex""); + deposit.canceler = address(0x738b9be4596e37015bA15F17116c9B2eE971c238); + _createDeposit( + accountProof, + storageProof, + deposit, + bytes32(0xc52bb6ab2927ab974d54208d79cef54753586f3052e64b089d005d0a5f068600), + bytes32(0x9739552589751c3e481fff4628af3a6cf58ac8b332382e11846fa66e3c96016b) + ); } /// @inheritdoc ISampleDepositProof