@ecency/hive-tx 7.1.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/LICENSE +21 -0
- package/README.md +206 -0
- package/dist/browser/hive-tx.min.js +3 -0
- package/dist/browser/hive-tx.min.js.LICENSE.txt +5 -0
- package/dist/browser/hive-tx.min.js.map +1 -0
- package/dist/cjs/Transaction.d.ts +71 -0
- package/dist/cjs/Transaction.d.ts.map +1 -0
- package/dist/cjs/Transaction.js +199 -0
- package/dist/cjs/Transaction.js.map +1 -0
- package/dist/cjs/config.d.ts +37 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +54 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/helpers/Asset.d.ts +21 -0
- package/dist/cjs/helpers/Asset.d.ts.map +1 -0
- package/dist/cjs/helpers/Asset.js +74 -0
- package/dist/cjs/helpers/Asset.js.map +1 -0
- package/dist/cjs/helpers/ByteBuffer.d.ts +75 -0
- package/dist/cjs/helpers/ByteBuffer.d.ts.map +1 -0
- package/dist/cjs/helpers/ByteBuffer.js +555 -0
- package/dist/cjs/helpers/ByteBuffer.js.map +1 -0
- package/dist/cjs/helpers/HexBuffer.d.ts +10 -0
- package/dist/cjs/helpers/HexBuffer.d.ts.map +1 -0
- package/dist/cjs/helpers/HexBuffer.js +33 -0
- package/dist/cjs/helpers/HexBuffer.js.map +1 -0
- package/dist/cjs/helpers/PrivateKey.d.ts +114 -0
- package/dist/cjs/helpers/PrivateKey.d.ts.map +1 -0
- package/dist/cjs/helpers/PrivateKey.js +212 -0
- package/dist/cjs/helpers/PrivateKey.js.map +1 -0
- package/dist/cjs/helpers/PublicKey.d.ts +47 -0
- package/dist/cjs/helpers/PublicKey.d.ts.map +1 -0
- package/dist/cjs/helpers/PublicKey.js +97 -0
- package/dist/cjs/helpers/PublicKey.js.map +1 -0
- package/dist/cjs/helpers/Signature.d.ts +38 -0
- package/dist/cjs/helpers/Signature.d.ts.map +1 -0
- package/dist/cjs/helpers/Signature.js +85 -0
- package/dist/cjs/helpers/Signature.js.map +1 -0
- package/dist/cjs/helpers/aes.d.ts +15 -0
- package/dist/cjs/helpers/aes.d.ts.map +1 -0
- package/dist/cjs/helpers/aes.js +87 -0
- package/dist/cjs/helpers/aes.js.map +1 -0
- package/dist/cjs/helpers/call.d.ts +119 -0
- package/dist/cjs/helpers/call.d.ts.map +1 -0
- package/dist/cjs/helpers/call.js +498 -0
- package/dist/cjs/helpers/call.js.map +1 -0
- package/dist/cjs/helpers/deserializer.d.ts +4 -0
- package/dist/cjs/helpers/deserializer.d.ts.map +1 -0
- package/dist/cjs/helpers/deserializer.js +58 -0
- package/dist/cjs/helpers/deserializer.js.map +1 -0
- package/dist/cjs/helpers/memo.d.ts +36 -0
- package/dist/cjs/helpers/memo.d.ts.map +1 -0
- package/dist/cjs/helpers/memo.js +167 -0
- package/dist/cjs/helpers/memo.js.map +1 -0
- package/dist/cjs/helpers/serializer.d.ts +14 -0
- package/dist/cjs/helpers/serializer.d.ts.map +1 -0
- package/dist/cjs/helpers/serializer.js +639 -0
- package/dist/cjs/helpers/serializer.js.map +1 -0
- package/dist/cjs/helpers/sleep.d.ts +2 -0
- package/dist/cjs/helpers/sleep.d.ts.map +1 -0
- package/dist/cjs/helpers/sleep.js +8 -0
- package/dist/cjs/helpers/sleep.js.map +1 -0
- package/dist/cjs/helpers/utils.d.ts +122 -0
- package/dist/cjs/helpers/utils.d.ts.map +1 -0
- package/dist/cjs/helpers/utils.js +202 -0
- package/dist/cjs/helpers/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +60 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/type_generators/types/balance.d.ts +1096 -0
- package/dist/cjs/type_generators/types/balance.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/balance.js +3 -0
- package/dist/cjs/type_generators/types/balance.js.map +1 -0
- package/dist/cjs/type_generators/types/hafah.d.ts +2154 -0
- package/dist/cjs/type_generators/types/hafah.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafah.js +3 -0
- package/dist/cjs/type_generators/types/hafah.js.map +1 -0
- package/dist/cjs/type_generators/types/hafbe.d.ts +2121 -0
- package/dist/cjs/type_generators/types/hafbe.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafbe.js +3 -0
- package/dist/cjs/type_generators/types/hafbe.js.map +1 -0
- package/dist/cjs/type_generators/types/hafsql.d.ts +2439 -0
- package/dist/cjs/type_generators/types/hafsql.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafsql.js +3 -0
- package/dist/cjs/type_generators/types/hafsql.js.map +1 -0
- package/dist/cjs/type_generators/types/hivemind.d.ts +202 -0
- package/dist/cjs/type_generators/types/hivemind.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hivemind.js +3 -0
- package/dist/cjs/type_generators/types/hivemind.js.map +1 -0
- package/dist/cjs/type_generators/types/hivesense.d.ts +448 -0
- package/dist/cjs/type_generators/types/hivesense.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hivesense.js +3 -0
- package/dist/cjs/type_generators/types/hivesense.js.map +1 -0
- package/dist/cjs/type_generators/types/nft-tracker.d.ts +348 -0
- package/dist/cjs/type_generators/types/nft-tracker.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/nft-tracker.js +3 -0
- package/dist/cjs/type_generators/types/nft-tracker.js.map +1 -0
- package/dist/cjs/type_generators/types/reputation.d.ts +182 -0
- package/dist/cjs/type_generators/types/reputation.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/reputation.js +3 -0
- package/dist/cjs/type_generators/types/reputation.js.map +1 -0
- package/dist/cjs/type_generators/types/status.d.ts +139 -0
- package/dist/cjs/type_generators/types/status.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/status.js +3 -0
- package/dist/cjs/type_generators/types/status.js.map +1 -0
- package/dist/cjs/types.d.ts +415 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/Transaction.d.ts +71 -0
- package/dist/esm/Transaction.d.ts.map +1 -0
- package/dist/esm/Transaction.js +195 -0
- package/dist/esm/Transaction.js.map +1 -0
- package/dist/esm/config.d.ts +37 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +51 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/helpers/Asset.d.ts +21 -0
- package/dist/esm/helpers/Asset.d.ts.map +1 -0
- package/dist/esm/helpers/Asset.js +70 -0
- package/dist/esm/helpers/Asset.js.map +1 -0
- package/dist/esm/helpers/ByteBuffer.d.ts +75 -0
- package/dist/esm/helpers/ByteBuffer.d.ts.map +1 -0
- package/dist/esm/helpers/ByteBuffer.js +551 -0
- package/dist/esm/helpers/ByteBuffer.js.map +1 -0
- package/dist/esm/helpers/HexBuffer.d.ts +10 -0
- package/dist/esm/helpers/HexBuffer.d.ts.map +1 -0
- package/dist/esm/helpers/HexBuffer.js +29 -0
- package/dist/esm/helpers/HexBuffer.js.map +1 -0
- package/dist/esm/helpers/PrivateKey.d.ts +114 -0
- package/dist/esm/helpers/PrivateKey.d.ts.map +1 -0
- package/dist/esm/helpers/PrivateKey.js +205 -0
- package/dist/esm/helpers/PrivateKey.js.map +1 -0
- package/dist/esm/helpers/PublicKey.d.ts +47 -0
- package/dist/esm/helpers/PublicKey.d.ts.map +1 -0
- package/dist/esm/helpers/PublicKey.js +90 -0
- package/dist/esm/helpers/PublicKey.js.map +1 -0
- package/dist/esm/helpers/Signature.d.ts +38 -0
- package/dist/esm/helpers/Signature.d.ts.map +1 -0
- package/dist/esm/helpers/Signature.js +81 -0
- package/dist/esm/helpers/Signature.js.map +1 -0
- package/dist/esm/helpers/aes.d.ts +15 -0
- package/dist/esm/helpers/aes.d.ts.map +1 -0
- package/dist/esm/helpers/aes.js +81 -0
- package/dist/esm/helpers/aes.js.map +1 -0
- package/dist/esm/helpers/call.d.ts +119 -0
- package/dist/esm/helpers/call.d.ts.map +1 -0
- package/dist/esm/helpers/call.js +490 -0
- package/dist/esm/helpers/call.js.map +1 -0
- package/dist/esm/helpers/deserializer.d.ts +4 -0
- package/dist/esm/helpers/deserializer.d.ts.map +1 -0
- package/dist/esm/helpers/deserializer.js +55 -0
- package/dist/esm/helpers/deserializer.js.map +1 -0
- package/dist/esm/helpers/memo.d.ts +36 -0
- package/dist/esm/helpers/memo.d.ts.map +1 -0
- package/dist/esm/helpers/memo.js +128 -0
- package/dist/esm/helpers/memo.js.map +1 -0
- package/dist/esm/helpers/serializer.d.ts +14 -0
- package/dist/esm/helpers/serializer.d.ts.map +1 -0
- package/dist/esm/helpers/serializer.js +636 -0
- package/dist/esm/helpers/serializer.js.map +1 -0
- package/dist/esm/helpers/sleep.d.ts +2 -0
- package/dist/esm/helpers/sleep.d.ts.map +1 -0
- package/dist/esm/helpers/sleep.js +4 -0
- package/dist/esm/helpers/sleep.js.map +1 -0
- package/dist/esm/helpers/utils.d.ts +122 -0
- package/dist/esm/helpers/utils.d.ts.map +1 -0
- package/dist/esm/helpers/utils.js +196 -0
- package/dist/esm/helpers/utils.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/type_generators/types/balance.d.ts +1096 -0
- package/dist/esm/type_generators/types/balance.d.ts.map +1 -0
- package/dist/esm/type_generators/types/balance.js +2 -0
- package/dist/esm/type_generators/types/balance.js.map +1 -0
- package/dist/esm/type_generators/types/hafah.d.ts +2154 -0
- package/dist/esm/type_generators/types/hafah.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafah.js +2 -0
- package/dist/esm/type_generators/types/hafah.js.map +1 -0
- package/dist/esm/type_generators/types/hafbe.d.ts +2121 -0
- package/dist/esm/type_generators/types/hafbe.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafbe.js +2 -0
- package/dist/esm/type_generators/types/hafbe.js.map +1 -0
- package/dist/esm/type_generators/types/hafsql.d.ts +2439 -0
- package/dist/esm/type_generators/types/hafsql.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafsql.js +2 -0
- package/dist/esm/type_generators/types/hafsql.js.map +1 -0
- package/dist/esm/type_generators/types/hivemind.d.ts +202 -0
- package/dist/esm/type_generators/types/hivemind.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hivemind.js +2 -0
- package/dist/esm/type_generators/types/hivemind.js.map +1 -0
- package/dist/esm/type_generators/types/hivesense.d.ts +448 -0
- package/dist/esm/type_generators/types/hivesense.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hivesense.js +2 -0
- package/dist/esm/type_generators/types/hivesense.js.map +1 -0
- package/dist/esm/type_generators/types/nft-tracker.d.ts +348 -0
- package/dist/esm/type_generators/types/nft-tracker.d.ts.map +1 -0
- package/dist/esm/type_generators/types/nft-tracker.js +2 -0
- package/dist/esm/type_generators/types/nft-tracker.js.map +1 -0
- package/dist/esm/type_generators/types/reputation.d.ts +182 -0
- package/dist/esm/type_generators/types/reputation.d.ts.map +1 -0
- package/dist/esm/type_generators/types/reputation.js +2 -0
- package/dist/esm/type_generators/types/reputation.js.map +1 -0
- package/dist/esm/type_generators/types/status.d.ts +139 -0
- package/dist/esm/type_generators/types/status.d.ts.map +1 -0
- package/dist/esm/type_generators/types/status.js +2 -0
- package/dist/esm/type_generators/types/status.js.map +1 -0
- package/dist/esm/types.d.ts +415 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';
|
|
2
|
+
import { ByteBuffer } from './helpers/ByteBuffer';
|
|
3
|
+
import { Serializer } from './helpers/serializer';
|
|
4
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
5
|
+
import { config } from './config';
|
|
6
|
+
import { callRPC, callRPCBroadcast, RPCError } from './helpers/call';
|
|
7
|
+
import { sleep } from './helpers/sleep';
|
|
8
|
+
const chainId = hexToBytes(config.chain_id);
|
|
9
|
+
export class Transaction {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.expiration = 60000;
|
|
12
|
+
/**
|
|
13
|
+
* Creates the transaction structure and initializes it with blockchain data.
|
|
14
|
+
* Retrieves current head block information and sets up reference block data.
|
|
15
|
+
* @private
|
|
16
|
+
* @param expiration Transaction expiration in milliseconds
|
|
17
|
+
*/
|
|
18
|
+
this.createTransaction = async (expiration) => {
|
|
19
|
+
const props = await callRPC('condenser_api.get_dynamic_global_properties', []);
|
|
20
|
+
const bytes = hexToBytes(props.head_block_id);
|
|
21
|
+
const refBlockPrefix = Number(new Uint32Array(bytes.buffer, bytes.byteOffset + 4, 1)[0]);
|
|
22
|
+
const expirationIso = new Date(Date.now() + expiration).toISOString().slice(0, -5);
|
|
23
|
+
this.transaction = {
|
|
24
|
+
expiration: expirationIso,
|
|
25
|
+
extensions: [],
|
|
26
|
+
operations: [],
|
|
27
|
+
ref_block_num: props.head_block_number & 0xffff,
|
|
28
|
+
ref_block_prefix: refBlockPrefix,
|
|
29
|
+
signatures: []
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
if (options?.transaction) {
|
|
33
|
+
if (options.transaction instanceof Transaction) {
|
|
34
|
+
this.transaction = options.transaction.transaction;
|
|
35
|
+
this.expiration = options.transaction.expiration;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.transaction = options.transaction;
|
|
39
|
+
}
|
|
40
|
+
this.txId = this.digest().txId;
|
|
41
|
+
}
|
|
42
|
+
if (options?.expiration) {
|
|
43
|
+
this.expiration = options.expiration;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Adds an operation to the transaction. If no transaction exists, creates one first.
|
|
48
|
+
* @template O Operation name type for type safety
|
|
49
|
+
* @param operationName The name/type of the operation to add (e.g., 'transfer', 'vote', 'comment')
|
|
50
|
+
* @param operationBody The operation data/body for the specified operation type
|
|
51
|
+
* @returns Promise that resolves when the operation is added
|
|
52
|
+
* @throws Error if transaction creation fails or global properties cannot be retrieved
|
|
53
|
+
*/
|
|
54
|
+
async addOperation(operationName, operationBody) {
|
|
55
|
+
if (!this.transaction) {
|
|
56
|
+
await this.createTransaction(this.expiration);
|
|
57
|
+
}
|
|
58
|
+
this.transaction.operations.push([operationName, operationBody]);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Signs the transaction with the provided key(s), supporting both single and multi-signature transactions.
|
|
62
|
+
* For multi-signature, you can sign with all keys at once or sign individually by calling this method multiple times.
|
|
63
|
+
* @param keys Single PrivateKey or array of PrivateKeys to sign the transaction with
|
|
64
|
+
* @returns The signed transaction
|
|
65
|
+
* @throws Error if no transaction exists to sign
|
|
66
|
+
*/
|
|
67
|
+
sign(keys) {
|
|
68
|
+
if (!this.transaction) {
|
|
69
|
+
throw new Error('First create a transaction by .addOperation()');
|
|
70
|
+
}
|
|
71
|
+
if (this.transaction) {
|
|
72
|
+
const { digest, txId } = this.digest();
|
|
73
|
+
if (!Array.isArray(keys)) {
|
|
74
|
+
keys = [keys];
|
|
75
|
+
}
|
|
76
|
+
for (const key of keys) {
|
|
77
|
+
const signature = key.sign(digest);
|
|
78
|
+
this.transaction.signatures.push(signature.customToString());
|
|
79
|
+
}
|
|
80
|
+
this.txId = txId;
|
|
81
|
+
return this.transaction;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw new Error('No transaction to sign');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Broadcasts the signed transaction to the Hive network.
|
|
89
|
+
* Automatically handles retries and duplicate transaction detection.
|
|
90
|
+
* @param checkStatus By default (false) the transaction is not guaranteed to be included in a block.
|
|
91
|
+
* For example the transaction can expire while waiting in mempool.
|
|
92
|
+
* If you pass true here, the function will wait for the transaction to be either included or dropped
|
|
93
|
+
* before returning a result.
|
|
94
|
+
* @returns Promise resolving to broadcast result
|
|
95
|
+
* @throws Error if no transaction exists or transaction is not signed or transaction got rejected
|
|
96
|
+
*/
|
|
97
|
+
async broadcast(checkStatus = false) {
|
|
98
|
+
if (!this.transaction) {
|
|
99
|
+
throw new Error('Attempted to broadcast an empty transaction. Add operations by .addOperation()');
|
|
100
|
+
}
|
|
101
|
+
if (this.transaction.signatures.length === 0) {
|
|
102
|
+
throw new Error('Attempted to broadcast a transaction with no signatures. Sign using .sign(keys)');
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
await callRPCBroadcast('condenser_api.broadcast_transaction', [this.transaction]);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
if (e instanceof RPCError && e.message.includes('Duplicate transaction check failed')) {
|
|
109
|
+
// ignore duplicate transaction error as this can happen when we retry the broadcast
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw e;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (!this.txId) {
|
|
116
|
+
this.txId = this.digest().txId;
|
|
117
|
+
}
|
|
118
|
+
if (!checkStatus) {
|
|
119
|
+
return { tx_id: this.txId, status: 'unknown' };
|
|
120
|
+
}
|
|
121
|
+
// Poll until the transaction reaches a final state or max attempts exceeded.
|
|
122
|
+
// With 60 attempts: delays grow from 1.3s to 19s, total wait ~10 minutes.
|
|
123
|
+
const maxPollAttempts = 60;
|
|
124
|
+
await sleep(1000);
|
|
125
|
+
let status = await this.checkStatus();
|
|
126
|
+
let i = 1;
|
|
127
|
+
while (status?.status !== 'within_irreversible_block' &&
|
|
128
|
+
status?.status !== 'expired_irreversible' &&
|
|
129
|
+
status?.status !== 'too_old' &&
|
|
130
|
+
i < maxPollAttempts) {
|
|
131
|
+
await sleep(1000 + i * 300);
|
|
132
|
+
status = await this.checkStatus();
|
|
133
|
+
i++;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
tx_id: this.txId,
|
|
137
|
+
status: (status?.status ?? 'unknown')
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns the transaction digest containing the transaction ID and hash.
|
|
142
|
+
* The digest can be used to verify signatures and for transaction identification.
|
|
143
|
+
* @returns DigestData containing transaction ID and hash
|
|
144
|
+
* @throws Error if no transaction exists
|
|
145
|
+
*/
|
|
146
|
+
digest() {
|
|
147
|
+
if (!this.transaction) {
|
|
148
|
+
throw new Error('First create a transaction by .addOperation()');
|
|
149
|
+
}
|
|
150
|
+
const buffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
151
|
+
const temp = { ...this.transaction };
|
|
152
|
+
try {
|
|
153
|
+
Serializer.Transaction(buffer, temp);
|
|
154
|
+
}
|
|
155
|
+
catch (cause) {
|
|
156
|
+
throw new Error('Unable to serialize transaction: ' + cause);
|
|
157
|
+
}
|
|
158
|
+
buffer.flip();
|
|
159
|
+
const transactionData = new Uint8Array(buffer.toBuffer());
|
|
160
|
+
const txId = bytesToHex(sha256(transactionData)).slice(0, 40);
|
|
161
|
+
const digest = sha256(new Uint8Array([...chainId, ...transactionData]));
|
|
162
|
+
return { digest, txId };
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Adds a signature to an already created transaction. Useful when signing with external tools.
|
|
166
|
+
* Multiple signatures can be added one at a time for multi-signature transactions.
|
|
167
|
+
* @param signature The signature string in hex format (must be exactly 130 characters)
|
|
168
|
+
* @returns The transaction with the added signature
|
|
169
|
+
* @throws Error if no transaction exists or signature format is invalid
|
|
170
|
+
*/
|
|
171
|
+
addSignature(signature) {
|
|
172
|
+
if (!this.transaction) {
|
|
173
|
+
throw new Error('First create a transaction by .create(operations)');
|
|
174
|
+
}
|
|
175
|
+
if (typeof signature !== 'string') {
|
|
176
|
+
throw new Error('Signature must be string');
|
|
177
|
+
}
|
|
178
|
+
if (signature.length !== 130) {
|
|
179
|
+
throw new Error('Signature must be 130 characters long');
|
|
180
|
+
}
|
|
181
|
+
this.transaction.signatures.push(signature);
|
|
182
|
+
return this.transaction;
|
|
183
|
+
}
|
|
184
|
+
/** Get status of this transaction. Usually called internally after broadcasting. */
|
|
185
|
+
async checkStatus() {
|
|
186
|
+
if (!this.txId) {
|
|
187
|
+
this.txId = this.digest().txId;
|
|
188
|
+
}
|
|
189
|
+
return callRPC('transaction_status_api.find_transaction', {
|
|
190
|
+
transaction_id: this.txId,
|
|
191
|
+
expiration: this.transaction?.expiration
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=Transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/Transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration object for customizing hive-tx library behavior.
|
|
3
|
+
* Modify these values to change the default node endpoints, timeout, and other settings.
|
|
4
|
+
*/
|
|
5
|
+
export declare const config: {
|
|
6
|
+
/**
|
|
7
|
+
* Array of Hive API node endpoints for load balancing and failover.
|
|
8
|
+
* @default Array of multiple Hive API endpoints
|
|
9
|
+
*/
|
|
10
|
+
nodes: string[];
|
|
11
|
+
/**
|
|
12
|
+
* Array Hive API node endpoints that support REST APIs
|
|
13
|
+
* Note: Without the trailing /
|
|
14
|
+
*/
|
|
15
|
+
restNodes: string[];
|
|
16
|
+
/**
|
|
17
|
+
* The Hive blockchain chain ID for transaction signing and verification.
|
|
18
|
+
* @default Mainnet chain ID
|
|
19
|
+
*/
|
|
20
|
+
chain_id: string;
|
|
21
|
+
/**
|
|
22
|
+
* Address prefix used for public key formatting (STM for mainnet).
|
|
23
|
+
* @default 'STM'
|
|
24
|
+
*/
|
|
25
|
+
address_prefix: string;
|
|
26
|
+
/**
|
|
27
|
+
* Timeout in milliseconds for individual API calls.
|
|
28
|
+
* @default 10000
|
|
29
|
+
*/
|
|
30
|
+
timeout: number;
|
|
31
|
+
/**
|
|
32
|
+
* Number of retry attempts for failed API calls before throwing an error.
|
|
33
|
+
* @default 8
|
|
34
|
+
*/
|
|
35
|
+
retry: number;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;;OAGG;;IAWH;;;OAGG;;IASH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEJ,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration object for customizing hive-tx library behavior.
|
|
3
|
+
* Modify these values to change the default node endpoints, timeout, and other settings.
|
|
4
|
+
*/
|
|
5
|
+
export const config = {
|
|
6
|
+
/**
|
|
7
|
+
* Array of Hive API node endpoints for load balancing and failover.
|
|
8
|
+
* @default Array of multiple Hive API endpoints
|
|
9
|
+
*/
|
|
10
|
+
nodes: [
|
|
11
|
+
'https://api.hive.blog',
|
|
12
|
+
'https://api.deathwing.me',
|
|
13
|
+
'https://api.openhive.network',
|
|
14
|
+
'https://rpc.mahdiyari.info',
|
|
15
|
+
'https://techcoderx.com',
|
|
16
|
+
'https://hiveapi.actifit.io',
|
|
17
|
+
'https://api.c0ff33a.uk'
|
|
18
|
+
],
|
|
19
|
+
/**
|
|
20
|
+
* Array Hive API node endpoints that support REST APIs
|
|
21
|
+
* Note: Without the trailing /
|
|
22
|
+
*/
|
|
23
|
+
restNodes: [
|
|
24
|
+
'https://api.hive.blog',
|
|
25
|
+
'https://rpc.mahdiyari.info',
|
|
26
|
+
'https://techcoderx.com',
|
|
27
|
+
'https://hiveapi.actifit.io',
|
|
28
|
+
'https://api.c0ff33a.uk'
|
|
29
|
+
],
|
|
30
|
+
/**
|
|
31
|
+
* The Hive blockchain chain ID for transaction signing and verification.
|
|
32
|
+
* @default Mainnet chain ID
|
|
33
|
+
*/
|
|
34
|
+
chain_id: 'beeab0de00000000000000000000000000000000000000000000000000000000',
|
|
35
|
+
/**
|
|
36
|
+
* Address prefix used for public key formatting (STM for mainnet).
|
|
37
|
+
* @default 'STM'
|
|
38
|
+
*/
|
|
39
|
+
address_prefix: 'STM',
|
|
40
|
+
/**
|
|
41
|
+
* Timeout in milliseconds for individual API calls.
|
|
42
|
+
* @default 10000
|
|
43
|
+
*/
|
|
44
|
+
timeout: 10000,
|
|
45
|
+
/**
|
|
46
|
+
* Number of retry attempts for failed API calls before throwing an error.
|
|
47
|
+
* @default 8
|
|
48
|
+
*/
|
|
49
|
+
retry: 8
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB;;;OAGG;IACH,KAAK,EAAE;QACL,uBAAuB;QACvB,0BAA0B;QAC1B,8BAA8B;QAC9B,4BAA4B;QAC5B,wBAAwB;QACxB,4BAA4B;QAC5B,wBAAwB;KACzB;IAED;;;OAGG;IACH,SAAS,EAAE;QACT,uBAAuB;QACvB,4BAA4B;QAC5B,wBAAwB;QACxB,4BAA4B;QAC5B,wBAAwB;KACzB;IAED;;;OAGG;IACH,QAAQ,EAAE,kEAAkE;IAE5E;;;OAGG;IACH,cAAc,EAAE,KAAK;IAErB;;;OAGG;IACH,OAAO,EAAE,KAAM;IAEf;;;OAGG;IACH,KAAK,EAAE,CAAC;CACT,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Class representing a hive asset,
|
|
2
|
+
* e.g. `1.000 HIVE` or `12.112233 VESTS`. */
|
|
3
|
+
export declare class Asset {
|
|
4
|
+
amount: number;
|
|
5
|
+
symbol: string;
|
|
6
|
+
constructor(amount: number, symbol: string);
|
|
7
|
+
/** Create a new Asset instance from a string, e.g. `42.000 HIVE`. */
|
|
8
|
+
static fromString(string: string, expectedSymbol?: string | null): Asset;
|
|
9
|
+
/**
|
|
10
|
+
* Convenience to create new Asset.
|
|
11
|
+
* @param symbol Symbol to use when created from number. Will also be used to validate
|
|
12
|
+
* the asset, throws if the passed value has a different symbol than this.
|
|
13
|
+
*/
|
|
14
|
+
static from(value: number | string | Asset, symbol?: string | null): Asset;
|
|
15
|
+
/** Return asset precision. */
|
|
16
|
+
getPrecision(): 3 | 6;
|
|
17
|
+
/** Return a string representation of this asset, e.g. `42.000 HIVE`. */
|
|
18
|
+
toString(): string;
|
|
19
|
+
toJSON(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Asset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../src/helpers/Asset.ts"],"names":[],"mappings":"AAAA;6CAC6C;AAC7C,qBAAa,KAAK;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;gBAEF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK1C,qEAAqE;IACrE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,GAAG,IAAW,GAAG,KAAK;IAe9E;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK;IAiB1E,8BAA8B;IAC9B,YAAY;IAgBZ,wEAAwE;IACxE,QAAQ;IAIR,MAAM;CAGP"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** Class representing a hive asset,
|
|
2
|
+
* e.g. `1.000 HIVE` or `12.112233 VESTS`. */
|
|
3
|
+
export class Asset {
|
|
4
|
+
constructor(amount, symbol) {
|
|
5
|
+
this.amount = amount;
|
|
6
|
+
this.symbol = symbol === 'HIVE' ? 'STEEM' : symbol === 'HBD' ? 'SBD' : symbol;
|
|
7
|
+
}
|
|
8
|
+
/** Create a new Asset instance from a string, e.g. `42.000 HIVE`. */
|
|
9
|
+
static fromString(string, expectedSymbol = null) {
|
|
10
|
+
const [amountString, symbol] = string.split(' ');
|
|
11
|
+
if (['STEEM', 'VESTS', 'SBD', 'TESTS', 'TBD', 'HIVE', 'HBD'].indexOf(symbol) === -1) {
|
|
12
|
+
throw new Error(`Invalid asset symbol: ${symbol}`);
|
|
13
|
+
}
|
|
14
|
+
if (expectedSymbol && symbol !== expectedSymbol) {
|
|
15
|
+
throw new Error(`Invalid asset, expected symbol: ${expectedSymbol} got: ${symbol}`);
|
|
16
|
+
}
|
|
17
|
+
const amount = Number.parseFloat(amountString);
|
|
18
|
+
if (!Number.isFinite(amount)) {
|
|
19
|
+
throw new Error(`Invalid asset amount: ${amountString}`);
|
|
20
|
+
}
|
|
21
|
+
return new Asset(amount, symbol);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convenience to create new Asset.
|
|
25
|
+
* @param symbol Symbol to use when created from number. Will also be used to validate
|
|
26
|
+
* the asset, throws if the passed value has a different symbol than this.
|
|
27
|
+
*/
|
|
28
|
+
static from(value, symbol) {
|
|
29
|
+
if (value instanceof Asset) {
|
|
30
|
+
if (symbol && value.symbol !== symbol) {
|
|
31
|
+
throw new Error(`Invalid asset, expected symbol: ${symbol} got: ${value.symbol}`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
else if (typeof value === 'number' && Number.isFinite(value)) {
|
|
36
|
+
return new Asset(value, symbol || 'STEEM');
|
|
37
|
+
}
|
|
38
|
+
else if (typeof value === 'string') {
|
|
39
|
+
return Asset.fromString(value, symbol);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error(`Invalid asset '${String(value)}'`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// We convert HIVE & HBD strings to STEEM & SBD because the serialization should be based on STEEM & SBD
|
|
46
|
+
/** Return asset precision. */
|
|
47
|
+
getPrecision() {
|
|
48
|
+
switch (this.symbol) {
|
|
49
|
+
case 'TESTS':
|
|
50
|
+
case 'TBD':
|
|
51
|
+
case 'STEEM':
|
|
52
|
+
case 'SBD':
|
|
53
|
+
case 'HBD':
|
|
54
|
+
case 'HIVE':
|
|
55
|
+
return 3;
|
|
56
|
+
case 'VESTS':
|
|
57
|
+
return 6;
|
|
58
|
+
default:
|
|
59
|
+
return 3;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Return a string representation of this asset, e.g. `42.000 HIVE`. */
|
|
63
|
+
toString() {
|
|
64
|
+
return `${this.amount.toFixed(this.getPrecision())} ${this.symbol}`;
|
|
65
|
+
}
|
|
66
|
+
toJSON() {
|
|
67
|
+
return this.toString();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=Asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Asset.js","sourceRoot":"","sources":["../../../src/helpers/Asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license bytebuffer.ts (c) 2015 Daniel Wirtz <dcode@dcode.io>
|
|
3
|
+
* Backing buffer: ArrayBuffer, Accessor: DataView
|
|
4
|
+
* Released under the Apache License, Version 2.0
|
|
5
|
+
* see: https://github.com/dcodeIO/bytebuffer.ts for details
|
|
6
|
+
* modified by @xmcl/bytebuffer
|
|
7
|
+
* And customized for hive-tx
|
|
8
|
+
*/
|
|
9
|
+
export declare class ByteBuffer {
|
|
10
|
+
static LITTLE_ENDIAN: boolean;
|
|
11
|
+
static BIG_ENDIAN: boolean;
|
|
12
|
+
static DEFAULT_CAPACITY: number;
|
|
13
|
+
static DEFAULT_ENDIAN: boolean;
|
|
14
|
+
buffer: ArrayBufferLike;
|
|
15
|
+
view: DataView;
|
|
16
|
+
offset: number;
|
|
17
|
+
markedOffset: number;
|
|
18
|
+
limit: number;
|
|
19
|
+
littleEndian: boolean;
|
|
20
|
+
constructor(capacity?: number, littleEndian?: boolean);
|
|
21
|
+
static allocate(capacity?: number, littleEndian?: boolean): ByteBuffer;
|
|
22
|
+
static concat(buffers: Array<ByteBuffer | ArrayBuffer | Uint8Array | number[]>, littleEndian?: boolean): ByteBuffer;
|
|
23
|
+
static wrap(buffer: ByteBuffer | ArrayBuffer | Uint8Array | number[], littleEndian?: boolean): ByteBuffer;
|
|
24
|
+
writeBytes(source: ByteBuffer | ArrayBuffer | Uint8Array | number[], offset?: number): ByteBuffer;
|
|
25
|
+
writeInt8(value: number, offset?: number): ByteBuffer;
|
|
26
|
+
writeByte(value: number, offset?: number): ByteBuffer;
|
|
27
|
+
writeUint8(value: number, offset?: number): ByteBuffer;
|
|
28
|
+
writeUInt8(value: number, offset?: number): ByteBuffer;
|
|
29
|
+
readUint8(offset?: number): number;
|
|
30
|
+
readUInt8(offset?: number): number;
|
|
31
|
+
writeInt16(value: number, offset?: number): ByteBuffer;
|
|
32
|
+
writeShort(value: number, offset?: number): ByteBuffer;
|
|
33
|
+
writeUint16(value: number, offset?: number): ByteBuffer;
|
|
34
|
+
writeUInt16(value: number, offset?: number): ByteBuffer;
|
|
35
|
+
writeInt32(value: number, offset?: number): ByteBuffer;
|
|
36
|
+
writeInt(value: number, offset?: number): ByteBuffer;
|
|
37
|
+
writeUint32(value: number, offset?: number): ByteBuffer;
|
|
38
|
+
writeUInt32(value: number, offset?: number): ByteBuffer;
|
|
39
|
+
readUint32(offset?: number): number;
|
|
40
|
+
readUInt32: (offset?: number) => number;
|
|
41
|
+
append(source: ByteBuffer | ArrayBuffer | Uint8Array | number[], offset?: number): ByteBuffer;
|
|
42
|
+
clone(copy?: boolean): ByteBuffer;
|
|
43
|
+
copy(begin?: number, end?: number): ByteBuffer;
|
|
44
|
+
copyTo(target: ByteBuffer, targetOffset?: number, sourceOffset?: number, sourceLimit?: number): ByteBuffer;
|
|
45
|
+
ensureCapacity(capacity: number): ByteBuffer;
|
|
46
|
+
flip(): ByteBuffer;
|
|
47
|
+
resize(capacity: number): ByteBuffer;
|
|
48
|
+
skip(length: number): ByteBuffer;
|
|
49
|
+
writeInt64(value: number | bigint, offset?: number): ByteBuffer;
|
|
50
|
+
writeLong(value: number | bigint, offset?: number): ByteBuffer;
|
|
51
|
+
readInt64(offset?: number): bigint;
|
|
52
|
+
readLong(offset?: number): bigint;
|
|
53
|
+
writeUint64(value: number | bigint, offset?: number): ByteBuffer;
|
|
54
|
+
writeUInt64(value: number | bigint, offset?: number): ByteBuffer;
|
|
55
|
+
readUint64(offset?: number): bigint;
|
|
56
|
+
readUInt64(offset?: number): bigint;
|
|
57
|
+
toBuffer(forceCopy?: boolean): ArrayBufferLike;
|
|
58
|
+
toArrayBuffer(forceCopy?: boolean): ArrayBufferLike;
|
|
59
|
+
writeVarint32(value: number, offset?: number): ByteBuffer | number;
|
|
60
|
+
readVarint32(offset?: number): number | {
|
|
61
|
+
value: number;
|
|
62
|
+
length: number;
|
|
63
|
+
};
|
|
64
|
+
calculateVarint32(value: number): number;
|
|
65
|
+
writeVString(str: string, offset?: number): ByteBuffer | number;
|
|
66
|
+
readVString(offset?: number): string | {
|
|
67
|
+
string: string;
|
|
68
|
+
length: number;
|
|
69
|
+
};
|
|
70
|
+
readUTF8String(length: number, offset?: number): string | {
|
|
71
|
+
string: string;
|
|
72
|
+
length: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ByteBuffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ByteBuffer.d.ts","sourceRoot":"","sources":["../../../src/helpers/ByteBuffer.ts"],"names":[],"mappings":"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"}
|