Commit 88b71518 authored by Andreas Bigger's avatar Andreas Bigger

tests: L2 bridge withdraw to calls and events :test_tube:

parent 5cccad63
...@@ -171,10 +171,10 @@ L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23893) ...@@ -171,10 +171,10 @@ L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23893)
L2StandardBridge_Test:test_finalizeDeposit_succeeds() (gas: 89473) L2StandardBridge_Test:test_finalizeDeposit_succeeds() (gas: 89473)
L2StandardBridge_Test:test_initialize_succeeds() (gas: 24270) L2StandardBridge_Test:test_initialize_succeeds() (gas: 24270)
L2StandardBridge_Test:test_receive_succeeds() (gas: 166663) L2StandardBridge_Test:test_receive_succeeds() (gas: 166663)
L2StandardBridge_Test:test_withdrawTo_succeeds() (gas: 352440) L2StandardBridge_Test:test_withdrawTo_succeeds() (gas: 384299)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19630) L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19630)
L2StandardBridge_Test:test_withdraw_notEOA_reverts() (gas: 251836) L2StandardBridge_Test:test_withdraw_notEOA_reverts() (gas: 251836)
L2StandardBridge_Test:test_withdraw_succeeds() (gas: 382386) L2StandardBridge_Test:test_withdraw_succeeds() (gas: 382396)
L2ToL1MessagePasserTest:test_burn_succeeds() (gas: 112572) L2ToL1MessagePasserTest:test_burn_succeeds() (gas: 112572)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract_succeeds() (gas: 70423) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract_succeeds() (gas: 70423)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA_succeeds() (gas: 75874) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA_succeeds() (gas: 75874)
......
...@@ -213,14 +213,80 @@ contract L2StandardBridge_Test is Bridge_Initializer { ...@@ -213,14 +213,80 @@ contract L2StandardBridge_Test is Bridge_Initializer {
// - calls Withdrawer.initiateWithdrawal // - calls Withdrawer.initiateWithdrawal
function test_withdrawTo_succeeds() external { function test_withdrawTo_succeeds() external {
deal(address(L2Token), alice, 100, true); deal(address(L2Token), alice, 100, true);
assertEq(L2Token.balanceOf(alice), 100);
uint256 nonce = L2Messenger.messageNonce();
bytes memory message = abi.encodeWithSelector(
StandardBridge.finalizeBridgeERC20.selector,
address(L1Token),
address(L2Token),
alice,
bob,
100,
hex""
);
uint64 baseGas = L2Messenger.baseGas(message, 1000);
bytes memory withdrawalData = abi.encodeWithSelector(
CrossDomainMessenger.relayMessage.selector,
nonce,
address(L2Bridge),
address(L1Bridge),
0,
1000,
message
);
bytes32 withdrawalHash = Hashing.hashWithdrawal(
Types.WithdrawalTransaction({
nonce: nonce,
sender: address(L2Messenger),
target: address(L1Messenger),
value: 0,
gasLimit: baseGas,
data: withdrawalData
})
);
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
emit ERC20BridgeInitiated(address(L2Token), address(L1Token), alice, bob, 100, hex""); emit ERC20BridgeInitiated(address(L2Token), address(L1Token), alice, bob, 100, hex"");
vm.expectEmit(true, true, true, true);
emit MessagePassed(nonce, address(L2Messenger), address(L1Messenger), 0, baseGas, withdrawalData, withdrawalHash);
// SentMessage event emitted by the CrossDomainMessenger
vm.expectEmit(true, true, true, true);
emit SentMessage(address(L1Bridge), address(L2Bridge), message, nonce, 1000);
// SentMessageExtension1 event emitted by the CrossDomainMessenger
vm.expectEmit(true, true, true, true);
emit SentMessageExtension1(address(L2Bridge), 0);
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
emit WithdrawalInitiated(address(L1Token), address(L2Token), alice, bob, 100, hex""); emit WithdrawalInitiated(address(L1Token), address(L2Token), alice, bob, 100, hex"");
// TODO: calls vm.expectCall(
address(L2Messenger),
abi.encodeWithSelector(
CrossDomainMessenger.sendMessage.selector,
address(L1Bridge),
message,
1000
)
);
vm.expectCall(
Predeploys.L2_TO_L1_MESSAGE_PASSER,
abi.encodeWithSelector(
L2ToL1MessagePasser.initiateWithdrawal.selector,
address(L1Messenger),
baseGas,
withdrawalData
)
);
// The L2Bridge should burn the tokens
vm.expectCall(
address(L2Token),
abi.encodeWithSelector(OptimismMintableERC20.burn.selector, alice, 100)
);
vm.prank(alice, alice); vm.prank(alice, alice);
L2Bridge.withdrawTo(address(L2Token), bob, 100, 1000, hex""); L2Bridge.withdrawTo(address(L2Token), bob, 100, 1000, hex"");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment