Features

code

Claim function

const handleClaim = async () => {
  const provider: any = await detectEthereumProvider()
  const web3Provider = new providers.Web3Provider(provider)

  const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())

  const tx = await vestingInstance
    .claimVestedTokens()
    .then(() => {
      toggleSuccessModal()
    })
    .catch((e: any) => {
      console.log(e)
    })
    .finally(() => {
      setTimeout(function () {
        closeModal()
      }, 3000)
    })

  tx?.wait().then(() => window.location.reload())
}

create new pool

 const handleCreatePool = async () => {
    if (!startDate || !endDate || !name) {
      return
    }

    toggleLoadingModal()

    const start = parseInt(String(startDate.getTime() / 1000))
    const duration = parseInt(String((endDate.getTime() - startDate.getTime()) / 1000))

    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)

    const amount = listAddStakeholders.reduce((prev, next) => prev + parseInt(next.amount), 0)
    const amountList: string[] = []
    const addressList: string[] = []

    listAddStakeholders.forEach((item: any, index: any) => {
      if (item.address && item.amount) {
        addressList.push(item.address)
        const amount: any = utils.parseEther(item.amount)
        amountList.push(amount)
      }
    })

    const contract = new ethers.Contract(
      process.env.REACT_APP_FACTORY_CONTRACT_ADDRESS || '',
      Factory,
      web3Provider.getSigner()
    )

    const tx = await contract
      .createFullPool(name, process.env.REACT_APP_TOKEN_ADDRESS, start, duration)
      .then(() => {
        toggleSuccessModal()
        setTimeout(function () {
          closeModal()
          setStartDate(null)
          setEndDate(null)
          setName('')
        }, 3000)
      })
      .catch((e: any) => {
        console.log(e)
      })

    tx?.wait().then(async (res: any) => {
      if (!res.events) {
        return
      }

      const address: string = res.events[0]?.address

      if (!address || !listAddStakeholders || !listAddStakeholders.length) {
        return
      }

      const ERC20Instance = new ethers.Contract(
        process.env.REACT_APP_TOKEN_ADDRESS || '',
        ERC20,
        web3Provider.getSigner()
      )
      const tx2 = await ERC20Instance.approve(address, utils.parseEther(amount.toString())).catch((e: any) => {
        console.log(e)
      })

      const vestingInstance = new ethers.Contract(address || '', Vesting, web3Provider.getSigner())

      tx2?.wait().then(async () => {
        await vestingInstance.addTokenGrants(addressList, amountList).catch((e: any) => {
          console.log(e)
        })
      })
    })
  }

change stakeholder function

const handleChangeStakeholder = async (prevAddr: any, newAddr: any) => { const provider: any = await detectEthereumProvider() const web3Provider = new providers.Web3Provider(provider)
const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())const tx = await vestingInstance  .changeInvestor(prevAddr, newAddr)  .then(() => {    toggleSuccessModal()    setTimeout(function () {      closeModal()    }, 3000)  })  .catch((e: any) => {    console.log(e)  })tx?.wait().then(() => window.location.reload())
}Use & Customisation

Add new stakeholder

const handleApproval = async () => {
    if (!poolAddress) {
      window.localStorage.setItem('typePoolPage', typesPoolPage.CREATE_POOL)
      history.push({ pathname: 'pool' })
      return
    }

    toggleLoadingModal()

    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)

    const ERC20Instance = new ethers.Contract(
      process.env.REACT_APP_TOKEN_ADDRESS || '',
      ERC20,
      web3Provider.getSigner()
    )

    const tx = await ERC20Instance.approve(poolAddress, utils.parseEther(amount.toString())).catch((e: any) => {
      console.log(e)
    })

    tx?.wait().then(() => {
      setSuccessButton(true)
      closeModal()
    })
  }

  const handleAdd = async () => {
    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)
    const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())
    const tx = await vestingInstance.addTokenGrants(addressList, amountList).catch((e: any) => {
      console.log(e)
    })

    toggleLoadingModal()

    tx?.wait().then(() => {
      toggleSuccessModal()
      setList([])
      setAmount(0)

      setTimeout(() => {
        closeModal()

        if (!poolAddress) {
          window.localStorage.setItem('typePoolPage', typesPoolPage.CREATE_POOL)
          history.push({ pathname: `pool` })
        }
      }, 2000)
    })
  }

transfer ownership function

  const handleTransferOwnership = async () => {
    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)
    const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())
    await vestingInstance
      .changeAdmin(valueAddress)
      .then(() => {
        window.localStorage.setItem('typePoolPage', typesPoolPage.LIST_POOL)
        history.push({ pathname: 'pool' })
      })
      .catch((e: any) => {
        console.log(e)
      })
  }

add and remove the manager

 const handleRemoveManager = async (itemManager: string) => {
    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)

    const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())
    vestingInstance
      .revokeRole(process.env.REACT_APP_ROLE_STATIC_ADDRESS, itemManager)
      .then(() => {
        dispatch(setRoleForPoolAddress({ address: poolAddress, removeRole: RolePoolAddress['OPERATOR'] }))
        dispatch(updateManagers({ address: poolAddress, itemManager, isRemove: true }))
        setValueAddress('')
      })
      .catch((e: string) => console.log(e))
  }
  const handleAddManager = async (itemManager: string | null) => {
    const provider: any = await detectEthereumProvider()
    const web3Provider = new providers.Web3Provider(provider)

    const vestingInstance = new ethers.Contract(poolAddress || '', Vesting, web3Provider.getSigner())

    vestingInstance
      .grantRole(process.env.REACT_APP_ROLE_STATIC_ADDRESS, itemManager)
      .then(() => {
        dispatch(setRoleForPoolAddress({ address: poolAddress, addRole: RolePoolAddress['OPERATOR'] }))
        dispatch(updateManagers({ address: poolAddress, itemManager, isRemove: false }))
        setValueAddress('')
      })
      .catch((e: string) => console.log(e))
  }

Last updated