Skip to content

Commit

Permalink
testnet base address
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoch05 committed Nov 12, 2023
2 parents 4a1af8a + 2e12a03 commit ad95dbc
Show file tree
Hide file tree
Showing 12 changed files with 517 additions and 6 deletions.
22 changes: 20 additions & 2 deletions helix-contract/address/ln-dev.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
"axelarMessager": "0x037c7b64c80251Cf5C64Ed8f731c799Dc1856701",
"debugMessager": "0x2e8D237226041FAFe3F66b6cfc54b064923D454E"
},
"sepolia": {
"Eth2ScrollSendService": "0x89AF830781A2C1d3580Db930bea11094F55AfEae"
},
"arbitrum-goerli": {
"Eth2ArbReceiveService": "0x102F8D7Cfe692AA79c17E3958aB00D060Df0B88f",
"layerzeroMessager": "0x953bE65E685099277F1f09Ebe10746810dC0593D",
Expand All @@ -29,6 +32,15 @@
},
"base-goerli": {
"layerzeroMessager": "0x463D1730a8527CA58d48EF70C7460B9920346567"
},
"crab": {
"darwiniaMsglineMessager": "0x1701cEFBb824a107Ce51b3dF87349806A370F7d1"
},
"arbitrum-sepolia": {
"darwiniaMsglineMessager": "0xCddD3e43dA1e9485d4FcD3782DFba04aADCfC9B2"
},
"scroll-sepolia": {
"Eth2ScrollReceiveService": "0x9bc1C7567DDBcaF2212185b6665D755d842d01E4"
}
},
"ProxyAdmin": {
Expand All @@ -52,14 +64,20 @@
"arbitrum-goerli": "0x543bf1AC41485dc78039b9351563E4Dd13A288cb",
"linea-goerli": "0x8f3663930211f3DE17619FEB2eeB44c9c3F44a06",
"zksync-goerli": "0xb5372ed3bb2CbA63e7908066ac10ee94d30eA839",
"base-goerli": "0x876A4f6eCF13EEb101F9E75FCeF58f19Ff383eEB"
"base-goerli": "0x876A4f6eCF13EEb101F9E75FCeF58f19Ff383eEB",
"sepolia": "0x876A4f6eCF13EEb101F9E75FCeF58f19Ff383eEB",
"scroll-sepolia": "0x9C80EdD342b5D179c3a87946fC1F0963BfcaAa09"
},
"usdc": {
"goerli": "0xe9784E0d9A939dbe966b021DE3cd877284DB1B99",
"mantle-goerli": "0xD610DE267f7590D5bCCE89489ECd2C1A4AfdF76B",
"arbitrum-goerli": "0xBAD026e314a77e727dF643B02f63adA573a3757c",
"linea-goerli": "0xeC89AF5FF618bbF667755BE9d63C69F21F1c00C8",
"zksync-goerli": "0xAe60e005C560E869a2bad271e38e3C9D78381aFF"
"zksync-goerli": "0xAe60e005C560E869a2bad271e38e3C9D78381aFF",
"crab": "0x4bA86B5D0F8D2DCB3FC23757cAA6EA71157F74E9",
"arbitrum-sepolia": "0x8A87497488073307E1a17e8A12475a94Afcb413f",
"sepolia": "0x0ac58Df0cc3542beC4cDa71B16D06C3cCc39f405",
"scroll-sepolia": "0x8A87497488073307E1a17e8A12475a94Afcb413f"
},
"keyTool": {
"goerli": "0xCD45731FFF1b250e9433A1F1F5A609F3A19557A5"
Expand Down
6 changes: 5 additions & 1 deletion helix-contract/address/ln-product.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
},
"mantle": {
"LayerZeroMessager": "0x61B6B8c7C00aA7F060a2BEDeE6b11927CC9c3eF1"
},
"scroll": {
"LayerZeroMessager": "0x463d1730a8527ca58d48ef70c7460b9920346567"
}
},
"ProxyAdmin": {
Expand Down Expand Up @@ -44,7 +47,8 @@
"usdt": {
"arbitrum": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
"mantle": "0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE",
"zkSync": "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C"
"zkSync": "0x493257fD37EDB34451f62EDf8D2a0C418852bA4C",
"scroll": "0xf55BEC9cafDbE8730f096Aa55dad6D22d44099Df"
},
"usdc": {
"arbitrum": "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
Expand Down
44 changes: 44 additions & 0 deletions helix-contract/contracts/ln/messager/Eth2ScrollReceiveService.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "./interface/IScrollMessenger.sol";
import "../base/LnAccessController.sol";
import "../interface/ILowLevelMessager.sol";

// from ethereum to arbitrum messager
contract Eth2ScrollReceiveService is ILowLevelMessageReceiver, LnAccessController {
uint256 immutable public REMOTE_CHAINID;
address immutable public scrollMessager;
address public remoteMessager;

mapping(address=>address) public appPairs;

modifier onlyRemoteBridge() {
require(msg.sender == scrollMessager, "invalid caller");
require(remoteMessager == IScrollMessenger(scrollMessager).xDomainMessageSender(), "invalid remote caller");
_;
}

constructor(address _dao, address _scrollMessager, uint256 _remoteChainId) {
_initialize(_dao);
REMOTE_CHAINID = _remoteChainId;
scrollMessager = _scrollMessager;
}

function setRemoteMessager(address _remoteMessager) onlyDao external {
remoteMessager = _remoteMessager;
}

function registerRemoteSender(uint256 _remoteChainId, address _remoteBridge) onlyWhiteListCaller external {
require(_remoteChainId == REMOTE_CHAINID, "invalid remote chainId");
appPairs[msg.sender] = _remoteBridge;
}

function recvMessage(address _remoteApp, address _localApp, bytes memory _message) onlyRemoteBridge external {
address remoteAppAddress = appPairs[_localApp];
require(remoteAppAddress == _remoteApp, "invalid remote app");
(bool result,) = _localApp.call(_message);
require(result == true, "local call failed");
}
}

62 changes: 62 additions & 0 deletions helix-contract/contracts/ln/messager/Eth2ScrollSendService.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "./interface/IScrollMessenger.sol";
import "../base/LnAccessController.sol";
import "../interface/ILowLevelMessager.sol";

contract Eth2ScrollSendService is ILowLevelMessageSender, LnAccessController {
uint256 immutable public REMOTE_CHAINID;
IScrollMessenger immutable public scrollMessager;
address public remoteMessager;
mapping(address=>address) public appPairs;

constructor(address _dao, address _scrollMessager, uint256 _remoteChainId) {
_initialize(_dao);
scrollMessager = IScrollMessenger(_scrollMessager);
REMOTE_CHAINID = _remoteChainId;
}

function setRemoteMessager(address _remoteMessager) onlyDao external {
remoteMessager = _remoteMessager;
}

function registerRemoteReceiver(uint256 _remoteChainId, address _remoteBridge) onlyWhiteListCaller external {
require(_remoteChainId == REMOTE_CHAINID, "invalid remote chainId");
appPairs[msg.sender] = _remoteBridge;
}

function sendMessage(uint256 _remoteChainId, bytes memory _message, bytes memory _params) onlyWhiteListCaller external payable {
require(_remoteChainId == REMOTE_CHAINID, "invalid remote chainId");
address remoteAppAddress = appPairs[msg.sender];
require(remoteAppAddress != address(0), "app not registered");

(uint256 l2GasLimit, address refunder) = abi.decode(_params, (uint256, address));

bytes memory remoteReceiveCall = abi.encodeWithSelector(
ILowLevelMessageReceiver.recvMessage.selector,
msg.sender,
remoteAppAddress,
_message
);
scrollMessager.sendMessage{value: msg.value}(
remoteMessager,
0,
remoteReceiveCall,
l2GasLimit,
refunder
);
}

function fee(uint256 _l2GasLimit) external view returns(uint256) {
address messageQueue = scrollMessager.messageQueue();
return IL1MessageQueue(messageQueue).estimateCrossDomainMessageFee(_l2GasLimit);
}

function encodeParams(
uint256 _l2GasLimit,
address _refunder
) external pure returns(bytes memory) {
return abi.encode(_l2GasLimit, _refunder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IScrollMessenger {
function sendMessage(address target, uint256 value, bytes calldata message, uint256 gasLimit, address refundAddress) external payable;
function messageQueue() external view returns (address);
function xDomainMessageSender() external view returns (address);
}

interface IL1MessageQueue {
function estimateCrossDomainMessageFee(uint256 gasLimit) external view returns(uint256);
}
12 changes: 11 additions & 1 deletion helix-contract/deploy/deploy_ln_logic.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ const lineaNetwork = {
deployer: "0xbe6b2860d3c17a719be0A4911EA0EE689e8357f3",
};

const sepoliaNetwork = {
url: "https://rpc-sepolia.rockx.com",
deployer: "0xbe6b2860d3c17a719be0A4911EA0EE689e8357f3",
}

const scrollSepoliaNetwork = {
url: "https://sepolia-rpc.scroll.io/",
deployer: "0xbe6b2860d3c17a719be0A4911EA0EE689e8357f3",
}

function wallet(url) {
const provider = new ethers.providers.JsonRpcProvider(url);
const wallet = new ethers.Wallet(privateKey, provider);
Expand All @@ -50,7 +60,7 @@ async function deployLnOppositeBridge(wallet, deployerAddress, salt) {

// 2. deploy mapping token factory
async function main() {
const networks = [goerliNetwork, mantleNetwork, arbitrumNetwork, lineaNetwork];
const networks = [goerliNetwork, mantleNetwork, arbitrumNetwork, lineaNetwork, sepoliaNetwork, scrollSepoliaNetwork];
for (const network of networks) {
const w = wallet(network.url);
//const logicAddress = await deployLnDefaultBridge(w, network.deployer, "ln-default-logic-v1.0.0");
Expand Down
27 changes: 27 additions & 0 deletions helix-contract/deploy/deploy_ln_messager.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,20 @@ const mantleNetwork = {
axName: "mantle",
}

const scrollNetwork = {
url: "https://sepolia-rpc.scroll.io/",
dao: "0x88a39B052d477CfdE47600a7C9950a441Ce61cb4",
chainId: 534351,
scrollMessager: "0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d",
}

const sepoliaNetwork = {
url: "https://rpc2.sepolia.org",
dao: "0x88a39B052d477CfdE47600a7C9950a441Ce61cb4",
chainId: 11155111,
scrollMessager: "0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A",
}

function wait(ms) {
return new Promise(resolve => setTimeout(() => resolve(), ms));
};
Expand All @@ -89,7 +103,10 @@ async function main() {
const goerliWallet = wallet(goerliNetwork.url);
const mantleWallet = wallet(mantleNetwork.url);
const zkSyncWallet = wallet(zkSyncNetwork.url);
const scrollWallet = wallet(scrollNetwork.url);
const sepoliaWallet = wallet(sepoliaNetwork.url);

/*
// deploy arb<>eth
console.log("deploy arb <> eth messager");
const Eth2ArbReceiveService = await deployContract(arbWallet, "Eth2ArbReceiveService", arbitrumNetwork.dao, goerliNetwork.chainId);
Expand Down Expand Up @@ -160,7 +177,17 @@ async function main() {
await axArbitrum.setRemoteMessager(mantleNetwork.chainId, mantleNetwork.axName, axMantle.address);
await axLinea.setRemoteMessager(mantleNetwork.chainId, mantleNetwork.axName, axMantle.address);
await axMantle.setRemoteMessager(lineaNetwork.chainId, lineaNetwork.axName, axLinea.address);
*/

// deploy scroll
console.log("deploy scroll <> eth messager");
const Eth2ScrollReceiveService = await deployContract(scrollWallet, "Eth2ScrollReceiveService", scrollNetwork.dao, scrollNetwork.scrollMessager, sepoliaNetwork.chainId);
const Eth2ScrollSendService = await deployContract(sepoliaWallet, "Eth2ScrollSendService", sepoliaNetwork.dao, sepoliaNetwork.scrollMessager, scrollNetwork.chainId);
await wait(10000);
await Eth2ScrollReceiveService.setRemoteMessager(Eth2ScrollSendService.address);
await Eth2ScrollSendService.setRemoteMessager(Eth2ScrollReceiveService.address);
await wait(10000);

/*
// deploy debug messager
await deployContract(goerliWallet, "DebugMessager");
Expand Down
14 changes: 13 additions & 1 deletion helix-contract/deploy/deploy_ln_proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ const mantleGoerliNetwork = {
dao: "0x88a39B052d477CfdE47600a7C9950a441Ce61cb4",
};

const sepoliaNetwork = {
name: "sepolia",
url: "https://rpc-sepolia.rockx.com",
dao: "0x88a39B052d477CfdE47600a7C9950a441Ce61cb4",
};

const scrollSepoliaNetwork = {
name: "scroll-sepolia",
url: "https://sepolia-rpc.scroll.io/",
dao: "0x88a39B052d477CfdE47600a7C9950a441Ce61cb4",
};

function wallet(url) {
const provider = new ethers.providers.JsonRpcProvider(url);
const wallet = new ethers.Wallet(privateKey, provider);
Expand Down Expand Up @@ -72,7 +84,7 @@ async function deploy() {
fs.readFileSync(pathConfig, "utf8")
);

const chains = [goerliNetwork, lineaGoerliNetwork, arbitrumGoerliNetwork, mantleGoerliNetwork];
const chains = [goerliNetwork, lineaGoerliNetwork, arbitrumGoerliNetwork, mantleGoerliNetwork, sepoliaNetwork, scrollSepoliaNetwork];
for (const chain of chains) {
const w = wallet(chain.url);
const proxyAdmin = configure.ProxyAdmin.others;
Expand Down
37 changes: 36 additions & 1 deletion helix-contract/deploy/deploy_ln_test_token.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,40 @@ const lineaNetwork = {
],
};

const sepoliaNetwork = {
url: "https://rpc-sepolia.rockx.com",
tokens: [
{
name: "Helix Test Token USDT",
symbol: "USDT",
decimals: 18
},
{
name: "Helix Test Token USDC",
symbol: "USDC",
decimals: 18
},
],
};

const scrollSepoliaNetwork = {
url: "https://sepolia-rpc.scroll.io/",
tokens: [
{
name: "Helix Test Token USDT",
symbol: "USDT",
decimals: 18
},
{
name: "Helix Test Token USDC",
symbol: "USDC",
decimals: 18
},
],
};



function wallet(url) {
const provider = new ethers.providers.JsonRpcProvider(url);
const wallet = new ethers.Wallet(privateKey, provider);
Expand All @@ -76,7 +110,8 @@ function wallet(url) {

// 2. deploy mapping token factory
async function main() {
const networks = [goerliNetwork, mantleNetwork, arbitrumNetwork, lineaNetwork];
//const networks = [goerliNetwork, mantleNetwork, arbitrumNetwork, lineaNetwork, sepoliaNetwork, scrollSepoliaNetwork];
const networks = [sepoliaNetwork, scrollSepoliaNetwork];
for (const network of networks) {
const w = wallet(network.url);

Expand Down
2 changes: 2 additions & 0 deletions helix-contract/deploy/flatten-ln.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,7 @@ yarn flat contracts/ln/messager/Eth2LineaReceiveService.sol --output $path/Eth2L
yarn flat contracts/ln/messager/Eth2ArbSendService.sol --output $path/Eth2ArbSendService.sol
yarn flat contracts/ln/messager/Eth2ArbReceiveService.sol --output $path/Eth2ArbReceiveService.sol
yarn flat contracts/ln/messager/LayerZeroMessager.sol --output $path/LayerZeroMessager.sol
yarn flat contracts/ln/messager/Eth2ScrollSendService.sol --output $path/Eth2ScrollSendService.sol
yarn flat contracts/ln/messager/Eth2ScrollReceiveService.sol --output $path/Eth2ScrollReceiveService.sol
yarn flat contracts/ln/messager/debugMessager.sol --output $path/debugMessager.sol
yarn flat contracts/ln/test/TestToken.sol --output $path/TestToken.sol
Loading

0 comments on commit ad95dbc

Please sign in to comment.