import { ethers } from 'ethers';
const provider = new ethers.providers.JsonRpcProvider, provider);
const signer = new ethers.Wallet(youPrivateKeyString, provider);
const account = ethers
  .utils
  .HDNode
  .fromMnemonic(yourMnemonicPhrase)
  .derivePath(`m/44' /60' /0' /0/${yourSelectedAccount}`);
const signer = new ethers.Wallet(ccount, provider);

interface GetBlockHeightsDto {
  chainId: number;
  blockHeight: string;
  startDate: string;
  endDate: string;
  pageNumber?: number;
  pageSize?: number; //The parameter *quoteCurrency* is set to *USD* by default.
}

await Moralis.Plugins.covalent.getHistoricalPortfolioValueOverTime(GetHistoricalPortfolioValueOverTimeDto);

interface ApiPagination {
  pageNumber?: number;
  pageSize?: number;
}

await Moralis.Plugins.covalent.getAllContractMetadata(GetAllContractMetaDto);

### Available chains This plugins works with 3 different blockchains (chain):

* Ethereum (“eth”)
* Binance Smart Chain (“bsc”)
* Polygon (“polygon”)

## Available functions The following functions are available:

* **getSupportedTokens({ chain: chain })**

async function getSupportedTokens() {
  const tokens = await Moralis.Plugins.oneInch.getSupportedTokens({
    chain: 'bsc', // The blockchain you want to use (eth/bsc/polygon)
  });
  console.log(tokens);
}

* **quote({ chain: chain, fromTokenAddress: fromTokenAddress, toTokenAddress: toTokenAddress, amount: tokenAmount })**

async function getQuote() {
  const quote = await Moralis.Plugins.oneInch.quote({
    chain: 'bsc', // The blockchain you want to use (eth/bsc/polygon)
    fromTokenAddress: '0x0da6ed8b13214ff28e9ca979dd37439e8a88f6c4', // The token you want to swap
    toTokenAddress: '0x6fd7c98458a943f469e1cf4ea85b173f5cd342f4', // The token you want to receive
    amount: 1000,
  });
  console.log(quote);
}

* **hasAllowance({ chain: chain, fromTokenAddress: fromTokenAddress, amount: tokenAmount, fromAddress: user })**

async function hasAllowance() {
  const allowance = await Moralis.Plugins.oneInch.hasAllowance({
    chain: 'bsc', // The blockchain you want to use (eth/bsc/polygon)
    fromTokenAddress: '0x0da6ed8b13214ff28e9ca979dd37439e8a88f6c4', // The token you want to swap
    fromAddress: '0x6217e65d864d77DEcbFF0CFeFA13A93f7C1dD064', // Your wallet address
    amount: 1000,
  });
  console.log(`The user has enough allowance: ${allowance}`);
}

* **approve({ chain: chain, tokenAddress: fromTokenAddress, fromAddress: user })**

async function approve() {
  await Moralis.Plugins.oneInch.approve({
    chain: 'bsc', // The blockchain you want to use (eth/bsc/polygon)
    tokenAddress: '0x0da6ed8b13214ff28e9ca979dd37439e8a88f6c4', // The token you want to swap
    fromAddress: '0x6217e65d864d77DEcbFF0CFeFA13A93f7C1dD064', // Your wallet address
  });
}

* **swap{ chain: chain, fromTokenAddress: fromTokenAddress, toTokenAddress: toTokenAddress, amount: tokenAmount, fromAddress: user, slippage: splippage }**

async function swap() {
  const receipt = await Moralis.Plugins.oneInch.swap({
    chain: 'bsc', // The blockchain you want to use (eth/bsc/polygon)
    fromTokenAddress: '0x0da6ed8b13214ff28e9ca979dd37439e8a88f6c4', // The token you want to swap
    toTokenAddress: '0x6fd7c98458a943f469e1cf4ea85b173f5cd342f4', // The token you want to receive
    amount: 1000,
    fromAddress: '0x6217e65d864d77DEcbFF0CFeFA13A93f7C1dD064', // Your wallet address
    slippage: 1,
  });
  console.log(receipt);
}

### Transaction fee

There is a 1% transaction fee on each swap.