@hyperlane-xyz/sdk 0.5.0-beta0

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.
Files changed (217) hide show
  1. package/README.md +5 -0
  2. package/dist/HyperlaneApp.d.ts +13 -0
  3. package/dist/HyperlaneApp.d.ts.map +1 -0
  4. package/dist/HyperlaneApp.js +25 -0
  5. package/dist/HyperlaneApp.js.map +1 -0
  6. package/dist/consts/chainConnectionConfigs.d.ts +28 -0
  7. package/dist/consts/chainConnectionConfigs.d.ts.map +1 -0
  8. package/dist/consts/chainConnectionConfigs.js +130 -0
  9. package/dist/consts/chainConnectionConfigs.js.map +1 -0
  10. package/dist/consts/chainMetadata.d.ts +43 -0
  11. package/dist/consts/chainMetadata.d.ts.map +1 -0
  12. package/dist/consts/chainMetadata.js +139 -0
  13. package/dist/consts/chainMetadata.js.map +1 -0
  14. package/dist/consts/chains.d.ts +28 -0
  15. package/dist/consts/chains.d.ts.map +1 -0
  16. package/dist/consts/chains.js +40 -0
  17. package/dist/consts/chains.js.map +1 -0
  18. package/dist/consts/environments/index.d.ts +1450 -0
  19. package/dist/consts/environments/index.d.ts.map +1 -0
  20. package/dist/consts/environments/index.js +15 -0
  21. package/dist/consts/environments/index.js.map +1 -0
  22. package/dist/consts/environments/mainnet.json +513 -0
  23. package/dist/consts/environments/test.json +113 -0
  24. package/dist/consts/environments/testnet2.json +821 -0
  25. package/dist/consts/metamask.d.ts +17 -0
  26. package/dist/consts/metamask.d.ts.map +1 -0
  27. package/dist/consts/metamask.js +50 -0
  28. package/dist/consts/metamask.js.map +1 -0
  29. package/dist/contracts.d.ts +17 -0
  30. package/dist/contracts.d.ts.map +1 -0
  31. package/dist/contracts.js +61 -0
  32. package/dist/contracts.js.map +1 -0
  33. package/dist/core/HyperlaneCore.d.ts +1491 -0
  34. package/dist/core/HyperlaneCore.d.ts.map +1 -0
  35. package/dist/core/HyperlaneCore.js +103 -0
  36. package/dist/core/HyperlaneCore.js.map +1 -0
  37. package/dist/core/TestCoreApp.d.ts +27 -0
  38. package/dist/core/TestCoreApp.d.ts.map +1 -0
  39. package/dist/core/TestCoreApp.js +63 -0
  40. package/dist/core/TestCoreApp.js.map +1 -0
  41. package/dist/core/TestCoreDeployer.d.ts +13 -0
  42. package/dist/core/TestCoreDeployer.d.ts.map +1 -0
  43. package/dist/core/TestCoreDeployer.js +85 -0
  44. package/dist/core/TestCoreDeployer.js.map +1 -0
  45. package/dist/core/contracts.d.ts +30 -0
  46. package/dist/core/contracts.d.ts.map +1 -0
  47. package/dist/core/contracts.js +14 -0
  48. package/dist/core/contracts.js.map +1 -0
  49. package/dist/core/events.d.ts +9 -0
  50. package/dist/core/events.d.ts.map +1 -0
  51. package/dist/core/events.js +3 -0
  52. package/dist/core/events.js.map +1 -0
  53. package/dist/core/message.d.ts +162 -0
  54. package/dist/core/message.d.ts.map +1 -0
  55. package/dist/core/message.js +311 -0
  56. package/dist/core/message.js.map +1 -0
  57. package/dist/core/testHyperlaneDeploy.hardhat-test.d.ts +3 -0
  58. package/dist/core/testHyperlaneDeploy.hardhat-test.d.ts.map +1 -0
  59. package/dist/core/testHyperlaneDeploy.hardhat-test.js +66 -0
  60. package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -0
  61. package/dist/deploy/HyperlaneAppChecker.d.ts +22 -0
  62. package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -0
  63. package/dist/deploy/HyperlaneAppChecker.js +76 -0
  64. package/dist/deploy/HyperlaneAppChecker.js.map +1 -0
  65. package/dist/deploy/HyperlaneDeployer.d.ts +40 -0
  66. package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -0
  67. package/dist/deploy/HyperlaneDeployer.js +153 -0
  68. package/dist/deploy/HyperlaneDeployer.js.map +1 -0
  69. package/dist/deploy/core/HyperlaneCoreChecker.d.ts +17 -0
  70. package/dist/deploy/core/HyperlaneCoreChecker.d.ts.map +1 -0
  71. package/dist/deploy/core/HyperlaneCoreChecker.js +210 -0
  72. package/dist/deploy/core/HyperlaneCoreChecker.js.map +1 -0
  73. package/dist/deploy/core/HyperlaneCoreDeployer.d.ts +30 -0
  74. package/dist/deploy/core/HyperlaneCoreDeployer.d.ts.map +1 -0
  75. package/dist/deploy/core/HyperlaneCoreDeployer.js +134 -0
  76. package/dist/deploy/core/HyperlaneCoreDeployer.js.map +1 -0
  77. package/dist/deploy/core/types.d.ts +64 -0
  78. package/dist/deploy/core/types.d.ts.map +1 -0
  79. package/dist/deploy/core/types.js +23 -0
  80. package/dist/deploy/core/types.js.map +1 -0
  81. package/dist/deploy/proxy.d.ts +17 -0
  82. package/dist/deploy/proxy.d.ts.map +1 -0
  83. package/dist/deploy/proxy.js +35 -0
  84. package/dist/deploy/proxy.js.map +1 -0
  85. package/dist/deploy/router/HyperlaneRouterChecker.d.ts +13 -0
  86. package/dist/deploy/router/HyperlaneRouterChecker.d.ts.map +1 -0
  87. package/dist/deploy/router/HyperlaneRouterChecker.js +44 -0
  88. package/dist/deploy/router/HyperlaneRouterChecker.js.map +1 -0
  89. package/dist/deploy/router/HyperlaneRouterDeployer.d.ts +13 -0
  90. package/dist/deploy/router/HyperlaneRouterDeployer.d.ts.map +1 -0
  91. package/dist/deploy/router/HyperlaneRouterDeployer.js +103 -0
  92. package/dist/deploy/router/HyperlaneRouterDeployer.js.map +1 -0
  93. package/dist/deploy/router/types.d.ts +7 -0
  94. package/dist/deploy/router/types.d.ts.map +1 -0
  95. package/dist/deploy/router/types.js +3 -0
  96. package/dist/deploy/router/types.js.map +1 -0
  97. package/dist/deploy/types.d.ts +19 -0
  98. package/dist/deploy/types.d.ts.map +1 -0
  99. package/dist/deploy/types.js +8 -0
  100. package/dist/deploy/types.js.map +1 -0
  101. package/dist/deploy/utils.d.ts +10 -0
  102. package/dist/deploy/utils.d.ts.map +1 -0
  103. package/dist/deploy/utils.js +38 -0
  104. package/dist/deploy/utils.js.map +1 -0
  105. package/dist/deploy/verify/ContractVerifier.d.ts +19 -0
  106. package/dist/deploy/verify/ContractVerifier.d.ts.map +1 -0
  107. package/dist/deploy/verify/ContractVerifier.js +129 -0
  108. package/dist/deploy/verify/ContractVerifier.js.map +1 -0
  109. package/dist/deploy/verify/types.d.ts +14 -0
  110. package/dist/deploy/verify/types.d.ts.map +1 -0
  111. package/dist/deploy/verify/types.js +3 -0
  112. package/dist/deploy/verify/types.js.map +1 -0
  113. package/dist/deploy/verify/utils.d.ts +6 -0
  114. package/dist/deploy/verify/utils.d.ts.map +1 -0
  115. package/dist/deploy/verify/utils.js +25 -0
  116. package/dist/deploy/verify/utils.js.map +1 -0
  117. package/dist/domains.d.ts +4 -0
  118. package/dist/domains.d.ts.map +1 -0
  119. package/dist/domains.js +8 -0
  120. package/dist/domains.js.map +1 -0
  121. package/dist/events.d.ts +25 -0
  122. package/dist/events.d.ts.map +1 -0
  123. package/dist/events.js +161 -0
  124. package/dist/events.js.map +1 -0
  125. package/dist/gas/calculator.d.ts +134 -0
  126. package/dist/gas/calculator.d.ts.map +1 -0
  127. package/dist/gas/calculator.js +235 -0
  128. package/dist/gas/calculator.js.map +1 -0
  129. package/dist/gas/calculator.test.d.ts +2 -0
  130. package/dist/gas/calculator.test.d.ts.map +1 -0
  131. package/dist/gas/calculator.test.js +211 -0
  132. package/dist/gas/calculator.test.js.map +1 -0
  133. package/dist/gas/token-prices.d.ts +18 -0
  134. package/dist/gas/token-prices.d.ts.map +1 -0
  135. package/dist/gas/token-prices.js +63 -0
  136. package/dist/gas/token-prices.js.map +1 -0
  137. package/dist/gas/token-prices.test.d.ts +2 -0
  138. package/dist/gas/token-prices.test.d.ts.map +1 -0
  139. package/dist/gas/token-prices.test.js +40 -0
  140. package/dist/gas/token-prices.test.js.map +1 -0
  141. package/dist/index.d.ts +42 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +119 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/providers/ChainConnection.d.ts +22 -0
  146. package/dist/providers/ChainConnection.d.ts.map +1 -0
  147. package/dist/providers/ChainConnection.js +67 -0
  148. package/dist/providers/ChainConnection.js.map +1 -0
  149. package/dist/providers/MultiProvider.d.ts +55 -0
  150. package/dist/providers/MultiProvider.d.ts.map +1 -0
  151. package/dist/providers/MultiProvider.js +106 -0
  152. package/dist/providers/MultiProvider.js.map +1 -0
  153. package/dist/providers/RetryProvider.d.ts +18 -0
  154. package/dist/providers/RetryProvider.d.ts.map +1 -0
  155. package/dist/providers/RetryProvider.js +49 -0
  156. package/dist/providers/RetryProvider.js.map +1 -0
  157. package/dist/proxy.d.ts +23 -0
  158. package/dist/proxy.d.ts.map +1 -0
  159. package/dist/proxy.js +30 -0
  160. package/dist/proxy.js.map +1 -0
  161. package/dist/router.d.ts +19 -0
  162. package/dist/router.d.ts.map +1 -0
  163. package/dist/router.js +3 -0
  164. package/dist/router.js.map +1 -0
  165. package/dist/test/envSubsetDeployer/app.d.ts +36 -0
  166. package/dist/test/envSubsetDeployer/app.d.ts.map +1 -0
  167. package/dist/test/envSubsetDeployer/app.js +77 -0
  168. package/dist/test/envSubsetDeployer/app.js.map +1 -0
  169. package/dist/test/envSubsetDeployer/check-single-chain.d.ts +2 -0
  170. package/dist/test/envSubsetDeployer/check-single-chain.d.ts.map +1 -0
  171. package/dist/test/envSubsetDeployer/check-single-chain.js +49 -0
  172. package/dist/test/envSubsetDeployer/check-single-chain.js.map +1 -0
  173. package/dist/test/envSubsetDeployer/deploy-single-chain.d.ts +2 -0
  174. package/dist/test/envSubsetDeployer/deploy-single-chain.d.ts.map +1 -0
  175. package/dist/test/envSubsetDeployer/deploy-single-chain.js +42 -0
  176. package/dist/test/envSubsetDeployer/deploy-single-chain.js.map +1 -0
  177. package/dist/test/envSubsetDeployer/deploy.hardhat-test.d.ts +2 -0
  178. package/dist/test/envSubsetDeployer/deploy.hardhat-test.d.ts.map +1 -0
  179. package/dist/test/envSubsetDeployer/deploy.hardhat-test.js +80 -0
  180. package/dist/test/envSubsetDeployer/deploy.hardhat-test.js.map +1 -0
  181. package/dist/test/envSubsetDeployer/utils.d.ts +7 -0
  182. package/dist/test/envSubsetDeployer/utils.d.ts.map +1 -0
  183. package/dist/test/envSubsetDeployer/utils.js +25 -0
  184. package/dist/test/envSubsetDeployer/utils.js.map +1 -0
  185. package/dist/test/testUtils.d.ts +29 -0
  186. package/dist/test/testUtils.d.ts.map +1 -0
  187. package/dist/test/testUtils.js +98 -0
  188. package/dist/test/testUtils.js.map +1 -0
  189. package/dist/types.d.ts +20 -0
  190. package/dist/types.d.ts.map +1 -0
  191. package/dist/types.js +3 -0
  192. package/dist/types.js.map +1 -0
  193. package/dist/utils/MultiGeneric.d.ts +27 -0
  194. package/dist/utils/MultiGeneric.d.ts.map +1 -0
  195. package/dist/utils/MultiGeneric.js +70 -0
  196. package/dist/utils/MultiGeneric.js.map +1 -0
  197. package/dist/utils/ids.d.ts +20 -0
  198. package/dist/utils/ids.d.ts.map +1 -0
  199. package/dist/utils/ids.js +47 -0
  200. package/dist/utils/ids.js.map +1 -0
  201. package/dist/utils/number.d.ts +32 -0
  202. package/dist/utils/number.d.ts.map +1 -0
  203. package/dist/utils/number.js +59 -0
  204. package/dist/utils/number.js.map +1 -0
  205. package/dist/utils/objects.d.ts +7 -0
  206. package/dist/utils/objects.d.ts.map +1 -0
  207. package/dist/utils/objects.js +29 -0
  208. package/dist/utils/objects.js.map +1 -0
  209. package/dist/utils/time.d.ts +8 -0
  210. package/dist/utils/time.d.ts.map +1 -0
  211. package/dist/utils/time.js +15 -0
  212. package/dist/utils/time.js.map +1 -0
  213. package/dist/utils/utils.test.d.ts +2 -0
  214. package/dist/utils/utils.test.d.ts.map +1 -0
  215. package/dist/utils/utils.test.js +41 -0
  216. package/dist/utils/utils.test.js.map +1 -0
  217. package/package.json +55 -0
@@ -0,0 +1,311 @@
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.HyperlaneMessage = exports.InboxMessageStatus = exports.MessageStatus = exports.resolveNetworks = exports.resolveId = exports.resolveDomain = void 0;
13
+ const ethers_1 = require("ethers");
14
+ const core_1 = require("@hyperlane-xyz/core");
15
+ const utils_1 = require("@hyperlane-xyz/utils");
16
+ const domains_1 = require("../domains");
17
+ const events_1 = require("../events");
18
+ const time_1 = require("../utils/time");
19
+ const resolveDomain = (nameOrDomain) => typeof nameOrDomain === 'number'
20
+ ? domains_1.DomainIdToChainName[nameOrDomain]
21
+ : nameOrDomain;
22
+ exports.resolveDomain = resolveDomain;
23
+ const resolveId = (nameOrDomain) => typeof nameOrDomain === 'string'
24
+ ? domains_1.ChainNameToDomainId[nameOrDomain]
25
+ : nameOrDomain;
26
+ exports.resolveId = resolveId;
27
+ const resolveNetworks = (message) => {
28
+ return {
29
+ origin: (0, exports.resolveDomain)(message.origin),
30
+ destination: (0, exports.resolveDomain)(message.destination),
31
+ };
32
+ };
33
+ exports.resolveNetworks = resolveNetworks;
34
+ var MessageStatus;
35
+ (function (MessageStatus) {
36
+ MessageStatus[MessageStatus["Dispatched"] = 0] = "Dispatched";
37
+ MessageStatus[MessageStatus["Included"] = 1] = "Included";
38
+ MessageStatus[MessageStatus["Relayed"] = 2] = "Relayed";
39
+ MessageStatus[MessageStatus["Processed"] = 3] = "Processed";
40
+ })(MessageStatus = exports.MessageStatus || (exports.MessageStatus = {}));
41
+ var InboxMessageStatus;
42
+ (function (InboxMessageStatus) {
43
+ InboxMessageStatus[InboxMessageStatus["None"] = 0] = "None";
44
+ InboxMessageStatus[InboxMessageStatus["Proven"] = 1] = "Proven";
45
+ InboxMessageStatus[InboxMessageStatus["Processed"] = 2] = "Processed";
46
+ })(InboxMessageStatus = exports.InboxMessageStatus || (exports.InboxMessageStatus = {}));
47
+ // TODO: move HyperlaneMessage into HyperlaneCore app
48
+ /**
49
+ * A deserialized Hyperlane message.
50
+ */
51
+ class HyperlaneMessage {
52
+ constructor(multiProvider, core, dispatch) {
53
+ this.multiProvider = multiProvider;
54
+ this.core = core;
55
+ this.message = utils_1.utils.parseMessage(dispatch.event.args.message);
56
+ this.dispatch = dispatch;
57
+ const messageNetworks = (0, exports.resolveNetworks)(this.message);
58
+ const mailboxes = core.getMailboxPair(messageNetworks.origin, // TODO: Fix never type that results from Exclude<T, T>
59
+ messageNetworks.destination);
60
+ this.outbox = mailboxes.originOutbox;
61
+ this.inbox = mailboxes.destinationInbox;
62
+ this.cache = {};
63
+ }
64
+ /**
65
+ * The receipt of the TX that dispatched this message
66
+ */
67
+ get receipt() {
68
+ return this.dispatch.receipt;
69
+ }
70
+ /**
71
+ * Instantiate one or more messages from a receipt.
72
+ *
73
+ * @param core the {@link HyperlaneCore} object to use
74
+ * @param nameOrDomain the domain on which the receipt was logged
75
+ * @param receipt the receipt
76
+ * @returns an array of {@link HyperlaneMessage} objects
77
+ */
78
+ static fromReceipt(multiProvider, core, nameOrDomain, receipt) {
79
+ const messages = [];
80
+ const outbox = new core_1.Outbox__factory().interface;
81
+ const chain = (0, exports.resolveDomain)(nameOrDomain);
82
+ const provider = multiProvider.getChainConnection(chain).provider;
83
+ for (const log of receipt.logs) {
84
+ try {
85
+ const parsed = outbox.parseLog(log);
86
+ if (parsed.name === 'Dispatch') {
87
+ const dispatch = Object.assign(Object.assign({}, parsed), { getBlock: () => provider.getBlock(log.blockHash), getTransaction: () => provider.getTransaction(log.transactionHash), getTransactionReceipt: () => provider.getTransactionReceipt(log.transactionHash) });
88
+ const annotated = new events_1.Annotated((0, exports.resolveId)(nameOrDomain), receipt, dispatch, true);
89
+ annotated.event.blockNumber = annotated.receipt.blockNumber;
90
+ const message = new HyperlaneMessage(multiProvider, core, annotated);
91
+ messages.push(message);
92
+ }
93
+ }
94
+ catch (e) {
95
+ continue;
96
+ }
97
+ }
98
+ return messages;
99
+ }
100
+ /**
101
+ * Instantiate EXACTLY one message from a receipt.
102
+ *
103
+ * @param core the {@link HyperlaneCore} object to use
104
+ * @param nameOrDomain the domain on which the receipt was logged
105
+ * @param receipt the receipt
106
+ * @returns an array of {@link HyperlaneMessage} objects
107
+ * @throws if there is not EXACTLY 1 dispatch in the receipt
108
+ */
109
+ static singleFromReceipt(multiProvider, core, nameOrDomain, receipt) {
110
+ const messages = HyperlaneMessage.fromReceipt(multiProvider, core, nameOrDomain, receipt);
111
+ if (messages.length !== 1) {
112
+ throw new Error('Expected single Dispatch in transaction');
113
+ }
114
+ return messages[0];
115
+ }
116
+ /**
117
+ * Instantiate one or more messages from a tx hash.
118
+ *
119
+ * @param core the {@link HyperlaneCore} object to use
120
+ * @param nameOrDomain the domain on which the receipt was logged
121
+ * @param receipt the receipt
122
+ * @returns an array of {@link HyperlaneMessage} objects
123
+ * @throws if there is no receipt for the TX
124
+ */
125
+ static fromTransactionHash(multiProvider, core, nameOrDomain, transactionHash) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const provider = multiProvider.getChainConnection((0, exports.resolveDomain)(nameOrDomain)).provider;
128
+ const receipt = yield provider.getTransactionReceipt(transactionHash);
129
+ if (!receipt) {
130
+ throw new Error(`No receipt for ${transactionHash} on ${nameOrDomain}`);
131
+ }
132
+ return HyperlaneMessage.fromReceipt(multiProvider, core, nameOrDomain, receipt);
133
+ });
134
+ }
135
+ /**
136
+ * Instantiate EXACTLY one message from a transaction has.
137
+ *
138
+ * @param core the {@link HyperlaneCore} object to use
139
+ * @param nameOrDomain the domain on which the receipt was logged
140
+ * @param receipt the receipt
141
+ * @returns an array of {@link HyperlaneMessage} objects
142
+ * @throws if there is no receipt for the TX, or if not EXACTLY 1 dispatch in
143
+ * the receipt
144
+ */
145
+ static singleFromTransactionHash(multiProvider, core, nameOrDomain, transactionHash) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const provider = multiProvider.getChainConnection((0, exports.resolveDomain)(nameOrDomain)).provider;
148
+ const receipt = yield provider.getTransactionReceipt(transactionHash);
149
+ if (!receipt) {
150
+ throw new Error(`No receipt for ${transactionHash} on ${nameOrDomain}`);
151
+ }
152
+ return HyperlaneMessage.singleFromReceipt(multiProvider, core, nameOrDomain, receipt);
153
+ });
154
+ }
155
+ /**
156
+ * Get the Inbox `Process` event associated with this message (if any)
157
+ *
158
+ * @returns An {@link AnnotatedProcess} (if any)
159
+ */
160
+ getProcess() {
161
+ return __awaiter(this, void 0, void 0, function* () {
162
+ // if we have already gotten the event,
163
+ // return it without re-querying
164
+ if (this.cache.process) {
165
+ return this.cache.process;
166
+ }
167
+ // if not, attempt to query the event
168
+ const processFilter = this.inbox.filters.Process(this.leaf);
169
+ const processLogs = yield (0, events_1.findAnnotatedSingleEvent)(this.multiProvider, this.destinationName, this.inbox, processFilter);
170
+ if (processLogs.length === 1) {
171
+ // if event is returned, store it to the object
172
+ this.cache.process = processLogs[0];
173
+ }
174
+ else if (processLogs.length > 1) {
175
+ throw new Error('multiple inbox process for same message');
176
+ }
177
+ // return the process or undefined if it doesn't exist
178
+ return this.cache.process;
179
+ });
180
+ }
181
+ /**
182
+ * Get all lifecycle events associated with this message
183
+ *
184
+ * @returns An array of {@link AnnotatedLifecycleEvent} objects
185
+ */
186
+ events() {
187
+ return __awaiter(this, void 0, void 0, function* () {
188
+ const events = [this.dispatch];
189
+ // attempt to get Inbox process
190
+ const process = yield this.getProcess();
191
+ if (!process) {
192
+ // NOTE: when this is the status, you may way to
193
+ // query confirmAt() to check if challenge period
194
+ // on the Inbox has elapsed or not
195
+ return {
196
+ status: MessageStatus.Relayed,
197
+ events,
198
+ };
199
+ }
200
+ events.push(process);
201
+ return {
202
+ status: MessageStatus.Processed,
203
+ events,
204
+ };
205
+ });
206
+ }
207
+ /**
208
+ * Retrieve the inbox status of this message.
209
+ *
210
+ * @returns The {@link InboxMessageStatus} corresponding to the solidity
211
+ * status of the message.
212
+ */
213
+ inboxStatus() {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ return this.inbox.messages(this.leaf);
216
+ });
217
+ }
218
+ /**
219
+ * Checks whether the message has been delivered.
220
+ *
221
+ * @returns true if processed, else false.
222
+ */
223
+ delivered() {
224
+ return __awaiter(this, void 0, void 0, function* () {
225
+ const status = yield this.inboxStatus();
226
+ return status === InboxMessageStatus.Processed;
227
+ });
228
+ }
229
+ /**
230
+ * Returns a promise that resolves when the message has been delivered.
231
+ *
232
+ * WARNING: May never resolve. Oftern takes hours to resolve.
233
+ *
234
+ * @param opts Polling options.
235
+ */
236
+ wait(opts) {
237
+ var _a;
238
+ return __awaiter(this, void 0, void 0, function* () {
239
+ const interval = (_a = opts === null || opts === void 0 ? void 0 : opts.pollTime) !== null && _a !== void 0 ? _a : 5000;
240
+ // sad spider face
241
+ for (;;) {
242
+ if (yield this.delivered()) {
243
+ return;
244
+ }
245
+ yield (0, time_1.delay)(interval);
246
+ }
247
+ });
248
+ }
249
+ /**
250
+ * The domain from which the message was sent.
251
+ */
252
+ get origin() {
253
+ return this.message.origin;
254
+ }
255
+ get originName() {
256
+ return (0, exports.resolveDomain)(this.origin);
257
+ }
258
+ /**
259
+ * The identifier for the sender of this message
260
+ */
261
+ get sender() {
262
+ return this.message.sender;
263
+ }
264
+ /**
265
+ * The destination domain for this message
266
+ */
267
+ get destination() {
268
+ return this.message.destination;
269
+ }
270
+ get destinationName() {
271
+ return (0, exports.resolveDomain)(this.destination);
272
+ }
273
+ /**
274
+ * The identifer for the recipient for this message
275
+ */
276
+ get recipient() {
277
+ return this.message.recipient;
278
+ }
279
+ /**
280
+ * The message body
281
+ */
282
+ get body() {
283
+ return this.message.body;
284
+ }
285
+ /**
286
+ * The keccak256 hash of the message body
287
+ */
288
+ get bodyHash() {
289
+ return ethers_1.utils.keccak256(this.body);
290
+ }
291
+ /**
292
+ * The hash of the transaction that dispatched this message
293
+ */
294
+ get transactionHash() {
295
+ return this.dispatch.event.transactionHash;
296
+ }
297
+ /**
298
+ * The messageHash committed to the tree in the Outbox contract.
299
+ */
300
+ get leaf() {
301
+ return utils_1.utils.messageHash(this.dispatch.event.args.message, this.dispatch.event.args.leafIndex.toNumber());
302
+ }
303
+ /**
304
+ * The index of the leaf in the contract.
305
+ */
306
+ get leafIndex() {
307
+ return this.dispatch.event.args.leafIndex;
308
+ }
309
+ }
310
+ exports.HyperlaneMessage = HyperlaneMessage;
311
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/core/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import '@nomiclabs/hardhat-ethers';
2
+ import '@nomiclabs/hardhat-waffle';
3
+ //# sourceMappingURL=testHyperlaneDeploy.hardhat-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testHyperlaneDeploy.hardhat-test.d.ts","sourceRoot":"","sources":["../../src/core/testHyperlaneDeploy.hardhat-test.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC"}
@@ -0,0 +1,66 @@
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
+ require("@nomiclabs/hardhat-ethers");
13
+ require("@nomiclabs/hardhat-waffle");
14
+ const chai_1 = require("chai");
15
+ const hardhat_1 = require("hardhat");
16
+ const core_1 = require("@hyperlane-xyz/core");
17
+ const utils_1 = require("@hyperlane-xyz/utils");
18
+ const chainMetadata_1 = require("../consts/chainMetadata");
19
+ const utils_2 = require("../deploy/utils");
20
+ const TestCoreDeployer_1 = require("./TestCoreDeployer");
21
+ const localChain = 'test1';
22
+ const localDomain = chainMetadata_1.chainMetadata[localChain].id;
23
+ const remoteChain = 'test2';
24
+ const remoteDomain = chainMetadata_1.chainMetadata[remoteChain].id;
25
+ const message = '0xdeadbeef';
26
+ describe('TestCoreDeployer', () => __awaiter(void 0, void 0, void 0, function* () {
27
+ let testCoreApp, localOutbox, remoteOutbox, dispatchReceipt;
28
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
29
+ const [signer] = yield hardhat_1.ethers.getSigners();
30
+ const multiProvider = (0, utils_2.getTestMultiProvider)(signer);
31
+ const deployer = new TestCoreDeployer_1.TestCoreDeployer(multiProvider);
32
+ testCoreApp = yield deployer.deployApp();
33
+ const recipient = yield new core_1.TestRecipient__factory(signer).deploy();
34
+ localOutbox = testCoreApp.getContracts(localChain).outbox.contract;
35
+ const dispatchResponse = localOutbox.dispatch(remoteDomain, utils_1.utils.addressToBytes32(recipient.address), message);
36
+ yield (0, chai_1.expect)(dispatchResponse).to.emit(localOutbox, 'Dispatch');
37
+ dispatchReceipt = yield testCoreApp.multiProvider
38
+ .getChainConnection(localChain)
39
+ .handleTx(dispatchResponse);
40
+ remoteOutbox = testCoreApp.getContracts(remoteChain).outbox.contract;
41
+ yield (0, chai_1.expect)(remoteOutbox.dispatch(localDomain, utils_1.utils.addressToBytes32(recipient.address), message)).to.emit(remoteOutbox, 'Dispatch');
42
+ }));
43
+ it('processes outbound messages for a single domain', () => __awaiter(void 0, void 0, void 0, function* () {
44
+ const responses = yield testCoreApp.processOutboundMessages(localChain);
45
+ (0, chai_1.expect)(responses.get(remoteChain).length).to.equal(1);
46
+ }));
47
+ it('processes outbound messages for two domains', () => __awaiter(void 0, void 0, void 0, function* () {
48
+ const localResponses = yield testCoreApp.processOutboundMessages(localChain);
49
+ (0, chai_1.expect)(localResponses.get(remoteChain).length).to.equal(1);
50
+ const remoteResponses = yield testCoreApp.processOutboundMessages(remoteChain);
51
+ (0, chai_1.expect)(remoteResponses.get(localChain).length).to.equal(1);
52
+ }));
53
+ it('processes all messages', () => __awaiter(void 0, void 0, void 0, function* () {
54
+ const responses = yield testCoreApp.processMessages();
55
+ (0, chai_1.expect)(responses.get(localChain).get(remoteChain).length).to.equal(1);
56
+ (0, chai_1.expect)(responses.get(remoteChain).get(localChain).length).to.equal(1);
57
+ }));
58
+ it('waits on message processing receipts', () => __awaiter(void 0, void 0, void 0, function* () {
59
+ const [receipts] = yield Promise.all([
60
+ testCoreApp.waitForMessageProcessing(dispatchReceipt),
61
+ testCoreApp.processOutboundMessages(localChain),
62
+ ]);
63
+ (0, chai_1.expect)(receipts).to.have.length(1);
64
+ }));
65
+ }));
66
+ //# sourceMappingURL=testHyperlaneDeploy.hardhat-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testHyperlaneDeploy.hardhat-test.js","sourceRoot":"","sources":["../../src/core/testHyperlaneDeploy.hardhat-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Ownable } from '@hyperlane-xyz/core';
2
+ import type { types } from '@hyperlane-xyz/utils';
3
+ import { HyperlaneApp } from '../HyperlaneApp';
4
+ import { MultiProvider } from '../providers/MultiProvider';
5
+ import { BeaconProxyAddresses } from '../proxy';
6
+ import { ChainMap, ChainName } from '../types';
7
+ import { CheckerViolation } from './types';
8
+ export declare abstract class HyperlaneAppChecker<Chain extends ChainName, App extends HyperlaneApp<any, Chain>, Config> {
9
+ readonly multiProvider: MultiProvider<Chain>;
10
+ readonly app: App;
11
+ readonly configMap: ChainMap<Chain, Config>;
12
+ readonly violations: CheckerViolation[];
13
+ constructor(multiProvider: MultiProvider<Chain>, app: App, configMap: ChainMap<Chain, Config>);
14
+ abstract checkChain(chain: Chain): Promise<void>;
15
+ check(): Promise<void[]>;
16
+ addViolation(violation: CheckerViolation): void;
17
+ checkUpgradeBeacon(chain: Chain, name: string, proxiedAddress: BeaconProxyAddresses): Promise<void>;
18
+ checkOwnership(chain: Chain, owner: types.Address, ownables: Ownable[]): Promise<void>;
19
+ expectViolations(types: string[], expectedMatches: number[]): void;
20
+ expectEmpty(): void;
21
+ }
22
+ //# sourceMappingURL=HyperlaneAppChecker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperlaneAppChecker.d.ts","sourceRoot":"","sources":["../../src/deploy/HyperlaneAppChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EAAE,gBAAgB,EAAiC,MAAM,SAAS,CAAC;AAE1E,8BAAsB,mBAAmB,CACvC,KAAK,SAAS,SAAS,EACvB,GAAG,SAAS,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EACpC,MAAM;IAEN,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;gBAGtC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,EACnC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAQpC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1C,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAM9B,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAIzC,kBAAkB,CACtB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,IAAI,CAAC;IAaV,cAAc,CAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC,OAAO,EACpB,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;IAkBhB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI;IAwBlE,WAAW,IAAI,IAAI;CAIpB"}
@@ -0,0 +1,76 @@
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.HyperlaneAppChecker = void 0;
13
+ const utils_1 = require("@hyperlane-xyz/utils");
14
+ const proxy_1 = require("./proxy");
15
+ const types_1 = require("./types");
16
+ class HyperlaneAppChecker {
17
+ constructor(multiProvider, app, configMap) {
18
+ this.multiProvider = multiProvider;
19
+ this.app = app;
20
+ this.violations = [];
21
+ this.configMap = configMap;
22
+ }
23
+ check() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ return Promise.all(this.app.chains().map((chain) => this.checkChain(chain)));
26
+ });
27
+ }
28
+ addViolation(violation) {
29
+ this.violations.push(violation);
30
+ }
31
+ checkUpgradeBeacon(chain, name, proxiedAddress) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const dc = this.multiProvider.getChainConnection(chain);
34
+ const implementation = yield (0, proxy_1.upgradeBeaconImplementation)(dc.provider, proxiedAddress.beacon);
35
+ if (implementation !== proxiedAddress.implementation) {
36
+ this.addViolation((0, proxy_1.upgradeBeaconViolation)(chain, name, proxiedAddress, implementation));
37
+ }
38
+ });
39
+ }
40
+ checkOwnership(chain, owner, ownables) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ yield Promise.all(ownables.map((contract) => __awaiter(this, void 0, void 0, function* () {
43
+ const actual = yield contract.owner();
44
+ if (actual.toLowerCase() != owner.toLowerCase()) {
45
+ const violation = {
46
+ chain,
47
+ type: types_1.ViolationType.Owner,
48
+ actual,
49
+ expected: owner,
50
+ contract,
51
+ };
52
+ this.addViolation(violation);
53
+ }
54
+ })));
55
+ });
56
+ }
57
+ expectViolations(types, expectedMatches) {
58
+ // Every type should have exactly the number of expected matches.
59
+ const actualMatches = types.map((t) => this.violations.map((v) => v.type === t).filter(Boolean).length);
60
+ actualMatches.map((actual, index) => {
61
+ const expected = expectedMatches[index];
62
+ utils_1.utils.assert(actual == expected, `Expected ${expected} ${types[index]} violations, got ${actual}`);
63
+ });
64
+ // Every violation should be matched by at least one partial.
65
+ const unmatched = this.violations.map((v) => types.map((t) => v.type === t).filter(Boolean).length);
66
+ unmatched.map((count, index) => {
67
+ utils_1.utils.assert(count > 0, `Expected 0 ${this.violations[index].type} violations, got ${count}`);
68
+ });
69
+ }
70
+ expectEmpty() {
71
+ const count = this.violations.length;
72
+ utils_1.utils.assert(count === 0, `Found ${count} violations`);
73
+ }
74
+ }
75
+ exports.HyperlaneAppChecker = HyperlaneAppChecker;
76
+ //# sourceMappingURL=HyperlaneAppChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperlaneAppChecker.js","sourceRoot":"","sources":["../../src/deploy/HyperlaneAppChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Debugger } from 'debug';
2
+ import { ethers } from 'ethers';
3
+ import { Ownable } from '@hyperlane-xyz/core';
4
+ import type { types } from '@hyperlane-xyz/utils';
5
+ import { HyperlaneContracts, HyperlaneFactories } from '../contracts';
6
+ import { MultiProvider } from '../providers/MultiProvider';
7
+ import { BeaconProxyAddresses, ProxiedContract } from '../proxy';
8
+ import { ChainMap, ChainName } from '../types';
9
+ import { ContractVerificationInput } from './verify/types';
10
+ export interface DeployerOptions {
11
+ logger?: Debugger;
12
+ }
13
+ export declare abstract class HyperlaneDeployer<Chain extends ChainName, Config, Contracts extends HyperlaneContracts, Factories extends HyperlaneFactories> {
14
+ protected readonly multiProvider: MultiProvider<Chain>;
15
+ protected readonly configMap: ChainMap<Chain, Config>;
16
+ protected readonly factories: Factories;
17
+ protected readonly options?: DeployerOptions | undefined;
18
+ deployedContracts: Partial<Record<Chain, Partial<Contracts>>>;
19
+ verificationInputs: ChainMap<Chain, ContractVerificationInput[]>;
20
+ protected logger: Debugger;
21
+ constructor(multiProvider: MultiProvider<Chain>, configMap: ChainMap<Chain, Config>, factories: Factories, options?: DeployerOptions | undefined);
22
+ abstract deployContracts(chain: Chain, config: Config): Promise<Contracts>;
23
+ deploy(partialDeployment?: Partial<Record<Chain, Partial<Contracts>>>): Promise<Record<Chain, Contracts>>;
24
+ protected runIfOwner(chain: Chain, ownable: Ownable, fn: () => Promise<any>): Promise<void>;
25
+ protected deployContractFromFactory<F extends ethers.ContractFactory>(chain: Chain, factory: F, contractName: string, args: Parameters<F['deploy']>): Promise<ReturnType<F['deploy']>>;
26
+ deployContract<K extends keyof Factories>(chain: Chain, contractName: K, args: Parameters<Factories[K]['deploy']>): Promise<ReturnType<Factories[K]['deploy']>>;
27
+ protected deployProxy<C extends ethers.Contract>(chain: Chain, implementation: C, beaconAddress: string, initArgs: Parameters<C['initialize']>): Promise<ProxiedContract<C, BeaconProxyAddresses>>;
28
+ /**
29
+ * Deploys the UpgradeBeacon, Implementation and Proxy for a given contract
30
+ *
31
+ */
32
+ deployProxiedContract<K extends keyof Factories, C extends Awaited<ReturnType<Factories[K]['deploy']>>>(chain: Chain, contractName: K, deployArgs: Parameters<Factories[K]['deploy']>, ubcAddress: types.Address, initArgs: Parameters<C['initialize']>): Promise<ProxiedContract<C, BeaconProxyAddresses>>;
33
+ /**
34
+ * Sets up a new proxy with the same beacon and implementation
35
+ *
36
+ */
37
+ duplicateProxiedContract<C extends ethers.Contract>(chain: Chain, proxy: ProxiedContract<C, BeaconProxyAddresses>, initArgs: Parameters<C['initialize']>): Promise<ProxiedContract<C, BeaconProxyAddresses>>;
38
+ mergeWithExistingVerificationInputs(existingInputsMap: ChainMap<Chain, ContractVerificationInput[]>): ChainMap<Chain, ContractVerificationInput[]>;
39
+ }
40
+ //# sourceMappingURL=HyperlaneDeployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperlaneDeployer.d.ts","sourceRoot":"","sources":["../../src/deploy/HyperlaneDeployer.ts"],"names":[],"mappings":"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"}