@hyperlane-xyz/helloworld 1.4.3-beta1 → 1.5.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/src/app/app.d.ts +3 -7
- package/dist/src/app/app.d.ts.map +1 -1
- package/dist/src/app/app.js +35 -53
- package/dist/src/app/app.js.map +1 -1
- package/dist/src/app/contracts.d.ts +1 -1
- package/dist/src/app/contracts.d.ts.map +1 -1
- package/dist/src/app/types.d.ts +5 -0
- package/dist/src/app/types.d.ts.map +1 -0
- package/dist/src/app/types.js +3 -0
- package/dist/src/app/types.js.map +1 -0
- package/dist/src/deploy/config.d.ts +2 -56
- package/dist/src/deploy/config.d.ts.map +1 -1
- package/dist/src/deploy/deploy.js +8 -19
- package/dist/src/deploy/deploy.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/multiProtocolApp/evmAdapter.d.ts +13 -0
- package/dist/src/multiProtocolApp/evmAdapter.d.ts.map +1 -0
- package/dist/src/multiProtocolApp/evmAdapter.js +35 -0
- package/dist/src/multiProtocolApp/evmAdapter.js.map +1 -0
- package/dist/src/multiProtocolApp/multiProtocolApp.d.ts +15 -0
- package/dist/src/multiProtocolApp/multiProtocolApp.d.ts.map +1 -0
- package/dist/src/multiProtocolApp/multiProtocolApp.js +34 -0
- package/dist/src/multiProtocolApp/multiProtocolApp.js.map +1 -0
- package/dist/src/multiProtocolApp/sealevelAdapter.d.ts +55 -0
- package/dist/src/multiProtocolApp/sealevelAdapter.d.ts.map +1 -0
- package/dist/src/multiProtocolApp/sealevelAdapter.js +202 -0
- package/dist/src/multiProtocolApp/sealevelAdapter.js.map +1 -0
- package/dist/src/multiProtocolApp/types.d.ts +10 -0
- package/dist/src/multiProtocolApp/types.d.ts.map +1 -0
- package/dist/src/multiProtocolApp/types.js +3 -0
- package/dist/src/multiProtocolApp/types.js.map +1 -0
- package/dist/src/scripts/check.js +12 -23
- package/dist/src/scripts/check.js.map +1 -1
- package/dist/src/scripts/deploy.js +14 -25
- package/dist/src/scripts/deploy.js.map +1 -1
- package/dist/src/test/deploy.test.js +16 -25
- package/dist/src/test/deploy.test.js.map +1 -1
- package/dist/src/test/helloworld.test.js +35 -46
- package/dist/src/test/helloworld.test.js.map +1 -1
- package/dist/src/types/@hyperlane-xyz/core/contracts/HyperlaneConnectionClient.d.ts +10 -10
- package/dist/src/types/@hyperlane-xyz/core/contracts/HyperlaneConnectionClient.d.ts.map +1 -1
- package/dist/src/types/@hyperlane-xyz/core/contracts/Router.d.ts +12 -12
- package/dist/src/types/@hyperlane-xyz/core/contracts/Router.d.ts.map +1 -1
- package/dist/src/types/@hyperlane-xyz/core/contracts/interfaces/IInterchainGasPaymaster.d.ts +2 -2
- package/dist/src/types/@hyperlane-xyz/core/contracts/interfaces/IInterchainGasPaymaster.d.ts.map +1 -1
- package/dist/src/types/@hyperlane-xyz/core/contracts/interfaces/IMailbox.d.ts +8 -8
- package/dist/src/types/@hyperlane-xyz/core/contracts/interfaces/IMailbox.d.ts.map +1 -1
- package/dist/src/types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts +4 -4
- package/dist/src/types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts.map +1 -1
- package/dist/src/types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts +2 -2
- package/dist/src/types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts.map +1 -1
- package/dist/src/types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts +2 -2
- package/dist/src/types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts.map +1 -1
- package/dist/src/types/common.d.ts +4 -4
- package/dist/src/types/common.d.ts.map +1 -1
- package/dist/src/types/contracts/HelloWorld.d.ts +18 -18
- package/dist/src/types/contracts/HelloWorld.d.ts.map +1 -1
- package/dist/src/types/factories/contracts/HelloWorld__factory.d.ts +2 -2
- package/dist/src/types/factories/contracts/HelloWorld__factory.d.ts.map +1 -1
- package/dist/src/types/factories/contracts/HelloWorld__factory.js +1 -1
- package/dist/src/types/factories/contracts/HelloWorld__factory.js.map +1 -1
- package/package.json +7 -8
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HelloWorldDataSchema = exports.HelloWorldData = exports.SendHelloWorldSchema = exports.SendHelloWorldInstruction = exports.HelloWorldInstruction = exports.SealevelHelloWorldAdapter = void 0;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const borsh_1 = require("borsh");
|
|
6
|
+
const sdk_1 = require("@hyperlane-xyz/sdk");
|
|
7
|
+
class SealevelHelloWorldAdapter extends sdk_1.SealevelRouterAdapter {
|
|
8
|
+
async populateSendHelloTx(origin, destination, message, value, sender) {
|
|
9
|
+
this.logger('Creating sendHelloWorld tx for sealevel', origin, destination, message, value);
|
|
10
|
+
const { mailbox, router: programId } = this.multiProvider.getChainMetadata(origin);
|
|
11
|
+
const mailboxPubKey = new web3_js_1.PublicKey(mailbox);
|
|
12
|
+
const senderPubKey = new web3_js_1.PublicKey(sender);
|
|
13
|
+
const programPubKey = new web3_js_1.PublicKey(programId);
|
|
14
|
+
const randomWallet = web3_js_1.Keypair.generate();
|
|
15
|
+
const keys = this.getSendHelloKeyList(programPubKey, mailboxPubKey, senderPubKey, randomWallet.publicKey);
|
|
16
|
+
const instructionData = new sdk_1.SealevelInstructionWrapper({
|
|
17
|
+
instruction: HelloWorldInstruction.SendHelloWorld,
|
|
18
|
+
data: new SendHelloWorldInstruction({
|
|
19
|
+
destination: this.multiProvider.getDomainId(destination),
|
|
20
|
+
message,
|
|
21
|
+
}),
|
|
22
|
+
});
|
|
23
|
+
const serializedData = (0, borsh_1.serialize)(exports.SendHelloWorldSchema, instructionData);
|
|
24
|
+
const txInstruction = new web3_js_1.TransactionInstruction({
|
|
25
|
+
keys,
|
|
26
|
+
programId: programPubKey,
|
|
27
|
+
data: Buffer.from(serializedData),
|
|
28
|
+
});
|
|
29
|
+
const connection = this.multiProvider.getSolanaWeb3Provider(origin);
|
|
30
|
+
const recentBlockhash = (await connection.getLatestBlockhash('finalized'))
|
|
31
|
+
.blockhash;
|
|
32
|
+
// @ts-ignore Workaround for bug in the web3 lib, sometimes uses recentBlockhash and sometimes uses blockhash
|
|
33
|
+
const transaction = new web3_js_1.Transaction({
|
|
34
|
+
feePayer: senderPubKey,
|
|
35
|
+
blockhash: recentBlockhash,
|
|
36
|
+
recentBlockhash,
|
|
37
|
+
}).add(txInstruction);
|
|
38
|
+
transaction.partialSign(randomWallet);
|
|
39
|
+
return { type: sdk_1.ProviderType.SolanaWeb3, transaction };
|
|
40
|
+
}
|
|
41
|
+
// Should match https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/dd7ff727b0d3d393a159afa5f0a364775bde3a58/rust/sealevel/programs/helloworld/src/processor.rs#L157
|
|
42
|
+
getSendHelloKeyList(programId, mailbox, sender, randomWallet) {
|
|
43
|
+
return [
|
|
44
|
+
// 0. [writable] Program storage.
|
|
45
|
+
{
|
|
46
|
+
pubkey: this.deriveProgramStoragePDA(programId),
|
|
47
|
+
isSigner: false,
|
|
48
|
+
isWritable: true,
|
|
49
|
+
},
|
|
50
|
+
// 1. [executable] The mailbox.
|
|
51
|
+
{ pubkey: mailbox, isSigner: false, isWritable: false },
|
|
52
|
+
// 2. [writeable] Outbox PDA
|
|
53
|
+
{
|
|
54
|
+
pubkey: sdk_1.SealevelCoreAdapter.deriveMailboxOutboxPda(mailbox),
|
|
55
|
+
isSigner: false,
|
|
56
|
+
isWritable: true,
|
|
57
|
+
},
|
|
58
|
+
// 3. [] Program's dispatch authority
|
|
59
|
+
{
|
|
60
|
+
pubkey: sdk_1.SealevelCoreAdapter.deriveMailboxDispatchAuthorityPda(programId),
|
|
61
|
+
isSigner: false,
|
|
62
|
+
isWritable: false,
|
|
63
|
+
},
|
|
64
|
+
// 4. [executable] The system program.
|
|
65
|
+
{ pubkey: web3_js_1.SystemProgram.programId, isSigner: false, isWritable: false },
|
|
66
|
+
// 5. [executable] The spl_noop program.
|
|
67
|
+
{
|
|
68
|
+
pubkey: new web3_js_1.PublicKey(sdk_1.SEALEVEL_SPL_NOOP_ADDRESS),
|
|
69
|
+
isSigner: false,
|
|
70
|
+
isWritable: false,
|
|
71
|
+
},
|
|
72
|
+
// 6. [signer] Tx payer.
|
|
73
|
+
{ pubkey: sender, isSigner: true, isWritable: true },
|
|
74
|
+
// 7. [signer] Unique message account.
|
|
75
|
+
{ pubkey: randomWallet, isSigner: true, isWritable: false },
|
|
76
|
+
// 8. [writeable] Dispatched message PDA
|
|
77
|
+
{
|
|
78
|
+
pubkey: sdk_1.SealevelCoreAdapter.deriveMailboxDispatchedMessagePda(mailbox, randomWallet),
|
|
79
|
+
isSigner: false,
|
|
80
|
+
isWritable: true,
|
|
81
|
+
},
|
|
82
|
+
/// ---- if an IGP is configured ----
|
|
83
|
+
/// 9. [executable] The IGP program.
|
|
84
|
+
/// 10. [writeable] The IGP program data.
|
|
85
|
+
/// 11. [writeable] The gas payment PDA.
|
|
86
|
+
/// 12. [] OPTIONAL - The Overhead IGP program, if the configured IGP is an Overhead IGP.
|
|
87
|
+
/// 13. [writeable] The IGP account.
|
|
88
|
+
/// ---- end if an IGP is configured ----
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
// Should match https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/dd7ff727b0d3d393a159afa5f0a364775bde3a58/rust/sealevel/programs/helloworld/src/processor.rs#L44
|
|
92
|
+
deriveProgramStoragePDA(programId) {
|
|
93
|
+
return sdk_1.BaseSealevelAdapter.derivePda(['hello_world', '-', 'handle', '-', 'storage'], programId);
|
|
94
|
+
}
|
|
95
|
+
async channelStats(origin, _destination) {
|
|
96
|
+
const data = await this.getAccountInfo(origin);
|
|
97
|
+
return { sent: data.sent, received: data.received };
|
|
98
|
+
}
|
|
99
|
+
async getAccountInfo(chain) {
|
|
100
|
+
const address = this.multiProvider.getChainMetadata(chain).router;
|
|
101
|
+
const connection = this.multiProvider.getSolanaWeb3Provider(chain);
|
|
102
|
+
const msgRecipientPda = this.deriveMessageRecipientPda(address);
|
|
103
|
+
const accountInfo = await connection.getAccountInfo(msgRecipientPda);
|
|
104
|
+
if (!accountInfo)
|
|
105
|
+
throw new Error(`No account info found for ${msgRecipientPda.toBase58()}}`);
|
|
106
|
+
const accountData = (0, borsh_1.deserializeUnchecked)(exports.HelloWorldDataSchema, sdk_1.SealevelAccountDataWrapper, accountInfo.data);
|
|
107
|
+
return accountData.data;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.SealevelHelloWorldAdapter = SealevelHelloWorldAdapter;
|
|
111
|
+
/**
|
|
112
|
+
* Borsh Schema
|
|
113
|
+
*/
|
|
114
|
+
// Should match https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/dd7ff727b0d3d393a159afa5f0a364775bde3a58/rust/sealevel/programs/helloworld/src/instruction.rs#L40
|
|
115
|
+
var HelloWorldInstruction;
|
|
116
|
+
(function (HelloWorldInstruction) {
|
|
117
|
+
HelloWorldInstruction[HelloWorldInstruction["Init"] = 0] = "Init";
|
|
118
|
+
HelloWorldInstruction[HelloWorldInstruction["SendHelloWorld"] = 1] = "SendHelloWorld";
|
|
119
|
+
HelloWorldInstruction[HelloWorldInstruction["SetInterchainSecurityModule"] = 2] = "SetInterchainSecurityModule";
|
|
120
|
+
HelloWorldInstruction[HelloWorldInstruction["EnrollRemoteRouters"] = 3] = "EnrollRemoteRouters";
|
|
121
|
+
})(HelloWorldInstruction || (exports.HelloWorldInstruction = HelloWorldInstruction = {}));
|
|
122
|
+
class SendHelloWorldInstruction {
|
|
123
|
+
constructor(fields) {
|
|
124
|
+
this.fields = fields;
|
|
125
|
+
Object.assign(this, fields);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.SendHelloWorldInstruction = SendHelloWorldInstruction;
|
|
129
|
+
exports.SendHelloWorldSchema = new Map([
|
|
130
|
+
[
|
|
131
|
+
sdk_1.SealevelInstructionWrapper,
|
|
132
|
+
{
|
|
133
|
+
kind: 'struct',
|
|
134
|
+
fields: [
|
|
135
|
+
['instruction', 'u8'],
|
|
136
|
+
['data', SendHelloWorldInstruction],
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
[
|
|
141
|
+
SendHelloWorldInstruction,
|
|
142
|
+
{
|
|
143
|
+
kind: 'struct',
|
|
144
|
+
fields: [
|
|
145
|
+
['destination', 'u32'],
|
|
146
|
+
['message', 'string'],
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
]);
|
|
151
|
+
// Should match https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/dd7ff727b0d3d393a159afa5f0a364775bde3a58/rust/sealevel/programs/helloworld/src/accounts.rs#L20
|
|
152
|
+
class HelloWorldData {
|
|
153
|
+
constructor(fields) {
|
|
154
|
+
this.fields = fields;
|
|
155
|
+
Object.assign(this, fields);
|
|
156
|
+
this.mailbox_pubkey = new web3_js_1.PublicKey(this.mailbox);
|
|
157
|
+
this.ism_pubkey = this.ism ? new web3_js_1.PublicKey(this.ism) : undefined;
|
|
158
|
+
this.igp_pubkey = this.igp?.program_id
|
|
159
|
+
? new web3_js_1.PublicKey(this.igp.program_id)
|
|
160
|
+
: undefined;
|
|
161
|
+
this.igp_account_pubkey = this.igp?.igp_account
|
|
162
|
+
? new web3_js_1.PublicKey(this.igp.igp_account)
|
|
163
|
+
: undefined;
|
|
164
|
+
this.owner_pubkey = this.owner ? new web3_js_1.PublicKey(this.owner) : undefined;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.HelloWorldData = HelloWorldData;
|
|
168
|
+
exports.HelloWorldDataSchema = new Map([
|
|
169
|
+
[sdk_1.SealevelAccountDataWrapper, (0, sdk_1.getSealevelAccountDataSchema)(HelloWorldData)],
|
|
170
|
+
[
|
|
171
|
+
HelloWorldData,
|
|
172
|
+
{
|
|
173
|
+
kind: 'struct',
|
|
174
|
+
fields: [
|
|
175
|
+
['domain', 'u32'],
|
|
176
|
+
['mailbox', [32]],
|
|
177
|
+
['ism', { kind: 'option', type: [32] }],
|
|
178
|
+
[
|
|
179
|
+
'igp',
|
|
180
|
+
{
|
|
181
|
+
kind: 'option',
|
|
182
|
+
type: {
|
|
183
|
+
kind: 'struct',
|
|
184
|
+
fields: [
|
|
185
|
+
['program_id', [32]],
|
|
186
|
+
['type', 'u8'],
|
|
187
|
+
['igp_account', [32]],
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
['owner', { kind: 'option', type: [32] }],
|
|
193
|
+
['sent', 'u64'],
|
|
194
|
+
['received', 'u64'],
|
|
195
|
+
['sent_to', { kind: 'map', key: 'u32', value: 'u64' }],
|
|
196
|
+
['received_from', { kind: 'map', key: 'u32', value: 'u64' }],
|
|
197
|
+
['routers', { kind: 'map', key: 'u32', value: [32] }],
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
]);
|
|
202
|
+
//# sourceMappingURL=sealevelAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sealevelAdapter.js","sourceRoot":"","sources":["../../../src/multiProtocolApp/sealevelAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChainName, IRouterAdapter, RouterAddress, TypedTransaction } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { StatCounts } from '../app/types';
|
|
4
|
+
export interface IHelloWorldAdapter extends IRouterAdapter<RouterAddress & {
|
|
5
|
+
mailbox: Address;
|
|
6
|
+
}> {
|
|
7
|
+
populateSendHelloTx: (origin: ChainName, destination: ChainName, message: string, value: string, sender: Address) => Promise<TypedTransaction>;
|
|
8
|
+
channelStats: (origin: ChainName, destination: ChainName) => Promise<StatCounts>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/multiProtocolApp/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,cAAc,EACd,aAAa,EACb,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,WAAW,kBACf,SAAQ,cAAc,CAAC,aAAa,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;IAC5D,mBAAmB,EAAE,CACnB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,KACZ,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/B,YAAY,EAAE,CACZ,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,KACnB,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/multiProtocolApp/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const sdk_1 = require("@hyperlane-xyz/sdk");
|
|
13
4
|
const app_1 = require("../app/app");
|
|
@@ -18,20 +9,18 @@ const config_1 = require("../deploy/config");
|
|
|
18
9
|
const deploymentAddresses = {};
|
|
19
10
|
// SET CONTRACT OWNER ADDRESS HERE
|
|
20
11
|
const ownerAddress = '0x123...';
|
|
21
|
-
function check() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
helloWorldChecker.expectEmpty();
|
|
34
|
-
});
|
|
12
|
+
async function check() {
|
|
13
|
+
console.info('Preparing utilities');
|
|
14
|
+
const multiProvider = new sdk_1.MultiProvider(config_1.prodConfigs);
|
|
15
|
+
const contractsMap = (0, sdk_1.attachContractsMap)(deploymentAddresses, contracts_1.helloWorldFactories);
|
|
16
|
+
const core = sdk_1.HyperlaneCore.fromEnvironment('testnet', multiProvider);
|
|
17
|
+
const igp = sdk_1.HyperlaneIgp.fromEnvironment('testnet', multiProvider);
|
|
18
|
+
const app = new app_1.HelloWorldApp(core, contractsMap, multiProvider);
|
|
19
|
+
const config = (0, sdk_1.createRouterConfigMap)(ownerAddress, core.contractsMap, igp.contractsMap);
|
|
20
|
+
console.info('Starting check');
|
|
21
|
+
const helloWorldChecker = new check_1.HelloWorldChecker(multiProvider, app, config);
|
|
22
|
+
await helloWorldChecker.check();
|
|
23
|
+
helloWorldChecker.expectEmpty();
|
|
35
24
|
}
|
|
36
25
|
check()
|
|
37
26
|
.then(() => console.info('Check complete'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/scripts/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/scripts/check.ts"],"names":[],"mappings":";;AAAA,4CAM4B;AAE5B,oCAA2C;AAC3C,gDAAuD;AACvD,2CAAoD;AACpD,6CAA+C;AAE/C,iEAAiE;AACjE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,kCAAkC;AAClC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,KAAK,UAAU,KAAK;IAClB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,mBAAa,CAAC,oBAAW,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,IAAA,wBAAkB,EACrC,mBAAmB,EACnB,+BAAmB,CACpB,CAAC;IAEF,MAAM,IAAI,GAAG,mBAAa,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,kBAAY,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAA,2BAAqB,EAClC,YAAY,EACZ,IAAI,CAAC,YAAY,EACjB,GAAG,CAAC,YAAY,CACjB,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/B,MAAM,iBAAiB,GAAG,IAAI,yBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5E,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAChC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,EAAE;KACJ,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC1C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,34 +1,23 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const ethers_1 = require("ethers");
|
|
13
4
|
const sdk_1 = require("@hyperlane-xyz/sdk");
|
|
14
5
|
const config_1 = require("../deploy/config");
|
|
15
6
|
const deploy_1 = require("../deploy/deploy");
|
|
16
|
-
function main() {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.info(JSON.stringify(addresses));
|
|
31
|
-
});
|
|
7
|
+
async function main() {
|
|
8
|
+
console.info('Getting signer');
|
|
9
|
+
const signer = new ethers_1.Wallet('SET KEY HERE OR CREATE YOUR OWN SIGNER');
|
|
10
|
+
console.info('Preparing utilities');
|
|
11
|
+
const multiProvider = new sdk_1.MultiProvider(config_1.prodConfigs);
|
|
12
|
+
multiProvider.setSharedSigner(signer);
|
|
13
|
+
const core = sdk_1.HyperlaneCore.fromEnvironment('testnet', multiProvider);
|
|
14
|
+
const igp = sdk_1.HyperlaneIgp.fromEnvironment('testnet', multiProvider);
|
|
15
|
+
const config = (0, sdk_1.createRouterConfigMap)(signer.address, core.contractsMap, igp.contractsMap);
|
|
16
|
+
const deployer = new deploy_1.HelloWorldDeployer(multiProvider);
|
|
17
|
+
const chainToContracts = await deployer.deploy(config);
|
|
18
|
+
const addresses = (0, sdk_1.serializeContractsMap)(chainToContracts);
|
|
19
|
+
console.info('===Contract Addresses===');
|
|
20
|
+
console.info(JSON.stringify(addresses));
|
|
32
21
|
}
|
|
33
22
|
main()
|
|
34
23
|
.then(() => console.info('Deploy complete'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/scripts/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/scripts/deploy.ts"],"names":[],"mappings":";;AAAA,mCAAgC;AAEhC,4CAM4B;AAE5B,6CAA+C;AAC/C,6CAAsD;AAEtD,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,wCAAwC,CAAC,CAAC;IAEpE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,mBAAa,CAAC,oBAAW,CAAC,CAAC;IACrD,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,mBAAa,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,kBAAY,CAAC,eAAe,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAA,2BAAqB,EAClC,MAAM,CAAC,OAAO,EACd,IAAI,CAAC,YAAY,EACjB,GAAG,CAAC,YAAY,CACjB,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,2BAAkB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAA,2BAAqB,EAAC,gBAAgB,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC3C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
require("@nomiclabs/hardhat-waffle");
|
|
13
4
|
const hardhat_1 = require("hardhat");
|
|
@@ -15,32 +6,32 @@ const sdk_1 = require("@hyperlane-xyz/sdk");
|
|
|
15
6
|
const app_1 = require("../app/app");
|
|
16
7
|
const check_1 = require("../deploy/check");
|
|
17
8
|
const deploy_1 = require("../deploy/deploy");
|
|
18
|
-
describe('deploy', () =>
|
|
9
|
+
describe('deploy', async () => {
|
|
19
10
|
let multiProvider;
|
|
20
11
|
let core;
|
|
21
12
|
let config;
|
|
22
13
|
let deployer;
|
|
23
14
|
let contracts;
|
|
24
15
|
let app;
|
|
25
|
-
before(() =>
|
|
26
|
-
const [signer] =
|
|
16
|
+
before(async () => {
|
|
17
|
+
const [signer] = await hardhat_1.ethers.getSigners();
|
|
27
18
|
multiProvider = sdk_1.MultiProvider.createTestMultiProvider({ signer });
|
|
28
19
|
const coreDeployer = new sdk_1.TestCoreDeployer(multiProvider);
|
|
29
|
-
core =
|
|
30
|
-
config =
|
|
20
|
+
core = await coreDeployer.deployApp();
|
|
21
|
+
config = await (0, sdk_1.deployTestIgpsAndGetRouterConfig)(multiProvider, signer.address, core.contractsMap);
|
|
31
22
|
deployer = new deploy_1.HelloWorldDeployer(multiProvider);
|
|
32
|
-
})
|
|
33
|
-
it('deploys', () =>
|
|
34
|
-
contracts =
|
|
35
|
-
})
|
|
36
|
-
it('builds app', () =>
|
|
37
|
-
contracts =
|
|
23
|
+
});
|
|
24
|
+
it('deploys', async () => {
|
|
25
|
+
contracts = await deployer.deploy(config);
|
|
26
|
+
});
|
|
27
|
+
it('builds app', async () => {
|
|
28
|
+
contracts = await deployer.deploy(config);
|
|
38
29
|
app = new app_1.HelloWorldApp(core, contracts, multiProvider);
|
|
39
|
-
})
|
|
40
|
-
it('checks', () =>
|
|
30
|
+
});
|
|
31
|
+
it('checks', async () => {
|
|
41
32
|
const checker = new check_1.HelloWorldChecker(multiProvider, app, config);
|
|
42
|
-
|
|
33
|
+
await checker.check();
|
|
43
34
|
checker.expectEmpty();
|
|
44
|
-
})
|
|
45
|
-
})
|
|
35
|
+
});
|
|
36
|
+
});
|
|
46
37
|
//# sourceMappingURL=deploy.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/test/deploy.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../../../src/test/deploy.test.ts"],"names":[],"mappings":";;AAAA,qCAAmC;AACnC,qCAAiC;AAEjC,4CAO4B;AAE5B,oCAA2C;AAE3C,2CAAoD;AAEpD,6CAAsD;AAEtD,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC5B,IAAI,aAA4B,CAAC;IACjC,IAAI,IAAiB,CAAC;IACtB,IAAI,MAAkC,CAAC;IACvC,IAAI,QAA4B,CAAC;IACjC,IAAI,SAAqD,CAAC;IAC1D,IAAI,GAAkB,CAAC;IAEvB,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,gBAAM,CAAC,UAAU,EAAE,CAAC;QAC3C,aAAa,GAAG,mBAAa,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,YAAY,GAAG,IAAI,sBAAgB,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,GAAG,MAAM,IAAA,sCAAgC,EAC7C,aAAa,EACb,MAAM,CAAC,OAAO,EACd,IAAI,CAAC,YAAY,CAClB,CAAC;QACF,QAAQ,GAAG,IAAI,2BAAkB,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACvB,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAC1B,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,GAAG,GAAG,IAAI,mBAAa,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtB,MAAM,OAAO,GAAG,IAAI,yBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,20 +1,11 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const chai_1 = require("chai");
|
|
13
4
|
const hardhat_1 = require("hardhat");
|
|
14
5
|
const sdk_1 = require("@hyperlane-xyz/sdk");
|
|
15
6
|
const deploy_1 = require("../deploy/deploy");
|
|
16
7
|
const types_1 = require("../types");
|
|
17
|
-
describe('HelloWorld', () =>
|
|
8
|
+
describe('HelloWorld', async () => {
|
|
18
9
|
const localChain = sdk_1.Chains.test1;
|
|
19
10
|
const remoteChain = sdk_1.Chains.test2;
|
|
20
11
|
let localDomain;
|
|
@@ -26,60 +17,58 @@ describe('HelloWorld', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
26
17
|
let multiProvider;
|
|
27
18
|
let coreApp;
|
|
28
19
|
let config;
|
|
29
|
-
before(() =>
|
|
30
|
-
[signer] =
|
|
20
|
+
before(async () => {
|
|
21
|
+
[signer] = await hardhat_1.ethers.getSigners();
|
|
31
22
|
multiProvider = sdk_1.MultiProvider.createTestMultiProvider({ signer });
|
|
32
23
|
localDomain = multiProvider.getDomainId(localChain);
|
|
33
24
|
remoteDomain = multiProvider.getDomainId(remoteChain);
|
|
34
25
|
const coreDeployer = new sdk_1.TestCoreDeployer(multiProvider);
|
|
35
|
-
const coreContractsMaps =
|
|
26
|
+
const coreContractsMaps = await coreDeployer.deploy();
|
|
36
27
|
coreApp = new sdk_1.TestCoreApp(coreContractsMaps, multiProvider);
|
|
37
|
-
config =
|
|
38
|
-
})
|
|
39
|
-
beforeEach(() =>
|
|
28
|
+
config = await (0, sdk_1.deployTestIgpsAndGetRouterConfig)(multiProvider, signer.address, coreContractsMaps);
|
|
29
|
+
});
|
|
30
|
+
beforeEach(async () => {
|
|
40
31
|
const helloWorld = new deploy_1.HelloWorldDeployer(multiProvider);
|
|
41
|
-
const contracts =
|
|
32
|
+
const contracts = await helloWorld.deploy(config);
|
|
42
33
|
local = contracts[localChain].router;
|
|
43
34
|
remote = contracts[remoteChain].router;
|
|
44
35
|
localIgp = types_1.IInterchainGasPaymaster__factory.connect(config[localChain].interchainGasPaymaster, multiProvider.getProvider(localChain));
|
|
45
36
|
// The all counts start empty
|
|
46
|
-
(0, chai_1.expect)(
|
|
47
|
-
(0, chai_1.expect)(
|
|
48
|
-
(0, chai_1.expect)(
|
|
49
|
-
(0, chai_1.expect)(
|
|
50
|
-
})
|
|
51
|
-
function quoteGasPayment(fromRouter, destinationDomain, igp) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return igp.quoteGasPayment(destinationDomain, handleGasAmount);
|
|
55
|
-
});
|
|
37
|
+
(0, chai_1.expect)(await local.sent()).to.equal(0);
|
|
38
|
+
(0, chai_1.expect)(await local.received()).to.equal(0);
|
|
39
|
+
(0, chai_1.expect)(await remote.sent()).to.equal(0);
|
|
40
|
+
(0, chai_1.expect)(await remote.received()).to.equal(0);
|
|
41
|
+
});
|
|
42
|
+
async function quoteGasPayment(fromRouter, destinationDomain, igp) {
|
|
43
|
+
const handleGasAmount = await fromRouter.HANDLE_GAS_AMOUNT();
|
|
44
|
+
return igp.quoteGasPayment(destinationDomain, handleGasAmount);
|
|
56
45
|
}
|
|
57
|
-
it('sends a message', () =>
|
|
58
|
-
|
|
59
|
-
value:
|
|
46
|
+
it('sends a message', async () => {
|
|
47
|
+
await (0, chai_1.expect)(local.sendHelloWorld(remoteDomain, 'Hello', {
|
|
48
|
+
value: await quoteGasPayment(local, remoteDomain, localIgp),
|
|
60
49
|
})).to.emit(local, 'SentHelloWorld');
|
|
61
50
|
// The sent counts are correct
|
|
62
|
-
(0, chai_1.expect)(
|
|
63
|
-
(0, chai_1.expect)(
|
|
51
|
+
(0, chai_1.expect)(await local.sent()).to.equal(1);
|
|
52
|
+
(0, chai_1.expect)(await local.sentTo(remoteDomain)).to.equal(1);
|
|
64
53
|
// The received counts are correct
|
|
65
|
-
(0, chai_1.expect)(
|
|
66
|
-
})
|
|
67
|
-
it('reverts if there is insufficient payment', () =>
|
|
68
|
-
|
|
54
|
+
(0, chai_1.expect)(await local.received()).to.equal(0);
|
|
55
|
+
});
|
|
56
|
+
it('reverts if there is insufficient payment', async () => {
|
|
57
|
+
await (0, chai_1.expect)(local.sendHelloWorld(remoteDomain, 'Hello', {
|
|
69
58
|
value: 0,
|
|
70
59
|
})).to.be.revertedWith('insufficient interchain gas payment');
|
|
71
|
-
})
|
|
72
|
-
it('handles a message', () =>
|
|
73
|
-
|
|
74
|
-
value:
|
|
60
|
+
});
|
|
61
|
+
it('handles a message', async () => {
|
|
62
|
+
await local.sendHelloWorld(remoteDomain, 'World', {
|
|
63
|
+
value: await quoteGasPayment(local, remoteDomain, localIgp),
|
|
75
64
|
});
|
|
76
65
|
// Mock processing of the message by Hyperlane
|
|
77
|
-
|
|
66
|
+
await coreApp.processOutboundMessages(localChain);
|
|
78
67
|
// The initial message has been dispatched.
|
|
79
|
-
(0, chai_1.expect)(
|
|
68
|
+
(0, chai_1.expect)(await local.sent()).to.equal(1);
|
|
80
69
|
// The initial message has been processed.
|
|
81
|
-
(0, chai_1.expect)(
|
|
82
|
-
(0, chai_1.expect)(
|
|
83
|
-
})
|
|
84
|
-
})
|
|
70
|
+
(0, chai_1.expect)(await remote.received()).to.equal(1);
|
|
71
|
+
(0, chai_1.expect)(await remote.receivedFrom(localDomain)).to.equal(1);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
85
74
|
//# sourceMappingURL=helloworld.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helloworld.test.js","sourceRoot":"","sources":["../../../src/test/helloworld.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helloworld.test.js","sourceRoot":"","sources":["../../../src/test/helloworld.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,36 +49,36 @@ export interface HyperlaneConnectionClientInterface extends utils.Interface {
|
|
|
49
49
|
export interface InitializedEventObject {
|
|
50
50
|
version: number;
|
|
51
51
|
}
|
|
52
|
-
export
|
|
53
|
-
export
|
|
52
|
+
export type InitializedEvent = TypedEvent<[number], InitializedEventObject>;
|
|
53
|
+
export type InitializedEventFilter = TypedEventFilter<InitializedEvent>;
|
|
54
54
|
export interface InterchainGasPaymasterSetEventObject {
|
|
55
55
|
interchainGasPaymaster: string;
|
|
56
56
|
}
|
|
57
|
-
export
|
|
57
|
+
export type InterchainGasPaymasterSetEvent = TypedEvent<[
|
|
58
58
|
string
|
|
59
59
|
], InterchainGasPaymasterSetEventObject>;
|
|
60
|
-
export
|
|
60
|
+
export type InterchainGasPaymasterSetEventFilter = TypedEventFilter<InterchainGasPaymasterSetEvent>;
|
|
61
61
|
export interface InterchainSecurityModuleSetEventObject {
|
|
62
62
|
module: string;
|
|
63
63
|
}
|
|
64
|
-
export
|
|
64
|
+
export type InterchainSecurityModuleSetEvent = TypedEvent<[
|
|
65
65
|
string
|
|
66
66
|
], InterchainSecurityModuleSetEventObject>;
|
|
67
|
-
export
|
|
67
|
+
export type InterchainSecurityModuleSetEventFilter = TypedEventFilter<InterchainSecurityModuleSetEvent>;
|
|
68
68
|
export interface MailboxSetEventObject {
|
|
69
69
|
mailbox: string;
|
|
70
70
|
}
|
|
71
|
-
export
|
|
72
|
-
export
|
|
71
|
+
export type MailboxSetEvent = TypedEvent<[string], MailboxSetEventObject>;
|
|
72
|
+
export type MailboxSetEventFilter = TypedEventFilter<MailboxSetEvent>;
|
|
73
73
|
export interface OwnershipTransferredEventObject {
|
|
74
74
|
previousOwner: string;
|
|
75
75
|
newOwner: string;
|
|
76
76
|
}
|
|
77
|
-
export
|
|
77
|
+
export type OwnershipTransferredEvent = TypedEvent<[
|
|
78
78
|
string,
|
|
79
79
|
string
|
|
80
80
|
], OwnershipTransferredEventObject>;
|
|
81
|
-
export
|
|
81
|
+
export type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
|
|
82
82
|
export interface HyperlaneConnectionClient extends BaseContract {
|
|
83
83
|
connect(signerOrProvider: Signer | Provider | string): this;
|
|
84
84
|
attach(addressOrName: string): this;
|