@kaiachain/viem-ext
Version:
viem extension for kaia blockchain
37 lines (36 loc) • 1.47 kB
JavaScript
import { KlaytnTxFactory, isFeePayerSigTxType, isKlaytnTxType, } from '@kaiachain/js-ext-core';
import { serializeTransaction as serializeTransactionDefault } from 'viem';
import { convertSignatureToKaiaFormat } from './utils.js';
// move this to helper
export const serializers = {
transaction: serializeTransaction,
};
export function serializeTransaction(transaction, signature) {
return serializeTransactionKaia(transaction, signature);
}
export function serializeTransactionKaia(transaction, signature) {
if (!isKlaytnTxType(transaction.type)) {
return serializeTransactionDefault(transaction, signature);
}
const klaytnTx = KlaytnTxFactory.fromObject(transaction);
if (!signature) {
return klaytnTx.sigRLP();
}
klaytnTx.addSenderSig(convertSignatureToKaiaFormat(signature, Number(transaction.chainId)));
if (isFeePayerSigTxType(klaytnTx.type)) {
return klaytnTx.senderTxHashRLP();
}
return klaytnTx.txHashRLP();
}
export function serializeTransactionForFeePayerKaia(expectedFeePayer) {
return (transaction, signature) => {
const txObj = { ...transaction };
txObj.feePayer = expectedFeePayer;
const klaytnTx = KlaytnTxFactory.fromObject(txObj);
if (!signature) {
return klaytnTx.sigFeePayerRLP();
}
klaytnTx.addFeePayerSig(convertSignatureToKaiaFormat(signature, Number(txObj.chainId)));
return klaytnTx.txHashRLP();
};
}