@hyperlane-xyz/sdk 4.0.0-beta → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws/s3.js +1 -1
- package/dist/aws/s3.js.map +1 -1
- package/dist/aws/validator.d.ts +3 -1
- package/dist/aws/validator.d.ts.map +1 -1
- package/dist/aws/validator.js +8 -1
- package/dist/aws/validator.js.map +1 -1
- package/dist/consts/multisigIsm.d.ts.map +1 -1
- package/dist/consts/multisigIsm.js +30 -0
- package/dist/consts/multisigIsm.js.map +1 -1
- package/dist/consts/testChains.d.ts.map +1 -1
- package/dist/consts/testChains.js +0 -5
- package/dist/consts/testChains.js.map +1 -1
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js +4 -2
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCoreChecker.js +1 -1
- package/dist/core/HyperlaneCoreChecker.js.map +1 -1
- package/dist/deploy/EvmModuleDeployer.d.ts +76 -0
- package/dist/deploy/EvmModuleDeployer.d.ts.map +1 -0
- package/dist/deploy/EvmModuleDeployer.js +150 -0
- package/dist/deploy/EvmModuleDeployer.js.map +1 -0
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +4 -3
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/verify/utils.d.ts +9 -0
- package/dist/deploy/verify/utils.d.ts.map +1 -1
- package/dist/deploy/verify/utils.js +14 -0
- package/dist/deploy/verify/utils.js.map +1 -1
- package/dist/deploy/verify/utils.test.d.ts +2 -0
- package/dist/deploy/verify/utils.test.d.ts.map +1 -0
- package/dist/deploy/verify/utils.test.js +49 -0
- package/dist/deploy/verify/utils.test.js.map +1 -0
- package/dist/gas/HyperlaneIgpDeployer.d.ts +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +2 -1
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/hook/EvmHookModule.d.ts +67 -12
- package/dist/hook/EvmHookModule.d.ts.map +1 -1
- package/dist/hook/EvmHookModule.hardhat-test.d.ts +2 -0
- package/dist/hook/EvmHookModule.hardhat-test.d.ts.map +1 -0
- package/dist/hook/EvmHookModule.hardhat-test.js +380 -0
- package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -0
- package/dist/hook/EvmHookModule.js +354 -9
- package/dist/hook/EvmHookModule.js.map +1 -1
- package/dist/hook/EvmHookReader.d.ts +8 -2
- package/dist/hook/EvmHookReader.d.ts.map +1 -1
- package/dist/hook/EvmHookReader.js +58 -27
- package/dist/hook/EvmHookReader.js.map +1 -1
- package/dist/hook/EvmHookReader.test.js +18 -0
- package/dist/hook/EvmHookReader.test.js.map +1 -1
- package/dist/ism/EvmIsmModule.d.ts +7 -15
- package/dist/ism/EvmIsmModule.d.ts.map +1 -1
- package/dist/ism/EvmIsmModule.hardhat-test.js +36 -38
- package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
- package/dist/ism/EvmIsmModule.js +54 -52
- package/dist/ism/EvmIsmModule.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +15 -2
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/metadata/multisig.d.ts.map +1 -1
- package/dist/ism/metadata/multisig.js.map +1 -1
- package/dist/ism/multisig.js.map +1 -1
- package/dist/metadata/agentConfig.d.ts +3 -0
- package/dist/metadata/agentConfig.d.ts.map +1 -1
- package/dist/metadata/agentConfig.js +12 -0
- package/dist/metadata/agentConfig.js.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +1 -0
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts +1 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js +6 -0
- package/dist/providers/SmartProvider/HyperlaneJsonRpcProvider.js.map +1 -1
- package/dist/providers/SmartProvider/ProviderMethods.d.ts +2 -1
- package/dist/providers/SmartProvider/ProviderMethods.d.ts.map +1 -1
- package/dist/providers/SmartProvider/ProviderMethods.js +1 -0
- package/dist/providers/SmartProvider/ProviderMethods.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.d.ts +5 -2
- package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.js +33 -2
- package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +20 -12
- package/dist/test/testUtils.js.map +1 -1
- package/dist/token/EvmERC20WarpRouteReader.d.ts +6 -0
- package/dist/token/EvmERC20WarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmERC20WarpRouteReader.js +21 -3
- package/dist/token/EvmERC20WarpRouteReader.js.map +1 -1
- package/dist/token/Token.d.ts.map +1 -1
- package/dist/token/Token.js +11 -1
- package/dist/token/Token.js.map +1 -1
- package/dist/token/Token.test.js +16 -0
- package/dist/token/Token.test.js.map +1 -1
- package/dist/token/TokenStandard.d.ts +3 -0
- package/dist/token/TokenStandard.d.ts.map +1 -1
- package/dist/token/TokenStandard.js +12 -2
- package/dist/token/TokenStandard.js.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.d.ts +28 -2
- package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.js +49 -1
- package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
- package/dist/token/adapters/ITokenAdapter.d.ts +4 -0
- package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
- package/dist/token/config.d.ts +1 -1
- package/dist/token/config.d.ts.map +1 -1
- package/dist/token/config.js.map +1 -1
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.js +15 -8
- package/dist/token/deploy.js.map +1 -1
- package/dist/utils/gnosisSafe.js +11 -1
- package/dist/warp/WarpCore.d.ts +8 -0
- package/dist/warp/WarpCore.d.ts.map +1 -1
- package/dist/warp/WarpCore.js +43 -3
- package/dist/warp/WarpCore.js.map +1 -1
- package/dist/warp/WarpCore.test.js +2 -2
- package/package.json +3 -3
|
@@ -1,27 +1,372 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BigNumber, ethers } from 'ethers';
|
|
2
|
+
import { DomainRoutingHook__factory, IL1CrossDomainMessenger__factory, IPostDispatchHook__factory, OPStackIsm__factory, StaticAggregationHookFactory__factory, StaticAggregationHook__factory, } from '@hyperlane-xyz/core';
|
|
3
|
+
import { addressToBytes32, assert, configDeepEquals, rootLogger, } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { TOKEN_EXCHANGE_RATE_SCALE } from '../consts/igp.js';
|
|
2
5
|
import { HyperlaneModule, } from '../core/AbstractHyperlaneModule.js';
|
|
6
|
+
import { EvmModuleDeployer } from '../deploy/EvmModuleDeployer.js';
|
|
7
|
+
import { igpFactories } from '../gas/contracts.js';
|
|
8
|
+
import { EvmIsmModule } from '../ism/EvmIsmModule.js';
|
|
9
|
+
import { IsmType } from '../ism/types.js';
|
|
3
10
|
import { EvmHookReader } from './EvmHookReader.js';
|
|
4
|
-
|
|
11
|
+
import { hookFactories } from './contracts.js';
|
|
12
|
+
import { HookType, } from './types.js';
|
|
5
13
|
export class EvmHookModule extends HyperlaneModule {
|
|
6
14
|
multiProvider;
|
|
7
|
-
deployer;
|
|
8
15
|
logger = rootLogger.child({ module: 'EvmHookModule' });
|
|
9
16
|
reader;
|
|
10
|
-
|
|
17
|
+
deployer;
|
|
18
|
+
// Adding these to reduce how often we need to grab from MultiProvider.
|
|
19
|
+
chain;
|
|
20
|
+
// We use domainId here because MultiProvider.getDomainId() will always
|
|
21
|
+
// return a number, and EVM the domainId and chainId are the same.
|
|
22
|
+
domainId;
|
|
23
|
+
// Transaction overrides for the chain
|
|
24
|
+
txOverrides;
|
|
25
|
+
constructor(multiProvider, args, contractVerifier) {
|
|
11
26
|
super(args);
|
|
12
27
|
this.multiProvider = multiProvider;
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
28
|
+
this.reader = new EvmHookReader(multiProvider, this.args.chain);
|
|
29
|
+
this.deployer = new EvmModuleDeployer(multiProvider, {
|
|
30
|
+
...hookFactories,
|
|
31
|
+
...igpFactories,
|
|
32
|
+
}, this.logger, contractVerifier);
|
|
33
|
+
this.chain = this.multiProvider.getChainName(this.args.chain);
|
|
34
|
+
this.domainId = this.multiProvider.getDomainId(this.chain);
|
|
35
|
+
this.txOverrides = this.multiProvider.getTransactionOverrides(this.chain);
|
|
15
36
|
}
|
|
16
37
|
async read() {
|
|
17
|
-
|
|
38
|
+
if (typeof this.args.config === 'string') {
|
|
39
|
+
return this.args.addresses.deployedHook;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const hookConfig = await this.reader.deriveHookConfig(this.args.addresses.deployedHook);
|
|
43
|
+
assert(hookConfig, `No hook config found for ${this.args.addresses.deployedHook}`);
|
|
44
|
+
return hookConfig;
|
|
45
|
+
}
|
|
18
46
|
}
|
|
19
47
|
async update(_config) {
|
|
20
48
|
throw new Error('Method not implemented.');
|
|
21
49
|
}
|
|
22
50
|
// manually write static create function
|
|
23
|
-
static create(
|
|
24
|
-
|
|
51
|
+
static async create({ chain, config, proxyFactoryFactories, coreAddresses, multiProvider, }) {
|
|
52
|
+
// instantiate new EvmHookModule
|
|
53
|
+
const module = new EvmHookModule(multiProvider, {
|
|
54
|
+
addresses: {
|
|
55
|
+
...proxyFactoryFactories,
|
|
56
|
+
...coreAddresses,
|
|
57
|
+
deployedHook: ethers.constants.AddressZero,
|
|
58
|
+
},
|
|
59
|
+
chain,
|
|
60
|
+
config,
|
|
61
|
+
});
|
|
62
|
+
// deploy hook and assign address to module
|
|
63
|
+
const deployedHook = await module.deploy({ config });
|
|
64
|
+
module.args.addresses.deployedHook = deployedHook.address;
|
|
65
|
+
return module;
|
|
66
|
+
}
|
|
67
|
+
// Compute delta between current and target domain configurations
|
|
68
|
+
async computeRoutingHooksToSet({ currentDomains, targetDomains, }) {
|
|
69
|
+
const routingHookUpdates = [];
|
|
70
|
+
// Iterate over the target domains and compare with the current configuration
|
|
71
|
+
for (const [dest, targetDomainConfig] of Object.entries(targetDomains)) {
|
|
72
|
+
const destDomain = this.multiProvider.tryGetDomainId(dest);
|
|
73
|
+
if (!destDomain) {
|
|
74
|
+
this.logger.warn(`Domain not found in MultiProvider: ${dest}`);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// If the domain is not in the current config or the config has changed, deploy a new hook
|
|
78
|
+
// TODO: in-place updates per domain as a future optimization
|
|
79
|
+
if (!configDeepEquals(currentDomains[dest], targetDomainConfig)) {
|
|
80
|
+
const domainHook = await this.deploy({
|
|
81
|
+
config: targetDomainConfig,
|
|
82
|
+
});
|
|
83
|
+
routingHookUpdates.push({
|
|
84
|
+
destination: destDomain,
|
|
85
|
+
hook: domainHook.address,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return routingHookUpdates;
|
|
90
|
+
}
|
|
91
|
+
// Updates a routing hook
|
|
92
|
+
async updateRoutingHook({ current, target, }) {
|
|
93
|
+
// Deploy a new fallback hook if the fallback config has changed
|
|
94
|
+
if (target.type === HookType.FALLBACK_ROUTING &&
|
|
95
|
+
!configDeepEquals(target.fallback, current.fallback)) {
|
|
96
|
+
const hook = await this.deploy({ config: target });
|
|
97
|
+
this.args.addresses.deployedHook = hook.address;
|
|
98
|
+
}
|
|
99
|
+
const routingUpdates = await this.computeRoutingHooksToSet({
|
|
100
|
+
currentDomains: current.domains,
|
|
101
|
+
targetDomains: target.domains,
|
|
102
|
+
});
|
|
103
|
+
// Return if no updates are required
|
|
104
|
+
if (routingUpdates.length === 0) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
// Create tx for setting hooks
|
|
108
|
+
return [
|
|
109
|
+
{
|
|
110
|
+
annotation: 'Updating routing hooks...',
|
|
111
|
+
chainId: this.domainId,
|
|
112
|
+
to: this.args.addresses.deployedHook,
|
|
113
|
+
data: DomainRoutingHook__factory.createInterface().encodeFunctionData('setHooks', [routingUpdates]),
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
async deploy({ config, }) {
|
|
118
|
+
// If it's an address, just return a base Hook
|
|
119
|
+
if (typeof config === 'string') {
|
|
120
|
+
// TODO: https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/3773
|
|
121
|
+
// we can remove the ts-ignore once we have a proper type for address Hooks
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
return IPostDispatchHook__factory.connect(config, this.multiProvider.getSignerOrProvider(this.args.chain));
|
|
124
|
+
}
|
|
125
|
+
switch (config.type) {
|
|
126
|
+
case HookType.MERKLE_TREE:
|
|
127
|
+
return this.deployer.deployContract({
|
|
128
|
+
chain: this.chain,
|
|
129
|
+
contractKey: HookType.MERKLE_TREE,
|
|
130
|
+
constructorArgs: [this.args.addresses.mailbox],
|
|
131
|
+
});
|
|
132
|
+
case HookType.INTERCHAIN_GAS_PAYMASTER:
|
|
133
|
+
return this.deployIgpHook({ config });
|
|
134
|
+
case HookType.AGGREGATION:
|
|
135
|
+
return this.deployAggregationHook({ config });
|
|
136
|
+
case HookType.PROTOCOL_FEE:
|
|
137
|
+
return this.deployProtocolFeeHook({ config });
|
|
138
|
+
case HookType.OP_STACK:
|
|
139
|
+
return this.deployOpStackHook({ config });
|
|
140
|
+
case HookType.ROUTING:
|
|
141
|
+
case HookType.FALLBACK_ROUTING:
|
|
142
|
+
return this.deployRoutingHook({ config });
|
|
143
|
+
case HookType.PAUSABLE: {
|
|
144
|
+
return this.deployPausableHook({ config });
|
|
145
|
+
}
|
|
146
|
+
default:
|
|
147
|
+
throw new Error(`Unsupported hook config: ${config}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async deployProtocolFeeHook({ config, }) {
|
|
151
|
+
this.logger.debug('Deploying ProtocolFeeHook...');
|
|
152
|
+
return this.deployer.deployContract({
|
|
153
|
+
chain: this.chain,
|
|
154
|
+
contractKey: HookType.PROTOCOL_FEE,
|
|
155
|
+
constructorArgs: [
|
|
156
|
+
config.maxProtocolFee,
|
|
157
|
+
config.protocolFee,
|
|
158
|
+
config.beneficiary,
|
|
159
|
+
config.owner,
|
|
160
|
+
],
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
async deployPausableHook({ config, }) {
|
|
164
|
+
this.logger.debug('Deploying PausableHook...');
|
|
165
|
+
const hook = await this.deployer.deployContract({
|
|
166
|
+
chain: this.chain,
|
|
167
|
+
contractKey: HookType.PAUSABLE,
|
|
168
|
+
constructorArgs: [],
|
|
169
|
+
});
|
|
170
|
+
// transfer ownership
|
|
171
|
+
await this.multiProvider.handleTx(this.chain, hook.transferOwnership(config.owner, this.txOverrides));
|
|
172
|
+
return hook;
|
|
173
|
+
}
|
|
174
|
+
async deployAggregationHook({ config, }) {
|
|
175
|
+
this.logger.debug('Deploying AggregationHook...');
|
|
176
|
+
// deploy subhooks
|
|
177
|
+
const aggregatedHooks = [];
|
|
178
|
+
for (const hookConfig of config.hooks) {
|
|
179
|
+
const { address } = await this.deploy({ config: hookConfig });
|
|
180
|
+
aggregatedHooks.push(address);
|
|
181
|
+
}
|
|
182
|
+
// deploy aggregation hook
|
|
183
|
+
this.logger.debug(`Deploying aggregation hook of type ${config.hooks.map((h) => typeof h === 'string' ? h : h.type)}...`);
|
|
184
|
+
const signer = this.multiProvider.getSigner(this.chain);
|
|
185
|
+
const factory = StaticAggregationHookFactory__factory.connect(this.args.addresses.staticAggregationHookFactory, signer);
|
|
186
|
+
const address = await EvmModuleDeployer.deployStaticAddressSet({
|
|
187
|
+
chain: this.chain,
|
|
188
|
+
factory,
|
|
189
|
+
values: aggregatedHooks,
|
|
190
|
+
logger: this.logger,
|
|
191
|
+
multiProvider: this.multiProvider,
|
|
192
|
+
});
|
|
193
|
+
// return aggregation hook
|
|
194
|
+
return StaticAggregationHook__factory.connect(address, signer);
|
|
195
|
+
}
|
|
196
|
+
async deployOpStackHook({ config, }) {
|
|
197
|
+
const chain = this.chain;
|
|
198
|
+
const mailbox = this.args.addresses.mailbox;
|
|
199
|
+
this.logger.debug('Deploying OPStackHook for %s to %s...', chain, config.destinationChain);
|
|
200
|
+
// fetch l2 messenger address from l1 messenger
|
|
201
|
+
const l1Messenger = IL1CrossDomainMessenger__factory.connect(config.nativeBridge, this.multiProvider.getSignerOrProvider(chain));
|
|
202
|
+
const l2Messenger = await l1Messenger.OTHER_MESSENGER();
|
|
203
|
+
// deploy opstack ism
|
|
204
|
+
const ismConfig = {
|
|
205
|
+
type: IsmType.OP_STACK,
|
|
206
|
+
origin: chain,
|
|
207
|
+
nativeBridge: l2Messenger,
|
|
208
|
+
};
|
|
209
|
+
// deploy opstack ism
|
|
210
|
+
const opStackIsmAddress = (await EvmIsmModule.create({
|
|
211
|
+
chain: config.destinationChain,
|
|
212
|
+
config: ismConfig,
|
|
213
|
+
proxyFactoryFactories: this.args.addresses,
|
|
214
|
+
mailbox: mailbox,
|
|
215
|
+
multiProvider: this.multiProvider,
|
|
216
|
+
})).serialize().deployedIsm;
|
|
217
|
+
// connect to ISM
|
|
218
|
+
const opstackIsm = OPStackIsm__factory.connect(opStackIsmAddress, this.multiProvider.getSignerOrProvider(config.destinationChain));
|
|
219
|
+
// deploy opstack hook
|
|
220
|
+
const hook = await this.deployer.deployContract({
|
|
221
|
+
chain,
|
|
222
|
+
contractKey: HookType.OP_STACK,
|
|
223
|
+
constructorArgs: [
|
|
224
|
+
mailbox,
|
|
225
|
+
this.multiProvider.getDomainId(config.destinationChain),
|
|
226
|
+
addressToBytes32(opstackIsm.address),
|
|
227
|
+
config.nativeBridge,
|
|
228
|
+
],
|
|
229
|
+
});
|
|
230
|
+
// set authorized hook on opstack ism
|
|
231
|
+
const authorizedHook = await opstackIsm.authorizedHook();
|
|
232
|
+
if (authorizedHook === addressToBytes32(hook.address)) {
|
|
233
|
+
this.logger.debug('Authorized hook already set on ism %s', opstackIsm.address);
|
|
234
|
+
return hook;
|
|
235
|
+
}
|
|
236
|
+
else if (authorizedHook !== addressToBytes32(ethers.constants.AddressZero)) {
|
|
237
|
+
this.logger.debug('Authorized hook mismatch on ism %s, expected %s, got %s', opstackIsm.address, addressToBytes32(hook.address), authorizedHook);
|
|
238
|
+
throw new Error('Authorized hook mismatch');
|
|
239
|
+
}
|
|
240
|
+
// check if mismatch and redeploy hook
|
|
241
|
+
this.logger.debug('Setting authorized hook %s on ism % on destination %s', hook.address, opstackIsm.address, config.destinationChain);
|
|
242
|
+
await this.multiProvider.handleTx(config.destinationChain, opstackIsm.setAuthorizedHook(addressToBytes32(hook.address), this.multiProvider.getTransactionOverrides(config.destinationChain)));
|
|
243
|
+
return hook;
|
|
244
|
+
}
|
|
245
|
+
async deployRoutingHook({ config, }) {
|
|
246
|
+
// originally set owner to deployer so we can set hooks
|
|
247
|
+
const deployerAddress = await this.multiProvider.getSignerAddress(this.chain);
|
|
248
|
+
let routingHook;
|
|
249
|
+
if (config.type === HookType.FALLBACK_ROUTING) {
|
|
250
|
+
// deploy fallback hook
|
|
251
|
+
const fallbackHook = await this.deploy({ config: config.fallback });
|
|
252
|
+
// deploy routing hook with fallback
|
|
253
|
+
routingHook = await this.deployer.deployContract({
|
|
254
|
+
chain: this.chain,
|
|
255
|
+
contractKey: HookType.FALLBACK_ROUTING,
|
|
256
|
+
constructorArgs: [
|
|
257
|
+
this.args.addresses.mailbox,
|
|
258
|
+
deployerAddress,
|
|
259
|
+
fallbackHook.address,
|
|
260
|
+
],
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// deploy routing hook
|
|
265
|
+
routingHook = await this.deployer.deployContract({
|
|
266
|
+
chain: this.chain,
|
|
267
|
+
contractKey: HookType.ROUTING,
|
|
268
|
+
constructorArgs: [this.args.addresses.mailbox, deployerAddress],
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
// compute the hooks that need to be set
|
|
272
|
+
const hooksToSet = await this.computeRoutingHooksToSet({
|
|
273
|
+
currentDomains: {},
|
|
274
|
+
targetDomains: config.domains,
|
|
275
|
+
});
|
|
276
|
+
// set hooks
|
|
277
|
+
await this.multiProvider.handleTx(this.chain, routingHook.setHooks(hooksToSet, this.txOverrides));
|
|
278
|
+
// transfer ownership
|
|
279
|
+
await this.multiProvider.handleTx(this.chain, routingHook.transferOwnership(config.owner, this.txOverrides));
|
|
280
|
+
// return a fully configured routing hook
|
|
281
|
+
return routingHook;
|
|
282
|
+
}
|
|
283
|
+
async deployIgpHook({ config, }) {
|
|
284
|
+
this.logger.debug('Deploying IGP as hook...');
|
|
285
|
+
// Deploy the StorageGasOracle
|
|
286
|
+
const storageGasOracle = await this.deployStorageGasOracle({
|
|
287
|
+
config,
|
|
288
|
+
});
|
|
289
|
+
// Deploy the InterchainGasPaymaster
|
|
290
|
+
const interchainGasPaymaster = await this.deployInterchainGasPaymaster({
|
|
291
|
+
storageGasOracle,
|
|
292
|
+
config,
|
|
293
|
+
});
|
|
294
|
+
return interchainGasPaymaster;
|
|
295
|
+
}
|
|
296
|
+
async deployInterchainGasPaymaster({ storageGasOracle, config, }) {
|
|
297
|
+
const deployerAddress = await this.multiProvider.getSignerAddress(this.chain);
|
|
298
|
+
const igp = await this.deployer.deployProxiedContract({
|
|
299
|
+
chain: this.chain,
|
|
300
|
+
contractKey: HookType.INTERCHAIN_GAS_PAYMASTER,
|
|
301
|
+
contractName: HookType.INTERCHAIN_GAS_PAYMASTER,
|
|
302
|
+
proxyAdmin: this.args.addresses.proxyAdmin,
|
|
303
|
+
constructorArgs: [],
|
|
304
|
+
initializeArgs: [deployerAddress, config.beneficiary],
|
|
305
|
+
});
|
|
306
|
+
const gasParamsToSet = [];
|
|
307
|
+
for (const [remote, gasOverhead] of Object.entries(config.overhead)) {
|
|
308
|
+
// Note: non-EVM remotes actually *are* supported, provided that the remote domain is in the MultiProvider.
|
|
309
|
+
// Previously would check core metadata for non EVMs and fallback to multiprovider for custom EVMs
|
|
310
|
+
const remoteDomain = this.multiProvider.tryGetDomainId(remote);
|
|
311
|
+
if (!remoteDomain) {
|
|
312
|
+
this.logger.warn(`Skipping overhead ${this.chain} -> ${remote}. Expected if the remote is a non-EVM chain.`);
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
this.logger.debug(`Setting gas params for ${this.chain} -> ${remote}: gasOverhead = ${gasOverhead} gasOracle = ${storageGasOracle.address}`);
|
|
316
|
+
gasParamsToSet.push({
|
|
317
|
+
remoteDomain,
|
|
318
|
+
config: {
|
|
319
|
+
gasOverhead,
|
|
320
|
+
gasOracle: storageGasOracle.address,
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
if (gasParamsToSet.length > 0) {
|
|
325
|
+
await this.multiProvider.handleTx(this.chain, igp.setDestinationGasConfigs(gasParamsToSet, this.txOverrides));
|
|
326
|
+
}
|
|
327
|
+
// Transfer igp to the configured owner
|
|
328
|
+
await this.multiProvider.handleTx(this.chain, igp.transferOwnership(config.owner, this.txOverrides));
|
|
329
|
+
return igp;
|
|
330
|
+
}
|
|
331
|
+
async deployStorageGasOracle({ config, }) {
|
|
332
|
+
const gasOracle = await this.deployer.deployContract({
|
|
333
|
+
chain: this.chain,
|
|
334
|
+
contractKey: 'storageGasOracle',
|
|
335
|
+
constructorArgs: [],
|
|
336
|
+
});
|
|
337
|
+
if (!config.oracleConfig) {
|
|
338
|
+
this.logger.debug('No oracle config provided, skipping...');
|
|
339
|
+
return gasOracle;
|
|
340
|
+
}
|
|
341
|
+
this.logger.info(`Configuring gas oracle from ${this.chain}...`);
|
|
342
|
+
const configsToSet = [];
|
|
343
|
+
for (const [remote, desired] of Object.entries(config.oracleConfig)) {
|
|
344
|
+
// Note: non-EVM remotes actually *are* supported, provided that the remote domain is in the MultiProvider.
|
|
345
|
+
// Previously would check core metadata for non EVMs and fallback to multiprovider for custom EVMs
|
|
346
|
+
const remoteDomain = this.multiProvider.tryGetDomainId(remote);
|
|
347
|
+
if (!remoteDomain) {
|
|
348
|
+
this.logger.warn(`Skipping gas oracle ${this.chain} -> ${remote}.` +
|
|
349
|
+
' Expected if the remote is a non-EVM chain or the remote domain is not the in the MultiProvider.');
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
configsToSet.push({
|
|
353
|
+
remoteDomain,
|
|
354
|
+
...desired,
|
|
355
|
+
});
|
|
356
|
+
// Log an example remote gas cost
|
|
357
|
+
const exampleRemoteGas = (config.overhead[remote] ?? 200000) + 50000;
|
|
358
|
+
const exampleRemoteGasCost = BigNumber.from(desired.tokenExchangeRate)
|
|
359
|
+
.mul(desired.gasPrice)
|
|
360
|
+
.mul(exampleRemoteGas)
|
|
361
|
+
.div(TOKEN_EXCHANGE_RATE_SCALE);
|
|
362
|
+
this.logger.info(`${this.chain} -> ${remote}: ${exampleRemoteGas} remote gas cost: ${ethers.utils.formatEther(exampleRemoteGasCost)}`);
|
|
363
|
+
}
|
|
364
|
+
if (configsToSet.length > 0) {
|
|
365
|
+
await this.multiProvider.handleTx(this.chain, gasOracle.setRemoteGasDataConfigs(configsToSet, this.txOverrides));
|
|
366
|
+
}
|
|
367
|
+
// Transfer gas oracle to the configured owner
|
|
368
|
+
await this.multiProvider.handleTx(this.chain, gasOracle.transferOwnership(config.oracleKey, this.txOverrides));
|
|
369
|
+
return gasOracle;
|
|
25
370
|
}
|
|
26
371
|
}
|
|
27
372
|
//# sourceMappingURL=EvmHookModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvmHookModule.js","sourceRoot":"","sources":["../../src/hook/EvmHookModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGzE,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAK5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,8CAA8C;AAC9C,MAAM,OAAO,aAAc,SAAQ,eAMlC;IAKsB;IACA;IALX,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IACvD,MAAM,CAAgB;IAEhC,YACqB,aAA4B,EAC5B,QAAqC,EACxD,IAKC;QAED,KAAK,CAAC,IAAI,CAAC,CAAC;QATO,kBAAa,GAAb,aAAa,CAAe;QAC5B,aAAQ,GAAR,QAAQ,CAA6B;QASxD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAmB;QACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,wCAAwC;IACjC,MAAM,CAAC,MAAM,CAAC,OAAmB;QACtC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"EvmHookModule.js","sourceRoot":"","sources":["../../src/hook/EvmHookModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { ChainNameOrId } from '../types.js';
|
|
|
5
5
|
import { AggregationHookConfig, DomainRoutingHookConfig, FallbackRoutingHookConfig, HookConfig, IgpHookConfig, MerkleTreeHookConfig, OpStackHookConfig, PausableHookConfig, ProtocolFeeHookConfig } from './types.js';
|
|
6
6
|
export type DerivedHookConfig = WithAddress<Exclude<HookConfig, Address>>;
|
|
7
7
|
export interface HookReader {
|
|
8
|
-
deriveHookConfig(address: Address): Promise<WithAddress<HookConfig
|
|
8
|
+
deriveHookConfig(address: Address): Promise<WithAddress<HookConfig> | undefined>;
|
|
9
9
|
deriveMerkleTreeConfig(address: Address): Promise<WithAddress<MerkleTreeHookConfig>>;
|
|
10
10
|
deriveAggregationConfig(address: Address): Promise<WithAddress<AggregationHookConfig>>;
|
|
11
11
|
deriveIgpConfig(address: Address): Promise<WithAddress<IgpHookConfig>>;
|
|
@@ -22,7 +22,7 @@ export declare class EvmHookReader implements HookReader {
|
|
|
22
22
|
protected readonly provider: providers.Provider;
|
|
23
23
|
protected readonly logger: import("pino").default.Logger<never>;
|
|
24
24
|
constructor(multiProvider: MultiProvider, chain: ChainNameOrId, concurrency?: number);
|
|
25
|
-
deriveHookConfig(address: Address): Promise<DerivedHookConfig>;
|
|
25
|
+
deriveHookConfig(address: Address): Promise<DerivedHookConfig | undefined>;
|
|
26
26
|
deriveMerkleTreeConfig(address: Address): Promise<WithAddress<MerkleTreeHookConfig>>;
|
|
27
27
|
deriveAggregationConfig(address: Address): Promise<WithAddress<AggregationHookConfig>>;
|
|
28
28
|
deriveIgpConfig(address: Address): Promise<WithAddress<IgpHookConfig>>;
|
|
@@ -32,5 +32,11 @@ export declare class EvmHookReader implements HookReader {
|
|
|
32
32
|
deriveFallbackRoutingConfig(address: Address): Promise<WithAddress<FallbackRoutingHookConfig>>;
|
|
33
33
|
private fetchDomainHooks;
|
|
34
34
|
derivePausableConfig(address: Address): Promise<WithAddress<PausableHookConfig>>;
|
|
35
|
+
/**
|
|
36
|
+
* Conditionally sets the log level for a smart provider.
|
|
37
|
+
*
|
|
38
|
+
* @param level - The log level to set, e.g. 'debug', 'info', 'warn', 'error'.
|
|
39
|
+
*/
|
|
40
|
+
protected setSmartProviderLogLevel(level: string): void;
|
|
35
41
|
}
|
|
36
42
|
//# sourceMappingURL=EvmHookReader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvmHookReader.d.ts","sourceRoot":"","sources":["../../src/hook/EvmHookReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,QAAQ,CAAC;AAgB3C,OAAO,EACL,OAAO,EACP,WAAW,
|
|
1
|
+
{"version":3,"file":"EvmHookReader.d.ts","sourceRoot":"","sources":["../../src/hook/EvmHookReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { DomainRoutingHook__factory, FallbackDomainRoutingHook__factory, IPostDispatchHook__factory, InterchainGasPaymaster__factory, MerkleTreeHook__factory, OPStackHook__factory, PausableHook__factory, ProtocolFee__factory, StaticAggregationHook__factory, StorageGasOracle__factory, } from '@hyperlane-xyz/core';
|
|
3
|
-
import { assert, concurrentMap, eqAddress, rootLogger, } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { assert, concurrentMap, eqAddress, getLogLevel, rootLogger, } from '@hyperlane-xyz/utils';
|
|
4
4
|
import { DEFAULT_CONTRACT_READ_CONCURRENCY } from '../consts/concurrency.js';
|
|
5
5
|
import { HookType, OnchainHookType, } from './types.js';
|
|
6
6
|
export class EvmHookReader {
|
|
@@ -16,31 +16,44 @@ export class EvmHookReader {
|
|
|
16
16
|
this.provider = multiProvider.getProvider(chain);
|
|
17
17
|
}
|
|
18
18
|
async deriveHookConfig(address) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
19
|
+
let onchainHookType = undefined;
|
|
20
|
+
try {
|
|
21
|
+
const hook = IPostDispatchHook__factory.connect(address, this.provider);
|
|
22
|
+
this.logger.debug('Deriving HookConfig', { address });
|
|
23
|
+
// Temporarily turn off SmartProvider logging
|
|
24
|
+
// Provider errors are expected because deriving will call methods that may not exist in the Bytecode
|
|
25
|
+
this.setSmartProviderLogLevel('silent');
|
|
26
|
+
onchainHookType = await hook.hookType();
|
|
27
|
+
switch (onchainHookType) {
|
|
28
|
+
case OnchainHookType.ROUTING:
|
|
29
|
+
return this.deriveDomainRoutingConfig(address);
|
|
30
|
+
case OnchainHookType.AGGREGATION:
|
|
31
|
+
return this.deriveAggregationConfig(address);
|
|
32
|
+
case OnchainHookType.MERKLE_TREE:
|
|
33
|
+
return this.deriveMerkleTreeConfig(address);
|
|
34
|
+
case OnchainHookType.INTERCHAIN_GAS_PAYMASTER:
|
|
35
|
+
return this.deriveIgpConfig(address);
|
|
36
|
+
case OnchainHookType.FALLBACK_ROUTING:
|
|
37
|
+
return this.deriveFallbackRoutingConfig(address);
|
|
38
|
+
case OnchainHookType.PAUSABLE:
|
|
39
|
+
return this.derivePausableConfig(address);
|
|
40
|
+
case OnchainHookType.PROTOCOL_FEE:
|
|
41
|
+
return this.deriveProtocolFeeConfig(address);
|
|
42
|
+
// ID_AUTH_ISM could be OPStackHook, ERC5164Hook or LayerZeroV2Hook
|
|
43
|
+
// For now assume it's OP_STACK
|
|
44
|
+
case OnchainHookType.ID_AUTH_ISM:
|
|
45
|
+
return this.deriveOpStackConfig(address);
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`Unsupported HookType: ${OnchainHookType[onchainHookType]}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
this.logger.debug(`Failed to derive ${onchainHookType} hook (${address}): ${e}`);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
this.setSmartProviderLogLevel(getLogLevel()); // returns to original level defined by rootLogger
|
|
43
55
|
}
|
|
56
|
+
return undefined;
|
|
44
57
|
}
|
|
45
58
|
async deriveMerkleTreeConfig(address) {
|
|
46
59
|
const hook = MerkleTreeHook__factory.connect(address, this.provider);
|
|
@@ -54,7 +67,11 @@ export class EvmHookReader {
|
|
|
54
67
|
const hook = StaticAggregationHook__factory.connect(address, this.provider);
|
|
55
68
|
assert((await hook.hookType()) === OnchainHookType.AGGREGATION);
|
|
56
69
|
const hooks = await hook.hooks(ethers.constants.AddressZero);
|
|
57
|
-
const hookConfigs = await concurrentMap(this.concurrency, hooks, async (hook) =>
|
|
70
|
+
const hookConfigs = await concurrentMap(this.concurrency, hooks, async (hook) => {
|
|
71
|
+
const hookConfig = await this.deriveHookConfig(hook);
|
|
72
|
+
assert(hookConfig, `No hook config found for ${hook}.`);
|
|
73
|
+
return hookConfig;
|
|
74
|
+
});
|
|
58
75
|
return {
|
|
59
76
|
address,
|
|
60
77
|
type: HookType.AGGREGATION,
|
|
@@ -155,6 +172,7 @@ export class EvmHookReader {
|
|
|
155
172
|
const domainHooks = await this.fetchDomainHooks(hook);
|
|
156
173
|
const fallbackHook = await hook.fallbackHook();
|
|
157
174
|
const fallbackHookConfig = await this.deriveHookConfig(fallbackHook);
|
|
175
|
+
assert(fallbackHookConfig, `No fallback hook config found for ${fallbackHook}.`);
|
|
158
176
|
return {
|
|
159
177
|
owner,
|
|
160
178
|
address,
|
|
@@ -171,7 +189,9 @@ export class EvmHookReader {
|
|
|
171
189
|
try {
|
|
172
190
|
const domainHook = await hook.hooks(domainId);
|
|
173
191
|
if (domainHook !== ethers.constants.AddressZero) {
|
|
174
|
-
|
|
192
|
+
const hookConfig = await this.deriveHookConfig(domainHook);
|
|
193
|
+
assert(hookConfig, `No hook config found for ${domainHook}.`);
|
|
194
|
+
domainHooks[chainName] = hookConfig;
|
|
175
195
|
}
|
|
176
196
|
}
|
|
177
197
|
catch (error) {
|
|
@@ -192,5 +212,16 @@ export class EvmHookReader {
|
|
|
192
212
|
type: HookType.PAUSABLE,
|
|
193
213
|
};
|
|
194
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Conditionally sets the log level for a smart provider.
|
|
217
|
+
*
|
|
218
|
+
* @param level - The log level to set, e.g. 'debug', 'info', 'warn', 'error'.
|
|
219
|
+
*/
|
|
220
|
+
setSmartProviderLogLevel(level) {
|
|
221
|
+
if ('setLogLevel' in this.provider) {
|
|
222
|
+
//@ts-ignore
|
|
223
|
+
this.provider.setLogLevel(level);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
195
226
|
}
|
|
196
227
|
//# sourceMappingURL=EvmHookReader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvmHookReader.js","sourceRoot":"","sources":["../../src/hook/EvmHookReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAEL,0BAA0B,EAE1B,kCAAkC,EAClC,0BAA0B,EAC1B,+BAA+B,EAC/B,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,MAAM,EACN,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAI7E,OAAO,EAKL,QAAQ,EAGR,eAAe,GAKhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"EvmHookReader.js","sourceRoot":"","sources":["../../src/hook/EvmHookReader.ts"],"names":[],"mappings":"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"}
|