@wormhole-foundation/sdk-algorand-core 0.5.0-alpha.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,57 @@
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
+ getGuardianSetIndex(): Promise<number>;
33
+ parseTransaction(txId: string): Promise<WormholeMessageId[]>;
34
+ parseMessages(txId: string): Promise<VAA[]>;
35
+ private parseTx;
36
+ /**
37
+ * Constructs opt in transactions
38
+ * @param client An Algodv2 client
39
+ * @param senderAddr Sender address
40
+ * @param appId Application ID
41
+ * @param storage StorageLogicSig
42
+ * @returns Address and array of TransactionSignerPairs
43
+ */
44
+ static maybeCreateStorageTx(client: Algodv2, senderAddr: string, appId: bigint, storage: LogicSigAccount, suggestedParams?: SuggestedParams): Promise<TransactionSet>;
45
+ /**
46
+ * Submits just the header of the VAA
47
+ * @param client AlgodV2 client
48
+ * @param bridgeId Application ID of the core bridge
49
+ * @param vaa The VAA (just the header is used)
50
+ * @param senderAddr Sending account address
51
+ * @param appid Application ID
52
+ * @returns Promise with current VAA state
53
+ */
54
+ static submitVAAHeader(client: Algodv2, coreId: bigint, appid: bigint, vaa: VAA, senderAddr: string, suggestedParams?: SuggestedParams): Promise<TransactionSet>;
55
+ private createUnsignedTx;
56
+ }
57
+ //# 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,EAMlB,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,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAItC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAY5D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAMjD,OAAO,CAAC,OAAO;IA2Cf;;;;;;;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,288 @@
1
+ import { createVAA, 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 getGuardianSetIndex() {
101
+ throw new Error("Not implemented");
102
+ }
103
+ async parseTransaction(txId) {
104
+ const result = await this.connection.pendingTransactionInformation(txId).do();
105
+ const ptr = modelsv2.PendingTransactionResponse.from_obj_for_encoding(result);
106
+ return this.parseTx(ptr).map((v) => {
107
+ return {
108
+ chain: v.emitterChain,
109
+ emitter: v.emitterAddress,
110
+ sequence: v.sequence,
111
+ };
112
+ });
113
+ }
114
+ async parseMessages(txId) {
115
+ const result = await this.connection.pendingTransactionInformation(txId).do();
116
+ const ptr = modelsv2.PendingTransactionResponse.from_obj_for_encoding(result);
117
+ return this.parseTx(ptr);
118
+ }
119
+ parseTx(ptr) {
120
+ const msgs = [];
121
+ if (ptr.innerTxns && ptr.innerTxns.length > 0) {
122
+ msgs.push(...ptr.innerTxns.flatMap((tx) => this.parseTx(tx)));
123
+ }
124
+ // Expect target is core app
125
+ if (BigInt(ptr.txn.txn.apid ?? 0) !== this.coreAppId)
126
+ return msgs;
127
+ // Expect logs
128
+ if (!ptr.logs || ptr.logs.length === 0)
129
+ return msgs;
130
+ // Expect publish messeage as first arg
131
+ const args = ptr.txn.txn.apaa ?? [];
132
+ if (args.length !== 3 ||
133
+ !encoding.bytes.equals(new Uint8Array(args[0]), AlgorandWormholeCore.publishMessage))
134
+ return msgs;
135
+ const sequence = encoding.bignum.decode(ptr.logs[0]);
136
+ const emitter = new AlgorandAddress(ptr.txn.txn.snd).toUniversalAddress();
137
+ const payload = new Uint8Array(args[1]);
138
+ const nonce = encoding.bignum.decode(args[2]);
139
+ msgs.push(createVAA("Uint8Array", {
140
+ emitterChain: this.chain,
141
+ emitterAddress: emitter,
142
+ sequence,
143
+ guardianSet: 0,
144
+ timestamp: 0,
145
+ consistencyLevel: 0,
146
+ nonce: Number(nonce),
147
+ payload,
148
+ signatures: [],
149
+ }));
150
+ return msgs;
151
+ }
152
+ /**
153
+ * Constructs opt in transactions
154
+ * @param client An Algodv2 client
155
+ * @param senderAddr Sender address
156
+ * @param appId Application ID
157
+ * @param storage StorageLogicSig
158
+ * @returns Address and array of TransactionSignerPairs
159
+ */
160
+ static async maybeCreateStorageTx(client, senderAddr, appId, storage, suggestedParams) {
161
+ const appAddr = getApplicationAddress(appId);
162
+ const storageAddress = storage.address();
163
+ const txs = [];
164
+ if (await StorageLogicSig.storageAccountExists(client, storageAddress, appId))
165
+ return { accounts: [storageAddress], txs };
166
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
167
+ // Pay the storage account some ALGO to min balance requirements
168
+ const seedTxn = makePaymentTxnWithSuggestedParamsFromObject({
169
+ from: senderAddr,
170
+ to: storageAddress,
171
+ amount: SEED_AMT,
172
+ suggestedParams,
173
+ });
174
+ seedTxn.fee = seedTxn.fee * 2;
175
+ txs.push({ tx: seedTxn });
176
+ // Opt in to the app and rekey to the app address that is using
177
+ // this as storage
178
+ const optinTxn = makeApplicationOptInTxnFromObject({
179
+ from: storageAddress,
180
+ appIndex: safeBigIntToNumber(appId),
181
+ rekeyTo: appAddr,
182
+ suggestedParams,
183
+ });
184
+ optinTxn.fee = 0;
185
+ txs.push({
186
+ tx: optinTxn,
187
+ signer: {
188
+ address: storage.address(),
189
+ signTxn: (txn) => Promise.resolve(signLogicSigTransaction(txn, storage).blob),
190
+ },
191
+ });
192
+ return {
193
+ accounts: [storageAddress],
194
+ txs,
195
+ };
196
+ }
197
+ /**
198
+ * Submits just the header of the VAA
199
+ * @param client AlgodV2 client
200
+ * @param bridgeId Application ID of the core bridge
201
+ * @param vaa The VAA (just the header is used)
202
+ * @param senderAddr Sending account address
203
+ * @param appid Application ID
204
+ * @returns Promise with current VAA state
205
+ */
206
+ static async submitVAAHeader(client, coreId, appid, vaa, senderAddr, suggestedParams) {
207
+ suggestedParams = suggestedParams ?? (await client.getTransactionParams().do());
208
+ let txs = [];
209
+ // Get storage acct for message ID
210
+ const msgStorage = StorageLogicSig.forMessageId(appid, {
211
+ chain: vaa.emitterChain,
212
+ sequence: vaa.sequence,
213
+ emitter: vaa.emitterAddress,
214
+ });
215
+ const { accounts: seqAddr, txs: seqOptInTxs } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, appid, msgStorage, suggestedParams);
216
+ txs.push(...seqOptInTxs);
217
+ // Get storage account for Guardian set
218
+ const gsStorage = StorageLogicSig.forGuardianSet(coreId, vaa.guardianSet);
219
+ const { accounts: [storageAddr], txs: guardianOptInTxs, } = await AlgorandWormholeCore.maybeCreateStorageTx(client, senderAddr, coreId, gsStorage, suggestedParams);
220
+ txs.push(...guardianOptInTxs);
221
+ let accts = [...seqAddr, storageAddr];
222
+ // Get the Guardian keys
223
+ const keys = await StorageLogicSig.decodeLocalState(client, coreId, storageAddr);
224
+ // We don't pass the entire payload in but instead just pass it pre-digested. This gets around size
225
+ // limitations with lsigs AND reduces the cost of the entire operation on a congested network by reducing the
226
+ // bytes passed into the transaction
227
+ // This is a 2 pass digest
228
+ const digest = keccak256(vaa.hash);
229
+ // How many signatures can we process in a single txn... we can do 6!
230
+ // There are likely upwards of 19 signatures. So, we ned to split things up
231
+ const numSigs = vaa.signatures.length;
232
+ const numTxns = Math.ceil(numSigs / AlgorandWormholeCore.MAX_SIGS_PER_TXN);
233
+ const GuardianKeyLen = 20;
234
+ const lsa = new LogicSigAccount(AlgorandWormholeCore.ALGO_VERIFY);
235
+ for (let nt = 0; nt < numTxns; nt++) {
236
+ const step = nt * AlgorandWormholeCore.MAX_SIGS_PER_TXN;
237
+ const sigs = vaa.signatures.slice(step, step + AlgorandWormholeCore.MAX_SIGS_PER_TXN);
238
+ // The keyset is the set of Guardians that correspond
239
+ // to the current set of signatures in this loop.
240
+ // Each signature in 20 bytes and comes from decodeLocalState()
241
+ const arraySize = sigs.length * GuardianKeyLen;
242
+ const keySet = new Uint8Array(arraySize);
243
+ for (let i = 0; i < sigs.length; i++) {
244
+ // The first byte of the sig is the relative index of that signature in the signatures array
245
+ // Use that index to get the appropriate Guardian key
246
+ const sig = sigs[i];
247
+ const key = keys.slice(sig.guardianIndex * GuardianKeyLen + 1, (sig.guardianIndex + 1) * GuardianKeyLen + 1);
248
+ keySet.set(key, i * 20);
249
+ }
250
+ const appTxn = makeApplicationCallTxnFromObject({
251
+ appArgs: [
252
+ AlgorandWormholeCore.verifySigs,
253
+ encoding.bytes.concat(...sigs.map((s) => encoding.bytes.concat(new Uint8Array([s.guardianIndex]), s.signature.encode()))),
254
+ keySet,
255
+ digest,
256
+ ],
257
+ accounts: accts,
258
+ appIndex: safeBigIntToNumber(coreId),
259
+ from: AlgorandWormholeCore.ALGO_VERIFY_HASH,
260
+ onComplete: OnApplicationComplete.NoOpOC,
261
+ suggestedParams,
262
+ });
263
+ appTxn.fee = 0;
264
+ txs.push({
265
+ tx: appTxn,
266
+ signer: {
267
+ address: lsa.address(),
268
+ signTxn: (txn) => Promise.resolve(signLogicSigTransaction(txn, lsa).blob),
269
+ },
270
+ });
271
+ }
272
+ const appTxn = makeApplicationCallTxnFromObject({
273
+ appArgs: [AlgorandWormholeCore.verifyVaa, serialize(vaa)],
274
+ accounts: accts,
275
+ appIndex: safeBigIntToNumber(coreId),
276
+ from: senderAddr,
277
+ onComplete: OnApplicationComplete.NoOpOC,
278
+ suggestedParams,
279
+ });
280
+ appTxn.fee = appTxn.fee * (2 + numTxns);
281
+ txs.push({ tx: appTxn });
282
+ return { accounts: accts, txs };
283
+ }
284
+ createUnsignedTx(txReq, description, parallelizable = true) {
285
+ return new AlgorandUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
286
+ }
287
+ }
288
+ //# 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"}