UNPKG

@okwallet/extension

Version:

OKX Wallet provides official SDK packages of multiple chains including [Ethereum](./wallet), [Aptos](./aptos-api), [Tron](./tron-api) and Solana. Developers can interact with different on-chain projects through OKX Wallet SDK.

479 lines (389 loc) 9.24 kB
# Introduction OKX Wallet provides official SDK packages of multiple chains including [Ethereum](./wallet), [Aptos](./aptos-api), [Tron](./tron-api) and Solana. Developers can interact with different on-chain projects through OKX Wallet SDK. ## Installation ### Yarn ```javascript $ yarn add @okwallet/extension ``` ### npm ```javascript $ npm install --save @okwallet/extension // https://www.npmjs.com/package/@okwallet/extension ``` ## Usage ### ES6 ```javascript import okxWeb3 from '@okwallet/extension'; console.log(okxWeb3); ``` ## Basic APIs ### init The initial access into OKX Wallet extension. You can achieve the following two functions with this method: 1. Connecting to wallet 2. Monitoring wallet account changes #### Error Information All errors follow this interface: ```ts interface ProviderRpcError extends Error { message: string; code: number; data?: unknown; } ``` #### Returned Error Example ```js { code: 4001; message: 'Tx Signature: User denied transaction signature.'; stack: 'Error: Tx Signature: User denied transaction signature.'; } ``` #### Example ```javascript const success = (wallet) => { // return wallet account information console.log(wallet); }; const changed = (wallet) => { // return wallet account information // if there is no wallet is connecting, it will be null console.log(wallet); }; const error = (error) => { // Error returned when rejected console.error(error); }; const uninstall = () => {}; okxWeb3 .init({ success, changed, error, uninstall, }) .then((wallet) => { // return wallet account information console.log(wallet); }) .catch((error) => { // Error returned when rejected console.error(error); }); ``` ### disconnect Disconnect with wallet ```javascript import okWeb3 from '@okwallet/extension'; // only support extension await okWeb3.disconnect(); ``` ### addListener ```javascript import okWeb3 from '@okwallet/extension'; // add okWeb3.addListener('connect', (isConnected) => { console.log(isConnected); // boolean }); okWeb3.addListener('disconnect', () => {}); okWeb3.addListener('connectWallet', (wallet) => { console.log(wallet); // [ // { // keyringName: 'WalletA', // name: 'Account01', // address: [ // { // address: '0x81Fc6F6E44a2313743bCAA060681d24597aDbDfB', // coinType: '60', // name: 'okc', // } // ] // } // ... // ] }); okWeb3.addListener('walletChanged', (wallet) => { console.log(wallet); }); okWeb3.addListener('accountChanged', (wallet) => { console.log(wallet); }); okWeb3.addListener('networkChanged', (chainId) => { console.log(chainId); }); okWeb3.addListener('streamFailed', () => {}); ``` ### removeListener ```javascript import okWeb3 from '@okwallet/extension'; const changedCb = (wallet) => { console.log(wallet); }; // add okWeb3.addListener('walletChanged', changedCb); // remove okWeb3.removeListener('walletChanged', changedCb); ``` ### getAddress CHAINS objects are the correspondence between the chain and its name: | Key | Value | | ----------- | ----------- | | BITCOIN | bitcoin | | ETHEREUM | ethereum | | APTOS | aptos | | OKC | okexchain | | BSC | bsc | | TRON | tron | | SOLANA | solana | | POLYGON | polygon | | AVAX | avax | | FTM | ftm | | ARBITRUM | arbitrum | | OPTIMISM | optimism | | CRONOS | cronos | | KLAYTN | klaytn | | KCC | kcc | | METIS | metis | | BOBA | boba | | GNOSIS | gnosis | | RONIN | ronin | | MOONRIVER | moonriver | | MOONBEAM | moonbeam | | HARMONY | harmony | | LITECOIN | litecoin | | BITCOINCASH | bitcoincash | | BITCOINSV | bitcoinsv | | ETHW | ethw | | ETHF | ethf | ```javascript import okWeb3 from '@okwallet/extension'; const { CHAINS } = okWeb3; // get solana chain address okWeb3 .getAddress(CHAINS.SOLANA) .then((addr) => { // return solana address console.log(addr); }) .catch((error) => { // Error returned when rejected console.log(error); }); // get addresses of all chains okWeb3 .getAddress() .then((addrMap) => { // return chain-address map console.log(addrMap); }) .catch((error) => { // Error returned when rejected console.log(error); }); ``` ### Send Transaction #### EVM ```javascript import okWeb3 from '@okwallet/extension'; const { CHAINS } = okWeb3; const payload = { from: '0x2f00171409b0d4f08da9abe0b53815fa3c5c6596', to: '0xd8E06c62ff0F6816487973d6EB7018C854599931', data: '0x', value: '0x00', }; okWeb3 .sendTransaction({ chainName: CHAINS.OKC, payload }) .then((res) => { console.log(res.hash); }) .catch((error) => { console.log(error); }); ``` #### Solana ```js import okWeb3 from '@okwallet/extension'; import { Transaction, SystemProgram, LAMPORTS_PER_SOL, PublicKey, } from '@solana/web3.js'; const { CHAINS } = okWeb3; const transaction = new Transaction({ feePayer: okxwallet.solana.publicKey, }).add( SystemProgram.transfer({ fromPubkey: okxwallet.solana.publicKey, toPubkey: new PublicKey('CS8ifB68oddKXdW87RAyrxFSoz1DMMcX9WsWeAgbYDCC'), lamports: LAMPORTS_PER_SOL / 1000, }) ); okWeb3 .sendTransaction({ chainName: CHAINS.SOLANA, payload: { transaction } }) .then((res) => { console.log(res.hash); }) .catch((error) => { console.log(error); }); ``` #### Aptos ```js const { CHAINS } = okWeb3; const payload = { from: '0x2f7a44297ab64890dfb618202dd552033551b71ee9b36ad7d8b2ff8b805e0281', function: '0x1::aptos_account::transfer', arguments: [ '0xd8a97d57565ca32babc4fca6498dbc3599ee4c23690287f76941df23c6c3aca3', '500000', ], }; okWeb3 .sendTransaction({ chainName: CHAINS.APTOS, payload }) .then((res) => { console.log(res.hash); }) .catch((error) => { console.log(error); }); ``` ### Sign Personal Message #### EVM ```javascript import okWeb3 from '@okwallet/extension'; const { CHAINS } = okWeb3; const payload = { message: 'test message', account: '0xec92d8ea11587892f0516c19dcb1f8fd72993584', }; okWeb3 .signMessage({ chainName: CHAINS.OKC, payload }) .then((signature) => { console.log(signature); }) .catch((error) => { console.log(error); }); ``` #### Solana ```js import okWeb3 from '@okwallet/extension'; const { CHAINS } = okWeb3; const payload = { message: 'test message', }; okWeb3 .signMessage({ chainName: CHAINS.SOLANA, payload }) .then((signature) => { console.log(signature); }) .catch((error) => { console.log(error); }); ``` #### Aptos ```js import okWeb3 from '@okwallet/extension'; const { CHAINS } = okWeb3; const payload = { message: 'test message', nonce: 1, }; okWeb3 .signMessage({ chainName: CHAINS.APTOS, payload }) .then((signature) => { console.log(signature); }) .catch((error) => { console.log(error); }); ``` --- ### Aptos Special methods for Aptos are shown below. Methods of okWeb3.aptos objects are required to call Aptos chain. #### Register Coin ```javascript import okWeb3 from '@okwallet/extension'; okWeb3.aptos .registerAptosCoin({ contractAddress: '0xa2eda21a58856fda86451436513b867c97eecb4ba099da5775520e0f7492e852::coin::T', }) .then((hash) => { console.log(hash); }) .catch((error) => { console.log(error); }); ``` #### Acquire Transaction Status by Hash ```javascript import okWeb3 from '@okwallet/extension'; okWeb3.aptos .getAptosTransaction( '0x042d2a5ce883e4c8e13351b9053ec0ec86728a88ba07331cd5389816930bdb31' ) .then((status) => { console.log(status); }) .catch((error) => { console.log(error); }); ``` #### Acquire Balance - Main chain tokens ```javascript import okWeb3 from '@okwallet/extension'; okWeb3.aptos .getAptosBalance({ address: '0xcd30fbbda98b2aed026772c13e5ed90a7f056b589ef9e78cd96415e1af12451c', currency: '0x1::aptos_coin::AptosCoin', }) .then((value) => { alert(value); }) .catch((error) => { console.log(error); }); ``` - Token ```javascript import okWeb3 from '@okwallet/extension'; okWeb3.aptos .getAptosBalance({ address: '0x253869f4b71ac5786c49c42b51faa0d0a58ff551cb9a7c267aaaa42018c89dd7', currency: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDT', }) .then((value) => { console.log(value); }) .catch((error) => { console.log(error); }); ``` ### Check and Register Coin ```javascript import okWeb3 from '@okwallet/extension'; okWeb3.aptos .checkAndRegAptosCoin({ address: '0x253869f4b71ac5786c49c42b51faa0d0a58ff551cb9a7c267aaaa42018c89dd7', currency: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDT', }) .then((res) => { const { registered, hash } = res; console.log(registered); if (!registered) { console.log(res.hash); } }) .catch((error) => { console.log(error); }); ```