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 d5d24912..5f38f5bf 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,11 +78,13 @@ fn deposit_specification() -> Vec { "5932a71200000000000000000000000000000000000000000000000000000000000004d2", // (valid) call to `someNonPayableFunction(1234)` ]; + // makeAddr("canceler"); + let canceler = address!("0x738b9be4596e37015bA15F17116c9B2eE971c238"); 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), @@ -90,6 +94,26 @@ fn deposit_specification() -> Vec { }); } } + + // 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; } @@ -145,6 +169,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/src/protocol/ETHBridge.sol b/src/protocol/ETHBridge.sol index e11edf1a..8256e656 100644 --- a/src/protocol/ETHBridge.sol +++ b/src/protocol/ETHBridge.sol @@ -94,7 +94,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 a45410b6..c6a2d124 100644 --- a/src/protocol/IETHBridge.sol +++ b/src/protocol/IETHBridge.sol @@ -52,15 +52,15 @@ interface IETHBridge { /// @dev Failed to call the receiver with value. error FailedClaim(); - /// @dev A deposit was already claimed. - error AlreadyClaimed(); + /// @dev To address is set to zero + error ZeroReceiver(); + + /// @dev A deposit was already claimed or cancelled + error AlreadyProcessed(); /// @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/CancelDepositTest.t.sol b/test/ETHBridge/CancelDepositTest.t.sol index c5f061f0..777f8243 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 new file mode 100644 index 00000000..0553e7ff --- /dev/null +++ b/test/ETHBridge/CancelableScenarios.t.sol @@ -0,0 +1,88 @@ +// 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 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(cancelerAddress); + 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(cancelerAddress); + 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(cancelerAddress); + 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(cancelerAddress); + 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_claimDeposit_shouldRevertWhen_DepositIsCancelled() public { + IETHBridge.ETHDeposit memory deposit = sampleDepositProof.getEthDeposit(_depositIdx()); + bytes memory proof = abi.encode(sampleDepositProof.getDepositSignalProof(_depositIdx())); + + vm.prank(cancelerAddress); + 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())); + + vm.expectRevert(IETHBridge.OnlyCanceler.selector); + vm.prank(makeAddr("notCanceller")); + 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); + } +} diff --git a/test/ETHBridge/ContractCallValidityScenarios.t.sol b/test/ETHBridge/ContractCallValidityScenarios.t.sol index df68f78b..897b4362 100644 --- a/test/ETHBridge/ContractCallValidityScenarios.t.sol +++ b/test/ETHBridge/ContractCallValidityScenarios.t.sol @@ -1,10 +1,11 @@ // 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"; -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"; @@ -48,3 +49,39 @@ abstract contract DepositIsInvalidContractCall is super.setUp(); } } + +// 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, + DepositIsCancelable +{ + function setUp() + public + virtual + override(CrossChainDepositExists, RecipientIsAContract, BridgeSufficientlyCapitalized) + { + 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); + } +} diff --git a/test/ETHBridge/CrossChainDepositExists.t.sol b/test/ETHBridge/CrossChainDepositExists.t.sol index 7659d21a..da0d5dc6 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 = makeAddr("recipient"); + // the recipient that receives the cancelled deposit + address cancellationRecipient = makeAddr("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..5769a25c 100644 --- a/test/ETHBridge/EnumeratedScenarios.t.sol +++ b/test/ETHBridge/EnumeratedScenarios.t.sol @@ -1,16 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; +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 { NonzeroETH_InvalidCallToPayableFn, NonzeroETH_NoCalldata, + NonzeroETH_NoCalldata_IsCancellable, NonzeroETH_ValidCallToNonpayableFn, NonzeroETH_ValidCallToPayableFn, + NonzeroETH_ValidCallToPayableFn_IsCancelable, ZeroETH_InvalidCallToPayableFn, ZeroETH_NoCalldata, ZeroETH_ValidCallToNonpayableFn, @@ -49,6 +56,42 @@ contract SimpleDepositToEOA_BridgeUndercollateralized is DepositIsNotClaimable {} +// A cancelable deposit is made to an EOA with no calldata +contract CancelDeposit_WithNoCalldata_ToEOACancelRecipient is + NonzeroETH_NoCalldata_IsCancellable, + RecipientIsAnEOA, + BridgeSufficientlyCapitalized, + DepositIsCancelable +{ + function setUp() public override(CrossChainDepositExists, BridgeSufficientlyCapitalized) { + super.setUp(); + } +} + +// 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 no canceler is set. Cancellation attempts should fail. +contract SimpleDepositToEOA_NoCancelerIsSet is + NonzeroETH_NoCalldata, + RecipientIsAnEOA, + 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 // (and the call still succeeds) @@ -70,6 +113,16 @@ contract DepositToPayableFunction is NonzeroETH_ValidCallToPayableFn, DepositIsV } } +// 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 +{ + 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/InitialState.t.sol b/test/ETHBridge/InitialState.t.sol index b1c72bfb..96a083c7 100644 --- a/test/ETHBridge/InitialState.t.sol +++ b/test/ETHBridge/InitialState.t.sol @@ -15,8 +15,10 @@ abstract contract InitialState is Test { // zero address means any relayer is allowed bytes anyRelayer = new bytes(0); - // zero address means deposit is uncancellable - address nonCancellableAddress = address(0); + // address that can cancel deposits (if specified in the ETHDeposit) + address cancelerAddress = makeAddr("canceler"); + + address zeroCanceler = address(0); address trustedCommitmentPublisher = makeAddr("trustedCommitmentPublisher"); 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 diff --git a/test/ETHBridge/SampleDepositProof.t.sol b/test/ETHBridge/SampleDepositProof.t.sol index b5b21f67..47eae191 100644 --- a/test/ETHBridge/SampleDepositProof.t.sol +++ b/test/ETHBridge/SampleDepositProof.t.sol @@ -23,14 +23,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 0 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; storageProof[2] = hex"e2a02020858fa36572158255592dd4252184b8dcddfa7dd66d8bafac0c21be9247f801"; @@ -40,6 +40,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 0; deposit.data = bytes(hex""); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -51,14 +52,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 1 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; storageProof[2] = hex"e2a020064e5d751baf5ba810a000ab852d98ab2d42de5db067a7bd1284c849961a4201"; @@ -68,6 +69,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -79,14 +81,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 2 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](2); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"e2a03355eab8e496e0c877a6644518b64d963b15d7e42d586e4ee997a52562ee9e6601"; deposit.nonce = 2; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); @@ -94,6 +96,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 0; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -105,14 +108,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 3 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"f8718080808080808080808080a00d87c1d4a9856b195ee699d505add2b7a1fcc99b8424ba7331739cb01ae1505da05988b2333c9e7203ed020706525ef19348a2685f72ad057bf58fa479a9ae6a0980a07ae420fe90452ab2374f8ae4b9aa5eabdae0aa042829febe1ef09c111188cbb08080"; storageProof[2] = hex"e2a020a5e16886f9569fc1d10f1a5b6f5388270af61ee808596dce95b45ef96578fa01"; @@ -122,6 +125,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 0; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -133,21 +137,24 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 4 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; - storageProof = new bytes[](2); + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; + storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; - storageProof[1] = hex"e2a03ca5bae38c2882532797a1e415bdc25b8b3d757c9f4a25d0045447c11f44c6a001"; + 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, @@ -159,14 +166,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 5 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; storageProof[2] = hex"e2a02036961ea12d2a0af357d42cc777f6bbce82bb8964045e468b8f634223e97a3101"; @@ -176,6 +183,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -187,14 +195,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 6 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](3); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"f851a033eb6958e121505b7893755b6d99acc29d0a96567a3e4eb84ad4fe12bf7b75e6808080808080808080a0f331a5357c2c8b8ad5663215f1a7f329670a9bd995f6a3edec9b85638cfefb32808080808080"; storageProof[2] = hex"e2a020d753c6d0021760ebafd645ed76e06a4143a03a9047a5db312d02cd35b00f8601"; @@ -204,6 +212,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 4000000000000000000; deposit.data = bytes(hex"9b28f6fb00000000000000000000000000000000000000000000000000000000000004d3"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -215,14 +224,14 @@ contract SampleDepositProof is ISampleDepositProof { // Populate proof 7 accountProof = new bytes[](3); accountProof[0] = - hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a02dc7b0f3b9d71e01d1776f5ca0eb7a57f4a02f5f8cc058848c00ca726a7cd1cca06eea94cbcb3d10252c5c614c2c6fc4e7ca9d2ca9284101f2e15a7ac0783a365980a03839974d0c6a1eca8831503493d9062720b079ff90a2a94d3ba2a23f0cacda86a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a03844de65ae5d0e8e876f23dd945b43e96b2a277fb146da7cf9101fcb6d1f4fc8a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; + hex"f90151a0b91a8b7a7e9d3eab90afd81da3725030742f663c6ed8c26657bf00d842a9f4aaa01689b2a5203afd9ea0a0ca3765e4a538c7176e53eac1f8307a344ffc3c6176558080a09aa8787bf9c32ed53fedb70261f831f7835d2530389eae85ea8c3de86a33a63aa05af6fdef6a5c1d66f604a29171c315f8338760b91be7c278b7a24be569342db280a0de9ec9e0f7dbce83593dd65142c8ffb070d46f9d63fb1a8b2faeb9c66ca1e9e7a04b29efa44ecf50c19b34950cf1d0f05e00568bcc873120fbea9a4e8439de0962a0d0a1bfe5b45d2d863a794f016450a4caca04f3b599e8d1652afca8b752935fd880a0bf9b09e442e044778b354abbadb5ec049d7f5e8b585c3966d476c4fbc9a181d28080a0f214a4e51f84fe052a555a5899f4852ae488c388aadea06826679206ca46d430a0e5c557a0ce3894afeb44c37f3d24247f67dc76a174d8cacc360c1210eef60a7680"; accountProof[1] = - hex"f85180808080a09687ca44cd5b97a4ceac68020c94e024d205cf3fd77ef8685eedd0d939a8079380808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; + hex"f85180808080a006aac01790aec6dce09c15602fa289e55faae52bbdf6a985b8b412e51856039580808080a074ae0767a40fc6fff780050f46a50f6b39ca4edb7faa9669108157a1cd96f40980808080808080"; accountProof[2] = - hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00de5b19f0cfcc623c52adb2af3888e095d0b16e201bf4ee6813bc2ebc0098174a0b004c0ad2e8b589db7b80221a2d4be8a62ba3a982a196f419fce4848f1616f5e"; + hex"f869a020e659e60b21cc961f64ad47f20523c1d329d4bbda245ef3940a76dc89d0911bb846f8440180a00cbc67466b8a2670a39528eea102366d538476c8c050a4047ce0d94d8177470ca0bde0ce4457578dcd144285538d7aa68044396a97778b9f3e2d4b97711b2689d2"; storageProof = new bytes[](2); storageProof[0] = - hex"f8b18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a02184203f0c459f217d27413da5bad909b09a06bedc906b109cd59e343f2fa3ef808080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; + hex"f8d18080a01243c170fb1367c66d6aa47914d71e1d70a051487daa67f169dd329f8ce63636a0c669635fcfb9d57cc561468366bdea98166d38e1c4c3576ffa2892382be52c82a0aa83f7a5121684fa3bec14215620903319a18901422d6bb82e2df98d79fd7335a0eacb838481e13a0c877ae021dd700f61c61587efc7d1b6a09ea24751636378b58080808080a0c34604dd50b3750709360364fc4d95cc5720a0f03aae8bb5f39c51f9e0103a638080a0c96f3ecfcab0dd21cefe8a7d2e350df672603f73ec7e8454144ec3c3f560b2b88080"; storageProof[1] = hex"e2a03e5c83eba42cae419ace36c50da8ec0a0ba27fc69a6d03d07e00bef6d69ea2ee01"; deposit.nonce = 7; deposit.from = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266); @@ -230,6 +239,7 @@ contract SampleDepositProof is ISampleDepositProof { deposit.amount = 4000000000000000000; deposit.data = bytes(hex"5932a71200000000000000000000000000000000000000000000000000000000000004d2"); deposit.context = bytes(hex""); + deposit.canceler = address(0x0000000000000000000000000000000000000000); _createDeposit( accountProof, storageProof, @@ -237,6 +247,62 @@ contract SampleDepositProof is ISampleDepositProof { 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 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 @@ -251,12 +317,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 diff --git a/test/ETHBridge/SampleDepositScenarios.t.sol b/test/ETHBridge/SampleDepositScenarios.t.sol index 3d1e6fa5..48b99d07 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_IsCancelable 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 9627178e..ed41ee21 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, zeroCanceler); vm.revertTo(snapshotId); vm.prank(alice); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + 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, nonCancellableAddress); + bytes32 id0 = bridge.deposit(charlie, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); vm.prank(bob); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + 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, nonCancellableAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(charlie, "", anyRelayer, nonCancellableAddress); + 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, nonCancellableAddress); + bytes32 id0 = bridge.deposit{value: 0.5 ether}(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit{value: 1 ether}(bob, "", anyRelayer, nonCancellableAddress); + 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, nonCancellableAddress); + bytes32 id0 = bridge.deposit(bob, "", anyRelayer, zeroCanceler); vm.revertTo(snapshotId); - bytes32 id1 = bridge.deposit(bob, "somedata", anyRelayer, nonCancellableAddress); + 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, nonCancellableAddress); + 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, nonCancellableAddress); - bytes32 id1 = bridge.deposit(bob, "", anyRelayer, nonCancellableAddress); + 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: nonCancellableAddress + canceler: zeroCanceler }); vm.prank(ethDeposit.from); - bytes32 id = - bridge.deposit{value: ethDeposit.amount}(ethDeposit.to, ethDeposit.data, anyRelayer, nonCancellableAddress); + 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: nonCancellableAddress + 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, nonCancellableAddress); + 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, nonCancellableAddress); + 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, nonCancellableAddress); + 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, nonCancellableAddress); + 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, nonCancellableAddress); + bridge.deposit{value: amount}(bob, "", anyRelayer, zeroCanceler); assertEq(alice.balance, initialAliceBalance - amount, "source balance mismatch"); assertEq(bob.balance, initialBobBalance, "recipient balance changed");