Skip to content

Commit

Permalink
Merge pull request #2 from skip-mev/jw/ism
Browse files Browse the repository at this point in the history
add interchainSecurityModule to FastTransferGateway
thal0x authored Oct 13, 2024
2 parents 13fad6d + 4e6d501 commit d13cf42
Showing 7 changed files with 208 additions and 108 deletions.
117 changes: 117 additions & 0 deletions solidity/broadcast/Upgrade.s.sol/42161/run-1728824221.json

Large diffs are not rendered by default.

86 changes: 43 additions & 43 deletions solidity/broadcast/Upgrade.s.sol/42161/run-latest.json

Large diffs are not rendered by default.

34 changes: 22 additions & 12 deletions solidity/script/Deploy.s.sol
Original file line number Diff line number Diff line change
@@ -6,33 +6,43 @@ import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.s
import {FastTransferGateway} from "../src/FastTransferGateway.sol";

contract DeployScript is Script {
function setUp() public {}
address public constant USDC_ABRITRUM = 0xaf88d065e77c8cC2239327C5EDb3A432268e5831;
address public constant PERMIT2_ABRITRUM = 0x000000000022D473030F116dDEE9F6B43aC78BA3;
address public constant MAILBOX_ABRITRUM = 0xB0D479FF725668bAB83aD4F24485851927Fc56D7;
address public constant INTERCHAIN_SECURITY_MODULE_ABRITRUM = 0xb49a14568f9CC440f2c7DCf7FC6766040a5eb860;

function run() public {
vm.startBroadcast();
address public owner = 0x56Ca414d41CD3C1188A4939b0D56417dA7Bb6DA2;

address owner = address(0x56Ca414d41CD3C1188A4939b0D56417dA7Bb6DA2);
address token = address(0xaf88d065e77c8cC2239327C5EDb3A432268e5831); // USDC
address mailbox = address(0x979Ca5202784112f4738403dBec5D0F3B9daabB9);
address permit2 = address(0x000000000022D473030F116dDEE9F6B43aC78BA3);
function run(uint32 chainID) public {
(address usdc, address permit2, address mailbox, address interchainSecurityModule) = _getInitValues(chainID);

uint32 localDomain = 1;
vm.startBroadcast();

FastTransferGateway gatewayImpl = new FastTransferGateway();

ERC1967Proxy gatewayProxy = new ERC1967Proxy(
address(gatewayImpl),
abi.encodeWithSignature(
"initialize(uint32,address,address,address,address)",
localDomain,
"initialize(uint32,address,address,address,address,address)",
chainID,
owner,
address(token),
usdc,
mailbox,
address(permit2)
interchainSecurityModule,
permit2
)
);

console.log("Gateway deployed at", address(gatewayProxy));

vm.stopBroadcast();
}

function _getInitValues(uint32 chainID) internal pure returns (address, address, address, address) {
if (chainID == 42161) {
return (USDC_ABRITRUM, PERMIT2_ABRITRUM, MAILBOX_ABRITRUM, INTERCHAIN_SECURITY_MODULE_ABRITRUM);
}

revert("Invalid chain ID");
}
}
47 changes: 0 additions & 47 deletions solidity/script/Deploy2.s.sol

This file was deleted.

26 changes: 22 additions & 4 deletions solidity/src/FastTransferGateway.sol
Original file line number Diff line number Diff line change
@@ -76,6 +76,7 @@ contract FastTransferGateway is Initializable, UUPSUpgradeable, OwnableUpgradeab
IPermit2 public PERMIT2;
address public token;
address public mailbox;
address public interchainSecurityModule;

// TODO: make this immutable after discussing with the team
uint32 public localDomain;
@@ -93,14 +94,19 @@ contract FastTransferGateway is Initializable, UUPSUpgradeable, OwnableUpgradeab
_disableInitializers();
}

function initialize(uint32 _localDomain, address _owner, address _token, address _mailbox, address _permit2)
external
initializer
{
function initialize(
uint32 _localDomain,
address _owner,
address _token,
address _mailbox,
address _interchainSecurityModule,
address _permit2
) external initializer {
__Ownable_init(_owner);

token = _token;
mailbox = _mailbox;
interchainSecurityModule = _interchainSecurityModule;
localDomain = _localDomain;
PERMIT2 = IPermit2(_permit2);
nonce = 1;
@@ -303,6 +309,18 @@ contract FastTransferGateway is Initializable, UUPSUpgradeable, OwnableUpgradeab
IMailbox(mailbox).dispatch{value: msg.value}(sourceDomain, remoteContract, hyperlaneMessage);
}

/// @dev Updates the Hyperlane mailbox address
/// @param _mailbox The new mailbox address
function setMailbox(address _mailbox) public onlyOwner {
mailbox = _mailbox;
}

/// @dev Updates the interchain security module address
/// @param _interchainSecurityModule The new interchain security module address
function setInterchainSecurityModule(address _interchainSecurityModule) public onlyOwner {
interchainSecurityModule = _interchainSecurityModule;
}

function quoteInitiateSettlement(uint32 sourceDomain, bytes32 repaymentAddress, bytes memory orderIDs)
public
view
3 changes: 2 additions & 1 deletion solidity/test/ERC7683.t.sol
Original file line number Diff line number Diff line change
@@ -59,11 +59,12 @@ contract ERC7683Test is Test {
ERC1967Proxy gatewayProxy = new ERC1967Proxy(
address(gatewayImpl),
abi.encodeWithSignature(
"initialize(uint32,address,address,address,address)",
"initialize(uint32,address,address,address,address,address)",
1,
address(this),
address(usdc),
mailbox,
0x3d0BE14dFbB1Eb736303260c1724B6ea270c8Dc4,
address(permit2)
)
);
3 changes: 2 additions & 1 deletion solidity/test/FastTransferGateway.t.sol
Original file line number Diff line number Diff line change
@@ -56,11 +56,12 @@ contract FastTransferGatewayTest is Test {
ERC1967Proxy gatewayProxy = new ERC1967Proxy(
address(gatewayImpl),
abi.encodeWithSignature(
"initialize(uint32,address,address,address,address)",
"initialize(uint32,address,address,address,address,address)",
1,
address(this),
address(usdc),
mailbox,
0x3d0BE14dFbB1Eb736303260c1724B6ea270c8Dc4,
address(permit2)
)
);

0 comments on commit d13cf42

Please sign in to comment.