@hashgraphonline/standards-sdk 0.1.177 → 0.1.178
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/hcs-11/client.d.ts +30 -30
- package/dist/browser/hcs-21/types.d.ts +23 -23
- package/dist/browser/inscribe/inscriber.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client/base-client.d.ts +13 -1
- package/dist/browser/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client/credits.d.ts +6 -1
- package/dist/browser/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/client/guard.d.ts +10 -0
- package/dist/browser/services/registry-broker/client/guard.d.ts.map +1 -0
- package/dist/browser/services/registry-broker/client/skills.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/schemas.d.ts +723 -45
- package/dist/browser/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/browser/services/registry-broker/types.d.ts +31 -1
- package/dist/browser/services/registry-broker/types.d.ts.map +1 -1
- package/dist/browser/standards-sdk.browser.js +163 -6
- package/dist/browser/standards-sdk.browser.js.map +1 -1
- package/dist/browser/utils/dynamic-import.d.ts.map +1 -1
- package/dist/browser-root/hcs-11/client.d.ts +30 -30
- package/dist/browser-root/hcs-21/types.d.ts +23 -23
- package/dist/browser-root/inscribe/inscriber.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts +13 -1
- package/dist/browser-root/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client/credits.d.ts +6 -1
- package/dist/browser-root/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/client/guard.d.ts +10 -0
- package/dist/browser-root/services/registry-broker/client/guard.d.ts.map +1 -0
- package/dist/browser-root/services/registry-broker/client/skills.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/schemas.d.ts +723 -45
- package/dist/browser-root/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/browser-root/services/registry-broker/types.d.ts +31 -1
- package/dist/browser-root/services/registry-broker/types.d.ts.map +1 -1
- package/dist/browser-root/standards-sdk.root-browser.js +373 -131
- package/dist/browser-root/standards-sdk.root-browser.js.map +1 -1
- package/dist/browser-root/utils/dynamic-import.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts +30 -30
- package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts +13 -1
- package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/credits.d.ts +6 -1
- package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client/guard.d.ts +10 -0
- package/dist/cjs/services/registry-broker/client/guard.d.ts.map +1 -0
- package/dist/cjs/services/registry-broker/client/skills.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +686 -8
- package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/types.d.ts +31 -1
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +2 -2
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts +30 -30
- package/dist/es/inscribe/inscriber.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts +13 -1
- package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/credits.d.ts +6 -1
- package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client/guard.d.ts +10 -0
- package/dist/es/services/registry-broker/client/guard.d.ts.map +1 -0
- package/dist/es/services/registry-broker/client/skills.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +686 -8
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/services/registry-broker/types.d.ts +31 -1
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es121.js +1 -1
- package/dist/es/standards-sdk.es128.js +5 -5
- package/dist/es/standards-sdk.es138.js +1 -1
- package/dist/es/standards-sdk.es139.js +1 -1
- package/dist/es/standards-sdk.es140.js +5 -5
- package/dist/es/standards-sdk.es142.js +8 -5
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +37 -6
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +1 -1
- package/dist/es/standards-sdk.es148.js +1 -1
- package/dist/es/standards-sdk.es161.js +165 -2
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +54 -15
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +97 -158
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +71 -312
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +187 -333
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +13 -449
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +65 -323
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +162 -66
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +304 -740
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +345 -55
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +435 -86
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +321 -71
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +58 -182
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +667 -68
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +1 -1
- package/dist/es/standards-sdk.es178.js +1 -1
- package/dist/es/standards-sdk.es179.js +1 -1
- package/dist/es/standards-sdk.es181.js +61 -3
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +80 -168
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +156 -206
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +219 -223
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +242 -0
- package/dist/es/standards-sdk.es185.js.map +1 -0
- package/dist/es/standards-sdk.es56.js +1 -1
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es71.js +1 -1
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/utils/dynamic-import.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,334 +1,76 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Parse Utility/System Service transaction using unified dual-branch approach
|
|
7
|
-
* This handles both regular transactions and signed transaction variants
|
|
8
|
-
*/
|
|
9
|
-
static parseUtilTransaction(transaction, originalBytes) {
|
|
10
|
-
try {
|
|
11
|
-
if (originalBytes || transaction.toBytes) {
|
|
12
|
-
try {
|
|
13
|
-
const bytesToParse = originalBytes || transaction.toBytes();
|
|
14
|
-
const decoded = proto.TransactionList.decode(bytesToParse);
|
|
15
|
-
if (decoded.transactionList && decoded.transactionList.length > 0) {
|
|
16
|
-
const tx = decoded.transactionList[0];
|
|
17
|
-
let txBody = null;
|
|
18
|
-
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
19
|
-
txBody = proto.TransactionBody.decode(tx.bodyBytes);
|
|
20
|
-
} else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
21
|
-
const signedTx = proto.SignedTransaction.decode(
|
|
22
|
-
tx.signedTransactionBytes
|
|
23
|
-
);
|
|
24
|
-
if (signedTx.bodyBytes) {
|
|
25
|
-
txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (txBody) {
|
|
29
|
-
const protoResult = this.parseFromProtobufTxBody(txBody);
|
|
30
|
-
if (protoResult.type && protoResult.type !== "UNKNOWN") {
|
|
31
|
-
return protoResult;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
} catch (protoError) {
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return this.parseFromTransactionInternals(transaction);
|
|
39
|
-
} catch (error) {
|
|
40
|
-
return {
|
|
41
|
-
type: "UNKNOWN",
|
|
42
|
-
humanReadableType: "Unknown Utility Transaction"
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Parse utility transaction from protobuf TransactionBody
|
|
48
|
-
* Handles all utility operations from decoded protobuf data
|
|
49
|
-
*/
|
|
50
|
-
static parseFromProtobufTxBody(txBody) {
|
|
51
|
-
if (txBody.utilPrng) {
|
|
52
|
-
const utilPrng = this.parseUtilPrng(txBody.utilPrng);
|
|
53
|
-
if (utilPrng) {
|
|
54
|
-
return {
|
|
55
|
-
type: "PRNG",
|
|
56
|
-
humanReadableType: "Pseudo Random Number",
|
|
57
|
-
utilPrng
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (txBody.freeze) {
|
|
62
|
-
const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);
|
|
63
|
-
if (networkFreeze) {
|
|
64
|
-
return {
|
|
65
|
-
type: "FREEZE",
|
|
66
|
-
humanReadableType: "Network Freeze",
|
|
67
|
-
freeze: networkFreeze
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (txBody.systemDelete) {
|
|
72
|
-
const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);
|
|
73
|
-
if (systemDelete) {
|
|
74
|
-
return {
|
|
75
|
-
type: "SYSTEMDELETE",
|
|
76
|
-
humanReadableType: "System Delete",
|
|
77
|
-
systemDelete
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (txBody.systemUndelete) {
|
|
82
|
-
const systemUndelete = this.parseSystemUndeleteFromProto(
|
|
83
|
-
txBody.systemUndelete
|
|
84
|
-
);
|
|
85
|
-
if (systemUndelete) {
|
|
86
|
-
return {
|
|
87
|
-
type: "SYSTEMUNDELETE",
|
|
88
|
-
humanReadableType: "System Undelete",
|
|
89
|
-
systemUndelete
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (txBody.nodeCreate) {
|
|
94
|
-
const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);
|
|
95
|
-
if (nodeCreate) {
|
|
96
|
-
return {
|
|
97
|
-
type: "NODECREATE",
|
|
98
|
-
humanReadableType: "Node Create",
|
|
99
|
-
nodeCreate
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (txBody.nodeUpdate) {
|
|
104
|
-
const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);
|
|
105
|
-
if (nodeUpdate) {
|
|
106
|
-
return {
|
|
107
|
-
type: "NODEUPDATE",
|
|
108
|
-
humanReadableType: "Node Update",
|
|
109
|
-
nodeUpdate
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (txBody.nodeDelete) {
|
|
114
|
-
const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);
|
|
115
|
-
if (nodeDelete) {
|
|
116
|
-
return {
|
|
117
|
-
type: "NODEDELETE",
|
|
118
|
-
humanReadableType: "Node Delete",
|
|
119
|
-
nodeDelete
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return {};
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Extract utility data from Transaction internal fields
|
|
127
|
-
* This handles cases where data is stored in Transaction object internals
|
|
128
|
-
*/
|
|
129
|
-
static parseFromTransactionInternals(transaction) {
|
|
130
|
-
try {
|
|
131
|
-
const tx = transaction;
|
|
132
|
-
if (hasTransactionType(transaction, "utilPrng")) {
|
|
133
|
-
const utilPrng = {};
|
|
134
|
-
if (tx._range && tx._range !== 0) {
|
|
135
|
-
utilPrng.range = tx._range;
|
|
136
|
-
}
|
|
137
|
-
return {
|
|
138
|
-
type: "PRNG",
|
|
139
|
-
humanReadableType: "Pseudo Random Number",
|
|
140
|
-
utilPrng
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
if (hasTransactionType(transaction, "freeze")) {
|
|
144
|
-
const networkFreeze = {};
|
|
145
|
-
if (tx._startTime) {
|
|
146
|
-
networkFreeze.startTime = tx._startTime.toString();
|
|
147
|
-
}
|
|
148
|
-
if (tx._endTime) {
|
|
149
|
-
networkFreeze.endTime = tx._endTime.toString();
|
|
150
|
-
}
|
|
151
|
-
if (tx._updateFile) {
|
|
152
|
-
networkFreeze.updateFile = tx._updateFile.toString();
|
|
153
|
-
}
|
|
154
|
-
if (tx._fileHash) {
|
|
155
|
-
networkFreeze.fileHash = Buffer.from(tx._fileHash).toString("hex");
|
|
156
|
-
}
|
|
157
|
-
if (tx._freezeType) {
|
|
158
|
-
networkFreeze.freezeType = tx._freezeType;
|
|
159
|
-
}
|
|
160
|
-
return {
|
|
161
|
-
type: "FREEZE",
|
|
162
|
-
humanReadableType: "Network Freeze",
|
|
163
|
-
freeze: networkFreeze
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
if (hasTransactionType(transaction, "systemDelete")) {
|
|
167
|
-
const systemDelete = {};
|
|
168
|
-
if (tx._fileId) {
|
|
169
|
-
systemDelete.fileId = tx._fileId.toString();
|
|
170
|
-
} else if (tx._contractId) {
|
|
171
|
-
systemDelete.contractId = tx._contractId.toString();
|
|
172
|
-
}
|
|
173
|
-
if (tx._expirationTime) {
|
|
174
|
-
systemDelete.expirationTime = tx._expirationTime.toString();
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
type: "SYSTEMDELETE",
|
|
178
|
-
humanReadableType: "System Delete",
|
|
179
|
-
systemDelete
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
if (hasTransactionType(transaction, "systemUndelete")) {
|
|
183
|
-
const systemUndelete = {};
|
|
184
|
-
if (tx._fileId) {
|
|
185
|
-
systemUndelete.fileId = tx._fileId.toString();
|
|
186
|
-
} else if (tx._contractId) {
|
|
187
|
-
systemUndelete.contractId = tx._contractId.toString();
|
|
188
|
-
}
|
|
189
|
-
return {
|
|
190
|
-
type: "SYSTEMUNDELETE",
|
|
191
|
-
humanReadableType: "System Undelete",
|
|
192
|
-
systemUndelete
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
return {};
|
|
196
|
-
} catch (error) {
|
|
197
|
-
return {};
|
|
198
|
-
}
|
|
1
|
+
import BigNumber from "bignumber.js";
|
|
2
|
+
const TINYBAR_DIVISOR = 1e8;
|
|
3
|
+
function safePositiveTransfers(transfers) {
|
|
4
|
+
if (!Array.isArray(transfers)) {
|
|
5
|
+
return [];
|
|
199
6
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
if (body.updateFile) {
|
|
212
|
-
data.updateFile = new FileId(
|
|
213
|
-
body.updateFile.shardNum ?? 0,
|
|
214
|
-
body.updateFile.realmNum ?? 0,
|
|
215
|
-
body.updateFile.fileNum ?? 0
|
|
216
|
-
).toString();
|
|
217
|
-
}
|
|
218
|
-
if (body.fileHash && body.fileHash.length > 0) {
|
|
219
|
-
data.fileHash = Buffer.from(body.fileHash).toString("hex");
|
|
220
|
-
}
|
|
221
|
-
if (body.freezeType !== void 0) {
|
|
222
|
-
const freezeTypes = [
|
|
223
|
-
"FREEZE_ONLY",
|
|
224
|
-
"PREPARE_UPGRADE",
|
|
225
|
-
"FREEZE_UPGRADE",
|
|
226
|
-
"FREEZE_ABORT"
|
|
227
|
-
];
|
|
228
|
-
data.freezeType = freezeTypes[body.freezeType] || "FREEZE_ONLY";
|
|
229
|
-
}
|
|
230
|
-
return data;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Parse System Delete from protobuf data
|
|
234
|
-
*/
|
|
235
|
-
static parseSystemDeleteFromProto(body) {
|
|
236
|
-
if (!body) return void 0;
|
|
237
|
-
const data = {};
|
|
238
|
-
if (body.fileID) {
|
|
239
|
-
data.fileId = new FileId(
|
|
240
|
-
body.fileID.shardNum ?? 0,
|
|
241
|
-
body.fileID.realmNum ?? 0,
|
|
242
|
-
body.fileID.fileNum ?? 0
|
|
243
|
-
).toString();
|
|
244
|
-
} else if (body.contractID) {
|
|
245
|
-
data.contractId = new ContractId(
|
|
246
|
-
body.contractID.shardNum ?? 0,
|
|
247
|
-
body.contractID.realmNum ?? 0,
|
|
248
|
-
body.contractID.contractNum ?? 0
|
|
249
|
-
).toString();
|
|
250
|
-
}
|
|
251
|
-
if (body.expirationTime?.seconds) {
|
|
252
|
-
data.expirationTime = Long.fromValue(
|
|
253
|
-
body.expirationTime.seconds
|
|
254
|
-
).toString();
|
|
255
|
-
}
|
|
256
|
-
return data;
|
|
7
|
+
return transfers.filter(
|
|
8
|
+
(transfer) => typeof transfer.amount === "number" && transfer.amount > 0
|
|
9
|
+
).map((transfer) => ({
|
|
10
|
+
account: transfer.account,
|
|
11
|
+
amountTinybar: transfer.amount
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
function resolvePayerDebitTinybar(transfers, payerAccountId) {
|
|
15
|
+
if (!Array.isArray(transfers)) {
|
|
16
|
+
return null;
|
|
257
17
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
const data = {};
|
|
264
|
-
if (body.fileID) {
|
|
265
|
-
data.fileId = new FileId(
|
|
266
|
-
body.fileID.shardNum ?? 0,
|
|
267
|
-
body.fileID.realmNum ?? 0,
|
|
268
|
-
body.fileID.fileNum ?? 0
|
|
269
|
-
).toString();
|
|
270
|
-
} else if (body.contractID) {
|
|
271
|
-
data.contractId = new ContractId(
|
|
272
|
-
body.contractID.shardNum ?? 0,
|
|
273
|
-
body.contractID.realmNum ?? 0,
|
|
274
|
-
body.contractID.contractNum ?? 0
|
|
275
|
-
).toString();
|
|
276
|
-
}
|
|
277
|
-
return data;
|
|
18
|
+
const payerDebit = transfers.find(
|
|
19
|
+
(transfer) => transfer.account === payerAccountId && typeof transfer.amount === "number" && transfer.amount < 0
|
|
20
|
+
);
|
|
21
|
+
if (!payerDebit || typeof payerDebit.amount !== "number") {
|
|
22
|
+
return null;
|
|
278
23
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
return data;
|
|
24
|
+
return Math.abs(payerDebit.amount);
|
|
25
|
+
}
|
|
26
|
+
function toHbarString(tinybar) {
|
|
27
|
+
return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();
|
|
28
|
+
}
|
|
29
|
+
function fallbackFeeTinybar(chargedTxFee) {
|
|
30
|
+
if (typeof chargedTxFee !== "number" || !Number.isFinite(chargedTxFee)) {
|
|
31
|
+
return null;
|
|
289
32
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
*/
|
|
293
|
-
static parseNodeUpdateFromProto(body) {
|
|
294
|
-
if (!body) return void 0;
|
|
295
|
-
const data = {};
|
|
296
|
-
if (body.nodeId !== void 0) {
|
|
297
|
-
data.nodeId = Long.fromValue(body.nodeId).toNumber();
|
|
298
|
-
}
|
|
299
|
-
return data;
|
|
33
|
+
if (chargedTxFee <= 0) {
|
|
34
|
+
return null;
|
|
300
35
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
36
|
+
return chargedTxFee;
|
|
37
|
+
}
|
|
38
|
+
function computeInscriptionCostSummary(params) {
|
|
39
|
+
const { txn, payerAccountId } = params;
|
|
40
|
+
const positiveTransfers = safePositiveTransfers(txn.transfers);
|
|
41
|
+
const payerDebitTinybar = resolvePayerDebitTinybar(
|
|
42
|
+
txn.transfers,
|
|
43
|
+
payerAccountId
|
|
44
|
+
);
|
|
45
|
+
const transferOutflowTinybar = payerDebitTinybar ?? positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);
|
|
46
|
+
const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);
|
|
47
|
+
const resolvedTotalTinybar = transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;
|
|
48
|
+
if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {
|
|
49
|
+
return null;
|
|
311
50
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
51
|
+
const totalCostHbar = toHbarString(resolvedTotalTinybar);
|
|
52
|
+
const breakdownTransfers = positiveTransfers.length > 0 ? positiveTransfers.map((transfer) => ({
|
|
53
|
+
to: transfer.account,
|
|
54
|
+
amount: toHbarString(transfer.amountTinybar),
|
|
55
|
+
description: `HBAR transfer from ${payerAccountId}`
|
|
56
|
+
})) : [
|
|
57
|
+
{
|
|
58
|
+
to: "Hedera network",
|
|
59
|
+
amount: totalCostHbar,
|
|
60
|
+
description: `Transaction fee debited from ${payerAccountId}`
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
return {
|
|
64
|
+
totalTinybar: resolvedTotalTinybar,
|
|
65
|
+
summary: {
|
|
66
|
+
totalCostHbar,
|
|
67
|
+
breakdown: {
|
|
68
|
+
transfers: breakdownTransfers
|
|
69
|
+
}
|
|
317
70
|
}
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
static parseFreeze(body) {
|
|
321
|
-
return this.parseNetworkFreezeFromProto(body);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Parse Utility/System Service transaction from Transaction object
|
|
325
|
-
* This is the unified entry point that delegates to the comprehensive parsing logic
|
|
326
|
-
*/
|
|
327
|
-
static parseFromTransactionObject(transaction) {
|
|
328
|
-
return this.parseUtilTransaction(transaction);
|
|
329
|
-
}
|
|
71
|
+
};
|
|
330
72
|
}
|
|
331
73
|
export {
|
|
332
|
-
|
|
74
|
+
computeInscriptionCostSummary
|
|
333
75
|
};
|
|
334
76
|
//# sourceMappingURL=standards-sdk.es167.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es167.js","sources":["../../src/utils/parsers/util-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { Transaction, Long, FileId, ContractId } from '@hashgraph/sdk';\nimport {\n UtilPrngData,\n NetworkFreezeData,\n SystemDeleteData,\n SystemUndeleteData,\n NodeCreateData,\n NodeUpdateData,\n NodeDeleteData,\n} from '../transaction-parser-types';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\n\n/**\n * Utility and System Operations Parser\n *\n * Handles parsing for utility and system transaction types including:\n * - Pseudo-random number generation (PRNG)\n * - Network freeze operations\n * - System delete/undelete operations\n * - Node management operations\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n */\nexport class UtilParser {\n /**\n * Parse Utility/System Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseUtilTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array,\n ): {\n type?: string;\n humanReadableType?: string;\n utilPrng?: UtilPrngData;\n networkFreeze?: NetworkFreezeData;\n systemDelete?: SystemDeleteData;\n systemUndelete?: SystemUndeleteData;\n nodeCreate?: NodeCreateData;\n nodeUpdate?: NodeUpdateData;\n nodeDelete?: NodeDeleteData;\n [key: string]: unknown;\n } {\n try {\n if (originalBytes || transaction.toBytes) {\n try {\n const bytesToParse = originalBytes || transaction.toBytes();\n const decoded = proto.TransactionList.decode(bytesToParse);\n\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.ITransactionBody | null = null;\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n } else if (\n tx.signedTransactionBytes &&\n tx.signedTransactionBytes.length > 0\n ) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n const protoResult = this.parseFromProtobufTxBody(txBody);\n if (protoResult.type && protoResult.type !== 'UNKNOWN') {\n return protoResult;\n }\n }\n }\n } catch (protoError) {}\n }\n\n return this.parseFromTransactionInternals(transaction);\n } catch (error) {\n return {\n type: 'UNKNOWN',\n humanReadableType: 'Unknown Utility Transaction',\n };\n }\n }\n\n /**\n * Parse utility transaction from protobuf TransactionBody\n * Handles all utility operations from decoded protobuf data\n */\n private static parseFromProtobufTxBody(txBody: proto.ITransactionBody): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n if (txBody.utilPrng) {\n const utilPrng = this.parseUtilPrng(txBody.utilPrng);\n if (utilPrng) {\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n }\n\n if (txBody.freeze) {\n const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);\n if (networkFreeze) {\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n freeze: networkFreeze,\n };\n }\n }\n\n if (txBody.systemDelete) {\n const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);\n if (systemDelete) {\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n }\n\n if (txBody.systemUndelete) {\n const systemUndelete = this.parseSystemUndeleteFromProto(\n txBody.systemUndelete,\n );\n if (systemUndelete) {\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n }\n\n if (txBody.nodeCreate) {\n const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);\n if (nodeCreate) {\n return {\n type: 'NODECREATE',\n humanReadableType: 'Node Create',\n nodeCreate,\n };\n }\n }\n\n if (txBody.nodeUpdate) {\n const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);\n if (nodeUpdate) {\n return {\n type: 'NODEUPDATE',\n humanReadableType: 'Node Update',\n nodeUpdate,\n };\n }\n }\n\n if (txBody.nodeDelete) {\n const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);\n if (nodeDelete) {\n return {\n type: 'NODEDELETE',\n humanReadableType: 'Node Delete',\n nodeDelete,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract utility data from Transaction internal fields\n * This handles cases where data is stored in Transaction object internals\n */\n private static parseFromTransactionInternals(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const tx = transaction as unknown as {\n _range?: number;\n _startTime?: { toString(): string };\n _endTime?: { toString(): string };\n _updateFile?: { toString(): string };\n _fileHash?: Uint8Array;\n _freezeType?: string;\n _fileId?: { toString(): string };\n _contractId?: { toString(): string };\n _expirationTime?: { toString(): string };\n _nodeId?: number;\n _accountId?: { toString(): string };\n _description?: string;\n _gossipEndpoint?: Array<unknown>;\n _serviceEndpoint?: Array<unknown>;\n _gossipCaCertificate?: Uint8Array;\n _grpcCertificateHash?: Uint8Array;\n _adminKey?: unknown;\n constructor?: { name?: string };\n };\n\n if (hasTransactionType(transaction, 'utilPrng')) {\n const utilPrng: UtilPrngData = {};\n if (tx._range && tx._range !== 0) {\n utilPrng.range = tx._range;\n }\n\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n\n if (hasTransactionType(transaction, 'freeze')) {\n const networkFreeze: NetworkFreezeData = {};\n\n if (tx._startTime) {\n networkFreeze.startTime = tx._startTime.toString();\n }\n if (tx._endTime) {\n networkFreeze.endTime = tx._endTime.toString();\n }\n if (tx._updateFile) {\n networkFreeze.updateFile = tx._updateFile.toString();\n }\n if (tx._fileHash) {\n networkFreeze.fileHash = Buffer.from(tx._fileHash).toString('hex');\n }\n if (tx._freezeType) {\n networkFreeze.freezeType = tx._freezeType as any;\n }\n\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n freeze: networkFreeze,\n };\n }\n\n if (hasTransactionType(transaction, 'systemDelete')) {\n const systemDelete: SystemDeleteData = {};\n\n if (tx._fileId) {\n systemDelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemDelete.contractId = tx._contractId.toString();\n }\n\n if (tx._expirationTime) {\n systemDelete.expirationTime = tx._expirationTime.toString();\n }\n\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n\n if (hasTransactionType(transaction, 'systemUndelete')) {\n const systemUndelete: SystemUndeleteData = {};\n\n if (tx._fileId) {\n systemUndelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemUndelete.contractId = tx._contractId.toString();\n }\n\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Parse Network Freeze from protobuf data\n */\n private static parseNetworkFreezeFromProto(\n body: proto.IFreezeTransactionBody,\n ): NetworkFreezeData | undefined {\n if (!body) return undefined;\n\n const data: NetworkFreezeData = {};\n\n if (body.startTime?.seconds) {\n data.startTime = `${Long.fromValue(\n body.startTime.seconds,\n ).toString()}.${body.startTime.nanos ?? 0}`;\n }\n\n if (body.updateFile) {\n data.updateFile = new FileId(\n body.updateFile.shardNum ?? 0,\n body.updateFile.realmNum ?? 0,\n body.updateFile.fileNum ?? 0,\n ).toString();\n }\n\n if (body.fileHash && body.fileHash.length > 0) {\n data.fileHash = Buffer.from(body.fileHash).toString('hex');\n }\n\n if (body.freezeType !== undefined) {\n const freezeTypes = [\n 'FREEZE_ONLY',\n 'PREPARE_UPGRADE',\n 'FREEZE_UPGRADE',\n 'FREEZE_ABORT',\n ];\n data.freezeType = (freezeTypes[body.freezeType] as any) || 'FREEZE_ONLY';\n }\n\n return data;\n }\n\n /**\n * Parse System Delete from protobuf data\n */\n private static parseSystemDeleteFromProto(\n body: proto.ISystemDeleteTransactionBody,\n ): SystemDeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemDeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n if (body.expirationTime?.seconds) {\n data.expirationTime = Long.fromValue(\n body.expirationTime.seconds,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse System Undelete from protobuf data\n */\n private static parseSystemUndeleteFromProto(\n body: proto.ISystemUndeleteTransactionBody,\n ): SystemUndeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemUndeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse Node Create from protobuf data\n */\n private static parseNodeCreateFromProto(\n body: any,\n ): NodeCreateData | undefined {\n if (!body) return undefined;\n\n const data: NodeCreateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n /**\n * Parse Node Update from protobuf data\n */\n private static parseNodeUpdateFromProto(\n body: any,\n ): NodeUpdateData | undefined {\n if (!body) return undefined;\n\n const data: NodeUpdateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n /**\n * Parse Node Delete from protobuf data\n */\n private static parseNodeDeleteFromProto(\n body: any,\n ): NodeDeleteData | undefined {\n if (!body) return undefined;\n\n const data: NodeDeleteData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n static parseUtilPrng(\n body: proto.IUtilPrngTransactionBody,\n ): UtilPrngData | undefined {\n if (!body) return undefined;\n const data: UtilPrngData = {};\n if (body.range && body.range !== 0) {\n data.range = body.range;\n }\n return data;\n }\n\n static parseFreeze(\n body: proto.IFreezeTransactionBody,\n ): NetworkFreezeData | undefined {\n return this.parseNetworkFreezeFromProto(body);\n }\n\n /**\n * Parse Utility/System Service transaction from Transaction object\n * This is the unified entry point that delegates to the comprehensive parsing logic\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n return this.parseUtilTransaction(transaction);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es167.js","sources":["../../src/inscribe/inscription-cost.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { Transaction } from '../services/types';\nimport { QuoteResult, InscriptionCostSummary } from './types';\n\nconst TINYBAR_DIVISOR = 100000000;\n\ntype MirrorNodeTransactionLike = Pick<\n Transaction,\n 'charged_tx_fee' | 'transfers'\n>;\n\ntype CostTransfer = QuoteResult['breakdown']['transfers'][number];\n\nfunction safePositiveTransfers(\n transfers: Transaction['transfers'] | undefined,\n): Array<{ account: string; amountTinybar: number }> {\n if (!Array.isArray(transfers)) {\n return [];\n }\n\n return transfers\n .filter(\n transfer => typeof transfer.amount === 'number' && transfer.amount > 0,\n )\n .map(transfer => ({\n account: transfer.account,\n amountTinybar: transfer.amount,\n }));\n}\n\nfunction resolvePayerDebitTinybar(\n transfers: Transaction['transfers'] | undefined,\n payerAccountId: string,\n): number | null {\n if (!Array.isArray(transfers)) {\n return null;\n }\n\n const payerDebit = transfers.find(\n transfer =>\n transfer.account === payerAccountId &&\n typeof transfer.amount === 'number' &&\n transfer.amount < 0,\n );\n\n if (!payerDebit || typeof payerDebit.amount !== 'number') {\n return null;\n }\n\n return Math.abs(payerDebit.amount);\n}\n\nfunction toHbarString(tinybar: number): string {\n return new BigNumber(tinybar).dividedBy(TINYBAR_DIVISOR).toFixed();\n}\n\nfunction fallbackFeeTinybar(chargedTxFee: unknown): number | null {\n if (typeof chargedTxFee !== 'number' || !Number.isFinite(chargedTxFee)) {\n return null;\n }\n if (chargedTxFee <= 0) {\n return null;\n }\n return chargedTxFee;\n}\n\nexport function computeInscriptionCostSummary(params: {\n txn: MirrorNodeTransactionLike;\n payerAccountId: string;\n}): { summary: InscriptionCostSummary; totalTinybar: number } | null {\n const { txn, payerAccountId } = params;\n\n const positiveTransfers = safePositiveTransfers(txn.transfers);\n const payerDebitTinybar = resolvePayerDebitTinybar(\n txn.transfers,\n payerAccountId,\n );\n\n const transferOutflowTinybar =\n payerDebitTinybar ??\n positiveTransfers.reduce((sum, t) => sum + t.amountTinybar, 0);\n const chargedFeeTinybar = fallbackFeeTinybar(txn.charged_tx_fee);\n\n const resolvedTotalTinybar =\n transferOutflowTinybar > 0 ? transferOutflowTinybar : chargedFeeTinybar;\n\n if (!resolvedTotalTinybar || resolvedTotalTinybar <= 0) {\n return null;\n }\n\n const totalCostHbar = toHbarString(resolvedTotalTinybar);\n\n const breakdownTransfers: CostTransfer[] =\n positiveTransfers.length > 0\n ? positiveTransfers.map(transfer => ({\n to: transfer.account,\n amount: toHbarString(transfer.amountTinybar),\n description: `HBAR transfer from ${payerAccountId}`,\n }))\n : [\n {\n to: 'Hedera network',\n amount: totalCostHbar,\n description: `Transaction fee debited from ${payerAccountId}`,\n },\n ];\n\n return {\n totalTinybar: resolvedTotalTinybar,\n summary: {\n totalCostHbar,\n breakdown: {\n transfers: breakdownTransfers,\n },\n },\n };\n}\n"],"names":[],"mappings":";AAIA,MAAM,kBAAkB;AASxB,SAAS,sBACP,WACmD;AACnD,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO,CAAA;AAAA,EACT;AAEA,SAAO,UACJ;AAAA,IACC,cAAY,OAAO,SAAS,WAAW,YAAY,SAAS,SAAS;AAAA,EAAA,EAEtE,IAAI,CAAA,cAAa;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,eAAe,SAAS;AAAA,EAAA,EACxB;AACN;AAEA,SAAS,yBACP,WACA,gBACe;AACf,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU;AAAA,IAC3B,CAAA,aACE,SAAS,YAAY,kBACrB,OAAO,SAAS,WAAW,YAC3B,SAAS,SAAS;AAAA,EAAA;AAGtB,MAAI,CAAC,cAAc,OAAO,WAAW,WAAW,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,IAAI,WAAW,MAAM;AACnC;AAEA,SAAS,aAAa,SAAyB;AAC7C,SAAO,IAAI,UAAU,OAAO,EAAE,UAAU,eAAe,EAAE,QAAA;AAC3D;AAEA,SAAS,mBAAmB,cAAsC;AAChE,MAAI,OAAO,iBAAiB,YAAY,CAAC,OAAO,SAAS,YAAY,GAAG;AACtE,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,8BAA8B,QAGuB;AACnE,QAAM,EAAE,KAAK,eAAA,IAAmB;AAEhC,QAAM,oBAAoB,sBAAsB,IAAI,SAAS;AAC7D,QAAM,oBAAoB;AAAA,IACxB,IAAI;AAAA,IACJ;AAAA,EAAA;AAGF,QAAM,yBACJ,qBACA,kBAAkB,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,eAAe,CAAC;AAC/D,QAAM,oBAAoB,mBAAmB,IAAI,cAAc;AAE/D,QAAM,uBACJ,yBAAyB,IAAI,yBAAyB;AAExD,MAAI,CAAC,wBAAwB,wBAAwB,GAAG;AACtD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,aAAa,oBAAoB;AAEvD,QAAM,qBACJ,kBAAkB,SAAS,IACvB,kBAAkB,IAAI,CAAA,cAAa;AAAA,IACjC,IAAI,SAAS;AAAA,IACb,QAAQ,aAAa,SAAS,aAAa;AAAA,IAC3C,aAAa,sBAAsB,cAAc;AAAA,EAAA,EACjD,IACF;AAAA,IACE;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa,gCAAgC,cAAc;AAAA,IAAA;AAAA,EAC7D;AAGR,SAAO;AAAA,IACL,cAAc;AAAA,IACd,SAAS;AAAA,MACP;AAAA,MACA,WAAW;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,EACF;AAEJ;"}
|