Skip to content

Commit b7f0905

Browse files
committed
Merge branch 'feat/yield-bearing-bridge-full' into ha/ybb-mutation-testing
2 parents 51641a2 + e2e3dc5 commit b7f0905

File tree

7 files changed

+62
-61
lines changed

7 files changed

+62
-61
lines changed

contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,6 @@ contract L1AtomicTokenBridgeCreator is Initializable, OwnableUpgradeable {
113113
// L1 logic contracts shared by all token bridges
114114
L1Templates public l1Templates;
115115

116-
YbbL1Templates public ybbL1Templates;
117-
118116
// L2 contracts deployed to L1 as bytecode placeholders
119117
address public l2TokenBridgeFactoryTemplate;
120118
address public l2RouterTemplate;
@@ -134,6 +132,8 @@ contract L1AtomicTokenBridgeCreator is Initializable, OwnableUpgradeable {
134132
// other canonical addresses (dependent on L2 template implementations) can be fetched through `_predictL2***Address` functions
135133
address public canonicalL2FactoryAddress;
136134

135+
YbbL1Templates public ybbL1Templates;
136+
137137
constructor() {
138138
_disableInitializers();
139139
}

contracts/tokenbridge/ethereum/gateway/L1OrbitYbbCustomGateway.sol

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
44

55
import {L1OrbitCustomGateway} from "./L1OrbitCustomGateway.sol";
66
import {L1CustomGateway} from "./L1CustomGateway.sol";
7-
import {IMasterVault} from "../../libraries/vault/IMasterVault.sol";
7+
import {YbbVaultLib} from "../../libraries/vault/YbbVaultLib.sol";
88
import {IMasterVaultFactory} from "../../libraries/vault/IMasterVaultFactory.sol";
99
import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
1010
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
@@ -34,24 +34,15 @@ contract L1OrbitYbbCustomGateway is L1OrbitCustomGateway {
3434
internal
3535
override
3636
{
37-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
38-
IERC20(masterVault).safeTransfer(_dest, _amount);
37+
YbbVaultLib.withdrawFromVault(masterVaultFactory, _l1Token, _dest, _amount);
3938
}
4039

4140
function outboundEscrowTransfer(address _l1Token, address _from, uint256 _amount)
4241
internal
4342
override
4443
returns (uint256 amountReceived)
4544
{
46-
uint256 prevBalance = IERC20(_l1Token).balanceOf(address(this));
47-
IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);
48-
uint256 postBalance = IERC20(_l1Token).balanceOf(address(this));
49-
amountReceived = postBalance - prevBalance;
50-
51-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
52-
IERC20(_l1Token).safeIncreaseAllowance(masterVault, amountReceived);
53-
amountReceived = IMasterVault(masterVault).deposit(amountReceived);
54-
require(amountReceived > 0, "ZERO_SHARES");
45+
amountReceived = YbbVaultLib.depositToVault(masterVaultFactory, _l1Token, _from, _amount);
5546
}
5647

5748
function _setMasterVaultFactory(address _masterVaultFactory) internal {

contracts/tokenbridge/ethereum/gateway/L1OrbitYbbERC20Gateway.sol

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity ^0.8.0;
44

55
import {L1OrbitERC20Gateway} from "./L1OrbitERC20Gateway.sol";
66
import {L1ERC20Gateway} from "./L1ERC20Gateway.sol";
7-
import {IMasterVault} from "../../libraries/vault/IMasterVault.sol";
7+
import {YbbVaultLib} from "../../libraries/vault/YbbVaultLib.sol";
88
import {IMasterVaultFactory} from "../../libraries/vault/IMasterVaultFactory.sol";
99
import {IERC20, ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
1010
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
@@ -39,24 +39,15 @@ contract L1OrbitYbbERC20Gateway is L1OrbitERC20Gateway {
3939
internal
4040
override
4141
{
42-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
43-
IERC20(masterVault).safeTransfer(_dest, _amount);
42+
YbbVaultLib.withdrawFromVault(masterVaultFactory, _l1Token, _dest, _amount);
4443
}
4544

4645
function outboundEscrowTransfer(address _l1Token, address _from, uint256 _amount)
4746
internal
4847
override
4948
returns (uint256 amountReceived)
5049
{
51-
uint256 prevBalance = IERC20(_l1Token).balanceOf(address(this));
52-
IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);
53-
uint256 postBalance = IERC20(_l1Token).balanceOf(address(this));
54-
amountReceived = postBalance - prevBalance;
55-
56-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
57-
IERC20(_l1Token).safeIncreaseAllowance(masterVault, amountReceived);
58-
amountReceived = IMasterVault(masterVault).deposit(amountReceived);
59-
require(amountReceived > 0, "ZERO_SHARES");
50+
amountReceived = YbbVaultLib.depositToVault(masterVaultFactory, _l1Token, _from, _amount);
6051
}
6152

6253
function getOutboundCalldata(

contracts/tokenbridge/ethereum/gateway/L1YbbCustomGateway.sol

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
pragma solidity ^0.8.0;
44

55
import {L1CustomGateway} from "./L1CustomGateway.sol";
6-
import {IMasterVault} from "../../libraries/vault/IMasterVault.sol";
6+
import {YbbVaultLib} from "../../libraries/vault/YbbVaultLib.sol";
77
import {IMasterVaultFactory} from "../../libraries/vault/IMasterVaultFactory.sol";
88
import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
99
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
@@ -33,24 +33,15 @@ contract L1YbbCustomGateway is L1CustomGateway {
3333
internal
3434
override
3535
{
36-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
37-
IERC20(masterVault).safeTransfer(_dest, _amount);
36+
YbbVaultLib.withdrawFromVault(masterVaultFactory, _l1Token, _dest, _amount);
3837
}
3938

4039
function outboundEscrowTransfer(address _l1Token, address _from, uint256 _amount)
4140
internal
4241
override
4342
returns (uint256 amountReceived)
4443
{
45-
uint256 prevBalance = IERC20(_l1Token).balanceOf(address(this));
46-
IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);
47-
uint256 postBalance = IERC20(_l1Token).balanceOf(address(this));
48-
amountReceived = postBalance - prevBalance;
49-
50-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
51-
IERC20(_l1Token).safeIncreaseAllowance(masterVault, amountReceived);
52-
amountReceived = IMasterVault(masterVault).deposit(amountReceived);
53-
require(amountReceived > 0, "ZERO_SHARES");
44+
amountReceived = YbbVaultLib.depositToVault(masterVaultFactory, _l1Token, _from, _amount);
5445
}
5546

5647
function _setMasterVaultFactory(address _masterVaultFactory) internal {

contracts/tokenbridge/ethereum/gateway/L1YbbERC20Gateway.sol

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
pragma solidity ^0.8.0;
44

55
import {L1ERC20Gateway} from "./L1ERC20Gateway.sol";
6-
import {IMasterVault} from "../../libraries/vault/IMasterVault.sol";
6+
import {YbbVaultLib} from "../../libraries/vault/YbbVaultLib.sol";
77
import {IMasterVaultFactory} from "../../libraries/vault/IMasterVaultFactory.sol";
88
import {IERC20, ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
99
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
@@ -38,24 +38,15 @@ contract L1YbbERC20Gateway is L1ERC20Gateway {
3838
internal
3939
override
4040
{
41-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
42-
IERC20(masterVault).safeTransfer(_dest, _amount);
41+
YbbVaultLib.withdrawFromVault(masterVaultFactory, _l1Token, _dest, _amount);
4342
}
4443

4544
function outboundEscrowTransfer(address _l1Token, address _from, uint256 _amount)
4645
internal
4746
override
4847
returns (uint256 amountReceived)
4948
{
50-
uint256 prevBalance = IERC20(_l1Token).balanceOf(address(this));
51-
IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount);
52-
uint256 postBalance = IERC20(_l1Token).balanceOf(address(this));
53-
amountReceived = postBalance - prevBalance;
54-
55-
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(_l1Token);
56-
IERC20(_l1Token).safeIncreaseAllowance(masterVault, amountReceived);
57-
amountReceived = IMasterVault(masterVault).deposit(amountReceived);
58-
require(amountReceived > 0, "ZERO_SHARES");
49+
amountReceived = YbbVaultLib.depositToVault(masterVaultFactory, _l1Token, _from, _amount);
5950
}
6051

6152
function getOutboundCalldata(
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity ^0.8.0;
3+
4+
import {IMasterVault} from "./IMasterVault.sol";
5+
import {IMasterVaultFactory} from "./IMasterVaultFactory.sol";
6+
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
7+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8+
9+
library YbbVaultLib {
10+
using SafeERC20 for IERC20;
11+
12+
// slither-disable-next-line arbitrary-send-erc20
13+
function depositToVault(address masterVaultFactory, address token, address from, uint256 amount)
14+
internal
15+
returns (uint256 shares)
16+
{
17+
uint256 prevBalance = IERC20(token).balanceOf(address(this));
18+
IERC20(token).safeTransferFrom(from, address(this), amount);
19+
uint256 postBalance = IERC20(token).balanceOf(address(this));
20+
uint256 amountReceived = postBalance - prevBalance;
21+
22+
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(token);
23+
IERC20(token).safeIncreaseAllowance(masterVault, amountReceived);
24+
shares = IMasterVault(masterVault).deposit(amountReceived);
25+
require(shares > 0, "ZERO_SHARES");
26+
}
27+
28+
function withdrawFromVault(
29+
address masterVaultFactory,
30+
address token,
31+
address dest,
32+
uint256 amount
33+
) internal {
34+
address masterVault = IMasterVaultFactory(masterVaultFactory).getVault(token);
35+
IERC20(masterVault).safeTransfer(dest, amount);
36+
}
37+
}

test/storage/L1AtomicTokenBridgeCreator

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@
2222
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
2323
| l1Templates | struct L1AtomicTokenBridgeCreator.L1Templates | 105 | 0 | 256 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
2424
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
25-
| ybbL1Templates | struct L1AtomicTokenBridgeCreator.YbbL1Templates | 113 | 0 | 192 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
25+
| l2TokenBridgeFactoryTemplate | address | 113 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
2626
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
27-
| l2TokenBridgeFactoryTemplate | address | 119 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
27+
| l2RouterTemplate | address | 114 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
2828
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
29-
| l2RouterTemplate | address | 120 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
29+
| l2StandardGatewayTemplate | address | 115 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
3030
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
31-
| l2StandardGatewayTemplate | address | 121 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
31+
| l2CustomGatewayTemplate | address | 116 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
3232
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
33-
| l2CustomGatewayTemplate | address | 122 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
33+
| l2WethGatewayTemplate | address | 117 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
3434
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
35-
| l2WethGatewayTemplate | address | 123 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
35+
| l2WethTemplate | address | 118 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
3636
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
37-
| l2WethTemplate | address | 124 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
37+
| l2MulticallTemplate | address | 119 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
3838
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
39-
| l2MulticallTemplate | address | 125 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
39+
| l1Weth | address | 120 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
4040
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
41-
| l1Weth | address | 126 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
41+
| l1Multicall | address | 121 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
4242
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
43-
| l1Multicall | address | 127 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
43+
| canonicalL2FactoryAddress | address | 122 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
4444
|--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------|
45-
| canonicalL2FactoryAddress | address | 128 | 0 | 20 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
45+
| ybbL1Templates | struct L1AtomicTokenBridgeCreator.YbbL1Templates | 123 | 0 | 192 | contracts/tokenbridge/ethereum/L1AtomicTokenBridgeCreator.sol:L1AtomicTokenBridgeCreator |
4646
╰--------------------------------+--------------------------------------------------+------+--------+-------+------------------------------------------------------------------------------------------╯
4747

0 commit comments

Comments
 (0)