@okxweb3/coin-kaia
Version:
An kaia SDK for building Web3 wallets and applications.
164 lines • 6.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KaiaWallet = void 0;
const coin_base_1 = require("@okxweb3/coin-base");
const crypto_lib_1 = require("@okxweb3/crypto-lib");
const coin_ethereum_1 = require("@okxweb3/coin-ethereum");
const address_1 = require("@ethersproject/address");
const transactions_1 = require("@ethersproject/transactions");
const api_1 = require("./api");
const v6_1 = require("./v6");
const js_ext_core_1 = require("@kaiachain/js-ext-core");
class KaiaWallet extends coin_ethereum_1.EthWallet {
async getNewAddress(param) {
let pri = param.privateKey;
let ok = (0, api_1.validPrivateKey)(pri);
if (!ok) {
throw new Error('invalid key');
}
try {
const privateKey = crypto_lib_1.base.fromHex(pri.toLowerCase());
(0, coin_base_1.assertBufferLength)(privateKey, 32);
let wallet = new v6_1.Wallet(pri);
return Promise.resolve({
address: await wallet.getAddress(),
publicKey: wallet.signingKey.publicKey,
});
}
catch (e) {
}
return Promise.reject(coin_base_1.NewAddressError);
}
async validPrivateKey(param) {
let isValid = (0, api_1.validPrivateKey)(param.privateKey);
const data = {
isValid: isValid,
privateKey: param.privateKey
};
return Promise.resolve(data);
}
async validAddress(param) {
let isValid = false;
let result;
try {
result = (0, address_1.getAddress)(param.address);
isValid = true;
}
catch (e) {
isValid = false;
}
return Promise.resolve({
isValid: isValid,
address: result
});
}
convert2HexString(data) {
let n;
if (crypto_lib_1.BigNumber.isBigNumber(data)) {
n = data;
}
else {
n = new crypto_lib_1.BigNumber(data);
}
return crypto_lib_1.base.toBigIntHex(n);
}
convert2KaiaTxParam(data) {
if (!data.gasPrice || !data.gasLimit) {
throw new Error("invalid parameter");
}
const param = {
kaiaTxType: data.kaiaTxType,
feePayer: data.feePayer,
senderRawTx: data.senderRawTx,
from: data.from,
to: data.to,
value: this.convert2HexString(data.value || 0),
nonce: data.nonce,
contractAddress: data.contractAddress,
gasPrice: this.convert2HexString(data.gasPrice || 0),
gasLimit: this.convert2HexString(data.gasLimit || 0),
data: data.data,
humanReadable: data.humanReadable,
codeFormat: data.codeFormat,
key: data.key,
chainId: this.convert2HexString(data.chainId || 1),
type: data.type || 0,
maxPriorityFeePerGas: this.convert2HexString(data.maxPriorityFeePerGas || 0),
maxFeePerGas: this.convert2HexString(data.maxFeePerGas || 0),
feeRatio: data.feeRatio
};
return param;
}
async signTransaction(param) {
try {
const privateKey = param.privateKey;
if (privateKey) {
(0, coin_base_1.assertBufferLength)(crypto_lib_1.base.fromHex(privateKey), 32);
}
if (param.data.senderRawTx) {
const w = new v6_1.Wallet(param.privateKey);
return w.signTransactionAsFeePayer(param.data.senderRawTx);
}
else if (param.data.kaiaTxType) {
const w = new v6_1.Wallet(param.privateKey);
const txParams = this.convert2KaiaTxParam(param.data);
let tx = {
type: txParams.kaiaTxType,
chainId: txParams.chainId,
from: txParams.from,
nonce: txParams.nonce,
to: txParams.to,
data: txParams.data,
humanReadable: txParams.humanReadable,
codeFormat: txParams.codeFormat,
key: txParams.key,
value: txParams.value,
gasLimit: txParams.gasLimit,
gasPrice: txParams.gasPrice,
maxFeePerGas: txParams.maxFeePerGas,
maxPriorityFeePerGas: txParams.maxPriorityFeePerGas,
feeRatio: txParams.feeRatio,
};
let pTx = await w.populateTransaction(tx);
return Promise.resolve(w.signTransaction(pTx));
}
else {
return super.signTransaction(param);
}
}
catch (e) {
return Promise.reject(coin_base_1.SignTxError);
}
}
getAddressByPublicKey(param) {
return Promise.resolve((0, transactions_1.computeAddress)(crypto_lib_1.base.fromHex(param.publicKey)));
}
async getMPCRawTransaction(param) {
return Promise.reject(coin_base_1.GetMpcRawTransactionError);
}
async getMPCTransaction(param) {
return Promise.reject(coin_base_1.GetMpcTransactionError);
}
async getMPCRawMessage(param) {
return Promise.reject(coin_base_1.GetMpcRawTransactionError);
}
async getMPCSignedMessage(param) {
return Promise.reject(coin_base_1.GetMpcTransactionError);
}
async getHardWareRawTransaction(param) {
return Promise.reject(coin_base_1.GetHardwareRawTransactionError);
}
async getHardWareSignedTransaction(param) {
return Promise.reject(coin_base_1.GetHardwareSignedTransactionError);
}
async calcTxHash(param) {
const signedTx = js_ext_core_1.KlaytnTxFactory.fromRLP(param.data);
let txHex = signedTx.txHashRLP();
return Promise.resolve(crypto_lib_1.base.toHex((0, coin_ethereum_1.keccak256)(crypto_lib_1.base.fromHex(txHex)), true));
}
async validSignedTransaction(param) {
return Promise.reject(coin_base_1.validSignedTransactionError);
}
}
exports.KaiaWallet = KaiaWallet;
//# sourceMappingURL=KaiaWallet.js.map