UNPKG

@okxweb3/coin-kaia

Version:

An kaia SDK for building Web3 wallets and applications.

175 lines 6.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KaiaWallet = void 0; const coin_base_1 = require("@okxweb3/coin-base"); 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 = coin_base_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 (coin_base_1.BigNumber.isBigNumber(data)) { n = data; } else { n = new coin_base_1.BigNumber(data); } return coin_base_1.base.toBigIntHex(n); } convert2KaiaTxParam(data) { if (!data.gasPrice || !data.gasLimit) { throw new Error('invalid parameter'); } const param = { kaiaTxType: data.kaiaTxType, 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)(coin_base_1.base.fromHex(privateKey), 32); } if (param.data.senderRawTx) { const w = new v6_1.Wallet(param.privateKey); return await w.signTransactionAsFeePayer(param.data.senderRawTx); } else if (param.data.kaiaTxType) { const w = new v6_1.Wallet(param.privateKey); const txParams = this.convert2KaiaTxParam(param.data); const validation = await this.validAddress({ address: txParams.to, }); if (!validation.isValid) { return Promise.reject(coin_base_1.ValidAddressError); } if (txParams.contractAddress) { const validation = await this.validAddress({ address: txParams.contractAddress, }); if (!validation.isValid) { return Promise.reject(coin_base_1.ValidAddressError); } } 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 await 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)(coin_base_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(coin_base_1.base.toHex((0, coin_ethereum_1.keccak256)(coin_base_1.base.fromHex(txHex)), true)); } async validSignedTransaction(param) { return Promise.reject(coin_base_1.validSignedTransactionError); } } exports.KaiaWallet = KaiaWallet; //# sourceMappingURL=KaiaWallet.js.map