How to use
Installation
yarn add @xchainjs/xchain-ethereum
Following peer dependencies have to be installed into your project. These are not included in ethers
.
yarn add @xchainjs/xchain-evm @xchainjs/xchain-evm-providers @xchainjs/xchain-client @xchainjs/xchain-crypto @xchainjs/xchain-util axios ethers
Ethereum Client Testing
yarn install
yarn test
Basic usage examples
Connect wallet to new Ethereum client and check address and balances
Network default is Mainnet
// Imports
import fs = require('fs');
import { Client } from "@xchainjs/xchain-ethereum"
//Connect wallet, validate address and check balance
const connectWallet = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let address = ethClient.getAddress()
let isValid = ethClient.validateAddress(address)
console.log(address)
if(isValid === true){
try {
const balance = await ethClient.getBalance(address)
let assetAmount = (baseToAsset(balance[0].amount)).amount()
console.log(`Adress: ${address} with balance ${assetAmount}`)
} catch (error) {
console.log(`Caught: ${error} `)
}
} else {
console.log(`Address: ${address} is invalid`)
}
}
Transfer ethereum using ethereum client
Create new Ethereum Client instance
Convert amount to transfer to baseAmount. ETH_DECIAL = 18
Build Transaction.
Transfer function returns txid as an object promise
//Imports
import { assetToBase, baseToAsset, assetAmount } from "@xchainjs/xchain-util"
// Transfer ethereum other TxParams > feeOptionKey?, gasLimit?, gasPrice?
const transferEth = async () => {
let amountToTransfer = 0.001
let recipient = await getRecipientAddress()
let phrase = "phrase"
const ethClient = new Client({phrase})
let amount = assetToBase(assetAmount(amountToTransfer, ETH_DECIMAL))
console.log("Building transaction")
try {
const txid = await ethClient.transfer({
"amount": amount,
"recipient": recipient,
"walletIndex":0,
"asset": AssetETH,
"memo": "memo"
})
console.log(`Transaction sent: ${txid}`)
return txid
} catch (error) {
console.log(`Caught: ${error} `)
}
}
Get transaction Data & transaction History
Use functions to query ethereum explorer
getTransactionData()
getTransactions()
// Retrieve transaction data for a particular hash
const transactionData = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let hash = "insert hash"
try {
const txData = await ethClient.getTransactionData(hash)
console.log(`Transaction data ${JSON.stringify(txData)}`)
} catch (error) {
console.log(`Caught: ${error} `)
}
}
// Retrieve transaction history for a particular address
const transactionHistory = async () => {
let phrase = "phrase"
const ethClient = new Client({ phrase})
let Address = ethClient.getAddress()
try {
const txHistory = await ethClient.getTransactions({address: Address})
console.log(`Found ${txHistory.total.toString()}`)
txHistory.txs.forEach(tx => console.log(tx.hash))
} catch (error) {
console.log(`Caught: ${error} `)
}
}
Get transfer Fees estimations
Retrieve estimated gas prices and gas limits from ethereum client\
// Retrieve fee estimations from transaction parameters
const feeEstimations = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let amountToTransfer = 0.001
let amount = assetToBase(assetAmount(amountToTransfer, ETH_DECIMAL))
let recipient = "insert address"
try {
const fees = await ethClient.estimateFeesWithGasPricesAndLimits({
"amount": amount,
"recipient": recipient
})
console.log(`Fees average : ${baseToAsset(fees.fees.average).amount()}, gas limits: ${fees.gasLimit}, gas prices average: ${baseToAsset(fees.gasPrices.average).amount()}`)
} catch (error) {
console.log(`Caught: ${error} `)
Estimate Call & Approve
Create a new Eth Client instance
Call the function with correct parameters
// Call a contract function
const estimateCall = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let address = ethClient.getAddress()
let contractAddress = "insert contract function"
let abi = "insert abi"
let funcName = "insert function name"
try {
const callEstimate = await ethClient.estimateCall({
"abi": abi,
"contractAddress": contractAddress,
"funcName": funcName,
"walletIndex": 0,
})
console.log(`Call estimate: ${JSON.stringify(callEstimate)}`) // Returns Big number
} catch (error) {
}
}
// Check Allowance
const isApproved = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let address = ethClient.getAddress()
let contractAddress = "insert contract function"
let amountToTransfer = 0.001
let amount = assetToBase(assetAmount(amountToTransfer, ETH_DECIMAL))
try {
const isApproved = await ethClient({
"contractAddress": contractAddress,
"amount": amount,
"spenderAddress": address,
})
console.log(`Allowed :${isApproved}`) // Boolean true / false
} catch (error) {
console.log(`Caught: ${error}` )
}
}
Get Explorer Data
Use helper functions to retrieve explorer interface or explorer data on addresses or txid's
const explorerUrl = async () => {
let phrase = "phrase"
const ethClient = new Client({phrase})
let address = ethClient.getAddress()
let hash = "0xa4707105d861fab959421203ef299d6ca5131067e58812062b2aa94494047f06"
try {
const etherscanInterface = ethClient.getEtherscanProvider() // returns the current etherjs etherscan interface
console.log(etherscanInterface)
const explorerAddressUrl = ethClient.getExplorerAddressUrl(address)
console.log(`Etherscan url: ${explorerAddressUrl} for address: ${address} `)
const explorerTxUrl = ethClient.getExplorerTxUrl(hash)
console.log(`Explorer url: ${explorerTxUrl} for tx id:${hash} `)
} catch (error) {
console.log(`Caught error: ${error}`)
}
}