UNPKG

@okxweb3/coin-kaia

Version:

An kaia SDK for building Web3 wallets and applications.

352 lines (287 loc) 12.2 kB
# @okxweb3/coin-kaia kaia SDK is used to interact with the Ethereum blockchain or Evm blockchains, it contains various functions can be used to web3 wallet. ## Installation ### Npm To obtain the latest version, simply require the project using npm : ```shell npm install @okxweb3/coin-kaia ``` ## Usage ### Generate Private Key ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); // get random key let randomPrivateKey = await wallet.getRandomPrivateKey(); // get derived key let params = { mnemonic: "stool trumpet fame umbrella bench provide battle toward story fruit lock view", chainPath: "m/44'/60'/0'/0/1" } let derivePrivateKey = await wallet.getDerivedPrivateKey(params); ``` ### Private Key Derivation ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); let mnemonic = "stool trumpet fame umbrella bench provide battle toward story fruit lock view" let param = { mnemonic: mnemonic, hdPath: "m/44'/60'/0'/0/0" }; let privateKey = await wallet.getDerivedPrivateKey(param) ``` ### Generate Address ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); let params = { privateKey: '0x9fe340274262b4a3bec88e107b09f784d5f8c27bfe6ff178019ed25130a750e1' } let newAddress = await wallet.getNewAddress(params); ``` ### Verify Address ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); let params = { address: "0x01560cd3bac62cc6d7e6380600d9317363400896" }; let valid = await wallet.validAddress(60, params); ``` ### Sending a Transaction Use the signTransaction function to get the signed hex to broadcast #### Example ```javascript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); let signParams = { privateKey: '0x49c0722d56d6bac802bdf5c480a17c870d1d18bc4355d8344aa05390eb778280', data: { to: "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", value: new BigNumber(0), nonce: 5, gasPrice: new BigNumber(100 * 1000000000), gasLimit: new BigNumber(21000), chainId: 42 } } let tx = await wallet.signTransaction(60, signParams) ``` #### Input Params ```typescript export type EthTxParams ={ from?: string, to?: string, value: BigNumber, nonce: number, contractAddress?: string // contract address gasPrice?: BigNumber, gasLimit: BigNumber, data?: string; chainId?: number; // default: 1 // Typed-Transaction features // null, 1:legacy transaction, 2:eip1559 transaction type?: number | null; // EIP-2930; Type 1 & EIP-1559; Type 2 // accessList?: AccessListish; // EIP-1559; Type 2 maxPriorityFeePerGas?: BigNumber; maxFeePerGas?: BigNumber; } ``` #### Support Transaction Types Params ##### Native Coin Transfer ```json { "to": "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", "value": "0x1", "nonce": "0x1", "gasPrice": "0x1", "gasLimit": "0x5208", "chainId": "0x2a" } ``` | Name | Type | Description | |:-------------------|:--------------------|:-------------------------------------------------------------------| | `gasLimit` | `string` | The transaction's gas limit. | | `gasPrice` | `string` | The transaction's gas price. | | `nonce` | `string` | The transaction's nonce. | | `to` | `string` | The transaction's the address is sent to. | | `value` | `string` | The amount of Ether sent. | | `chainId` | `string` | The id number of the chain, default value is 1, means eth mainnet. | ##### Token Transfer ```json { "contractAddress": "0x45Ef35936F0EB8F588Eb9C851C5B1C42B22e61EC", "to": "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", "value": "0x1", "nonce": "0x8", "gasPrice": "0x174876e800", "gasLimit": "0x5208", "chainId": "0x2a" } ``` | Name | Type | Description | |:-------------------|:------------|:-------------------------------------------------------------------| | `contractAddress` | `string` | The address of a contract. | | `gasLimit` | `string` | The transaction's gas limit. | | `gasPrice` | `string` | The transaction's gas price. | | `nonce` | `string` | The transaction's nonce. | | `to` | `string` | The transaction's the address is sent to. | | `value` | `string` | The amount of Ether sent. | | `chainId` | `string` | The id number of the chain, default value is 1, means eth mainnet. | ##### Data ```json { "to": "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", "value": "0x0", "nonce": "0x5", "gasPrice": "0x174876e800", "gasLimit": "0x5208", "chainId": "0x2a", "data": "0xa9059cbb000000000000000000000000ee7c7f76795cd0cab3885fee6f2c50def89f48a30000000000000000000000000000000000000000000000000000000000002710" } ``` | Name | Type | Description | |:------------------|:---------------------|:-------------------------------------------------------------------| | `gasLimit` | `string` | The transaction's gas limit. | | `gasPrice` | `string` | The transaction's gas price. | | `nonce` | `string` | The transaction's nonce. | | `to` | `string` | The transaction's the address is sent to. | | `value` | `string` | The amount of Ether sent. | | `chainId` | `string` | The id number of the chain, default value is 1, means eth mainnet. | | `data` | `string` | The data of contract interface. | ##### EIP-1559 Transaction ```json { "gasPrice": "0xa5c681d00", "gasLimit": "0xa410", "to": "0x35b2438d33c7dc449ae9ffbda14f56dc39a4c6b8", "value": "0xde0b6b3a7640000", "nonce": "0xb", "maxFeePerGas": "0x826299e00", "maxPriorityFeePerGas": "0x77359400", "chainId": "0x1", "type": 2 } ``` | Name | Type | Description | |:-----------------------|:---------|:-------------------------------------------------------------------| | `gasLimit` | `string` | The transaction's gas limit. | | `gasPrice` | `string` | The transaction's gas price. | | `nonce` | `string` | The transaction's nonce. | | `to` | `string` | The transaction's the address is sent to. | | `value` | `string` | The amount of Ether sent. | | `chainId` | `string` | The id number of the chain, default value is 1, means eth mainnet. | | `data` | `string` | The data of contract interface. | | `maxFeePerGas` | `string` | The transaction's maxFeePerGas. | | `maxPriorityFeePerGas` | `string` | The transaction's maxPriorityFeePerGas, means miner tips. | | `type` | `number` | must be 2, means eip1559 transaction fee | #### Sign Message **Different transaction types enum values** ```typescript enum MessageTypes { ETH_SIGN = 0, PERSONAL_SIGN = 1, TYPE_DATA_V1 = 2, TYPE_DATA_V3 = 3, TYPE_DATA_V4 = 4, } ``` ##### ETH_SIGN ```typescript let signParams: SignTxParams = { privateKey: privateKey, data: { type: MessageTypes.ETH_SIGN, message: Buffer.from(ethUtil.stripHexPrefix("0x879a053d4800c6354e76c7985a865d2922c82fb5b3f4577b2fe08b998954f2e0"), "hex") } } ``` ##### PERSONAL_SIGN ```typescript let signParams: SignTxParams = { privateKey: privateKey, data: { type: MessageTypes.PERSONAL_SIGN, message: "Example `personal_sign` message" } }; ``` ##### TYPE_DATA_V1 ```typescript let param = { privateKey: '0x49c0722d56d6bac802bdf5c480a17c870d1d18bc4355d8344aa05390eb778280', data: { type: 2, message: '[{"type":"string","name":"Message","value":"Hi, Alice!"},{"type":"uint32","name":"A number","value":"1337"}]' } } ``` ##### TYPE_DATA_V3 ```typescript let param = { privateKey: '0x49c0722d56d6bac802bdf5c480a17c870d1d18bc4355d8344aa05390eb778280', data: { type: 3, message: '{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"primaryType":"Mail","domain":{"name":"Ether Mail","version":"1","chainId":42,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"from":{"name":"Cow","wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},"to":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"},"contents":"Hello, Bob!"}}' } } ``` ##### TYPE_DATA_V4 ```typescript let param = { privateKey: '0x49c0722d56d6bac802bdf5c480a17c870d1d18bc4355d8344aa05390eb778280', data: { type: 4, message: '{"domain":{"chainId":"42","name":"Ether Mail","verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC","version":"1"},"message":{"contents":"Hello, Bob!","from":{"name":"Cow","wallets":["0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826","0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"]},"to":[{"name":"Bob","wallets":["0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB","0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57","0xB0B0b0b0b0b0B000000000000000000000000000"]}]},"primaryType":"Mail","types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Group":[{"name":"name","type":"string"},{"name":"members","type":"Person[]"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person[]"},{"name":"contents","type":"string"}],"Person":[{"name":"name","type":"string"},{"name":"wallets","type":"address[]"}]}}' } } ``` #### Signing with a hardware wallet ##### Build raw transaction ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); let ethTxParams = { to: "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", value: 1, nonce: 5, gasPrice: "100000000000", gasLimit: 21000, chainId: 42, }; let signParams = { data: ethTxParams }; const rawTx = await wallet.getHardWareRawTransaction(signParams); console.info(rawTx); ``` **input param** ```typescript let param = { data: { to: "0xee7c7f76795cd0cab3885fee6f2c50def89f48a3", value: 1, nonce: 5, gasPrice: "100000000000", gasLimit: 21000, chainId: 42, } } ``` ##### Build signed transaction ```typescript import { EthWallet } from "@okxweb3/coin-kaia" let wallet = new EthWallet(); const hardwareRawTransactionParam = { raw: rawTx, r: r, s: s, v: v, } const signedTx = await wallet.getHardWareSignedTransaction(hardwareRawTransactionParam); ``` ## License [MPL-2.0](<https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)>)