deserializeTx.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. "use strict";
  2. // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  3. // @ts-nocheck
  4. Object.defineProperty(exports, "__esModule", { value: true });
  5. exports.deserializeTransaction = void 0;
  6. require("../protocol/core/Tron_pb.cjs");
  7. const { Transaction } = globalThis.TronWebProto;
  8. require("../protocol/core/contract/balance_contract_pb.cjs");
  9. const { TransferContract, WithdrawBalanceContract, WitnessCreateContract, FreezeBalanceV2Contract, UnfreezeBalanceV2Contract, CancelAllUnfreezeV2Contract, WithdrawExpireUnfreezeContract, DelegateResourceContract, UnDelegateResourceContract, } = globalThis.TronWebProto;
  10. require("../protocol/core/contract/asset_issue_contract_pb.cjs");
  11. const { TransferAssetContract, ParticipateAssetIssueContract, AssetIssueContract, UpdateAssetContract } = globalThis.TronWebProto;
  12. require("../protocol/core/contract/smart_contract_pb.cjs");
  13. const { TriggerSmartContract } = globalThis.TronWebProto;
  14. const bytes_js_1 = require("./bytes.js");
  15. const code_js_1 = require("./code.js");
  16. const validations_js_1 = require("./validations.js");
  17. const ContractTypeMap = {
  18. '0': 'AccountCreateContract',
  19. '1': 'TransferContract',
  20. '2': 'TransferAssetContract',
  21. '4': 'VoteWitnessContract',
  22. '5': 'WitnessCreateContract',
  23. '6': 'AssetIssueContract',
  24. '9': 'ParticipateAssetIssueContract',
  25. '10': 'AccountUpdateContract',
  26. '11': 'FreezeBalanceContract',
  27. '12': 'UnfreezeBalanceContract',
  28. '13': 'WithdrawBalanceContract',
  29. '15': 'UpdateAssetContract',
  30. '16': 'ProposalCreateContract',
  31. '17': 'ProposalApproveContract',
  32. '18': 'ProposalDeleteContract',
  33. '19': 'SetAccountIdContract',
  34. '30': 'CreateSmartContract',
  35. '31': 'TriggerSmartContract',
  36. '33': 'UpdateSettingContract',
  37. '41': 'ExchangeCreateContract',
  38. '42': 'ExchangeInjectContract',
  39. '43': 'ExchangeWithdrawContract',
  40. '44': 'ExchangeTransactionContract',
  41. '45': 'UpdateEnergyLimitContract',
  42. '46': 'AccountPermissionUpdateContract',
  43. '48': 'ClearABIContract',
  44. '49': 'UpdateBrokerageContract',
  45. '54': 'FreezeBalanceV2Contract',
  46. '55': 'UnfreezeBalanceV2Contract',
  47. '56': 'WithdrawExpireUnfreezeContract',
  48. '57': 'DelegateResourceContract',
  49. '58': 'UnDelegateResourceContract',
  50. '59': 'CancelAllUnfreezeV2Contract',
  51. };
  52. const getAuthsList = (pb) => {
  53. const authsList = pb.getAuthsList();
  54. return authsList.map((authPb) => {
  55. const permission_name = (0, bytes_js_1.byteArray2hexStr)(authPb.getPermissionName_asU8());
  56. const accountPb = authPb.getAccount();
  57. const account = {
  58. name: (0, bytes_js_1.byteArray2hexStr)(accountPb.getName_asU8()),
  59. address: (0, bytes_js_1.byteArray2hexStr)(accountPb.getAddress_asU8()),
  60. };
  61. return {
  62. permission_name,
  63. account,
  64. };
  65. });
  66. };
  67. const DCommonData = (type, rawDataHex) => {
  68. const pb = Transaction.raw.deserializeBinary((0, code_js_1.hexStr2byteArray)(rawDataHex));
  69. const contract = pb.getContractList()[0];
  70. const valuePb = contract.getParameter().getValue();
  71. const contractType = ContractTypeMap[contract.getType()];
  72. if (type !== contractType) {
  73. throw new Error(`type ${type} dismatches with rawDataHex type ${contractType}`);
  74. }
  75. return [
  76. {
  77. contract: [
  78. {
  79. parameter: {
  80. value: {},
  81. type_url: contract.getParameter().getTypeUrl(),
  82. },
  83. type,
  84. Permission_id: contract.getPermissionId(),
  85. },
  86. ],
  87. data: (0, bytes_js_1.byteArray2hexStr)(pb.getData()),
  88. fee_limit: pb.getFeeLimit(),
  89. ref_block_bytes: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockBytes_asU8()),
  90. ref_block_hash: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockHash_asU8()),
  91. expiration: pb.getExpiration(),
  92. timestamp: pb.getTimestamp(),
  93. scripts: (0, bytes_js_1.byteArray2hexStr)(pb.getScripts_asU8()),
  94. auths: getAuthsList(pb),
  95. },
  96. valuePb,
  97. ];
  98. };
  99. const DTriggerSmartContract = (type, rawDataHex) => {
  100. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  101. const triggerSmartContract = TriggerSmartContract.deserializeBinary(valuePb);
  102. commonData.contract[0].parameter.value = {
  103. owner_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getOwnerAddress_asU8()),
  104. contract_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getContractAddress_asU8()),
  105. call_value: triggerSmartContract.getCallValue(),
  106. data: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getData_asU8()),
  107. call_token_value: triggerSmartContract.getCallTokenValue(),
  108. token_id: triggerSmartContract.getTokenId(),
  109. };
  110. return commonData;
  111. };
  112. const getResourceName = (type) => {
  113. switch (type) {
  114. case 0:
  115. return 'BANDWIDTH';
  116. case 1:
  117. return 'ENERGY';
  118. default:
  119. return 'BANDWIDTH';
  120. }
  121. };
  122. const DFreezeBalanceV2Contract = (type, rawDataHex) => {
  123. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  124. const freezeBalanceV2Contract = FreezeBalanceV2Contract.deserializeBinary(valuePb);
  125. commonData.contract[0].parameter.value = {
  126. owner_address: (0, bytes_js_1.byteArray2hexStr)(freezeBalanceV2Contract.getOwnerAddress_asU8()),
  127. frozen_balance: freezeBalanceV2Contract.getFrozenBalance(),
  128. resource: getResourceName(freezeBalanceV2Contract.getResource()),
  129. };
  130. return commonData;
  131. };
  132. const DUnfreezeBalanceV2Contract = (type, rawDataHex) => {
  133. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  134. const unfreezeBalanceV2Contract = UnfreezeBalanceV2Contract.deserializeBinary(valuePb);
  135. commonData.contract[0].parameter.value = {
  136. owner_address: (0, bytes_js_1.byteArray2hexStr)(unfreezeBalanceV2Contract.getOwnerAddress_asU8()),
  137. unfreeze_balance: unfreezeBalanceV2Contract.getUnfreezeBalance(),
  138. resource: getResourceName(unfreezeBalanceV2Contract.getResource()),
  139. };
  140. return commonData;
  141. };
  142. const DCancelAllUnfreezeV2Contract = (type, rawDataHex) => {
  143. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  144. const cancelAllUnfreezeV2Contract = CancelAllUnfreezeV2Contract.deserializeBinary(valuePb);
  145. commonData.contract[0].parameter.value = {
  146. owner_address: (0, bytes_js_1.byteArray2hexStr)(cancelAllUnfreezeV2Contract.getOwnerAddress_asU8()),
  147. };
  148. return commonData;
  149. };
  150. const DDelegateResourceContract = (type, rawDataHex) => {
  151. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  152. const delegateResourceContract = DelegateResourceContract.deserializeBinary(valuePb);
  153. commonData.contract[0].parameter.value = {
  154. owner_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getOwnerAddress_asU8()),
  155. balance: delegateResourceContract.getBalance(),
  156. lock: delegateResourceContract.getLock(),
  157. lock_period: delegateResourceContract.getLockPeriod(),
  158. receiver_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getReceiverAddress_asU8()),
  159. resource: getResourceName(delegateResourceContract.getResource()),
  160. };
  161. return commonData;
  162. };
  163. const DUnDelegateResourceContract = (type, rawDataHex) => {
  164. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  165. const undelegateResourceContract = UnDelegateResourceContract.deserializeBinary(valuePb);
  166. commonData.contract[0].parameter.value = {
  167. owner_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getOwnerAddress_asU8()),
  168. balance: undelegateResourceContract.getBalance(),
  169. receiver_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getReceiverAddress_asU8()),
  170. resource: getResourceName(undelegateResourceContract.getResource()),
  171. };
  172. return commonData;
  173. };
  174. const DWithdrawExpireUnfreezeContract = (type, rawDataHex) => {
  175. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  176. const withdrawExpireUnfreezeContract = WithdrawExpireUnfreezeContract.deserializeBinary(valuePb);
  177. commonData.contract[0].parameter.value = {
  178. owner_address: (0, bytes_js_1.byteArray2hexStr)(withdrawExpireUnfreezeContract.getOwnerAddress_asU8()),
  179. };
  180. return commonData;
  181. };
  182. const DTransferContract = (type, rawDataHex) => {
  183. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  184. const transferContract = TransferContract.deserializeBinary(valuePb);
  185. commonData.contract[0].parameter.value = {
  186. owner_address: (0, bytes_js_1.byteArray2hexStr)(transferContract.getOwnerAddress_asU8()),
  187. to_address: (0, bytes_js_1.byteArray2hexStr)(transferContract.getToAddress_asU8()),
  188. amount: transferContract.getAmount(),
  189. };
  190. return commonData;
  191. };
  192. const DWithdrawBalanceContract = (type, rawDataHex) => {
  193. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  194. const withdrawBalanceContract = WithdrawBalanceContract.deserializeBinary(valuePb);
  195. commonData.contract[0].parameter.value = {
  196. owner_address: (0, bytes_js_1.byteArray2hexStr)(withdrawBalanceContract.getOwnerAddress_asU8()),
  197. };
  198. return commonData;
  199. };
  200. const DWitnessCreateContract = (type, rawDataHex) => {
  201. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  202. const witnessCreateContract = WitnessCreateContract.deserializeBinary(valuePb);
  203. commonData.contract[0].parameter.value = {
  204. owner_address: (0, bytes_js_1.byteArray2hexStr)(witnessCreateContract.getOwnerAddress_asU8()),
  205. url: (0, bytes_js_1.byteArray2hexStr)(witnessCreateContract.getUrl_asU8()),
  206. };
  207. return commonData;
  208. };
  209. const DTransferAssetContract = (type, rawDataHex) => {
  210. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  211. const transferAssetContract = TransferAssetContract.deserializeBinary(valuePb);
  212. commonData.contract[0].parameter.value = {
  213. owner_address: (0, bytes_js_1.byteArray2hexStr)(transferAssetContract.getOwnerAddress_asU8()),
  214. to_address: (0, bytes_js_1.byteArray2hexStr)(transferAssetContract.getToAddress_asU8()),
  215. asset_name: (0, bytes_js_1.byteArray2hexStr)(transferAssetContract.getAssetName_asU8()),
  216. amount: transferAssetContract.getAmount(),
  217. };
  218. return commonData;
  219. };
  220. const DParticipateAssetIssueContract = (type, rawDataHex) => {
  221. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  222. const participateAssetIssueContract = ParticipateAssetIssueContract.deserializeBinary(valuePb);
  223. commonData.contract[0].parameter.value = {
  224. owner_address: (0, bytes_js_1.byteArray2hexStr)(participateAssetIssueContract.getOwnerAddress_asU8()),
  225. to_address: (0, bytes_js_1.byteArray2hexStr)(participateAssetIssueContract.getToAddress_asU8()),
  226. asset_name: (0, bytes_js_1.byteArray2hexStr)(participateAssetIssueContract.getAssetName_asU8()),
  227. amount: participateAssetIssueContract.getAmount(),
  228. };
  229. return commonData;
  230. };
  231. const DAssetIssueContract = (type, rawDataHex) => {
  232. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  233. const assetIssueContract = AssetIssueContract.deserializeBinary(valuePb);
  234. commonData.contract[0].parameter.value = {
  235. owner_address: (0, bytes_js_1.byteArray2hexStr)(assetIssueContract.getOwnerAddress_asU8()),
  236. name: (0, bytes_js_1.byteArray2hexStr)(assetIssueContract.getName_asU8()),
  237. abbr: (0, bytes_js_1.byteArray2hexStr)(assetIssueContract.getAbbr_asU8()),
  238. description: (0, bytes_js_1.byteArray2hexStr)(assetIssueContract.getDescription_asU8()),
  239. url: (0, bytes_js_1.byteArray2hexStr)(assetIssueContract.getUrl_asU8()),
  240. total_supply: assetIssueContract.getTotalSupply(),
  241. trx_num: assetIssueContract.getTrxNum(),
  242. num: assetIssueContract.getNum(),
  243. start_time: assetIssueContract.getStartTime(),
  244. end_time: assetIssueContract.getEndTime(),
  245. frozen_supply: assetIssueContract.getFrozenSupplyList().map((frozenPb) => ({
  246. frozen_amount: frozenPb.getFrozenAmount(),
  247. frozen_days: frozenPb.getFrozenDays(),
  248. })),
  249. free_asset_net_limit: assetIssueContract.getFreeAssetNetLimit(),
  250. public_free_asset_net_limit: assetIssueContract.getPublicFreeAssetNetLimit(),
  251. precision: assetIssueContract.getPrecision(),
  252. vote_score: assetIssueContract.getVoteScore(),
  253. };
  254. return commonData;
  255. };
  256. const DUpdateAssetContract = (type, rawDataHex) => {
  257. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  258. const updateAssetContract = UpdateAssetContract.deserializeBinary(valuePb);
  259. commonData.contract[0].parameter.value = {
  260. owner_address: (0, bytes_js_1.byteArray2hexStr)(updateAssetContract.getOwnerAddress_asU8()),
  261. description: (0, bytes_js_1.byteArray2hexStr)(updateAssetContract.getDescription_asU8()),
  262. url: (0, bytes_js_1.byteArray2hexStr)(updateAssetContract.getUrl_asU8()),
  263. new_limit: updateAssetContract.getNewLimit(),
  264. new_public_limit: updateAssetContract.getNewPublicLimit(),
  265. };
  266. return commonData;
  267. };
  268. const deserializeTransaction = (type, rawDataHex) => {
  269. if (!rawDataHex) {
  270. throw new Error('rawDataHex cannot be empty');
  271. }
  272. if (!(0, validations_js_1.isHex)(rawDataHex)) {
  273. throw new Error('rawDataHex is not a valid hex string');
  274. }
  275. switch (type) {
  276. case 'TriggerSmartContract':
  277. return DTriggerSmartContract(type, rawDataHex);
  278. case 'FreezeBalanceV2Contract':
  279. return DFreezeBalanceV2Contract(type, rawDataHex);
  280. case 'UnfreezeBalanceV2Contract':
  281. return DUnfreezeBalanceV2Contract(type, rawDataHex);
  282. case 'CancelAllUnfreezeV2Contract':
  283. return DCancelAllUnfreezeV2Contract(type, rawDataHex);
  284. case 'DelegateResourceContract':
  285. return DDelegateResourceContract(type, rawDataHex);
  286. case 'UnDelegateResourceContract':
  287. return DUnDelegateResourceContract(type, rawDataHex);
  288. case 'WithdrawExpireUnfreezeContract':
  289. return DWithdrawExpireUnfreezeContract(type, rawDataHex);
  290. case 'TransferContract':
  291. return DTransferContract(type, rawDataHex);
  292. case 'WithdrawBalanceContract':
  293. return DWithdrawBalanceContract(type, rawDataHex);
  294. case 'WitnessCreateContract':
  295. return DWitnessCreateContract(type, rawDataHex);
  296. case 'TransferAssetContract':
  297. return DTransferAssetContract(type, rawDataHex);
  298. case 'ParticipateAssetIssueContract':
  299. return DParticipateAssetIssueContract(type, rawDataHex);
  300. case 'AssetIssueContract':
  301. return DAssetIssueContract(type, rawDataHex);
  302. case 'UpdateAssetContract':
  303. return DUpdateAssetContract(type, rawDataHex);
  304. default:
  305. throw new Error(`trasaction ${type} not supported`);
  306. }
  307. };
  308. exports.deserializeTransaction = deserializeTransaction;
  309. //# sourceMappingURL=deserializeTx.js.map