tronweb
Version:
JavaScript SDK that encapsulates the TRON HTTP API
240 lines • 11.1 kB
JavaScript
;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
Object.defineProperty(exports, "__esModule", { value: true });
exports.deserializeTransaction = void 0;
require("../protocol/core/Tron_pb.cjs");
const { Transaction } = globalThis.TronWebProto;
require("../protocol/core/contract/balance_contract_pb.cjs");
const { TransferContract, WithdrawBalanceContract, WitnessCreateContract, FreezeBalanceV2Contract, UnfreezeBalanceV2Contract, CancelAllUnfreezeV2Contract, WithdrawExpireUnfreezeContract, DelegateResourceContract, UnDelegateResourceContract, } = globalThis.TronWebProto;
require("../protocol/core/contract/smart_contract_pb.cjs");
const { TriggerSmartContract } = globalThis.TronWebProto;
const bytes_js_1 = require("./bytes.js");
const code_js_1 = require("./code.js");
const validations_js_1 = require("./validations.js");
const ContractTypeMap = {
'0': 'AccountCreateContract',
'1': 'TransferContract',
'2': 'TransferAssetContract',
'4': 'VoteWitnessContract',
'5': 'WitnessCreateContract',
'6': 'AssetIssueContract',
'9': 'ParticipateAssetIssueContract',
'10': 'AccountUpdateContract',
'11': 'FreezeBalanceContract',
'12': 'UnfreezeBalanceContract',
'13': 'WithdrawBalanceContract',
'15': 'UpdateAssetContract',
'16': 'ProposalCreateContract',
'17': 'ProposalApproveContract',
'18': 'ProposalDeleteContract',
'19': 'SetAccountIdContract',
'30': 'CreateSmartContract',
'31': 'TriggerSmartContract',
'33': 'UpdateSettingContract',
'41': 'ExchangeCreateContract',
'42': 'ExchangeInjectContract',
'43': 'ExchangeWithdrawContract',
'44': 'ExchangeTransactionContract',
'45': 'UpdateEnergyLimitContract',
'46': 'AccountPermissionUpdateContract',
'48': 'ClearABIContract',
'49': 'UpdateBrokerageContract',
'54': 'FreezeBalanceV2Contract',
'55': 'UnfreezeBalanceV2Contract',
'56': 'WithdrawExpireUnfreezeContract',
'57': 'DelegateResourceContract',
'58': 'UnDelegateResourceContract',
'59': 'CancelAllUnfreezeV2Contract',
};
const getAuthsList = (pb) => {
const authsList = pb.getAuthsList();
return authsList.map((authPb) => {
const permission_name = (0, bytes_js_1.byteArray2hexStr)(authPb.getPermissionName_asU8());
const accountPb = authPb.getAccount();
const account = {
name: (0, bytes_js_1.byteArray2hexStr)(accountPb.getName_asU8()),
address: (0, bytes_js_1.byteArray2hexStr)(accountPb.getAddress_asU8()),
};
return {
permission_name,
account,
};
});
};
const DCommonData = (type, rawDataHex) => {
const pb = Transaction.raw.deserializeBinary((0, code_js_1.hexStr2byteArray)(rawDataHex));
const contract = pb.getContractList()[0];
const valuePb = contract.getParameter().getValue();
const contractType = ContractTypeMap[contract.getType()];
if (type !== contractType) {
throw new Error(`type ${type} dismatches with rawDataHex type ${contractType}`);
}
return [
{
contract: [
{
parameter: {
value: {},
type_url: contract.getParameter().getTypeUrl(),
},
type,
Permission_id: contract.getPermissionId(),
},
],
data: (0, bytes_js_1.byteArray2hexStr)(pb.getData()),
fee_limit: pb.getFeeLimit(),
ref_block_bytes: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockBytes_asU8()),
ref_block_hash: (0, bytes_js_1.byteArray2hexStr)(pb.getRefBlockHash_asU8()),
expiration: pb.getExpiration(),
timestamp: pb.getTimestamp(),
scripts: (0, bytes_js_1.byteArray2hexStr)(pb.getScripts_asU8()),
auths: getAuthsList(pb),
},
valuePb,
];
};
const DTriggerSmartContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const triggerSmartContract = TriggerSmartContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getOwnerAddress_asU8()),
contract_address: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getContractAddress_asU8()),
call_value: triggerSmartContract.getCallValue(),
data: (0, bytes_js_1.byteArray2hexStr)(triggerSmartContract.getData_asU8()),
call_token_value: triggerSmartContract.getCallTokenValue(),
token_id: triggerSmartContract.getTokenId(),
};
return commonData;
};
const getResourceName = (type) => {
switch (type) {
case 0:
return 'BANDWIDTH';
case 1:
return 'ENERGY';
default:
return 'BANDWIDTH';
}
};
const DFreezeBalanceV2Contract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const freezeBalanceV2Contract = FreezeBalanceV2Contract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(freezeBalanceV2Contract.getOwnerAddress_asU8()),
frozen_balance: freezeBalanceV2Contract.getFrozenBalance(),
resource: getResourceName(freezeBalanceV2Contract.getResource()),
};
return commonData;
};
const DUnfreezeBalanceV2Contract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const unfreezeBalanceV2Contract = UnfreezeBalanceV2Contract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(unfreezeBalanceV2Contract.getOwnerAddress_asU8()),
unfreeze_balance: unfreezeBalanceV2Contract.getUnfreezeBalance(),
resource: getResourceName(unfreezeBalanceV2Contract.getResource()),
};
return commonData;
};
const DCancelAllUnfreezeV2Contract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const cancelAllUnfreezeV2Contract = CancelAllUnfreezeV2Contract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(cancelAllUnfreezeV2Contract.getOwnerAddress_asU8()),
};
return commonData;
};
const DDelegateResourceContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const delegateResourceContract = DelegateResourceContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getOwnerAddress_asU8()),
balance: delegateResourceContract.getBalance(),
lock: delegateResourceContract.getLock(),
lock_period: delegateResourceContract.getLockPeriod(),
receiver_address: (0, bytes_js_1.byteArray2hexStr)(delegateResourceContract.getReceiverAddress_asU8()),
resource: getResourceName(delegateResourceContract.getResource()),
};
return commonData;
};
const DUnDelegateResourceContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const undelegateResourceContract = UnDelegateResourceContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getOwnerAddress_asU8()),
balance: undelegateResourceContract.getBalance(),
receiver_address: (0, bytes_js_1.byteArray2hexStr)(undelegateResourceContract.getReceiverAddress_asU8()),
resource: getResourceName(undelegateResourceContract.getResource()),
};
return commonData;
};
const DWithdrawExpireUnfreezeContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const withdrawExpireUnfreezeContract = WithdrawExpireUnfreezeContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(withdrawExpireUnfreezeContract.getOwnerAddress_asU8()),
};
return commonData;
};
const DTransferContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const transferContract = TransferContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(transferContract.getOwnerAddress_asU8()),
to_address: (0, bytes_js_1.byteArray2hexStr)(transferContract.getToAddress_asU8()),
amount: transferContract.getAmount(),
};
return commonData;
};
const DWithdrawBalanceContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const withdrawBalanceContract = WithdrawBalanceContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(withdrawBalanceContract.getOwnerAddress_asU8()),
};
return commonData;
};
const DWitnessCreateContract = (type, rawDataHex) => {
const [commonData, valuePb] = DCommonData(type, rawDataHex);
const witnessCreateContract = WitnessCreateContract.deserializeBinary(valuePb);
commonData.contract[0].parameter.value = {
owner_address: (0, bytes_js_1.byteArray2hexStr)(witnessCreateContract.getOwnerAddress_asU8()),
url: String.fromCharCode(...witnessCreateContract.getUrl_asU8()),
};
return commonData;
};
const deserializeTransaction = (type, rawDataHex) => {
if (!rawDataHex) {
throw new Error('rawDataHex cannot be empty');
}
if (!(0, validations_js_1.isHex)(rawDataHex)) {
throw new Error('rawDataHex is not a valid hex string');
}
switch (type) {
case 'TriggerSmartContract':
return DTriggerSmartContract(type, rawDataHex);
case 'FreezeBalanceV2Contract':
return DFreezeBalanceV2Contract(type, rawDataHex);
case 'UnfreezeBalanceV2Contract':
return DUnfreezeBalanceV2Contract(type, rawDataHex);
case 'CancelAllUnfreezeV2Contract':
return DCancelAllUnfreezeV2Contract(type, rawDataHex);
case 'DelegateResourceContract':
return DDelegateResourceContract(type, rawDataHex);
case 'UnDelegateResourceContract':
return DUnDelegateResourceContract(type, rawDataHex);
case 'WithdrawExpireUnfreezeContract':
return DWithdrawExpireUnfreezeContract(type, rawDataHex);
case 'TransferContract':
return DTransferContract(type, rawDataHex);
case 'WithdrawBalanceContract':
return DWithdrawBalanceContract(type, rawDataHex);
case 'WitnessCreateContract':
return DWitnessCreateContract(type, rawDataHex);
default:
throw new Error(`trasaction ${type} not supported`);
}
};
exports.deserializeTransaction = deserializeTransaction;
//# sourceMappingURL=deserializeTx.js.map