Skip to content

Commit

Permalink
Merkle Tree Hook Deployer changes (#2747)
Browse files Browse the repository at this point in the history
### Description

- Interceptor is the pair <hook, ism>
- `MerkleTreeInterceptorDeployer` for deploying merkle root hook and the
`StaticMerkleRootMultisigIsm` on chain

### Drive-by changes

- None

### Related issues

- addresses hyperlane-xyz/issues#621

### Backward compatibility

Yes

### Testing

Manual
  • Loading branch information
aroralanuk authored Oct 2, 2023
1 parent 8e4f2bb commit f0a45bd
Show file tree
Hide file tree
Showing 22 changed files with 225 additions and 401 deletions.
3 changes: 3 additions & 0 deletions rust/utils/run-locally/src/ethereum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ pub fn start_anvil(config: Arc<Config>) -> AgentHandles {
log!("Deploying hyperlane core contracts...");
yarn_infra.clone().cmd("deploy-core").run().join();

log!("Deploying hyperlane hook contracts...");
yarn_infra.clone().cmd("deploy-hook").run().join();

log!("Deploying hyperlane igp contracts...");
yarn_infra.cmd("deploy-igp").run().join();

Expand Down
35 changes: 2 additions & 33 deletions typescript/infra/config/aggregationIsm.ts
Original file line number Diff line number Diff line change
@@ -1,59 +1,28 @@
import {
AggregationIsmConfig,
ChainMap,
ChainName,
Chains,
IsmConfig,
ModuleType,
MultisigIsmConfig,
RoutingIsmConfig,
defaultMultisigIsmConfigs,
} from '@hyperlane-xyz/sdk';
import { Address, objFilter, objMap } from '@hyperlane-xyz/utils';
import { Address } from '@hyperlane-xyz/utils';

import { DeployEnvironment } from '../src/config';

import { Contexts } from './contexts';
import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains';
import { owners as mainnet2Owners } from './environments/mainnet2/owners';
import { chainNames as testChains } from './environments/test/chains';
import { owners as testOwners } from './environments/test/owners';
import { supportedChainNames as testnet3Chains } from './environments/testnet3/chains';
import { owners as testnet3Owners } from './environments/testnet3/owners';
import { rcMultisigIsmConfigs } from './multisigIsm';

const chains = {
mainnet2: mainnet2Chains,
testnet3: testnet3Chains,
test: testChains,
};
import { multisigIsms } from './multisigIsm';

const owners = {
testnet3: testnet3Owners,
mainnet2: mainnet2Owners,
test: testOwners,
};

export const multisigIsms = (
env: DeployEnvironment,
local: ChainName,
type: MultisigIsmConfig['type'],
context: Contexts,
): ChainMap<MultisigIsmConfig> =>
objMap(
objFilter(
context === Contexts.ReleaseCandidate
? rcMultisigIsmConfigs
: defaultMultisigIsmConfigs,
(chain, config): config is MultisigIsmConfig =>
chain !== local && chains[env].includes(chain),
),
(_, config) => ({
...config,
type,
}),
);

/// Routing => Multisig ISM type
export const routingIsm = (
environment: DeployEnvironment,
Expand Down
35 changes: 0 additions & 35 deletions typescript/infra/config/environments/mainnet2/hooks.ts

This file was deleted.

2 changes: 0 additions & 2 deletions typescript/infra/config/environments/mainnet2/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { core } from './core';
import { keyFunderConfig } from './funding';
import { storageGasOracleConfig } from './gas-oracle';
import { helloWorld } from './helloworld';
import { hooks } from './hooks';
import { igp } from './igp';
import { infrastructure } from './infrastructure';
import { bridgeAdapterConfigs, relayerConfig } from './liquidityLayer';
Expand Down Expand Up @@ -45,7 +44,6 @@ export const environment: EnvironmentConfig = {
igp,
owners,
infra: infrastructure,
hooks,
helloWorld,
keyFunderConfig,
storageGasOracleConfig,
Expand Down
39 changes: 10 additions & 29 deletions typescript/infra/config/environments/test/hooks.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
import {
ChainMap,
HookConfig,
HookContractType,
MessageHookConfig,
NoMetadataIsmConfig,
filterByChains,
} from '@hyperlane-xyz/sdk';
import { ChainMap } from '@hyperlane-xyz/sdk';
import { MerkleTreeHookConfig } from '@hyperlane-xyz/sdk/dist/hook/types';
import { HookType } from '@hyperlane-xyz/sdk/src/hook/types';
import { objMap } from '@hyperlane-xyz/utils';

import { owners } from './owners';

const chainNameFilter = new Set(['test1', 'test2']);
const filteredOwnersResult = filterByChains<string>(owners, chainNameFilter);

export const hooks: ChainMap<HookConfig> = objMap(
filteredOwnersResult,
(chain) => {
if (chain === 'test1') {
const hookConfig: MessageHookConfig = {
hookContractType: HookContractType.HOOK,
nativeBridge: '0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1',
remoteIsm: '0x4c5859f0f772848b2d91f1d83e2fe57935348029', // dummy, remoteISM should be deployed first
destination: 'test2',
};
return hookConfig;
} else {
const ismConfig: NoMetadataIsmConfig = {
hookContractType: HookContractType.ISM,
nativeBridge: '0x4200000000000000000000000000000000000007',
};
return ismConfig;
}
export const merkleTree: ChainMap<MerkleTreeHookConfig> = objMap(
owners,
(_, __) => {
const config: MerkleTreeHookConfig = {
type: HookType.MERKLE_TREE_HOOK,
};
return config;
},
);
6 changes: 3 additions & 3 deletions typescript/infra/config/environments/test/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { JsonRpcProvider } from '@ethersproject/providers';

import { MultiProvider, TestChains } from '@hyperlane-xyz/sdk';
import { MultiProvider } from '@hyperlane-xyz/sdk';

import { EnvironmentConfig } from '../../../src/config';

import { agents } from './agent';
import { testConfigs } from './chains';
import { core } from './core';
import { storageGasOracleConfig } from './gas-oracle';
import { hooks } from './hooks';
import { merkleTree } from './hooks';
import { igp } from './igp';
import { infra } from './infra';
import { owners } from './owners';
Expand All @@ -18,7 +18,7 @@ export const environment: EnvironmentConfig = {
chainMetadataConfigs: testConfigs,
agents,
core,
hooks,
hook: merkleTree,
igp,
owners,
infra,
Expand Down
6 changes: 3 additions & 3 deletions typescript/infra/config/environments/test/multisigIsm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const messageIdMultisig = (validatorKey: string): MultisigIsmConfig => {
// the addresses here must line up with the e2e test's validator addresses
export const multisigIsm: ChainMap<MultisigIsmConfig> = {
// Validators are anvil accounts 4-6
test1: messageIdMultisig('test1'),
test2: merkleRootMultisig('test2'),
test3: messageIdMultisig('test3'),
test1: messageIdMultisig(chainToValidator['test1']),
test2: merkleRootMultisig(chainToValidator['test2']),
test3: messageIdMultisig(chainToValidator['test3']),
};
34 changes: 0 additions & 34 deletions typescript/infra/config/environments/testnet3/hooks.ts

This file was deleted.

2 changes: 0 additions & 2 deletions typescript/infra/config/environments/testnet3/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { core } from './core';
import { keyFunderConfig } from './funding';
import { storageGasOracleConfig } from './gas-oracle';
import { helloWorld } from './helloworld';
import { hooks } from './hooks';
import { igp } from './igp';
import { infrastructure } from './infrastructure';
import { bridgeAdapterConfigs } from './liquidityLayer';
Expand Down Expand Up @@ -46,7 +45,6 @@ export const environment: EnvironmentConfig = {
igp,
infra: infrastructure,
helloWorld,
hooks,
owners,
keyFunderConfig,
liquidityLayerConfig: {
Expand Down
133 changes: 39 additions & 94 deletions typescript/infra/config/multisigIsm.ts
Original file line number Diff line number Diff line change
@@ -1,96 +1,41 @@
import { ChainMap, MultisigConfig } from '@hyperlane-xyz/sdk';
import {
ChainMap,
ChainName,
MultisigIsmConfig,
defaultMultisigIsmConfigs,
} from '@hyperlane-xyz/sdk';
import { objFilter, objMap } from '@hyperlane-xyz/utils';

export const rcMultisigIsmConfigs: ChainMap<MultisigConfig> = {
// ----------------- Mainnets -----------------
celo: {
threshold: 1,
validators: [
'0xe7a82e210f512f8e9900d6bc2acbf7981c63e66e', // abacus
],
},
ethereum: {
threshold: 1,
validators: [
'0xaea1adb1c687b061e5b60b9da84cb69e7b5fab44', // abacus
],
},
avalanche: {
threshold: 1,
validators: [
'0x706976391e23dea28152e0207936bd942aba01ce', // abacus
],
},
polygon: {
threshold: 1,
validators: [
'0xef372f6ff7775989b3ac884506ee31c79638c989', // abacus
],
},
bsc: {
threshold: 1,
validators: [
'0x0823081031a4a6f97c6083775c191d17ca96d0ab', // abacus
],
},
arbitrum: {
threshold: 1,
validators: [
'0x1a95b35fb809d57faf1117c1cc29a6c5df289df1', // abacus
],
},
optimism: {
threshold: 1,
validators: [
'0x60e938bf280bbc21bacfd8bf435459d9003a8f98', // abacus
],
},
moonbeam: {
threshold: 1,
validators: [
'0x0df7140811e309dc69638352545151ebb9d5e0fd', // abacus
],
},
gnosis: {
threshold: 1,
validators: [
'0x15f48e78092a4f79febface509cfd76467c6cdbb', // abacus
],
},
// ----------------- Testnets -----------------
alfajores: {
threshold: 1,
validators: ['0x45e5c228b38e1cf09e9a3423ed0cf4862c4bf3de'],
},
fuji: {
threshold: 1,
validators: ['0xd81ba169170a9b582812cf0e152d2c168572e21f'],
},
mumbai: {
threshold: 1,
validators: ['0xb537c4ce34e1cad718be52aa30b095e416eae46a'],
},
bsctestnet: {
threshold: 1,
validators: ['0x77f80ef5b18977e15d81aea8dd3a88e7df4bc0eb'],
},
goerli: {
threshold: 1,
validators: ['0x9597ddb4ad2af237665559574b820596bb77ae7a'],
},
sepolia: {
threshold: 1,
validators: ['0x183f15924f3a464c54c9393e8d268eb44d2b208c'],
},
moonbasealpha: {
threshold: 1,
validators: ['0xbeaf158f85d7b64ced36b8aea0bbc4cd0f2d1a5d'],
},
optimismgoerli: {
threshold: 1,
validators: ['0x1d6798671ac532f2bf30c3a5230697a4695705e4'],
},
arbitrumgoerli: {
threshold: 1,
validators: ['0x6d13367c7cd713a4ea79a2552adf824bf1ecdd5e'],
},
import { DeployEnvironment } from '../src/config';

import { Contexts } from './contexts';
import { supportedChainNames as mainnet2Chains } from './environments/mainnet2/chains';
import { chainNames as testChains } from './environments/test/chains';
import { supportedChainNames as testnet3Chains } from './environments/testnet3/chains';
import { rcMultisigIsmConfigs } from './rcMultisigIsmConfigs';

const chains = {
mainnet2: mainnet2Chains,
testnet3: testnet3Chains,
test: testChains,
};

export const multisigIsms = (
env: DeployEnvironment,
local: ChainName,
type: MultisigIsmConfig['type'],
context: Contexts,
): ChainMap<MultisigIsmConfig> =>
objMap(
objFilter(
context === Contexts.ReleaseCandidate
? rcMultisigIsmConfigs
: defaultMultisigIsmConfigs,
(chain, config): config is MultisigIsmConfig =>
chain !== local && chains[env].includes(chain),
),
(_, config) => ({
...config,
type,
}),
);
Loading

0 comments on commit f0a45bd

Please sign in to comment.