增加staking相关合约方法
This commit is contained in:
parent
eade3fae08
commit
99b41d0e22
4
.env.dev
4
.env.dev
@ -22,4 +22,6 @@ VUE_APP_PRODUCTION=sandbox
|
||||
VUE_APP_LOGIN_API='https://login-test.kingsome.cn'
|
||||
|
||||
VUE_APP_NET_ID_MAIN='11155111'
|
||||
VUE_APP_LOCKER_ADDRESS_MAIN='0x7F2b4DB626d878778e178B4F0C7bA3a2870C6dd0'
|
||||
VUE_APP_LOCKER_ADDRESS_MAIN='0x7F2b4DB626d878778e178B4F0C7bA3a2870C6dd0'
|
||||
|
||||
VUE_APP_STAKING_CHAIN='97'
|
@ -22,4 +22,6 @@ VUE_APP_PRODUCTION=sandbox
|
||||
VUE_APP_LOGIN_API='https://login-test.kingsome.cn'
|
||||
|
||||
VUE_APP_NET_ID_MAIN='11155111'
|
||||
VUE_APP_LOCKER_ADDRESS_MAIN='0x7F2b4DB626d878778e178B4F0C7bA3a2870C6dd0'
|
||||
VUE_APP_LOCKER_ADDRESS_MAIN='0x7F2b4DB626d878778e178B4F0C7bA3a2870C6dd0'
|
||||
|
||||
VUE_APP_STAKING_CHAIN='97'
|
@ -14,6 +14,9 @@ import {Locker} from "@/components/chain/contract/Locker";
|
||||
import {GameItemMall} from "@/components/chain/contract/GameItemMall";
|
||||
import ConfirmDialog from "@/components/Dialogs/confirmDialog.vue";
|
||||
import { Widgets } from "./Widgets";
|
||||
import { Vester } from "./contract/Vester";
|
||||
import { Staking } from "./contract/Staking";
|
||||
import { ERC20 } from "./contract/ERC20";
|
||||
|
||||
export const allProviders = {
|
||||
1: MetaMaskWallet,
|
||||
@ -34,6 +37,9 @@ export class BlockChain {
|
||||
this.market = new ImtblMarket(this)
|
||||
this.locker = new Locker(this)
|
||||
this.mall = new GameItemMall(this)
|
||||
this.vester = new Vester(this)
|
||||
this.staking = new Staking(this)
|
||||
this.erc20 = new ERC20(this)
|
||||
this.widgets = new Widgets(this)
|
||||
BlockChain.instance = this;
|
||||
|
||||
|
26
src/components/chain/abis/EsToken.json
Normal file
26
src/components/chain/abis/EsToken.json
Normal file
@ -0,0 +1,26 @@
|
||||
[
|
||||
"constructor(string,string)",
|
||||
"event Approval(address indexed,address indexed,uint256)",
|
||||
"event Transfer(address indexed,address indexed,uint256)",
|
||||
"function allowance(address,address) view returns (uint256)",
|
||||
"function approve(address,uint256) returns (bool)",
|
||||
"function balanceOf(address) view returns (uint256)",
|
||||
"function burn(address,uint256)",
|
||||
"function decimals() view returns (uint8)",
|
||||
"function decreaseAllowance(address,uint256) returns (bool)",
|
||||
"function gov() view returns (address)",
|
||||
"function inPrivateTransferMode() view returns (bool)",
|
||||
"function increaseAllowance(address,uint256) returns (bool)",
|
||||
"function isHandler(address) view returns (bool)",
|
||||
"function isMinter(address) view returns (bool)",
|
||||
"function mint(address,uint256)",
|
||||
"function name() view returns (string)",
|
||||
"function setGov(address)",
|
||||
"function setHandler(address,bool)",
|
||||
"function setInPrivateTransferMode(bool)",
|
||||
"function setMinter(address,bool)",
|
||||
"function symbol() view returns (string)",
|
||||
"function totalSupply() view returns (uint256)",
|
||||
"function transfer(address,uint256) returns (bool)",
|
||||
"function transferFrom(address,address,uint256) returns (bool)"
|
||||
]
|
1
src/components/chain/abis/RewardDistributor.json
Normal file
1
src/components/chain/abis/RewardDistributor.json
Normal file
@ -0,0 +1 @@
|
||||
["constructor(address,address)","event Distribute(uint256)","event TokensPerIntervalChange(uint256)","function admin() view returns (address)","function distribute(uint256,uint256) returns (uint256)","function gov() view returns (address)","function lastDistributionTime() view returns (uint256)","function pendingRewards() view returns (uint256)","function rewardToken() view returns (address)","function rewardTracker() view returns (address)","function setAdmin(address)","function setGov(address)","function setTokensPerInterval(uint256)","function tokensPerInterval() view returns (uint256)","function updateLastDistributionTime()","function withdrawToken(address,address,uint256)"]
|
1
src/components/chain/abis/RewardRouter.json
Normal file
1
src/components/chain/abis/RewardRouter.json
Normal file
@ -0,0 +1 @@
|
||||
["constructor(address,address,address,address)","event StakeCec(address,address,uint256)","event UnstakeCec(address,address,uint256)","function batchStakeCecForAccount(address[],uint256[])","function cec() view returns (address)","function cecVester() view returns (address)","function claim()","function esCec() view returns (address)","function gov() view returns (address)","function handleRewards(bool,bool,bool,bool)","function setGov(address)","function stakeCec(uint256)","function stakeCecForAccount(address,uint256)","function stakeEsCec(uint256)","function stakedCecTracker() view returns (address)","function unstakeCec(uint256)","function unstakeEsCec(uint256)","function withdrawToken(address,address,uint256)"]
|
1
src/components/chain/abis/RewardTracker.json
Normal file
1
src/components/chain/abis/RewardTracker.json
Normal file
@ -0,0 +1 @@
|
||||
["constructor(string,string)","event Approval(address indexed,address indexed,uint256)","event Claim(address,uint256)","event Transfer(address indexed,address indexed,uint256)","function BASIS_POINTS_DIVISOR() view returns (uint256)","function PRECISION() view returns (uint256)","function allowance(address,address) view returns (uint256)","function approve(address,uint256) returns (bool)","function averageStakedAmounts(address) view returns (uint256)","function balanceOf(address) view returns (uint256)","function balances(address) view returns (uint256)","function claim(address) returns (uint256)","function claimForAccount(address,address) returns (uint256)","function claimable(address) view returns (uint256)","function claimableReward(address) view returns (uint256)","function cumulativeRewardPerToken() view returns (uint256)","function cumulativeRewards(address) view returns (uint256)","function decimals() view returns (uint8)","function depositBalances(address,address) view returns (uint256)","function distributor() view returns (address)","function gov() view returns (address)","function inPrivateClaimingMode() view returns (bool)","function inPrivateStakingMode() view returns (bool)","function inPrivateTransferMode() view returns (bool)","function initialize(address[],address)","function isDepositToken(address) view returns (bool)","function isHandler(address) view returns (bool)","function isInitialized() view returns (bool)","function name() view returns (string)","function previousCumulatedRewardPerToken(address) view returns (uint256)","function rewardToken() view returns (address)","function setDepositToken(address,bool)","function setGov(address)","function setHandler(address,bool)","function setInPrivateClaimingMode(bool)","function setInPrivateStakingMode(bool)","function setInPrivateTransferMode(bool)","function stake(address,uint256)","function stakeForAccount(address,address,address,uint256)","function stakedAmounts(address) view returns (uint256)","function symbol() view returns (string)","function tokensPerInterval() view returns (uint256)","function totalDepositSupply(address) view returns (uint256)","function totalSupply() view returns (uint256)","function transfer(address,uint256) returns (bool)","function transferFrom(address,address,uint256) returns (bool)","function unstake(address,uint256)","function unstakeForAccount(address,address,uint256,address)","function updateRewards()","function withdrawToken(address,address,uint256)"]
|
1
src/components/chain/abis/Vester.json
Normal file
1
src/components/chain/abis/Vester.json
Normal file
@ -0,0 +1 @@
|
||||
["constructor(string,string,uint256,address,address,address,address,bool)","event Approval(address indexed,address indexed,uint256)","event Claim(address,uint256)","event Deposit(address,uint256)","event PairTransfer(address indexed,address indexed,uint256)","event Transfer(address indexed,address indexed,uint256)","event Withdraw(address,uint256,uint256)","function allowance(address,address) view returns (uint256)","function approve(address,uint256) returns (bool)","function balanceOf(address) view returns (uint256)","function balances(address) view returns (uint256)","function bonusRewards(address) view returns (uint256)","function claim() returns (uint256)","function claimForAccount(address,address) returns (uint256)","function claimable(address) view returns (uint256)","function claimableToken() view returns (address)","function claimedAmounts(address) view returns (uint256)","function cumulativeClaimAmounts(address) view returns (uint256)","function cumulativeRewardDeductions(address) view returns (uint256)","function decimals() view returns (uint8)","function deposit(uint256)","function depositForAccount(address,uint256)","function esToken() view returns (address)","function getCombinedAverageStakedAmount(address) view returns (uint256)","function getMaxVestableAmount(address) view returns (uint256)","function getPairAmount(address,uint256) view returns (uint256)","function getTotalVested(address) view returns (uint256)","function getVestedAmount(address) view returns (uint256)","function gov() view returns (address)","function hasPairToken() view returns (bool)","function hasRewardTracker() view returns (bool)","function isHandler(address) view returns (bool)","function lastVestingTimes(address) view returns (uint256)","function name() view returns (string)","function needCheckStake() view returns (bool)","function pairAmounts(address) view returns (uint256)","function pairSupply() view returns (uint256)","function pairToken() view returns (address)","function rewardTracker() view returns (address)","function setBonusRewards(address,uint256)","function setCumulativeRewardDeductions(address,uint256)","function setGov(address)","function setHandler(address,bool)","function setRewardTracker(address)","function symbol() view returns (string)","function totalSupply() view returns (uint256)","function transfer(address,uint256) returns (bool)","function transferFrom(address,address,uint256) returns (bool)","function vestingDuration() view returns (uint256)","function withdraw()","function withdrawToken(address,address,uint256)"]
|
27
src/components/chain/contract/ERC20.js
Normal file
27
src/components/chain/contract/ERC20.js
Normal file
@ -0,0 +1,27 @@
|
||||
import { Contract } from 'ethers';
|
||||
import erc20Abi from '../abis/EsToken.json';
|
||||
|
||||
export class ERC20 {
|
||||
constructor(_chainInstance) {
|
||||
this.bc = _chainInstance;
|
||||
}
|
||||
|
||||
async balanceOf(provider, tokenAddress, address) {
|
||||
const contract = new Contract(tokenAddress, erc20Abi, provider.getSigner());
|
||||
return contract.balanceOf(address);
|
||||
}
|
||||
|
||||
async allowance(provider, tokenAddress, owner, spender) {
|
||||
const contract = new Contract(tokenAddress, erc20Abi, provider.getSigner());
|
||||
return contract.allowance(owner, spender);
|
||||
}
|
||||
|
||||
async approve(tokenAddress, amount) {
|
||||
const provider = this.bc.eoaProvider;
|
||||
this.bc.checkAndChangeChain(chainId, provider);
|
||||
const contract = new Contract(tokenAddress, erc20Abi, provider.getSigner());
|
||||
const tx = await contract.approve(amount);
|
||||
await tx.wait();
|
||||
return tx;
|
||||
}
|
||||
}
|
177
src/components/chain/contract/Staking.js
Normal file
177
src/components/chain/contract/Staking.js
Normal file
@ -0,0 +1,177 @@
|
||||
import routerAbi from '../abis/RewardRouter.json';
|
||||
import { Contract } from 'ethers';
|
||||
import { STAKING_ADDRESSES } from '@/configs/configchain';
|
||||
|
||||
const chainId = parseInt(import.meta.env.VUE_APP_STAKING_CHAIN);
|
||||
|
||||
export class Staking {
|
||||
constructor(_chainInstance) {
|
||||
this.bc = _chainInstance;
|
||||
const cfg = STAKING_ADDRESSES[chainId]
|
||||
this.stakedCecRouter = cfg.stakedCecRouter
|
||||
this.stakedEsCecRouter = cfg.stakedEsCecRouter
|
||||
this.stakedCecTracker = cfg.stakedCecTracker
|
||||
this.stakedEsCecTracker = cfg.stakedEsCecTracker
|
||||
}
|
||||
|
||||
async execMethod({provider, address, method, params}) {
|
||||
this.bc.checkAndChangeChain(chainId, provider);
|
||||
const contract = new Contract(address, routerAbi, provider.getSigner());
|
||||
const tx = await contract[method](...params);
|
||||
await tx.wait();
|
||||
return tx;
|
||||
}
|
||||
|
||||
async queryMethod({provider, address, method, params}) {
|
||||
this.bc.checkAndChangeChain(chainId, provider);
|
||||
const contract = new Contract(address, routerAbi, provider.getSigner());
|
||||
return contract[method](...params);
|
||||
}
|
||||
/**
|
||||
* 质押CEC
|
||||
* @param {*} amount 质押的数量, 单位为wei
|
||||
* @returns
|
||||
*/
|
||||
async stakeCec(amount) {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedCecRouter,
|
||||
method: 'stakeCec',
|
||||
params: [amount]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 解除质押CEC
|
||||
* @param {*} amount 质押的数量, 单位为wei
|
||||
* @returns
|
||||
*/
|
||||
async unstakeCec(amount) {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedCecRouter,
|
||||
method: 'unstakeCec',
|
||||
params: [amount]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 质押EsCEC
|
||||
* @param {*} amount 质押的数量, 单位为wei
|
||||
* @returns
|
||||
*/
|
||||
async stakeEsCec(amount) {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedEsCecRouter,
|
||||
method: 'stakeEsCec',
|
||||
params: [amount]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 解除质押EsCEC
|
||||
* @param {*} amount 质押的数量, 单位为wei
|
||||
* @returns
|
||||
*/
|
||||
async unstakeEsCec(amount) {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedEsCecRouter,
|
||||
method: 'unstakeEsCec',
|
||||
params: [amount]
|
||||
});
|
||||
}
|
||||
/**
|
||||
* claim质押收益
|
||||
* @param {*} fromToken cec or esCec
|
||||
* @returns
|
||||
*/
|
||||
async claim(fromToken) {
|
||||
const address = fromToken == 'cec' ? this.stakedCecRouter : this.stakedEsCecRouter;
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address,
|
||||
method: 'claim',
|
||||
params: []
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户质押的CEC数量
|
||||
* @returns
|
||||
*/
|
||||
async queryCECStaked() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedCecTracker,
|
||||
method: 'stakedAmounts',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户质押的EsCEC数量
|
||||
*/
|
||||
async queryEsCECStaked() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedEsCecTracker,
|
||||
method: 'stakedAmounts',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询用户质押CEC的可领取收益
|
||||
*/
|
||||
async queryClaimableByCEC() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedCecTracker,
|
||||
method: 'claimable',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询用户质押CEC的累计收益
|
||||
*/
|
||||
async queryCumulativeByCEC() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedCecTracker,
|
||||
method: 'cumulativeRewards',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户质押EsCEC的可领取收益
|
||||
*/
|
||||
async queryClaimableByEsCEC() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedEsCecTracker,
|
||||
method: 'claimable',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户质押EsCEC的累计收益
|
||||
*/
|
||||
async queryCumulativeByEsCEC() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
address: this.stakedEsCecTracker,
|
||||
method: 'cumulativeRewards',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
|
||||
}
|
109
src/components/chain/contract/Vester.js
Normal file
109
src/components/chain/contract/Vester.js
Normal file
@ -0,0 +1,109 @@
|
||||
import { Contract } from 'ethers';
|
||||
import vesterAbi from '../abis/Vester.json';
|
||||
import { STAKING_ADDRESSES } from '@/configs/configchain';
|
||||
|
||||
const chainId = parseInt(import.meta.env.VUE_APP_STAKING_CHAIN);
|
||||
|
||||
export class Vester {
|
||||
constructor(_chainInstance) {
|
||||
this.bc = _chainInstance;
|
||||
const { vester } = STAKING_ADDRESSES[chainId]
|
||||
this.vesterAddress = vester
|
||||
}
|
||||
async execMethod({provider, method, params}) {
|
||||
this.bc.checkAndChangeChain(chainId, provider);
|
||||
const contract = new Contract(this.vesterAddress, vesterAbi, provider.getSigner());
|
||||
const tx = await contract[method](...params);
|
||||
await tx.wait();
|
||||
return tx;
|
||||
}
|
||||
|
||||
async queryMethod({provider, method, params}) {
|
||||
this.bc.checkAndChangeChain(chainId, provider);
|
||||
const contract = new Contract(this.vesterAddress, routerAbi, provider.getSigner());
|
||||
return contract[method](...params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 存入EsCEC, 开始转化为CEC
|
||||
* @param {*} amount 需要转化的数量, 单位为wei
|
||||
* @returns
|
||||
*/
|
||||
async deposit(amount) {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'deposit',
|
||||
params: [amount]
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 取回EsCEC, 停止转化为CEC
|
||||
* @returns
|
||||
*/
|
||||
async withdraw() {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'withdraw',
|
||||
params: []
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户的所有转化完成的CEC
|
||||
* @returns
|
||||
*/
|
||||
async claim() {
|
||||
return this.execMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'claim',
|
||||
params: []
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询当前用户处于转化状态的EsCEC数量
|
||||
* 这个数量也是锁定中的CEC数量
|
||||
*/
|
||||
async queryVested() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'balanceOf',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询当前用户存储的EsCEC数量(转化+未转化)
|
||||
* @returns
|
||||
*/
|
||||
async queryVestedTotal() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'getTotalVested',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询当前用户可以领取的CEC数量
|
||||
*/
|
||||
async queryClaimable() {
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'claimable',
|
||||
params: []
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 查询用户已经领取的CEC总量
|
||||
* @returns
|
||||
*/
|
||||
async queryClaimabledAll() {
|
||||
const userAddress = await this.bc.eoaProvider.getSigner().getAddress()
|
||||
return this.queryMethod({
|
||||
provider: this.bc.eoaProvider,
|
||||
method: 'claimedAmounts',
|
||||
params: [userAddress]
|
||||
});
|
||||
}
|
||||
}
|
@ -102,6 +102,20 @@ export const CURRENCYS = {
|
||||
}
|
||||
}
|
||||
|
||||
export const STAKING_ADDRESSES = {
|
||||
97: {
|
||||
cec: '0xe34c5ea0c3083d11a735dc0609533b92130319f5',
|
||||
esCec: '0x1FbA3F84e62163069050f1156b73C008722136A3',
|
||||
vester: '0x49dcb6Ba542374147278efe9163a6E94e5E40762',
|
||||
stakedCecRouter: '0xCB3dBb5d893743CE6f7c959CbBb44AfE0b83a04F',
|
||||
stakedCecTracker: '0x409890BEEf967e63b52F7BB13A986eD4900691Ed',
|
||||
stakedCecDistributor: '0x613884c63F9c9e7Aa02c659364E060AaA1c8dB33',
|
||||
stakedEsCecRouter: '0x775d7Dbc06835c78437C8783fE11937E46F9ec6e',
|
||||
stakedEsCecTracker: '0x3299431803704C63941531d9d894CB095D15C4bC',
|
||||
stakedEsCecDistributor: '0x67869546655e1A6A09b9877aEA858cC47444172D',
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
ALL_PROVIDERS,
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user