@hashgraphonline/standards-sdk 0.1.141-canary.3 → 0.1.141-canary.30
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 +13 -1
- package/dist/cjs/hcs-16/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-17/types.d.ts.map +1 -1
- package/dist/cjs/hcs-20/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-20/types.d.ts +9 -8
- package/dist/cjs/hcs-20/types.d.ts.map +1 -1
- package/dist/cjs/hcs-21/base-client.d.ts +4 -3
- package/dist/cjs/hcs-21/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-21/index.d.ts +1 -0
- package/dist/cjs/hcs-21/index.d.ts.map +1 -1
- package/dist/cjs/hcs-21/sdk.d.ts +34 -0
- package/dist/cjs/hcs-21/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-21/tx.d.ts.map +1 -1
- package/dist/cjs/hcs-21/types.d.ts +135 -64
- package/dist/cjs/hcs-21/types.d.ts.map +1 -1
- package/dist/cjs/hcs-21/verify.d.ts +6 -0
- package/dist/cjs/hcs-21/verify.d.ts.map +1 -0
- package/dist/cjs/inscribe/inscriber.d.ts +1 -0
- package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
- package/dist/cjs/inscribe/quote-cache.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts +4 -3
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/schemas.d.ts +38 -38
- package/dist/cjs/services/registry-broker/schemas.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 +1 -0
- package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
- package/dist/es/hcs-16/base-client.d.ts.map +1 -1
- package/dist/es/hcs-17/types.d.ts.map +1 -1
- package/dist/es/hcs-20/sdk.d.ts.map +1 -1
- package/dist/es/hcs-20/types.d.ts +9 -8
- package/dist/es/hcs-20/types.d.ts.map +1 -1
- package/dist/es/hcs-21/base-client.d.ts +4 -3
- package/dist/es/hcs-21/base-client.d.ts.map +1 -1
- package/dist/es/hcs-21/index.d.ts +1 -0
- package/dist/es/hcs-21/index.d.ts.map +1 -1
- package/dist/es/hcs-21/sdk.d.ts +34 -0
- package/dist/es/hcs-21/sdk.d.ts.map +1 -1
- package/dist/es/hcs-21/tx.d.ts.map +1 -1
- package/dist/es/hcs-21/types.d.ts +135 -64
- package/dist/es/hcs-21/types.d.ts.map +1 -1
- package/dist/es/hcs-21/verify.d.ts +6 -0
- package/dist/es/hcs-21/verify.d.ts.map +1 -0
- package/dist/es/inscribe/inscriber.d.ts +1 -0
- package/dist/es/inscribe/inscriber.d.ts.map +1 -1
- package/dist/es/inscribe/quote-cache.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts +4 -3
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
- package/dist/es/services/registry-broker/schemas.d.ts +38 -38
- package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +58 -50
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +2 -2
- package/dist/es/standards-sdk.es100.js +26 -229
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +228 -109
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +94 -15
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +30 -80
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +80 -27
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +25 -136
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +140 -27
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +27 -20
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +18 -156
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +148 -196
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +160 -747
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +786 -9
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +13 -567
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +541 -576
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +601 -12
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +13 -2
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +2 -83
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +80 -36
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +39 -2
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +2 -223
- package/dist/es/standards-sdk.es119.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +193 -1110
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +1059 -225
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +303 -419
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +418 -351
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +348 -785
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +766 -182
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +153 -1512
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +1373 -1977
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +2211 -50
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +59 -79
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +80 -152
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +159 -7
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +7 -86
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +65 -44
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +65 -28
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +69 -125
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +28 -42
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +138 -760
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +36 -50
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +766 -64
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es141.js +13 -168
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +55 -321
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +120 -294
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +191 -322
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +294 -279
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +440 -63
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +327 -13
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +79 -0
- package/dist/es/standards-sdk.es148.js.map +1 -0
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es16.js +1 -1
- package/dist/es/standards-sdk.es17.js +5 -10
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +11 -15
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +26 -72
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +8 -12
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +1 -1
- package/dist/es/standards-sdk.es28.js +11 -15
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es3.js +2 -2
- package/dist/es/standards-sdk.es31.js +1 -1
- package/dist/es/standards-sdk.es32.js +3 -3
- package/dist/es/standards-sdk.es33.js +1 -1
- package/dist/es/standards-sdk.es36.js +6 -11
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +3 -3
- package/dist/es/standards-sdk.es38.js +1 -1
- package/dist/es/standards-sdk.es39.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +1 -1
- package/dist/es/standards-sdk.es42.js +2 -2
- package/dist/es/standards-sdk.es47.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es52.js +1 -1
- package/dist/es/standards-sdk.es54.js +1 -1
- package/dist/es/standards-sdk.es57.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es61.js +7 -11
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +1 -1
- package/dist/es/standards-sdk.es65.js +2 -2
- package/dist/es/standards-sdk.es66.js +3 -3
- package/dist/es/standards-sdk.es69.js +2 -2
- package/dist/es/standards-sdk.es7.js +2 -2
- package/dist/es/standards-sdk.es70.js +3 -3
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +2 -2
- package/dist/es/standards-sdk.es77.js +5 -3
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +4 -10
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +1 -1
- package/dist/es/standards-sdk.es8.js +1 -1
- package/dist/es/standards-sdk.es80.js +26 -15
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +12 -4
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +7 -6
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +106 -5
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +55 -21
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +22 -75
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +45 -30
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +57 -22
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es90.js +28 -23
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +23 -167
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +158 -119
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +68 -95
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +136 -119
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +139 -39
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +42 -257
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +243 -80
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +47 -48
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +100 -28
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/es/utils/dynamic-import.d.ts +1 -0
- package/dist/es/utils/dynamic-import.d.ts.map +1 -1
- package/package.json +65 -63
|
@@ -1,309 +1,1143 @@
|
|
|
1
1
|
import { proto } from "@hashgraph/proto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { AccountId, Long, TokenId } from "@hashgraph/sdk";
|
|
3
|
+
import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.es148.js";
|
|
4
|
+
import { Buffer } from "buffer";
|
|
5
|
+
class HTSParser {
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
* This
|
|
7
|
+
* Main entry point for parsing HTS transactions from a Transaction object
|
|
8
|
+
* This method bridges between the Transaction object and the protobuf parsers
|
|
8
9
|
*/
|
|
9
|
-
static
|
|
10
|
+
static parseHTSTransaction(transaction) {
|
|
10
11
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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) {
|
|
12
|
+
const transactionBody = transaction._transactionBody;
|
|
13
|
+
if (!transactionBody) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
if (transactionBody.tokenCreation) {
|
|
17
|
+
const tokenCreation = this.parseTokenCreate(
|
|
18
|
+
transactionBody.tokenCreation
|
|
19
|
+
);
|
|
20
|
+
if (tokenCreation) {
|
|
21
|
+
return {
|
|
22
|
+
type: "TOKENCREATE",
|
|
23
|
+
humanReadableType: "Token Creation",
|
|
24
|
+
tokenCreation
|
|
25
|
+
};
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* Parse schedule transaction from protobuf TransactionBody
|
|
48
|
-
* Handles all schedule operations from decoded protobuf data
|
|
49
|
-
*/
|
|
50
|
-
static parseFromProtobufTxBody(txBody) {
|
|
51
|
-
if (txBody.scheduleCreate) {
|
|
52
|
-
const scheduleCreate = this.parseScheduleCreateFromProto(
|
|
53
|
-
txBody.scheduleCreate
|
|
54
|
-
);
|
|
55
|
-
if (scheduleCreate) {
|
|
56
|
-
return {
|
|
57
|
-
type: "SCHEDULECREATE",
|
|
58
|
-
humanReadableType: "Schedule Create",
|
|
59
|
-
scheduleCreate
|
|
60
|
-
};
|
|
28
|
+
if (transactionBody.tokenMint) {
|
|
29
|
+
const tokenMint = this.parseTokenMint(transactionBody.tokenMint);
|
|
30
|
+
if (tokenMint) {
|
|
31
|
+
return {
|
|
32
|
+
type: "TOKENMINT",
|
|
33
|
+
humanReadableType: "Token Mint",
|
|
34
|
+
tokenMint
|
|
35
|
+
};
|
|
36
|
+
}
|
|
61
37
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
38
|
+
if (transactionBody.tokenBurn) {
|
|
39
|
+
const tokenBurn = this.parseTokenBurn(transactionBody.tokenBurn);
|
|
40
|
+
if (tokenBurn) {
|
|
41
|
+
return {
|
|
42
|
+
type: "TOKENBURN",
|
|
43
|
+
humanReadableType: "Token Burn",
|
|
44
|
+
tokenBurn
|
|
45
|
+
};
|
|
46
|
+
}
|
|
71
47
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
scheduleDelete
|
|
82
|
-
};
|
|
48
|
+
if (transactionBody.tokenUpdate) {
|
|
49
|
+
const tokenUpdate = this.parseTokenUpdate(transactionBody.tokenUpdate);
|
|
50
|
+
if (tokenUpdate) {
|
|
51
|
+
return {
|
|
52
|
+
type: "TOKENUPDATE",
|
|
53
|
+
humanReadableType: "Token Update",
|
|
54
|
+
tokenUpdate
|
|
55
|
+
};
|
|
56
|
+
}
|
|
83
57
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const tx = transaction;
|
|
94
|
-
if (hasTransactionType(transaction, "scheduleCreate")) {
|
|
95
|
-
const scheduleCreate = {
|
|
96
|
-
scheduledTransactionBody: Buffer.from(
|
|
97
|
-
tx._scheduledTransaction
|
|
98
|
-
).toString("base64"),
|
|
99
|
-
memo: tx._scheduleMemo,
|
|
100
|
-
adminKey: tx._adminKey ? parseKey(tx._adminKey) : void 0,
|
|
101
|
-
payerAccountId: tx._payerAccountId?.toString(),
|
|
102
|
-
expirationTime: tx._expirationTime?.toString(),
|
|
103
|
-
waitForExpiry: tx._waitForExpiry || false
|
|
104
|
-
};
|
|
105
|
-
return {
|
|
106
|
-
type: "SCHEDULECREATE",
|
|
107
|
-
humanReadableType: "Schedule Create",
|
|
108
|
-
scheduleCreate
|
|
109
|
-
};
|
|
58
|
+
if (transactionBody.tokenFreeze) {
|
|
59
|
+
const tokenFreeze = this.parseTokenFreeze(transactionBody.tokenFreeze);
|
|
60
|
+
if (tokenFreeze) {
|
|
61
|
+
return {
|
|
62
|
+
type: "TOKENFREEZE",
|
|
63
|
+
humanReadableType: "Token Freeze",
|
|
64
|
+
tokenFreeze
|
|
65
|
+
};
|
|
66
|
+
}
|
|
110
67
|
}
|
|
111
|
-
if (
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
68
|
+
if (transactionBody.tokenUnfreeze) {
|
|
69
|
+
const tokenUnfreeze = this.parseTokenUnfreeze(
|
|
70
|
+
transactionBody.tokenUnfreeze
|
|
71
|
+
);
|
|
72
|
+
if (tokenUnfreeze) {
|
|
73
|
+
return {
|
|
74
|
+
type: "TOKENUNFREEZE",
|
|
75
|
+
humanReadableType: "Token Unfreeze",
|
|
76
|
+
tokenUnfreeze
|
|
77
|
+
};
|
|
78
|
+
}
|
|
120
79
|
}
|
|
121
|
-
if (
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
80
|
+
if (transactionBody.tokenGrantKyc) {
|
|
81
|
+
const tokenGrantKyc = this.parseTokenGrantKyc(
|
|
82
|
+
transactionBody.tokenGrantKyc
|
|
83
|
+
);
|
|
84
|
+
if (tokenGrantKyc) {
|
|
85
|
+
return {
|
|
86
|
+
type: "TOKENGRANTKYC",
|
|
87
|
+
humanReadableType: "Token Grant KYC",
|
|
88
|
+
tokenGrantKyc
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (transactionBody.tokenRevokeKyc) {
|
|
93
|
+
const tokenRevokeKyc = this.parseTokenRevokeKyc(
|
|
94
|
+
transactionBody.tokenRevokeKyc
|
|
95
|
+
);
|
|
96
|
+
if (tokenRevokeKyc) {
|
|
97
|
+
return {
|
|
98
|
+
type: "TOKENREVOKEKYC",
|
|
99
|
+
humanReadableType: "Token Revoke KYC",
|
|
100
|
+
tokenRevokeKyc
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (transactionBody.tokenPause) {
|
|
105
|
+
const tokenPause = this.parseTokenPause(transactionBody.tokenPause);
|
|
106
|
+
if (tokenPause) {
|
|
107
|
+
return {
|
|
108
|
+
type: "TOKENPAUSE",
|
|
109
|
+
humanReadableType: "Token Pause",
|
|
110
|
+
tokenPause
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (transactionBody.tokenUnpause) {
|
|
115
|
+
const tokenUnpause = this.parseTokenUnpause(
|
|
116
|
+
transactionBody.tokenUnpause
|
|
117
|
+
);
|
|
118
|
+
if (tokenUnpause) {
|
|
119
|
+
return {
|
|
120
|
+
type: "TOKENUNPAUSE",
|
|
121
|
+
humanReadableType: "Token Unpause",
|
|
122
|
+
tokenUnpause
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (transactionBody.tokenWipe) {
|
|
127
|
+
const tokenWipeAccount = this.parseTokenWipeAccount(
|
|
128
|
+
transactionBody.tokenWipe
|
|
129
|
+
);
|
|
130
|
+
if (tokenWipeAccount) {
|
|
131
|
+
return {
|
|
132
|
+
type: "TOKENWIPEACCOUNT",
|
|
133
|
+
humanReadableType: "Token Wipe Account",
|
|
134
|
+
tokenWipeAccount
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (transactionBody.tokenDeletion) {
|
|
139
|
+
const tokenDelete = this.parseTokenDelete(
|
|
140
|
+
transactionBody.tokenDeletion
|
|
141
|
+
);
|
|
142
|
+
if (tokenDelete) {
|
|
143
|
+
return {
|
|
144
|
+
type: "TOKENDELETE",
|
|
145
|
+
humanReadableType: "Token Delete",
|
|
146
|
+
tokenDelete
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (transactionBody.tokenAssociate) {
|
|
151
|
+
const tokenAssociate = this.parseTokenAssociate(
|
|
152
|
+
transactionBody.tokenAssociate
|
|
153
|
+
);
|
|
154
|
+
if (tokenAssociate) {
|
|
155
|
+
return {
|
|
156
|
+
type: "TOKENASSOCIATE",
|
|
157
|
+
humanReadableType: "Token Associate",
|
|
158
|
+
tokenAssociate
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (transactionBody.tokenDissociate) {
|
|
163
|
+
const tokenDissociate = this.parseTokenDissociate(
|
|
164
|
+
transactionBody.tokenDissociate
|
|
165
|
+
);
|
|
166
|
+
if (tokenDissociate) {
|
|
167
|
+
return {
|
|
168
|
+
type: "TOKENDISSOCIATE",
|
|
169
|
+
humanReadableType: "Token Dissociate",
|
|
170
|
+
tokenDissociate
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (transactionBody.tokenFeeScheduleUpdate) {
|
|
175
|
+
const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(
|
|
176
|
+
transactionBody.tokenFeeScheduleUpdate
|
|
177
|
+
);
|
|
178
|
+
if (tokenFeeScheduleUpdate) {
|
|
179
|
+
return {
|
|
180
|
+
type: "TOKENFEESCHEDULEUPDATE",
|
|
181
|
+
humanReadableType: "Token Fee Schedule Update",
|
|
182
|
+
tokenFeeScheduleUpdate
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const airdrop = this.parseTokenAirdrop(transaction);
|
|
187
|
+
if (airdrop) {
|
|
125
188
|
return {
|
|
126
|
-
type: "
|
|
127
|
-
humanReadableType: "
|
|
128
|
-
|
|
189
|
+
type: "TOKENAIRDROP",
|
|
190
|
+
humanReadableType: "Token Airdrop",
|
|
191
|
+
tokenAirdrop: airdrop
|
|
129
192
|
};
|
|
130
193
|
}
|
|
131
194
|
return {};
|
|
132
195
|
} catch (error) {
|
|
196
|
+
console.warn("[HTSParser] Failed to parse HTS transaction:", error);
|
|
133
197
|
return {};
|
|
134
198
|
}
|
|
135
199
|
}
|
|
136
|
-
|
|
137
|
-
* Parse Schedule Create from protobuf data
|
|
138
|
-
*/
|
|
139
|
-
static parseScheduleCreateFromProto(body) {
|
|
200
|
+
static parseTokenCreate(body) {
|
|
140
201
|
if (!body) return void 0;
|
|
141
202
|
const data = {};
|
|
142
|
-
if (body.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
data.
|
|
203
|
+
if (body.name) {
|
|
204
|
+
data.tokenName = body.name;
|
|
205
|
+
}
|
|
206
|
+
if (body.symbol) {
|
|
207
|
+
data.tokenSymbol = body.symbol;
|
|
208
|
+
}
|
|
209
|
+
if (body.treasury) {
|
|
210
|
+
data.treasuryAccountId = new AccountId(
|
|
211
|
+
body.treasury.shardNum ?? 0,
|
|
212
|
+
body.treasury.realmNum ?? 0,
|
|
213
|
+
body.treasury.accountNum ?? 0
|
|
214
|
+
).toString();
|
|
215
|
+
}
|
|
216
|
+
if (body.initialSupply) {
|
|
217
|
+
data.initialSupply = Long.fromValue(body.initialSupply).toString();
|
|
218
|
+
}
|
|
219
|
+
if (body.decimals !== void 0 && body.decimals !== null) {
|
|
220
|
+
data.decimals = Long.fromValue(body.decimals).toNumber();
|
|
221
|
+
}
|
|
222
|
+
if (body.maxSupply) {
|
|
223
|
+
data.maxSupply = Long.fromValue(body.maxSupply).toString();
|
|
147
224
|
}
|
|
148
225
|
if (body.memo) {
|
|
149
226
|
data.memo = body.memo;
|
|
150
227
|
}
|
|
151
|
-
if (body.
|
|
152
|
-
data.
|
|
228
|
+
if (body.tokenType !== null && body.tokenType !== void 0) {
|
|
229
|
+
data.tokenType = proto.TokenType[body.tokenType];
|
|
153
230
|
}
|
|
154
|
-
if (body.
|
|
155
|
-
data.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
231
|
+
if (body.supplyType !== null && body.supplyType !== void 0) {
|
|
232
|
+
data.supplyType = proto.TokenSupplyType[body.supplyType];
|
|
233
|
+
}
|
|
234
|
+
data.adminKey = parseKey(body.adminKey);
|
|
235
|
+
data.kycKey = parseKey(body.kycKey);
|
|
236
|
+
data.freezeKey = parseKey(body.freezeKey);
|
|
237
|
+
data.wipeKey = parseKey(body.wipeKey);
|
|
238
|
+
data.supplyKey = parseKey(body.supplyKey);
|
|
239
|
+
data.feeScheduleKey = parseKey(body.feeScheduleKey);
|
|
240
|
+
data.pauseKey = parseKey(body.pauseKey);
|
|
241
|
+
if (body.autoRenewAccount) {
|
|
242
|
+
data.autoRenewAccount = new AccountId(
|
|
243
|
+
body.autoRenewAccount.shardNum ?? 0,
|
|
244
|
+
body.autoRenewAccount.realmNum ?? 0,
|
|
245
|
+
body.autoRenewAccount.accountNum ?? 0
|
|
159
246
|
).toString();
|
|
160
247
|
}
|
|
161
|
-
if (body.
|
|
162
|
-
data.
|
|
163
|
-
body.
|
|
164
|
-
).toString()
|
|
248
|
+
if (body.autoRenewPeriod?.seconds) {
|
|
249
|
+
data.autoRenewPeriod = Long.fromValue(
|
|
250
|
+
body.autoRenewPeriod.seconds
|
|
251
|
+
).toString();
|
|
165
252
|
}
|
|
166
|
-
if (body.
|
|
167
|
-
data.
|
|
253
|
+
if (body.customFees && body.customFees.length > 0) {
|
|
254
|
+
data.customFees = body.customFees.map((fee) => {
|
|
255
|
+
const feeCollectorAccountId = fee.feeCollectorAccountId ? new AccountId(
|
|
256
|
+
fee.feeCollectorAccountId.shardNum ?? 0,
|
|
257
|
+
fee.feeCollectorAccountId.realmNum ?? 0,
|
|
258
|
+
fee.feeCollectorAccountId.accountNum ?? 0
|
|
259
|
+
).toString() : "Not Set";
|
|
260
|
+
const commonFeeData = {
|
|
261
|
+
feeCollectorAccountId,
|
|
262
|
+
allCollectorsAreExempt: fee.allCollectorsAreExempt || false
|
|
263
|
+
};
|
|
264
|
+
if (fee.fixedFee) {
|
|
265
|
+
return {
|
|
266
|
+
...commonFeeData,
|
|
267
|
+
feeType: "FIXED_FEE",
|
|
268
|
+
fixedFee: {
|
|
269
|
+
amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),
|
|
270
|
+
denominatingTokenId: fee.fixedFee.denominatingTokenId ? new TokenId(
|
|
271
|
+
fee.fixedFee.denominatingTokenId.shardNum ?? 0,
|
|
272
|
+
fee.fixedFee.denominatingTokenId.realmNum ?? 0,
|
|
273
|
+
fee.fixedFee.denominatingTokenId.tokenNum ?? 0
|
|
274
|
+
).toString() : void 0
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
} else if (fee.fractionalFee) {
|
|
278
|
+
return {
|
|
279
|
+
...commonFeeData,
|
|
280
|
+
feeType: "FRACTIONAL_FEE",
|
|
281
|
+
fractionalFee: {
|
|
282
|
+
numerator: Long.fromValue(
|
|
283
|
+
fee.fractionalFee.fractionalAmount?.numerator || 0
|
|
284
|
+
).toString(),
|
|
285
|
+
denominator: Long.fromValue(
|
|
286
|
+
fee.fractionalFee.fractionalAmount?.denominator || 1
|
|
287
|
+
).toString(),
|
|
288
|
+
minimumAmount: Long.fromValue(
|
|
289
|
+
fee.fractionalFee.minimumAmount || 0
|
|
290
|
+
).toString(),
|
|
291
|
+
maximumAmount: Long.fromValue(
|
|
292
|
+
fee.fractionalFee.maximumAmount || 0
|
|
293
|
+
).toString(),
|
|
294
|
+
netOfTransfers: fee.fractionalFee.netOfTransfers || false
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
} else if (fee.royaltyFee) {
|
|
298
|
+
let fallbackFeeData = void 0;
|
|
299
|
+
if (fee.royaltyFee.fallbackFee) {
|
|
300
|
+
fallbackFeeData = {
|
|
301
|
+
amount: Long.fromValue(
|
|
302
|
+
fee.royaltyFee.fallbackFee.amount || 0
|
|
303
|
+
).toString(),
|
|
304
|
+
denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId ? new TokenId(
|
|
305
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ?? 0,
|
|
306
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ?? 0,
|
|
307
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ?? 0
|
|
308
|
+
).toString() : void 0
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
...commonFeeData,
|
|
313
|
+
feeType: "ROYALTY_FEE",
|
|
314
|
+
royaltyFee: {
|
|
315
|
+
numerator: Long.fromValue(
|
|
316
|
+
fee.royaltyFee.exchangeValueFraction?.numerator || 0
|
|
317
|
+
).toString(),
|
|
318
|
+
denominator: Long.fromValue(
|
|
319
|
+
fee.royaltyFee.exchangeValueFraction?.denominator || 1
|
|
320
|
+
).toString(),
|
|
321
|
+
fallbackFee: fallbackFeeData
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return {
|
|
326
|
+
...commonFeeData,
|
|
327
|
+
feeType: "FIXED_FEE",
|
|
328
|
+
fixedFee: { amount: "0" }
|
|
329
|
+
};
|
|
330
|
+
});
|
|
168
331
|
}
|
|
169
332
|
return data;
|
|
170
333
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
334
|
+
static parseTokenMint(body) {
|
|
335
|
+
if (!body || !body.token || body.amount === null || body.amount === void 0) {
|
|
336
|
+
return void 0;
|
|
337
|
+
}
|
|
338
|
+
const data = {
|
|
339
|
+
tokenId: new TokenId(
|
|
340
|
+
body.token.shardNum ?? 0,
|
|
341
|
+
body.token.realmNum ?? 0,
|
|
342
|
+
body.token.tokenNum ?? 0
|
|
343
|
+
).toString(),
|
|
344
|
+
amount: Long.fromValue(body.amount).toNumber()
|
|
345
|
+
};
|
|
346
|
+
if (body.metadata && body.metadata.length > 0) {
|
|
347
|
+
data.metadata = body.metadata.map(
|
|
348
|
+
(meta) => Buffer.from(meta).toString("base64")
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
return data;
|
|
352
|
+
}
|
|
353
|
+
static parseTokenBurn(body) {
|
|
354
|
+
if (!body || !body.token || body.amount === null || body.amount === void 0) {
|
|
355
|
+
return void 0;
|
|
356
|
+
}
|
|
357
|
+
const data = {
|
|
358
|
+
tokenId: new TokenId(
|
|
359
|
+
body.token.shardNum ?? 0,
|
|
360
|
+
body.token.realmNum ?? 0,
|
|
361
|
+
body.token.tokenNum ?? 0
|
|
362
|
+
).toString(),
|
|
363
|
+
amount: Long.fromValue(body.amount).toNumber()
|
|
364
|
+
};
|
|
365
|
+
if (body.serialNumbers && body.serialNumbers.length > 0) {
|
|
366
|
+
data.serialNumbers = body.serialNumbers.map(
|
|
367
|
+
(sn) => Long.fromValue(sn).toNumber()
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
return data;
|
|
371
|
+
}
|
|
372
|
+
static parseTokenUpdate(body) {
|
|
175
373
|
if (!body) return void 0;
|
|
176
374
|
const data = {};
|
|
177
|
-
if (body.
|
|
178
|
-
data.
|
|
179
|
-
body.
|
|
180
|
-
body.
|
|
181
|
-
body.
|
|
375
|
+
if (body.token) {
|
|
376
|
+
data.tokenId = new TokenId(
|
|
377
|
+
body.token.shardNum ?? 0,
|
|
378
|
+
body.token.realmNum ?? 0,
|
|
379
|
+
body.token.tokenNum ?? 0
|
|
380
|
+
).toString();
|
|
381
|
+
}
|
|
382
|
+
if (body.name) {
|
|
383
|
+
data.name = body.name;
|
|
384
|
+
}
|
|
385
|
+
if (body.symbol) {
|
|
386
|
+
data.symbol = body.symbol;
|
|
387
|
+
}
|
|
388
|
+
if (body.treasury) {
|
|
389
|
+
data.treasuryAccountId = new AccountId(
|
|
390
|
+
body.treasury.shardNum ?? 0,
|
|
391
|
+
body.treasury.realmNum ?? 0,
|
|
392
|
+
body.treasury.accountNum ?? 0
|
|
393
|
+
).toString();
|
|
394
|
+
}
|
|
395
|
+
data.adminKey = parseKey(body.adminKey);
|
|
396
|
+
data.kycKey = parseKey(body.kycKey);
|
|
397
|
+
data.freezeKey = parseKey(body.freezeKey);
|
|
398
|
+
data.wipeKey = parseKey(body.wipeKey);
|
|
399
|
+
data.supplyKey = parseKey(body.supplyKey);
|
|
400
|
+
data.feeScheduleKey = parseKey(body.feeScheduleKey);
|
|
401
|
+
data.pauseKey = parseKey(body.pauseKey);
|
|
402
|
+
if (body.autoRenewAccount) {
|
|
403
|
+
data.autoRenewAccountId = new AccountId(
|
|
404
|
+
body.autoRenewAccount.shardNum ?? 0,
|
|
405
|
+
body.autoRenewAccount.realmNum ?? 0,
|
|
406
|
+
body.autoRenewAccount.accountNum ?? 0
|
|
182
407
|
).toString();
|
|
183
408
|
}
|
|
409
|
+
if (body.autoRenewPeriod?.seconds) {
|
|
410
|
+
data.autoRenewPeriod = Long.fromValue(
|
|
411
|
+
body.autoRenewPeriod.seconds
|
|
412
|
+
).toString();
|
|
413
|
+
}
|
|
414
|
+
if (body.memo?.value !== void 0) {
|
|
415
|
+
data.memo = body.memo.value;
|
|
416
|
+
}
|
|
417
|
+
if (body.expiry?.seconds) {
|
|
418
|
+
data.expiry = `${Long.fromValue(body.expiry.seconds).toString()}.${body.expiry.nanos}`;
|
|
419
|
+
}
|
|
184
420
|
return data;
|
|
185
421
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
422
|
+
static parseTokenFeeScheduleUpdate(body) {
|
|
423
|
+
if (!body) return void 0;
|
|
424
|
+
const data = {};
|
|
425
|
+
if (body.tokenId) {
|
|
426
|
+
data.tokenId = new TokenId(
|
|
427
|
+
body.tokenId.shardNum ?? 0,
|
|
428
|
+
body.tokenId.realmNum ?? 0,
|
|
429
|
+
body.tokenId.tokenNum ?? 0
|
|
430
|
+
).toString();
|
|
431
|
+
}
|
|
432
|
+
if (body.customFees && body.customFees.length > 0) {
|
|
433
|
+
data.customFees = body.customFees.map((fee) => {
|
|
434
|
+
const feeCollectorAccountId = fee.feeCollectorAccountId ? new AccountId(
|
|
435
|
+
fee.feeCollectorAccountId.shardNum ?? 0,
|
|
436
|
+
fee.feeCollectorAccountId.realmNum ?? 0,
|
|
437
|
+
fee.feeCollectorAccountId.accountNum ?? 0
|
|
438
|
+
).toString() : "Not Set";
|
|
439
|
+
const commonFeeData = {
|
|
440
|
+
feeCollectorAccountId,
|
|
441
|
+
allCollectorsAreExempt: fee.allCollectorsAreExempt || false
|
|
442
|
+
};
|
|
443
|
+
if (fee.fixedFee) {
|
|
444
|
+
return {
|
|
445
|
+
...commonFeeData,
|
|
446
|
+
feeType: "FIXED_FEE",
|
|
447
|
+
fixedFee: {
|
|
448
|
+
amount: Long.fromValue(fee.fixedFee.amount || 0).toString(),
|
|
449
|
+
denominatingTokenId: fee.fixedFee.denominatingTokenId ? new TokenId(
|
|
450
|
+
fee.fixedFee.denominatingTokenId.shardNum ?? 0,
|
|
451
|
+
fee.fixedFee.denominatingTokenId.realmNum ?? 0,
|
|
452
|
+
fee.fixedFee.denominatingTokenId.tokenNum ?? 0
|
|
453
|
+
).toString() : void 0
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
} else if (fee.fractionalFee) {
|
|
457
|
+
return {
|
|
458
|
+
...commonFeeData,
|
|
459
|
+
feeType: "FRACTIONAL_FEE",
|
|
460
|
+
fractionalFee: {
|
|
461
|
+
numerator: Long.fromValue(
|
|
462
|
+
fee.fractionalFee.fractionalAmount?.numerator || 0
|
|
463
|
+
).toString(),
|
|
464
|
+
denominator: Long.fromValue(
|
|
465
|
+
fee.fractionalFee.fractionalAmount?.denominator || 1
|
|
466
|
+
).toString(),
|
|
467
|
+
minimumAmount: Long.fromValue(
|
|
468
|
+
fee.fractionalFee.minimumAmount || 0
|
|
469
|
+
).toString(),
|
|
470
|
+
maximumAmount: Long.fromValue(
|
|
471
|
+
fee.fractionalFee.maximumAmount || 0
|
|
472
|
+
).toString(),
|
|
473
|
+
netOfTransfers: fee.fractionalFee.netOfTransfers || false
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
} else if (fee.royaltyFee) {
|
|
477
|
+
let fallbackFeeData = void 0;
|
|
478
|
+
if (fee.royaltyFee.fallbackFee) {
|
|
479
|
+
fallbackFeeData = {
|
|
480
|
+
amount: Long.fromValue(
|
|
481
|
+
fee.royaltyFee.fallbackFee.amount || 0
|
|
482
|
+
).toString(),
|
|
483
|
+
denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId ? new TokenId(
|
|
484
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.shardNum ?? 0,
|
|
485
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.realmNum ?? 0,
|
|
486
|
+
fee.royaltyFee.fallbackFee.denominatingTokenId.tokenNum ?? 0
|
|
487
|
+
).toString() : void 0
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
...commonFeeData,
|
|
492
|
+
feeType: "ROYALTY_FEE",
|
|
493
|
+
royaltyFee: {
|
|
494
|
+
numerator: Long.fromValue(
|
|
495
|
+
fee.royaltyFee.exchangeValueFraction?.numerator || 0
|
|
496
|
+
).toString(),
|
|
497
|
+
denominator: Long.fromValue(
|
|
498
|
+
fee.royaltyFee.exchangeValueFraction?.denominator || 1
|
|
499
|
+
).toString(),
|
|
500
|
+
fallbackFee: fallbackFeeData
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
...commonFeeData,
|
|
506
|
+
feeType: "FIXED_FEE",
|
|
507
|
+
fixedFee: { amount: "0" }
|
|
508
|
+
};
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
return data;
|
|
512
|
+
}
|
|
513
|
+
static parseTokenFreeze(body) {
|
|
514
|
+
if (!body) return void 0;
|
|
515
|
+
const data = {};
|
|
516
|
+
if (body.token) {
|
|
517
|
+
data.tokenId = new TokenId(
|
|
518
|
+
body.token.shardNum ?? 0,
|
|
519
|
+
body.token.realmNum ?? 0,
|
|
520
|
+
body.token.tokenNum ?? 0
|
|
521
|
+
).toString();
|
|
522
|
+
}
|
|
523
|
+
if (body.account) {
|
|
524
|
+
data.accountId = new AccountId(
|
|
525
|
+
body.account.shardNum ?? 0,
|
|
526
|
+
body.account.realmNum ?? 0,
|
|
527
|
+
body.account.accountNum ?? 0
|
|
528
|
+
).toString();
|
|
529
|
+
}
|
|
530
|
+
return data;
|
|
531
|
+
}
|
|
532
|
+
static parseTokenUnfreeze(body) {
|
|
533
|
+
if (!body) return void 0;
|
|
534
|
+
const data = {};
|
|
535
|
+
if (body.token) {
|
|
536
|
+
data.tokenId = new TokenId(
|
|
537
|
+
body.token.shardNum ?? 0,
|
|
538
|
+
body.token.realmNum ?? 0,
|
|
539
|
+
body.token.tokenNum ?? 0
|
|
540
|
+
).toString();
|
|
541
|
+
}
|
|
542
|
+
if (body.account) {
|
|
543
|
+
data.accountId = new AccountId(
|
|
544
|
+
body.account.shardNum ?? 0,
|
|
545
|
+
body.account.realmNum ?? 0,
|
|
546
|
+
body.account.accountNum ?? 0
|
|
547
|
+
).toString();
|
|
548
|
+
}
|
|
549
|
+
return data;
|
|
550
|
+
}
|
|
551
|
+
static parseTokenGrantKyc(body) {
|
|
552
|
+
if (!body) return void 0;
|
|
553
|
+
const data = {};
|
|
554
|
+
if (body.token) {
|
|
555
|
+
data.tokenId = new TokenId(
|
|
556
|
+
body.token.shardNum ?? 0,
|
|
557
|
+
body.token.realmNum ?? 0,
|
|
558
|
+
body.token.tokenNum ?? 0
|
|
559
|
+
).toString();
|
|
560
|
+
}
|
|
561
|
+
if (body.account) {
|
|
562
|
+
data.accountId = new AccountId(
|
|
563
|
+
body.account.shardNum ?? 0,
|
|
564
|
+
body.account.realmNum ?? 0,
|
|
565
|
+
body.account.accountNum ?? 0
|
|
566
|
+
).toString();
|
|
567
|
+
}
|
|
568
|
+
return data;
|
|
569
|
+
}
|
|
570
|
+
static parseTokenRevokeKyc(body) {
|
|
571
|
+
if (!body) return void 0;
|
|
572
|
+
const data = {};
|
|
573
|
+
if (body.token) {
|
|
574
|
+
data.tokenId = new TokenId(
|
|
575
|
+
body.token.shardNum ?? 0,
|
|
576
|
+
body.token.realmNum ?? 0,
|
|
577
|
+
body.token.tokenNum ?? 0
|
|
578
|
+
).toString();
|
|
579
|
+
}
|
|
580
|
+
if (body.account) {
|
|
581
|
+
data.accountId = new AccountId(
|
|
582
|
+
body.account.shardNum ?? 0,
|
|
583
|
+
body.account.realmNum ?? 0,
|
|
584
|
+
body.account.accountNum ?? 0
|
|
585
|
+
).toString();
|
|
586
|
+
}
|
|
587
|
+
return data;
|
|
588
|
+
}
|
|
589
|
+
static parseTokenPause(body) {
|
|
590
|
+
if (!body) return void 0;
|
|
591
|
+
const data = {};
|
|
592
|
+
if (body.token) {
|
|
593
|
+
data.tokenId = new TokenId(
|
|
594
|
+
body.token.shardNum ?? 0,
|
|
595
|
+
body.token.realmNum ?? 0,
|
|
596
|
+
body.token.tokenNum ?? 0
|
|
597
|
+
).toString();
|
|
598
|
+
}
|
|
599
|
+
return data;
|
|
600
|
+
}
|
|
601
|
+
static parseTokenUnpause(body) {
|
|
190
602
|
if (!body) return void 0;
|
|
191
603
|
const data = {};
|
|
192
|
-
if (body.
|
|
193
|
-
data.
|
|
194
|
-
body.
|
|
195
|
-
body.
|
|
196
|
-
body.
|
|
604
|
+
if (body.token) {
|
|
605
|
+
data.tokenId = new TokenId(
|
|
606
|
+
body.token.shardNum ?? 0,
|
|
607
|
+
body.token.realmNum ?? 0,
|
|
608
|
+
body.token.tokenNum ?? 0
|
|
197
609
|
).toString();
|
|
198
610
|
}
|
|
199
611
|
return data;
|
|
200
612
|
}
|
|
613
|
+
static parseTokenWipeAccount(body) {
|
|
614
|
+
if (!body) return void 0;
|
|
615
|
+
const data = {};
|
|
616
|
+
if (body.token) {
|
|
617
|
+
data.tokenId = new TokenId(
|
|
618
|
+
body.token.shardNum ?? 0,
|
|
619
|
+
body.token.realmNum ?? 0,
|
|
620
|
+
body.token.tokenNum ?? 0
|
|
621
|
+
).toString();
|
|
622
|
+
}
|
|
623
|
+
if (body.account) {
|
|
624
|
+
data.accountId = new AccountId(
|
|
625
|
+
body.account.shardNum ?? 0,
|
|
626
|
+
body.account.realmNum ?? 0,
|
|
627
|
+
body.account.accountNum ?? 0
|
|
628
|
+
).toString();
|
|
629
|
+
}
|
|
630
|
+
if (body.serialNumbers && body.serialNumbers.length > 0) {
|
|
631
|
+
data.serialNumbers = body.serialNumbers.map(
|
|
632
|
+
(sn) => Long.fromValue(sn).toString()
|
|
633
|
+
);
|
|
634
|
+
}
|
|
635
|
+
if (body.amount) {
|
|
636
|
+
data.amount = Long.fromValue(body.amount).toString();
|
|
637
|
+
}
|
|
638
|
+
return data;
|
|
639
|
+
}
|
|
640
|
+
static parseTokenDelete(body) {
|
|
641
|
+
if (!body) return void 0;
|
|
642
|
+
const data = {};
|
|
643
|
+
if (body.token) {
|
|
644
|
+
data.tokenId = new TokenId(
|
|
645
|
+
body.token.shardNum ?? 0,
|
|
646
|
+
body.token.realmNum ?? 0,
|
|
647
|
+
body.token.tokenNum ?? 0
|
|
648
|
+
).toString();
|
|
649
|
+
}
|
|
650
|
+
return data;
|
|
651
|
+
}
|
|
652
|
+
static parseTokenAssociate(body) {
|
|
653
|
+
if (!body) return void 0;
|
|
654
|
+
const data = {};
|
|
655
|
+
if (body.account) {
|
|
656
|
+
data.accountId = new AccountId(
|
|
657
|
+
body.account.shardNum ?? 0,
|
|
658
|
+
body.account.realmNum ?? 0,
|
|
659
|
+
body.account.accountNum ?? 0
|
|
660
|
+
).toString();
|
|
661
|
+
}
|
|
662
|
+
if (body.tokens && body.tokens.length > 0) {
|
|
663
|
+
data.tokenIds = body.tokens.map(
|
|
664
|
+
(t) => new TokenId(
|
|
665
|
+
t.shardNum ?? 0,
|
|
666
|
+
t.realmNum ?? 0,
|
|
667
|
+
t.tokenNum ?? 0
|
|
668
|
+
).toString()
|
|
669
|
+
);
|
|
670
|
+
}
|
|
671
|
+
return data;
|
|
672
|
+
}
|
|
673
|
+
static parseTokenDissociate(body) {
|
|
674
|
+
if (!body) return void 0;
|
|
675
|
+
const data = {};
|
|
676
|
+
if (body.account) {
|
|
677
|
+
data.accountId = new AccountId(
|
|
678
|
+
body.account.shardNum ?? 0,
|
|
679
|
+
body.account.realmNum ?? 0,
|
|
680
|
+
body.account.accountNum ?? 0
|
|
681
|
+
).toString();
|
|
682
|
+
}
|
|
683
|
+
if (body.tokens && body.tokens.length > 0) {
|
|
684
|
+
data.tokenIds = body.tokens.map(
|
|
685
|
+
(t) => new TokenId(
|
|
686
|
+
t.shardNum ?? 0,
|
|
687
|
+
t.realmNum ?? 0,
|
|
688
|
+
t.tokenNum ?? 0
|
|
689
|
+
).toString()
|
|
690
|
+
);
|
|
691
|
+
}
|
|
692
|
+
return data;
|
|
693
|
+
}
|
|
201
694
|
/**
|
|
202
|
-
*
|
|
203
|
-
*
|
|
695
|
+
* Parse token airdrop transaction for both fungible tokens and NFTs
|
|
696
|
+
* Extracts airdrop transfers from transaction protobuf data
|
|
204
697
|
*/
|
|
205
|
-
static
|
|
698
|
+
static parseTokenAirdrop(transaction) {
|
|
206
699
|
try {
|
|
207
|
-
const
|
|
208
|
-
|
|
700
|
+
const transactionBody = transaction._transactionBody;
|
|
701
|
+
if (transactionBody?.tokenAirdrop) {
|
|
702
|
+
const airdrop = transactionBody.tokenAirdrop;
|
|
703
|
+
return {
|
|
704
|
+
tokenTransfers: (airdrop.tokenTransfers || []).map(
|
|
705
|
+
(transfer) => ({
|
|
706
|
+
tokenId: transfer.token?.toString() || "Unknown",
|
|
707
|
+
transfers: (transfer.transfers || []).map((t) => ({
|
|
708
|
+
accountId: t.accountID?.toString() || "Unknown",
|
|
709
|
+
amount: t.amount?.toString() || "0",
|
|
710
|
+
serialNumbers: t.serialNumbers?.map((sn) => sn.toString())
|
|
711
|
+
}))
|
|
712
|
+
})
|
|
713
|
+
)
|
|
714
|
+
};
|
|
715
|
+
}
|
|
716
|
+
if (hasTransactionType(transaction, "tokenAirdrop")) {
|
|
717
|
+
const txBody = extractTransactionBody(transaction);
|
|
718
|
+
if (txBody?.tokenAirdrop) {
|
|
719
|
+
return this.parseTokenAirdropFromProto(txBody.tokenAirdrop);
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
const tx = transaction;
|
|
723
|
+
const tokenTransfersList = tx._tokenTransfers || [];
|
|
724
|
+
if (tokenTransfersList.length > 0) {
|
|
725
|
+
return {
|
|
726
|
+
tokenTransfers: tokenTransfersList.map((transfer) => ({
|
|
727
|
+
tokenId: transfer.tokenId?.toString() || "Unknown",
|
|
728
|
+
transfers: (transfer.transfers || []).map((t) => ({
|
|
729
|
+
accountId: t.accountId?.toString() || "Unknown",
|
|
730
|
+
amount: t.amount?.toString() || "0",
|
|
731
|
+
serialNumbers: t.serialNumbers?.map((sn) => sn.toString())
|
|
732
|
+
}))
|
|
733
|
+
}))
|
|
734
|
+
};
|
|
735
|
+
}
|
|
736
|
+
return null;
|
|
209
737
|
} catch (error) {
|
|
210
|
-
console.warn("[
|
|
738
|
+
console.warn("[HTSParser] Failed to parse token airdrop:", error);
|
|
211
739
|
return null;
|
|
212
740
|
}
|
|
213
741
|
}
|
|
214
742
|
/**
|
|
215
|
-
*
|
|
216
|
-
* @deprecated Use parseScheduleTransaction instead
|
|
743
|
+
* Parse token airdrop from protobuf data for scheduled transactions
|
|
217
744
|
*/
|
|
218
|
-
static
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
745
|
+
static parseTokenAirdropFromProto(airdrop) {
|
|
746
|
+
const tokenTransfers = [];
|
|
747
|
+
if (airdrop.tokenTransfers) {
|
|
748
|
+
for (const tokenTransfer of airdrop.tokenTransfers) {
|
|
749
|
+
const token = tokenTransfer.token ? new TokenId(
|
|
750
|
+
tokenTransfer.token.shardNum ?? 0,
|
|
751
|
+
tokenTransfer.token.realmNum ?? 0,
|
|
752
|
+
tokenTransfer.token.tokenNum ?? 0
|
|
753
|
+
) : null;
|
|
754
|
+
const transfers = [];
|
|
755
|
+
if (tokenTransfer.transfers) {
|
|
756
|
+
for (const transfer of tokenTransfer.transfers) {
|
|
757
|
+
const accountId = transfer.accountID ? new AccountId(
|
|
758
|
+
transfer.accountID.shardNum ?? 0,
|
|
759
|
+
transfer.accountID.realmNum ?? 0,
|
|
760
|
+
transfer.accountID.accountNum ?? 0
|
|
761
|
+
) : null;
|
|
762
|
+
transfers.push({
|
|
763
|
+
accountId: accountId?.toString() || "Unknown",
|
|
764
|
+
amount: transfer.amount ? Long.fromValue(transfer.amount).toString() : "0",
|
|
765
|
+
serialNumbers: transfer.serialNumbers?.map(
|
|
766
|
+
(sn) => Long.fromValue(sn).toString()
|
|
767
|
+
)
|
|
768
|
+
});
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
tokenTransfers.push({
|
|
772
|
+
tokenId: token?.toString() || "Unknown",
|
|
773
|
+
transfers
|
|
774
|
+
});
|
|
775
|
+
}
|
|
225
776
|
}
|
|
777
|
+
return { tokenTransfers };
|
|
226
778
|
}
|
|
227
779
|
/**
|
|
228
|
-
*
|
|
229
|
-
*
|
|
780
|
+
* Extract token creation data from Transaction object internal fields
|
|
781
|
+
* This handles the case where token creation data is stored in Transaction internals
|
|
230
782
|
*/
|
|
231
|
-
static
|
|
783
|
+
static extractTokenCreationFromTransaction(transaction) {
|
|
232
784
|
try {
|
|
233
|
-
const
|
|
234
|
-
|
|
785
|
+
const tx = transaction;
|
|
786
|
+
if (tx._tokenName || tx._tokenSymbol) {
|
|
787
|
+
const result = {
|
|
788
|
+
tokenName: tx._tokenName || "Unknown Token",
|
|
789
|
+
tokenSymbol: tx._tokenSymbol || "UNKNOWN",
|
|
790
|
+
initialSupply: tx._initialSupply?.toString() || "0",
|
|
791
|
+
decimals: Number(tx._decimals || 0),
|
|
792
|
+
treasuryAccountId: tx._treasuryAccountId?.toString() || "Unknown"
|
|
793
|
+
};
|
|
794
|
+
if (tx._maxSupply) {
|
|
795
|
+
result.maxSupply = tx._maxSupply.toString();
|
|
796
|
+
}
|
|
797
|
+
if (tx._tokenType) {
|
|
798
|
+
result.tokenType = tx._tokenType.toString ? tx._tokenType.toString() : String(tx._tokenType);
|
|
799
|
+
}
|
|
800
|
+
if (tx._supplyType) {
|
|
801
|
+
result.supplyType = tx._supplyType.toString ? tx._supplyType.toString() : String(tx._supplyType);
|
|
802
|
+
}
|
|
803
|
+
if (tx._tokenMemo) {
|
|
804
|
+
result.memo = tx._tokenMemo;
|
|
805
|
+
}
|
|
806
|
+
if (tx._adminKey) {
|
|
807
|
+
result.adminKey = tx._adminKey.toString();
|
|
808
|
+
}
|
|
809
|
+
if (tx._kycKey) {
|
|
810
|
+
result.kycKey = tx._kycKey.toString();
|
|
811
|
+
}
|
|
812
|
+
if (tx._freezeKey) {
|
|
813
|
+
result.freezeKey = tx._freezeKey.toString();
|
|
814
|
+
}
|
|
815
|
+
if (tx._wipeKey) {
|
|
816
|
+
result.wipeKey = tx._wipeKey.toString();
|
|
817
|
+
}
|
|
818
|
+
if (tx._supplyKey) {
|
|
819
|
+
result.supplyKey = tx._supplyKey.toString();
|
|
820
|
+
}
|
|
821
|
+
if (tx._feeScheduleKey) {
|
|
822
|
+
result.feeScheduleKey = tx._feeScheduleKey.toString();
|
|
823
|
+
}
|
|
824
|
+
if (tx._pauseKey) {
|
|
825
|
+
result.pauseKey = tx._pauseKey.toString();
|
|
826
|
+
}
|
|
827
|
+
if (tx._metadataKey) {
|
|
828
|
+
result.metadataKey = tx._metadataKey.toString();
|
|
829
|
+
}
|
|
830
|
+
if (tx._autoRenewAccountId) {
|
|
831
|
+
result.autoRenewAccount = tx._autoRenewAccountId.toString();
|
|
832
|
+
}
|
|
833
|
+
if (tx._autoRenewPeriod) {
|
|
834
|
+
result.autoRenewPeriod = tx._autoRenewPeriod.seconds?.toString() || tx._autoRenewPeriod.toString();
|
|
835
|
+
}
|
|
836
|
+
if (tx._expirationTime) {
|
|
837
|
+
result.expiry = tx._expirationTime.seconds?.toString() || tx._expirationTime.toString();
|
|
838
|
+
}
|
|
839
|
+
if (tx._customFees && Array.isArray(tx._customFees) && tx._customFees.length > 0) {
|
|
840
|
+
result.customFees = tx._customFees.map((fee) => {
|
|
841
|
+
const customFee = {
|
|
842
|
+
feeCollectorAccountId: fee.feeCollectorAccountId?.toString() || "",
|
|
843
|
+
feeType: "FIXED_FEE"
|
|
844
|
+
};
|
|
845
|
+
if (fee.fixedFee) {
|
|
846
|
+
customFee.feeType = "FIXED_FEE";
|
|
847
|
+
customFee.fixedFee = {
|
|
848
|
+
amount: fee.fixedFee.amount?.toString() || "0",
|
|
849
|
+
denominatingTokenId: fee.fixedFee.denominatingTokenId?.toString()
|
|
850
|
+
};
|
|
851
|
+
} else if (fee.fractionalFee) {
|
|
852
|
+
customFee.feeType = "FRACTIONAL_FEE";
|
|
853
|
+
customFee.fractionalFee = {
|
|
854
|
+
numerator: fee.fractionalFee.numerator?.toString() || "0",
|
|
855
|
+
denominator: fee.fractionalFee.denominator?.toString() || "1",
|
|
856
|
+
minimumAmount: fee.fractionalFee.minimumAmount?.toString() || "0",
|
|
857
|
+
maximumAmount: fee.fractionalFee.maximumAmount?.toString() || "0",
|
|
858
|
+
netOfTransfers: fee.fractionalFee.netOfTransfers || false
|
|
859
|
+
};
|
|
860
|
+
} else if (fee.royaltyFee) {
|
|
861
|
+
customFee.feeType = "ROYALTY_FEE";
|
|
862
|
+
customFee.royaltyFee = {
|
|
863
|
+
numerator: fee.royaltyFee.numerator?.toString() || "0",
|
|
864
|
+
denominator: fee.royaltyFee.denominator?.toString() || "1",
|
|
865
|
+
fallbackFee: fee.royaltyFee.fallbackFee ? {
|
|
866
|
+
amount: fee.royaltyFee.fallbackFee.amount?.toString() || "0",
|
|
867
|
+
denominatingTokenId: fee.royaltyFee.fallbackFee.denominatingTokenId?.toString()
|
|
868
|
+
} : void 0
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
customFee.allCollectorsAreExempt = fee.allCollectorsAreExempt || false;
|
|
872
|
+
return customFee;
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
return result;
|
|
876
|
+
}
|
|
877
|
+
return null;
|
|
235
878
|
} catch (error) {
|
|
236
|
-
console.warn("[ScheduleParser] Failed to parse schedule delete:", error);
|
|
237
879
|
return null;
|
|
238
880
|
}
|
|
239
881
|
}
|
|
240
882
|
/**
|
|
241
|
-
*
|
|
883
|
+
* Extract token airdrop data from Transaction object internal fields
|
|
884
|
+
* This handles the case where airdrop data is stored in Transaction internals
|
|
242
885
|
*/
|
|
243
|
-
static
|
|
886
|
+
static extractTokenAirdropFromTransaction(transaction) {
|
|
244
887
|
try {
|
|
245
|
-
const transactionBody = transaction._transactionBody;
|
|
246
|
-
if (transactionBody?.scheduleRef) {
|
|
247
|
-
return {
|
|
248
|
-
isScheduled: true,
|
|
249
|
-
scheduleRef: transactionBody.scheduleRef.toString()
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
888
|
const tx = transaction;
|
|
253
|
-
if (tx.
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
889
|
+
if (tx._tokenAirdrops && Array.isArray(tx._tokenAirdrops)) {
|
|
890
|
+
const tokenTransfers = tx._tokenAirdrops.map((airdrop) => ({
|
|
891
|
+
tokenId: airdrop.tokenId?.toString() || "Unknown",
|
|
892
|
+
transfers: (airdrop.transfers || []).map((transfer) => ({
|
|
893
|
+
accountId: transfer.accountId?.toString() || "Unknown",
|
|
894
|
+
amount: transfer.amount?.toString() || "0",
|
|
895
|
+
serialNumbers: transfer.serialNumbers?.map((s) => s.toString()) || []
|
|
896
|
+
}))
|
|
897
|
+
}));
|
|
898
|
+
return { tokenTransfers };
|
|
258
899
|
}
|
|
259
|
-
return
|
|
900
|
+
return null;
|
|
260
901
|
} catch (error) {
|
|
261
|
-
return
|
|
902
|
+
return null;
|
|
262
903
|
}
|
|
263
904
|
}
|
|
264
905
|
/**
|
|
265
|
-
* Parse
|
|
266
|
-
* This is
|
|
906
|
+
* Parse HTS transaction from Transaction object with comprehensive extraction
|
|
907
|
+
* This is the unified entry point that handles both protobuf and internal field extraction
|
|
267
908
|
*/
|
|
268
|
-
static
|
|
909
|
+
static parseFromTransactionObject(transaction) {
|
|
269
910
|
try {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
911
|
+
try {
|
|
912
|
+
const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
|
|
913
|
+
if (bytes) {
|
|
914
|
+
const decoded = proto.TransactionList.decode(bytes);
|
|
915
|
+
if (decoded.transactionList && decoded.transactionList.length > 0) {
|
|
916
|
+
const tx = decoded.transactionList[0];
|
|
917
|
+
let txBody = null;
|
|
918
|
+
if (tx.bodyBytes && tx.bodyBytes.length > 0) {
|
|
919
|
+
txBody = proto.TransactionBody.decode(tx.bodyBytes);
|
|
920
|
+
} else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
|
|
921
|
+
const signedTx = proto.SignedTransaction.decode(
|
|
922
|
+
tx.signedTransactionBytes
|
|
923
|
+
);
|
|
924
|
+
if (signedTx.bodyBytes) {
|
|
925
|
+
txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
if (txBody) {
|
|
929
|
+
if (txBody.tokenCreation) {
|
|
930
|
+
const tokenCreation2 = this.parseTokenCreate(
|
|
931
|
+
txBody.tokenCreation
|
|
932
|
+
);
|
|
933
|
+
if (tokenCreation2) {
|
|
934
|
+
return {
|
|
935
|
+
type: "TOKENCREATE",
|
|
936
|
+
humanReadableType: "Token Creation",
|
|
937
|
+
tokenCreation: tokenCreation2
|
|
938
|
+
};
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
if (txBody.tokenMint) {
|
|
942
|
+
const tokenMint = this.parseTokenMint(txBody.tokenMint);
|
|
943
|
+
if (tokenMint) {
|
|
944
|
+
return {
|
|
945
|
+
type: "TOKENMINT",
|
|
946
|
+
humanReadableType: "Token Mint",
|
|
947
|
+
tokenMint
|
|
948
|
+
};
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
if (txBody.tokenBurn) {
|
|
952
|
+
const tokenBurn = this.parseTokenBurn(txBody.tokenBurn);
|
|
953
|
+
if (tokenBurn) {
|
|
954
|
+
return {
|
|
955
|
+
type: "TOKENBURN",
|
|
956
|
+
humanReadableType: "Token Burn",
|
|
957
|
+
tokenBurn
|
|
958
|
+
};
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
if (txBody.tokenUpdate) {
|
|
962
|
+
const tokenUpdate = this.parseTokenUpdate(txBody.tokenUpdate);
|
|
963
|
+
if (tokenUpdate) {
|
|
964
|
+
return {
|
|
965
|
+
type: "TOKENUPDATE",
|
|
966
|
+
humanReadableType: "Token Update",
|
|
967
|
+
tokenUpdate
|
|
968
|
+
};
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
if (txBody.tokenFreeze) {
|
|
972
|
+
const tokenFreeze = this.parseTokenFreeze(txBody.tokenFreeze);
|
|
973
|
+
if (tokenFreeze) {
|
|
974
|
+
return {
|
|
975
|
+
type: "TOKENFREEZE",
|
|
976
|
+
humanReadableType: "Token Freeze",
|
|
977
|
+
tokenFreeze
|
|
978
|
+
};
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
if (txBody.tokenUnfreeze) {
|
|
982
|
+
const tokenUnfreeze = this.parseTokenUnfreeze(
|
|
983
|
+
txBody.tokenUnfreeze
|
|
984
|
+
);
|
|
985
|
+
if (tokenUnfreeze) {
|
|
986
|
+
return {
|
|
987
|
+
type: "TOKENUNFREEZE",
|
|
988
|
+
humanReadableType: "Token Unfreeze",
|
|
989
|
+
tokenUnfreeze
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
if (txBody.tokenGrantKyc) {
|
|
994
|
+
const tokenGrantKyc = this.parseTokenGrantKyc(
|
|
995
|
+
txBody.tokenGrantKyc
|
|
996
|
+
);
|
|
997
|
+
if (tokenGrantKyc) {
|
|
998
|
+
return {
|
|
999
|
+
type: "TOKENGRANTKYC",
|
|
1000
|
+
humanReadableType: "Token Grant KYC",
|
|
1001
|
+
tokenGrantKyc
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
if (txBody.tokenRevokeKyc) {
|
|
1006
|
+
const tokenRevokeKyc = this.parseTokenRevokeKyc(
|
|
1007
|
+
txBody.tokenRevokeKyc
|
|
1008
|
+
);
|
|
1009
|
+
if (tokenRevokeKyc) {
|
|
1010
|
+
return {
|
|
1011
|
+
type: "TOKENREVOKEKYC",
|
|
1012
|
+
humanReadableType: "Token Revoke KYC",
|
|
1013
|
+
tokenRevokeKyc
|
|
1014
|
+
};
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
if (txBody.tokenPause) {
|
|
1018
|
+
const tokenPause = this.parseTokenPause(txBody.tokenPause);
|
|
1019
|
+
if (tokenPause) {
|
|
1020
|
+
return {
|
|
1021
|
+
type: "TOKENPAUSE",
|
|
1022
|
+
humanReadableType: "Token Pause",
|
|
1023
|
+
tokenPause
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
if (txBody.tokenUnpause) {
|
|
1028
|
+
const tokenUnpause = this.parseTokenUnpause(
|
|
1029
|
+
txBody.tokenUnpause
|
|
1030
|
+
);
|
|
1031
|
+
if (tokenUnpause) {
|
|
1032
|
+
return {
|
|
1033
|
+
type: "TOKENUNPAUSE",
|
|
1034
|
+
humanReadableType: "Token Unpause",
|
|
1035
|
+
tokenUnpause
|
|
1036
|
+
};
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
if (txBody.tokenWipe) {
|
|
1040
|
+
const tokenWipeAccount = this.parseTokenWipeAccount(
|
|
1041
|
+
txBody.tokenWipe
|
|
1042
|
+
);
|
|
1043
|
+
if (tokenWipeAccount) {
|
|
1044
|
+
return {
|
|
1045
|
+
type: "TOKENWIPEACCOUNT",
|
|
1046
|
+
humanReadableType: "Token Wipe Account",
|
|
1047
|
+
tokenWipeAccount
|
|
1048
|
+
};
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
if (txBody.tokenDeletion) {
|
|
1052
|
+
const tokenDelete = this.parseTokenDelete(txBody.tokenDeletion);
|
|
1053
|
+
if (tokenDelete) {
|
|
1054
|
+
return {
|
|
1055
|
+
type: "TOKENDELETE",
|
|
1056
|
+
humanReadableType: "Token Delete",
|
|
1057
|
+
tokenDelete
|
|
1058
|
+
};
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
if (txBody.tokenAssociate) {
|
|
1062
|
+
const tokenAssociate = this.parseTokenAssociate(
|
|
1063
|
+
txBody.tokenAssociate
|
|
1064
|
+
);
|
|
1065
|
+
if (tokenAssociate) {
|
|
1066
|
+
return {
|
|
1067
|
+
type: "TOKENASSOCIATE",
|
|
1068
|
+
humanReadableType: "Token Associate",
|
|
1069
|
+
tokenAssociate
|
|
1070
|
+
};
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
if (txBody.tokenDissociate) {
|
|
1074
|
+
const tokenDissociate = this.parseTokenDissociate(
|
|
1075
|
+
txBody.tokenDissociate
|
|
1076
|
+
);
|
|
1077
|
+
if (tokenDissociate) {
|
|
1078
|
+
return {
|
|
1079
|
+
type: "TOKENDISSOCIATE",
|
|
1080
|
+
humanReadableType: "Token Dissociate",
|
|
1081
|
+
tokenDissociate
|
|
1082
|
+
};
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
if (txBody.tokenFeeScheduleUpdate) {
|
|
1086
|
+
const tokenFeeScheduleUpdate = this.parseTokenFeeScheduleUpdate(
|
|
1087
|
+
txBody.tokenFeeScheduleUpdate
|
|
1088
|
+
);
|
|
1089
|
+
if (tokenFeeScheduleUpdate) {
|
|
1090
|
+
return {
|
|
1091
|
+
type: "TOKENFEESCHEDULEUPDATE",
|
|
1092
|
+
humanReadableType: "Token Fee Schedule Update",
|
|
1093
|
+
tokenFeeScheduleUpdate
|
|
1094
|
+
};
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
if (txBody.tokenAirdrop) {
|
|
1098
|
+
const tokenAirdrop2 = this.parseTokenAirdropFromProto(
|
|
1099
|
+
txBody.tokenAirdrop
|
|
1100
|
+
);
|
|
1101
|
+
if (tokenAirdrop2) {
|
|
1102
|
+
return {
|
|
1103
|
+
type: "TOKENAIRDROP",
|
|
1104
|
+
humanReadableType: "Token Airdrop",
|
|
1105
|
+
tokenAirdrop: tokenAirdrop2
|
|
1106
|
+
};
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
} catch (e) {
|
|
276
1113
|
}
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
1114
|
+
const protoResult = this.parseHTSTransaction(transaction);
|
|
1115
|
+
if (protoResult.type) {
|
|
1116
|
+
return protoResult;
|
|
1117
|
+
}
|
|
1118
|
+
const tokenCreation = this.extractTokenCreationFromTransaction(transaction);
|
|
1119
|
+
const tokenAirdrop = this.extractTokenAirdropFromTransaction(transaction);
|
|
1120
|
+
if (tokenCreation) {
|
|
282
1121
|
return {
|
|
283
|
-
type:
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
transactionFee: schedulableBody.transactionFee?.toString()
|
|
1122
|
+
type: "TOKENCREATE",
|
|
1123
|
+
humanReadableType: "Token Creation",
|
|
1124
|
+
tokenCreation
|
|
287
1125
|
};
|
|
288
1126
|
}
|
|
289
|
-
|
|
1127
|
+
if (tokenAirdrop) {
|
|
1128
|
+
return {
|
|
1129
|
+
type: "TOKENAIRDROP",
|
|
1130
|
+
humanReadableType: "Token Airdrop",
|
|
1131
|
+
tokenAirdrop
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
1134
|
+
return {};
|
|
290
1135
|
} catch (error) {
|
|
291
|
-
|
|
292
|
-
"[ScheduleParser] Failed to parse scheduled transaction body:",
|
|
293
|
-
error
|
|
294
|
-
);
|
|
295
|
-
return null;
|
|
1136
|
+
return {};
|
|
296
1137
|
}
|
|
297
1138
|
}
|
|
298
|
-
/**
|
|
299
|
-
* Parse Schedule Service transaction from Transaction object
|
|
300
|
-
* This is the unified entry point that delegates to the comprehensive parsing logic
|
|
301
|
-
*/
|
|
302
|
-
static parseFromTransactionObject(transaction) {
|
|
303
|
-
return this.parseScheduleTransaction(transaction);
|
|
304
|
-
}
|
|
305
1139
|
}
|
|
306
1140
|
export {
|
|
307
|
-
|
|
1141
|
+
HTSParser
|
|
308
1142
|
};
|
|
309
1143
|
//# sourceMappingURL=standards-sdk.es121.js.map
|