UNPKG

viem

Version:

TypeScript Interface for Ethereum

113 lines 4.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatTransaction = formatTransaction; exports.formatTransactionReceipt = formatTransactionReceipt; exports.formatTransactionRequest = formatTransactionRequest; const Hex = require("ox/Hex"); const tempo_1 = require("ox/tempo"); const parseAccount_js_1 = require("../accounts/utils/parseAccount.js"); const transaction_js_1 = require("../utils/formatters/transaction.js"); const transactionReceipt_js_1 = require("../utils/formatters/transactionReceipt.js"); const transactionRequest_js_1 = require("../utils/formatters/transactionRequest.js"); const Transaction_js_1 = require("./Transaction.js"); function formatTransaction(transaction) { if (!(0, Transaction_js_1.isTempo)(transaction)) return (0, transaction_js_1.formatTransaction)(transaction); const blockTimestamp = transaction.blockTimestamp == null ? undefined : BigInt(transaction.blockTimestamp); const { feePayerSignature, gasPrice: _, nonce, ...tx } = tempo_1.Transaction.fromRpc(transaction); return { ...tx, accessList: tx.accessList, ...(typeof blockTimestamp !== 'undefined' && { blockTimestamp }), feePayerSignature: feePayerSignature ? { r: Hex.fromNumber(feePayerSignature.r, { size: 32 }), s: Hex.fromNumber(feePayerSignature.s, { size: 32 }), v: BigInt(feePayerSignature.v ?? 27), yParity: feePayerSignature.yParity, } : undefined, nonce: Number(nonce), typeHex: tempo_1.Transaction.toRpcType[tx.type], type: tx.type, }; } function formatTransactionReceipt(receipt) { return (0, transactionReceipt_js_1.formatTransactionReceipt)(receipt); } function formatTransactionRequest(r, action) { const request = r; const account = request.account ? (0, parseAccount_js_1.parseAccount)(request.account) : undefined; if (!(0, Transaction_js_1.isTempo)(request)) return (0, transactionRequest_js_1.formatTransactionRequest)(r, action); if (action) request.calls = request.calls ?? [ { to: r.to || (!r.data || r.data === '0x' ? '0x0000000000000000000000000000000000000000' : undefined), value: r.value, data: r.data, }, ]; if (request.feePayer === true && !request.feePayerSignature) delete request.feeToken; const rpc = tempo_1.TransactionRequest.toRpc({ ...request, type: 'tempo', }); if (action === 'estimateGas') { rpc.maxFeePerGas = undefined; rpc.maxPriorityFeePerGas = undefined; } rpc.to = undefined; rpc.data = undefined; rpc.value = undefined; const [keyType, keyData] = (() => { const type = account && 'keyType' in account ? account.keyType : account?.source; if (!type) return [request.keyType, shimKeyData(request.keyData)]; if (type === 'webAuthn') return ['webAuthn', '0x0578']; if (['p256', 'secp256k1'].includes(type)) return [type, undefined]; return [request.keyType, shimKeyData(request.keyData)]; })(); const keyId = account && 'accessKeyAddress' in account ? account.accessKeyAddress : request.keyId; if (account) rpc.from = account.address; return { ...rpc, ...(request.capabilities ? { capabilities: request.capabilities } : {}), ...(keyData ? { keyData } : {}), ...(keyId ? { keyId } : {}), ...(keyType ? { keyType } : {}), ...(typeof request.feePayer !== 'undefined' ? { feePayer: typeof request.feePayer === 'object' ? (0, parseAccount_js_1.parseAccount)(request.feePayer) : request.feePayer, } : {}), ...('feePayerSignature' in request && request.feePayerSignature !== undefined ? { feePayerSignature: request.feePayerSignature } : {}), }; } function shimKeyData(data) { if (!data) return data; const byteLength = (data.length - 2) / 2; if (byteLength <= 4) return data; return Hex.fromNumber(byteLength, { size: 2 }); } //# sourceMappingURL=Formatters.js.map