@wormhole-foundation/sdk-algorand-core 0.5.0-beta.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.
@@ -0,0 +1,55 @@
1
+ import { ChainId, ChainsConfig, Contracts, Network, VAA, WormholeCore, WormholeMessageId } from "@wormhole-foundation/sdk-connect";
2
+ import { AlgorandChains, AlgorandUnsignedTransaction, AnyAlgorandAddress, TransactionSet } from "@wormhole-foundation/sdk-algorand";
3
+ import { Algodv2, LogicSigAccount, SuggestedParams } from "algosdk";
4
+ export declare class AlgorandWormholeCore<N extends Network, C extends AlgorandChains> implements WormholeCore<N, C> {
5
+ readonly network: N;
6
+ readonly chain: C;
7
+ readonly connection: Algodv2;
8
+ readonly contracts: Contracts;
9
+ readonly chainId: ChainId;
10
+ readonly coreAppId: bigint;
11
+ readonly coreAppAddress: string;
12
+ readonly tokenBridgeAppId: bigint;
13
+ readonly tokenBridgeAppAddress: string;
14
+ static MAX_SIGS_PER_TXN: number;
15
+ static ALGO_VERIFY_HASH: string;
16
+ static ALGO_VERIFY: Uint8Array;
17
+ static feeKey: string;
18
+ static verifyVaa: Uint8Array;
19
+ static verifySigs: Uint8Array;
20
+ static publishMessage: Uint8Array;
21
+ constructor(network: N, chain: C, connection: Algodv2, contracts: Contracts);
22
+ verifyMessage(sender: AnyAlgorandAddress, vaa: VAA, appId?: bigint): AsyncGenerator<AlgorandUnsignedTransaction<N, C>, void, unknown>;
23
+ static fromRpc<N extends Network>(connection: Algodv2, config: ChainsConfig<N, "Algorand">): Promise<AlgorandWormholeCore<N, AlgorandChains>>;
24
+ publishMessage(sender: AnyAlgorandAddress, message: Uint8Array): AsyncGenerator<AlgorandUnsignedTransaction<N, C>, void, unknown>;
25
+ /**
26
+ * Return the message fee for the core bridge
27
+ * @param client An Algodv2 client
28
+ * @param bridgeId The application ID of the core bridge
29
+ * @returns Promise with the message fee for the core bridge
30
+ */
31
+ getMessageFee(): Promise<bigint>;
32
+ parseTransaction(txId: string): Promise<WormholeMessageId[]>;
33
+ private parseTx;
34
+ /**
35
+ * Constructs opt in transactions
36
+ * @param client An Algodv2 client
37
+ * @param senderAddr Sender address
38
+ * @param appId Application ID
39
+ * @param storage StorageLogicSig
40
+ * @returns Address and array of TransactionSignerPairs
41
+ */
42
+ static maybeCreateStorageTx(client: Algodv2, senderAddr: string, appId: bigint, storage: LogicSigAccount, suggestedParams?: SuggestedParams): Promise<TransactionSet>;
43
+ /**
44
+ * Submits just the header of the VAA
45
+ * @param client AlgodV2 client
46
+ * @param bridgeId Application ID of the core bridge
47
+ * @param vaa The VAA (just the header is used)
48
+ * @param senderAddr Sending account address
49
+ * @param appid Application ID
50
+ * @returns Promise with current VAA state
51
+ */
52
+ static submitVAAHeader(client: Algodv2, coreId: bigint, appid: bigint, vaa: VAA, senderAddr: string, suggestedParams?: SuggestedParams): Promise<TransactionSet>;
53
+ private createUnsignedTx;
54
+ }
55
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,OAAO,EACP,GAAG,EACH,YAAY,EACZ,iBAAiB,EAKlB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,cAAc,EAEd,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EAGf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,eAAe,EAEf,eAAe,EAQhB,MAAM,SAAS,CAAC;AAIjB,qBAAa,oBAAoB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,cAAc,CAC3E,YAAW,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IA6B3B,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,OAAO;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS;IA9B/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAEvC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAK;IACpC,MAAM,CAAC,gBAAgB,SAAgE;IACvF,MAAM,CAAC,WAAW,aAOf;IAGH,MAAM,CAAC,MAAM,SAAqC;IAElD,MAAM,CAAC,SAAS,aAAsC;IAEtD,MAAM,CAAC,UAAU,aAAuC;IAExD,MAAM,CAAC,cAAc,aAA2C;gBAGrD,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,SAAS;IAmBxB,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM;WAe5D,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAQ5C,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU;IAgCrE;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAShC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAMlE,OAAO,CAAC,OAAO;IA4Bf;;;;;;;OAOG;WACU,oBAAoB,CAC/B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EACxB,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,cAAc,CAAC;IA4C1B;;;;;;;;OAQG;WACU,eAAe,CAC1B,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,eAAe,GAChC,OAAO,CAAC,cAAc,CAAC;IAmH1B,OAAO,CAAC,gBAAgB;CAazB"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlgorandWormholeCore = void 0;
4
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
+ const sdk_algorand_1 = require("@wormhole-foundation/sdk-algorand");
6
+ const algosdk_1 = require("algosdk");
7
+ const storage_1 = require("./storage");
8
+ class AlgorandWormholeCore {
9
+ network;
10
+ chain;
11
+ connection;
12
+ contracts;
13
+ chainId;
14
+ coreAppId;
15
+ coreAppAddress;
16
+ tokenBridgeAppId;
17
+ tokenBridgeAppAddress;
18
+ static MAX_SIGS_PER_TXN = 6;
19
+ static ALGO_VERIFY_HASH = "EZATROXX2HISIRZDRGXW4LRQ46Z6IUJYYIHU3PJGP7P5IQDPKVX42N767A";
20
+ static ALGO_VERIFY = new Uint8Array([
21
+ 6, 32, 4, 1, 0, 32, 20, 38, 1, 0, 49, 32, 50, 3, 18, 68, 49, 1, 35, 18, 68, 49, 16, 129, 6, 18,
22
+ 68, 54, 26, 1, 54, 26, 3, 54, 26, 2, 136, 0, 3, 68, 34, 67, 53, 2, 53, 1, 53, 0, 40, 53, 240,
23
+ 40, 53, 241, 52, 0, 21, 53, 5, 35, 53, 3, 35, 53, 4, 52, 3, 52, 5, 12, 65, 0, 68, 52, 1, 52, 0,
24
+ 52, 3, 129, 65, 8, 34, 88, 23, 52, 0, 52, 3, 34, 8, 36, 88, 52, 0, 52, 3, 129, 33, 8, 36, 88, 7,
25
+ 0, 53, 241, 53, 240, 52, 2, 52, 4, 37, 88, 52, 240, 52, 241, 80, 2, 87, 12, 20, 18, 68, 52, 3,
26
+ 129, 66, 8, 53, 3, 52, 4, 37, 8, 53, 4, 66, 255, 180, 34, 137,
27
+ ]);
28
+ // global state key for message fee
29
+ static feeKey = sdk_connect_1.encoding.b64.encode("MessageFee");
30
+ // method selector for verifying a VAA
31
+ static verifyVaa = sdk_connect_1.encoding.bytes.encode("verifyVAA");
32
+ // method selector for verifying signatures of a VAA
33
+ static verifySigs = sdk_connect_1.encoding.bytes.encode("verifySigs");
34
+ // method selector string for publishing a message
35
+ static publishMessage = sdk_connect_1.encoding.bytes.encode("publishMessage");
36
+ constructor(network, chain, connection, contracts) {
37
+ this.network = network;
38
+ this.chain = chain;
39
+ this.connection = connection;
40
+ this.contracts = contracts;
41
+ this.chainId = (0, sdk_connect_1.toChainId)(chain);
42
+ if (!contracts.coreBridge) {
43
+ throw new Error(`Core contract address for chain ${chain} not found`);
44
+ }
45
+ const core = BigInt(contracts.coreBridge);
46
+ this.coreAppId = core;
47
+ this.coreAppAddress = (0, algosdk_1.getApplicationAddress)(core);
48
+ if (!contracts.tokenBridge) {
49
+ throw new Error(`TokenBridge contract address for chain ${chain} not found`);
50
+ }
51
+ const tokenBridge = BigInt(contracts.tokenBridge);
52
+ this.tokenBridgeAppId = tokenBridge;
53
+ this.tokenBridgeAppAddress = (0, algosdk_1.getApplicationAddress)(tokenBridge);
54
+ }
55
+ async *verifyMessage(sender, vaa, appId) {
56
+ const address = new sdk_algorand_1.AlgorandAddress(sender).toString();
57
+ const txset = await AlgorandWormholeCore.submitVAAHeader(this.connection, this.coreAppId, appId ?? this.coreAppId, vaa, address);
58
+ for (const tx of txset.txs) {
59
+ yield this.createUnsignedTx(tx, "Core.verifyMessage");
60
+ }
61
+ }
62
+ static async fromRpc(connection, config) {
63
+ const [network, chain] = await sdk_algorand_1.AlgorandPlatform.chainFromRpc(connection);
64
+ const conf = config[chain];
65
+ if (conf.network !== network)
66
+ throw new Error(`Network mismatch: ${conf.network} !== ${network}`);
67
+ return new AlgorandWormholeCore(network, chain, connection, conf.contracts);
68
+ }
69
+ async *publishMessage(sender, message) {
70
+ // Call core bridge to publish message
71
+ const _sender = new sdk_algorand_1.AlgorandAddress(sender);
72
+ const address = _sender.toString();
73
+ const suggestedParams = await this.connection.getTransactionParams().do();
74
+ const storage = storage_1.StorageLogicSig.forEmitter(this.coreAppId, _sender.toUint8Array());
75
+ const { accounts, txs } = await AlgorandWormholeCore.maybeCreateStorageTx(this.connection, address, this.coreAppId, storage, suggestedParams);
76
+ for (const tx of txs) {
77
+ yield this.createUnsignedTx(tx, "Core.publishMessage", true);
78
+ }
79
+ const act = (0, algosdk_1.makeApplicationCallTxnFromObject)({
80
+ from: address,
81
+ appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.coreAppId),
82
+ appArgs: [AlgorandWormholeCore.publishMessage, message, sdk_connect_1.encoding.bignum.toBytes(0n, 8)],
83
+ accounts: accounts,
84
+ onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
85
+ suggestedParams,
86
+ });
87
+ yield this.createUnsignedTx({ tx: act }, "Core.publishMessage", true);
88
+ }
89
+ /**
90
+ * Return the message fee for the core bridge
91
+ * @param client An Algodv2 client
92
+ * @param bridgeId The application ID of the core bridge
93
+ * @returns Promise with the message fee for the core bridge
94
+ */
95
+ async getMessageFee() {
96
+ const applInfoResp = await this.connection
97
+ .getApplicationByID((0, sdk_algorand_1.safeBigIntToNumber)(this.coreAppId))
98
+ .do();
99
+ const appInfo = algosdk_1.modelsv2.Application.from_obj_for_encoding(applInfoResp);
100
+ const val = appInfo.params.globalState?.find((kv) => kv.key === AlgorandWormholeCore.feeKey);
101
+ return val ? BigInt(val.value.uint) : 0n;
102
+ }
103
+ async parseTransaction(txId) {
104
+ const result = await this.connection.pendingTransactionInformation(txId).do();
105
+ const ptr = algosdk_1.modelsv2.PendingTransactionResponse.from_obj_for_encoding(result);
106
+ return this.parseTx(ptr);
107
+ }
108
+ parseTx(ptr) {
109
+ const msgs = [];
110
+ if (ptr.innerTxns && ptr.innerTxns.length > 0) {
111
+ msgs.push(...ptr.innerTxns.flatMap((tx) => this.parseTx(tx)));
112
+ }
113
+ // Expect target is core app
114
+ if (BigInt(ptr.txn.txn.apid ?? 0) !== this.coreAppId)
115
+ return msgs;
116
+ // Expect logs
117
+ if (!ptr.logs || ptr.logs.length === 0)
118
+ return msgs;
119
+ // Expect publish messeage as first arg
120
+ const args = ptr.txn.txn.apaa ?? [];
121
+ if (args.length !== 3 ||
122
+ !sdk_connect_1.encoding.bytes.equals(new Uint8Array(args[0]), AlgorandWormholeCore.publishMessage))
123
+ return msgs;
124
+ const sequence = sdk_connect_1.encoding.bignum.decode(ptr.logs[0]);
125
+ const emitter = new sdk_algorand_1.AlgorandAddress(ptr.txn.txn.snd).toUniversalAddress();
126
+ msgs.push({ chain: this.chain, emitter, sequence });
127
+ return msgs;
128
+ }
129
+ /**
130
+ * Constructs opt in transactions
131
+ * @param client An Algodv2 client
132
+ * @param senderAddr Sender address
133
+ * @param appId Application ID
134
+ * @param storage StorageLogicSig
135
+ * @returns Address and array of TransactionSignerPairs
136
+ */
137
+ static async maybeCreateStorageTx(client, senderAddr, appId, storage, suggestedParams) {
138
+ const appAddr = (0, algosdk_1.getApplicationAddress)(appId);
139
+ const storageAddress = storage.address();
140
+ const txs = [];
141
+ if (await storage_1.StorageLogicSig.storageAccountExists(client, storageAddress, appId))
142
+ return { accounts: [storageAddress], txs };
143
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
144
+ // Pay the storage account some ALGO to min balance requirements
145
+ const seedTxn = (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
146
+ from: senderAddr,
147
+ to: storageAddress,
148
+ amount: storage_1.SEED_AMT,
149
+ suggestedParams,
150
+ });
151
+ seedTxn.fee = seedTxn.fee * 2;
152
+ txs.push({ tx: seedTxn });
153
+ // Opt in to the app and rekey to the app address that is using
154
+ // this as storage
155
+ const optinTxn = (0, algosdk_1.makeApplicationOptInTxnFromObject)({
156
+ from: storageAddress,
157
+ appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(appId),
158
+ rekeyTo: appAddr,
159
+ suggestedParams,
160
+ });
161
+ optinTxn.fee = 0;
162
+ txs.push({
163
+ tx: optinTxn,
164
+ signer: {
165
+ address: storage.address(),
166
+ signTxn: (txn) => Promise.resolve((0, algosdk_1.signLogicSigTransaction)(txn, storage).blob),
167
+ },
168
+ });
169
+ return {
170
+ accounts: [storageAddress],
171
+ txs,
172
+ };
173
+ }
174
+ /**
175
+ * Submits just the header of the VAA
176
+ * @param client AlgodV2 client
177
+ * @param bridgeId Application ID of the core bridge
178
+ * @param vaa The VAA (just the header is used)
179
+ * @param senderAddr Sending account address
180
+ * @param appid Application ID
181
+ * @returns Promise with current VAA state
182
+ */
183
+ static async submitVAAHeader(client, coreId, appid, vaa, senderAddr, suggestedParams) {
184
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
185
+ let txs = [];
186
+ // Get storage acct for message ID
187
+ const msgStorage = storage_1.StorageLogicSig.forMessageId(appid, {
188
+ chain: vaa.emitterChain,
189
+ sequence: vaa.sequence,
190
+ emitter: vaa.emitterAddress,
191
+ });
192
+ const { accounts: seqAddr, txs: seqOptInTxs } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, appid, msgStorage, suggestedParams);
193
+ txs.push(...seqOptInTxs);
194
+ // Get storage account for Guardian set
195
+ const gsStorage = storage_1.StorageLogicSig.forGuardianSet(coreId, vaa.guardianSet);
196
+ const { accounts: [storageAddr], txs: guardianOptInTxs, } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, coreId, gsStorage, suggestedParams);
197
+ txs.push(...guardianOptInTxs);
198
+ let accts = [...seqAddr, storageAddr];
199
+ // Get the Guardian keys
200
+ const keys = await storage_1.StorageLogicSig.decodeLocalState(client, coreId, storageAddr);
201
+ // We don't pass the entire payload in but instead just pass it pre-digested. This gets around size
202
+ // limitations with lsigs AND reduces the cost of the entire operation on a congested network by reducing the
203
+ // bytes passed into the transaction
204
+ // This is a 2 pass digest
205
+ const digest = (0, sdk_connect_1.keccak256)(vaa.hash);
206
+ // How many signatures can we process in a single txn... we can do 6!
207
+ // There are likely upwards of 19 signatures. So, we ned to split things up
208
+ const numSigs = vaa.signatures.length;
209
+ const numTxns = Math.ceil(numSigs / AlgorandWormholeCore.MAX_SIGS_PER_TXN);
210
+ const GuardianKeyLen = 20;
211
+ const lsa = new algosdk_1.LogicSigAccount(AlgorandWormholeCore.ALGO_VERIFY);
212
+ for (let nt = 0; nt < numTxns; nt++) {
213
+ const step = nt * AlgorandWormholeCore.MAX_SIGS_PER_TXN;
214
+ const sigs = vaa.signatures.slice(step, step + AlgorandWormholeCore.MAX_SIGS_PER_TXN);
215
+ // The keyset is the set of Guardians that correspond
216
+ // to the current set of signatures in this loop.
217
+ // Each signature in 20 bytes and comes from decodeLocalState()
218
+ const arraySize = sigs.length * GuardianKeyLen;
219
+ const keySet = new Uint8Array(arraySize);
220
+ for (let i = 0; i < sigs.length; i++) {
221
+ // The first byte of the sig is the relative index of that signature in the signatures array
222
+ // Use that index to get the appropriate Guardian key
223
+ const sig = sigs[i];
224
+ const key = keys.slice(sig.guardianIndex * GuardianKeyLen + 1, (sig.guardianIndex + 1) * GuardianKeyLen + 1);
225
+ keySet.set(key, i * 20);
226
+ }
227
+ const appTxn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
228
+ appArgs: [
229
+ AlgorandWormholeCore.verifySigs,
230
+ sdk_connect_1.encoding.bytes.concat(...sigs.map((s) => sdk_connect_1.encoding.bytes.concat(new Uint8Array([s.guardianIndex]), s.signature.encode()))),
231
+ keySet,
232
+ digest,
233
+ ],
234
+ accounts: accts,
235
+ appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(coreId),
236
+ from: AlgorandWormholeCore.ALGO_VERIFY_HASH,
237
+ onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
238
+ suggestedParams,
239
+ });
240
+ appTxn.fee = 0;
241
+ txs.push({
242
+ tx: appTxn,
243
+ signer: {
244
+ address: lsa.address(),
245
+ signTxn: (txn) => Promise.resolve((0, algosdk_1.signLogicSigTransaction)(txn, lsa).blob),
246
+ },
247
+ });
248
+ }
249
+ const appTxn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
250
+ appArgs: [AlgorandWormholeCore.verifyVaa, (0, sdk_connect_1.serialize)(vaa)],
251
+ accounts: accts,
252
+ appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(coreId),
253
+ from: senderAddr,
254
+ onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
255
+ suggestedParams,
256
+ });
257
+ appTxn.fee = appTxn.fee * (2 + numTxns);
258
+ txs.push({ tx: appTxn });
259
+ return { accounts: accts, txs };
260
+ }
261
+ createUnsignedTx(txReq, description, parallelizable = true) {
262
+ return new sdk_algorand_1.AlgorandUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
263
+ }
264
+ }
265
+ exports.AlgorandWormholeCore = AlgorandWormholeCore;
266
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./core";
2
+ export * from "./storage";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
18
+ const core_1 = require("./core");
19
+ (0, sdk_connect_1.registerProtocol)("Algorand", "WormholeCore", core_1.AlgorandWormholeCore);
20
+ __exportStar(require("./core"), exports);
21
+ __exportStar(require("./storage"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAoE;AACpE,iCAA8C;AAE9C,IAAA,8BAAgB,EAAC,UAAU,EAAE,cAAc,EAAE,2BAAoB,CAAC,CAAC;AAEnE,yCAAuB;AACvB,4CAA0B"}
@@ -0,0 +1,56 @@
1
+ import { Chain, TokenId, WormholeMessageId } from "@wormhole-foundation/sdk-connect";
2
+ import { Algodv2, LogicSigAccount } from "algosdk";
3
+ export declare const SEED_AMT: number;
4
+ export declare const MAX_KEYS: number;
5
+ export declare const MAX_BYTES_PER_KEY: number;
6
+ export declare const BITS_PER_BYTE: number;
7
+ export declare const BITS_PER_KEY: number;
8
+ export declare const MAX_BYTES: number;
9
+ export declare const MAX_BITS: number;
10
+ export interface PopulateData {
11
+ appId: bigint;
12
+ appAddress: Uint8Array;
13
+ address: Uint8Array;
14
+ idx: bigint;
15
+ }
16
+ export declare const varint: {
17
+ _limit: number;
18
+ encodingLength: (value: number) => number;
19
+ encode: (i: bigint | number, buffer?: ArrayBuffer, byteOffset?: number) => Uint8Array;
20
+ decode: (data: Uint8Array, offset?: number) => number;
21
+ };
22
+ export declare const StorageLogicSig: {
23
+ forMessageId: (appId: bigint, whm: WormholeMessageId) => LogicSigAccount;
24
+ forWrappedAsset: (appId: bigint, token: TokenId<Chain>) => LogicSigAccount;
25
+ forNativeAsset: (appId: bigint, tokenId: bigint) => LogicSigAccount;
26
+ forGuardianSet: (appId: bigint, idx: bigint | number) => LogicSigAccount;
27
+ forEmitter: (appId: bigint, emitter: Uint8Array) => LogicSigAccount;
28
+ _encode: (data: bigint | Uint8Array) => string[];
29
+ fromData: (data: PopulateData) => LogicSigAccount;
30
+ /**
31
+ * Returns the local data for an application ID
32
+ * @param client Algodv2 client
33
+ * @param appId Application ID of interest
34
+ * @param address Address of the account
35
+ * @returns Promise with Uint8Array of data squirreled away
36
+ */
37
+ decodeLocalState: (client: Algodv2, appId: bigint, address: string) => Promise<Uint8Array>;
38
+ /**
39
+ * This function is used to check if a VAA has been redeemed by looking at a specific bit
40
+ * @param client AlgodV2 client
41
+ * @param appId Application Id
42
+ * @param addr Wallet address. Someone has to pay for this
43
+ * @param seq The sequence number of the redemption
44
+ * @returns True, if the bit was set and VAA was redeemed, False otherwise
45
+ */
46
+ checkBitsSet: (client: Algodv2, appId: bigint, addr: string, seq: bigint) => Promise<boolean>;
47
+ /**
48
+ * Checks to see if the account exists for the application
49
+ * @param client An Algodv2 client
50
+ * @param appId Application ID
51
+ * @param acctAddr Account address to check
52
+ * @returns True, if account exists for application, False otherwise
53
+ */
54
+ storageAccountExists: (client: Algodv2, address: string, appId: bigint) => Promise<boolean>;
55
+ };
56
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,iBAAiB,EAIlB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAkD,MAAM,SAAS,CAAC;AAGnG,eAAO,MAAM,QAAQ,EAAE,MAAgB,CAAC;AACxC,eAAO,MAAM,QAAQ,EAAE,MAAW,CAAC;AACnC,eAAO,MAAM,iBAAiB,EAAE,MAAY,CAAC;AAC7C,eAAO,MAAM,aAAa,EAAE,MAAU,CAAC;AACvC,eAAO,MAAM,YAAY,EAAE,MAA0C,CAAC;AACtE,eAAO,MAAM,SAAS,EAAE,MAAqC,CAAC;AAC9D,eAAO,MAAM,QAAQ,EAAE,MAAkC,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAGD,eAAO,MAAM,MAAM;;4BAGO,MAAM;gBAKlB,MAAM,GAAG,MAAM,WAAW,WAAW,eAAe,MAAM;mBAsBvD,UAAU;CAa1B,CAAC;AAEF,eAAO,MAAM,eAAe;0BAEJ,MAAM,OAAO,iBAAiB;6BAc3B,MAAM,SAAS,QAAQ,KAAK,CAAC;4BAW9B,MAAM,WAAW,MAAM;4BAUvB,MAAM,OAAO,MAAM,GAAG,MAAM;wBAShC,MAAM,WAAW,UAAU;oBAS/B,MAAM,GAAG,UAAU;qBAIlB,YAAY;IAoB7B;;;;;;OAMG;+BAC8B,OAAO,SAAS,MAAM,WAAW,MAAM;IAqCxE;;;;;;;OAOG;2BAC0B,OAAO,SAAS,MAAM,QAAQ,MAAM,OAAO,MAAM;IAuC9E;;;;;;OAMG;mCACkC,OAAO,WAAW,MAAM,SAAS,MAAM;CAS7E,CAAC"}