OverheadIGP.sol, deploy new IGPs, deploy ValidatorAnnounce (#1572)
* IGP charges 1 wei * Don't pay for gas in LiquidityLayerRouter * yarn gas * Add GasOverheadIgp * Remove compiler silencing * yarn gas * Shift around some fns * nit var name * nit * Configure gas overhead IGP (#1588) * Instrument multisigIsm.verify gas costs * Add deployment tooling for IGP gas overhead * Include mailbox.process and max body in overhead * Restore multisig tests * GasOverheadIgp -> OverheadIgp, fix infra build * Prettier, change some infra / deploy tooling * run yarn hyperlane * yarn gas * yarn gas, update test contracts * rm OwnableUpgradeable for Overhead ISM * Move gas instrumentation into its own describe * back to TestRecipient__factory for normal verify tests * New submodule commits * deploy test * BaseInterchainGasPaymaster -> InterchainGasPaymaster * trying to deploy * Deploying with deployerOwnedProxyAdmin * Deployed to testnet3 * Cleaning up * cleaning up * clean * Fix tests * revert infra/package.json * clean up verification.json * Update yarn.lock * Fix lint * Changing logic around deployerOwnedProxyAdmin * Deploy mainnet * Redeploy testnet with new salt versions * nit Co-authored-by: Yorke Rhodes <yorke@hyperlane.xyz>nambrot/celo-safe
parent
13daa1bd86
commit
bf9d0ae792
@ -0,0 +1,133 @@ |
||||
// SPDX-License-Identifier: MIT OR Apache-2.0 |
||||
pragma solidity >=0.8.0; |
||||
|
||||
// ============ Internal Imports ============ |
||||
import {IInterchainGasPaymaster} from "../../interfaces/IInterchainGasPaymaster.sol"; |
||||
// ============ External Imports ============ |
||||
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; |
||||
|
||||
/** |
||||
* @notice An IGP that adds configured gas overheads to gas amounts and forwards |
||||
* calls to an "inner" IGP. |
||||
* @dev The intended use of this contract is to store overhead gas amounts for destination |
||||
* domains, e.g. Mailbox and/or ISM gas usage, such that users of this IGP are only required |
||||
* to specify the gas amount used by their own applications. |
||||
*/ |
||||
contract OverheadIgp is IInterchainGasPaymaster, Ownable { |
||||
// ============ Constants ============ |
||||
|
||||
/// @notice The IGP that is called when paying for or quoting gas |
||||
/// after applying overhead gas amounts. |
||||
IInterchainGasPaymaster public immutable innerIgp; |
||||
|
||||
// ============ Public Storage ============ |
||||
|
||||
/// @notice Destination domain => overhead gas amount on that domain. |
||||
mapping(uint32 => uint256) public destinationGasOverhead; |
||||
|
||||
// ============ Events ============ |
||||
|
||||
/** |
||||
* @notice Emitted when an entry in the destinationGasOverhead mapping is set. |
||||
* @param domain The destination domain. |
||||
* @param gasOverhead The gas overhead amount on that domain. |
||||
*/ |
||||
event DestinationGasOverheadSet(uint32 indexed domain, uint256 gasOverhead); |
||||
|
||||
struct DomainConfig { |
||||
uint32 domain; |
||||
uint256 gasOverhead; |
||||
} |
||||
|
||||
// ============ Constructor ============ |
||||
|
||||
constructor(address _innerIgp) { |
||||
innerIgp = IInterchainGasPaymaster(_innerIgp); |
||||
} |
||||
|
||||
// ============ External Functions ============ |
||||
|
||||
/** |
||||
* @notice Adds the stored destinationGasOverhead to the _gasAmount and forwards the |
||||
* call to the innerIgp's `payForGas` function. |
||||
* @param _messageId The ID of the message to pay for. |
||||
* @param _destinationDomain The domain of the message's destination chain. |
||||
* @param _gasAmount The amount of destination gas to pay for. This should not |
||||
* consider any gas that is accounted for in the stored destinationGasOverhead. |
||||
* @param _refundAddress The address to refund any overpayment to. |
||||
*/ |
||||
function payForGas( |
||||
bytes32 _messageId, |
||||
uint32 _destinationDomain, |
||||
uint256 _gasAmount, |
||||
address _refundAddress |
||||
) external payable { |
||||
innerIgp.payForGas{value: msg.value}( |
||||
_messageId, |
||||
_destinationDomain, |
||||
destinationGasAmount(_destinationDomain, _gasAmount), |
||||
_refundAddress |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* @notice Sets destination gas overheads for multiple domains. |
||||
* @dev Only callable by the owner. |
||||
* @param configs A list of destination domains and gas overheads. |
||||
*/ |
||||
function setDestinationGasOverheads(DomainConfig[] calldata configs) |
||||
external |
||||
onlyOwner |
||||
{ |
||||
for (uint256 i; i < configs.length; i++) { |
||||
_setDestinationGasOverhead(configs[i]); |
||||
} |
||||
} |
||||
|
||||
// ============ Public Functions ============ |
||||
|
||||
/** |
||||
* @notice Adds the stored destinationGasOverhead to the _gasAmount and forwards the |
||||
* call to the innerIgp's `quoteGasPayment` function. |
||||
* @param _destinationDomain The domain of the message's destination chain. |
||||
* @param _gasAmount The amount of destination gas to pay for. This should not |
||||
* consider any gas that is accounted for in the stored destinationGasOverhead. |
||||
* @return The amount of native tokens required to pay for interchain gas. |
||||
*/ |
||||
function quoteGasPayment(uint32 _destinationDomain, uint256 _gasAmount) |
||||
public |
||||
view |
||||
returns (uint256) |
||||
{ |
||||
return |
||||
innerIgp.quoteGasPayment( |
||||
_destinationDomain, |
||||
destinationGasAmount(_destinationDomain, _gasAmount) |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* @notice Returns the stored destinationGasOverhead added to the _gasAmount. |
||||
* @dev If there is no stored destinationGasOverhead, 0 is used. |
||||
* @param _destinationDomain The domain of the message's destination chain. |
||||
* @param _gasAmount The amount of destination gas to pay for. This should not |
||||
* consider any gas that is accounted for in the stored destinationGasOverhead. |
||||
* @return The stored destinationGasOverhead added to the _gasAmount. |
||||
*/ |
||||
function destinationGasAmount(uint32 _destinationDomain, uint256 _gasAmount) |
||||
public |
||||
view |
||||
returns (uint256) |
||||
{ |
||||
return destinationGasOverhead[_destinationDomain] + _gasAmount; |
||||
} |
||||
|
||||
/** |
||||
* @notice Sets the destination gas overhead for a single domain. |
||||
* @param config The destination domain and gas overhead. |
||||
*/ |
||||
function _setDestinationGasOverhead(DomainConfig calldata config) internal { |
||||
destinationGasOverhead[config.domain] = config.gasOverhead; |
||||
emit DestinationGasOverheadSet(config.domain, config.gasOverhead); |
||||
} |
||||
} |
@ -0,0 +1,12 @@ |
||||
import "./TestRecipient.sol"; |
||||
|
||||
contract LightTestRecipient is TestRecipient { |
||||
// solhint-disable-next-line no-empty-blocks |
||||
function handle( |
||||
uint32 _origin, |
||||
bytes32 _sender, |
||||
bytes calldata _data |
||||
) external override { |
||||
// do nothing |
||||
} |
||||
} |
@ -0,0 +1,146 @@ |
||||
// SPDX-License-Identifier: Apache-2.0 |
||||
pragma solidity ^0.8.13; |
||||
|
||||
import {Test} from "forge-std/Test.sol"; |
||||
import {OverheadIgp} from "../../contracts/igps/OverheadIgp.sol"; |
||||
import {InterchainGasPaymaster} from "../../contracts/igps/InterchainGasPaymaster.sol"; |
||||
|
||||
contract OverheadIgpTest is Test { |
||||
OverheadIgp igp; |
||||
|
||||
InterchainGasPaymaster innerIgp; |
||||
|
||||
bytes32 constant testMessageId = |
||||
bytes32( |
||||
0xf00000000000000000000000000000000000000000000000000000000000000f |
||||
); |
||||
uint32 constant testDestinationDomain = 1234; |
||||
uint256 constant testGasOverhead = 123000; |
||||
uint256 constant testGasAmount = 50000; |
||||
|
||||
address constant nonOwner = 0xCAfEcAfeCAfECaFeCaFecaFecaFECafECafeCaFe; |
||||
|
||||
event InnerIgpSet(address innerIgp); |
||||
event DestinationGasOverheadSet(uint32 indexed domain, uint256 gasOverhead); |
||||
|
||||
function setUp() public { |
||||
innerIgp = new InterchainGasPaymaster(); |
||||
igp = new OverheadIgp(address(innerIgp)); |
||||
} |
||||
|
||||
function testInnerIgpSet() public { |
||||
assertEq(address(igp.innerIgp()), address(innerIgp)); |
||||
} |
||||
|
||||
function testPayForGas() public { |
||||
setTestDestinationGasOverhead(); |
||||
|
||||
uint256 testPayment = 123456789; |
||||
|
||||
vm.expectCall( |
||||
address(innerIgp), |
||||
testPayment, |
||||
abi.encodeCall( |
||||
innerIgp.payForGas, |
||||
( |
||||
testMessageId, |
||||
testDestinationDomain, |
||||
testGasOverhead + testGasAmount, |
||||
msg.sender |
||||
) |
||||
) |
||||
); |
||||
|
||||
igp.payForGas{value: testPayment}( |
||||
testMessageId, |
||||
testDestinationDomain, |
||||
testGasAmount, |
||||
msg.sender |
||||
); |
||||
} |
||||
|
||||
function testQuoteGasPayment() public { |
||||
setTestDestinationGasOverhead(); |
||||
|
||||
vm.expectCall( |
||||
address(innerIgp), |
||||
abi.encodeCall( |
||||
innerIgp.quoteGasPayment, |
||||
(testDestinationDomain, testGasOverhead + testGasAmount) |
||||
) |
||||
); |
||||
|
||||
igp.quoteGasPayment(testDestinationDomain, testGasAmount); |
||||
} |
||||
|
||||
function testDestinationGasAmount() public { |
||||
setTestDestinationGasOverhead(); |
||||
|
||||
assertEq( |
||||
igp.destinationGasAmount(testDestinationDomain, testGasAmount), |
||||
testGasOverhead + testGasAmount |
||||
); |
||||
} |
||||
|
||||
// Test that it doesn't revert, and just doesn't add any value to the |
||||
// provided gas amount |
||||
function testDestinationGasAmountWhenOverheadNotSet() public { |
||||
assertEq( |
||||
igp.destinationGasAmount(testDestinationDomain, testGasAmount), |
||||
testGasAmount |
||||
); |
||||
} |
||||
|
||||
function testSetDestinationGasAmounts() public { |
||||
OverheadIgp.DomainConfig[] |
||||
memory configs = new OverheadIgp.DomainConfig[](2); |
||||
configs[0] = OverheadIgp.DomainConfig( |
||||
testDestinationDomain, |
||||
testGasOverhead |
||||
); |
||||
configs[1] = OverheadIgp.DomainConfig(4321, 432100); |
||||
|
||||
// Topic 0 = event signature |
||||
// Topic 1 = indexed domain |
||||
// Topic 2 = not set |
||||
// Data = gas amount |
||||
vm.expectEmit(true, true, false, true); |
||||
emit DestinationGasOverheadSet( |
||||
configs[0].domain, |
||||
configs[0].gasOverhead |
||||
); |
||||
vm.expectEmit(true, true, false, true); |
||||
emit DestinationGasOverheadSet( |
||||
configs[1].domain, |
||||
configs[1].gasOverhead |
||||
); |
||||
|
||||
igp.setDestinationGasOverheads(configs); |
||||
} |
||||
|
||||
function testSetDestinationGasAmountsNotOwner() public { |
||||
OverheadIgp.DomainConfig[] |
||||
memory configs = new OverheadIgp.DomainConfig[](2); |
||||
configs[0] = OverheadIgp.DomainConfig( |
||||
testDestinationDomain, |
||||
testGasOverhead |
||||
); |
||||
configs[1] = OverheadIgp.DomainConfig(4321, 432100); |
||||
|
||||
vm.expectRevert("Ownable: caller is not the owner"); |
||||
vm.prank(nonOwner); |
||||
igp.setDestinationGasOverheads(configs); |
||||
} |
||||
|
||||
// ============ Helper Functions ============ |
||||
|
||||
function setTestDestinationGasOverhead() internal { |
||||
OverheadIgp.DomainConfig[] |
||||
memory configs = new OverheadIgp.DomainConfig[](1); |
||||
configs[0] = OverheadIgp.DomainConfig( |
||||
testDestinationDomain, |
||||
testGasOverhead |
||||
); |
||||
igp.setDestinationGasOverheads(configs); |
||||
} |
||||
} |
@ -1 +1 @@ |
||||
Subproject commit 17a4533f40b2144afd47fc3c734e228b7991e369 |
||||
Subproject commit e30598d13ba9a773f7e62c2029c61d052194f8b7 |
@ -1,138 +1,154 @@ |
||||
{ |
||||
"celo": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0x90f9a2E9eCe93516d65FdaB726a3c62F5960a1b9", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xde86327fbfd04c4ea11dc0f270da6083534c2582", |
||||
"implementation": "0x388411dab2865c9e9f562618d4252aa2808b8bb0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0x3f23f4594e1cCA1734d0A7F15495bF3C4cdb55db" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0x9bDE63104EE030d9De419EEd6bA7D14b86D6fE3f", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"ethereum": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0x75EE15Ee1B4A75Fa3e2fDF5DF3253c25599cc659", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0xcC48E741996B0d77b38d9dC2bf9217e65E368E06" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0xec48E52D960E54a179f70907bF28b105813877ee", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5" |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"avalanche": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0xd7CF8c05fd81b8cA7CfF8E6C49B08a9D63265c9B", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0xFB4712576680002C2690f66C0c5eedEa5260DBfB" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0xeE80ab5B563cB3825133f29502bA34eD3707cb8C", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"polygon": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0xC4F7590C5d30BE959225dC75640657954A86b980", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0xd63C65e84059b9d32bc979016bbC2976138da694" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0x61A80297e77FC5395bd6Ff60EEacf7CD4f18d4a4", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"bsc": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0x65993Af9D0D3a64ec77590db7ba362D6eB78eF70", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0x961877927Ec6B0a9133DbBb1d0232CB6A5C28b54" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0x3a579C0bd04FC4C98A8D70EEABD9094e7be4B26D", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"arbitrum": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0x80Cebd56A65e46c474a1A101e89E76C4c51D179c", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0x4B5bc88A0D383c3C6E72D9889afaBB12A5dCCCfa" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0x32B92bd3e5045B67FDD8dbb7A58D25980836d04C", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5" |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"optimism": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0xE047cb95FB3b7117989e911c6afb34771183fC35", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0x6989120F7042Df0895dBE856b73A31E4cD0A2Cad" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0xAab1D11E2063Bae5EB01fa946cA8d2FDe3db05D5", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5" |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
}, |
||||
"moonbeam": { |
||||
"validatorAnnounce": "0xB5bc6369bc2Dc8969B18f6C25488EC0a38cA637f", |
||||
"proxyAdmin": "0x6A9cdA3dd1F593983BFd142Eb35e6ce4137bd5ce", |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xdE86327fBFD04C4eA11dC0F270DA6083534c2582", |
||||
"implementation": "0x388411DAb2865c9E9F562618D4252AA2808b8bB0" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x35231d4c2D8B8ADcB5617A638A0c4548684c7C70", |
||||
"implementation": "0x1747Fa1b94862C8648BF0637767315FD1Fa2106C" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x6cA0B6D22da47f091B7613223cD4BB03a2d77918", |
||||
"implementation": "0xAb311C7DAE251C1eB24c5A5409d47a415828d5E5" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x56f52c0A1ddcD557285f7CBc782D3d83096CE1Cc", |
||||
"multisigIsm": "0xf3b1F415740A26568C45b1c771A737E31C198F09", |
||||
"create2Factory": "0xc97D8e6f57b0d64971453dDc6EB8483fec9d163a", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784", |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5" |
||||
"interchainAccountRouter": "0xE0Be420779cAd6E2bEA1E4F7C02F996D9ED1fCB5", |
||||
"interchainQueryRouter": "0x234b19282985882d6d6fd54dEBa272271f4eb784" |
||||
} |
||||
} |
||||
|
@ -1,47 +1,50 @@ |
||||
{ |
||||
"test1": { |
||||
"validatorAnnounce": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", |
||||
"validatorAnnounce": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", |
||||
"proxyAdmin": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", |
||||
"implementation": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" |
||||
}, |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", |
||||
"implementation": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" |
||||
}, |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", |
||||
"implementation": "0x0165878A594ca255338adfa4d48449f69242Eb8F" |
||||
}, |
||||
"defaultIsmInterchainGasPaymaster": "0x0165878A594ca255338adfa4d48449f69242Eb8F", |
||||
"multisigIsm": "0x5FbDB2315678afecb367f032d93F642f64180aa3" |
||||
}, |
||||
"test2": { |
||||
"validatorAnnounce": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", |
||||
"proxyAdmin": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", |
||||
"interchainGasPaymaster": { |
||||
"validatorAnnounce": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", |
||||
"proxyAdmin": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x9A676e781A523b5d0C0e43731313A708CB607508", |
||||
"implementation": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" |
||||
"proxy": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", |
||||
"implementation": "0x59b670e9fA9D0A427751Af201D676719a970857b" |
||||
}, |
||||
"mailbox": { |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", |
||||
"implementation": "0x0B306BF915C4d645ff596e518fAf3F9669b97016" |
||||
"proxy": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", |
||||
"implementation": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1" |
||||
}, |
||||
"multisigIsm": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" |
||||
"defaultIsmInterchainGasPaymaster": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", |
||||
"multisigIsm": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" |
||||
}, |
||||
"test3": { |
||||
"validatorAnnounce": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", |
||||
"proxyAdmin": "0x59b670e9fA9D0A427751Af201D676719a970857b", |
||||
"interchainGasPaymaster": { |
||||
"validatorAnnounce": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8", |
||||
"proxyAdmin": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", |
||||
"mailbox": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", |
||||
"implementation": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1" |
||||
"proxy": "0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9", |
||||
"implementation": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" |
||||
}, |
||||
"mailbox": { |
||||
"interchainGasPaymaster": { |
||||
"kind": "Transparent", |
||||
"proxy": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", |
||||
"implementation": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f" |
||||
"proxy": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", |
||||
"implementation": "0xc5a5C42992dECbae36851359345FE25997F5C42d" |
||||
}, |
||||
"multisigIsm": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed" |
||||
"defaultIsmInterchainGasPaymaster": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E", |
||||
"multisigIsm": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f" |
||||
} |
||||
} |
||||
|
@ -0,0 +1,209 @@ |
||||
{ |
||||
"1": { |
||||
"1": 151966 |
||||
}, |
||||
"2": { |
||||
"1": 152776, |
||||
"2": 159337 |
||||
}, |
||||
"3": { |
||||
"1": 153154, |
||||
"2": 159736, |
||||
"3": 166518 |
||||
}, |
||||
"4": { |
||||
"1": 153132, |
||||
"2": 160545, |
||||
"3": 166460, |
||||
"4": 173857 |
||||
}, |
||||
"5": { |
||||
"1": 153561, |
||||
"2": 160948, |
||||
"3": 166887, |
||||
"4": 174283, |
||||
"5": 180843 |
||||
}, |
||||
"6": { |
||||
"1": 154381, |
||||
"2": 160950, |
||||
"3": 167741, |
||||
"4": 174289, |
||||
"5": 181661, |
||||
"6": 187506 |
||||
}, |
||||
"7": { |
||||
"1": 154780, |
||||
"2": 161377, |
||||
"3": 168127, |
||||
"4": 174660, |
||||
"5": 182044, |
||||
"6": 187871, |
||||
"7": 195228 |
||||
}, |
||||
"8": { |
||||
"1": 154751, |
||||
"2": 162176, |
||||
"3": 168111, |
||||
"4": 175458, |
||||
"5": 182029, |
||||
"6": 188708, |
||||
"7": 195207, |
||||
"8": 202564 |
||||
}, |
||||
"9": { |
||||
"1": 155175, |
||||
"2": 162574, |
||||
"3": 168509, |
||||
"4": 175880, |
||||
"5": 182451, |
||||
"6": 189116, |
||||
"7": 195619, |
||||
"8": 202926, |
||||
"9": 209459 |
||||
}, |
||||
"10": { |
||||
"1": 155972, |
||||
"2": 162544, |
||||
"3": 169303, |
||||
"4": 175872, |
||||
"5": 183245, |
||||
"6": 189087, |
||||
"7": 196433, |
||||
"8": 202928, |
||||
"9": 210335, |
||||
"10": 216833 |
||||
}, |
||||
"11": { |
||||
"1": 156396, |
||||
"2": 162991, |
||||
"3": 169735, |
||||
"4": 176229, |
||||
"5": 183626, |
||||
"6": 189463, |
||||
"7": 196820, |
||||
"8": 203319, |
||||
"9": 210689, |
||||
"10": 217148, |
||||
"11": 223689 |
||||
}, |
||||
"12": { |
||||
"1": 156357, |
||||
"2": 163757, |
||||
"3": 169683, |
||||
"4": 177068, |
||||
"5": 183616, |
||||
"6": 190277, |
||||
"7": 196772, |
||||
"8": 204155, |
||||
"9": 210671, |
||||
"10": 218015, |
||||
"11": 223683, |
||||
"12": 231012 |
||||
}, |
||||
"13": { |
||||
"1": 156768, |
||||
"2": 164180, |
||||
"3": 170119, |
||||
"4": 177491, |
||||
"5": 184053, |
||||
"6": 190701, |
||||
"7": 197221, |
||||
"8": 204529, |
||||
"9": 211064, |
||||
"10": 217592, |
||||
"11": 224150, |
||||
"12": 231454, |
||||
"13": 237947 |
||||
}, |
||||
"14": { |
||||
"1": 157580, |
||||
"2": 164149, |
||||
"3": 170915, |
||||
"4": 177487, |
||||
"5": 184847, |
||||
"6": 190692, |
||||
"7": 198036, |
||||
"8": 204574, |
||||
"9": 211882, |
||||
"10": 217598, |
||||
"11": 224890, |
||||
"12": 231451, |
||||
"13": 238707, |
||||
"14": 245204 |
||||
}, |
||||
"15": { |
||||
"1": 158012, |
||||
"2": 164551, |
||||
"3": 171264, |
||||
"4": 177885, |
||||
"5": 185270, |
||||
"6": 191103, |
||||
"7": 198448, |
||||
"8": 204980, |
||||
"9": 212313, |
||||
"10": 217945, |
||||
"11": 225300, |
||||
"12": 231846, |
||||
"13": 239126, |
||||
"14": 245674, |
||||
"15": 252955 |
||||
}, |
||||
"16": { |
||||
"1": 158003, |
||||
"2": 164767, |
||||
"3": 171299, |
||||
"4": 178660, |
||||
"5": 185205, |
||||
"6": 191885, |
||||
"7": 198396, |
||||
"8": 205716, |
||||
"9": 212275, |
||||
"10": 218798, |
||||
"11": 225261, |
||||
"12": 232591, |
||||
"13": 239076, |
||||
"14": 246406, |
||||
"15": 252929, |
||||
"16": 260235 |
||||
}, |
||||
"17": { |
||||
"1": 158372, |
||||
"2": 165146, |
||||
"3": 171710, |
||||
"4": 179071, |
||||
"5": 185629, |
||||
"6": 192270, |
||||
"7": 198792, |
||||
"8": 206150, |
||||
"9": 212684, |
||||
"10": 219180, |
||||
"11": 225718, |
||||
"12": 233010, |
||||
"13": 239520, |
||||
"14": 246837, |
||||
"15": 253362, |
||||
"16": 260667, |
||||
"17": 266157 |
||||
}, |
||||
"18": { |
||||
"1": 159204, |
||||
"2": 165132, |
||||
"3": 172505, |
||||
"4": 179062, |
||||
"5": 186460, |
||||
"6": 192264, |
||||
"7": 199633, |
||||
"8": 206105, |
||||
"9": 213500, |
||||
"10": 219164, |
||||
"11": 226493, |
||||
"12": 232978, |
||||
"13": 240321, |
||||
"14": 246819, |
||||
"15": 254162, |
||||
"16": 260635, |
||||
"17": 266966, |
||||
"18": 273420 |
||||
} |
||||
} |
@ -1 +1 @@ |
||||
Subproject commit 84a64903545364ca50336e0b62910eca1e9d7567 |
||||
Subproject commit f83f53f614fa0e456557164b24d557e2d51ace33 |
Loading…
Reference in new issue