@keplr-ewallet/ewallet-sdk-eth
Version:
104 lines • 4.67 kB
JavaScript
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