algosdk 1.10.1 → 1.13.0-beta.1
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/README.md +17 -6
- package/dist/browser/algosdk.min.js +1 -1
- package/dist/browser/algosdk.min.js.map +1 -1
- package/dist/cjs/src/abi/abi_type.js +665 -0
- package/dist/cjs/src/abi/abi_type.js.map +1 -0
- package/dist/cjs/src/abi/contract.js +25 -0
- package/dist/cjs/src/abi/contract.js.map +1 -0
- package/dist/cjs/src/abi/index.js +17 -0
- package/dist/cjs/src/abi/index.js.map +1 -0
- package/dist/cjs/src/abi/interface.js +21 -0
- package/dist/cjs/src/abi/interface.js.map +1 -0
- package/dist/cjs/src/abi/method.js +117 -0
- package/dist/cjs/src/abi/method.js.map +1 -0
- package/dist/cjs/src/client/v2/algod/models/types.js +18 -12
- package/dist/cjs/src/client/v2/algod/models/types.js.map +1 -1
- package/dist/cjs/src/client/v2/indexer/indexer.js +8 -0
- package/dist/cjs/src/client/v2/indexer/indexer.js.map +1 -1
- package/dist/cjs/src/client/v2/indexer/lookupApplicationLogs.js +48 -0
- package/dist/cjs/src/client/v2/indexer/lookupApplicationLogs.js.map +1 -0
- package/dist/cjs/src/composer.js +319 -0
- package/dist/cjs/src/composer.js.map +1 -0
- package/dist/cjs/src/encoding/address.js +14 -1
- package/dist/cjs/src/encoding/address.js.map +1 -1
- package/dist/cjs/src/encoding/bigint.js +38 -0
- package/dist/cjs/src/encoding/bigint.js.map +1 -0
- package/dist/cjs/src/logic/langspec.json +392 -77
- package/dist/cjs/src/logic/logic.js.map +1 -1
- package/dist/cjs/src/logicsig.js +207 -49
- package/dist/cjs/src/logicsig.js.map +1 -1
- package/dist/cjs/src/main.js +18 -99
- package/dist/cjs/src/main.js.map +1 -1
- package/dist/cjs/src/makeTxn.js +29 -1
- package/dist/cjs/src/makeTxn.js.map +1 -1
- package/dist/cjs/src/multisig.js +115 -21
- package/dist/cjs/src/multisig.js.map +1 -1
- package/dist/cjs/src/signer.js +66 -0
- package/dist/cjs/src/signer.js.map +1 -0
- package/dist/cjs/src/transaction.js +49 -8
- package/dist/cjs/src/transaction.js.map +1 -1
- package/dist/cjs/src/types/intDecoding.js +0 -2
- package/dist/cjs/src/types/intDecoding.js.map +1 -1
- package/dist/cjs/src/types/transactions/base.js +0 -1
- package/dist/cjs/src/types/transactions/base.js.map +1 -1
- package/dist/cjs/src/wait.js +40 -0
- package/dist/cjs/src/wait.js.map +1 -0
- package/dist/esm/src/abi/abi_type.js +652 -0
- package/dist/esm/src/abi/abi_type.js.map +1 -0
- package/dist/esm/src/abi/contract.js +21 -0
- package/dist/esm/src/abi/contract.js.map +1 -0
- package/dist/esm/src/abi/index.js +5 -0
- package/dist/esm/src/abi/index.js.map +1 -0
- package/dist/esm/src/abi/interface.js +17 -0
- package/dist/esm/src/abi/interface.js.map +1 -0
- package/dist/esm/src/abi/method.js +112 -0
- package/dist/esm/src/abi/method.js.map +1 -0
- package/dist/esm/src/client/v2/algod/models/types.js +18 -12
- package/dist/esm/src/client/v2/algod/models/types.js.map +1 -1
- package/dist/esm/src/client/v2/indexer/indexer.js +8 -0
- package/dist/esm/src/client/v2/indexer/indexer.js.map +1 -1
- package/dist/esm/src/client/v2/indexer/lookupApplicationLogs.js +42 -0
- package/dist/esm/src/client/v2/indexer/lookupApplicationLogs.js.map +1 -0
- package/dist/esm/src/composer.js +315 -0
- package/dist/esm/src/composer.js.map +1 -0
- package/dist/esm/src/encoding/address.js +12 -0
- package/dist/esm/src/encoding/address.js.map +1 -1
- package/dist/esm/src/encoding/bigint.js +33 -0
- package/dist/esm/src/encoding/bigint.js.map +1 -0
- package/dist/esm/src/logic/langspec.json +392 -77
- package/dist/esm/src/logic/logic.js.map +1 -1
- package/dist/esm/src/logicsig.js +205 -48
- package/dist/esm/src/logicsig.js.map +1 -1
- package/dist/esm/src/main.js +8 -94
- package/dist/esm/src/main.js.map +1 -1
- package/dist/esm/src/makeTxn.js +27 -0
- package/dist/esm/src/makeTxn.js.map +1 -1
- package/dist/esm/src/multisig.js +111 -20
- package/dist/esm/src/multisig.js.map +1 -1
- package/dist/esm/src/signer.js +59 -0
- package/dist/esm/src/signer.js.map +1 -0
- package/dist/esm/src/transaction.js +49 -8
- package/dist/esm/src/transaction.js.map +1 -1
- package/dist/esm/src/types/intDecoding.js +0 -2
- package/dist/esm/src/types/intDecoding.js.map +1 -1
- package/dist/esm/src/types/transactions/base.js +0 -1
- package/dist/esm/src/types/transactions/base.js.map +1 -1
- package/dist/esm/src/wait.js +36 -0
- package/dist/esm/src/wait.js.map +1 -0
- package/dist/types/src/abi/abi_type.d.ts +102 -0
- package/dist/types/src/abi/contract.d.ts +13 -0
- package/dist/types/src/abi/index.d.ts +4 -0
- package/dist/types/src/abi/interface.d.ts +11 -0
- package/dist/types/src/abi/method.d.ts +37 -0
- package/dist/types/src/client/v2/algod/models/types.d.ts +29 -14
- package/dist/types/src/client/v2/indexer/indexer.d.ts +6 -0
- package/dist/types/src/client/v2/indexer/lookupApplicationLogs.d.ts +20 -0
- package/dist/types/src/composer.d.ts +146 -0
- package/dist/types/src/encoding/address.d.ts +6 -0
- package/dist/types/src/encoding/bigint.d.ts +14 -0
- package/dist/types/src/logic/logic.d.ts +1 -1
- package/dist/types/src/logicsig.d.ts +100 -14
- package/dist/types/src/main.d.ts +8 -49
- package/dist/types/src/makeTxn.d.ts +18 -1
- package/dist/types/src/multisig.d.ts +40 -1
- package/dist/types/src/signer.d.ts +40 -0
- package/dist/types/src/types/transactions/encoded.d.ts +12 -0
- package/dist/types/src/wait.d.ts +11 -0
- package/package.json +2 -2
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AtomicTransactionComposer = exports.AtomicTransactionComposerStatus = void 0;
|
|
4
|
+
const abi_1 = require("./abi");
|
|
5
|
+
const transaction_1 = require("./transaction");
|
|
6
|
+
const makeTxn_1 = require("./makeTxn");
|
|
7
|
+
const group_1 = require("./group");
|
|
8
|
+
const wait_1 = require("./wait");
|
|
9
|
+
const signer_1 = require("./signer");
|
|
10
|
+
const base_1 = require("./types/transactions/base");
|
|
11
|
+
var AtomicTransactionComposerStatus;
|
|
12
|
+
(function (AtomicTransactionComposerStatus) {
|
|
13
|
+
/** The atomic group is still under construction. */
|
|
14
|
+
AtomicTransactionComposerStatus[AtomicTransactionComposerStatus["BUILDING"] = 0] = "BUILDING";
|
|
15
|
+
/** The atomic group has been finalized, but not yet signed. */
|
|
16
|
+
AtomicTransactionComposerStatus[AtomicTransactionComposerStatus["BUILT"] = 1] = "BUILT";
|
|
17
|
+
/** The atomic group has been finalized and signed, but not yet submitted to the network. */
|
|
18
|
+
AtomicTransactionComposerStatus[AtomicTransactionComposerStatus["SIGNED"] = 2] = "SIGNED";
|
|
19
|
+
/** The atomic group has been finalized, signed, and submitted to the network. */
|
|
20
|
+
AtomicTransactionComposerStatus[AtomicTransactionComposerStatus["SUBMITTED"] = 3] = "SUBMITTED";
|
|
21
|
+
/** The atomic group has been finalized, signed, submitted, and successfully committed to a block. */
|
|
22
|
+
AtomicTransactionComposerStatus[AtomicTransactionComposerStatus["COMMITTED"] = 4] = "COMMITTED";
|
|
23
|
+
})(AtomicTransactionComposerStatus = exports.AtomicTransactionComposerStatus || (exports.AtomicTransactionComposerStatus = {}));
|
|
24
|
+
/** A class used to construct and execute atomic transaction groups */
|
|
25
|
+
class AtomicTransactionComposer {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.status = AtomicTransactionComposerStatus.BUILDING;
|
|
28
|
+
this.transactions = [];
|
|
29
|
+
this.methodCalls = new Map();
|
|
30
|
+
this.signedTxns = [];
|
|
31
|
+
this.txIDs = [];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the status of this composer's transaction group.
|
|
35
|
+
*/
|
|
36
|
+
getStatus() {
|
|
37
|
+
return this.status;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the number of transactions currently in this atomic group.
|
|
41
|
+
*/
|
|
42
|
+
count() {
|
|
43
|
+
return this.transactions.length;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a new composer with the same underlying transactions. The new composer's status will be
|
|
47
|
+
* BUILDING, so additional transactions may be added to it.
|
|
48
|
+
*/
|
|
49
|
+
clone() {
|
|
50
|
+
const theClone = new AtomicTransactionComposer();
|
|
51
|
+
theClone.transactions = this.transactions.map(({ txn, signer }) => ({
|
|
52
|
+
// not quite a deep copy, but good enough for our purposes (modifying txn.group in buildGroup)
|
|
53
|
+
txn: transaction_1.Transaction.from_obj_for_encoding({
|
|
54
|
+
...txn.get_obj_for_encoding(),
|
|
55
|
+
// erase the group ID
|
|
56
|
+
grp: undefined,
|
|
57
|
+
}),
|
|
58
|
+
signer,
|
|
59
|
+
}));
|
|
60
|
+
theClone.methodCalls = new Map(this.methodCalls);
|
|
61
|
+
return theClone;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Add a transaction to this atomic group.
|
|
65
|
+
*
|
|
66
|
+
* An error will be thrown if the transaction has a nonzero group ID, the composer's status is
|
|
67
|
+
* not BUILDING, or if adding this transaction causes the current group to exceed MAX_GROUP_SIZE.
|
|
68
|
+
*/
|
|
69
|
+
addTransaction(txnAndSigner) {
|
|
70
|
+
if (this.status !== AtomicTransactionComposerStatus.BUILDING) {
|
|
71
|
+
throw new Error('Cannot add transactions when composer status is not BUILDING');
|
|
72
|
+
}
|
|
73
|
+
if (this.transactions.length === AtomicTransactionComposer.MAX_GROUP_SIZE) {
|
|
74
|
+
throw new Error(`Adding an additional transaction exceeds the maximum atomic group size of ${AtomicTransactionComposer.MAX_GROUP_SIZE}`);
|
|
75
|
+
}
|
|
76
|
+
if (txnAndSigner.txn.group && txnAndSigner.txn.group.some((v) => v !== 0)) {
|
|
77
|
+
throw new Error('Cannot add a transaction with nonzero group ID');
|
|
78
|
+
}
|
|
79
|
+
this.transactions.push(txnAndSigner);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Add a smart contract method call to this atomic group.
|
|
83
|
+
*
|
|
84
|
+
* An error will be thrown if the composer's status is not BUILDING, if adding this transaction
|
|
85
|
+
* causes the current group to exceed MAX_GROUP_SIZE, or if the provided arguments are invalid
|
|
86
|
+
* for the given method.
|
|
87
|
+
*/
|
|
88
|
+
addMethodCall({ appId, method, methodArgs, sender, suggestedParams, onComplete, note, lease, rekeyTo, signer, }) {
|
|
89
|
+
if (this.status !== AtomicTransactionComposerStatus.BUILDING) {
|
|
90
|
+
throw new Error('Cannot add transactions when composer status is not BUILDING');
|
|
91
|
+
}
|
|
92
|
+
if (this.transactions.length + method.txnCount() >
|
|
93
|
+
AtomicTransactionComposer.MAX_GROUP_SIZE) {
|
|
94
|
+
throw new Error(`Adding additional transactions exceeds the maximum atomic group size of ${AtomicTransactionComposer.MAX_GROUP_SIZE}`);
|
|
95
|
+
}
|
|
96
|
+
if (appId === 0) {
|
|
97
|
+
throw new Error('Application create call not supported');
|
|
98
|
+
}
|
|
99
|
+
if (methodArgs == null) {
|
|
100
|
+
// eslint-disable-next-line no-param-reassign
|
|
101
|
+
methodArgs = [];
|
|
102
|
+
}
|
|
103
|
+
if (methodArgs.length !== method.args.length) {
|
|
104
|
+
throw new Error(`Incorrect number of method arguments. Expected ${method.args.length}, got ${methodArgs.length}`);
|
|
105
|
+
}
|
|
106
|
+
let appArgTypes = [];
|
|
107
|
+
let appArgValues = [];
|
|
108
|
+
const txnArgs = [];
|
|
109
|
+
for (let i = 0; i < methodArgs.length; i++) {
|
|
110
|
+
const argSpec = method.args[i];
|
|
111
|
+
const argValue = methodArgs[i];
|
|
112
|
+
if (typeof argSpec.type === 'string' &&
|
|
113
|
+
abi_1.abiTypeIsTransaction(argSpec.type)) {
|
|
114
|
+
if (!signer_1.isTransactionWithSigner(argValue) ||
|
|
115
|
+
argSpec.type !== argValue.txn.type) {
|
|
116
|
+
throw new Error(`Expected ${argSpec.type} transaction for argument at index ${i}`);
|
|
117
|
+
}
|
|
118
|
+
if (argValue.txn.group && argValue.txn.group.some((v) => v !== 0)) {
|
|
119
|
+
throw new Error('Cannot add a transaction with nonzero group ID');
|
|
120
|
+
}
|
|
121
|
+
txnArgs.push(argValue);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (signer_1.isTransactionWithSigner(argValue)) {
|
|
125
|
+
throw new Error(`Expected non-transaction value for argument at index ${i}`);
|
|
126
|
+
}
|
|
127
|
+
appArgTypes.push(argSpec.type);
|
|
128
|
+
appArgValues.push(argValue);
|
|
129
|
+
}
|
|
130
|
+
if (appArgTypes.length > 14) {
|
|
131
|
+
const lastArgTupleTypes = appArgTypes.slice(14);
|
|
132
|
+
const lastArgTupleValues = appArgValues.slice(14);
|
|
133
|
+
appArgTypes = appArgTypes.slice(0, 14);
|
|
134
|
+
appArgValues = appArgValues.slice(0, 14);
|
|
135
|
+
appArgTypes.push(new abi_1.ABITupleType(lastArgTupleTypes));
|
|
136
|
+
appArgValues.push(lastArgTupleValues);
|
|
137
|
+
}
|
|
138
|
+
const appArgsEncoded = [method.getSelector()];
|
|
139
|
+
for (let i = 0; i < appArgTypes.length; i++) {
|
|
140
|
+
appArgsEncoded.push(appArgTypes[i].encode(appArgValues[i]));
|
|
141
|
+
}
|
|
142
|
+
const appCall = {
|
|
143
|
+
txn: makeTxn_1.makeApplicationCallTxnFromObject({
|
|
144
|
+
from: sender,
|
|
145
|
+
appIndex: appId,
|
|
146
|
+
appArgs: appArgsEncoded,
|
|
147
|
+
onComplete: onComplete == null ? base_1.OnApplicationComplete.NoOpOC : onComplete,
|
|
148
|
+
lease,
|
|
149
|
+
note,
|
|
150
|
+
rekeyTo,
|
|
151
|
+
suggestedParams,
|
|
152
|
+
}),
|
|
153
|
+
signer,
|
|
154
|
+
};
|
|
155
|
+
this.transactions.push(...txnArgs, appCall);
|
|
156
|
+
this.methodCalls.set(this.transactions.length - 1, method);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Finalize the transaction group and returned the finalized transactions.
|
|
160
|
+
*
|
|
161
|
+
* The composer's status will be at least BUILT after executing this method.
|
|
162
|
+
*/
|
|
163
|
+
buildGroup() {
|
|
164
|
+
if (this.status === AtomicTransactionComposerStatus.BUILDING) {
|
|
165
|
+
if (this.transactions.length === 0) {
|
|
166
|
+
throw new Error('Cannot build a group with 0 transactions');
|
|
167
|
+
}
|
|
168
|
+
group_1.assignGroupID(this.transactions.map((txnWithSigner) => txnWithSigner.txn));
|
|
169
|
+
this.status = AtomicTransactionComposerStatus.BUILT;
|
|
170
|
+
}
|
|
171
|
+
return this.transactions;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Obtain signatures for each transaction in this group. If signatures have already been obtained,
|
|
175
|
+
* this method will return cached versions of the signatures.
|
|
176
|
+
*
|
|
177
|
+
* The composer's status will be at least SIGNED after executing this method.
|
|
178
|
+
*
|
|
179
|
+
* An error will be thrown if signing any of the transactions fails.
|
|
180
|
+
*
|
|
181
|
+
* @returns A promise that resolves to an array of signed transactions.
|
|
182
|
+
*/
|
|
183
|
+
async gatherSignatures() {
|
|
184
|
+
if (this.status >= AtomicTransactionComposerStatus.SIGNED) {
|
|
185
|
+
return this.signedTxns;
|
|
186
|
+
}
|
|
187
|
+
// retrieve built transactions and verify status is BUILT
|
|
188
|
+
const txnsWithSigners = this.buildGroup();
|
|
189
|
+
const txnGroup = txnsWithSigners.map((txnWithSigner) => txnWithSigner.txn);
|
|
190
|
+
const indexesPerSigner = new Map();
|
|
191
|
+
for (let i = 0; i < txnsWithSigners.length; i++) {
|
|
192
|
+
const { signer } = txnsWithSigners[i];
|
|
193
|
+
if (!indexesPerSigner.has(signer)) {
|
|
194
|
+
indexesPerSigner.set(signer, []);
|
|
195
|
+
}
|
|
196
|
+
indexesPerSigner.get(signer).push(i);
|
|
197
|
+
}
|
|
198
|
+
const orderedSigners = Array.from(indexesPerSigner);
|
|
199
|
+
const batchedSigs = await Promise.all(orderedSigners.map(([signer, indexes]) => signer(txnGroup, indexes)));
|
|
200
|
+
const signedTxns = txnsWithSigners.map(() => null);
|
|
201
|
+
for (let signerIndex = 0; signerIndex < orderedSigners.length; signerIndex++) {
|
|
202
|
+
const indexes = orderedSigners[signerIndex][1];
|
|
203
|
+
const sigs = batchedSigs[signerIndex];
|
|
204
|
+
for (let i = 0; i < indexes.length; i++) {
|
|
205
|
+
signedTxns[indexes[i]] = sigs[i];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (!signedTxns.every((sig) => sig != null)) {
|
|
209
|
+
throw new Error(`Missing signatures. Got ${signedTxns}`);
|
|
210
|
+
}
|
|
211
|
+
const txIDs = signedTxns.map((stxn, index) => {
|
|
212
|
+
try {
|
|
213
|
+
return transaction_1.decodeSignedTransaction(stxn).txn.txID();
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
throw new Error(`Cannot decode signed transaction at index ${index}. ${err}`);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
this.signedTxns = signedTxns;
|
|
220
|
+
this.txIDs = txIDs;
|
|
221
|
+
this.status = AtomicTransactionComposerStatus.SIGNED;
|
|
222
|
+
return signedTxns;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Send the transaction group to the network, but don't wait for it to be committed to a block. An
|
|
226
|
+
* error will be thrown if submission fails.
|
|
227
|
+
*
|
|
228
|
+
* The composer's status must be SUBMITTED or lower before calling this method. If submission is
|
|
229
|
+
* successful, this composer's status will update to SUBMITTED.
|
|
230
|
+
*
|
|
231
|
+
* Note: a group can only be submitted again if it fails.
|
|
232
|
+
*
|
|
233
|
+
* @param client - An Algodv2 client
|
|
234
|
+
*
|
|
235
|
+
* @returns A promise that, upon success, resolves to a list of TxIDs of the submitted transactions.
|
|
236
|
+
*/
|
|
237
|
+
async submit(client) {
|
|
238
|
+
if (this.status > AtomicTransactionComposerStatus.SUBMITTED) {
|
|
239
|
+
throw new Error('Transaction group cannot be resubmitted');
|
|
240
|
+
}
|
|
241
|
+
const stxns = await this.gatherSignatures();
|
|
242
|
+
await client.sendRawTransaction(stxns).do();
|
|
243
|
+
this.status = AtomicTransactionComposerStatus.SUBMITTED;
|
|
244
|
+
return this.txIDs;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Send the transaction group to the network and wait until it's committed to a block. An error
|
|
248
|
+
* will be thrown if submission or execution fails.
|
|
249
|
+
*
|
|
250
|
+
* The composer's status must be SUBMITTED or lower before calling this method, since execution is
|
|
251
|
+
* only allowed once. If submission is successful, this composer's status will update to SUBMITTED.
|
|
252
|
+
* If the execution is also successful, this composer's status will update to COMMITTED.
|
|
253
|
+
*
|
|
254
|
+
* Note: a group can only be submitted again if it fails.
|
|
255
|
+
*
|
|
256
|
+
* @param client - An Algodv2 client
|
|
257
|
+
* @param waitRounds - The maximum number of rounds to wait for transaction confirmation
|
|
258
|
+
*
|
|
259
|
+
* @returns A promise that, upon success, resolves to an object containing the confirmed round for
|
|
260
|
+
* this transaction, the txIDs of the submitted transactions, and an array of results containing
|
|
261
|
+
* one element for each method call transaction in this group.
|
|
262
|
+
*/
|
|
263
|
+
async execute(client, waitRounds) {
|
|
264
|
+
if (this.status === AtomicTransactionComposerStatus.COMMITTED) {
|
|
265
|
+
throw new Error('Transaction group has already been executed successfully');
|
|
266
|
+
}
|
|
267
|
+
const txIDs = await this.submit(client);
|
|
268
|
+
const firstMethodCallIndex = this.transactions.findIndex((_, index) => this.methodCalls.has(index));
|
|
269
|
+
const indexToWaitFor = firstMethodCallIndex === -1 ? 0 : firstMethodCallIndex;
|
|
270
|
+
const confirmedTxnInfo = await wait_1.waitForConfirmation(client, txIDs[indexToWaitFor], waitRounds);
|
|
271
|
+
this.status = AtomicTransactionComposerStatus.COMMITTED;
|
|
272
|
+
const confirmedRound = confirmedTxnInfo['confirmed-round'];
|
|
273
|
+
const methodResults = [];
|
|
274
|
+
for (const [txnIndex, method] of this.methodCalls) {
|
|
275
|
+
const txID = txIDs[txnIndex];
|
|
276
|
+
const methodResult = {
|
|
277
|
+
txID,
|
|
278
|
+
rawReturnValue: new Uint8Array(),
|
|
279
|
+
};
|
|
280
|
+
try {
|
|
281
|
+
if (method.returns.type !== 'void') {
|
|
282
|
+
const pendingInfo = txnIndex === firstMethodCallIndex
|
|
283
|
+
? confirmedTxnInfo
|
|
284
|
+
: // eslint-disable-next-line no-await-in-loop
|
|
285
|
+
await client.pendingTransactionInformation(txID).do();
|
|
286
|
+
const logs = pendingInfo.logs || [];
|
|
287
|
+
// first 4 bytes of SHA-512/256 hash of "return"
|
|
288
|
+
const returnPrefix = Buffer.from([21, 31, 124, 117]);
|
|
289
|
+
let returnValueEncoded;
|
|
290
|
+
for (let i = logs.length - 1; i >= 0; i--) {
|
|
291
|
+
const log = Buffer.from(logs[i], 'base64');
|
|
292
|
+
if (log.byteLength >= 4 && log.slice(0, 4).equals(returnPrefix)) {
|
|
293
|
+
returnValueEncoded = log.slice(4);
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (returnValueEncoded == null) {
|
|
298
|
+
throw new Error('App call transaction did not log a return value');
|
|
299
|
+
}
|
|
300
|
+
methodResult.rawReturnValue = new Uint8Array(returnValueEncoded);
|
|
301
|
+
methodResult.returnValue = method.returns.type.decode(methodResult.rawReturnValue);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
methodResult.decodeError = err;
|
|
306
|
+
}
|
|
307
|
+
methodResults.push(methodResult);
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
confirmedRound,
|
|
311
|
+
txIDs,
|
|
312
|
+
methodResults,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.AtomicTransactionComposer = AtomicTransactionComposer;
|
|
317
|
+
/** The maximum size of an atomic transaction group. */
|
|
318
|
+
AtomicTransactionComposer.MAX_GROUP_SIZE = 16;
|
|
319
|
+
//# sourceMappingURL=composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../../src/composer.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,10 +22,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.fromMultisigPreImgAddrs = exports.fromMultisigPreImg = exports.encodeAddress = exports.isValidAddress = exports.decodeAddress = exports.UNEXPECTED_PK_LEN_ERROR_MSG = exports.INVALID_MSIG_PK_ERROR_MSG = exports.INVALID_MSIG_THRESHOLD_ERROR_MSG = exports.INVALID_MSIG_VERSION_ERROR_MSG = exports.CHECKSUM_ADDRESS_ERROR_MSG = exports.MALFORMED_ADDRESS_ERROR_MSG = exports.ALGORAND_ZERO_ADDRESS_STRING = void 0;
|
|
25
|
+
exports.getApplicationAddress = exports.fromMultisigPreImgAddrs = exports.fromMultisigPreImg = exports.encodeAddress = exports.isValidAddress = exports.decodeAddress = exports.UNEXPECTED_PK_LEN_ERROR_MSG = exports.INVALID_MSIG_PK_ERROR_MSG = exports.INVALID_MSIG_THRESHOLD_ERROR_MSG = exports.INVALID_MSIG_VERSION_ERROR_MSG = exports.CHECKSUM_ADDRESS_ERROR_MSG = exports.MALFORMED_ADDRESS_ERROR_MSG = exports.ALGORAND_ZERO_ADDRESS_STRING = void 0;
|
|
26
26
|
const hi_base32_1 = __importDefault(require("hi-base32"));
|
|
27
27
|
const nacl = __importStar(require("../nacl/naclWrappers"));
|
|
28
28
|
const utils = __importStar(require("../utils/utils"));
|
|
29
|
+
const uint64_1 = require("./uint64");
|
|
29
30
|
const ALGORAND_ADDRESS_BYTE_LENGTH = 36;
|
|
30
31
|
const ALGORAND_CHECKSUM_BYTE_LENGTH = 4;
|
|
31
32
|
const ALGORAND_ADDRESS_LENGTH = 58;
|
|
@@ -45,6 +46,7 @@ const MULTISIG_PREIMG2ADDR_PREFIX = new Uint8Array([
|
|
|
45
46
|
100,
|
|
46
47
|
114,
|
|
47
48
|
]);
|
|
49
|
+
const APP_ID_PREFIX = Buffer.from('appID');
|
|
48
50
|
exports.MALFORMED_ADDRESS_ERROR_MSG = 'address seems to be malformed';
|
|
49
51
|
exports.CHECKSUM_ADDRESS_ERROR_MSG = 'wrong checksum for address';
|
|
50
52
|
exports.INVALID_MSIG_VERSION_ERROR_MSG = 'invalid multisig version';
|
|
@@ -156,4 +158,15 @@ function fromMultisigPreImgAddrs({ version, threshold, addrs, }) {
|
|
|
156
158
|
return encodeAddress(fromMultisigPreImg({ version, threshold, pks }));
|
|
157
159
|
}
|
|
158
160
|
exports.fromMultisigPreImgAddrs = fromMultisigPreImgAddrs;
|
|
161
|
+
/**
|
|
162
|
+
* Get the escrow address of an application.
|
|
163
|
+
* @param appID - The ID of the application.
|
|
164
|
+
* @returns The address corresponding to that application's escrow account.
|
|
165
|
+
*/
|
|
166
|
+
function getApplicationAddress(appID) {
|
|
167
|
+
const toBeSigned = utils.concatArrays(APP_ID_PREFIX, uint64_1.encodeUint64(appID));
|
|
168
|
+
const hash = nacl.genericHash(toBeSigned);
|
|
169
|
+
return encodeAddress(new Uint8Array(hash));
|
|
170
|
+
}
|
|
171
|
+
exports.getApplicationAddress = getApplicationAddress;
|
|
159
172
|
//# sourceMappingURL=address.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../../src/encoding/address.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA+B;AAC/B,2DAA6C;AAC7C,sDAAwC;AAIxC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACtB,QAAA,4BAA4B,GACvC,4DAA4D,CAAC;AAE/D,6CAA6C;AAC7C,MAAM,2BAA2B,GAAG,IAAI,UAAU,CAAC;IACjD,EAAE;IACF,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,EAAE;IACF,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../../src/encoding/address.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bytesToBigInt = exports.bigIntToBytes = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* bigIntToBytes converts a BigInt to a big-endian Uint8Array for encoding.
|
|
6
|
+
* @param bi - The bigint to convert.
|
|
7
|
+
* @param size - The size of the resulting byte array.
|
|
8
|
+
* @returns A byte array containing the big-endian encoding of the input bigint
|
|
9
|
+
*/
|
|
10
|
+
function bigIntToBytes(bi, size) {
|
|
11
|
+
let hex = bi.toString(16);
|
|
12
|
+
// Pad the hex with zeros so it matches the size in bytes
|
|
13
|
+
if (hex.length !== size * 2) {
|
|
14
|
+
hex = hex.padStart(size * 2, '0');
|
|
15
|
+
}
|
|
16
|
+
const byteArray = new Uint8Array(hex.length / 2);
|
|
17
|
+
for (let i = 0, j = 0; i < hex.length / 2; i++, j += 2) {
|
|
18
|
+
byteArray[i] = parseInt(hex.slice(j, j + 2), 16);
|
|
19
|
+
}
|
|
20
|
+
return byteArray;
|
|
21
|
+
}
|
|
22
|
+
exports.bigIntToBytes = bigIntToBytes;
|
|
23
|
+
/**
|
|
24
|
+
* bytesToBigInt produces a bigint from a binary representation.
|
|
25
|
+
*
|
|
26
|
+
* @param bytes - The Uint8Array to convert.
|
|
27
|
+
* @returns The bigint that was encoded in the input data.
|
|
28
|
+
*/
|
|
29
|
+
function bytesToBigInt(bytes) {
|
|
30
|
+
let res = BigInt(0);
|
|
31
|
+
const buf = Buffer.from(bytes);
|
|
32
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
33
|
+
res = BigInt(Number(buf.readUIntBE(i, 1))) + res * BigInt(256);
|
|
34
|
+
}
|
|
35
|
+
return res;
|
|
36
|
+
}
|
|
37
|
+
exports.bytesToBigInt = bytesToBigInt;
|
|
38
|
+
//# sourceMappingURL=bigint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.js","sourceRoot":"","sources":["../../../../src/encoding/bigint.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,EAAmB,EAAE,IAAY;IAC7D,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,yDAAyD;IACzD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,EAAE;QAC3B,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;KACnC;IACD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;QACtD,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClD;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAXD,sCAWC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAiB;IAC7C,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;KAChE;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAPD,sCAOC"}
|