@hyperlane-xyz/sdk 1.3.3 → 1.3.4
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/chainMetadata.d.ts +88 -36
- package/dist/consts/chainMetadata.d.ts.map +1 -1
- package/dist/consts/chainMetadata.js +31 -18
- package/dist/consts/chainMetadata.js.map +1 -1
- package/dist/consts/environments/index.d.ts +3 -0
- package/dist/consts/environments/index.d.ts.map +1 -1
- package/dist/consts/environments/index.js +4 -1
- package/dist/consts/environments/index.js.map +1 -1
- package/dist/consts/environments/mainnet.json +2 -0
- package/dist/core/TestCoreDeployer.js +1 -1
- package/dist/core/TestCoreDeployer.js.map +1 -1
- package/dist/core/events.d.ts +0 -4
- package/dist/core/events.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts +1 -0
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +7 -1
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/verify/ContractVerifier.d.ts +2 -0
- package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -1
- package/dist/deploy/verify/ContractVerifier.js +45 -33
- package/dist/deploy/verify/ContractVerifier.js.map +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts +1 -0
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +48 -1
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js +11 -9
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js.map +1 -1
- package/dist/providers/MultiProvider.d.ts +10 -10
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +31 -22
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/RetryProvider.d.ts +5 -11
- package/dist/providers/RetryProvider.d.ts.map +1 -1
- package/dist/providers/RetryProvider.js +11 -25
- package/dist/providers/RetryProvider.js.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.d.ts +1 -0
- package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.js +37 -1
- package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
- package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
- package/dist/router/ProxiedRouterDeployer.js +9 -2
- package/dist/router/ProxiedRouterDeployer.js.map +1 -1
- package/package.json +3 -3
- package/dist/events.d.ts +0 -25
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js +0 -164
- package/dist/events.js.map +0 -1
package/dist/events.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
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.findEvent = exports.getEvents = exports.findAnnotatedSingleEvent = exports.queryAnnotatedEvents = exports.Annotated = void 0;
|
|
13
|
-
class Annotated {
|
|
14
|
-
constructor(domain, receipt, event, callerKnowsWhatTheyAreDoing = false) {
|
|
15
|
-
var _a;
|
|
16
|
-
if (!callerKnowsWhatTheyAreDoing) {
|
|
17
|
-
throw new Error('Please instantiate using fromEvent or fromEvents');
|
|
18
|
-
}
|
|
19
|
-
this.domain = domain;
|
|
20
|
-
this.receipt = receipt;
|
|
21
|
-
this.eventName = (_a = event.eventSignature) === null || _a === void 0 ? void 0 : _a.split('(')[0];
|
|
22
|
-
this.event = event;
|
|
23
|
-
}
|
|
24
|
-
static fromEvent(domain, event) {
|
|
25
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
const receipt = yield event.getTransactionReceipt();
|
|
27
|
-
return new Annotated(domain, receipt, event, true);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
static fromEvents(domain, events) {
|
|
31
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
return Promise.all(events.map((event) => __awaiter(this, void 0, void 0, function* () { return Annotated.fromEvent(domain, event); })));
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
get contractAddress() {
|
|
36
|
-
var _a;
|
|
37
|
-
// ok to use ! assertion here as we assume that the event is in the receipt
|
|
38
|
-
const address = (_a = this.receipt.logs.find((log) => log.logIndex === this.event.logIndex)) === null || _a === void 0 ? void 0 : _a.address;
|
|
39
|
-
if (!address)
|
|
40
|
-
throw new Error('Missing receipt. Class is in an inconsistent state');
|
|
41
|
-
return address;
|
|
42
|
-
}
|
|
43
|
-
get transactionHash() {
|
|
44
|
-
return this.receipt.transactionHash;
|
|
45
|
-
}
|
|
46
|
-
get blockNumber() {
|
|
47
|
-
return this.receipt.blockNumber;
|
|
48
|
-
}
|
|
49
|
-
get blockHash() {
|
|
50
|
-
return this.receipt.blockHash;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.Annotated = Annotated;
|
|
54
|
-
function queryAnnotatedEvents(multiprovider, chain, contract, filter, startBlock, endBlock) {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
const events = yield getEvents(multiprovider, chain, contract, filter, startBlock, endBlock);
|
|
57
|
-
return Annotated.fromEvents(multiprovider.getChainId(chain), events);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
exports.queryAnnotatedEvents = queryAnnotatedEvents;
|
|
61
|
-
function findAnnotatedSingleEvent(multiprovider, chain, contract, filter, startBlock) {
|
|
62
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
const events = yield findEvent(multiprovider, chain, contract, filter, startBlock);
|
|
64
|
-
return Annotated.fromEvents(multiprovider.getChainId(chain), events);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
exports.findAnnotatedSingleEvent = findAnnotatedSingleEvent;
|
|
68
|
-
function getEvents(multiprovider, chain, contract, filter, startBlock, endBlock) {
|
|
69
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
const metadata = multiprovider.getChainMetadata(chain);
|
|
71
|
-
const mustPaginate = !!metadata.publicRpcUrls[0].pagination;
|
|
72
|
-
if (mustPaginate) {
|
|
73
|
-
return getPaginatedEvents(multiprovider, chain, contract, filter, startBlock, endBlock);
|
|
74
|
-
}
|
|
75
|
-
return contract.queryFilter(filter, startBlock, endBlock);
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
exports.getEvents = getEvents;
|
|
79
|
-
function findEvent(multiprovider, chain, contract, filter, startBlock) {
|
|
80
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
-
const metadata = multiprovider.getChainMetadata(chain);
|
|
82
|
-
const mustPaginate = !!metadata.publicRpcUrls[0].pagination;
|
|
83
|
-
if (mustPaginate) {
|
|
84
|
-
return findFromPaginatedEvents(multiprovider, chain, contract, filter, startBlock);
|
|
85
|
-
}
|
|
86
|
-
return contract.queryFilter(filter, startBlock);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
exports.findEvent = findEvent;
|
|
90
|
-
function getPaginatedEvents(multiprovider, chain, contract, filter, startBlock, endBlock) {
|
|
91
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
const metadata = multiprovider.getChainMetadata(chain);
|
|
93
|
-
const pagination = metadata.publicRpcUrls[0].pagination;
|
|
94
|
-
if (!pagination) {
|
|
95
|
-
throw new Error('Domain need not be paginated');
|
|
96
|
-
}
|
|
97
|
-
// get the first block by params
|
|
98
|
-
// or domain deployment block
|
|
99
|
-
const firstBlock = startBlock
|
|
100
|
-
? Math.max(startBlock, pagination.from)
|
|
101
|
-
: pagination.from;
|
|
102
|
-
// get the last block by params
|
|
103
|
-
// or current block number
|
|
104
|
-
let lastBlock;
|
|
105
|
-
if (!endBlock) {
|
|
106
|
-
const provider = multiprovider.getProvider(chain);
|
|
107
|
-
lastBlock = yield provider.getBlockNumber();
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
lastBlock = endBlock;
|
|
111
|
-
}
|
|
112
|
-
// query domain pagination limit at a time, concurrently
|
|
113
|
-
const eventArrayPromises = [];
|
|
114
|
-
for (let from = firstBlock; from <= lastBlock; from += pagination.blocks) {
|
|
115
|
-
const nextFrom = from + pagination.blocks;
|
|
116
|
-
const to = Math.min(nextFrom, lastBlock);
|
|
117
|
-
const eventArrayPromise = contract.queryFilter(filter, from, to);
|
|
118
|
-
eventArrayPromises.push(eventArrayPromise);
|
|
119
|
-
}
|
|
120
|
-
// await promises & concatenate results
|
|
121
|
-
const eventArrays = yield Promise.all(eventArrayPromises);
|
|
122
|
-
let events = [];
|
|
123
|
-
for (const eventArray of eventArrays) {
|
|
124
|
-
events = events.concat(eventArray);
|
|
125
|
-
}
|
|
126
|
-
return events;
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
function findFromPaginatedEvents(multiprovider, chain, contract, filter, startBlock, endBlock) {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
const metadata = multiprovider.getChainMetadata(chain);
|
|
132
|
-
const pagination = metadata.publicRpcUrls[0].pagination;
|
|
133
|
-
if (!pagination) {
|
|
134
|
-
throw new Error('Domain need not be paginated');
|
|
135
|
-
}
|
|
136
|
-
// get the first block by params
|
|
137
|
-
// or domain deployment block
|
|
138
|
-
const firstBlock = startBlock
|
|
139
|
-
? Math.max(startBlock, pagination.from)
|
|
140
|
-
: pagination.from;
|
|
141
|
-
// get the last block by params
|
|
142
|
-
// or current block number
|
|
143
|
-
let lastBlock;
|
|
144
|
-
if (!endBlock) {
|
|
145
|
-
const provider = multiprovider.getProvider(chain);
|
|
146
|
-
lastBlock = yield provider.getBlockNumber();
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
lastBlock = endBlock;
|
|
150
|
-
}
|
|
151
|
-
// query domain pagination limit at a time, concurrently
|
|
152
|
-
// eslint-disable-next-line for-direction
|
|
153
|
-
for (let end = lastBlock; end > firstBlock; end -= pagination.blocks) {
|
|
154
|
-
const nextEnd = end - pagination.blocks;
|
|
155
|
-
const from = Math.max(nextEnd, firstBlock);
|
|
156
|
-
const queriedEvents = yield contract.queryFilter(filter, from, end);
|
|
157
|
-
if (queriedEvents.length > 0) {
|
|
158
|
-
return queriedEvents;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return [];
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|