Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
97c2f807
Unverified
Commit
97c2f807
authored
Jan 26, 2022
by
smartcontracts
Committed by
GitHub
Jan 26, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2081 from ethereum-optimism/sc/sdk-deposit-eth
feat(sdk): implement depositETH
parents
0cc660d3
b8226080
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
12 deletions
+85
-12
cross-chain-messenger.ts
packages/sdk/src/cross-chain-messenger.ts
+19
-12
MockBridge.sol
packages/sdk/test/contracts/MockBridge.sol
+22
-0
cross-chain-messenger.spec.ts
packages/sdk/test/cross-chain-messenger.spec.ts
+44
-0
No files found.
packages/sdk/src/cross-chain-messenger.ts
View file @
97c2f807
...
...
@@ -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
(
message
,
messageGasLimit
,
overrides
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
(
...
...
packages/sdk/test/contracts/MockBridge.sol
View file @
97c2f807
...
...
@@ -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
);
}
}
packages/sdk/test/cross-chain-messenger.spec.ts
View file @
97c2f807
...
...
@@ -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
'
)
})
})
})
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment