@wormhole-foundation/sdk-algorand-tokenbridge 4.22.0 → 5.0.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wormhole-foundation/sdk-algorand-tokenbridge",
3
- "version": "4.22.0",
3
+ "version": "5.0.0-beta.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wormhole-foundation/wormhole-sdk-ts.git"
@@ -13,13 +13,12 @@
13
13
  "test": "tests"
14
14
  },
15
15
  "license": "Apache-2.0",
16
- "main": "./dist/cjs/index.js",
17
- "types": "./dist/cjs/index.d.ts",
16
+ "main": "./dist/esm/index.js",
17
+ "types": "./dist/esm/index.d.ts",
18
18
  "module": "./dist/esm/index.js",
19
19
  "description": "SDK for Algorand, used in conjunction with @wormhole-foundation/sdk",
20
20
  "files": [
21
- "dist/esm",
22
- "dist/cjs"
21
+ "dist/esm"
23
22
  ],
24
23
  "keywords": [
25
24
  "wormhole",
@@ -29,47 +28,30 @@
29
28
  "algorand"
30
29
  ],
31
30
  "engines": {
32
- "node": ">=16"
31
+ "node": ">=20.19"
33
32
  },
34
33
  "sideEffects": [
35
- "./dist/cjs/index.js",
36
34
  "./dist/esm/index.js"
37
35
  ],
38
36
  "scripts": {
39
- "build:cjs": "tsc -p ./tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
40
37
  "build:esm": "tsc -p ./tsconfig.esm.json",
41
- "build": "npm run build:esm && npm run build:cjs",
38
+ "build": "npm run build:esm",
42
39
  "rebuild": "npm run clean && npm run build",
43
40
  "clean": "rm -rf ./dist && rm -rf ./.turbo",
44
41
  "lint": "npm run prettier && eslint --fix ./src --ext .ts",
45
42
  "prettier": "prettier --write ./src"
46
43
  },
47
44
  "dependencies": {
48
- "@wormhole-foundation/sdk-connect": "4.22.0",
49
- "@wormhole-foundation/sdk-algorand": "4.22.0",
50
- "@wormhole-foundation/sdk-algorand-core": "4.22.0"
45
+ "@wormhole-foundation/sdk-connect": "5.0.0-beta.0",
46
+ "@wormhole-foundation/sdk-algorand": "5.0.0-beta.0",
47
+ "@wormhole-foundation/sdk-algorand-core": "5.0.0-beta.0"
51
48
  },
52
49
  "type": "module",
53
50
  "exports": {
54
51
  ".": {
55
- "react-native": {
56
- "import": "./dist/esm/index.js",
57
- "require": "./dist/cjs/index.js",
58
- "types": "./dist/cjs/index.d.ts",
59
- "default": "./dist/cjs/index.js"
60
- },
61
- "import": {
62
- "types": "./dist/esm/index.d.ts",
63
- "default": "./dist/esm/index.js"
64
- },
65
- "require": {
66
- "types": "./dist/cjs/index.d.ts",
67
- "default": "./dist/cjs/index.js"
68
- },
69
- "default": {
70
- "types": "./dist/cjs/index.d.ts",
71
- "default": "./dist/cjs/index.js"
72
- }
52
+ "types": "./dist/esm/index.d.ts",
53
+ "import": "./dist/esm/index.js",
54
+ "default": "./dist/esm/index.js"
73
55
  }
74
56
  }
75
57
  }
@@ -1,2 +0,0 @@
1
- export * from "./tokenBridge.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,kBAAkB,CAAC"}
package/dist/cjs/index.js DELETED
@@ -1,22 +0,0 @@
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 sdk_algorand_1 = require("@wormhole-foundation/sdk-algorand");
19
- const tokenBridge_js_1 = require("./tokenBridge.js");
20
- (0, sdk_connect_1.registerProtocol)(sdk_algorand_1._platform, "TokenBridge", tokenBridge_js_1.AlgorandTokenBridge);
21
- __exportStar(require("./tokenBridge.js"), exports);
22
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAoE;AACpE,oEAA8D;AAC9D,qDAAuD;AAEvD,IAAA,8BAAgB,EAAC,wBAAS,EAAE,aAAa,EAAE,oCAAmB,CAAC,CAAC;AAEhE,mDAAiC"}
@@ -1 +0,0 @@
1
- {"type":"commonjs"}
@@ -1,51 +0,0 @@
1
- import type { AccountAddress, Chain, ChainAddress, ChainId, ChainsConfig, Contracts, NativeAddress, Network, Platform, TokenAddress, TokenBridge, TokenId } from "@wormhole-foundation/sdk-connect";
2
- import { UniversalAddress } from "@wormhole-foundation/sdk-connect";
3
- import type { AlgorandChains, AnyAlgorandAddress } from "@wormhole-foundation/sdk-algorand";
4
- import { AlgorandUnsignedTransaction } from "@wormhole-foundation/sdk-algorand";
5
- import { AlgorandWormholeCore } from "@wormhole-foundation/sdk-algorand-core";
6
- import type { Algodv2, SuggestedParams } from "algosdk";
7
- import { ABIMethod } from "algosdk";
8
- import "@wormhole-foundation/sdk-algorand-core";
9
- export declare const TransferMethodSelector: ABIMethod;
10
- export declare class AlgorandTokenBridge<N extends Network, C extends AlgorandChains> implements TokenBridge<N, C> {
11
- readonly network: N;
12
- readonly chain: C;
13
- readonly connection: Algodv2;
14
- readonly contracts: Contracts;
15
- readonly chainId: ChainId;
16
- readonly coreBridge: AlgorandWormholeCore<N, C>;
17
- readonly coreAppId: bigint;
18
- readonly coreAppAddress: string;
19
- readonly tokenBridgeAppId: bigint;
20
- readonly tokenBridgeAddress: string;
21
- static sendTransfer: Uint8Array;
22
- static attestToken: Uint8Array;
23
- static noop: Uint8Array;
24
- static optIn: Uint8Array;
25
- static completeTransfer: Uint8Array;
26
- static receiveAttest: Uint8Array;
27
- constructor(network: N, chain: C, connection: Algodv2, contracts: Contracts);
28
- static fromRpc<N extends Network>(provider: Algodv2, config: ChainsConfig<N, Platform>): Promise<AlgorandTokenBridge<N, AlgorandChains>>;
29
- isWrappedAsset(token: TokenAddress<C>): Promise<boolean>;
30
- getOriginalAsset(token: TokenAddress<C>): Promise<TokenId>;
31
- getTokenUniversalAddress(token: NativeAddress<C>): Promise<UniversalAddress>;
32
- getTokenNativeAddress(originChain: Chain, token: UniversalAddress): Promise<NativeAddress<C>>;
33
- getWrappedAsset(token: TokenId<Chain>): Promise<NativeAddress<C>>;
34
- hasWrappedAsset(token: TokenId<Chain>): Promise<boolean>;
35
- getWrappedNative(): Promise<NativeAddress<C>>;
36
- isTransferCompleted(vaa: TokenBridge.TransferVAA): Promise<boolean>;
37
- createAttestation(token: TokenAddress<C>, payer?: AnyAlgorandAddress): AsyncGenerator<AlgorandUnsignedTransaction<N, C>, void, unknown>;
38
- submitAttestation(vaa: TokenBridge.AttestVAA, sender?: AnyAlgorandAddress, suggestedParams?: SuggestedParams): AsyncGenerator<AlgorandUnsignedTransaction<N, C>>;
39
- transfer(sender: AccountAddress<C>, recipient: ChainAddress<C>, token: TokenAddress<C>, amount: bigint, payload?: Uint8Array): AsyncGenerator<AlgorandUnsignedTransaction<N, C>>;
40
- redeem(sender: AnyAlgorandAddress, vaa: TokenBridge.TransferVAA, unwrapNative?: boolean, suggestedParams?: SuggestedParams): AsyncGenerator<AlgorandUnsignedTransaction<N, C>, void, unknown>;
41
- /**
42
- * Checks if the asset has been opted in by the receiver
43
- * @param client Algodv2 client
44
- * @param asset Algorand asset index
45
- * @param receiver Account address
46
- * @returns Promise with True if the asset was opted in, False otherwise
47
- */
48
- static isOptedInToAsset(client: Algodv2, address: string, asset: number): Promise<boolean>;
49
- private createUnsignedTx;
50
- }
51
- //# sourceMappingURL=tokenBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenBridge.d.ts","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"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"}
@@ -1,496 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AlgorandTokenBridge = exports.TransferMethodSelector = void 0;
4
- const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
5
- const sdk_algorand_1 = require("@wormhole-foundation/sdk-algorand");
6
- const sdk_algorand_core_1 = require("@wormhole-foundation/sdk-algorand-core");
7
- const algosdk_1 = require("algosdk");
8
- require("@wormhole-foundation/sdk-algorand-core");
9
- exports.TransferMethodSelector = algosdk_1.ABIMethod.fromSignature("portal_transfer(byte[])byte[]");
10
- class AlgorandTokenBridge {
11
- network;
12
- chain;
13
- connection;
14
- contracts;
15
- chainId;
16
- coreBridge;
17
- coreAppId;
18
- coreAppAddress;
19
- tokenBridgeAppId;
20
- tokenBridgeAddress;
21
- static sendTransfer = sdk_connect_1.encoding.bytes.encode("sendTransfer");
22
- static attestToken = sdk_connect_1.encoding.bytes.encode("attestToken");
23
- static noop = sdk_connect_1.encoding.bytes.encode("nop");
24
- static optIn = sdk_connect_1.encoding.bytes.encode("optin");
25
- static completeTransfer = sdk_connect_1.encoding.bytes.encode("completeTransfer");
26
- static receiveAttest = sdk_connect_1.encoding.bytes.encode("receiveAttest");
27
- constructor(network, chain, connection, contracts) {
28
- this.network = network;
29
- this.chain = chain;
30
- this.connection = connection;
31
- this.contracts = contracts;
32
- this.chainId = (0, sdk_connect_1.toChainId)(chain);
33
- if (!contracts.coreBridge) {
34
- throw new Error(`Core contract address for chain ${chain} not found`);
35
- }
36
- const core = BigInt(contracts.coreBridge);
37
- this.coreAppId = core;
38
- this.coreAppAddress = (0, algosdk_1.getApplicationAddress)(core);
39
- this.coreBridge = new sdk_algorand_core_1.AlgorandWormholeCore(network, chain, connection, contracts);
40
- if (!contracts.tokenBridge) {
41
- throw new Error(`TokenBridge contract address for chain ${chain} not found`);
42
- }
43
- const tokenBridge = BigInt(contracts.tokenBridge);
44
- this.tokenBridgeAppId = tokenBridge;
45
- this.tokenBridgeAddress = (0, algosdk_1.getApplicationAddress)(tokenBridge);
46
- }
47
- static async fromRpc(provider, config) {
48
- const [network, chain] = await sdk_algorand_1.AlgorandPlatform.chainFromRpc(provider);
49
- const conf = config[chain];
50
- if (conf.network !== network)
51
- throw new Error(`Network mismatch: ${conf.network} != ${network}`);
52
- return new AlgorandTokenBridge(network, chain, provider, conf.contracts);
53
- }
54
- // Checks a native address to see if it's a wrapped version
55
- async isWrappedAsset(token) {
56
- const assetId = new sdk_algorand_1.AlgorandAddress(token).toInt();
57
- if (assetId === 0)
58
- return false;
59
- const assetInfoResp = await this.connection.getAssetByID(assetId).do();
60
- const asset = algosdk_1.modelsv2.Asset.from_obj_for_encoding(assetInfoResp);
61
- const creatorAddr = asset.params.creator;
62
- const creatorAcctInfoResp = await this.connection
63
- .accountInformation(creatorAddr)
64
- .exclude("all")
65
- .do();
66
- const creator = algosdk_1.modelsv2.Account.from_obj_for_encoding(creatorAcctInfoResp);
67
- const isWrapped = creator?.authAddr === this.tokenBridgeAddress;
68
- return isWrapped;
69
- }
70
- // Returns the original asset with its foreign chain
71
- async getOriginalAsset(token) {
72
- const assetId = new sdk_algorand_1.AlgorandAddress(token).toInt();
73
- const assetInfoResp = await this.connection.getAssetByID(assetId).do();
74
- const assetInfo = algosdk_1.modelsv2.Asset.from_obj_for_encoding(assetInfoResp);
75
- const decodedLocalState = await sdk_algorand_core_1.StorageLogicSig.decodeLocalState(this.connection, this.tokenBridgeAppId, assetInfo.params.creator);
76
- if (decodedLocalState.length < 94)
77
- throw new Error("Invalid local state data");
78
- const chainBytes = decodedLocalState.slice(92, 94);
79
- const chain = (0, sdk_connect_1.toChain)(sdk_connect_1.encoding.bignum.decode(chainBytes));
80
- const address = new sdk_connect_1.UniversalAddress(decodedLocalState.slice(60, 60 + 32));
81
- return { chain, address };
82
- }
83
- async getTokenUniversalAddress(token) {
84
- return new sdk_algorand_1.AlgorandAddress(token).toUniversalAddress();
85
- }
86
- async getTokenNativeAddress(originChain, token) {
87
- return new sdk_algorand_1.AlgorandAddress(token).toNative();
88
- }
89
- // Returns the address of the native version of this asset
90
- async getWrappedAsset(token) {
91
- if ((0, sdk_connect_1.isNative)(token.address))
92
- throw new Error("native asset cannot be a wrapped asset");
93
- const storageAccount = sdk_algorand_core_1.StorageLogicSig.forWrappedAsset(this.tokenBridgeAppId, token);
94
- const data = await sdk_algorand_core_1.StorageLogicSig.decodeLocalState(this.connection, this.tokenBridgeAppId, storageAccount.address());
95
- if (data.length < 8)
96
- throw new Error("Invalid wrapped asset data");
97
- const nativeAddress = (0, sdk_connect_1.toNative)(this.chain, sdk_connect_1.encoding.bignum.decode(data.slice(0, 8)).toString());
98
- return nativeAddress;
99
- }
100
- // Checks if a wrapped version exists
101
- async hasWrappedAsset(token) {
102
- try {
103
- await this.getWrappedAsset(token);
104
- return true;
105
- }
106
- catch { }
107
- return false;
108
- }
109
- async getWrappedNative() {
110
- return (0, sdk_connect_1.toNative)(this.chain, "0");
111
- }
112
- async isTransferCompleted(vaa) {
113
- const messageStorage = sdk_algorand_core_1.StorageLogicSig.forMessageId(this.tokenBridgeAppId, {
114
- sequence: vaa.sequence,
115
- chain: vaa.emitterChain,
116
- emitter: vaa.emitterAddress,
117
- });
118
- try {
119
- return await sdk_algorand_core_1.StorageLogicSig.checkBitsSet(this.connection, this.tokenBridgeAppId, messageStorage.address(), vaa.sequence);
120
- }
121
- catch { }
122
- return false;
123
- }
124
- // Creates a Token Attestation VAA containing metadata about
125
- // the token that may be submitted to a Token Bridge on another chain
126
- // to allow it to create a wrapped version of the token
127
- async *createAttestation(token, payer) {
128
- if (!payer)
129
- throw new Error("Payer required to create attestation");
130
- const senderAddr = new sdk_algorand_1.AlgorandAddress(payer).toString();
131
- const assetId = new sdk_algorand_1.AlgorandAddress(token).toInt();
132
- const txs = [];
133
- const suggestedParams = await this.connection.getTransactionParams().do();
134
- const tbs = sdk_algorand_core_1.StorageLogicSig.forEmitter(this.coreAppId, new sdk_algorand_1.AlgorandAddress(this.tokenBridgeAddress).toUint8Array());
135
- const { accounts: [emitterAddr], txs: emitterOptInTxs, } = await sdk_algorand_core_1.AlgorandWormholeCore.maybeCreateStorageTx(this.connection, senderAddr, this.coreAppId, tbs, suggestedParams);
136
- txs.push(...emitterOptInTxs);
137
- let creatorAddr = "";
138
- let creatorAcctInfo;
139
- if (assetId !== 0) {
140
- const assetInfoResp = await this.connection.getAssetByID(assetId).do();
141
- const assetInfo = algosdk_1.modelsv2.Asset.from_obj_for_encoding(assetInfoResp);
142
- const creatorAcctInfoResp = await this.connection
143
- .accountInformation(assetInfo.params.creator)
144
- .do();
145
- creatorAcctInfo = algosdk_1.modelsv2.Account.from_obj_for_encoding(creatorAcctInfoResp);
146
- if (creatorAcctInfo.authAddr === this.tokenBridgeAddress.toString()) {
147
- throw new Error("Cannot re-attest wormhole assets");
148
- }
149
- }
150
- const nativeStorageAcct = sdk_algorand_core_1.StorageLogicSig.forNativeAsset(this.tokenBridgeAppId, BigInt(assetId));
151
- const txns = await sdk_algorand_core_1.AlgorandWormholeCore.maybeCreateStorageTx(this.connection, senderAddr, this.tokenBridgeAppId, nativeStorageAcct);
152
- creatorAddr = txns.accounts[0];
153
- txs.push(...txns.txs);
154
- const firstTxn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
155
- from: senderAddr,
156
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
157
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
158
- appArgs: [AlgorandTokenBridge.noop],
159
- suggestedParams,
160
- });
161
- txs.push({ tx: firstTxn });
162
- const mfee = await this.coreBridge.getMessageFee();
163
- if (mfee > BigInt(0)) {
164
- const feeTxn = (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
165
- from: senderAddr,
166
- suggestedParams,
167
- to: this.tokenBridgeAddress,
168
- amount: mfee,
169
- });
170
- txs.push({ tx: feeTxn });
171
- }
172
- let accts = [emitterAddr, creatorAddr, this.coreAppAddress];
173
- if (creatorAcctInfo) {
174
- accts.push(creatorAcctInfo.address);
175
- }
176
- let appTxn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
177
- appArgs: [AlgorandTokenBridge.attestToken, sdk_connect_1.encoding.bignum.toBytes(assetId, 8)],
178
- accounts: accts,
179
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
180
- foreignApps: [(0, sdk_algorand_1.safeBigIntToNumber)(this.coreAppId)],
181
- foreignAssets: [assetId],
182
- from: senderAddr,
183
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
184
- suggestedParams,
185
- });
186
- if (mfee > BigInt(0)) {
187
- appTxn.fee *= 3;
188
- }
189
- else {
190
- appTxn.fee *= 2;
191
- }
192
- txs.push({ tx: appTxn });
193
- for (const utxn of txs) {
194
- yield this.createUnsignedTx(utxn, "TokenBridge.createAttestation", true);
195
- }
196
- }
197
- // Submits the Token Attestation VAA to the Token Bridge
198
- // to create the wrapped token represented by the data in the VAA
199
- async *submitAttestation(vaa, sender, suggestedParams) {
200
- if (!sender)
201
- throw new Error("Sender required to submit attestation");
202
- if (!suggestedParams)
203
- suggestedParams = await this.connection.getTransactionParams().do();
204
- const senderAddr = sender.toString();
205
- const tokenStorage = sdk_algorand_core_1.StorageLogicSig.forWrappedAsset(this.tokenBridgeAppId, vaa.payload.token);
206
- const tokenStorageAddress = tokenStorage.address();
207
- const txs = [];
208
- const foreignAssets = [];
209
- const data = await sdk_algorand_core_1.StorageLogicSig.decodeLocalState(this.connection, this.tokenBridgeAppId, tokenStorageAddress);
210
- if (data.length > 8) {
211
- foreignAssets.push(new sdk_algorand_1.AlgorandAddress(data.slice(0, 8)).toInt());
212
- }
213
- txs.push({
214
- tx: (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
215
- from: senderAddr,
216
- to: tokenStorageAddress,
217
- amount: 100000,
218
- suggestedParams,
219
- }),
220
- });
221
- let buf = new Uint8Array(1);
222
- buf[0] = 0x01;
223
- txs.push({
224
- tx: (0, algosdk_1.makeApplicationCallTxnFromObject)({
225
- appArgs: [AlgorandTokenBridge.noop, buf],
226
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
227
- from: senderAddr,
228
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
229
- suggestedParams,
230
- }),
231
- });
232
- buf = new Uint8Array(1);
233
- buf[0] = 0x02;
234
- txs.push({
235
- tx: (0, algosdk_1.makeApplicationCallTxnFromObject)({
236
- appArgs: [AlgorandTokenBridge.noop, buf],
237
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
238
- from: senderAddr,
239
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
240
- suggestedParams,
241
- }),
242
- });
243
- txs.push({
244
- tx: (0, algosdk_1.makeApplicationCallTxnFromObject)({
245
- accounts: [],
246
- appArgs: [AlgorandTokenBridge.receiveAttest, (0, sdk_connect_1.serialize)(vaa)],
247
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
248
- foreignAssets: foreignAssets,
249
- from: senderAddr,
250
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
251
- suggestedParams,
252
- }),
253
- });
254
- txs[txs.length - 1].tx.fee = txs[txs.length - 1].tx.fee * 2;
255
- for (const utxn of txs) {
256
- yield this.createUnsignedTx(utxn, "TokenBridge.submitAttestation", true);
257
- }
258
- }
259
- async *transfer(sender, recipient, token, amount, payload) {
260
- const senderAddr = sender.toString();
261
- const assetId = (0, sdk_connect_1.isNative)(token) ? 0 : new sdk_algorand_1.AlgorandAddress(token).toInt();
262
- const qty = amount;
263
- const chainId = (0, sdk_connect_1.toChainId)(recipient.chain);
264
- const receiver = recipient.address.toUniversalAddress().toUint8Array();
265
- const suggestedParams = await this.connection.getTransactionParams().do();
266
- const fee = BigInt(0);
267
- const tbs = sdk_algorand_core_1.StorageLogicSig.fromData({
268
- appId: this.coreAppId,
269
- appAddress: (0, algosdk_1.decodeAddress)(this.coreAppAddress).publicKey,
270
- idx: BigInt(0),
271
- address: (0, algosdk_1.decodeAddress)(this.tokenBridgeAddress).publicKey,
272
- });
273
- const txs = [];
274
- const { accounts: [emitterAddr], txs: emitterOptInTxs, } = await sdk_algorand_core_1.AlgorandWormholeCore.maybeCreateStorageTx(this.connection, senderAddr, this.coreAppId, tbs, suggestedParams);
275
- txs.push(...emitterOptInTxs);
276
- // Check that the auth address of the creator is the token bridge
277
- let creator = "";
278
- let creatorAcct;
279
- let wormhole = false;
280
- if (assetId !== 0) {
281
- const assetInfoResp = await this.connection.getAssetByID(assetId).do();
282
- const asset = algosdk_1.modelsv2.Asset.from_obj_for_encoding(assetInfoResp);
283
- creator = asset.params.creator;
284
- const creatorAcctInfoResp = await this.connection.accountInformation(creator).do();
285
- creatorAcct = algosdk_1.modelsv2.Account.from_obj_for_encoding(creatorAcctInfoResp);
286
- wormhole = creatorAcct.authAddr === this.tokenBridgeAddress.toString();
287
- }
288
- const msgFee = await this.coreBridge.getMessageFee();
289
- if (msgFee > 0)
290
- txs.push({
291
- tx: (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
292
- from: senderAddr,
293
- to: this.tokenBridgeAddress,
294
- amount: msgFee,
295
- suggestedParams,
296
- }),
297
- });
298
- if (!wormhole) {
299
- const nativeStorageAccount = sdk_algorand_core_1.StorageLogicSig.forNativeAsset(this.tokenBridgeAppId, BigInt(assetId));
300
- const { accounts: [address], txs, } = await sdk_algorand_core_1.AlgorandWormholeCore.maybeCreateStorageTx(this.connection, senderAddr, this.tokenBridgeAppId, nativeStorageAccount, suggestedParams);
301
- creator = address;
302
- txs.push(...txs);
303
- }
304
- if (assetId !== 0 &&
305
- !(await AlgorandTokenBridge.isOptedInToAsset(this.connection, creator, assetId))) {
306
- // Looks like we need to optin
307
- const payTxn = (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
308
- from: senderAddr,
309
- to: creator,
310
- amount: 100000,
311
- suggestedParams,
312
- });
313
- // The tokenid app needs to do the optin since it has signature authority
314
- let txn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
315
- from: senderAddr,
316
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
317
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
318
- appArgs: [AlgorandTokenBridge.optIn, (0, algosdk_1.bigIntToBytes)(assetId, 8)],
319
- foreignAssets: [assetId],
320
- accounts: [creator],
321
- suggestedParams,
322
- });
323
- txn.fee *= 2;
324
- txs.unshift(...[{ tx: payTxn }, { tx: txn }]);
325
- }
326
- const t = (0, algosdk_1.makeApplicationCallTxnFromObject)({
327
- from: senderAddr,
328
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
329
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
330
- appArgs: [AlgorandTokenBridge.noop],
331
- suggestedParams,
332
- });
333
- txs.push({ tx: t });
334
- let accounts = [];
335
- if (assetId === 0) {
336
- const t = (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({
337
- from: senderAddr,
338
- to: creator,
339
- amount: qty,
340
- suggestedParams,
341
- });
342
- txs.push({ tx: t });
343
- accounts = [emitterAddr, creator, creator];
344
- }
345
- else {
346
- const t = (0, algosdk_1.makeAssetTransferTxnWithSuggestedParamsFromObject)({
347
- from: senderAddr,
348
- to: creator,
349
- amount: qty,
350
- assetIndex: assetId,
351
- suggestedParams,
352
- });
353
- txs.push({ tx: t });
354
- accounts = creatorAcct?.address
355
- ? [emitterAddr, creator, creatorAcct.address]
356
- : [emitterAddr, creator];
357
- }
358
- const args = [
359
- AlgorandTokenBridge.sendTransfer,
360
- sdk_connect_1.encoding.bignum.toBytes(assetId, 8),
361
- sdk_connect_1.encoding.bignum.toBytes(qty, 8),
362
- receiver,
363
- sdk_connect_1.encoding.bignum.toBytes(chainId, 8),
364
- sdk_connect_1.encoding.bignum.toBytes(fee, 8),
365
- ];
366
- if (payload)
367
- args.push(payload);
368
- const acTxn = (0, algosdk_1.makeApplicationCallTxnFromObject)({
369
- from: senderAddr,
370
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
371
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
372
- appArgs: args,
373
- foreignApps: [(0, sdk_algorand_1.safeBigIntToNumber)(this.coreAppId)],
374
- foreignAssets: [assetId],
375
- accounts: accounts,
376
- suggestedParams,
377
- });
378
- acTxn.fee *= 2;
379
- txs.push({ tx: acTxn });
380
- for (const utxn of txs) {
381
- yield this.createUnsignedTx(utxn, "TokenBridge.transfer", true);
382
- }
383
- }
384
- async *redeem(sender, vaa, unwrapNative = true, suggestedParams) {
385
- if (!suggestedParams)
386
- suggestedParams = await this.connection.getTransactionParams().do();
387
- const senderAddr = new sdk_algorand_1.AlgorandAddress(sender).toString();
388
- const { accounts, txs } = await sdk_algorand_core_1.AlgorandWormholeCore.submitVAAHeader(this.connection, this.coreAppId, this.tokenBridgeAppId, vaa, senderAddr);
389
- // A critical routing step occurs here
390
- let tokenStorage = undefined;
391
- let tokenStorageAddress = "";
392
- let foreignAssets = [];
393
- let assetId = 0;
394
- if (vaa.payload.token.chain !== this.chain) {
395
- // If the token is from elsewhere we get the storage lsig for a wrapped asset
396
- tokenStorage = sdk_algorand_core_1.StorageLogicSig.forWrappedAsset(this.tokenBridgeAppId, vaa.payload.token);
397
- tokenStorageAddress = tokenStorage.address();
398
- const data = await sdk_algorand_core_1.StorageLogicSig.decodeLocalState(this.connection, this.tokenBridgeAppId, tokenStorageAddress);
399
- assetId = new sdk_algorand_1.AlgorandAddress(data.slice(0, 8)).toInt();
400
- }
401
- else {
402
- // Otherwise we get the storage lsig for a native asset, including ALGO (0)
403
- const nativeTokenId = new sdk_algorand_1.AlgorandAddress(vaa.payload.token.address).toBigInt();
404
- tokenStorage = sdk_algorand_core_1.StorageLogicSig.forNativeAsset(this.tokenBridgeAppId, nativeTokenId);
405
- tokenStorageAddress = tokenStorage.address();
406
- assetId = (0, sdk_algorand_1.safeBigIntToNumber)(nativeTokenId);
407
- }
408
- accounts.push(tokenStorageAddress);
409
- let appId = 0;
410
- let receiverAddress = "";
411
- if (vaa.payloadName === "TransferWithPayload") {
412
- appId = new sdk_algorand_1.AlgorandAddress(vaa.payload.to.address).toInt();
413
- receiverAddress = (0, algosdk_1.getApplicationAddress)(appId);
414
- }
415
- else {
416
- receiverAddress = new sdk_algorand_1.AlgorandAddress(vaa.payload.to.address.toUint8Array()).toString();
417
- }
418
- accounts.push(receiverAddress);
419
- if (assetId !== 0) {
420
- foreignAssets.push(assetId);
421
- if (!(await AlgorandTokenBridge.isOptedInToAsset(this.connection, receiverAddress, assetId))) {
422
- if (senderAddr != receiverAddress) {
423
- throw new Error("Cannot ASA optin for somebody else (asset " + assetId.toString() + ")");
424
- }
425
- // Push asset opt in to the front
426
- txs.unshift({
427
- tx: (0, algosdk_1.makeAssetTransferTxnWithSuggestedParamsFromObject)({
428
- amount: 0,
429
- assetIndex: assetId,
430
- from: senderAddr,
431
- suggestedParams,
432
- to: senderAddr,
433
- }),
434
- });
435
- }
436
- }
437
- const appCallObj = {
438
- accounts: accounts,
439
- appArgs: [AlgorandTokenBridge.completeTransfer, (0, sdk_connect_1.serialize)(vaa)],
440
- appIndex: (0, sdk_algorand_1.safeBigIntToNumber)(this.tokenBridgeAppId),
441
- foreignAssets: foreignAssets,
442
- from: senderAddr,
443
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
444
- suggestedParams,
445
- };
446
- txs.push({
447
- tx: (0, algosdk_1.makeApplicationCallTxnFromObject)(appCallObj),
448
- });
449
- // We need to cover the inner transactions
450
- txs[txs.length - 1].tx.fee =
451
- txs[txs.length - 1].tx.fee *
452
- (vaa.payloadName === "Transfer" && vaa.payload.fee !== undefined && vaa.payload.fee === 0n
453
- ? 2
454
- : 3);
455
- if (vaa.payloadName === "TransferWithPayload") {
456
- txs[txs.length - 1].tx.appForeignApps = [appId];
457
- txs.push({
458
- tx: (0, algosdk_1.makeApplicationCallTxnFromObject)({
459
- appArgs: [
460
- exports.TransferMethodSelector.getSelector(),
461
- exports.TransferMethodSelector.args[0].type.encode((0, sdk_connect_1.serialize)(vaa)),
462
- ],
463
- appIndex: appId,
464
- foreignAssets: foreignAssets,
465
- from: senderAddr,
466
- onComplete: algosdk_1.OnApplicationComplete.NoOpOC,
467
- suggestedParams,
468
- }),
469
- });
470
- }
471
- for (const utxn of txs) {
472
- yield this.createUnsignedTx(utxn, "TokenBridge.redeem", true);
473
- }
474
- }
475
- /**
476
- * Checks if the asset has been opted in by the receiver
477
- * @param client Algodv2 client
478
- * @param asset Algorand asset index
479
- * @param receiver Account address
480
- * @returns Promise with True if the asset was opted in, False otherwise
481
- */
482
- static async isOptedInToAsset(client, address, asset) {
483
- try {
484
- const acctInfoResp = await client.accountAssetInformation(address, asset).do();
485
- const acctInfo = algosdk_1.modelsv2.AccountAssetResponse.from_obj_for_encoding(acctInfoResp);
486
- return (acctInfo.assetHolding?.amount ?? 0) > 0;
487
- }
488
- catch { }
489
- return false;
490
- }
491
- createUnsignedTx(txReq, description, parallelizable = true) {
492
- return new sdk_algorand_1.AlgorandUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
493
- }
494
- }
495
- exports.AlgorandTokenBridge = AlgorandTokenBridge;
496
- //# sourceMappingURL=tokenBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenBridge.js","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"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"}