koilib 2.6.0 → 2.8.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/README.md +5 -5
- package/dist/koinos.js +178 -688
- package/dist/koinos.min.js +1 -1
- package/lib/Contract.d.ts +9 -11
- package/lib/Contract.js +12 -12
- package/lib/Contract.js.map +1 -1
- package/lib/Provider.d.ts +24 -17
- package/lib/Provider.js +83 -81
- package/lib/Provider.js.map +1 -1
- package/lib/Serializer.d.ts +6 -2
- package/lib/Serializer.js +10 -4
- package/lib/Serializer.js.map +1 -1
- package/lib/Signer.d.ts +24 -10
- package/lib/Signer.js +71 -24
- package/lib/Signer.js.map +1 -1
- package/lib/browser/Contract.d.ts +200 -0
- package/lib/browser/Contract.js +298 -0
- package/lib/browser/Contract.js.map +1 -0
- package/lib/browser/Provider.d.ts +160 -0
- package/lib/browser/Provider.js +246 -0
- package/lib/browser/Provider.js.map +1 -0
- package/lib/browser/Serializer.d.ts +85 -0
- package/lib/browser/Serializer.js +175 -0
- package/lib/browser/Serializer.js.map +1 -0
- package/lib/browser/Signer.d.ts +310 -0
- package/lib/browser/Signer.js +468 -0
- package/lib/browser/Signer.js.map +1 -0
- package/lib/browser/index.d.ts +7 -0
- package/lib/browser/index.js +34 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/index2.d.ts +2 -0
- package/lib/browser/index2.js +33 -0
- package/lib/browser/index2.js.map +1 -0
- package/lib/browser/interface.d.ts +279 -0
- package/lib/browser/interface.js +3 -0
- package/lib/browser/interface.js.map +1 -0
- package/lib/browser/jsonDescriptors/krc20-proto.json +183 -0
- package/lib/browser/jsonDescriptors/protocol-proto.json +246 -0
- package/lib/browser/utils.d.ts +326 -0
- package/lib/browser/utils.js +252 -0
- package/lib/browser/utils.js.map +1 -0
- package/lib/interface.d.ts +22 -21
- package/package.json +9 -6
package/lib/Signer.js
CHANGED
|
@@ -109,7 +109,6 @@ class Signer {
|
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
111
|
this.serializer = new Serializer_1.Serializer(protocol_proto_json_1.default, {
|
|
112
|
-
defaultTypeName: "active_transaction_data",
|
|
113
112
|
bytesConversion: false,
|
|
114
113
|
});
|
|
115
114
|
}
|
|
@@ -211,15 +210,12 @@ class Signer {
|
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
212
|
/**
|
|
214
|
-
* Function to sign a
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* @
|
|
213
|
+
* Function to sign a hash value. It returns the signature encoded
|
|
214
|
+
* in base64. The signature is in compact format with the
|
|
215
|
+
* recovery byte
|
|
216
|
+
* @param hash Hash value. Also known as digest
|
|
218
217
|
*/
|
|
219
|
-
async
|
|
220
|
-
if (!tx.active)
|
|
221
|
-
throw new Error("Active data is not defined");
|
|
222
|
-
const hash = (0, sha256_1.sha256)((0, utils_1.decodeBase64)(tx.active));
|
|
218
|
+
async signHash(hash) {
|
|
223
219
|
const [compSignature, recovery] = await secp.sign(hash, this.privateKey, {
|
|
224
220
|
recovered: true,
|
|
225
221
|
canonical: true,
|
|
@@ -228,11 +224,41 @@ class Signer {
|
|
|
228
224
|
const compactSignature = new Uint8Array(65);
|
|
229
225
|
compactSignature.set([recovery + 31], 0);
|
|
230
226
|
compactSignature.set(compSignature, 1);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
227
|
+
return (0, utils_1.encodeBase64)(compactSignature);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Function to sign a transaction. It's important to remark that
|
|
231
|
+
* the transaction parameter is modified inside this function.
|
|
232
|
+
* @param tx - Unsigned transaction
|
|
233
|
+
*/
|
|
234
|
+
async signTransaction(tx) {
|
|
235
|
+
if (!tx.active)
|
|
236
|
+
throw new Error("Active data is not defined");
|
|
237
|
+
const hash = (0, sha256_1.sha256)((0, utils_1.decodeBase64)(tx.active));
|
|
238
|
+
tx.signature_data = await this.signHash(hash);
|
|
239
|
+
// multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
|
|
240
|
+
tx.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
|
|
234
241
|
return tx;
|
|
235
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Function to sign a block for federated consensus. That is,
|
|
245
|
+
* just the ecdsa signature. For other algorithms, like PoW,
|
|
246
|
+
* you have to sign the block and then process the signature
|
|
247
|
+
* to add the extra data (nonce in the case of PoW).
|
|
248
|
+
* @param block - Unsigned block
|
|
249
|
+
*/
|
|
250
|
+
async signBlock(block) {
|
|
251
|
+
const activeBytes = (0, utils_1.decodeBase64)(block.active);
|
|
252
|
+
const headerBytes = await this.serializer.serialize(block.header, "block_header", { bytesConversion: true });
|
|
253
|
+
const headerActiveBytes = new Uint8Array(headerBytes.length + activeBytes.length);
|
|
254
|
+
headerActiveBytes.set(headerBytes, 0);
|
|
255
|
+
headerActiveBytes.set(activeBytes, headerBytes.length);
|
|
256
|
+
const hash = (0, sha256_1.sha256)(headerActiveBytes);
|
|
257
|
+
block.signature_data = await this.signHash(hash);
|
|
258
|
+
// multihash 0x1220. 12: code sha2-256. 20: length (32 bytes)
|
|
259
|
+
block.id = `0x1220${(0, utils_1.toHexString)(hash)}`;
|
|
260
|
+
return block;
|
|
261
|
+
}
|
|
236
262
|
/**
|
|
237
263
|
* Function to sign and send a transaction. It internally uses
|
|
238
264
|
* [[Provider.sendTransaction]]
|
|
@@ -247,7 +273,15 @@ class Signer {
|
|
|
247
273
|
await this.signTransaction(tx);
|
|
248
274
|
if (!this.provider)
|
|
249
275
|
throw new Error("provider is undefined");
|
|
250
|
-
|
|
276
|
+
await this.provider.sendTransaction(tx);
|
|
277
|
+
return {
|
|
278
|
+
...tx,
|
|
279
|
+
wait: async (type = "byBlock", timeout = 30000) => {
|
|
280
|
+
if (!this.provider)
|
|
281
|
+
throw new Error("provider is undefined");
|
|
282
|
+
return this.provider.wait(tx.id, type, timeout);
|
|
283
|
+
},
|
|
284
|
+
};
|
|
251
285
|
}
|
|
252
286
|
/**
|
|
253
287
|
* Function to recover the public key from a signed
|
|
@@ -290,7 +324,7 @@ class Signer {
|
|
|
290
324
|
* defaultTypeName: "pow_signature_data",
|
|
291
325
|
* });
|
|
292
326
|
*
|
|
293
|
-
* const signer = await
|
|
327
|
+
* const signer = await signer.recoverPublicKey(block, {
|
|
294
328
|
* transformSignature: async (signatureData) => {
|
|
295
329
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
296
330
|
* return powSignatureData.recoverable_signature;
|
|
@@ -298,7 +332,7 @@ class Signer {
|
|
|
298
332
|
* });
|
|
299
333
|
* ```
|
|
300
334
|
*/
|
|
301
|
-
|
|
335
|
+
async recoverPublicKey(txOrBlock, opts) {
|
|
302
336
|
if (!txOrBlock.active)
|
|
303
337
|
throw new Error("active is not defined");
|
|
304
338
|
if (!txOrBlock.signature_data)
|
|
@@ -311,7 +345,20 @@ class Signer {
|
|
|
311
345
|
if (opts && typeof opts.compressed !== "undefined") {
|
|
312
346
|
compressed = opts.compressed;
|
|
313
347
|
}
|
|
314
|
-
const
|
|
348
|
+
const block = txOrBlock;
|
|
349
|
+
let hash;
|
|
350
|
+
const activeBytes = (0, utils_1.decodeBase64)(block.active);
|
|
351
|
+
if (block.header) {
|
|
352
|
+
const headerBytes = await this.serializer.serialize(block.header, "block_header", { bytesConversion: true });
|
|
353
|
+
const headerActiveBytes = new Uint8Array(headerBytes.length + activeBytes.length);
|
|
354
|
+
headerActiveBytes.set(headerBytes, 0);
|
|
355
|
+
headerActiveBytes.set(activeBytes, headerBytes.length);
|
|
356
|
+
hash = (0, sha256_1.sha256)(headerActiveBytes);
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
// transaction
|
|
360
|
+
hash = (0, sha256_1.sha256)(activeBytes);
|
|
361
|
+
}
|
|
315
362
|
const compactSignatureHex = (0, utils_1.toHexString)((0, utils_1.decodeBase64)(signatureData));
|
|
316
363
|
const recovery = Number(`0x${compactSignatureHex.slice(0, 2)}`) - 31;
|
|
317
364
|
const rHex = compactSignatureHex.slice(2, 66);
|
|
@@ -332,7 +379,7 @@ class Signer {
|
|
|
332
379
|
* The output format can be compressed (default) or uncompressed.
|
|
333
380
|
* @example
|
|
334
381
|
* ```ts
|
|
335
|
-
* const publicKey = await
|
|
382
|
+
* const publicKey = await signer.recoverAddress(tx);
|
|
336
383
|
* ```
|
|
337
384
|
*
|
|
338
385
|
* If the signature data contains more data, like in the
|
|
@@ -366,7 +413,7 @@ class Signer {
|
|
|
366
413
|
* defaultTypeName: "pow_signature_data",
|
|
367
414
|
* });
|
|
368
415
|
*
|
|
369
|
-
* const signer = await
|
|
416
|
+
* const signer = await signer.recoverAddress(block, {
|
|
370
417
|
* transformSignature: async (signatureData) => {
|
|
371
418
|
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
372
419
|
* return powSignatureData.recoverable_signature;
|
|
@@ -374,15 +421,15 @@ class Signer {
|
|
|
374
421
|
* });
|
|
375
422
|
* ```
|
|
376
423
|
*/
|
|
377
|
-
|
|
378
|
-
const publicKey = await
|
|
424
|
+
async recoverAddress(txOrBlock, opts) {
|
|
425
|
+
const publicKey = await this.recoverPublicKey(txOrBlock, opts);
|
|
379
426
|
return (0, utils_1.bitcoinAddress)((0, utils_1.toUint8Array)(publicKey));
|
|
380
427
|
}
|
|
381
428
|
/**
|
|
382
429
|
* Function to encode a transaction
|
|
383
430
|
* @param activeData - Active data consists of nonce, rc_limit, and
|
|
384
431
|
* operations. Do not set the nonce to get it from the blockchain
|
|
385
|
-
* using the provider. The rc_limit is
|
|
432
|
+
* using the provider. The rc_limit is 1e8 by default.
|
|
386
433
|
* @returns A transaction encoded. The active field is encoded in
|
|
387
434
|
* base64url
|
|
388
435
|
*/
|
|
@@ -395,14 +442,14 @@ class Signer {
|
|
|
395
442
|
// this depends on the final architecture for names on Koinos
|
|
396
443
|
nonce = await this.provider.getNonce(this.getAddress());
|
|
397
444
|
}
|
|
398
|
-
const rcLimit = activeData.rc_limit === undefined ?
|
|
445
|
+
const rcLimit = activeData.rc_limit === undefined ? 1e8 : activeData.rc_limit;
|
|
399
446
|
const operations = activeData.operations ? activeData.operations : [];
|
|
400
447
|
const activeData2 = {
|
|
401
448
|
rc_limit: rcLimit,
|
|
402
449
|
nonce,
|
|
403
450
|
operations,
|
|
404
451
|
};
|
|
405
|
-
const buffer = await this.serializer.serialize(activeData2);
|
|
452
|
+
const buffer = await this.serializer.serialize(activeData2, "active_transaction_data");
|
|
406
453
|
return {
|
|
407
454
|
active: (0, utils_1.encodeBase64)(buffer),
|
|
408
455
|
};
|
|
@@ -413,7 +460,7 @@ class Signer {
|
|
|
413
460
|
async decodeTransaction(tx) {
|
|
414
461
|
if (!tx.active)
|
|
415
462
|
throw new Error("Active data is not defined");
|
|
416
|
-
return this.serializer.deserialize(tx.active);
|
|
463
|
+
return this.serializer.deserialize(tx.active, "active_transaction_data");
|
|
417
464
|
}
|
|
418
465
|
}
|
|
419
466
|
exports.Signer = Signer;
|
package/lib/Signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,iDAA8C;AAC9C,uDAAyC;AAUzC,gGAAiE;AACjE,mCAQiB;AACjB,6CAA0C;AAkB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAa,MAAM;IA0BjB;;;;;;;;;;;;;;;OAeG;IACH,YAAY,CAWX;QACC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC5E,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,CAAC,UAAU,EAAE;YAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,6BAAY,EAAE;gBAC7C,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../src/Signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Signer, SignerInterface } from "./Signer";
|
|
2
|
+
import { Provider } from "./Provider";
|
|
3
|
+
import { Serializer } from "./Serializer";
|
|
4
|
+
import { CallContractOperationNested, UploadContractOperationNested, TransactionJsonWait, Abi, TransactionOptions, DecodedOperationJson } from "./interface";
|
|
5
|
+
/**
|
|
6
|
+
* The contract class contains the contract ID and contract entries
|
|
7
|
+
* definition needed to encode/decode operations during the
|
|
8
|
+
* interaction with the user and the communication with the RPC node.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* const { Contract, Provider, Signer, utils } = require("koilib");
|
|
14
|
+
* const rpcNodes = ["http://api.koinos.io:8080"];
|
|
15
|
+
* const privateKey = "f186a5de49797bfd52dc42505c33d75a46822ed5b60046e09d7c336242e20200";
|
|
16
|
+
* const provider = new Provider(rpcNodes);
|
|
17
|
+
* const signer = new Signer({ privateKey, provider });
|
|
18
|
+
* const koinContract = new Contract({
|
|
19
|
+
* id: "19JntSm8pSNETT9aHTwAUHC5RMoaSmgZPJ",
|
|
20
|
+
* abi: utils.Krc20Abi,
|
|
21
|
+
* provider,
|
|
22
|
+
* signer,
|
|
23
|
+
* });
|
|
24
|
+
* const koin = koinContract.functions;
|
|
25
|
+
*
|
|
26
|
+
* // optional: preformat input/output
|
|
27
|
+
* koinContract.abi.methods.balanceOf.preformatInput = (owner) =>
|
|
28
|
+
* ({ owner });
|
|
29
|
+
* koinContract.abi.methods.balanceOf.preformatOutput = (res) =>
|
|
30
|
+
* utils.formatUnits(res.value, 8);
|
|
31
|
+
* koinContract.abi.methods.transfer.preformatInput = (input) => ({
|
|
32
|
+
* from: signer.getAddress(),
|
|
33
|
+
* to: input.to,
|
|
34
|
+
* value: utils.parseUnits(input.value, 8),
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* async funtion main() {
|
|
38
|
+
* // Get balance
|
|
39
|
+
* const { result } = await koin.balanceOf("12fN2CQnuJM8cMnWZ1hPtM4knjLME8E4PD");
|
|
40
|
+
* console.log(result)
|
|
41
|
+
*
|
|
42
|
+
* // Transfer
|
|
43
|
+
* const { transaction } = await koin.transfer({
|
|
44
|
+
* to: "172AB1FgCsYrRAW5cwQ8KjadgxofvgPFd6",
|
|
45
|
+
* value: "10.0001",
|
|
46
|
+
* });
|
|
47
|
+
* console.log(`Transaction id ${transaction.id} submitted`);
|
|
48
|
+
*
|
|
49
|
+
* // wait to be mined
|
|
50
|
+
* const blockNumber = await transaction.wait();
|
|
51
|
+
* console.log(`Transaction mined. Block number: ${blockNumber}`);
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* main();
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class Contract {
|
|
58
|
+
/**
|
|
59
|
+
* Contract ID
|
|
60
|
+
*/
|
|
61
|
+
id?: Uint8Array;
|
|
62
|
+
/**
|
|
63
|
+
* Set of functions to interact with the smart
|
|
64
|
+
* contract. These functions are automatically generated
|
|
65
|
+
* in the constructor of the class
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const owner = "1Gvqdo9if6v6tFomEuTuMWP1D7H7U9yksb";
|
|
70
|
+
* await koinContract.functions.balanceOf({ owner });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
functions: {
|
|
74
|
+
[x: string]: <T = Record<string, unknown>>(args?: unknown, opts?: TransactionOptions) => Promise<{
|
|
75
|
+
operation: CallContractOperationNested;
|
|
76
|
+
transaction?: TransactionJsonWait;
|
|
77
|
+
result?: T;
|
|
78
|
+
}>;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Application Binary Interface
|
|
82
|
+
*/
|
|
83
|
+
abi?: Abi;
|
|
84
|
+
/**
|
|
85
|
+
* Signer interacting with the smart contract
|
|
86
|
+
*/
|
|
87
|
+
signer?: SignerInterface;
|
|
88
|
+
/**
|
|
89
|
+
* Provider to connect with the blockchain
|
|
90
|
+
*/
|
|
91
|
+
provider?: Provider;
|
|
92
|
+
/**
|
|
93
|
+
* Serializer to serialize/deserialize data types
|
|
94
|
+
*/
|
|
95
|
+
serializer?: Serializer;
|
|
96
|
+
/**
|
|
97
|
+
* Bytecode. Needed to deploy the smart contract.
|
|
98
|
+
*/
|
|
99
|
+
bytecode?: Uint8Array;
|
|
100
|
+
/**
|
|
101
|
+
* Options to apply when creating transactions.
|
|
102
|
+
* By default it set rc_limit to 1e8, sendTransaction true,
|
|
103
|
+
* sendAbis true, and nonce undefined (to get it from the blockchain)
|
|
104
|
+
*/
|
|
105
|
+
options: TransactionOptions;
|
|
106
|
+
constructor(c: {
|
|
107
|
+
id?: string;
|
|
108
|
+
abi?: Abi;
|
|
109
|
+
bytecode?: Uint8Array;
|
|
110
|
+
options?: TransactionOptions;
|
|
111
|
+
signer?: Signer;
|
|
112
|
+
provider?: Provider;
|
|
113
|
+
/**
|
|
114
|
+
* Set this option if you can not use _eval_ functions
|
|
115
|
+
* in the current environment. In such cases, the
|
|
116
|
+
* serializer must come from an environment where it
|
|
117
|
+
* is able to use those functions.
|
|
118
|
+
*/
|
|
119
|
+
serializer?: Serializer;
|
|
120
|
+
});
|
|
121
|
+
/**
|
|
122
|
+
* Compute contract Id
|
|
123
|
+
*/
|
|
124
|
+
static computeContractId(address: string): Uint8Array;
|
|
125
|
+
/**
|
|
126
|
+
* Get contract Id
|
|
127
|
+
*/
|
|
128
|
+
getId(): string;
|
|
129
|
+
/**
|
|
130
|
+
* Function to deploy a new smart contract.
|
|
131
|
+
* The Bytecode must be defined in the constructor of the class
|
|
132
|
+
* @example
|
|
133
|
+
* ```ts
|
|
134
|
+
* const privateKey = "f186a5de49797bfd52dc42505c33d75a46822ed5b60046e09d7c336242e20200";
|
|
135
|
+
* const provider = new Provider(["http://api.koinos.io:8080"]);
|
|
136
|
+
* const signer = new Signer({ privateKey, provider });
|
|
137
|
+
* const bytecode = new Uint8Array([1, 2, 3, 4]);
|
|
138
|
+
* const contract = new Contract({ signer, provider, bytecode });
|
|
139
|
+
* const { transaction } = await contract.deploy();
|
|
140
|
+
* // wait to be mined
|
|
141
|
+
* const blockNumber = await transaction.wait();
|
|
142
|
+
* console.log(`Contract uploaded in block number ${blockNumber}`);
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
deploy(options?: TransactionOptions): Promise<{
|
|
146
|
+
operation: UploadContractOperationNested;
|
|
147
|
+
transaction?: TransactionJsonWait;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Encondes a contract operation using Koinos serialization
|
|
151
|
+
* and taking the contract entries as reference to build it
|
|
152
|
+
* @param op - Operation to encode
|
|
153
|
+
* @returns Operation encoded
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* const opEncoded = contract.encodeOperation({
|
|
157
|
+
* name: "transfer",
|
|
158
|
+
* args: {
|
|
159
|
+
* from: "12fN2CQnuJM8cMnWZ1hPtM4knjLME8E4PD",
|
|
160
|
+
* to: "172AB1FgCsYrRAW5cwQ8KjadgxofvgPFd6",
|
|
161
|
+
* value: "1000",
|
|
162
|
+
* }
|
|
163
|
+
* });
|
|
164
|
+
*
|
|
165
|
+
* console.log(opEncoded);
|
|
166
|
+
* // {
|
|
167
|
+
* // call_contract: {
|
|
168
|
+
* // contract_id: "19JntSm8pSNETT9aHTwAUHC5RMoaSmgZPJ",
|
|
169
|
+
* // entry_point: 0x62efa292,
|
|
170
|
+
* // args: "MBWFsaWNlA2JvYgAAAAAAAAPo",
|
|
171
|
+
* // }
|
|
172
|
+
* // }
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
encodeOperation(op: DecodedOperationJson): Promise<CallContractOperationNested>;
|
|
176
|
+
/**
|
|
177
|
+
* Decodes a contract operation to be human readable
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* const opDecoded = contract.decodeOperation({
|
|
181
|
+
* call_contract: {
|
|
182
|
+
* contract_id: "19JntSm8pSNETT9aHTwAUHC5RMoaSmgZPJ",
|
|
183
|
+
* entry_point: 0x62efa292,
|
|
184
|
+
* args: "MBWFsaWNlA2JvYgAAAAAAAAPo",
|
|
185
|
+
* }
|
|
186
|
+
* });
|
|
187
|
+
* console.log(opDecoded);
|
|
188
|
+
* // {
|
|
189
|
+
* // name: "transfer",
|
|
190
|
+
* // args: {
|
|
191
|
+
* // from: "12fN2CQnuJM8cMnWZ1hPtM4knjLME8E4PD",
|
|
192
|
+
* // to: "172AB1FgCsYrRAW5cwQ8KjadgxofvgPFd6",
|
|
193
|
+
* // value: "1000",
|
|
194
|
+
* // },
|
|
195
|
+
* // }
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
decodeOperation(op: CallContractOperationNested): Promise<DecodedOperationJson>;
|
|
199
|
+
}
|
|
200
|
+
export default Contract;
|