@hashgraphonline/standards-sdk 0.1.184 → 0.1.185
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-25/identifiers.d.ts +24 -0
- package/dist/browser/hcs-25/identifiers.d.ts.map +1 -0
- package/dist/browser/hcs-25/index.d.ts +4 -0
- package/dist/browser/hcs-25/index.d.ts.map +1 -0
- package/dist/browser/hcs-25/scoring.d.ts +32 -0
- package/dist/browser/hcs-25/scoring.d.ts.map +1 -0
- package/dist/browser/hcs-25/types.d.ts +363 -0
- package/dist/browser/hcs-25/types.d.ts.map +1 -0
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/identifiers.d.ts +24 -0
- package/dist/browser-root/hcs-25/identifiers.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/index.d.ts +4 -0
- package/dist/browser-root/hcs-25/index.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/scoring.d.ts +32 -0
- package/dist/browser-root/hcs-25/scoring.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/types.d.ts +363 -0
- package/dist/browser-root/hcs-25/types.d.ts.map +1 -0
- package/dist/browser-root/index.d.ts +1 -0
- package/dist/browser-root/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/identifiers.d.ts +24 -0
- package/dist/cjs/hcs-25/identifiers.d.ts.map +1 -0
- package/dist/cjs/hcs-25/index.d.ts +4 -0
- package/dist/cjs/hcs-25/index.d.ts.map +1 -0
- package/dist/cjs/hcs-25/scoring.d.ts +32 -0
- package/dist/cjs/hcs-25/scoring.d.ts.map +1 -0
- package/dist/cjs/hcs-25/types.d.ts +363 -0
- package/dist/cjs/hcs-25/types.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-25/identifiers.d.ts +24 -0
- package/dist/es/hcs-25/identifiers.d.ts.map +1 -0
- package/dist/es/hcs-25/index.d.ts +4 -0
- package/dist/es/hcs-25/index.d.ts.map +1 -0
- package/dist/es/hcs-25/scoring.d.ts +32 -0
- package/dist/es/hcs-25/scoring.d.ts.map +1 -0
- package/dist/es/hcs-25/types.d.ts +363 -0
- package/dist/es/hcs-25/types.d.ts.map +1 -0
- package/dist/es/index.d.ts +1 -0
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +62 -40
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es115.js +3 -3
- package/dist/es/standards-sdk.es116.js +4 -4
- package/dist/es/standards-sdk.es117.js +19 -251
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +60 -475
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +217 -86
- 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 +242 -150
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +470 -26
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +103 -10
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +145 -167
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +30 -25
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +10 -20
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +159 -137
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +27 -199
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +15 -783
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +157 -10
- 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 +198 -564
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +703 -539
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +12 -12
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +567 -2
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +610 -71
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +12 -39
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +2 -2
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +42 -190
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +39 -1139
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +2 -306
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +231 -418
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +1135 -350
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +268 -1084
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +418 -204
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +350 -1562
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +1061 -1096
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +204 -13
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +1541 -233
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +1157 -4
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +15 -79
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +250 -78
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +4 -60
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +80 -2546
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +80 -152
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +60 -7
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +2547 -86
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +144 -50
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +7 -30
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +86 -34
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +65 -48
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +5 -5
- package/dist/es/standards-sdk.es160.js +30 -138
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +34 -42
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +48 -12482
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +12479 -53
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +124 -97
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +35 -74
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +14 -197
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +54 -15
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +90 -651
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +70 -161
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +187 -309
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +661 -335
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +64 -444
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +142 -301
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +310 -64
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +337 -64
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +438 -124
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +310 -496
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +60 -243
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +118 -175
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +12 -12
- package/dist/es/standards-sdk.es180.js +465 -67
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +250 -143
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +172 -160
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +65 -630
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +128 -161
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +144 -195
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +668 -223
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +188 -0
- package/dist/es/standards-sdk.es187.js.map +1 -0
- package/dist/es/standards-sdk.es188.js +238 -0
- package/dist/es/standards-sdk.es188.js.map +1 -0
- package/dist/es/standards-sdk.es189.js +242 -0
- package/dist/es/standards-sdk.es189.js.map +1 -0
- package/dist/es/standards-sdk.es19.js +9 -9
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +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 +12 -12
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +6 -6
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.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.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.es67.js +7 -7
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +4 -4
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/package.json +1 -1
|
@@ -1,358 +1,1143 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
APPROVEALLOWANCE: "Approve Allowance",
|
|
199
|
-
cryptoDeleteAllowance: "Delete Allowance",
|
|
200
|
-
DELETEALLOWANCE: "Delete Allowance",
|
|
201
|
-
CRYPTOADDLIVEHASH: "Add Live Hash",
|
|
202
|
-
CRYPTODELETELIVEHASH: "Delete Live Hash",
|
|
203
|
-
consensusCreateTopic: "Create Topic",
|
|
204
|
-
TOPICCREATE: "Create Topic",
|
|
205
|
-
consensusUpdateTopic: "Update Topic",
|
|
206
|
-
TOPICUPDATE: "Update Topic",
|
|
207
|
-
consensusSubmitMessage: "Submit Message",
|
|
208
|
-
CONSENSUSSUBMITMESSAGE: "Submit Message",
|
|
209
|
-
consensusDeleteTopic: "Delete Topic",
|
|
210
|
-
TOPICDELETE: "Delete Topic",
|
|
211
|
-
UNCHECKEDSUBMIT: "Unchecked Submit",
|
|
212
|
-
fileCreate: "Create File",
|
|
213
|
-
FILECREATE: "Create File",
|
|
214
|
-
fileAppend: "Append File",
|
|
215
|
-
FILEAPPEND: "Append File",
|
|
216
|
-
fileUpdate: "Update File",
|
|
217
|
-
FILEUPDATE: "Update File",
|
|
218
|
-
fileDelete: "Delete File",
|
|
219
|
-
FILEDELETE: "Delete File",
|
|
220
|
-
contractCall: "Contract Call",
|
|
221
|
-
CONTRACTCALL: "Contract Call",
|
|
222
|
-
contractCreate: "Create Contract",
|
|
223
|
-
CONTRACTCREATE: "Create Contract",
|
|
224
|
-
contractUpdate: "Update Contract",
|
|
225
|
-
CONTRACTUPDATE: "Update Contract",
|
|
226
|
-
contractDelete: "Delete Contract",
|
|
227
|
-
CONTRACTDELETE: "Delete Contract",
|
|
228
|
-
ethereumTransaction: "Ethereum Transaction",
|
|
229
|
-
ETHEREUMTRANSACTION: "Ethereum Transaction",
|
|
230
|
-
tokenCreate: "Create Token",
|
|
231
|
-
TOKENCREATE: "Create Token",
|
|
232
|
-
tokenUpdate: "Update Token",
|
|
233
|
-
TOKENUPDATE: "Update Token",
|
|
234
|
-
tokenDelete: "Delete Token",
|
|
235
|
-
TOKENDELETE: "Delete Token",
|
|
236
|
-
tokenAssociate: "Associate Token",
|
|
237
|
-
TOKENASSOCIATE: "Associate Token",
|
|
238
|
-
tokenDissociate: "Dissociate Token",
|
|
239
|
-
TOKENDISSOCIATE: "Dissociate Token",
|
|
240
|
-
tokenMint: "Mint Token",
|
|
241
|
-
TOKENMINT: "Mint Token",
|
|
242
|
-
tokenBurn: "Burn Token",
|
|
243
|
-
TOKENBURN: "Burn Token",
|
|
244
|
-
tokenFeeScheduleUpdate: "Update Token Fee Schedule",
|
|
245
|
-
TOKENFEESCHEDULEUPDATE: "Update Token Fee Schedule",
|
|
246
|
-
tokenFreeze: "Freeze Token",
|
|
247
|
-
TOKENFREEZE: "Freeze Token",
|
|
248
|
-
tokenUnfreeze: "Unfreeze Token",
|
|
249
|
-
TOKENUNFREEZE: "Unfreeze Token",
|
|
250
|
-
tokenGrantKyc: "Grant KYC",
|
|
251
|
-
TOKENGRANTKYC: "Grant KYC",
|
|
252
|
-
tokenRevokeKyc: "Revoke KYC",
|
|
253
|
-
TOKENREVOKEKYC: "Revoke KYC",
|
|
254
|
-
tokenPause: "Pause Token",
|
|
255
|
-
TOKENPAUSE: "Pause Token",
|
|
256
|
-
tokenUnpause: "Unpause Token",
|
|
257
|
-
TOKENUNPAUSE: "Unpause Token",
|
|
258
|
-
tokenWipe: "Wipe Token",
|
|
259
|
-
TOKENWIPE: "Wipe Token",
|
|
260
|
-
tokenAirdrop: "Token Airdrop",
|
|
261
|
-
TOKENAIRDROP: "Token Airdrop",
|
|
262
|
-
TOKENCANCELAIRDROP: "Cancel Token Airdrop",
|
|
263
|
-
TOKENCLAIMAIRDROP: "Claim Token Airdrop",
|
|
264
|
-
TOKENREJECT: "Token Reject",
|
|
265
|
-
TOKENUPDATENFTS: "Update NFT Metadata",
|
|
266
|
-
scheduleCreate: "Create Schedule",
|
|
267
|
-
SCHEDULECREATE: "Create Schedule",
|
|
268
|
-
scheduleSign: "Sign Schedule",
|
|
269
|
-
SCHEDULESIGN: "Sign Schedule",
|
|
270
|
-
SCHEDULEDELETE: "Delete Schedule",
|
|
271
|
-
FREEZE: "Network Freeze",
|
|
272
|
-
SYSTEMDELETE: "System Delete",
|
|
273
|
-
SYSTEMUNDELETE: "System Undelete",
|
|
274
|
-
NODECREATE: "Create Node",
|
|
275
|
-
NODEUPDATE: "Update Node",
|
|
276
|
-
NODEDELETE: "Delete Node",
|
|
277
|
-
NODESTAKEUPDATE: "Update Node Stake",
|
|
278
|
-
utilPrng: "Generate Random Number",
|
|
279
|
-
PRNG: "Generate Random Number",
|
|
280
|
-
ATOMICBATCH: "Atomic Batch",
|
|
281
|
-
STATESIGNATURETRANSACTION: "State Signature",
|
|
282
|
-
HISTORYPROOFSIGNATURE: "History Proof Signature",
|
|
283
|
-
HISTORYPROOFKEYPUBLICATION: "History Proof Key Publication",
|
|
284
|
-
HISTORYPROOFVOTE: "History Proof Vote",
|
|
285
|
-
HINTSPREPROCESSINGVOTE: "Hints Preprocessing Vote",
|
|
286
|
-
HINTSKEYPUBLICATION: "Hints Key Publication",
|
|
287
|
-
HINTSPARTIALSIGNATURE: "Hints Partial Signature",
|
|
288
|
-
CRSPUBLICATION: "CRS Publication",
|
|
289
|
-
unknown: "Unknown Transaction",
|
|
290
|
-
UNKNOWN: "Unknown Transaction"
|
|
291
|
-
};
|
|
292
|
-
const schedulableTransactionTypeRegistry = {
|
|
293
|
-
tokenCreation: "tokenCreate",
|
|
294
|
-
tokenAirdrop: "tokenAirdrop",
|
|
295
|
-
cryptoTransfer: "cryptoTransfer",
|
|
296
|
-
consensusSubmitMessage: "consensusSubmitMessage",
|
|
297
|
-
contractCall: "contractCall",
|
|
298
|
-
cryptoCreateAccount: "cryptoCreateAccount",
|
|
299
|
-
cryptoUpdateAccount: "cryptoUpdateAccount",
|
|
300
|
-
cryptoApproveAllowance: "cryptoApproveAllowance",
|
|
301
|
-
cryptoDeleteAllowance: "cryptoDeleteAllowance",
|
|
302
|
-
cryptoDelete: "cryptoDelete",
|
|
303
|
-
consensusCreateTopic: "consensusCreateTopic",
|
|
304
|
-
consensusUpdateTopic: "consensusUpdateTopic",
|
|
305
|
-
consensusDeleteTopic: "consensusDeleteTopic",
|
|
306
|
-
fileCreate: "fileCreate",
|
|
307
|
-
fileAppend: "fileAppend",
|
|
308
|
-
fileUpdate: "fileUpdate",
|
|
309
|
-
fileDelete: "fileDelete",
|
|
310
|
-
contractCreateInstance: "contractCreate",
|
|
311
|
-
contractUpdateInstance: "contractUpdate",
|
|
312
|
-
contractDeleteInstance: "contractDelete",
|
|
313
|
-
tokenUpdate: "tokenUpdate",
|
|
314
|
-
tokenDeletion: "tokenDelete",
|
|
315
|
-
tokenAssociate: "tokenAssociate",
|
|
316
|
-
tokenDissociate: "tokenDissociate",
|
|
317
|
-
tokenMint: "tokenMint",
|
|
318
|
-
tokenBurn: "tokenBurn",
|
|
319
|
-
tokenFeeScheduleUpdate: "tokenFeeScheduleUpdate",
|
|
320
|
-
tokenFreeze: "tokenFreeze",
|
|
321
|
-
tokenUnfreeze: "tokenUnfreeze",
|
|
322
|
-
tokenGrantKyc: "tokenGrantKyc",
|
|
323
|
-
tokenRevokeKyc: "tokenRevokeKyc",
|
|
324
|
-
tokenPause: "tokenPause",
|
|
325
|
-
tokenUnpause: "tokenUnpause",
|
|
326
|
-
tokenWipe: "tokenWipe",
|
|
327
|
-
utilPrng: "utilPrng"
|
|
328
|
-
};
|
|
329
|
-
function getTransactionTypeFromBody(txBody) {
|
|
330
|
-
for (const [field, typeInfo] of Object.entries(protoFieldToTypeRegistry)) {
|
|
331
|
-
if (txBody[field]) {
|
|
332
|
-
return typeInfo;
|
|
1
|
+
import { proto } from "@hashgraph/proto";
|
|
2
|
+
import { AccountId, Long, TokenId } from "@hashgraph/sdk";
|
|
3
|
+
import { parseKey, hasTransactionType, extractTransactionBody } from "./standards-sdk.es178.js";
|
|
4
|
+
import { Buffer } from "buffer";
|
|
5
|
+
class HTSParser {
|
|
6
|
+
/**
|
|
7
|
+
* Main entry point for parsing HTS transactions from a Transaction object
|
|
8
|
+
* This method bridges between the Transaction object and the protobuf parsers
|
|
9
|
+
*/
|
|
10
|
+
static parseHTSTransaction(transaction) {
|
|
11
|
+
try {
|
|
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
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
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
|
+
}
|
|
37
|
+
}
|
|
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
|
+
}
|
|
47
|
+
}
|
|
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
|
+
}
|
|
57
|
+
}
|
|
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
|
+
}
|
|
67
|
+
}
|
|
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
|
+
}
|
|
79
|
+
}
|
|
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) {
|
|
188
|
+
return {
|
|
189
|
+
type: "TOKENAIRDROP",
|
|
190
|
+
humanReadableType: "Token Airdrop",
|
|
191
|
+
tokenAirdrop: airdrop
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {};
|
|
195
|
+
} catch (error) {
|
|
196
|
+
console.warn("[HTSParser] Failed to parse HTS transaction:", error);
|
|
197
|
+
return {};
|
|
333
198
|
}
|
|
334
199
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
if (
|
|
342
|
-
|
|
200
|
+
static parseTokenCreate(body) {
|
|
201
|
+
if (!body) return void 0;
|
|
202
|
+
const 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();
|
|
224
|
+
}
|
|
225
|
+
if (body.memo) {
|
|
226
|
+
data.memo = body.memo;
|
|
227
|
+
}
|
|
228
|
+
if (body.tokenType !== null && body.tokenType !== void 0) {
|
|
229
|
+
data.tokenType = proto.TokenType[body.tokenType];
|
|
230
|
+
}
|
|
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
|
|
246
|
+
).toString();
|
|
247
|
+
}
|
|
248
|
+
if (body.autoRenewPeriod?.seconds) {
|
|
249
|
+
data.autoRenewPeriod = Long.fromValue(
|
|
250
|
+
body.autoRenewPeriod.seconds
|
|
251
|
+
).toString();
|
|
252
|
+
}
|
|
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
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return data;
|
|
333
|
+
}
|
|
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) {
|
|
373
|
+
if (!body) return void 0;
|
|
374
|
+
const data = {};
|
|
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
|
|
407
|
+
).toString();
|
|
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
|
+
}
|
|
420
|
+
return data;
|
|
421
|
+
}
|
|
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) {
|
|
602
|
+
if (!body) return void 0;
|
|
603
|
+
const data = {};
|
|
604
|
+
if (body.token) {
|
|
605
|
+
data.tokenId = new TokenId(
|
|
606
|
+
body.token.shardNum ?? 0,
|
|
607
|
+
body.token.realmNum ?? 0,
|
|
608
|
+
body.token.tokenNum ?? 0
|
|
609
|
+
).toString();
|
|
610
|
+
}
|
|
611
|
+
return data;
|
|
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
|
+
}
|
|
694
|
+
/**
|
|
695
|
+
* Parse token airdrop transaction for both fungible tokens and NFTs
|
|
696
|
+
* Extracts airdrop transfers from transaction protobuf data
|
|
697
|
+
*/
|
|
698
|
+
static parseTokenAirdrop(transaction) {
|
|
699
|
+
try {
|
|
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;
|
|
737
|
+
} catch (error) {
|
|
738
|
+
console.warn("[HTSParser] Failed to parse token airdrop:", error);
|
|
739
|
+
return null;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
/**
|
|
743
|
+
* Parse token airdrop from protobuf data for scheduled transactions
|
|
744
|
+
*/
|
|
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
|
+
}
|
|
776
|
+
}
|
|
777
|
+
return { tokenTransfers };
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Extract token creation data from Transaction object internal fields
|
|
781
|
+
* This handles the case where token creation data is stored in Transaction internals
|
|
782
|
+
*/
|
|
783
|
+
static extractTokenCreationFromTransaction(transaction) {
|
|
784
|
+
try {
|
|
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;
|
|
878
|
+
} catch (error) {
|
|
879
|
+
return null;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* Extract token airdrop data from Transaction object internal fields
|
|
884
|
+
* This handles the case where airdrop data is stored in Transaction internals
|
|
885
|
+
*/
|
|
886
|
+
static extractTokenAirdropFromTransaction(transaction) {
|
|
887
|
+
try {
|
|
888
|
+
const tx = transaction;
|
|
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 };
|
|
899
|
+
}
|
|
900
|
+
return null;
|
|
901
|
+
} catch (error) {
|
|
902
|
+
return null;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
/**
|
|
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
|
|
908
|
+
*/
|
|
909
|
+
static parseFromTransactionObject(transaction) {
|
|
910
|
+
try {
|
|
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) {
|
|
1113
|
+
}
|
|
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) {
|
|
1121
|
+
return {
|
|
1122
|
+
type: "TOKENCREATE",
|
|
1123
|
+
humanReadableType: "Token Creation",
|
|
1124
|
+
tokenCreation
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
if (tokenAirdrop) {
|
|
1128
|
+
return {
|
|
1129
|
+
type: "TOKENAIRDROP",
|
|
1130
|
+
humanReadableType: "Token Airdrop",
|
|
1131
|
+
tokenAirdrop
|
|
1132
|
+
};
|
|
1133
|
+
}
|
|
1134
|
+
return {};
|
|
1135
|
+
} catch (error) {
|
|
1136
|
+
return {};
|
|
343
1137
|
}
|
|
344
1138
|
}
|
|
345
|
-
return "unknown";
|
|
346
|
-
}
|
|
347
|
-
function getHumanReadableTransactionType(type) {
|
|
348
|
-
return humanReadableTypeRegistry[type] || "Unknown Transaction";
|
|
349
1139
|
}
|
|
350
1140
|
export {
|
|
351
|
-
|
|
352
|
-
getSchedulableTransactionType,
|
|
353
|
-
getTransactionTypeFromBody,
|
|
354
|
-
humanReadableTypeRegistry,
|
|
355
|
-
protoFieldToTypeRegistry,
|
|
356
|
-
schedulableTransactionTypeRegistry
|
|
1141
|
+
HTSParser
|
|
357
1142
|
};
|
|
358
1143
|
//# sourceMappingURL=standards-sdk.es141.js.map
|