remove logic of feeDistributor

This commit is contained in:
owen05
2021-04-30 12:00:32 +08:00
parent 40db8faa5f
commit 0a5595ab55
5 changed files with 166 additions and 224 deletions

View File

@@ -31,53 +31,53 @@ async function init(ctx: NFTContext): Promise<void> {
await ctx.approveProxy(ctx.USDT, buyer);
}
async function getFeeGlobalState(ctx: NFTContext, feeAddress: string, baseToken, quoteToken, stakeToken) {
let feeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
let baseReserve = await feeInstance.methods._BASE_RESERVE_().call();
let quoteReserve = await feeInstance.methods._QUOTE_RESERVE_().call();
let baseBalance = await baseToken.methods.balanceOf(feeAddress).call();
let quoteBalance = await quoteToken.methods.balanceOf(feeAddress).call();
let stakeVault = await feeInstance.methods._STAKE_VAULT_().call();
let stakeBalance = await stakeToken.methods.balanceOf(stakeVault).call();
let stakeReserve = await feeInstance.methods._STAKE_RESERVE_().call();
let baseRatio = await feeInstance.methods._BASE_REWARD_RATIO_().call();
let quoteRatio = await feeInstance.methods._QUOTE_REWARD_RATIO_().call();
// async function getFeeGlobalState(ctx: NFTContext, feeAddress: string, baseToken, quoteToken, stakeToken) {
// let feeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
// let baseReserve = await feeInstance.methods._BASE_RESERVE_().call();
// let quoteReserve = await feeInstance.methods._QUOTE_RESERVE_().call();
// let baseBalance = await baseToken.methods.balanceOf(feeAddress).call();
// let quoteBalance = await quoteToken.methods.balanceOf(feeAddress).call();
// let stakeVault = await feeInstance.methods._STAKE_VAULT_().call();
// let stakeBalance = await stakeToken.methods.balanceOf(stakeVault).call();
// let stakeReserve = await feeInstance.methods._STAKE_RESERVE_().call();
// let baseRatio = await feeInstance.methods._BASE_REWARD_RATIO_().call();
// let quoteRatio = await feeInstance.methods._QUOTE_REWARD_RATIO_().call();
console.log("fee baseBalance:" + fromWei(baseBalance, 'ether') + " quoteBalance:" + fromWei(quoteBalance, 'mwei') + " vault stakeBalance:" + fromWei(stakeBalance, 'ether'));
console.log("fee baseReserve:" + fromWei(baseReserve, 'ether') + " quoteReserve:" + fromWei(quoteReserve, 'mwei') + " stakeReserve:" + fromWei(stakeReserve, 'ether'));
console.log("baseRatio:" + fromWei(baseRatio, 'ether') + " quoteRatio:" + fromWei(quoteRatio, 'mwei'));
// console.log("fee baseBalance:" + fromWei(baseBalance, 'ether') + " quoteBalance:" + fromWei(quoteBalance, 'mwei') + " vault stakeBalance:" + fromWei(stakeBalance, 'ether'));
// console.log("fee baseReserve:" + fromWei(baseReserve, 'ether') + " quoteReserve:" + fromWei(quoteReserve, 'mwei') + " stakeReserve:" + fromWei(stakeReserve, 'ether'));
// console.log("baseRatio:" + fromWei(baseRatio, 'ether') + " quoteRatio:" + fromWei(quoteRatio, 'mwei'));
return {
"baseReserve": baseReserve,
"quoteReserve": quoteReserve,
"stakeReserve": stakeReserve,
"baseBalance": baseBalance,
"quoteBalance": quoteBalance,
"stakeBalance": stakeBalance,
"baseRatio": baseRatio,
"quoteRatio": quoteRatio
}
}
// return {
// "baseReserve": baseReserve,
// "quoteReserve": quoteReserve,
// "stakeReserve": stakeReserve,
// "baseBalance": baseBalance,
// "quoteBalance": quoteBalance,
// "stakeBalance": stakeBalance,
// "baseRatio": baseRatio,
// "quoteRatio": quoteRatio
// }
// }
async function getFeeUserState(ctx: NFTContext, feeAddress: string, userAddress: string) {
let feeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
let userShares = await feeInstance.methods._SHARES_(userAddress).call();
let [baseRewards, quoteRewards] = await feeInstance.methods.getPendingReward(userAddress).call();
let userBasePerShares = await feeInstance.methods._USER_BASE_PER_SHARE_(userAddress).call();
let userQuotePerShares = await feeInstance.methods._USER_QUOTE_PER_SHARE_(userAddress).call();
// async function getFeeUserState(ctx: NFTContext, feeAddress: string, userAddress: string) {
// let feeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
// let userShares = await feeInstance.methods._SHARES_(userAddress).call();
// let [baseRewards, quoteRewards] = await feeInstance.methods.getPendingReward(userAddress).call();
// let userBasePerShares = await feeInstance.methods._USER_BASE_PER_SHARE_(userAddress).call();
// let userQuotePerShares = await feeInstance.methods._USER_QUOTE_PER_SHARE_(userAddress).call();
console.log("user shares:" + fromWei(userShares, 'ether'));
console.log("user baseRewards:" + fromWei(baseRewards, 'ether') + " userQuoteRewards:" + fromWei(quoteRewards, 'mwei'));
console.log("user basePerShares:" + fromWei(userBasePerShares, 'ether') + " userQuotePerShares:" + fromWei(userQuotePerShares, 'mwei'));
// console.log("user shares:" + fromWei(userShares, 'ether'));
// console.log("user baseRewards:" + fromWei(baseRewards, 'ether') + " userQuoteRewards:" + fromWei(quoteRewards, 'mwei'));
// console.log("user basePerShares:" + fromWei(userBasePerShares, 'ether') + " userQuotePerShares:" + fromWei(userQuotePerShares, 'mwei'));
return {
"userShares": userShares,
"userBaseRewards": baseRewards,
"userQuoteRewards": quoteRewards,
"userBasePerShares": userBasePerShares,
"userQuotePerShares": userQuotePerShares
}
}
// return {
// "userShares": userShares,
// "userBaseRewards": baseRewards,
// "userQuoteRewards": quoteRewards,
// "userBasePerShares": userBasePerShares,
// "userQuotePerShares": userQuotePerShares
// }
// }
async function mockTrade(ctx: NFTContext, dvmAddress: string, dvmInstance, fragInstance) {
await ctx.transferQuoteToDVM(ctx.USDT, dvmAddress, user1, mweiStr("20"));
@@ -150,16 +150,13 @@ describe("DODONFT", () => {
var erc721Instance = contracts.getContractWithAddress(contracts.ERC721, erc721Address);
await erc721Instance.methods.safeTransferFrom(author, vaultAddress, 0).send(ctx.sendParam(author));
var quoteToken = "0x156595bAF85D5C29E91d959889B022d952190A64";
var vaultPreOwner = "0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86";
// var quoteToken = ctx.USDT.options.address;
// var vaultPreOwner = author;
var stakeToken = "0x0000000000000000000000000000000000000000";
// var quoteToken = "0x156595bAF85D5C29E91d959889B022d952190A64";
// var vaultPreOwner = "0x7e83d9d94837eE82F0cc18a691da6f42F03F1d86";
var quoteToken = ctx.USDT.options.address;
var vaultPreOwner = author;
var dvmParams = [
"0", //lpFeeRate
decimalStr("0.01"), //mtFeeRate
mweiStr("1"), // I
decimalStr("1") // K
];
@@ -173,106 +170,105 @@ describe("DODONFT", () => {
var callData = ctx.NFTProxy.methods.createFragment(
quoteToken,
vaultPreOwner,
stakeToken,
dvmParams,
fragParams,
isOpenTwap
).encodeABI();
console.log("data:", callData);
// await logGas(await nftVaultInstance.methods.createFragment(
// ctx.NFTProxy.options.address,
// callData
// ), ctx.sendParam(author), "createFragment");
await logGas(await nftVaultInstance.methods.createFragment(
ctx.NFTProxy.options.address,
callData
), ctx.sendParam(author), "createFragment");
// let [fragAddress, , dvmAddress] = await ctx.getRegistry(ctx, vaultAddress);
let [fragAddress, , dvmAddress] = await ctx.getRegistry(ctx, vaultAddress);
// var dvmInstance = contracts.getContractWithAddress(contracts.DVM_NAME, dvmAddress);
// var midPrice = await dvmInstance.methods.getMidPrice().call();
// assert(midPrice, mweiStr("1"));
// let newVaultOwner = await nftVaultInstance.methods._OWNER_().call();
// assert(fragAddress, newVaultOwner);
});
it("stakeToFeeDistributor", async () => {
let [vaultAddress, fragAddress, feeAddress, dvmAddress] = await ctx.createFragment(ctx, author, null, null, null);
var nftFeeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
var dvmInstance = contracts.getContractWithAddress(contracts.DVM_NAME, dvmAddress);
var fragInstance = contracts.getContractWithAddress(contracts.NFT_FRAG, fragAddress);
await ctx.approveProxy(fragInstance, user1);
await ctx.approveProxy(fragInstance, user2);
//mock trading
//stake
await mockTrade(ctx, dvmAddress, dvmInstance, fragInstance);
await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
feeAddress,
decimalStr("5"),
0
), ctx.sendParam(user1), "stakeToFeeDistributor");
await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
feeAddress,
decimalStr("10"),
0
), ctx.sendParam(user2), "stakeToFeeDistributor");
await mockTrade(ctx, dvmAddress, dvmInstance, fragInstance);
await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
feeAddress,
decimalStr("10"),
0
), ctx.sendParam(user1), "stakeToFeeDistributor");
await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
feeAddress,
decimalStr("20"),
0
), ctx.sendParam(user2), "stakeToFeeDistributor");
let globalObj = await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
assert(globalObj['quoteBalance'], mweiStr("0.6"));
assert(globalObj['stakeReserve'], decimalStr("45"));
let user1Obj = await getFeeUserState(ctx, feeAddress, user1);
assert(user1Obj['userQuoteRewards'], mweiStr("0.1"));
assert(user1Obj['userShares'], decimalStr("15"));
let user2Obj = await getFeeUserState(ctx, feeAddress, user2);
assert(user2Obj['userBaseRewards'], decimalStr("0.66666480000453957"));
assert(user2Obj['userShares'], decimalStr("30"));
//claim
var user1BaseBalanceStart = await fragInstance.methods.balanceOf(user1).call()
await logGas(await nftFeeInstance.methods.claim(user1), ctx.sendParam(user1), "claim");
var user1BaseBalanceEnd = await fragInstance.methods.balanceOf(user1).call()
user1Obj = await getFeeUserState(ctx, feeAddress, user1);
await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
assert(user1Obj['userQuoteRewards'], "0");
assert(globalObj['quoteBalance'], mweiStr("0.5"));
assert(user1BaseBalanceEnd - user1BaseBalanceStart, "333332400002269700");
//unstake
var user2BaseBalanceStart = await fragInstance.methods.balanceOf(user2).call()
await logGas(await nftFeeInstance.methods.unstake(decimalStr("30"), user2, true), ctx.sendParam(user2), "unstake");
var user2BaseBalanceEnd = await fragInstance.methods.balanceOf(user2).call()
user2Obj = await getFeeUserState(ctx, feeAddress, user2);
await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
assert(user2Obj['userQuoteRewards'], "0");
assert(globalObj['quoteBalance'], mweiStr("0.3"));
assert(globalObj['stakeReserve'], mweiStr("15"));
assert(globalObj['stakeBalance'], mweiStr("15"));
assert(user2BaseBalanceEnd - user2BaseBalanceStart, "30666664800004540000");
var midPrice = await dvmInstance.methods.getMidPrice().call();
assert(midPrice, mweiStr("1"));
let newVaultOwner = await nftVaultInstance.methods._OWNER_().call();
assert(fragAddress, newVaultOwner);
});
// it("stakeToFeeDistributor", async () => {
// let [vaultAddress, fragAddress, feeAddress, dvmAddress] = await ctx.createFragment(ctx, author, null, null, null);
// var nftFeeInstance = contracts.getContractWithAddress(contracts.NFT_FEE, feeAddress);
// var dvmInstance = contracts.getContractWithAddress(contracts.DVM_NAME, dvmAddress);
// var fragInstance = contracts.getContractWithAddress(contracts.NFT_FRAG, fragAddress);
// await ctx.approveProxy(fragInstance, user1);
// await ctx.approveProxy(fragInstance, user2);
// //mock trading
// //stake
// await mockTrade(ctx, dvmAddress, dvmInstance, fragInstance);
// await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
// feeAddress,
// decimalStr("5"),
// 0
// ), ctx.sendParam(user1), "stakeToFeeDistributor");
// await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
// feeAddress,
// decimalStr("10"),
// 0
// ), ctx.sendParam(user2), "stakeToFeeDistributor");
// await mockTrade(ctx, dvmAddress, dvmInstance, fragInstance);
// await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
// feeAddress,
// decimalStr("10"),
// 0
// ), ctx.sendParam(user1), "stakeToFeeDistributor");
// await logGas(await ctx.NFTProxy.methods.stakeToFeeDistributor(
// feeAddress,
// decimalStr("20"),
// 0
// ), ctx.sendParam(user2), "stakeToFeeDistributor");
// let globalObj = await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
// assert(globalObj['quoteBalance'], mweiStr("0.6"));
// assert(globalObj['stakeReserve'], decimalStr("45"));
// let user1Obj = await getFeeUserState(ctx, feeAddress, user1);
// assert(user1Obj['userQuoteRewards'], mweiStr("0.1"));
// assert(user1Obj['userShares'], decimalStr("15"));
// let user2Obj = await getFeeUserState(ctx, feeAddress, user2);
// assert(user2Obj['userBaseRewards'], decimalStr("0.66666480000453957"));
// assert(user2Obj['userShares'], decimalStr("30"));
// //claim
// var user1BaseBalanceStart = await fragInstance.methods.balanceOf(user1).call()
// await logGas(await nftFeeInstance.methods.claim(user1), ctx.sendParam(user1), "claim");
// var user1BaseBalanceEnd = await fragInstance.methods.balanceOf(user1).call()
// user1Obj = await getFeeUserState(ctx, feeAddress, user1);
// await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
// assert(user1Obj['userQuoteRewards'], "0");
// assert(globalObj['quoteBalance'], mweiStr("0.5"));
// assert(user1BaseBalanceEnd - user1BaseBalanceStart, "333332400002269700");
// //unstake
// var user2BaseBalanceStart = await fragInstance.methods.balanceOf(user2).call()
// await logGas(await nftFeeInstance.methods.unstake(decimalStr("30"), user2, true), ctx.sendParam(user2), "unstake");
// var user2BaseBalanceEnd = await fragInstance.methods.balanceOf(user2).call()
// user2Obj = await getFeeUserState(ctx, feeAddress, user2);
// await getFeeGlobalState(ctx, feeAddress, fragInstance, ctx.USDT, fragInstance);
// assert(user2Obj['userQuoteRewards'], "0");
// assert(globalObj['quoteBalance'], mweiStr("0.3"));
// assert(globalObj['stakeReserve'], mweiStr("15"));
// assert(globalObj['stakeBalance'], mweiStr("15"));
// assert(user2BaseBalanceEnd - user2BaseBalanceStart, "30666664800004540000");
// });
it("buyout and redeem", async () => {
var fragParams = [
decimalStr("10000"), //totalSupply
decimalStr("0.2"), //ownerRatio
Math.floor(new Date().getTime() / 1000) //buyoutTimeStamp
]
let [vaultAddress, fragAddress, feeAddress, dvmAddress] = await ctx.createFragment(ctx, author, null, fragParams, null);
let [vaultAddress, fragAddress, , dvmAddress] = await ctx.createFragment(ctx, author, null, fragParams, null);
var dvmInstance = contracts.getContractWithAddress(contracts.DVM_NAME, dvmAddress);
var fragInstance = contracts.getContractWithAddress(contracts.NFT_FRAG, fragAddress);
var vaultInstance = contracts.getContractWithAddress(contracts.NFT_VAULT, vaultAddress);

View File

@@ -28,11 +28,11 @@ export class NFTContext {
NFTRegister: Contract;
CollatteralVault: Contract;
Fragment: Contract;
NFTFee: Contract;
NFTProxy: Contract;
DODOApprove: Contract;
DODOApproveProxy: Contract;
mtFeeRateModel: Contract;
//token
USDT: Contract;
@@ -69,7 +69,8 @@ export class NFTContext {
contracts.CLONE_FACTORY_CONTRACT_NAME
);
var dvmTemplate = await contracts.newContract(contracts.DVM_NAME)
var constFeeTemplate = await contracts.newContract(contracts.CONST_FEE_RATE_MODEL_NAME)
var mtFeeRateModelTemplate = await contracts.newContract(contracts.FEE_RATE_MODEL_NAME)
this.mtFeeRateModel = mtFeeRateModelTemplate;
var ERC721Template = await contracts.newContract(contracts.ERC721)
var ERC1155Template = await contracts.newContract(contracts.ERC1155)
@@ -103,19 +104,16 @@ export class NFTContext {
this.Fragment = await contracts.newContract(contracts.NFT_FRAG)
this.NFTFee = await contracts.newContract(contracts.NFT_FEE)
this.NFTProxy = await contracts.newContract(contracts.NFT_PROXY,
[
cloneFactory.options.address,
this.WETH.options.address,
this.DODOApproveProxy.options.address,
this.Deployer,
this.mtFeeRateModel.options.address,
this.CollatteralVault.options.address,
this.Fragment.options.address,
this.NFTFee.options.address,
dvmTemplate.options.address,
constFeeTemplate.options.address,
this.NFTRegister.options.address
]
)
@@ -152,10 +150,9 @@ export class NFTContext {
async getRegistry(ctx: NFTContext, vaultAddress: string) {
let fragAddress = await ctx.NFTRegister.methods._VAULT_FRAG_REGISTRY_(vaultAddress).call();
let feeDistrubitor = await ctx.NFTRegister.methods._FRAG_FEE_REGISTRY_(fragAddress).call();
let fragInstance = contracts.getContractWithAddress(contracts.NFT_FRAG, fragAddress);
let dvmAddress = await fragInstance.methods._DVM_().call();
return [fragAddress, feeDistrubitor, dvmAddress];
return [fragAddress, , dvmAddress];
}
async createNFTVault(ctx: NFTContext, author: string) {
@@ -191,7 +188,6 @@ export class NFTContext {
if (dvmParams == null) {
dvmParams = [
"0", //lpFeeRate
decimalStr("0.01"), //mtFeeRate
mweiStr("1"), // I
decimalStr("1") // K
];
@@ -207,13 +203,11 @@ export class NFTContext {
addrs = []
addrs.push(ctx.USDT.options.address);//quoteToken
addrs.push(author);//vaultPreOwner
addrs.push("0x0000000000000000000000000000000000000000");//stakeToken
}
var callData = ctx.NFTProxy.methods.createFragment(
addrs[0],
addrs[1],
addrs[2],
dvmParams,
fragParams,
false
@@ -224,8 +218,8 @@ export class NFTContext {
callData
).send(ctx.sendParam(author));
let [fragAddress, feeAddress, dvmAddress] = await this.getRegistry(ctx, vaultAddress);
return [vaultAddress, fragAddress, feeAddress, dvmAddress, callData]
let [fragAddress, , dvmAddress] = await this.getRegistry(ctx, vaultAddress);
return [vaultAddress, fragAddress, , dvmAddress, callData]
}