@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,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageLogicSig = exports.varint = exports.MAX_BITS = exports.MAX_BYTES = exports.BITS_PER_KEY = exports.BITS_PER_BYTE = exports.MAX_BYTES_PER_KEY = exports.MAX_KEYS = exports.SEED_AMT = void 0;
4
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
+ const algosdk_1 = require("algosdk");
6
+ const sdk_algorand_1 = require("@wormhole-foundation/sdk-algorand");
7
+ exports.SEED_AMT = 1002000;
8
+ exports.MAX_KEYS = 15;
9
+ exports.MAX_BYTES_PER_KEY = 127;
10
+ exports.BITS_PER_BYTE = 8;
11
+ exports.BITS_PER_KEY = exports.MAX_BYTES_PER_KEY * exports.BITS_PER_BYTE;
12
+ exports.MAX_BYTES = exports.MAX_BYTES_PER_KEY * exports.MAX_KEYS;
13
+ exports.MAX_BITS = exports.BITS_PER_BYTE * exports.MAX_BYTES;
14
+ // Useful for encoding numbers as varints to patch TEAL binary
15
+ exports.varint = {
16
+ // Forever grateful to https://github.com/joeltg/big-varint/blob/main/src/unsigned.ts
17
+ _limit: 0x7f,
18
+ encodingLength: (value) => {
19
+ let i = 0;
20
+ for (; value >= 0x80; i++)
21
+ value >>= 7;
22
+ return i + 1;
23
+ },
24
+ encode: (i, buffer, byteOffset) => {
25
+ if (typeof i === "bigint")
26
+ i = (0, sdk_algorand_1.safeBigIntToNumber)(i);
27
+ if (i < 0)
28
+ throw new RangeError("value must be unsigned");
29
+ const byteLength = exports.varint.encodingLength(i);
30
+ buffer = buffer || new ArrayBuffer(byteLength);
31
+ byteOffset = byteOffset || 0;
32
+ if (buffer.byteLength < byteOffset + byteLength)
33
+ throw new RangeError("the buffer is too small to encode the number at the offset");
34
+ const array = new Uint8Array(buffer, byteOffset);
35
+ let offset = 0;
36
+ while (exports.varint._limit < i) {
37
+ array[offset++] = (i & exports.varint._limit) | 0x80;
38
+ i >>= 7;
39
+ }
40
+ array[offset] = Number(i);
41
+ return array;
42
+ },
43
+ decode: (data, offset = 0) => {
44
+ let i = 0;
45
+ let n = 0;
46
+ let b;
47
+ do {
48
+ b = data[offset + n];
49
+ if (b === undefined)
50
+ throw new RangeError("offset out of range");
51
+ i += (b & exports.varint._limit) << (n * 7);
52
+ n++;
53
+ } while (0x80 <= b);
54
+ return i;
55
+ },
56
+ };
57
+ exports.StorageLogicSig = {
58
+ // Get the storage lsig for a Wormhole message ID
59
+ forMessageId: (appId, whm) => {
60
+ const appAddress = (0, algosdk_1.decodeAddress)((0, algosdk_1.getApplicationAddress)(appId)).publicKey;
61
+ const emitterAddr = whm.emitter.toUniversalAddress().toUint8Array();
62
+ const chainIdBytes = sdk_connect_1.encoding.bignum.toBytes(BigInt((0, sdk_connect_1.toChainId)(whm.chain)), 2);
63
+ const address = sdk_connect_1.encoding.bytes.concat(chainIdBytes, emitterAddr);
64
+ return exports.StorageLogicSig.fromData({
65
+ appId,
66
+ appAddress,
67
+ idx: whm.sequence / BigInt(exports.MAX_BITS),
68
+ address,
69
+ });
70
+ },
71
+ // Get the storage lsig for a wrapped asset
72
+ forWrappedAsset: (appId, token) => {
73
+ if ((0, sdk_connect_1.isNative)(token.address))
74
+ throw new Error("native asset cannot be a wrapped asset");
75
+ const appAddress = (0, algosdk_1.decodeAddress)((0, algosdk_1.getApplicationAddress)(appId)).publicKey;
76
+ return exports.StorageLogicSig.fromData({
77
+ appId,
78
+ appAddress,
79
+ idx: BigInt((0, sdk_connect_1.toChainId)(token.chain)),
80
+ address: token.address.toUniversalAddress().toUint8Array(),
81
+ });
82
+ },
83
+ // Get the storage lsig for a native asset
84
+ forNativeAsset: (appId, tokenId) => {
85
+ const appAddress = (0, algosdk_1.decodeAddress)((0, algosdk_1.getApplicationAddress)(appId)).publicKey;
86
+ return exports.StorageLogicSig.fromData({
87
+ appId,
88
+ appAddress,
89
+ idx: tokenId,
90
+ address: sdk_connect_1.encoding.bytes.encode("native"),
91
+ });
92
+ },
93
+ // Get the storage lsig for the guardian set
94
+ forGuardianSet: (appId, idx) => {
95
+ const appAddress = (0, algosdk_1.decodeAddress)((0, algosdk_1.getApplicationAddress)(appId)).publicKey;
96
+ return exports.StorageLogicSig.fromData({
97
+ appId,
98
+ appAddress,
99
+ idx: BigInt(idx),
100
+ address: sdk_connect_1.encoding.bytes.encode("guardian"),
101
+ });
102
+ },
103
+ forEmitter: (appId, emitter) => {
104
+ const appAddress = (0, algosdk_1.decodeAddress)((0, algosdk_1.getApplicationAddress)(appId)).publicKey;
105
+ return exports.StorageLogicSig.fromData({
106
+ appId,
107
+ appAddress,
108
+ idx: 0n,
109
+ address: emitter,
110
+ });
111
+ },
112
+ _encode: (data) => {
113
+ if (typeof data === "bigint")
114
+ return [sdk_connect_1.encoding.hex.encode(exports.varint.encode(data))];
115
+ return [sdk_connect_1.encoding.hex.encode(exports.varint.encode(data.length)), sdk_connect_1.encoding.hex.encode(data)];
116
+ },
117
+ fromData: (data) => {
118
+ // This patches the binary of the TEAL program used to store data
119
+ // to produce a logic sig that can be used to sign transactions
120
+ // to store data in the its account local state for a given app
121
+ const byteStrings = [
122
+ "0620010181",
123
+ ...exports.StorageLogicSig._encode(data.idx),
124
+ "4880",
125
+ ...exports.StorageLogicSig._encode(data.address),
126
+ "483110810612443119221244311881",
127
+ ...exports.StorageLogicSig._encode(data.appId),
128
+ "1244312080",
129
+ ...exports.StorageLogicSig._encode(data.appAddress),
130
+ "124431018100124431093203124431153203124422",
131
+ ];
132
+ const bytecode = sdk_connect_1.encoding.hex.decode(byteStrings.join(""));
133
+ return new algosdk_1.LogicSigAccount(bytecode);
134
+ },
135
+ /**
136
+ * Returns the local data for an application ID
137
+ * @param client Algodv2 client
138
+ * @param appId Application ID of interest
139
+ * @param address Address of the account
140
+ * @returns Promise with Uint8Array of data squirreled away
141
+ */
142
+ decodeLocalState: async (client, appId, address) => {
143
+ let appState;
144
+ try {
145
+ const ai = await client
146
+ .accountApplicationInformation(address, (0, sdk_algorand_1.safeBigIntToNumber)(appId))
147
+ .do();
148
+ const acctAppInfo = algosdk_1.modelsv2.AccountApplicationResponse.from_obj_for_encoding(ai);
149
+ appState = acctAppInfo.appLocalState;
150
+ }
151
+ catch (e) {
152
+ return new Uint8Array();
153
+ }
154
+ const metaKey = sdk_connect_1.encoding.b64.encode("meta");
155
+ // We don't want the data in the `meta` key
156
+ // and we want to make sure the sequences come back in order
157
+ // so first put them in a map by numeric key
158
+ // then iterate over keys to concat them in the right order
159
+ let vals = new Map();
160
+ for (const kv of appState.keyValue) {
161
+ if (kv.key === metaKey)
162
+ continue;
163
+ // Take the first byte off the key to be the
164
+ // numeric index
165
+ const key = sdk_connect_1.encoding.b64.decode(kv.key)[0];
166
+ const value = sdk_connect_1.encoding.b64.decode(kv.value.bytes);
167
+ vals.set(key, value);
168
+ }
169
+ const byteArrays = [];
170
+ for (let i = 0; i < exports.MAX_KEYS; i++) {
171
+ if (vals.has(i))
172
+ byteArrays.push(vals.get(i));
173
+ }
174
+ return sdk_connect_1.encoding.bytes.concat(...byteArrays);
175
+ },
176
+ /**
177
+ * This function is used to check if a VAA has been redeemed by looking at a specific bit
178
+ * @param client AlgodV2 client
179
+ * @param appId Application Id
180
+ * @param addr Wallet address. Someone has to pay for this
181
+ * @param seq The sequence number of the redemption
182
+ * @returns True, if the bit was set and VAA was redeemed, False otherwise
183
+ */
184
+ checkBitsSet: async (client, appId, addr, seq) => {
185
+ let retval = false;
186
+ let appState;
187
+ const acctInfoResp = await client.accountInformation(addr).do();
188
+ const acctInfo = algosdk_1.modelsv2.Account.from_obj_for_encoding(acctInfoResp);
189
+ const als = acctInfo.appsLocalState;
190
+ als &&
191
+ als.forEach((app) => {
192
+ if (BigInt(app.id) === appId) {
193
+ appState = app.keyValue;
194
+ }
195
+ });
196
+ if (appState?.length === 0) {
197
+ return retval;
198
+ }
199
+ const BIG_MAX_BITS = BigInt(exports.MAX_BITS);
200
+ const BIG_EIGHT = BigInt(8);
201
+ // Start on a MAX_BITS boundary
202
+ const start = (seq / BIG_MAX_BITS) * BIG_MAX_BITS;
203
+ // beg should be in the range [0..MAX_BITS]
204
+ const beg = (0, sdk_algorand_1.safeBigIntToNumber)(seq - start);
205
+ // s should be in the range [0..15]
206
+ const s = Math.floor(beg / exports.BITS_PER_KEY);
207
+ const b = Math.floor((beg - s * exports.BITS_PER_KEY) / 8);
208
+ const key = sdk_connect_1.encoding.b64.encode(sdk_connect_1.encoding.bignum.toBytes(s, 1));
209
+ appState?.forEach((kv) => {
210
+ if (kv.key === key) {
211
+ const v = Buffer.from(kv.value.bytes, "base64");
212
+ const bt = 1 << (0, sdk_algorand_1.safeBigIntToNumber)(seq % BIG_EIGHT);
213
+ retval = (v[b] & bt) != 0; // Added non-null assertion
214
+ return;
215
+ }
216
+ });
217
+ return retval;
218
+ },
219
+ /**
220
+ * Checks to see if the account exists for the application
221
+ * @param client An Algodv2 client
222
+ * @param appId Application ID
223
+ * @param acctAddr Account address to check
224
+ * @returns True, if account exists for application, False otherwise
225
+ */
226
+ storageAccountExists: async (client, address, appId) => {
227
+ try {
228
+ const acctAppInfo = await client
229
+ .accountApplicationInformation(address, (0, sdk_algorand_1.safeBigIntToNumber)(appId))
230
+ .do();
231
+ return Object.keys(acctAppInfo).length > 0;
232
+ }
233
+ catch { }
234
+ return false;
235
+ },
236
+ };
237
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
@@ -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,262 @@
1
+ import { encoding, keccak256, serialize, toChainId, } from "@wormhole-foundation/sdk-connect";
2
+ import { AlgorandAddress, AlgorandPlatform, AlgorandUnsignedTransaction, safeBigIntToNumber, } from "@wormhole-foundation/sdk-algorand";
3
+ import { LogicSigAccount, OnApplicationComplete, getApplicationAddress, makeApplicationCallTxnFromObject, makeApplicationOptInTxnFromObject, makePaymentTxnWithSuggestedParamsFromObject, modelsv2, signLogicSigTransaction, } from "algosdk";
4
+ import { SEED_AMT, StorageLogicSig } from "./storage";
5
+ export class AlgorandWormholeCore {
6
+ network;
7
+ chain;
8
+ connection;
9
+ contracts;
10
+ chainId;
11
+ coreAppId;
12
+ coreAppAddress;
13
+ tokenBridgeAppId;
14
+ tokenBridgeAppAddress;
15
+ static MAX_SIGS_PER_TXN = 6;
16
+ static ALGO_VERIFY_HASH = "EZATROXX2HISIRZDRGXW4LRQ46Z6IUJYYIHU3PJGP7P5IQDPKVX42N767A";
17
+ static ALGO_VERIFY = new Uint8Array([
18
+ 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,
19
+ 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,
20
+ 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,
21
+ 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,
22
+ 0, 53, 241, 53, 240, 52, 2, 52, 4, 37, 88, 52, 240, 52, 241, 80, 2, 87, 12, 20, 18, 68, 52, 3,
23
+ 129, 66, 8, 53, 3, 52, 4, 37, 8, 53, 4, 66, 255, 180, 34, 137,
24
+ ]);
25
+ // global state key for message fee
26
+ static feeKey = encoding.b64.encode("MessageFee");
27
+ // method selector for verifying a VAA
28
+ static verifyVaa = encoding.bytes.encode("verifyVAA");
29
+ // method selector for verifying signatures of a VAA
30
+ static verifySigs = encoding.bytes.encode("verifySigs");
31
+ // method selector string for publishing a message
32
+ static publishMessage = encoding.bytes.encode("publishMessage");
33
+ constructor(network, chain, connection, contracts) {
34
+ this.network = network;
35
+ this.chain = chain;
36
+ this.connection = connection;
37
+ this.contracts = contracts;
38
+ this.chainId = toChainId(chain);
39
+ if (!contracts.coreBridge) {
40
+ throw new Error(`Core contract address for chain ${chain} not found`);
41
+ }
42
+ const core = BigInt(contracts.coreBridge);
43
+ this.coreAppId = core;
44
+ this.coreAppAddress = getApplicationAddress(core);
45
+ if (!contracts.tokenBridge) {
46
+ throw new Error(`TokenBridge contract address for chain ${chain} not found`);
47
+ }
48
+ const tokenBridge = BigInt(contracts.tokenBridge);
49
+ this.tokenBridgeAppId = tokenBridge;
50
+ this.tokenBridgeAppAddress = getApplicationAddress(tokenBridge);
51
+ }
52
+ async *verifyMessage(sender, vaa, appId) {
53
+ const address = new AlgorandAddress(sender).toString();
54
+ const txset = await AlgorandWormholeCore.submitVAAHeader(this.connection, this.coreAppId, appId ?? this.coreAppId, vaa, address);
55
+ for (const tx of txset.txs) {
56
+ yield this.createUnsignedTx(tx, "Core.verifyMessage");
57
+ }
58
+ }
59
+ static async fromRpc(connection, config) {
60
+ const [network, chain] = await AlgorandPlatform.chainFromRpc(connection);
61
+ const conf = config[chain];
62
+ if (conf.network !== network)
63
+ throw new Error(`Network mismatch: ${conf.network} !== ${network}`);
64
+ return new AlgorandWormholeCore(network, chain, connection, conf.contracts);
65
+ }
66
+ async *publishMessage(sender, message) {
67
+ // Call core bridge to publish message
68
+ const _sender = new AlgorandAddress(sender);
69
+ const address = _sender.toString();
70
+ const suggestedParams = await this.connection.getTransactionParams().do();
71
+ const storage = StorageLogicSig.forEmitter(this.coreAppId, _sender.toUint8Array());
72
+ const { accounts, txs } = await AlgorandWormholeCore.maybeCreateStorageTx(this.connection, address, this.coreAppId, storage, suggestedParams);
73
+ for (const tx of txs) {
74
+ yield this.createUnsignedTx(tx, "Core.publishMessage", true);
75
+ }
76
+ const act = makeApplicationCallTxnFromObject({
77
+ from: address,
78
+ appIndex: safeBigIntToNumber(this.coreAppId),
79
+ appArgs: [AlgorandWormholeCore.publishMessage, message, encoding.bignum.toBytes(0n, 8)],
80
+ accounts: accounts,
81
+ onComplete: OnApplicationComplete.NoOpOC,
82
+ suggestedParams,
83
+ });
84
+ yield this.createUnsignedTx({ tx: act }, "Core.publishMessage", true);
85
+ }
86
+ /**
87
+ * Return the message fee for the core bridge
88
+ * @param client An Algodv2 client
89
+ * @param bridgeId The application ID of the core bridge
90
+ * @returns Promise with the message fee for the core bridge
91
+ */
92
+ async getMessageFee() {
93
+ const applInfoResp = await this.connection
94
+ .getApplicationByID(safeBigIntToNumber(this.coreAppId))
95
+ .do();
96
+ const appInfo = modelsv2.Application.from_obj_for_encoding(applInfoResp);
97
+ const val = appInfo.params.globalState?.find((kv) => kv.key === AlgorandWormholeCore.feeKey);
98
+ return val ? BigInt(val.value.uint) : 0n;
99
+ }
100
+ async parseTransaction(txId) {
101
+ const result = await this.connection.pendingTransactionInformation(txId).do();
102
+ const ptr = modelsv2.PendingTransactionResponse.from_obj_for_encoding(result);
103
+ return this.parseTx(ptr);
104
+ }
105
+ parseTx(ptr) {
106
+ const msgs = [];
107
+ if (ptr.innerTxns && ptr.innerTxns.length > 0) {
108
+ msgs.push(...ptr.innerTxns.flatMap((tx) => this.parseTx(tx)));
109
+ }
110
+ // Expect target is core app
111
+ if (BigInt(ptr.txn.txn.apid ?? 0) !== this.coreAppId)
112
+ return msgs;
113
+ // Expect logs
114
+ if (!ptr.logs || ptr.logs.length === 0)
115
+ return msgs;
116
+ // Expect publish messeage as first arg
117
+ const args = ptr.txn.txn.apaa ?? [];
118
+ if (args.length !== 3 ||
119
+ !encoding.bytes.equals(new Uint8Array(args[0]), AlgorandWormholeCore.publishMessage))
120
+ return msgs;
121
+ const sequence = encoding.bignum.decode(ptr.logs[0]);
122
+ const emitter = new AlgorandAddress(ptr.txn.txn.snd).toUniversalAddress();
123
+ msgs.push({ chain: this.chain, emitter, sequence });
124
+ return msgs;
125
+ }
126
+ /**
127
+ * Constructs opt in transactions
128
+ * @param client An Algodv2 client
129
+ * @param senderAddr Sender address
130
+ * @param appId Application ID
131
+ * @param storage StorageLogicSig
132
+ * @returns Address and array of TransactionSignerPairs
133
+ */
134
+ static async maybeCreateStorageTx(client, senderAddr, appId, storage, suggestedParams) {
135
+ const appAddr = getApplicationAddress(appId);
136
+ const storageAddress = storage.address();
137
+ const txs = [];
138
+ if (await StorageLogicSig.storageAccountExists(client, storageAddress, appId))
139
+ return { accounts: [storageAddress], txs };
140
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
141
+ // Pay the storage account some ALGO to min balance requirements
142
+ const seedTxn = makePaymentTxnWithSuggestedParamsFromObject({
143
+ from: senderAddr,
144
+ to: storageAddress,
145
+ amount: SEED_AMT,
146
+ suggestedParams,
147
+ });
148
+ seedTxn.fee = seedTxn.fee * 2;
149
+ txs.push({ tx: seedTxn });
150
+ // Opt in to the app and rekey to the app address that is using
151
+ // this as storage
152
+ const optinTxn = makeApplicationOptInTxnFromObject({
153
+ from: storageAddress,
154
+ appIndex: safeBigIntToNumber(appId),
155
+ rekeyTo: appAddr,
156
+ suggestedParams,
157
+ });
158
+ optinTxn.fee = 0;
159
+ txs.push({
160
+ tx: optinTxn,
161
+ signer: {
162
+ address: storage.address(),
163
+ signTxn: (txn) => Promise.resolve(signLogicSigTransaction(txn, storage).blob),
164
+ },
165
+ });
166
+ return {
167
+ accounts: [storageAddress],
168
+ txs,
169
+ };
170
+ }
171
+ /**
172
+ * Submits just the header of the VAA
173
+ * @param client AlgodV2 client
174
+ * @param bridgeId Application ID of the core bridge
175
+ * @param vaa The VAA (just the header is used)
176
+ * @param senderAddr Sending account address
177
+ * @param appid Application ID
178
+ * @returns Promise with current VAA state
179
+ */
180
+ static async submitVAAHeader(client, coreId, appid, vaa, senderAddr, suggestedParams) {
181
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
182
+ let txs = [];
183
+ // Get storage acct for message ID
184
+ const msgStorage = StorageLogicSig.forMessageId(appid, {
185
+ chain: vaa.emitterChain,
186
+ sequence: vaa.sequence,
187
+ emitter: vaa.emitterAddress,
188
+ });
189
+ const { accounts: seqAddr, txs: seqOptInTxs } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, appid, msgStorage, suggestedParams);
190
+ txs.push(...seqOptInTxs);
191
+ // Get storage account for Guardian set
192
+ const gsStorage = StorageLogicSig.forGuardianSet(coreId, vaa.guardianSet);
193
+ const { accounts: [storageAddr], txs: guardianOptInTxs, } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, coreId, gsStorage, suggestedParams);
194
+ txs.push(...guardianOptInTxs);
195
+ let accts = [...seqAddr, storageAddr];
196
+ // Get the Guardian keys
197
+ const keys = await StorageLogicSig.decodeLocalState(client, coreId, storageAddr);
198
+ // We don't pass the entire payload in but instead just pass it pre-digested. This gets around size
199
+ // limitations with lsigs AND reduces the cost of the entire operation on a congested network by reducing the
200
+ // bytes passed into the transaction
201
+ // This is a 2 pass digest
202
+ const digest = keccak256(vaa.hash);
203
+ // How many signatures can we process in a single txn... we can do 6!
204
+ // There are likely upwards of 19 signatures. So, we ned to split things up
205
+ const numSigs = vaa.signatures.length;
206
+ const numTxns = Math.ceil(numSigs / AlgorandWormholeCore.MAX_SIGS_PER_TXN);
207
+ const GuardianKeyLen = 20;
208
+ const lsa = new LogicSigAccount(AlgorandWormholeCore.ALGO_VERIFY);
209
+ for (let nt = 0; nt < numTxns; nt++) {
210
+ const step = nt * AlgorandWormholeCore.MAX_SIGS_PER_TXN;
211
+ const sigs = vaa.signatures.slice(step, step + AlgorandWormholeCore.MAX_SIGS_PER_TXN);
212
+ // The keyset is the set of Guardians that correspond
213
+ // to the current set of signatures in this loop.
214
+ // Each signature in 20 bytes and comes from decodeLocalState()
215
+ const arraySize = sigs.length * GuardianKeyLen;
216
+ const keySet = new Uint8Array(arraySize);
217
+ for (let i = 0; i < sigs.length; i++) {
218
+ // The first byte of the sig is the relative index of that signature in the signatures array
219
+ // Use that index to get the appropriate Guardian key
220
+ const sig = sigs[i];
221
+ const key = keys.slice(sig.guardianIndex * GuardianKeyLen + 1, (sig.guardianIndex + 1) * GuardianKeyLen + 1);
222
+ keySet.set(key, i * 20);
223
+ }
224
+ const appTxn = makeApplicationCallTxnFromObject({
225
+ appArgs: [
226
+ AlgorandWormholeCore.verifySigs,
227
+ encoding.bytes.concat(...sigs.map((s) => encoding.bytes.concat(new Uint8Array([s.guardianIndex]), s.signature.encode()))),
228
+ keySet,
229
+ digest,
230
+ ],
231
+ accounts: accts,
232
+ appIndex: safeBigIntToNumber(coreId),
233
+ from: AlgorandWormholeCore.ALGO_VERIFY_HASH,
234
+ onComplete: OnApplicationComplete.NoOpOC,
235
+ suggestedParams,
236
+ });
237
+ appTxn.fee = 0;
238
+ txs.push({
239
+ tx: appTxn,
240
+ signer: {
241
+ address: lsa.address(),
242
+ signTxn: (txn) => Promise.resolve(signLogicSigTransaction(txn, lsa).blob),
243
+ },
244
+ });
245
+ }
246
+ const appTxn = makeApplicationCallTxnFromObject({
247
+ appArgs: [AlgorandWormholeCore.verifyVaa, serialize(vaa)],
248
+ accounts: accts,
249
+ appIndex: safeBigIntToNumber(coreId),
250
+ from: senderAddr,
251
+ onComplete: OnApplicationComplete.NoOpOC,
252
+ suggestedParams,
253
+ });
254
+ appTxn.fee = appTxn.fee * (2 + numTxns);
255
+ txs.push({ tx: appTxn });
256
+ return { accounts: accts, txs };
257
+ }
258
+ createUnsignedTx(txReq, description, parallelizable = true) {
259
+ return new AlgorandUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
260
+ }
261
+ }
262
+ //# 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,6 @@
1
+ import { registerProtocol } from "@wormhole-foundation/sdk-connect";
2
+ import { AlgorandWormholeCore } from "./core";
3
+ registerProtocol("Algorand", "WormholeCore", AlgorandWormholeCore);
4
+ export * from "./core";
5
+ export * from "./storage";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAE9C,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;AAEnE,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}