@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.
77 lines (71 loc) • 1.83 kB
JavaScript
import Web3 from 'web3';
import { chainsTypeMap } from '../constant';
const Evm = {
getChainId: ({ provider }) => {
return new Promise((resolve, reject) => {
new Web3(provider).eth
.getChainId()
.then((chainId) => {
resolve(chainId);
})
.catch((e) => {
reject(e);
});
});
},
switchChain: ({ provider, chainId }) => {
return new Promise((resolve, reject) => {
provider
.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId }],
})
.then(() => {
resolve();
})
.catch((e) => {
reject(e);
});
});
},
sendTransaction: ({ provider, chainName, payload }) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
const currentChainId = await Evm.getChainId({ provider });
if (currentChainId !== chainsTypeMap.EVM[chainName].networkId) {
await Evm.switchChain({
provider,
chainId: chainsTypeMap.EVM[chainName].chainId,
});
}
} catch (e) {
reject(e);
}
new Web3(provider).eth
.sendTransaction(payload, (error, hash) => {
if (!hash) {
reject(error);
}
resolve({ hash });
})
.catch((e) => {
reject(e);
});
});
},
signMessage: ({ provider, payload }) => {
return new Promise((resolve, reject) => {
const { message, account } = payload;
new Web3(provider).eth.personal
.sign(message, account)
.then((signature) => {
resolve(signature);
})
.catch((e) => {
reject(e);
});
});
},
};
export default Evm;