UNPKG

@keplr-ewallet/ewallet-sdk-eth

Version:
104 lines 4.67 kB
var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import { toHex } from "viem"; export const toSignableTransaction = (tx) => { const { from } = tx, transaction = __rest(tx, ["from"]); const txType = transaction.type || "0x2"; const baseFields = { to: transaction.to || null, data: transaction.data, gas: transaction.gas, nonce: transaction.nonce, value: transaction.value, }; let signableTransaction; switch (txType) { case "0x0": signableTransaction = Object.assign(Object.assign({}, baseFields), { type: "0x0", gasPrice: transaction.gasPrice }); break; case "0x1": signableTransaction = Object.assign(Object.assign({}, baseFields), { type: "0x1", gasPrice: transaction.gasPrice, accessList: transaction.accessList || [] }); break; case "0x2": default: signableTransaction = Object.assign(Object.assign({}, baseFields), { type: "0x2", maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, maxFeePerGas: transaction.maxFeePerGas }); break; } return signableTransaction; }; export const toTransactionSerializable = ({ chainId, tx, }) => { const convertValue = (value, converter, defaultValue) => (value !== undefined ? converter(value) : defaultValue); const { from } = tx, transaction = __rest(tx, ["from"]); const txType = transaction.type || "0x2"; let chainIdNumber; if (chainId.startsWith("eip155:")) { chainIdNumber = parseInt(chainId.split(":")[1], 10); } else if (chainId.startsWith("0x")) { chainIdNumber = parseInt(chainId, 16); } else { chainIdNumber = parseInt(chainId, 10); } const baseFields = { chainId: chainIdNumber, to: transaction.to || null, data: transaction.data, gas: convertValue(transaction.gas, BigInt), nonce: convertValue(transaction.nonce, (value) => parseInt(value.toString(), 16)), value: convertValue(transaction.value, BigInt) || BigInt(0), }; const typeMapping = { "0x0": "legacy", "0x1": "eip2930", "0x2": "eip1559", }; const mappedType = typeMapping[txType] || "eip1559"; let transactionSerializable; switch (mappedType) { case "legacy": transactionSerializable = Object.assign(Object.assign({}, baseFields), { type: "legacy", gasPrice: convertValue(transaction.gasPrice, BigInt) }); break; case "eip2930": transactionSerializable = Object.assign(Object.assign({}, baseFields), { type: "eip2930", gasPrice: convertValue(transaction.gasPrice, BigInt), accessList: transaction.accessList || [] }); break; case "eip1559": default: transactionSerializable = Object.assign(Object.assign({}, baseFields), { type: "eip1559", maxPriorityFeePerGas: convertValue(transaction.maxPriorityFeePerGas, BigInt), maxFeePerGas: convertValue(transaction.maxFeePerGas, BigInt) }); break; } return transactionSerializable; }; export const toRpcTransactionRequest = (transaction) => { const convertToHexValue = (value) => { if (value === undefined) return undefined; return toHex(value); }; const baseFields = { to: transaction.to, data: transaction.data, value: convertToHexValue(transaction.value), gas: convertToHexValue(transaction.gas), nonce: convertToHexValue(transaction.nonce), }; switch (transaction.type) { case "legacy": return Object.assign(Object.assign({}, baseFields), { type: "0x0", gasPrice: convertToHexValue(transaction.gasPrice) }); case "eip2930": return Object.assign(Object.assign({}, baseFields), { type: "0x1", gasPrice: convertToHexValue(transaction.gasPrice), accessList: transaction.accessList }); case "eip1559": default: return Object.assign(Object.assign({}, baseFields), { type: "0x2", maxFeePerGas: convertToHexValue(transaction.maxFeePerGas), maxPriorityFeePerGas: convertToHexValue(transaction.maxPriorityFeePerGas) }); } }; //# sourceMappingURL=transaction.js.map