Commit 97c2f807 authored by smartcontracts's avatar smartcontracts Committed by GitHub

Merge pull request #2081 from ethereum-optimism/sc/sdk-deposit-eth

feat(sdk): implement depositETH
parents 0cc660d3 b8226080
......@@ -44,7 +44,6 @@ export class CrossChainMessenger implements ICrossChainMessenger {
overrides?: L1ToL2Overrides
): Promise<TransactionResponse> {
const tx = await this.populateTransaction.sendMessage(message, overrides)
if (message.direction === MessageDirection.L1_TO_L2) {
return this.l1Signer.sendTransaction(tx)
} else {
......@@ -57,13 +56,13 @@ export class CrossChainMessenger implements ICrossChainMessenger {
messageGasLimit: NumberLike,
overrides?: Overrides
): Promise<TransactionResponse> {
const tx = await this.populateTransaction.resendMessage(
return this.l1Signer.sendTransaction(
await this.populateTransaction.resendMessage(
message,
messageGasLimit,
overrides
)
return this.l1Signer.sendTransaction(tx)
)
}
public async finalizeMessage(
......@@ -77,7 +76,9 @@ export class CrossChainMessenger implements ICrossChainMessenger {
amount: NumberLike,
overrides?: L1ToL2Overrides
): Promise<TransactionResponse> {
throw new Error('Not implemented')
return this.l1Signer.sendTransaction(
await this.populateTransaction.depositETH(amount, overrides)
)
}
public async withdrawETH(
......@@ -148,7 +149,14 @@ export class CrossChainMessenger implements ICrossChainMessenger {
amount: NumberLike,
overrides?: L1ToL2Overrides
): Promise<TransactionRequest> => {
throw new Error('Not implemented')
return this.provider.contracts.l1.L1StandardBridge.populateTransaction.depositETH(
overrides?.l2GasLimit || 200000, // 200k gas is fine as a default
'0x', // No data
{
...omit(overrides || {}, 'l2GasLimit', 'value'),
value: amount,
}
)
},
withdrawETH: async (
......@@ -165,7 +173,6 @@ export class CrossChainMessenger implements ICrossChainMessenger {
overrides?: L1ToL2Overrides
): Promise<BigNumber> => {
const tx = await this.populateTransaction.sendMessage(message, overrides)
if (message.direction === MessageDirection.L1_TO_L2) {
return this.provider.l1Provider.estimateGas(tx)
} else {
......@@ -183,7 +190,6 @@ export class CrossChainMessenger implements ICrossChainMessenger {
messageGasLimit,
overrides
)
return this.provider.l1Provider.estimateGas(tx)
},
......@@ -198,7 +204,8 @@ export class CrossChainMessenger implements ICrossChainMessenger {
amount: NumberLike,
overrides?: L1ToL2Overrides
): Promise<BigNumber> => {
throw new Error('Not implemented')
const tx = await this.populateTransaction.depositETH(amount, overrides)
return this.provider.l1Provider.estimateGas(tx)
},
withdrawETH: async (
......
......@@ -3,6 +3,13 @@ pragma solidity ^0.8.9;
import { MockMessenger } from "./MockMessenger.sol";
contract MockBridge {
event ETHDepositInitiated(
address indexed _from,
address indexed _to,
uint256 _amount,
bytes _data
);
event ERC20DepositInitiated(
address indexed _l1Token,
address indexed _l2Token,
......@@ -110,4 +117,19 @@ contract MockBridge {
) public {
emit DepositFailed(_params.l1Token, _params.l2Token, _params.from, _params.to, _params.amount, _params.data);
}
function depositETH(
uint32 _l2GasLimit,
bytes memory _data
)
public
payable
{
emit ETHDepositInitiated(
msg.sender,
msg.sender,
msg.value,
_data
);
}
}
......@@ -211,4 +211,48 @@ describe('CrossChainMessenger', () => {
it('should throw an error')
})
})
describe('depositETH', () => {
let l1Messenger: Contract
let l1Bridge: Contract
let provider: CrossChainProvider
let messenger: CrossChainMessenger
beforeEach(async () => {
l1Messenger = (await (
await ethers.getContractFactory('MockMessenger')
).deploy()) as any
l1Bridge = (await (
await ethers.getContractFactory('MockBridge')
).deploy(l1Messenger.address)) as any
provider = new CrossChainProvider({
l1Provider: ethers.provider,
l2Provider: ethers.provider,
l1ChainId: 31337,
contracts: {
l1: {
L1CrossDomainMessenger: l1Messenger.address,
L1StandardBridge: l1Bridge.address,
},
},
})
messenger = new CrossChainMessenger({
provider,
l1Signer,
l2Signer,
})
})
it('should trigger the deposit ETH function with the given amount', async () => {
await expect(messenger.depositETH(100000))
.to.emit(l1Bridge, 'ETHDepositInitiated')
.withArgs(
await l1Signer.getAddress(),
await l1Signer.getAddress(),
100000,
'0x'
)
})
})
})
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