transaction.js 44 KB

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