koilib 1.5.0 → 2.3.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 +133 -86
- package/dist/koinos.js +12087 -5016
- package/dist/koinos.min.js +1 -1
- package/lib/Contract.d.ts +135 -230
- package/lib/Contract.js +219 -154
- package/lib/Contract.js.map +1 -1
- package/lib/Provider.d.ts +43 -18
- package/lib/Provider.js +69 -19
- package/lib/Provider.js.map +1 -1
- package/lib/Serializer.d.ts +81 -0
- package/lib/Serializer.js +169 -0
- package/lib/Serializer.js.map +1 -0
- package/lib/Signer.d.ts +170 -18
- package/lib/Signer.js +215 -42
- package/lib/Signer.js.map +1 -1
- package/lib/index.d.ts +2 -10
- package/lib/index.js +5 -12
- package/lib/index.js.map +1 -1
- package/lib/index2.js +2 -10
- package/lib/index2.js.map +1 -1
- package/lib/interface.d.ts +232 -35
- package/lib/jsonDescriptors/krc20-proto.json +183 -0
- package/lib/jsonDescriptors/protocol-proto.json +246 -0
- package/lib/utils.d.ts +281 -0
- package/lib/utils.js +109 -1
- package/lib/utils.js.map +1 -1
- package/package.json +10 -3
- package/lib/Multihash.d.ts +0 -41
- package/lib/Multihash.js +0 -38
- package/lib/Multihash.js.map +0 -1
- package/lib/VariableBlob.d.ts +0 -35
- package/lib/VariableBlob.js +0 -227
- package/lib/VariableBlob.js.map +0 -1
- package/lib/Wallet.d.ts +0 -250
- package/lib/Wallet.js +0 -301
- package/lib/Wallet.js.map +0 -1
- package/lib/abi.d.ts +0 -177
- package/lib/abi.js +0 -160
- package/lib/abi.js.map +0 -1
- package/lib/serializer.d.ts +0 -41
- package/lib/serializer.js +0 -273
- package/lib/serializer.js.map +0 -1
package/lib/Provider.js
CHANGED
|
@@ -4,8 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Provider = void 0;
|
|
7
|
-
const multibase_1 = __importDefault(require("multibase"));
|
|
8
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
async function sleep(ms) {
|
|
9
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
10
|
+
}
|
|
9
11
|
/**
|
|
10
12
|
* Class to connect with the RPC node
|
|
11
13
|
*/
|
|
@@ -76,23 +78,44 @@ class Provider {
|
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
80
|
if (response.data.error)
|
|
79
|
-
throw new Error(response.data.error
|
|
81
|
+
throw new Error(JSON.stringify(response.data.error));
|
|
80
82
|
return response.data.result;
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
83
85
|
* Function to call "chain.get_account_nonce" to return the number of
|
|
84
86
|
* transactions for a particular account. This call is used
|
|
85
87
|
* when creating new transactions.
|
|
86
|
-
* @param
|
|
88
|
+
* @param account - account address
|
|
87
89
|
* @returns Nonce
|
|
88
90
|
*/
|
|
89
|
-
async getNonce(
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
async getNonce(account) {
|
|
92
|
+
const { nonce } = await this.call("chain.get_account_nonce", { account });
|
|
93
|
+
if (!nonce)
|
|
94
|
+
return 0;
|
|
95
|
+
return Number(nonce);
|
|
96
|
+
}
|
|
97
|
+
async getAccountRc(account) {
|
|
98
|
+
const { rc } = await this.call("chain.get_account_rc", {
|
|
99
|
+
account,
|
|
100
|
+
});
|
|
101
|
+
if (!rc)
|
|
102
|
+
return "0";
|
|
103
|
+
return rc;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get transactions by id and their corresponding block ids
|
|
107
|
+
*/
|
|
108
|
+
async getTransactionsById(transactionIds) {
|
|
109
|
+
return this.call("transaction_store.get_transactions_by_id", {
|
|
110
|
+
transaction_ids: transactionIds,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async getBlocksById(blockIds) {
|
|
114
|
+
return this.call("block_store.get_blocks_by_id", {
|
|
115
|
+
block_id: blockIds,
|
|
116
|
+
return_block: true,
|
|
117
|
+
return_receipt: false,
|
|
94
118
|
});
|
|
95
|
-
return Number(result.nonce);
|
|
96
119
|
}
|
|
97
120
|
/**
|
|
98
121
|
* Function to get info from the head block in the blockchain
|
|
@@ -130,24 +153,51 @@ class Provider {
|
|
|
130
153
|
}
|
|
131
154
|
/**
|
|
132
155
|
* Function to call "chain.submit_transaction" to send a signed
|
|
133
|
-
* transaction to the blockchain
|
|
156
|
+
* transaction to the blockchain. It returns an object with the async
|
|
157
|
+
* function "wait", which can be called to wait for the
|
|
158
|
+
* transaction to be mined.
|
|
134
159
|
* @param transaction - Signed transaction
|
|
135
|
-
* @
|
|
160
|
+
* @example
|
|
161
|
+
* ```ts
|
|
162
|
+
* const { transactionResponse } = await provider.sendTransaction({
|
|
163
|
+
* id: "1220...",
|
|
164
|
+
* active: "...",
|
|
165
|
+
* signatureData: "...",
|
|
166
|
+
* });
|
|
167
|
+
* console.log("Transaction submitted to the mempool");
|
|
168
|
+
* // wait to be mined
|
|
169
|
+
* const blockId = await transactionResponse.wait();
|
|
170
|
+
* console.log("Transaction mined")
|
|
171
|
+
* ```
|
|
136
172
|
*/
|
|
137
173
|
async sendTransaction(transaction) {
|
|
138
|
-
|
|
174
|
+
await this.call("chain.submit_transaction", { transaction });
|
|
175
|
+
const startTime = Date.now() + 10000;
|
|
176
|
+
return {
|
|
177
|
+
wait: async () => {
|
|
178
|
+
// sleep some seconds before it gets mined
|
|
179
|
+
await sleep(startTime - Date.now() - 1000);
|
|
180
|
+
for (let i = 0; i < 30; i += 1) {
|
|
181
|
+
await sleep(1000);
|
|
182
|
+
const { transactions } = await this.getTransactionsById([
|
|
183
|
+
transaction.id,
|
|
184
|
+
]);
|
|
185
|
+
if (transactions &&
|
|
186
|
+
transactions[0] &&
|
|
187
|
+
transactions[0].containing_blocks)
|
|
188
|
+
return transactions[0].containing_blocks[0];
|
|
189
|
+
}
|
|
190
|
+
throw new Error(`Transaction not mined after 40 seconds`);
|
|
191
|
+
},
|
|
192
|
+
};
|
|
139
193
|
}
|
|
140
194
|
/**
|
|
141
195
|
* Function to call "chain.read_contract" to read a contract.
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* uses the contract definition and it is prepared to receive
|
|
145
|
-
* the operation decoded and return the result decoded as well.
|
|
146
|
-
* @param operation - Encoded operation
|
|
147
|
-
* @returns Encoded result
|
|
196
|
+
* This function is used by [[Contract]] class when read methods
|
|
197
|
+
* are invoked.
|
|
148
198
|
*/
|
|
149
199
|
async readContract(operation) {
|
|
150
|
-
return this.call("chain.read_contract", operation
|
|
200
|
+
return this.call("chain.read_contract", operation);
|
|
151
201
|
}
|
|
152
202
|
}
|
|
153
203
|
exports.Provider = Provider;
|
package/lib/Provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.js","sourceRoot":"","sources":["../src/Provider.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"Provider.js","sourceRoot":"","sources":["../src/Provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Root, Type, INamespace } from "protobufjs/light";
|
|
2
|
+
/**
|
|
3
|
+
* The serializer class serialize and deserialize data using
|
|
4
|
+
* protocol buffers.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This class uses the [protobufjs/light](https://www.npmjs.com/package/protobufjs)
|
|
7
|
+
* library internally, which uses reflection (use of _eval_
|
|
8
|
+
* and _new Function_) for the construction of the types.
|
|
9
|
+
* This could cause issues in environments where _eval_ is not
|
|
10
|
+
* allowed, like in browser extensions. In such cases, this class
|
|
11
|
+
* must be confined in a [sandbox environment](https://developer.chrome.com/docs/apps/app_external/#sandboxing)
|
|
12
|
+
* where _eval_ is allowed. This is the principal reason of
|
|
13
|
+
* having the serializer in a separate class.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
*
|
|
17
|
+
* ```ts
|
|
18
|
+
* const descriptorJson = {
|
|
19
|
+
* nested: {
|
|
20
|
+
* awesomepackage: {
|
|
21
|
+
* nested: {
|
|
22
|
+
* AwesomeMessage: {
|
|
23
|
+
* fields: {
|
|
24
|
+
* awesomeField: {
|
|
25
|
+
* type: "string",
|
|
26
|
+
* id: 1
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* const serializer = new Serializer(descriptorJson)
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare class Serializer {
|
|
38
|
+
/**
|
|
39
|
+
* Protobuffers descriptor in JSON format.
|
|
40
|
+
* See https://www.npmjs.com/package/protobufjs#using-json-descriptors
|
|
41
|
+
*/
|
|
42
|
+
types: INamespace;
|
|
43
|
+
/**
|
|
44
|
+
* Protobuffer definitions
|
|
45
|
+
*/
|
|
46
|
+
root: Root;
|
|
47
|
+
/**
|
|
48
|
+
* Default type for all serializations
|
|
49
|
+
*/
|
|
50
|
+
defaultType?: Type;
|
|
51
|
+
/**
|
|
52
|
+
* Preformat bytes for base64, base58 or hex string
|
|
53
|
+
*/
|
|
54
|
+
bytesConversion: boolean;
|
|
55
|
+
constructor(types: INamespace, opts?: {
|
|
56
|
+
/**
|
|
57
|
+
* Default type name. Use this option when you
|
|
58
|
+
* always want to serialize/deserialize the same type
|
|
59
|
+
*/
|
|
60
|
+
defaultTypeName?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Bytes conversion. Option to preformat bytes
|
|
63
|
+
* when "(koinos_bytes_type)" is defined in the type
|
|
64
|
+
* definitions. By default it is true.
|
|
65
|
+
*/
|
|
66
|
+
bytesConversion?: boolean;
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Function to encode a type using the protobuffer definitions
|
|
70
|
+
* It also prepares the bytes for special cases (base58, hex string)
|
|
71
|
+
* when bytesConversion param is true.
|
|
72
|
+
*/
|
|
73
|
+
serialize(valueDecoded: Record<string, unknown>, typeName?: string): Promise<Uint8Array>;
|
|
74
|
+
/**
|
|
75
|
+
* Function to decode bytes using the protobuffer definitions
|
|
76
|
+
* It also encodes the bytes for special cases (base58, hex string)
|
|
77
|
+
* when bytesConversion param is true.
|
|
78
|
+
*/
|
|
79
|
+
deserialize<T = Record<string, unknown>>(valueEncoded: string | Uint8Array, typeName?: string): Promise<T>;
|
|
80
|
+
}
|
|
81
|
+
export default Serializer;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Serializer = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
5
|
+
const light_1 = require("protobufjs/light");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
const OP_BYTES = "(koinos_bytes_type)";
|
|
8
|
+
/**
|
|
9
|
+
* Makes a copy of a value. The returned value can be modified
|
|
10
|
+
* without altering the original one. Although this is not needed
|
|
11
|
+
* for strings or numbers and only needed for objects and arrays,
|
|
12
|
+
* all these options are covered in a single function
|
|
13
|
+
*
|
|
14
|
+
* It is assumed that the argument is number, string, or contructions
|
|
15
|
+
* of these types inside objects or arrays.
|
|
16
|
+
*/
|
|
17
|
+
function copyValue(value) {
|
|
18
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
return JSON.parse(JSON.stringify(value));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The serializer class serialize and deserialize data using
|
|
25
|
+
* protocol buffers.
|
|
26
|
+
*
|
|
27
|
+
* NOTE: This class uses the [protobufjs/light](https://www.npmjs.com/package/protobufjs)
|
|
28
|
+
* library internally, which uses reflection (use of _eval_
|
|
29
|
+
* and _new Function_) for the construction of the types.
|
|
30
|
+
* This could cause issues in environments where _eval_ is not
|
|
31
|
+
* allowed, like in browser extensions. In such cases, this class
|
|
32
|
+
* must be confined in a [sandbox environment](https://developer.chrome.com/docs/apps/app_external/#sandboxing)
|
|
33
|
+
* where _eval_ is allowed. This is the principal reason of
|
|
34
|
+
* having the serializer in a separate class.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* const descriptorJson = {
|
|
40
|
+
* nested: {
|
|
41
|
+
* awesomepackage: {
|
|
42
|
+
* nested: {
|
|
43
|
+
* AwesomeMessage: {
|
|
44
|
+
* fields: {
|
|
45
|
+
* awesomeField: {
|
|
46
|
+
* type: "string",
|
|
47
|
+
* id: 1
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
50
|
+
* }
|
|
51
|
+
* }
|
|
52
|
+
* }
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* const serializer = new Serializer(descriptorJson)
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
class Serializer {
|
|
59
|
+
constructor(types, opts) {
|
|
60
|
+
/**
|
|
61
|
+
* Preformat bytes for base64, base58 or hex string
|
|
62
|
+
*/
|
|
63
|
+
this.bytesConversion = true;
|
|
64
|
+
this.types = types;
|
|
65
|
+
this.root = light_1.Root.fromJSON(this.types);
|
|
66
|
+
if (opts === null || opts === void 0 ? void 0 : opts.defaultTypeName)
|
|
67
|
+
this.defaultType = this.root.lookupType(opts.defaultTypeName);
|
|
68
|
+
if (opts && typeof opts.bytesConversion !== "undefined")
|
|
69
|
+
this.bytesConversion = opts.bytesConversion;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Function to encode a type using the protobuffer definitions
|
|
73
|
+
* It also prepares the bytes for special cases (base58, hex string)
|
|
74
|
+
* when bytesConversion param is true.
|
|
75
|
+
*/
|
|
76
|
+
async serialize(valueDecoded, typeName) {
|
|
77
|
+
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
78
|
+
let object = {};
|
|
79
|
+
if (this.bytesConversion) {
|
|
80
|
+
// TODO: format from Buffer to base58/base64 for nested fields
|
|
81
|
+
Object.keys(protobufType.fields).forEach((fieldName) => {
|
|
82
|
+
const { options, name, type } = protobufType.fields[fieldName];
|
|
83
|
+
// No byte conversion
|
|
84
|
+
if (type !== "bytes") {
|
|
85
|
+
object[name] = copyValue(valueDecoded[name]);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Default byte conversion
|
|
89
|
+
if (!options || !options[OP_BYTES]) {
|
|
90
|
+
object[name] = utils_1.decodeBase64(valueDecoded[name]);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Specific byte conversion
|
|
94
|
+
switch (options[OP_BYTES]) {
|
|
95
|
+
case "BASE58":
|
|
96
|
+
case "CONTRACT_ID":
|
|
97
|
+
case "ADDRESS":
|
|
98
|
+
object[name] = utils_1.decodeBase58(valueDecoded[name]);
|
|
99
|
+
break;
|
|
100
|
+
case "BASE64":
|
|
101
|
+
object[name] = utils_1.decodeBase64(valueDecoded[name]);
|
|
102
|
+
break;
|
|
103
|
+
case "HEX":
|
|
104
|
+
case "BLOCK_ID":
|
|
105
|
+
case "TRANSACTION_ID":
|
|
106
|
+
object[name] = utils_1.toUint8Array(valueDecoded[name].replace("0x", ""));
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
throw new Error(`unknown koinos_byte_type ${options[OP_BYTES]}`);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
object = valueDecoded;
|
|
115
|
+
}
|
|
116
|
+
const message = protobufType.create(object);
|
|
117
|
+
const buffer = protobufType.encode(message).finish();
|
|
118
|
+
return buffer;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Function to decode bytes using the protobuffer definitions
|
|
122
|
+
* It also encodes the bytes for special cases (base58, hex string)
|
|
123
|
+
* when bytesConversion param is true.
|
|
124
|
+
*/
|
|
125
|
+
async deserialize(valueEncoded, typeName) {
|
|
126
|
+
const valueBuffer = typeof valueEncoded === "string"
|
|
127
|
+
? utils_1.decodeBase64(valueEncoded)
|
|
128
|
+
: valueEncoded;
|
|
129
|
+
const protobufType = this.defaultType || this.root.lookupType(typeName);
|
|
130
|
+
const message = protobufType.decode(valueBuffer);
|
|
131
|
+
const object = protobufType.toObject(message, { longs: String });
|
|
132
|
+
if (!this.bytesConversion)
|
|
133
|
+
return object;
|
|
134
|
+
// TODO: format from Buffer to base58/base64 for nested fields
|
|
135
|
+
Object.keys(protobufType.fields).forEach((fieldName) => {
|
|
136
|
+
const { options, name, type } = protobufType.fields[fieldName];
|
|
137
|
+
// No byte conversion
|
|
138
|
+
if (type !== "bytes")
|
|
139
|
+
return;
|
|
140
|
+
// Default byte conversion
|
|
141
|
+
if (!options || !options[OP_BYTES]) {
|
|
142
|
+
object[name] = utils_1.encodeBase64(object[name]);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Specific byte conversion
|
|
146
|
+
switch (options[OP_BYTES]) {
|
|
147
|
+
case "BASE58":
|
|
148
|
+
case "CONTRACT_ID":
|
|
149
|
+
case "ADDRESS":
|
|
150
|
+
object[name] = utils_1.encodeBase58(object[name]);
|
|
151
|
+
break;
|
|
152
|
+
case "BASE64":
|
|
153
|
+
object[name] = utils_1.encodeBase64(object[name]);
|
|
154
|
+
break;
|
|
155
|
+
case "HEX":
|
|
156
|
+
case "BLOCK_ID":
|
|
157
|
+
case "TRANSACTION_ID":
|
|
158
|
+
object[name] = `0x${utils_1.toHexString(object[name])}`;
|
|
159
|
+
break;
|
|
160
|
+
default:
|
|
161
|
+
throw new Error(`unknown koinos_byte_type ${options[OP_BYTES]}`);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return object;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.Serializer = Serializer;
|
|
168
|
+
exports.default = Serializer;
|
|
169
|
+
//# sourceMappingURL=Serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Serializer.js","sourceRoot":"","sources":["../src/Serializer.ts"],"names":[],"mappings":"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"}
|
package/lib/Signer.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Provider } from "./Provider";
|
|
2
|
+
import { TransactionJson, ActiveTransactionData, Abi, SendTransactionResponse, RecoverPublicKeyOptions, BlockJson } from "./interface";
|
|
3
|
+
import { Serializer } from "./Serializer";
|
|
4
|
+
export interface SignerInterface {
|
|
5
|
+
provider?: Provider;
|
|
6
|
+
serializer?: Serializer;
|
|
7
|
+
getAddress(compressed?: boolean): string;
|
|
8
|
+
getPrivateKey(format: "wif" | "hex", compressed?: boolean): string;
|
|
9
|
+
signTransaction(tx: TransactionJson): Promise<TransactionJson>;
|
|
10
|
+
sendTransaction(tx: TransactionJson, abis?: Record<string, Abi>): Promise<SendTransactionResponse>;
|
|
11
|
+
encodeTransaction(activeData: ActiveTransactionData): Promise<TransactionJson>;
|
|
12
|
+
decodeTransaction(tx: TransactionJson): Promise<ActiveTransactionData>;
|
|
13
|
+
}
|
|
2
14
|
/**
|
|
3
15
|
* The Signer Class contains the private key needed to sign transactions.
|
|
4
16
|
* It can be created using the seed, wif, or private key
|
|
@@ -6,7 +18,8 @@ import { Transaction } from "./interface";
|
|
|
6
18
|
* @example
|
|
7
19
|
* using private key as hex string
|
|
8
20
|
* ```ts
|
|
9
|
-
* var
|
|
21
|
+
* var privateKey = "ec8601a24f81decd57f4b611b5ac6eb801cb3780bb02c0f9cdfe9d09daaddf9c";
|
|
22
|
+
* var signer = new Signer({ privateKey });
|
|
10
23
|
* ```
|
|
11
24
|
* <br>
|
|
12
25
|
*
|
|
@@ -18,14 +31,15 @@ import { Transaction } from "./interface";
|
|
|
18
31
|
* 1, 203, 55, 128, 187, 2, 192, 249,
|
|
19
32
|
* 205, 254, 157, 9, 218, 173, 223, 156
|
|
20
33
|
* ]);
|
|
21
|
-
* var signer = new Signer(buffer);
|
|
34
|
+
* var signer = new Signer({ privateKey: buffer });
|
|
22
35
|
* ```
|
|
23
36
|
*
|
|
24
37
|
* <br>
|
|
25
38
|
*
|
|
26
39
|
* using private key as bigint
|
|
27
40
|
* ```ts
|
|
28
|
-
* var
|
|
41
|
+
* var privateKey = 106982601049961974618234078204952280507266494766432547312316920283818886029212n;
|
|
42
|
+
* var signer = new Signer({ privateKey });
|
|
29
43
|
* ```
|
|
30
44
|
*
|
|
31
45
|
* <br>
|
|
@@ -41,8 +55,17 @@ import { Transaction } from "./interface";
|
|
|
41
55
|
* ```ts
|
|
42
56
|
* var signer = Signer.fromWif("L59UtJcTdNBnrH2QSBA5beSUhRufRu3g6tScDTite6Msuj7U93tM");
|
|
43
57
|
* ```
|
|
58
|
+
*
|
|
59
|
+
* <br>
|
|
60
|
+
*
|
|
61
|
+
* defining a provider
|
|
62
|
+
* ```ts
|
|
63
|
+
* var provider = new Provider(["https://example.com/jsonrpc"]);
|
|
64
|
+
* var privateKey = "ec8601a24f81decd57f4b611b5ac6eb801cb3780bb02c0f9cdfe9d09daaddf9c";
|
|
65
|
+
* var signer = new Signer({ privateKey, provider });
|
|
66
|
+
* ```
|
|
44
67
|
*/
|
|
45
|
-
export declare class Signer {
|
|
68
|
+
export declare class Signer implements SignerInterface {
|
|
46
69
|
/**
|
|
47
70
|
* Boolean determining if the public/private key
|
|
48
71
|
* is using the compressed format
|
|
@@ -54,6 +77,14 @@ export declare class Signer {
|
|
|
54
77
|
* Account address
|
|
55
78
|
*/
|
|
56
79
|
address: string;
|
|
80
|
+
/**
|
|
81
|
+
* Provider to connect with the blockchain
|
|
82
|
+
*/
|
|
83
|
+
provider?: Provider;
|
|
84
|
+
/**
|
|
85
|
+
* Serializer to serialize/deserialize data types
|
|
86
|
+
*/
|
|
87
|
+
serializer?: Serializer;
|
|
57
88
|
/**
|
|
58
89
|
* The constructor receives de private key as hexstring, bigint or Uint8Array.
|
|
59
90
|
* See also the functions [[Signer.fromWif]] and [[Signer.fromSeed]]
|
|
@@ -61,14 +92,27 @@ export declare class Signer {
|
|
|
61
92
|
*
|
|
62
93
|
* @param privateKey - Private key as hexstring, bigint or Uint8Array
|
|
63
94
|
* @param compressed - compressed format is true by default
|
|
95
|
+
* @param provider - provider to connect with the blockchain
|
|
64
96
|
* @example
|
|
65
97
|
* ```ts
|
|
66
|
-
*
|
|
98
|
+
* const privateKey = "ec8601a24f81decd57f4b611b5ac6eb801cb3780bb02c0f9cdfe9d09daaddf9c";
|
|
99
|
+
* cons signer = new Signer({ privateKey });
|
|
67
100
|
* console.log(signer.getAddress());
|
|
68
101
|
* // 1MbL6mG8ASAvSYdoMnGUfG3ZXkmQ2dpL5b
|
|
69
102
|
* ```
|
|
70
103
|
*/
|
|
71
|
-
constructor(
|
|
104
|
+
constructor(c: {
|
|
105
|
+
privateKey: string | number | bigint | Uint8Array;
|
|
106
|
+
compressed?: boolean;
|
|
107
|
+
provider?: Provider;
|
|
108
|
+
/**
|
|
109
|
+
* Set this option if you can not use _eval_ functions
|
|
110
|
+
* in the current environment. In such cases, the
|
|
111
|
+
* serializer must come from an environment where it
|
|
112
|
+
* is able to use those functions.
|
|
113
|
+
*/
|
|
114
|
+
serializer?: Serializer;
|
|
115
|
+
});
|
|
72
116
|
/**
|
|
73
117
|
* Function to import a private key from the WIF
|
|
74
118
|
* @param wif - Private key in WIF format
|
|
@@ -125,20 +169,128 @@ export declare class Signer {
|
|
|
125
169
|
* @param tx - Unsigned transaction
|
|
126
170
|
* @returns
|
|
127
171
|
*/
|
|
128
|
-
signTransaction(tx:
|
|
172
|
+
signTransaction(tx: TransactionJson): Promise<TransactionJson>;
|
|
173
|
+
/**
|
|
174
|
+
* Function to sign and send a transaction. It internally uses
|
|
175
|
+
* [[Provider.sendTransaction]]
|
|
176
|
+
* @param tx - Transaction to send. It will be signed inside this function
|
|
177
|
+
* if it is not signed yet
|
|
178
|
+
* @param _abis - Collection of Abis to parse the operations in the
|
|
179
|
+
* transaction. This parameter is optional.
|
|
180
|
+
* @returns
|
|
181
|
+
*/
|
|
182
|
+
sendTransaction(tx: TransactionJson, _abis?: Record<string, Abi>): Promise<SendTransactionResponse>;
|
|
183
|
+
/**
|
|
184
|
+
* Function to recover the public key from a signed
|
|
185
|
+
* transaction or block.
|
|
186
|
+
* The output format can be compressed (default) or uncompressed.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* const publicKey = await Signer.recoverPublicKey(tx);
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* If the signature data contains more data, like in the
|
|
194
|
+
* blocks for PoW consensus, use the "transformSignature"
|
|
195
|
+
* function to extract the signature.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* const powDescriptorJson = {
|
|
200
|
+
* nested: {
|
|
201
|
+
* mypackage: {
|
|
202
|
+
* nested: {
|
|
203
|
+
* pow_signature_data: {
|
|
204
|
+
* fields: {
|
|
205
|
+
* nonce: {
|
|
206
|
+
* type: "bytes",
|
|
207
|
+
* id: 1,
|
|
208
|
+
* },
|
|
209
|
+
* recoverable_signature: {
|
|
210
|
+
* type: "bytes",
|
|
211
|
+
* id: 2,
|
|
212
|
+
* },
|
|
213
|
+
* },
|
|
214
|
+
* },
|
|
215
|
+
* },
|
|
216
|
+
* },
|
|
217
|
+
* },
|
|
218
|
+
* };
|
|
219
|
+
*
|
|
220
|
+
* const serializer = new Serializer(powDescriptorJson, {
|
|
221
|
+
* defaultTypeName: "pow_signature_data",
|
|
222
|
+
* });
|
|
223
|
+
*
|
|
224
|
+
* const signer = await Signer.recoverPublicKey(block, {
|
|
225
|
+
* transformSignature: async (signatureData) => {
|
|
226
|
+
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
227
|
+
* return powSignatureData.recoverable_signature;
|
|
228
|
+
* },
|
|
229
|
+
* });
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
static recoverPublicKey(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
233
|
+
/**
|
|
234
|
+
* Function to recover the signer address from a signed
|
|
235
|
+
* transaction or block.
|
|
236
|
+
* The output format can be compressed (default) or uncompressed.
|
|
237
|
+
* @example
|
|
238
|
+
* ```ts
|
|
239
|
+
* const publicKey = await Signer.recoverAddress(tx);
|
|
240
|
+
* ```
|
|
241
|
+
*
|
|
242
|
+
* If the signature data contains more data, like in the
|
|
243
|
+
* blocks for PoW consensus, use the "transformSignature"
|
|
244
|
+
* function to extract the signature.
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```ts
|
|
248
|
+
* const powDescriptorJson = {
|
|
249
|
+
* nested: {
|
|
250
|
+
* mypackage: {
|
|
251
|
+
* nested: {
|
|
252
|
+
* pow_signature_data: {
|
|
253
|
+
* fields: {
|
|
254
|
+
* nonce: {
|
|
255
|
+
* type: "bytes",
|
|
256
|
+
* id: 1,
|
|
257
|
+
* },
|
|
258
|
+
* recoverable_signature: {
|
|
259
|
+
* type: "bytes",
|
|
260
|
+
* id: 2,
|
|
261
|
+
* },
|
|
262
|
+
* },
|
|
263
|
+
* },
|
|
264
|
+
* },
|
|
265
|
+
* },
|
|
266
|
+
* },
|
|
267
|
+
* };
|
|
268
|
+
*
|
|
269
|
+
* const serializer = new Serializer(powDescriptorJson, {
|
|
270
|
+
* defaultTypeName: "pow_signature_data",
|
|
271
|
+
* });
|
|
272
|
+
*
|
|
273
|
+
* const signer = await Signer.recoverAddress(block, {
|
|
274
|
+
* transformSignature: async (signatureData) => {
|
|
275
|
+
* const powSignatureData = await serializer.deserialize(signatureData);
|
|
276
|
+
* return powSignatureData.recoverable_signature;
|
|
277
|
+
* },
|
|
278
|
+
* });
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
static recoverAddress(txOrBlock: TransactionJson | BlockJson, opts?: RecoverPublicKeyOptions): Promise<string>;
|
|
129
282
|
/**
|
|
130
|
-
* Function to
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
283
|
+
* Function to encode a transaction
|
|
284
|
+
* @param activeData - Active data consists of nonce, rc_limit, and
|
|
285
|
+
* operations. Do not set the nonce to get it from the blockchain
|
|
286
|
+
* using the provider. The rc_limit is 1000000 by default.
|
|
287
|
+
* @returns A transaction encoded. The active field is encoded in
|
|
288
|
+
* base64url
|
|
134
289
|
*/
|
|
135
|
-
|
|
290
|
+
encodeTransaction(activeData: ActiveTransactionData): Promise<TransactionJson>;
|
|
136
291
|
/**
|
|
137
|
-
* Function to
|
|
138
|
-
* The output format can be compressed or uncompressed.
|
|
139
|
-
* @param tx - signed transaction
|
|
140
|
-
* @param compressed - output format (compressed by default)
|
|
292
|
+
* Function to decode a transaction
|
|
141
293
|
*/
|
|
142
|
-
|
|
294
|
+
decodeTransaction(tx: TransactionJson): Promise<ActiveTransactionData>;
|
|
143
295
|
}
|
|
144
296
|
export default Signer;
|