{
id: 'ycrv',
name: 'yCRV',
symbol: 'yCRV',
description: 'yCRV',
poolSymbol: 'YFII',
poolAddress: '0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83',
erc20address: '0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8',
vaultContractAddress: '0xD2db1EF55549eCdacb4e7da081216AE96f0Eedcb',
StrategyContractAddress:'0xfd4c75184bed2013fdb621f54885b2d2ed7c3894',
vaultContractABI: config.vaultContractABI,
strategyContractABI: config.strategyContractABI,
balance: 0,
pooledBalance: 0,
decimals: 18,
version: 1,
earnNeed24Hours: true
}
基于上面的配置文件
poolAddress 是分红代币的地址
erc20address 是需要存入代币的地址
方法

读的数据
当前拥有分红代币的余额 方法是
let erc20Contract = new web3.eth.Contract(config.erc20ABI, poolAddress)
var balance = await erc20Contract.methods.balanceOf(account.address).call({ from: account.address });
balance = parseFloat(balance)/10**asset.decimals
当前拥有存入代币的余额
let erc20Contract = new web3.eth.Contract(config.erc20ABI, erc20address)
var balance = await erc20Contract.methods.balanceOf(account.address).call({ from: account.address });
balance = parseFloat(balance)/10**asset.decimals
deposit 金额
let vaultContract = new web3.eth.Contract(vaultContractABI,vaultContractAddress)
var deposit_data = await vaultContract.methods.plyr_(account.address).call({ from: account.address });
var deposit = deposit_data["stake"]/1e18
eared金额
let vaultContract = new web3.eth.Contract(vaultContractABI,vaultContractAddress)
let eared = await vaultContract.methods.cal_out(account.address).call({ from: account.address });
eared = eared/1e18
pending金额
需要先读到
let data = vaultContract.methods.global_(0)..call({ from: account.address });
total_stake = data["total_stake"]
earnings_per_share = data['earnings_per_share']
var plyr_data = await vaultContract.methods.plyr_(account.address).call({ from: account.address });
var payout = plyr_data["payout"]
magnitude = 10**40
然后还需要用下面 yield查询里面的数值(假设为yield_value
earnings_per_share = earnings_per_share+yield_value*(magnitude)/(total_stake)
earnings_per_share*他质押的金额(也就是上面的deposit,没有除以1e18的值)/magnitude - payout
这个结果就是pending的金额,需要除以1e18显示给用户看.
操作
deposit:
deposit之前需要授权金额大于他 deposit的金额
检查授权金额为
let erc20Contract = new web3.eth.Contract(config.erc20ABI, erc20address)
let approve_balance = await vaultContract.methods.allowance(account.address,vaultContractAddress).call({ from: account.address });
如果授权金额小于存入金额,则授权
await erc20Contract.methods.approve(vaultContractAddress, web3.utils.toWei('79228162514', "ether")).send({ from: account.address, gasPrice: web3.utils.toWei(await this._getGasPrice(), 'gwei') })
授权结束后 再是deposit操作
deposit 操作 的方法是 vaultContractAddress 的deposit ,参数是 存入的金额,存入的金额需要小于他的余额
claim
操作 的方法是 vaultContractAddress 的claim ,无参数
withdraw
操作 的方法是 vaultContractAddress 的withdraw ,参数是他要取出的金额,需要小于他存入的最大金额
基于上面的配置文件
poolAddress 是分红代币的地址
erc20address 是需要存入代币的地址
方法
读的数据
当前拥有分红代币的余额 方法是
当前拥有存入代币的余额
deposit 金额
eared金额
pending金额
需要先读到
let data = vaultContract.methods.global_(0)..call({ from: account.address });
total_stake = data["total_stake"]
earnings_per_share = data['earnings_per_share']
var plyr_data = await vaultContract.methods.plyr_(account.address).call({ from: account.address });
var payout = plyr_data["payout"]
magnitude = 10**40
然后还需要用下面 yield查询里面的数值(假设为yield_value
earnings_per_share = earnings_per_share+yield_value*(magnitude)/(total_stake)
earnings_per_share*他质押的金额(也就是上面的deposit,没有除以1e18的值)/magnitude - payout
这个结果就是pending的金额,需要除以1e18显示给用户看.
操作
deposit:
deposit之前需要授权金额大于他 deposit的金额
检查授权金额为
如果授权金额小于存入金额,则授权
授权结束后 再是deposit操作
deposit 操作 的方法是 vaultContractAddress 的deposit ,参数是 存入的金额,存入的金额需要小于他的余额
claim
操作 的方法是 vaultContractAddress 的claim ,无参数
withdraw
操作 的方法是 vaultContractAddress 的withdraw ,参数是他要取出的金额,需要小于他存入的最大金额