@hyperlane-xyz/sdk 0.5.2 → 0.5.4-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/consts/chainConnectionConfigs.d.ts +0 -2
- package/dist/consts/chainConnectionConfigs.d.ts.map +1 -1
- package/dist/consts/chainConnectionConfigs.js +1 -13
- package/dist/consts/chainConnectionConfigs.js.map +1 -1
- package/dist/consts/chainMetadata.d.ts +1 -1
- package/dist/consts/chainMetadata.d.ts.map +1 -1
- package/dist/consts/chains.d.ts +11 -4
- package/dist/consts/chains.d.ts.map +1 -1
- package/dist/consts/chains.js +11 -3
- package/dist/consts/chains.js.map +1 -1
- package/dist/consts/environments/index.d.ts +62 -1169
- package/dist/consts/environments/index.d.ts.map +1 -1
- package/dist/consts/environments/index.js +4 -11
- package/dist/consts/environments/index.js.map +1 -1
- package/dist/consts/environments/mainnet.json +16 -544
- package/dist/consts/environments/test.json +35 -89
- package/dist/consts/environments/testnet2.json +41 -569
- package/dist/core/HyperlaneCore.d.ts +58 -1175
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js +18 -28
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCore.test.d.ts +2 -0
- package/dist/core/HyperlaneCore.test.d.ts.map +1 -0
- package/dist/core/HyperlaneCore.test.js +27 -0
- package/dist/core/HyperlaneCore.test.js.map +1 -0
- package/dist/core/TestCoreApp.d.ts +6 -12
- package/dist/core/TestCoreApp.d.ts.map +1 -1
- package/dist/core/TestCoreApp.js +5 -5
- package/dist/core/TestCoreApp.js.map +1 -1
- package/dist/core/TestCoreDeployer.d.ts +6 -5
- package/dist/core/TestCoreDeployer.d.ts.map +1 -1
- package/dist/core/TestCoreDeployer.js +18 -40
- package/dist/core/TestCoreDeployer.js.map +1 -1
- package/dist/core/contracts.d.ts +9 -18
- package/dist/core/contracts.d.ts.map +1 -1
- package/dist/core/contracts.js +8 -8
- package/dist/core/contracts.js.map +1 -1
- package/dist/core/events.d.ts +1 -2
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/message.d.ts +6 -22
- package/dist/core/message.d.ts.map +1 -1
- package/dist/core/message.js +9 -35
- package/dist/core/message.js.map +1 -1
- package/dist/core/testHyperlaneDeploy.hardhat-test.js +6 -6
- package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +1 -1
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/core/HyperlaneCoreChecker.d.ts +3 -6
- package/dist/deploy/core/HyperlaneCoreChecker.d.ts.map +1 -1
- package/dist/deploy/core/HyperlaneCoreChecker.js +45 -125
- package/dist/deploy/core/HyperlaneCoreChecker.js.map +1 -1
- package/dist/deploy/core/HyperlaneCoreDeployer.d.ts +15 -16
- package/dist/deploy/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/deploy/core/HyperlaneCoreDeployer.js +43 -69
- package/dist/deploy/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/deploy/core/types.d.ts +15 -28
- package/dist/deploy/core/types.d.ts.map +1 -1
- package/dist/deploy/core/types.js +8 -12
- package/dist/deploy/core/types.js.map +1 -1
- package/dist/deploy/middleware/LiquidityLayerApp.d.ts +26 -0
- package/dist/deploy/middleware/LiquidityLayerApp.d.ts.map +1 -0
- package/dist/deploy/middleware/LiquidityLayerApp.js +115 -0
- package/dist/deploy/middleware/LiquidityLayerApp.js.map +1 -0
- package/dist/deploy/middleware/LiquidityLayerRouterDeployer.d.ts +33 -0
- package/dist/deploy/middleware/LiquidityLayerRouterDeployer.d.ts.map +1 -0
- package/dist/deploy/middleware/LiquidityLayerRouterDeployer.js +93 -0
- package/dist/deploy/middleware/LiquidityLayerRouterDeployer.js.map +1 -0
- package/dist/deploy/middleware/deploy.js +2 -2
- package/dist/deploy/middleware/deploy.js.map +1 -1
- package/dist/deploy/router/HyperlaneRouterDeployer.d.ts +1 -1
- package/dist/deploy/router/HyperlaneRouterDeployer.d.ts.map +1 -1
- package/dist/deploy/router/HyperlaneRouterDeployer.js +6 -7
- package/dist/deploy/router/HyperlaneRouterDeployer.js.map +1 -1
- package/dist/deploy/verify/ContractVerifier.d.ts +2 -2
- package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -1
- package/dist/deploy/verify/ContractVerifier.js +17 -11
- package/dist/deploy/verify/ContractVerifier.js.map +1 -1
- package/dist/domains.d.ts +3 -3
- package/dist/domains.d.ts.map +1 -1
- package/dist/domains.js.map +1 -1
- package/dist/gas/calculator.d.ts.map +1 -1
- package/dist/gas/calculator.js +6 -4
- package/dist/gas/calculator.js.map +1 -1
- package/dist/gas/calculator.test.js +5 -8
- package/dist/gas/calculator.test.js.map +1 -1
- package/dist/gas/token-prices.d.ts +17 -1
- package/dist/gas/token-prices.d.ts.map +1 -1
- package/dist/gas/token-prices.js +49 -9
- package/dist/gas/token-prices.js.map +1 -1
- package/dist/gas/token-prices.test.js +8 -2
- package/dist/gas/token-prices.test.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/middleware/liquidity-layer.hardhat-test.d.ts +2 -0
- package/dist/middleware/liquidity-layer.hardhat-test.d.ts.map +1 -0
- package/dist/middleware/liquidity-layer.hardhat-test.js +89 -0
- package/dist/middleware/liquidity-layer.hardhat-test.js.map +1 -0
- package/dist/middleware.d.ts +8 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +5 -1
- package/dist/middleware.js.map +1 -1
- package/dist/router.d.ts +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/test/envSubsetDeployer/app.js +2 -2
- package/dist/test/envSubsetDeployer/app.js.map +1 -1
- package/dist/test/testUtils.d.ts +2 -0
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +8 -0
- package/dist/test/testUtils.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/MultiGeneric.d.ts.map +1 -1
- package/dist/utils/MultiGeneric.js +1 -1
- package/dist/utils/MultiGeneric.js.map +1 -1
- package/package.json +5 -4
|
@@ -16,6 +16,7 @@ exports.HyperlaneCoreDeployer = void 0;
|
|
|
16
16
|
const debug_1 = __importDefault(require("debug"));
|
|
17
17
|
const chainMetadata_1 = require("../../consts/chainMetadata");
|
|
18
18
|
const contracts_1 = require("../../core/contracts");
|
|
19
|
+
const domains_1 = require("../../domains");
|
|
19
20
|
const objects_1 = require("../../utils/objects");
|
|
20
21
|
const HyperlaneDeployer_1 = require("../HyperlaneDeployer");
|
|
21
22
|
class HyperlaneCoreDeployer extends HyperlaneDeployer_1.HyperlaneDeployer {
|
|
@@ -25,47 +26,46 @@ class HyperlaneCoreDeployer extends HyperlaneDeployer_1.HyperlaneDeployer {
|
|
|
25
26
|
});
|
|
26
27
|
this.startingBlockNumbers = (0, objects_1.objMap)(configMap, () => undefined);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
deploy(partialDeployment) {
|
|
30
|
-
const _super = Object.create(null, {
|
|
31
|
-
deploy: { get: () => super.deploy }
|
|
32
|
-
});
|
|
33
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
-
return _super.deploy.call(this, partialDeployment);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
deployOutbox(chain, config, ubcAddress) {
|
|
29
|
+
deployMailbox(chain, defaultIsmAddress, ubcAddress) {
|
|
38
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
31
|
const domain = chainMetadata_1.chainMetadata[chain].id;
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
return { outbox, outboxValidatorManager };
|
|
32
|
+
const mailbox = yield this.deployProxiedContract(chain, 'mailbox', [domain], ubcAddress, [defaultIsmAddress]);
|
|
33
|
+
return mailbox;
|
|
43
34
|
});
|
|
44
35
|
}
|
|
45
|
-
|
|
36
|
+
deployMultisigIsm(chain) {
|
|
37
|
+
const _super = Object.create(null, {
|
|
38
|
+
runIfOwner: { get: () => super.runIfOwner }
|
|
39
|
+
});
|
|
46
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
41
|
+
const multisigIsm = yield this.deployContract(chain, 'multisigIsm', []);
|
|
42
|
+
const configChains = Object.keys(this.configMap);
|
|
43
|
+
const remotes = this.multiProvider
|
|
44
|
+
.intersect(configChains, false)
|
|
45
|
+
.multiProvider.remoteChains(chain);
|
|
46
|
+
yield _super.runIfOwner.call(this, chain, multisigIsm, () => __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
// TODO: Remove extraneous validators
|
|
48
|
+
for (const remote of remotes) {
|
|
49
|
+
const multisigIsmConfig = this.configMap[remote].multisigIsm;
|
|
50
|
+
const domain = domains_1.ChainNameToDomainId[remote];
|
|
51
|
+
for (const validator of multisigIsmConfig.validators) {
|
|
52
|
+
const isValidator = yield multisigIsm.isEnrolled(domain, validator);
|
|
53
|
+
if (!isValidator) {
|
|
54
|
+
this.logger(`Enrolling ${validator} as ${remote} validator on ${chain}`);
|
|
55
|
+
yield multisigIsm.enrollValidator(domain, validator);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const threshold = yield multisigIsm.threshold(domain);
|
|
59
|
+
if (!threshold.eq(multisigIsmConfig.threshold)) {
|
|
60
|
+
this.logger(`Setting ${remote} threshold to ${multisigIsmConfig.threshold} on ${chain}`);
|
|
61
|
+
yield multisigIsm.setThreshold(domain, multisigIsmConfig.threshold);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
return multisigIsm;
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
68
|
deployContracts(chain, config) {
|
|
65
|
-
const _super = Object.create(null, {
|
|
66
|
-
runIfOwner: { get: () => super.runIfOwner }
|
|
67
|
-
});
|
|
68
|
-
var _a, _b, _c;
|
|
69
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
70
|
if (config.remove) {
|
|
71
71
|
// skip deploying to chains configured to be removed
|
|
@@ -77,38 +77,14 @@ class HyperlaneCoreDeployer extends HyperlaneDeployer_1.HyperlaneDeployer {
|
|
|
77
77
|
this.startingBlockNumbers[chain] = startingBlockNumber;
|
|
78
78
|
const upgradeBeaconController = yield this.deployContract(chain, 'upgradeBeaconController', []);
|
|
79
79
|
const interchainGasPaymaster = yield this.deployProxiedContract(chain, 'interchainGasPaymaster', [], upgradeBeaconController.address, []);
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}));
|
|
89
|
-
const configChains = Object.keys(this.configMap);
|
|
90
|
-
const remotes = this.multiProvider
|
|
91
|
-
.intersect(configChains, false)
|
|
92
|
-
.multiProvider.remoteChains(chain);
|
|
93
|
-
const inboxes = (_b = (_a = this.deployedContracts[chain]) === null || _a === void 0 ? void 0 : _a.inboxes) !== null && _b !== void 0 ? _b : {};
|
|
94
|
-
let prev;
|
|
95
|
-
for (const remote of remotes) {
|
|
96
|
-
if (!inboxes[remote]) {
|
|
97
|
-
inboxes[remote] = yield this.deployInbox(chain, remote, this.configMap[remote].validatorManager, upgradeBeaconController.address, (_c = inboxes[prev]) === null || _c === void 0 ? void 0 : _c.inbox);
|
|
98
|
-
}
|
|
99
|
-
yield _super.runIfOwner.call(this, chain, connectionManager, () => __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
const isEnrolled = yield connectionManager.isInbox(inboxes[remote].inbox.address);
|
|
101
|
-
if (!isEnrolled) {
|
|
102
|
-
this.logger(`Enrolling inbox for remote '${remote}'`);
|
|
103
|
-
const enrollTx = yield connectionManager.enrollInbox(chainMetadata_1.chainMetadata[remote].id, inboxes[remote].inbox.address, dc.overrides);
|
|
104
|
-
yield dc.handleTx(enrollTx);
|
|
105
|
-
}
|
|
106
|
-
}));
|
|
107
|
-
prev = remote;
|
|
108
|
-
}
|
|
109
|
-
return Object.assign({ upgradeBeaconController,
|
|
110
|
-
connectionManager,
|
|
111
|
-
interchainGasPaymaster, inboxes: inboxes }, outbox);
|
|
80
|
+
const multisigIsm = yield this.deployMultisigIsm(chain);
|
|
81
|
+
const mailbox = yield this.deployMailbox(chain, multisigIsm.address, upgradeBeaconController.address);
|
|
82
|
+
return {
|
|
83
|
+
upgradeBeaconController,
|
|
84
|
+
interchainGasPaymaster,
|
|
85
|
+
mailbox,
|
|
86
|
+
multisigIsm,
|
|
87
|
+
};
|
|
112
88
|
});
|
|
113
89
|
}
|
|
114
90
|
static transferOwnership(core, owners, multiProvider) {
|
|
@@ -121,11 +97,9 @@ class HyperlaneCoreDeployer extends HyperlaneDeployer_1.HyperlaneDeployer {
|
|
|
121
97
|
static transferOwnershipOfChain(coreContracts, owner, chainConnection) {
|
|
122
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
123
99
|
const ownables = [
|
|
124
|
-
coreContracts.
|
|
125
|
-
coreContracts.
|
|
126
|
-
coreContracts.connectionManager,
|
|
100
|
+
coreContracts.mailbox.contract,
|
|
101
|
+
coreContracts.multisigIsm,
|
|
127
102
|
coreContracts.upgradeBeaconController,
|
|
128
|
-
...Object.values(coreContracts.inboxes).flatMap((inbox) => [inbox.inbox.contract, inbox.inboxValidatorManager]),
|
|
129
103
|
];
|
|
130
104
|
return Promise.all(ownables.map((ownable) => chainConnection.handleTx(ownable.transferOwnership(owner, chainConnection.overrides))));
|
|
131
105
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperlaneCoreDeployer.js","sourceRoot":"","sources":["../../../src/deploy/core/HyperlaneCoreDeployer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAM1B,8DAA2D;AAE3D,
|
|
1
|
+
{"version":3,"file":"HyperlaneCoreDeployer.js","sourceRoot":"","sources":["../../../src/deploy/core/HyperlaneCoreDeployer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +1,51 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Mailbox, MultisigIsm } from '@hyperlane-xyz/core';
|
|
2
2
|
import type { types } from '@hyperlane-xyz/utils';
|
|
3
3
|
import { ChainName } from '../../types';
|
|
4
4
|
import type { CheckerViolation } from '../types';
|
|
5
|
-
export declare type
|
|
5
|
+
export declare type MultisigIsmConfig = {
|
|
6
6
|
validators: Array<types.Address>;
|
|
7
7
|
threshold: number;
|
|
8
8
|
};
|
|
9
9
|
export declare type CoreConfig = {
|
|
10
|
-
|
|
10
|
+
multisigIsm: MultisigIsmConfig;
|
|
11
11
|
owner?: types.Address;
|
|
12
12
|
remove?: boolean;
|
|
13
13
|
};
|
|
14
14
|
export declare enum CoreViolationType {
|
|
15
|
-
|
|
15
|
+
MultisigIsm = "MultisigIsm",
|
|
16
16
|
Mailbox = "Mailbox",
|
|
17
17
|
ConnectionManager = "ConnectionManager"
|
|
18
18
|
}
|
|
19
|
-
export declare enum
|
|
19
|
+
export declare enum MultisigIsmViolationType {
|
|
20
20
|
EnrolledValidators = "EnrolledValidators",
|
|
21
21
|
Threshold = "Threshold"
|
|
22
22
|
}
|
|
23
|
-
export declare enum ConnectionManagerViolationType {
|
|
24
|
-
EnrolledInboxes = "EnrolledInboxes"
|
|
25
|
-
}
|
|
26
23
|
export declare enum MailboxViolationType {
|
|
27
|
-
|
|
24
|
+
DefaultIsm = "DefaultIsm"
|
|
28
25
|
}
|
|
29
26
|
export interface MailboxViolation extends CheckerViolation {
|
|
30
27
|
type: CoreViolationType.Mailbox;
|
|
31
28
|
contract: Mailbox;
|
|
32
29
|
mailboxType: MailboxViolationType;
|
|
33
30
|
}
|
|
34
|
-
export interface
|
|
31
|
+
export interface MailboxMultisigIsmViolation extends MailboxViolation {
|
|
35
32
|
actual: types.Address;
|
|
36
33
|
expected: types.Address;
|
|
37
34
|
}
|
|
38
|
-
export interface
|
|
39
|
-
type: CoreViolationType.
|
|
40
|
-
contract:
|
|
41
|
-
|
|
35
|
+
export interface MultisigIsmViolation extends CheckerViolation {
|
|
36
|
+
type: CoreViolationType.MultisigIsm;
|
|
37
|
+
contract: MultisigIsm;
|
|
38
|
+
subType: MultisigIsmViolationType;
|
|
42
39
|
remote: ChainName;
|
|
43
40
|
}
|
|
44
|
-
export interface EnrolledValidatorsViolation extends
|
|
45
|
-
|
|
41
|
+
export interface EnrolledValidatorsViolation extends MultisigIsmViolation {
|
|
42
|
+
subType: MultisigIsmViolationType.EnrolledValidators;
|
|
46
43
|
actual: Set<types.Address>;
|
|
47
44
|
expected: Set<types.Address>;
|
|
48
45
|
}
|
|
49
|
-
export interface ThresholdViolation extends
|
|
50
|
-
|
|
46
|
+
export interface ThresholdViolation extends MultisigIsmViolation {
|
|
47
|
+
subType: MultisigIsmViolationType.Threshold;
|
|
51
48
|
actual: number;
|
|
52
49
|
expected: number;
|
|
53
50
|
}
|
|
54
|
-
export interface ConnectionManagerViolation extends CheckerViolation {
|
|
55
|
-
type: CoreViolationType.ConnectionManager;
|
|
56
|
-
contract: AbacusConnectionManager;
|
|
57
|
-
connectionManagerType: ConnectionManagerViolationType;
|
|
58
|
-
}
|
|
59
|
-
export interface EnrolledInboxesViolation extends ConnectionManagerViolation {
|
|
60
|
-
remote: ChainName;
|
|
61
|
-
actual: Set<types.Address>;
|
|
62
|
-
expected: Set<types.Address>;
|
|
63
|
-
}
|
|
64
51
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,oBAAY,iBAAiB,GAAG;IAC9B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,iBAAiB;IAC3B,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,iBAAiB,sBAAsB;CACxC;AAED,oBAAY,wBAAwB;IAClC,kBAAkB,uBAAuB;IACzC,SAAS,cAAc;CACxB;AAED,oBAAY,oBAAoB;IAC9B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,2BAA4B,SAAQ,gBAAgB;IACnE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,IAAI,EAAE,iBAAiB,CAAC,WAAW,CAAC;IACpC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,OAAO,EAAE,wBAAwB,CAAC,kBAAkB,CAAC;IACrD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MailboxViolationType = exports.
|
|
3
|
+
exports.MailboxViolationType = exports.MultisigIsmViolationType = exports.CoreViolationType = void 0;
|
|
4
4
|
var CoreViolationType;
|
|
5
5
|
(function (CoreViolationType) {
|
|
6
|
-
CoreViolationType["
|
|
6
|
+
CoreViolationType["MultisigIsm"] = "MultisigIsm";
|
|
7
7
|
CoreViolationType["Mailbox"] = "Mailbox";
|
|
8
8
|
CoreViolationType["ConnectionManager"] = "ConnectionManager";
|
|
9
9
|
})(CoreViolationType = exports.CoreViolationType || (exports.CoreViolationType = {}));
|
|
10
|
-
var
|
|
11
|
-
(function (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
})(
|
|
15
|
-
var ConnectionManagerViolationType;
|
|
16
|
-
(function (ConnectionManagerViolationType) {
|
|
17
|
-
ConnectionManagerViolationType["EnrolledInboxes"] = "EnrolledInboxes";
|
|
18
|
-
})(ConnectionManagerViolationType = exports.ConnectionManagerViolationType || (exports.ConnectionManagerViolationType = {}));
|
|
10
|
+
var MultisigIsmViolationType;
|
|
11
|
+
(function (MultisigIsmViolationType) {
|
|
12
|
+
MultisigIsmViolationType["EnrolledValidators"] = "EnrolledValidators";
|
|
13
|
+
MultisigIsmViolationType["Threshold"] = "Threshold";
|
|
14
|
+
})(MultisigIsmViolationType = exports.MultisigIsmViolationType || (exports.MultisigIsmViolationType = {}));
|
|
19
15
|
var MailboxViolationType;
|
|
20
16
|
(function (MailboxViolationType) {
|
|
21
|
-
MailboxViolationType["
|
|
17
|
+
MailboxViolationType["DefaultIsm"] = "DefaultIsm";
|
|
22
18
|
})(MailboxViolationType = exports.MailboxViolationType || (exports.MailboxViolationType = {}));
|
|
23
19
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/core/types.ts"],"names":[],"mappings":";;;AAiBA,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,gDAA2B,CAAA;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;AACzC,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B;AAED,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAClC,qEAAyC,CAAA;IACzC,mDAAuB,CAAA;AACzB,CAAC,EAHW,wBAAwB,GAAxB,gCAAwB,KAAxB,gCAAwB,QAGnC;AAED,IAAY,oBAEX;AAFD,WAAY,oBAAoB;IAC9B,iDAAyB,CAAA;AAC3B,CAAC,EAFW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAE/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { HyperlaneApp } from '../../HyperlaneApp';
|
|
2
|
+
import { LiquidityLayerContracts } from '../../middleware';
|
|
3
|
+
import { MultiProvider } from '../../providers/MultiProvider';
|
|
4
|
+
import { ChainMap, ChainName } from '../../types';
|
|
5
|
+
import { BridgeAdapterConfig, CircleBridgeAdapterConfig } from './LiquidityLayerRouterDeployer';
|
|
6
|
+
interface CircleBridgeMessage<Chain> {
|
|
7
|
+
chain: Chain;
|
|
8
|
+
remoteChain: Chain;
|
|
9
|
+
txHash: string;
|
|
10
|
+
message: string;
|
|
11
|
+
nonce: number;
|
|
12
|
+
domain: number;
|
|
13
|
+
nonceHash: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class LiquidityLayerApp<Chain extends ChainName = ChainName> extends HyperlaneApp<LiquidityLayerContracts, Chain> {
|
|
16
|
+
readonly contractsMap: ChainMap<Chain, LiquidityLayerContracts>;
|
|
17
|
+
readonly multiProvider: MultiProvider<Chain>;
|
|
18
|
+
readonly bridgeAdapterConfigs: ChainMap<Chain, BridgeAdapterConfig[]>;
|
|
19
|
+
constructor(contractsMap: ChainMap<Chain, LiquidityLayerContracts>, multiProvider: MultiProvider<Chain>, bridgeAdapterConfigs: ChainMap<Chain, BridgeAdapterConfig[]>);
|
|
20
|
+
circleBridgeAdapterConfig(): ChainMap<Chain, CircleBridgeAdapterConfig>;
|
|
21
|
+
fetchCircleMessageTransactions(chain: Chain): Promise<string[]>;
|
|
22
|
+
parseCircleMessages(chain: Chain, txHash: string): Promise<CircleBridgeMessage<Chain>[]>;
|
|
23
|
+
attemptCircleAttestationSubmission(message: CircleBridgeMessage<Chain>): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=LiquidityLayerApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityLayerApp.d.ts","sourceRoot":"","sources":["../../../src/deploy/middleware/LiquidityLayerApp.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,mBAAmB,EAEnB,yBAAyB,EAC1B,MAAM,gCAAgC,CAAC;AAUxC,UAAU,mBAAmB,CAAC,KAAK;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,KAAK,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,qBAAa,iBAAiB,CAC5B,KAAK,SAAS,SAAS,GAAG,SAAS,CACnC,SAAQ,YAAY,CAAC,uBAAuB,EAAE,KAAK,CAAC;aAElC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;aACtD,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC;aACnC,oBAAoB,EAAE,QAAQ,CAC5C,KAAK,EACL,mBAAmB,EAAE,CACtB;gBALe,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC,EACtD,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EACnC,oBAAoB,EAAE,QAAQ,CAC5C,KAAK,EACL,mBAAmB,EAAE,CACtB;IAKH,yBAAyB,IAAI,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAUjE,8BAA8B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc/D,mBAAmB,CACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;IAyClC,kCAAkC,CACtC,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.LiquidityLayerApp = void 0;
|
|
16
|
+
const cross_fetch_1 = __importDefault(require("cross-fetch"));
|
|
17
|
+
const ethers_1 = require("ethers");
|
|
18
|
+
const core_1 = require("@hyperlane-xyz/core");
|
|
19
|
+
const HyperlaneApp_1 = require("../../HyperlaneApp");
|
|
20
|
+
const chains_1 = require("../../consts/chains");
|
|
21
|
+
const objects_1 = require("../../utils/objects");
|
|
22
|
+
const LiquidityLayerRouterDeployer_1 = require("./LiquidityLayerRouterDeployer");
|
|
23
|
+
const CircleBridgeInterface = core_1.ICircleBridge__factory.createInterface();
|
|
24
|
+
const CircleBridgeAdapterInterface = core_1.CircleBridgeAdapter__factory.createInterface();
|
|
25
|
+
const BridgedTokenTopic = CircleBridgeAdapterInterface.getEventTopic(CircleBridgeAdapterInterface.getEvent('BridgedToken'));
|
|
26
|
+
class LiquidityLayerApp extends HyperlaneApp_1.HyperlaneApp {
|
|
27
|
+
constructor(contractsMap, multiProvider, bridgeAdapterConfigs) {
|
|
28
|
+
super(contractsMap, multiProvider);
|
|
29
|
+
this.contractsMap = contractsMap;
|
|
30
|
+
this.multiProvider = multiProvider;
|
|
31
|
+
this.bridgeAdapterConfigs = bridgeAdapterConfigs;
|
|
32
|
+
}
|
|
33
|
+
circleBridgeAdapterConfig() {
|
|
34
|
+
return (0, objects_1.objMap)(this.bridgeAdapterConfigs, (_chain, config) => config.find((_) => _.type === LiquidityLayerRouterDeployer_1.BridgeAdapterType.Circle));
|
|
35
|
+
}
|
|
36
|
+
fetchCircleMessageTransactions(chain) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const cc = this.multiProvider.getChainConnection(chain);
|
|
39
|
+
const params = new URLSearchParams({
|
|
40
|
+
module: 'logs',
|
|
41
|
+
action: 'getLogs',
|
|
42
|
+
address: this.getContracts(chain).circleBridgeAdapter.address,
|
|
43
|
+
topic0: BridgedTokenTopic,
|
|
44
|
+
});
|
|
45
|
+
const req = yield (0, cross_fetch_1.default)(`${cc.getApiUrl()}?${params}`);
|
|
46
|
+
const response = yield req.json();
|
|
47
|
+
return response.result.map((_) => _.transactionHash).flat();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
parseCircleMessages(chain, txHash) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const connection = this.multiProvider.getChainConnection(chain);
|
|
53
|
+
const receipt = yield connection.provider.getTransactionReceipt(txHash);
|
|
54
|
+
const matchingLogs = receipt.logs
|
|
55
|
+
.map((_) => {
|
|
56
|
+
try {
|
|
57
|
+
return [CircleBridgeInterface.parseLog(_)];
|
|
58
|
+
}
|
|
59
|
+
catch (_a) {
|
|
60
|
+
try {
|
|
61
|
+
return [CircleBridgeAdapterInterface.parseLog(_)];
|
|
62
|
+
}
|
|
63
|
+
catch (_b) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
.flat();
|
|
69
|
+
if (matchingLogs.length == 0)
|
|
70
|
+
return [];
|
|
71
|
+
const message = matchingLogs.find((_) => _.name === 'MessageSent').args
|
|
72
|
+
.message;
|
|
73
|
+
const nonce = matchingLogs.find((_) => _.name === 'BridgedToken').args
|
|
74
|
+
.nonce;
|
|
75
|
+
const remoteChain = message.chain === chains_1.Chains.fuji ? chains_1.Chains.goerli : chains_1.Chains.fuji;
|
|
76
|
+
return [
|
|
77
|
+
{
|
|
78
|
+
chain,
|
|
79
|
+
// @ts-ignore
|
|
80
|
+
remoteChain,
|
|
81
|
+
txHash,
|
|
82
|
+
message,
|
|
83
|
+
nonce,
|
|
84
|
+
domain: 0,
|
|
85
|
+
nonceHash: ethers_1.ethers.utils.solidityKeccak256(['uint32', 'uint256'], [0, nonce]),
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
attemptCircleAttestationSubmission(message) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
const connection = this.multiProvider.getChainConnection(message.remoteChain);
|
|
93
|
+
const transmitter = core_1.ICircleMessageTransmitter__factory.connect(this.circleBridgeAdapterConfig()[message.remoteChain]
|
|
94
|
+
.messageTransmitterAddress, connection.signer);
|
|
95
|
+
const alreadyProcessed = yield transmitter.usedNonces(message.nonceHash);
|
|
96
|
+
if (alreadyProcessed) {
|
|
97
|
+
console.log(`Message sent on ${message.txHash} was already processed`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const messageHash = ethers_1.ethers.utils.keccak256(message.message);
|
|
101
|
+
const attestationsB = yield (0, cross_fetch_1.default)(`https://iris-api-sandbox.circle.com/attestations/${messageHash}`);
|
|
102
|
+
const attestations = yield attestationsB.json();
|
|
103
|
+
if (attestations.status !== 'complete') {
|
|
104
|
+
console.log(`Attestations not available for message nonce ${message.nonce} on ${message.txHash}`);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
console.log(`Ready to submit attestations for message ${message.nonce}`);
|
|
108
|
+
const tx = yield transmitter.receiveMessage(message.message, attestations.attestation);
|
|
109
|
+
console.log(`Submitted attestations in ${yield connection.getTxUrl(tx)}`);
|
|
110
|
+
yield connection.handleTx(tx);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.LiquidityLayerApp = LiquidityLayerApp;
|
|
115
|
+
//# sourceMappingURL=LiquidityLayerApp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityLayerApp.js","sourceRoot":"","sources":["../../../src/deploy/middleware/LiquidityLayerApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { CircleBridgeAdapter, LiquidityLayerRouter } from '@hyperlane-xyz/core';
|
|
2
|
+
import { HyperlaneCore } from '../../core/HyperlaneCore';
|
|
3
|
+
import { LiquidityLayerContracts, LiquidityLayerFactories } from '../../middleware';
|
|
4
|
+
import { MultiProvider } from '../../providers/MultiProvider';
|
|
5
|
+
import { ChainMap, ChainName } from '../../types';
|
|
6
|
+
import { HyperlaneRouterDeployer } from '../router/HyperlaneRouterDeployer';
|
|
7
|
+
import { RouterConfig } from '../router/types';
|
|
8
|
+
export declare enum BridgeAdapterType {
|
|
9
|
+
Circle = "Circle"
|
|
10
|
+
}
|
|
11
|
+
export interface CircleBridgeAdapterConfig {
|
|
12
|
+
type: BridgeAdapterType.Circle;
|
|
13
|
+
circleBridgeAddress: string;
|
|
14
|
+
messageTransmitterAddress: string;
|
|
15
|
+
usdcAddress: string;
|
|
16
|
+
circleDomainMapping: {
|
|
17
|
+
hyperlaneDomain: number;
|
|
18
|
+
circleDomain: number;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
export declare type BridgeAdapterConfig = CircleBridgeAdapterConfig;
|
|
22
|
+
export declare type LiquidityLayerConfig = RouterConfig & {
|
|
23
|
+
bridgeAdapterConfigs: BridgeAdapterConfig[];
|
|
24
|
+
};
|
|
25
|
+
export declare class LiquidityLayerDeployer<Chain extends ChainName> extends HyperlaneRouterDeployer<Chain, LiquidityLayerConfig, LiquidityLayerContracts, LiquidityLayerFactories> {
|
|
26
|
+
protected core: HyperlaneCore<Chain>;
|
|
27
|
+
protected create2salt: string;
|
|
28
|
+
constructor(multiProvider: MultiProvider<Chain>, configMap: ChainMap<Chain, LiquidityLayerConfig>, core: HyperlaneCore<Chain>, create2salt?: string);
|
|
29
|
+
enrollRemoteRouters(contractsMap: ChainMap<Chain, LiquidityLayerContracts>): Promise<void>;
|
|
30
|
+
deployContracts(chain: Chain, config: LiquidityLayerConfig): Promise<LiquidityLayerContracts>;
|
|
31
|
+
deployCircleBridgeAdapter(chain: Chain, adapterConfig: CircleBridgeAdapterConfig, owner: string, router: LiquidityLayerRouter): Promise<CircleBridgeAdapter>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=LiquidityLayerRouterDeployer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityLayerRouterDeployer.d.ts","sourceRoot":"","sources":["../../../src/deploy/middleware/LiquidityLayerRouterDeployer.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,EAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;CACL;AAED,oBAAY,mBAAmB,GAAG,yBAAyB,CAAC;AAE5D,oBAAY,oBAAoB,GAAG,YAAY,GAAG;IAChD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C,CAAC;AAEF,qBAAa,sBAAsB,CACjC,KAAK,SAAS,SAAS,CACvB,SAAQ,uBAAuB,CAC/B,KAAK,EACL,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,CACxB;IAIG,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;IACpC,SAAS,CAAC,WAAW;gBAHrB,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EACnC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC,EACtC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,EAC1B,WAAW,SAA+B;IAKhD,mBAAmB,CACvB,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC;IAcV,eAAe,CACnB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,uBAAuB,CAAC;IA+B7B,yBAAyB,CAC7B,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,yBAAyB,EACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;CA2DhC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LiquidityLayerDeployer = exports.BridgeAdapterType = void 0;
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
14
|
+
const core_1 = require("@hyperlane-xyz/core");
|
|
15
|
+
const middleware_1 = require("../../middleware");
|
|
16
|
+
const objects_1 = require("../../utils/objects");
|
|
17
|
+
const HyperlaneRouterDeployer_1 = require("../router/HyperlaneRouterDeployer");
|
|
18
|
+
var BridgeAdapterType;
|
|
19
|
+
(function (BridgeAdapterType) {
|
|
20
|
+
BridgeAdapterType["Circle"] = "Circle";
|
|
21
|
+
})(BridgeAdapterType = exports.BridgeAdapterType || (exports.BridgeAdapterType = {}));
|
|
22
|
+
class LiquidityLayerDeployer extends HyperlaneRouterDeployer_1.HyperlaneRouterDeployer {
|
|
23
|
+
constructor(multiProvider, configMap, core, create2salt = 'LiquidityLayerDeployerSalt') {
|
|
24
|
+
super(multiProvider, configMap, middleware_1.liquidityLayerFactories, {});
|
|
25
|
+
this.core = core;
|
|
26
|
+
this.create2salt = create2salt;
|
|
27
|
+
}
|
|
28
|
+
enrollRemoteRouters(contractsMap) {
|
|
29
|
+
const _super = Object.create(null, {
|
|
30
|
+
enrollRemoteRouters: { get: () => super.enrollRemoteRouters }
|
|
31
|
+
});
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
// Enroll the LiquidityLayerRouter with each other
|
|
34
|
+
yield _super.enrollRemoteRouters.call(this, contractsMap);
|
|
35
|
+
// Enroll the circle adapters with each other
|
|
36
|
+
yield _super.enrollRemoteRouters.call(this, (0, objects_1.objMap)(contractsMap, (_chain, contracts) => ({
|
|
37
|
+
router: contracts.circleBridgeAdapter,
|
|
38
|
+
})));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Custom contract deployment logic can go here
|
|
42
|
+
// If no custom logic is needed, call deployContract for the router
|
|
43
|
+
deployContracts(chain, config) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const initCalldata = core_1.LiquidityLayerRouter__factory.createInterface().encodeFunctionData('initialize', [config.owner, config.mailbox, config.interchainGasPaymaster]);
|
|
46
|
+
const router = yield this.deployContract(chain, 'router', [], {
|
|
47
|
+
create2Salt: this.create2salt,
|
|
48
|
+
initCalldata,
|
|
49
|
+
});
|
|
50
|
+
const bridgeAdapters = {};
|
|
51
|
+
for (const adapterConfig of config.bridgeAdapterConfigs) {
|
|
52
|
+
if (adapterConfig.type === BridgeAdapterType.Circle) {
|
|
53
|
+
bridgeAdapters.circleBridgeAdapter =
|
|
54
|
+
yield this.deployCircleBridgeAdapter(chain, adapterConfig, config.owner, router);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return Object.assign(Object.assign({}, bridgeAdapters), { router });
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
deployCircleBridgeAdapter(chain, adapterConfig, owner, router) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
const cc = this.multiProvider.getChainConnection(chain);
|
|
63
|
+
const initCalldata = core_1.CircleBridgeAdapter__factory.createInterface().encodeFunctionData('initialize', [
|
|
64
|
+
owner,
|
|
65
|
+
adapterConfig.circleBridgeAddress,
|
|
66
|
+
adapterConfig.messageTransmitterAddress,
|
|
67
|
+
router.address,
|
|
68
|
+
]);
|
|
69
|
+
const circleBridgeAdapter = yield this.deployContract(chain, 'circleBridgeAdapter', [], {
|
|
70
|
+
create2Salt: this.create2salt,
|
|
71
|
+
initCalldata,
|
|
72
|
+
});
|
|
73
|
+
if ((yield circleBridgeAdapter.tokenSymbolToAddress('USDC')) ===
|
|
74
|
+
ethers_1.ethers.constants.AddressZero) {
|
|
75
|
+
this.logger(`Set USDC token contract`);
|
|
76
|
+
yield cc.handleTx(circleBridgeAdapter.addToken(adapterConfig.usdcAddress, 'USDC'));
|
|
77
|
+
}
|
|
78
|
+
// Set domain mappings
|
|
79
|
+
for (const { circleDomain, hyperlaneDomain, } of adapterConfig.circleDomainMapping) {
|
|
80
|
+
const expectedCircleDomain = yield circleBridgeAdapter.hyperlaneDomainToCircleDomain(hyperlaneDomain);
|
|
81
|
+
if (expectedCircleDomain === circleDomain)
|
|
82
|
+
continue;
|
|
83
|
+
this.logger(`Set circle domain ${circleDomain} for hyperlane domain ${hyperlaneDomain}`);
|
|
84
|
+
yield cc.handleTx(circleBridgeAdapter.addDomain(hyperlaneDomain, circleDomain));
|
|
85
|
+
}
|
|
86
|
+
this.logger('Set CircleLiquidityLayerAdapter on Router');
|
|
87
|
+
yield cc.handleTx(router.setLiquidityLayerAdapter(adapterConfig.type, circleBridgeAdapter.address));
|
|
88
|
+
return circleBridgeAdapter;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.LiquidityLayerDeployer = LiquidityLayerDeployer;
|
|
93
|
+
//# sourceMappingURL=LiquidityLayerRouterDeployer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiquidityLayerRouterDeployer.js","sourceRoot":"","sources":["../../../src/deploy/middleware/LiquidityLayerRouterDeployer.ts"],"names":[],"mappings":"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"}
|