transaction.js 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.DeserializeTransaction = exports.txCheck = exports.txCheckWithArgs = exports.txJsonToPbWithArgs = exports.txPbToRawDataHex = exports.txPbToTxID = exports.txJsonToPb = void 0;
  4. const tslib_1 = require("tslib");
  5. // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  6. // @ts-nocheck
  7. const any_pb_js_1 = tslib_1.__importDefault(require("google-protobuf/google/protobuf/any_pb.js"));
  8. require("../protocol/core/Tron_pb.cjs");
  9. const { Transaction, Permission, Key } = globalThis.TronWebProto;
  10. require("../protocol/core/contract/balance_contract_pb.cjs");
  11. const { TransferContract, FreezeBalanceContract, UnfreezeBalanceContract, WithdrawBalanceContract, FreezeBalanceV2Contract, UnfreezeBalanceV2Contract, CancelAllUnfreezeV2Contract, WithdrawExpireUnfreezeContract, DelegateResourceContract, UnDelegateResourceContract, } = globalThis.TronWebProto;
  12. require("../protocol/core/contract/asset_issue_contract_pb.cjs");
  13. const { TransferAssetContract, ParticipateAssetIssueContract, AssetIssueContract, UpdateAssetContract } = globalThis.TronWebProto;
  14. require("../protocol/core/contract/smart_contract_pb.cjs");
  15. const { TriggerSmartContract, ClearABIContract, UpdateEnergyLimitContract, UpdateSettingContract, CreateSmartContract, SmartContract, } = globalThis.TronWebProto;
  16. require("../protocol/core/contract/common_pb.cjs");
  17. const { ResourceCode } = globalThis.TronWebProto;
  18. require("../protocol/core/contract/witness_contract_pb.cjs");
  19. const { WitnessCreateContract, VoteWitnessContract } = globalThis.TronWebProto;
  20. require("../protocol/core/contract/storage_contract_pb.cjs");
  21. const { UpdateBrokerageContract } = globalThis.TronWebProto;
  22. require("../protocol/core/contract/account_contract_pb.cjs");
  23. const { AccountCreateContract, AccountUpdateContract, SetAccountIdContract, AccountPermissionUpdateContract } = globalThis.TronWebProto;
  24. require("../protocol/core/contract/proposal_contract_pb.cjs");
  25. const { ProposalCreateContract, ProposalDeleteContract, ProposalApproveContract } = globalThis.TronWebProto;
  26. require("../protocol/core/contract/exchange_contract_pb.cjs");
  27. const { ExchangeCreateContract, ExchangeInjectContract, ExchangeWithdrawContract, ExchangeTransactionContract } = globalThis.TronWebProto;
  28. const bytes_js_1 = require("./bytes.js");
  29. const code_js_1 = require("./code.js");
  30. const ethersUtils_js_1 = require("./ethersUtils.js");
  31. const tronweb_js_1 = tslib_1.__importDefault(require("../tronweb.js"));
  32. const validations_js_1 = require("./validations.js");
  33. const fromHexString = (hexString) => {
  34. if (!hexString || hexString.length === 0)
  35. return new Uint8Array([]);
  36. return new Uint8Array(tronweb_js_1.default.address
  37. .toHex(hexString)
  38. .match(/.{1,2}/g)
  39. .map((byte) => parseInt(byte, 16)));
  40. };
  41. const stringToUint8Array = (hexString) => {
  42. if (!hexString || hexString.length === 0)
  43. return new Uint8Array([]);
  44. return new Uint8Array(((0, validations_js_1.isHex)(hexString) ? hexString : tronweb_js_1.default.toHex(hexString))
  45. .replace(/^0x/, '')
  46. .match(/.{1,2}/g)
  47. .map((byte) => parseInt(byte, 16)));
  48. };
  49. const flexToUint8Array = (str, visible) => {
  50. if (!visible)
  51. return stringToUint8Array(str.replace(/^0x/, ''));
  52. return stringToUint8Array(tronweb_js_1.default.fromUtf8(str).replace(/^0x/, ''));
  53. };
  54. const sha3 = (string, prefix = true) => {
  55. return (prefix ? '0x' : '') + (0, ethersUtils_js_1.keccak256)(Buffer.from(string, 'utf-8')).toString().substring(2);
  56. };
  57. const buildCommonTransaction = (message, contractType, typeName, permissionId) => {
  58. const anyValue = new any_pb_js_1.default.Any();
  59. anyValue.pack(message.serializeBinary(), 'protocol.' + typeName);
  60. const contract = new Transaction.Contract();
  61. contract.setType(contractType);
  62. contract.setParameter(anyValue);
  63. if (permissionId) {
  64. contract.setPermissionId(permissionId);
  65. }
  66. const raw = new Transaction.raw();
  67. raw.addContract(contract);
  68. const transaction = new Transaction();
  69. transaction.setRawData(raw);
  70. return transaction;
  71. };
  72. // wallet/createtransaction for sendTrx
  73. const buildTransferContract = (value, options) => {
  74. const { to_address, owner_address, amount } = value;
  75. const transferContract = new TransferContract();
  76. transferContract.setToAddress(fromHexString(to_address));
  77. transferContract.setOwnerAddress(fromHexString(owner_address));
  78. transferContract.setAmount(amount);
  79. return buildCommonTransaction(transferContract, Transaction.Contract.ContractType.TRANSFERCONTRACT, 'TransferContract', options.Permission_id);
  80. };
  81. // wallet/transferasset for sendToken
  82. const buildTransferAssetContract = (value, options) => {
  83. const { to_address, owner_address, amount, asset_name } = value;
  84. const transferContract = new TransferAssetContract();
  85. transferContract.setToAddress(fromHexString(to_address));
  86. transferContract.setOwnerAddress(fromHexString(owner_address));
  87. transferContract.setAssetName(flexToUint8Array(asset_name, options.visible));
  88. transferContract.setAmount(amount);
  89. return buildCommonTransaction(transferContract, Transaction.Contract.ContractType.TRANSFERASSETCONTRACT, 'TransferAssetContract', options.Permission_id);
  90. };
  91. // wallet/participateassetissue for purchaseToken
  92. const buildParticipateAssetIssueContract = (value, options) => {
  93. const pbObj = new ParticipateAssetIssueContract();
  94. pbObj.setToAddress(fromHexString(value.to_address));
  95. pbObj.setOwnerAddress(fromHexString(value.owner_address));
  96. pbObj.setAssetName(flexToUint8Array(value.asset_name, options.visible));
  97. pbObj.setAmount(value.amount);
  98. return buildCommonTransaction(pbObj, Transaction.Contract.ContractType.PARTICIPATEASSETISSUECONTRACT, 'ParticipateAssetIssueContract', options.Permission_id);
  99. };
  100. const buildTriggerSmartContract = (value, options) => {
  101. const triggerSmartContract = new TriggerSmartContract();
  102. const { owner_address, contract_address, parameter = '', function_selector, call_value, call_token_value, token_id, data, } = value;
  103. triggerSmartContract.setOwnerAddress(fromHexString(owner_address));
  104. triggerSmartContract.setContractAddress(fromHexString(contract_address));
  105. triggerSmartContract.setCallValue(call_value);
  106. if (data) {
  107. triggerSmartContract.setData(stringToUint8Array(data));
  108. }
  109. else if (function_selector) {
  110. const contractData = sha3(function_selector).substring(2, 10) + parameter;
  111. triggerSmartContract.setData(stringToUint8Array(contractData));
  112. }
  113. if (token_id) {
  114. triggerSmartContract.setTokenId(token_id);
  115. }
  116. if (call_token_value) {
  117. triggerSmartContract.setCallTokenValue(call_token_value);
  118. }
  119. return buildCommonTransaction(triggerSmartContract, Transaction.Contract.ContractType.TRIGGERSMARTCONTRACT, 'TriggerSmartContract', options.Permission_id);
  120. };
  121. const buildFreezeBalanceContract = (value, options) => {
  122. const freezeBalanceContract = new FreezeBalanceContract();
  123. const { owner_address, frozen_balance, frozen_duration, resource, receiver_address } = value;
  124. freezeBalanceContract.setOwnerAddress(fromHexString(owner_address));
  125. freezeBalanceContract.setFrozenBalance(frozen_balance);
  126. freezeBalanceContract.setFrozenDuration(frozen_duration);
  127. if (resource) {
  128. freezeBalanceContract.setResource(ResourceCode[resource]);
  129. }
  130. if (receiver_address) {
  131. freezeBalanceContract.setReceiverAddress(fromHexString(receiver_address));
  132. }
  133. return buildCommonTransaction(freezeBalanceContract, Transaction.Contract.ContractType.FREEZEBALANCECONTRACT, 'FreezeBalanceContract', options.Permission_id);
  134. };
  135. const buildUnfreezeBalanceContract = (value, options) => {
  136. const unfreezeBalanceContract = new UnfreezeBalanceContract();
  137. const { owner_address, resource, receiver_address } = value;
  138. unfreezeBalanceContract.setOwnerAddress(fromHexString(owner_address));
  139. if (resource) {
  140. unfreezeBalanceContract.setResource(ResourceCode[resource]);
  141. }
  142. if (receiver_address) {
  143. unfreezeBalanceContract.setReceiverAddress(fromHexString(receiver_address));
  144. }
  145. return buildCommonTransaction(unfreezeBalanceContract, Transaction.Contract.ContractType.UNFREEZEBALANCECONTRACT, 'UnfreezeBalanceContract', options.Permission_id);
  146. };
  147. const buildWithdrawBalanceContract = (value, options) => {
  148. const withdrawbalanceContract = new WithdrawBalanceContract();
  149. const { owner_address } = value;
  150. withdrawbalanceContract.setOwnerAddress(fromHexString(owner_address));
  151. return buildCommonTransaction(withdrawbalanceContract, Transaction.Contract.ContractType.WITHDRAWBALANCECONTRACT, 'WithdrawBalanceContract', options.Permission_id);
  152. };
  153. const buildFreezeBalanceV2Contract = (value, options) => {
  154. const freezeBalanceV2Contract = new FreezeBalanceV2Contract();
  155. const { owner_address, frozen_balance, resource } = value;
  156. freezeBalanceV2Contract.setOwnerAddress(fromHexString(owner_address));
  157. freezeBalanceV2Contract.setFrozenBalance(frozen_balance);
  158. freezeBalanceV2Contract.setResource(ResourceCode[resource]);
  159. return buildCommonTransaction(freezeBalanceV2Contract, Transaction.Contract.ContractType.FREEZEBALANCEV2CONTRACT, 'FreezeBalanceV2Contract', options.Permission_id);
  160. };
  161. const buildCancelFreezeBalanceV2Contract = (value, options) => {
  162. const cancelAllUnfreezeV2Contract = new CancelAllUnfreezeV2Contract();
  163. const { owner_address } = value;
  164. cancelAllUnfreezeV2Contract.setOwnerAddress(fromHexString(owner_address));
  165. return buildCommonTransaction(cancelAllUnfreezeV2Contract, Transaction.Contract.ContractType.CANCELALLUNFREEZEV2CONTRACT, 'CancelAllUnfreezeV2Contract', options.Permission_id);
  166. };
  167. const buildUnfreezeBalanceV2Contract = (value, options) => {
  168. const unfreezeBalanceV2Contract = new UnfreezeBalanceV2Contract();
  169. const { owner_address, unfreeze_balance, resource } = value;
  170. unfreezeBalanceV2Contract.setOwnerAddress(fromHexString(owner_address));
  171. unfreezeBalanceV2Contract.setUnfreezeBalance(unfreeze_balance);
  172. unfreezeBalanceV2Contract.setResource(ResourceCode[resource]);
  173. return buildCommonTransaction(unfreezeBalanceV2Contract, Transaction.Contract.ContractType.UNFREEZEBALANCEV2CONTRACT, 'UnfreezeBalanceV2Contract', options.Permission_id);
  174. };
  175. const buildDelegateResourceContract = (value, options) => {
  176. const delegateResourceContract = new DelegateResourceContract();
  177. const { owner_address, receiver_address, balance, resource, lock = false, lock_period } = value;
  178. delegateResourceContract.setOwnerAddress(fromHexString(owner_address));
  179. delegateResourceContract.setBalance(balance);
  180. delegateResourceContract.setResource(ResourceCode[resource]);
  181. delegateResourceContract.setLock(lock);
  182. delegateResourceContract.setLockPeriod(lock_period);
  183. delegateResourceContract.setReceiverAddress(fromHexString(receiver_address));
  184. return buildCommonTransaction(delegateResourceContract, Transaction.Contract.ContractType.DELEGATERESOURCECONTRACT, 'DelegateResourceContract', options.Permission_id);
  185. };
  186. const buildUnDelegateResourceContract = (value, options) => {
  187. const unDelegateResourceContract = new UnDelegateResourceContract();
  188. const { owner_address, receiver_address, balance, resource } = value;
  189. unDelegateResourceContract.setOwnerAddress(fromHexString(owner_address));
  190. unDelegateResourceContract.setBalance(balance);
  191. unDelegateResourceContract.setResource(ResourceCode[resource]);
  192. unDelegateResourceContract.setReceiverAddress(fromHexString(receiver_address));
  193. return buildCommonTransaction(unDelegateResourceContract, Transaction.Contract.ContractType.UNDELEGATERESOURCECONTRACT, 'UnDelegateResourceContract', options.Permission_id);
  194. };
  195. const buildWithdrawExpireUnfreezeContract = (value, options) => {
  196. const withdrawExpireUnfreeze = new WithdrawExpireUnfreezeContract();
  197. const { owner_address } = value;
  198. withdrawExpireUnfreeze.setOwnerAddress(fromHexString(owner_address));
  199. return buildCommonTransaction(withdrawExpireUnfreeze, Transaction.Contract.ContractType.WITHDRAWEXPIREUNFREEZECONTRACT, 'WithdrawExpireUnfreezeContract', options.Permission_id);
  200. };
  201. // applyForSR
  202. const buildCreateWitness = (value, options) => {
  203. const createWitnessContract = new WitnessCreateContract();
  204. const { owner_address, url } = value;
  205. createWitnessContract.setOwnerAddress(fromHexString(owner_address));
  206. createWitnessContract.setUrl(stringToUint8Array(url.replace(/^0x/, '')));
  207. return buildCommonTransaction(createWitnessContract, Transaction.Contract.ContractType.WITNESSCREATECONTRACT, 'WitnessCreateContract', options.Permission_id);
  208. };
  209. // vote
  210. const buildVoteWitnessAccount = (value, options) => {
  211. const voteWitnessContract = new VoteWitnessContract();
  212. const { owner_address, votes } = value;
  213. voteWitnessContract.setOwnerAddress(fromHexString(owner_address));
  214. votes.forEach((voteItem) => {
  215. const vote = new VoteWitnessContract.Vote();
  216. const { vote_address, vote_count } = voteItem;
  217. vote.setVoteAddress(fromHexString(vote_address));
  218. const numberOfVotes = parseInt(vote_count);
  219. vote.setVoteCount(numberOfVotes);
  220. voteWitnessContract.addVotes(vote);
  221. });
  222. return buildCommonTransaction(voteWitnessContract, Transaction.Contract.ContractType.VOTEWITNESSCONTRACT, 'VoteWitnessContract', options.Permission_id);
  223. };
  224. const buildCreateSmartContract = (value, options) => {
  225. const params = value?.new_contract
  226. ? {
  227. ...{
  228. owner_address: value.owner_address,
  229. call_token_value: value.call_token_value,
  230. token_id: value.token_id,
  231. },
  232. ...value.new_contract,
  233. }
  234. : value;
  235. const { owner_address, consume_user_resource_percent, origin_energy_limit, abi, bytecode = '', parameter = '', call_value, call_token_value, token_id, name: contracName, } = params;
  236. let { origin_address } = params;
  237. const createSmartContract = new CreateSmartContract();
  238. createSmartContract.setOwnerAddress(fromHexString(owner_address));
  239. if (token_id) {
  240. createSmartContract.setTokenId(token_id);
  241. }
  242. if (call_token_value) {
  243. createSmartContract.setCallTokenValue(call_token_value);
  244. }
  245. const smartContractBuilder = new SmartContract();
  246. if (abi) {
  247. let abiJson;
  248. if (typeof abi === 'string') {
  249. abiJson = JSON.parse(abi);
  250. }
  251. else {
  252. abiJson = abi?.entrys || []; // abi could be an empty object if origin abi is `[]`;
  253. }
  254. const abiBuilder = new SmartContract.ABI();
  255. const buildEntryParam = (data) => {
  256. const param = new SmartContract.ABI.Entry.Param();
  257. const { indexed, name, type } = data;
  258. if (indexed === true) {
  259. param.setIndexed(true);
  260. }
  261. param.setName(name);
  262. param.setType(type);
  263. return param;
  264. };
  265. const entryBuilders = abiJson.map((entry) => {
  266. const { anonymous, constant, name, inputs, outputs, type, payable, stateMutability } = entry;
  267. const entryBuilder = new SmartContract.ABI.Entry();
  268. entryBuilder.setAnonymous(anonymous);
  269. entryBuilder.setConstant(constant);
  270. entryBuilder.setName(name);
  271. if (inputs) {
  272. entryBuilder.setInputsList(inputs.map((input) => buildEntryParam(input)));
  273. }
  274. if (outputs) {
  275. entryBuilder.setOutputsList(outputs.map((output) => buildEntryParam(output)));
  276. }
  277. if (type) {
  278. entryBuilder.setType(SmartContract.ABI.Entry.EntryType[type.toUpperCase()]);
  279. }
  280. entryBuilder.setPayable(payable);
  281. if (stateMutability) {
  282. entryBuilder.setStatemutability(SmartContract.ABI.Entry.StateMutabilityType[stateMutability.toUpperCase()]);
  283. }
  284. return entryBuilder;
  285. });
  286. abiBuilder.setEntrysList(entryBuilders);
  287. smartContractBuilder.setAbi(abiBuilder);
  288. }
  289. if (call_value) {
  290. smartContractBuilder.setCallValue(call_value);
  291. }
  292. smartContractBuilder.setConsumeUserResourcePercent(consume_user_resource_percent);
  293. smartContractBuilder.setOriginEnergyLimit(origin_energy_limit);
  294. if (!origin_address) {
  295. origin_address = owner_address;
  296. }
  297. smartContractBuilder.setOriginAddress(fromHexString(origin_address));
  298. if (bytecode) {
  299. const bytecodeParameter = bytecode.replace(/^0x/, '') + parameter.replace(/^0x/, '');
  300. smartContractBuilder.setBytecode(stringToUint8Array(bytecodeParameter));
  301. }
  302. smartContractBuilder.setName(contracName);
  303. createSmartContract.setNewContract(smartContractBuilder);
  304. return buildCommonTransaction(createSmartContract, Transaction.Contract.ContractType.CREATESMARTCONTRACT, 'CreateSmartContract', options.Permission_id);
  305. };
  306. const buildClearABIContract = (value, options) => {
  307. const { contract_address, owner_address } = value;
  308. const clearABIContract = new ClearABIContract();
  309. clearABIContract.setOwnerAddress(fromHexString(owner_address));
  310. clearABIContract.setContractAddress(fromHexString(contract_address));
  311. return buildCommonTransaction(clearABIContract, Transaction.Contract.ContractType.CLEARABICONTRACT, 'ClearABIContract', options.Permission_id);
  312. };
  313. // updateBrokerage
  314. const buildUpdateBrokerageContract = (value, options) => {
  315. const { brokerage, owner_address } = value;
  316. const updateBrokerageContract = new UpdateBrokerageContract();
  317. updateBrokerageContract.setOwnerAddress(fromHexString(owner_address));
  318. updateBrokerageContract.setBrokerage(brokerage);
  319. return buildCommonTransaction(updateBrokerageContract, Transaction.Contract.ContractType.UPDATEBROKERAGECONTRACT, 'UpdateBrokerageContract', options.Permission_id);
  320. };
  321. // createToken
  322. const buildAssetIssueContract = (value, options) => {
  323. const { owner_address, name, abbr, description, url, total_supply, trx_num, num, start_time, end_time, precision, free_asset_net_limit, public_free_asset_net_limit, public_free_asset_net_usage = 0, public_latest_free_net_time = 0, vote_score = 0, frozen_supply, } = value;
  324. const assetIssueContract = new AssetIssueContract();
  325. assetIssueContract.setOwnerAddress(fromHexString(owner_address));
  326. if (name) {
  327. assetIssueContract.setName(stringToUint8Array(name.replace(/^0x/, '')));
  328. }
  329. if (abbr) {
  330. assetIssueContract.setAbbr(stringToUint8Array(abbr.replace(/^0x/, '')));
  331. }
  332. assetIssueContract.setTotalSupply(total_supply);
  333. assetIssueContract.setNum(num);
  334. assetIssueContract.setEndTime(end_time);
  335. assetIssueContract.setStartTime(start_time);
  336. assetIssueContract.setTrxNum(trx_num);
  337. assetIssueContract.setVoteScore(vote_score);
  338. if (precision) {
  339. assetIssueContract.setPrecision(precision);
  340. }
  341. if (public_latest_free_net_time) {
  342. assetIssueContract.setPublicLatestFreeNetTime(public_latest_free_net_time);
  343. }
  344. if (description) {
  345. assetIssueContract.setDescription(stringToUint8Array(description.replace(/^0x/, '')));
  346. }
  347. if (url) {
  348. assetIssueContract.setUrl(stringToUint8Array(url.replace(/^0x/, '')));
  349. }
  350. assetIssueContract.setPublicFreeAssetNetUsage(public_free_asset_net_usage);
  351. assetIssueContract.setFreeAssetNetLimit(free_asset_net_limit);
  352. assetIssueContract.setPublicFreeAssetNetLimit(public_free_asset_net_limit);
  353. if (frozen_supply) {
  354. const frozenSupplyContract = new AssetIssueContract.FrozenSupply();
  355. frozenSupplyContract.setFrozenAmount(frozen_supply.length ? frozen_supply[0].frozen_amount : frozen_supply.frozen_amount);
  356. frozenSupplyContract.setFrozenDays(frozen_supply.length ? frozen_supply[0].frozen_days : frozen_supply.frozen_days);
  357. assetIssueContract.addFrozenSupply(frozenSupplyContract);
  358. }
  359. return buildCommonTransaction(assetIssueContract, Transaction.Contract.ContractType.ASSETISSUECONTRACT, 'AssetIssueContract', options.Permission_id);
  360. };
  361. //createAccount
  362. const buildAccountCreateContract = (value, options) => {
  363. const accountCreateContract = new AccountCreateContract();
  364. const { account_address, owner_address } = value;
  365. accountCreateContract.setOwnerAddress(fromHexString(owner_address));
  366. accountCreateContract.setAccountAddress(fromHexString(account_address.replace(/^0x/, '')));
  367. return buildCommonTransaction(accountCreateContract, Transaction.Contract.ContractType.ACCOUNTCREATECONTRACT, 'AccountCreateContract', options.Permission_id);
  368. };
  369. // updateAccount
  370. const buildAccountUpdateContract = (value, options) => {
  371. const accountUpdateContract = new AccountUpdateContract();
  372. const { account_name, owner_address } = value;
  373. accountUpdateContract.setOwnerAddress(fromHexString(owner_address));
  374. accountUpdateContract.setAccountName(stringToUint8Array(account_name.replace(/^0x/, '')));
  375. return buildCommonTransaction(accountUpdateContract, Transaction.Contract.ContractType.ACCOUNTUPDATECONTRACT, 'AccountUpdateContract', options.Permission_id);
  376. };
  377. // setAccountId
  378. const buildSetAccountIdContract = (value, options) => {
  379. const setAccountIdContract = new SetAccountIdContract();
  380. const { account_id, owner_address } = value;
  381. setAccountIdContract.setOwnerAddress(fromHexString(owner_address));
  382. setAccountIdContract.setAccountId(stringToUint8Array(account_id.replace(/^0x/, '')));
  383. return buildCommonTransaction(setAccountIdContract, Transaction.Contract.ContractType.SETACCOUNTIDCONTRACT, 'SetAccountIdContract', options.Permission_id);
  384. };
  385. const buildProposalCreateContract = (value, options) => {
  386. const proposalCreateContract = new ProposalCreateContract();
  387. const { owner_address, parameters } = value;
  388. proposalCreateContract.setOwnerAddress(fromHexString(owner_address));
  389. parameters.forEach((parameter) => {
  390. proposalCreateContract.getParametersMap().set(parameter.key, parameter.value);
  391. });
  392. return buildCommonTransaction(proposalCreateContract, Transaction.Contract.ContractType.PROPOSALCREATECONTRACT, 'ProposalCreateContract', options.Permission_id);
  393. };
  394. const buildProposalDeleteContract = (value, options) => {
  395. const proposalDeleteContract = new ProposalDeleteContract();
  396. const { owner_address, proposal_id } = value;
  397. proposalDeleteContract.setOwnerAddress(fromHexString(owner_address));
  398. proposalDeleteContract.setProposalId(proposal_id);
  399. return buildCommonTransaction(proposalDeleteContract, Transaction.Contract.ContractType.PROPOSALDELETECONTRACT, 'ProposalDeleteContract', options.Permission_id);
  400. };
  401. const buildVoteProposalContract = (value, options) => {
  402. const proposalVoteContract = new ProposalApproveContract();
  403. const { owner_address, proposal_id, is_add_approval } = value;
  404. proposalVoteContract.setOwnerAddress(fromHexString(owner_address));
  405. proposalVoteContract.setProposalId(proposal_id);
  406. proposalVoteContract.setIsAddApproval(is_add_approval);
  407. return buildCommonTransaction(proposalVoteContract, Transaction.Contract.ContractType.PROPOSALAPPROVECONTRACT, 'ProposalApproveContract', options.Permission_id);
  408. };
  409. const buildExchangeCreateContract = (value, options) => {
  410. const exchangeCreateContract = new ExchangeCreateContract();
  411. const { owner_address, first_token_id, first_token_balance, second_token_id, second_token_balance } = value;
  412. exchangeCreateContract.setOwnerAddress(fromHexString(owner_address));
  413. exchangeCreateContract.setFirstTokenId(flexToUint8Array(first_token_id, options.visible));
  414. exchangeCreateContract.setFirstTokenBalance(first_token_balance);
  415. exchangeCreateContract.setSecondTokenId(flexToUint8Array(second_token_id, options.visible));
  416. exchangeCreateContract.setSecondTokenBalance(second_token_balance);
  417. return buildCommonTransaction(exchangeCreateContract, Transaction.Contract.ContractType.EXCHANGECREATECONTRACT, 'ExchangeCreateContract', options.Permission_id);
  418. };
  419. const buildExchangeInjectContract = (value, options) => {
  420. const exchangeInjectContract = new ExchangeInjectContract();
  421. const { owner_address, exchange_id, token_id, quant } = value;
  422. exchangeInjectContract.setOwnerAddress(fromHexString(owner_address));
  423. exchangeInjectContract.setExchangeId(exchange_id);
  424. exchangeInjectContract.setTokenId(flexToUint8Array(token_id, options.visible));
  425. exchangeInjectContract.setQuant(quant);
  426. return buildCommonTransaction(exchangeInjectContract, Transaction.Contract.ContractType.EXCHANGEINJECTCONTRACT, 'ExchangeInjectContract', options.Permission_id);
  427. };
  428. const buildExchangeWithdrawContract = (value, options) => {
  429. const exchangeWithdrawContract = new ExchangeWithdrawContract();
  430. const { owner_address, exchange_id, token_id, quant } = value;
  431. exchangeWithdrawContract.setOwnerAddress(fromHexString(owner_address));
  432. exchangeWithdrawContract.setExchangeId(exchange_id);
  433. exchangeWithdrawContract.setTokenId(flexToUint8Array(token_id, options.visible));
  434. exchangeWithdrawContract.setQuant(quant);
  435. return buildCommonTransaction(exchangeWithdrawContract, Transaction.Contract.ContractType.EXCHANGEWITHDRAWCONTRACT, 'ExchangeWithdrawContract', options.Permission_id);
  436. };
  437. const buildExchangeTransactionContract = (value, options) => {
  438. const exchangeTransactionContract = new ExchangeTransactionContract();
  439. const { owner_address, exchange_id, token_id, quant, expected } = value;
  440. exchangeTransactionContract.setOwnerAddress(fromHexString(owner_address));
  441. exchangeTransactionContract.setExchangeId(exchange_id);
  442. exchangeTransactionContract.setTokenId(flexToUint8Array(token_id, options.visible));
  443. exchangeTransactionContract.setQuant(quant);
  444. exchangeTransactionContract.setExpected(expected);
  445. return buildCommonTransaction(exchangeTransactionContract, Transaction.Contract.ContractType.EXCHANGETRANSACTIONCONTRACT, 'ExchangeTransactionContract', options.Permission_id);
  446. };
  447. const buildUpdateSettingContract = (value, options) => {
  448. const updateSettingContract = new UpdateSettingContract();
  449. const { owner_address, contract_address, consume_user_resource_percent } = value;
  450. updateSettingContract.setOwnerAddress(fromHexString(owner_address));
  451. updateSettingContract.setContractAddress(fromHexString(contract_address));
  452. updateSettingContract.setConsumeUserResourcePercent(consume_user_resource_percent);
  453. return buildCommonTransaction(updateSettingContract, Transaction.Contract.ContractType.UPDATESETTINGCONTRACT, 'UpdateSettingContract', options.Permission_id);
  454. };
  455. const buildUpdateEnergyLimitContract = (value, options) => {
  456. const updateEnergyLimitContract = new UpdateEnergyLimitContract();
  457. const { owner_address, contract_address, origin_energy_limit } = value;
  458. updateEnergyLimitContract.setOwnerAddress(fromHexString(owner_address));
  459. updateEnergyLimitContract.setContractAddress(fromHexString(contract_address));
  460. updateEnergyLimitContract.setOriginEnergyLimit(origin_energy_limit);
  461. return buildCommonTransaction(updateEnergyLimitContract, Transaction.Contract.ContractType.UPDATEENERGYLIMITCONTRACT, 'UpdateEnergyLimitContract', options.Permission_id);
  462. };
  463. const buildAccountPermissionUpdateContract = (value, options) => {
  464. const accountPermissionUpdateContract = new AccountPermissionUpdateContract();
  465. const { owner_address, owner, witness, actives } = value;
  466. accountPermissionUpdateContract.setOwnerAddress(fromHexString(owner_address));
  467. const getType = (type) => {
  468. // no type when permission_name is owner
  469. if (isNaN(type))
  470. return type === 'Active' ? 2 : type === 'Witness' ? 1 : 0;
  471. return type;
  472. };
  473. const buildPermission = (data) => {
  474. // no type when permission_name is owner
  475. const permission = new Permission();
  476. const { type, id, permission_name, threshold, parentId, operations, keys } = data;
  477. permission.setType(getType(type));
  478. permission.setId(id);
  479. permission.setPermissionName(permission_name);
  480. permission.setThreshold(threshold);
  481. if (parentId) {
  482. permission.setParentId(parentId);
  483. }
  484. if (operations) {
  485. permission.setOperations(stringToUint8Array(operations));
  486. }
  487. if (keys) {
  488. permission.setKeysList(keys.map((key) => {
  489. const keyBuilder = new Key();
  490. keyBuilder.setAddress(fromHexString(key.address));
  491. keyBuilder.setWeight(key.weight);
  492. return keyBuilder;
  493. }));
  494. }
  495. return permission;
  496. };
  497. if (owner) {
  498. accountPermissionUpdateContract.setOwner(buildPermission(owner));
  499. }
  500. if (witness) {
  501. accountPermissionUpdateContract.setWitness(buildPermission(witness));
  502. }
  503. if (actives) {
  504. if (Array.isArray(actives)) {
  505. accountPermissionUpdateContract.setActivesList(actives.map((active) => buildPermission(active)));
  506. }
  507. else {
  508. accountPermissionUpdateContract.setActivesList([buildPermission(actives)]);
  509. }
  510. }
  511. return buildCommonTransaction(accountPermissionUpdateContract, Transaction.Contract.ContractType.ACCOUNTPERMISSIONUPDATECONTRACT, 'AccountPermissionUpdateContract', options.Permission_id);
  512. };
  513. const buildUpdateAssetContract = (value, options) => {
  514. const updateAssetContract = new UpdateAssetContract();
  515. const { owner_address, description, url, new_limit, new_public_limit } = value;
  516. updateAssetContract.setOwnerAddress(fromHexString(owner_address));
  517. if (description) {
  518. updateAssetContract.setDescription(stringToUint8Array(description.replace(/^0x/, '')));
  519. }
  520. if (url) {
  521. updateAssetContract.setUrl(stringToUint8Array(url.replace(/^0x/, '')));
  522. }
  523. if (new_limit) {
  524. updateAssetContract.setNewLimit(new_limit);
  525. }
  526. if (new_public_limit) {
  527. updateAssetContract.setNewPublicLimit(new_public_limit);
  528. }
  529. return buildCommonTransaction(updateAssetContract, Transaction.Contract.ContractType.UPDATEASSETCONTRACT, 'UpdateAssetContract', options.Permission_id);
  530. };
  531. const contractJsonToProtobuf = (contract, value, options) => {
  532. switch (contract.type) {
  533. case 'TransferContract':
  534. return buildTransferContract(value, options);
  535. case 'TransferAssetContract':
  536. return buildTransferAssetContract(value, options);
  537. case 'ParticipateAssetIssueContract':
  538. return buildParticipateAssetIssueContract(value, options);
  539. case 'TriggerSmartContract':
  540. return buildTriggerSmartContract(value, options);
  541. case 'FreezeBalanceContract':
  542. return buildFreezeBalanceContract(value, options);
  543. case 'UnfreezeBalanceContract':
  544. return buildUnfreezeBalanceContract(value, options);
  545. case 'WithdrawBalanceContract':
  546. return buildWithdrawBalanceContract(value, options);
  547. case 'FreezeBalanceV2Contract':
  548. return buildFreezeBalanceV2Contract(value, options);
  549. case 'CancelAllUnfreezeV2Contract':
  550. return buildCancelFreezeBalanceV2Contract(value, options);
  551. case 'UnfreezeBalanceV2Contract':
  552. return buildUnfreezeBalanceV2Contract(value, options);
  553. case 'DelegateResourceContract':
  554. return buildDelegateResourceContract(value, options);
  555. case 'UnDelegateResourceContract':
  556. return buildUnDelegateResourceContract(value, options);
  557. case 'WithdrawExpireUnfreezeContract':
  558. return buildWithdrawExpireUnfreezeContract(value, options);
  559. case 'WitnessCreateContract':
  560. return buildCreateWitness(value, options);
  561. case 'VoteWitnessContract':
  562. return buildVoteWitnessAccount(value, options);
  563. case 'CreateSmartContract':
  564. return buildCreateSmartContract(value, options);
  565. case 'ClearABIContract':
  566. return buildClearABIContract(value, options);
  567. case 'UpdateBrokerageContract':
  568. return buildUpdateBrokerageContract(value, options);
  569. case 'AssetIssueContract':
  570. return buildAssetIssueContract(value, options);
  571. case 'AccountCreateContract':
  572. return buildAccountCreateContract(value, options);
  573. case 'AccountUpdateContract':
  574. return buildAccountUpdateContract(value, options);
  575. case 'SetAccountIdContract':
  576. return buildSetAccountIdContract(value, options);
  577. case 'ProposalCreateContract':
  578. return buildProposalCreateContract(value, options);
  579. case 'ProposalDeleteContract':
  580. return buildProposalDeleteContract(value, options);
  581. case 'ProposalApproveContract':
  582. return buildVoteProposalContract(value, options);
  583. case 'ExchangeCreateContract':
  584. return buildExchangeCreateContract(value, options);
  585. case 'ExchangeInjectContract':
  586. return buildExchangeInjectContract(value, options);
  587. case 'ExchangeWithdrawContract':
  588. return buildExchangeWithdrawContract(value, options);
  589. case 'ExchangeTransactionContract':
  590. return buildExchangeTransactionContract(value, options);
  591. case 'UpdateSettingContract':
  592. return buildUpdateSettingContract(value, options);
  593. case 'UpdateEnergyLimitContract':
  594. return buildUpdateEnergyLimitContract(value, options);
  595. case 'AccountPermissionUpdateContract':
  596. return buildAccountPermissionUpdateContract(value, options);
  597. case 'UpdateAssetContract':
  598. return buildUpdateAssetContract(value, options);
  599. }
  600. };
  601. const txJsonToPb = (transaction) => {
  602. const rawData = transaction['raw_data'];
  603. const contractJson = rawData.contract[0];
  604. const data = contractJson.parameter.value;
  605. const options = { Permission_id: contractJson.Permission_id, visible: transaction.visible };
  606. const transactionObj = contractJsonToProtobuf(contractJson, data, options);
  607. const rawDataObj = transactionObj.getRawData();
  608. rawDataObj.setRefBlockBytes(stringToUint8Array(rawData.ref_block_bytes));
  609. rawDataObj.setRefBlockHash(stringToUint8Array(rawData.ref_block_hash));
  610. if (rawData.data) {
  611. rawDataObj.setData(stringToUint8Array(rawData.data));
  612. }
  613. if (rawData.fee_limit) {
  614. rawDataObj.setFeeLimit(rawData.fee_limit);
  615. }
  616. if (rawData.expiration) {
  617. rawDataObj.setExpiration(rawData.expiration);
  618. }
  619. if (rawData.timestamp) {
  620. rawDataObj.setTimestamp(rawData.timestamp);
  621. }
  622. transactionObj.setRawData(rawDataObj);
  623. return transactionObj;
  624. };
  625. exports.txJsonToPb = txJsonToPb;
  626. const txJsonToPbWithArgs = (transaction, args = {}, options = {}) => {
  627. const rawData = transaction['raw_data'];
  628. const contractJson = rawData.contract[0];
  629. const transactionObj = contractJsonToProtobuf(contractJson, args, {
  630. Permission_id: args?.Permission_id,
  631. });
  632. const rawDataObj = transactionObj.getRawData();
  633. rawDataObj.setRefBlockBytes(stringToUint8Array(rawData.ref_block_bytes));
  634. rawDataObj.setRefBlockHash(stringToUint8Array(rawData.ref_block_hash));
  635. // for memo
  636. if (options.data) {
  637. rawDataObj.setData(stringToUint8Array(options.data.replace(/^0x/, '')));
  638. }
  639. if (options.fee_limit || args.fee_limit) {
  640. rawDataObj.setFeeLimit(options.fee_limit || args.fee_limit);
  641. }
  642. if (rawData.expiration) {
  643. rawDataObj.setExpiration(rawData.expiration);
  644. }
  645. if (rawData.timestamp) {
  646. rawDataObj.setTimestamp(rawData.timestamp);
  647. }
  648. transactionObj.setRawData(rawDataObj);
  649. return transactionObj;
  650. };
  651. exports.txJsonToPbWithArgs = txJsonToPbWithArgs;
  652. const compareTransaction = (transaction, transactionPb) => {
  653. const rawDataBytes = transactionPb.getRawData().serializeBinary();
  654. const rawDataHex = (0, bytes_js_1.byteArray2hexStr)(rawDataBytes);
  655. const txID = (0, ethersUtils_js_1.sha256)(rawDataBytes);
  656. return (rawDataHex.toLowerCase() === transaction.raw_data_hex.toLowerCase() &&
  657. txID.replace(/^0x/, '').toLowerCase() === transaction.txID.replace(/^0x/, '').toLowerCase());
  658. };
  659. const txPbToRawDataHex = (pb) => {
  660. return (0, bytes_js_1.byteArray2hexStr)(pb.getRawData().serializeBinary());
  661. };
  662. exports.txPbToRawDataHex = txPbToRawDataHex;
  663. const txCheck = (transaction) => {
  664. const transactionPb = txJsonToPb(transaction);
  665. return compareTransaction(transaction, transactionPb);
  666. };
  667. exports.txCheck = txCheck;
  668. const txCheckWithArgs = (transaction, args, options) => {
  669. const transactionPb = txJsonToPbWithArgs(transaction, args, options);
  670. return compareTransaction(transaction, transactionPb);
  671. };
  672. exports.txCheckWithArgs = txCheckWithArgs;
  673. const txPbToTxID = (transactionPb) => {
  674. const rawDataBytes = transactionPb.getRawData().serializeBinary();
  675. const txID = (0, ethersUtils_js_1.sha256)(rawDataBytes);
  676. return txID;
  677. };
  678. exports.txPbToTxID = txPbToTxID;
  679. const ContractTypeMap = {
  680. '0': 'AccountCreateContract',
  681. '1': 'TransferContract',
  682. '2': 'TransferAssetContract',
  683. '4': 'VoteWitnessContract',
  684. '5': 'WitnessCreateContract',
  685. '6': 'AssetIssueContract',
  686. '9': 'ParticipateAssetIssueContract',
  687. '10': 'AccountUpdateContract',
  688. '11': 'FreezeBalanceContract',
  689. '12': 'UnfreezeBalanceContract',
  690. '13': 'WithdrawBalanceContract',
  691. '15': 'UpdateAssetContract',
  692. '16': 'ProposalCreateContract',
  693. '17': 'ProposalApproveContract',
  694. '18': 'ProposalDeleteContract',
  695. '19': 'SetAccountIdContract',
  696. '30': 'CreateSmartContract',
  697. '31': 'TriggerSmartContract',
  698. '33': 'UpdateSettingContract',
  699. '41': 'ExchangeCreateContract',
  700. '42': 'ExchangeInjectContract',
  701. '43': 'ExchangeWithdrawContract',
  702. '44': 'ExchangeTransactionContract',
  703. '45': 'UpdateEnergyLimitContract',
  704. '46': 'AccountPermissionUpdateContract',
  705. '48': 'ClearABIContract',
  706. '49': 'UpdateBrokerageContract',
  707. '54': 'FreezeBalanceV2Contract',
  708. '55': 'UnfreezeBalanceV2Contract',
  709. '56': 'WithdrawExpireUnfreezeContract',
  710. '57': 'DelegateResourceContract',
  711. '58': 'UnDelegateResourceContract',
  712. '59': 'CancelAllUnfreezeV2Contract',
  713. };
  714. const getAuthsList = (pb) => {
  715. const authsList = pb.getAuthsList();
  716. return authsList.map((authPb) => {
  717. const permission_name = (0, bytes_js_1.byteArray2hexStr)(authPb.getPermissionName_asU8());
  718. const accountPb = authPb.getAccount();
  719. const account = {
  720. name: (0, bytes_js_1.byteArray2hexStr)(accountPb.getName_asU8()),
  721. address: (0, bytes_js_1.byteArray2hexStr)(accountPb.getAddress_asU8()),
  722. };
  723. return {
  724. permission_name,
  725. account,
  726. };
  727. });
  728. };
  729. const DCommonData = (type, rawDataHex) => {
  730. const pb = Transaction.raw.deserializeBinary((0, code_js_1.hexStr2byteArray)(rawDataHex));
  731. const contract = pb.getContractList()[0];
  732. const valuePb = contract.getParameter().getValue();
  733. const contractType = ContractTypeMap[contract.getType()];
  734. if (type !== contractType) {
  735. throw new Error(`type ${type} dismatches with rawDataHex type ${contractType}`);
  736. }
  737. return [
  738. {
  739. contract: [
  740. {
  741. parameter: {
  742. value: {},
  743. type_url: contract.getParameter().getTypeUrl(),
  744. },
  745. type,
  746. Permission_id: contract.getPermissionId(),
  747. },
  748. ],
  749. data: (0, bytes_js_1.byteArray2hexStr)(pb.getData()),
  750. fee_limit: pb.getFeeLimit(),
  751. ref_block_bytes: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockBytes_asU8()),
  752. ref_block_hash: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockHash_asU8()),
  753. expiration: pb.getExpiration(),
  754. timestamp: pb.getTimestamp(),
  755. scripts: (0, bytes_js_1.byteArray2hexStr)(pb.getScripts_asU8()),
  756. auths: getAuthsList(pb),
  757. },
  758. valuePb,
  759. ];
  760. };
  761. const DTriggerSmartContract = (type, rawDataHex) => {
  762. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  763. const triggerSmartContract = TriggerSmartContract.deserializeBinary(valuePb);
  764. commonData.contract[0].parameter.value = {
  765. owner_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getOwnerAddress_asU8()),
  766. contract_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getContractAddress_asU8()),
  767. call_value: triggerSmartContract.getCallValue(),
  768. data: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getData_asU8()),
  769. call_token_value: triggerSmartContract.getCallTokenValue(),
  770. token_id: triggerSmartContract.getTokenId(),
  771. };
  772. return commonData;
  773. };
  774. const getResourceName = (type) => {
  775. switch (type) {
  776. case 0:
  777. return 'BANDWIDTH';
  778. case 1:
  779. return 'ENERGY';
  780. default:
  781. return 'BANDWIDTH';
  782. }
  783. };
  784. const DFreezeBalanceV2Contract = (type, rawDataHex) => {
  785. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  786. const freezeBalanceV2Contract = FreezeBalanceV2Contract.deserializeBinary(valuePb);
  787. commonData.contract[0].parameter.value = {
  788. owner_address: (0, bytes_js_1.byteArray2hexStr)(freezeBalanceV2Contract.getOwnerAddress_asU8()),
  789. frozen_balance: freezeBalanceV2Contract.getFrozenBalance(),
  790. resource: getResourceName(freezeBalanceV2Contract.getResource()),
  791. };
  792. return commonData;
  793. };
  794. const DUnfreezeBalanceV2Contract = (type, rawDataHex) => {
  795. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  796. const unfreezeBalanceV2Contract = UnfreezeBalanceV2Contract.deserializeBinary(valuePb);
  797. commonData.contract[0].parameter.value = {
  798. owner_address: (0, bytes_js_1.byteArray2hexStr)(unfreezeBalanceV2Contract.getOwnerAddress_asU8()),
  799. unfreeze_balance: unfreezeBalanceV2Contract.getUnfreezeBalance(),
  800. resource: getResourceName(unfreezeBalanceV2Contract.getResource()),
  801. };
  802. return commonData;
  803. };
  804. const DCancelAllUnfreezeV2Contract = (type, rawDataHex) => {
  805. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  806. const cancelAllUnfreezeV2Contract = CancelAllUnfreezeV2Contract.deserializeBinary(valuePb);
  807. commonData.contract[0].parameter.value = {
  808. owner_address: (0, bytes_js_1.byteArray2hexStr)(cancelAllUnfreezeV2Contract.getOwnerAddress_asU8()),
  809. };
  810. return commonData;
  811. };
  812. const DDelegateResourceContract = (type, rawDataHex) => {
  813. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  814. const delegateResourceContract = DelegateResourceContract.deserializeBinary(valuePb);
  815. commonData.contract[0].parameter.value = {
  816. owner_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getOwnerAddress_asU8()),
  817. balance: delegateResourceContract.getBalance(),
  818. lock: delegateResourceContract.getLock(),
  819. lock_period: delegateResourceContract.getLockPeriod(),
  820. receiver_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getReceiverAddress_asU8()),
  821. resource: getResourceName(delegateResourceContract.getResource())
  822. };
  823. return commonData;
  824. };
  825. const DUnDelegateResourceContract = (type, rawDataHex) => {
  826. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  827. const undelegateResourceContract = UnDelegateResourceContract.deserializeBinary(valuePb);
  828. commonData.contract[0].parameter.value = {
  829. owner_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getOwnerAddress_asU8()),
  830. balance: undelegateResourceContract.getBalance(),
  831. receiver_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getReceiverAddress_asU8()),
  832. resource: getResourceName(undelegateResourceContract.getResource()),
  833. };
  834. return commonData;
  835. };
  836. const DWithdrawExpireUnfreezeContract = (type, rawDataHex) => {
  837. const [commonData, valuePb] = DCommonData(type, rawDataHex);
  838. const withdrawExpireUnfreezeContract = WithdrawExpireUnfreezeContract.deserializeBinary(valuePb);
  839. commonData.contract[0].parameter.value = {
  840. owner_address: (0, bytes_js_1.byteArray2hexStr)(withdrawExpireUnfreezeContract.getOwnerAddress_asU8()),
  841. };
  842. return commonData;
  843. };
  844. const DeserializeTransaction = (type, rawDataHex) => {
  845. if (!rawDataHex) {
  846. throw new Error('rawDataHex cannot be empty');
  847. }
  848. if (!(0, validations_js_1.isHex)(rawDataHex)) {
  849. throw new Error('rawDataHex is not a valid hex string');
  850. }
  851. switch (type) {
  852. case 'TriggerSmartContract':
  853. return DTriggerSmartContract(type, rawDataHex);
  854. case 'FreezeBalanceV2Contract':
  855. return DFreezeBalanceV2Contract(type, rawDataHex);
  856. case 'UnfreezeBalanceV2Contract':
  857. return DUnfreezeBalanceV2Contract(type, rawDataHex);
  858. case 'CancelAllUnfreezeV2Contract':
  859. return DCancelAllUnfreezeV2Contract(type, rawDataHex);
  860. case 'DelegateResourceContract':
  861. return DDelegateResourceContract(type, rawDataHex);
  862. case 'UnDelegateResourceContract':
  863. return DUnDelegateResourceContract(type, rawDataHex);
  864. case 'WithdrawExpireUnfreezeContract':
  865. return DWithdrawExpireUnfreezeContract(type, rawDataHex);
  866. default:
  867. throw new Error(`trasaction ${type} not supported`);
  868. }
  869. };
  870. exports.DeserializeTransaction = DeserializeTransaction;
  871. //# sourceMappingURL=transaction.js.map