@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.
- package/dist/cjs/core.d.ts +55 -0
- package/dist/cjs/core.d.ts.map +1 -0
- package/dist/cjs/core.js +266 -0
- package/dist/cjs/core.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/storage.d.ts +56 -0
- package/dist/cjs/storage.d.ts.map +1 -0
- package/dist/cjs/storage.js +237 -0
- package/dist/cjs/storage.js.map +1 -0
- package/dist/esm/core.d.ts +55 -0
- package/dist/esm/core.d.ts.map +1 -0
- package/dist/esm/core.js +262 -0
- package/dist/esm/core.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/storage.d.ts +56 -0
- package/dist/esm/storage.d.ts.map +1 -0
- package/dist/esm/storage.js +234 -0
- package/dist/esm/storage.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +48 -0
|
@@ -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"}
|
package/dist/cjs/core.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|