Skip to content

Commit

Permalink
Merge pull request #10 from yearn/struct
Browse files Browse the repository at this point in the history
feat: use struct on bridge
  • Loading branch information
Schlagonia authored May 8, 2024
2 parents 08061c4 + 7d038f9 commit 3e3fea0
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 38 deletions.
7 changes: 7 additions & 0 deletions src/DeployerBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ import {IPolygonZkEVMBridge} from "./interfaces/Polygon/IPolygonZkEVMBridge.sol"
* @notice To be inherited by the L1 and L2 Deployer's for common functionality.
*/
contract DeployerBase is Positions {
struct BridgeData {
address l1Token;
address l1Escrow;
string name;
string symbol;
}

uint32 internal constant ORIGIN_NETWORK_ID = 0;

/*//////////////////////////////////////////////////////////////
Expand Down
10 changes: 6 additions & 4 deletions src/L1Deployer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -306,10 +306,12 @@ contract L1Deployer is RoleManager {
getPositionHolder(L2_DEPLOYER),
true,
abi.encode(
_asset,
_l1Escrow,
ERC20(_asset).name(),
ERC20(_asset).symbol()
BridgeData({
l1Token: _asset,
l1Escrow: _l1Escrow,
name: ERC20(_asset).name(),
symbol: ERC20(_asset).symbol()
})
)
);

Expand Down
37 changes: 19 additions & 18 deletions src/L2Deployer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -107,46 +107,47 @@ contract L2Deployer is DeployerBase {
*/
function _onMessageReceived(bytes memory data) internal {
// Decode message data
(
address _l1Token,
address _l1Escrow,
string memory _name,
string memory _symbol
) = abi.decode(data, (address, address, string, string));
BridgeData memory bridgeData = abi.decode(data, (BridgeData));

// Get addresses
address expectedTokenAddress = getL2TokenAddress(_l1Token);
address expectedEscrowAddress = getL2EscrowAddress(_l1Token);
address expectedConverterAddress = getL2ConverterAddress(_l1Token);
address expectedTokenAddress = getL2TokenAddress(bridgeData.l1Token);
address expectedEscrowAddress = getL2EscrowAddress(bridgeData.l1Token);
address expectedConverterAddress = getL2ConverterAddress(
bridgeData.l1Token
);

// Deploy Token
address _l2Token = _deployL2Token(
_name,
_symbol,
_l1Token,
bridgeData.name,
bridgeData.symbol,
bridgeData.l1Token,
expectedEscrowAddress,
expectedConverterAddress
);
require(_l2Token == expectedTokenAddress, "wrong address");

// Deploy escrow
address _l2Escrow = _deployL2Escrow(_l1Token, _l2Token, _l1Escrow);
address _l2Escrow = _deployL2Escrow(
bridgeData.l1Token,
_l2Token,
bridgeData.l1Escrow
);
require(_l2Escrow == expectedEscrowAddress, "wrong address");

// Deploy Converter
address _l2Converter = _deployL2Converter(_l1Token, _l2Token);
address _l2Converter = _deployL2Converter(bridgeData.l1Token, _l2Token);
require(_l2Converter == expectedConverterAddress, "wrong address");

// Store Data
tokenInfo[_l1Token] = TokenInfo({
tokenInfo[bridgeData.l1Token] = TokenInfo({
l2Token: _l2Token,
l1Escrow: _l1Escrow,
l1Escrow: bridgeData.l1Escrow,
l2Escrow: _l2Escrow,
l2Converter: _l2Converter
});
bridgedAssets.push(_l1Token);
bridgedAssets.push(bridgeData.l1Token);

emit NewToken(_l1Token, _l2Token, _l2Escrow, _l2Converter);
emit NewToken(bridgeData.l1Token, _l2Token, _l2Escrow, _l2Converter);
}

/**
Expand Down
47 changes: 31 additions & 16 deletions test/L2Deployer.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ contract L2DeployerTest is Setup {
uint32 depositCount
);

struct BridgeData {
address l1Token;
address l1Escrow;
string name;
string symbol;
}

L1YearnEscrow public mockEscrow;

function setUp() public virtual override {
Expand Down Expand Up @@ -62,10 +69,12 @@ contract L2DeployerTest is Setup {
function test_deployNewContract() public {
address _asset = address(asset);
bytes memory data = abi.encode(
_asset,
mockEscrow,
"Pretend Token",
"ptTKN"
BridgeData({
l1Token: address(asset),
l1Escrow: address(mockEscrow),
name: "Pretend Token",
symbol: "ptTKN"
})
);

address expectedTokenAddress = l1Deployer.getL2TokenAddress(_asset);
Expand Down Expand Up @@ -114,10 +123,12 @@ contract L2DeployerTest is Setup {

function test_l2TokenSetup() public {
bytes memory data = abi.encode(
address(asset),
mockEscrow,
"Pretend Token",
"ptTKN"
BridgeData({
l1Token: address(asset),
l1Escrow: address(mockEscrow),
name: "Pretend Token",
symbol: "ptTKN"
})
);

address expectedTokenAddress = l1Deployer.getL2TokenAddress(
Expand Down Expand Up @@ -186,10 +197,12 @@ contract L2DeployerTest is Setup {
function test_l2EscrowSetup() public {
// Use mock bridge
bytes memory data = abi.encode(
address(asset),
mockEscrow,
"Pretend Token",
"ptTKN"
BridgeData({
l1Token: address(asset),
l1Escrow: address(mockEscrow),
name: "Pretend Token",
symbol: "ptTKN"
})
);

address expectedEscrowAddress = l1Deployer.getL2EscrowAddress(
Expand Down Expand Up @@ -255,10 +268,12 @@ contract L2DeployerTest is Setup {
function test_l2EConverterSetup() public {
// Use mock bridge
bytes memory data = abi.encode(
address(asset),
mockEscrow,
"Pretend Token",
"ptTKN"
BridgeData({
l1Token: address(asset),
l1Escrow: address(mockEscrow),
name: "Pretend Token",
symbol: "ptTKN"
})
);

address expectedConverterAddress = l1Deployer.getL2ConverterAddress(
Expand Down

0 comments on commit 3e3fea0

Please sign in to comment.