Skip to content

Instantly share code, notes, and snippets.

@xiaoming9090
Created May 26, 2022 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xiaoming9090/2252f6b6f7e62fca20ecfbaac6f754f5 to your computer and use it in GitHub Desktop.
Save xiaoming9090/2252f6b6f7e62fca20ecfbaac6f754f5 to your computer and use it in GitHub Desktop.
const BathHouse = artifacts.require("BathHouse");
const BathPair = artifacts.require("BathPair");
const BathToken = artifacts.require("BathToken");
const RubiconMarket = artifacts.require("RubiconMarket");
const DAI = artifacts.require("TokenWithFaucet");
const WETH = artifacts.require("WETH9");
const RubiconRouter = artifacts.require("RubiconRouter");
const TokenWithFaucet = artifacts.require("TokenWithFaucet");
const BathBuddy = artifacts.require("BathBuddy");
const { parseUnits } = require("ethers/lib/utils.js");
const helper = require("../testHelpers/timeHelper.js");
function logIndented(...args) {
console.log(" ", ...args);
}
// ganache-cli --gasLimit=0x1fffffffffffff --gasPrice=0x1 --allowUnlimitedContractSize --defaultBalanceEther 9000
// ganache-cli --gasLimit=9000000 --gasPrice=0x1 --defaultBalanceEther 9000 --allowUnlimitedContractSize
async function getOrderBook() {
let DAIInstance = await DAI.deployed();
let WETHInstance = await WETH.deployed();
let rubiconRouterInstance = await RubiconRouter.deployed();
let output = await rubiconRouterInstance.getBookFromPair(
WETHInstance.address,
DAIInstance.address,
4
);
let asks = output[0];
let bids = output[1];
console.log("--------------- Order Book ---------------")
for (let i = 0; i < output[0].length; i++) {
console.log("[-] asks index %s: ask_pay_amt = %s, ask_buy_amt = %s", i, web3.utils.fromWei(output[0][i][0]), web3.utils.fromWei(output[0][i][1]));
}
for (let i = 0; i < output[1].length; i++) {
console.log("[+] bids index %s: bid_pay_amt = %s, bid_buy_amt = %s", i, web3.utils.fromWei(output[1][i][0]), web3.utils.fromWei(output[1][i][1]));
}
}
contract(
"Rubicon Exchange and Pools Original Tests",
async function (accounts) {
let bathPairInstance;
let bathAssetInstance;
let bathQuoteInstance;
let bathHouseInstance;
let bathTokenImplementation;
let rubiconRouterInstance;
let bathBuddyInstance;
describe("Deployment", async function () {
it("is deployed", async function () {
rubiconMarketInstance = await RubiconMarket.deployed();
bathHouseInstance = await BathHouse.deployed();
DAIInstance = await DAI.deployed();
WETHInstance = await WETH.deployed();
bathPairInstance = await BathPair.deployed();
bathTokenImplementation = await BathToken.new();
rubiconRouterInstance = await RubiconRouter.deployed();
});
});
describe("Bath House Initialization of Bath Pair and Bath Tokens", async function () {
it("Bath House is deployed and initialized", async function () {
// Call initialize on Bath house
return await bathHouseInstance.initialize(
rubiconMarketInstance.address,
80,
10,
bathTokenImplementation.address,
accounts[9] // Proxy admin
// 20
);
});
it("WETH Bath Token for WETH asset is deployed and initialized", async function () {
await bathHouseInstance.createBathToken(
WETHInstance.address,
accounts[0]
);
let newBathTokenAddr = await bathHouseInstance.tokenToBathToken(
WETHInstance.address
);
logIndented("new bathWETH!", newBathTokenAddr.toString());
bathAssetInstance = await BathToken.at(newBathTokenAddr);
assert.equal(
await bathAssetInstance.RubiconMarketAddress(),
rubiconMarketInstance.address
);
});
it("Init BathBuddy Vesting Wallet and Add BathBuddy to WETH BathToken Pool" , async function () {
var curretTimeInSeconds = Math.floor(Date.now() / 1000);
var twoWeeks = 60 * 60 * 24 * 7 * 2;
var fourWeeks = 60 * 60 * 24 * 7 * 4;
var oneHour = 60 * 60;
bathBuddyInstance = await BathBuddy.new(bathAssetInstance.address, curretTimeInSeconds, fourWeeks);
await bathAssetInstance.setRewardsVestingWallet(bathBuddyInstance.address);
});
// Now is initialized from the BathHouse itself
it("Bath Pair is deployed and initialized w/ BathHouse", async function () {
await bathHouseInstance.initBathPair(bathPairInstance.address, 500, -5); // 90% reserve ratio and 3 days cancel delay
livePair = await bathHouseInstance.approvedPairContract();
assert.equal(livePair.toString(), bathPairInstance.address);
});
it("Alice deposit 50 WETH to WETH bathTokens", async function () {
await WETHInstance.deposit({
from: accounts[1],
value: web3.utils.toWei((5).toString()),
});
await WETHInstance.approve(
bathAssetInstance.address,
web3.utils.toWei((5).toString()),
{ from: accounts[1] }
);
logIndented(bathAssetInstance.functions);
await bathAssetInstance.methods["deposit(uint256)"](
web3.utils.toWei((5).toString()),
{ from: accounts[1] }
);
assert.equal(
(await bathAssetInstance.balanceOf(accounts[1])).toString(),
web3.utils.toWei((5).toString())
);
});
it("Bob deposit 50 WETH to WETH bathTokens", async function () {
await WETHInstance.deposit({
from: accounts[2],
value: web3.utils.toWei((5).toString()),
});
await WETHInstance.approve(
bathAssetInstance.address,
web3.utils.toWei((5).toString()),
{ from: accounts[2] }
);
logIndented(bathAssetInstance.functions);
await bathAssetInstance.methods["deposit(uint256)"](
web3.utils.toWei((5).toString()),
{ from: accounts[2] }
);
assert.equal(
(await bathAssetInstance.balanceOf(accounts[2])).toString(),
web3.utils.toWei((5).toString())
);
});
it("Add Rewards (100 DAI) to BathBuddy Vesting Wallet " , async function () {
var curretTimeInSeconds = Math.floor(Date.now() / 1000);
var twoWeeks = 60 * 60 * 24 * 7 * 2;
var fourWeeks = 60 * 60 * 24 * 7 * 4;
var oneHour = 60 * 60;
// transfer 1000 DAI to BathBuddy Vesting Wallet
await DAIInstance.faucet({ from: accounts[0] });
await DAIInstance.transfer(bathBuddyInstance.address, web3.utils.toWei((1000).toString()), {from: accounts[0] });
// Add DAI token to the bonusTokens array
await bathHouseInstance.setBonusToken(bathAssetInstance.address, DAIInstance.address);
console.log("bathAssetInstance.bonusTokens.length = %s", (await bathAssetInstance.numOfBonusTokens()));
console.log("bathBuddyInstance (Vesting Wallet) has %s DAI", web3.utils.fromWei(await DAIInstance.balanceOf(bathBuddyInstance.address)));
console.log("bathBuddyInstance.vestedAmount(DAI) = %s", web3.utils.fromWei(await bathBuddyInstance.vestedAmount(DAIInstance.address, curretTimeInSeconds)));
helper.advanceTimeAndBlock(twoWeeks);
console.log("bathBuddyInstance.vestedAmount(DAI) = %s (End of 2nd week)", web3.utils.fromWei(await bathBuddyInstance.vestedAmount(DAIInstance.address, curretTimeInSeconds + twoWeeks)));
helper.advanceTimeAndBlock(twoWeeks - oneHour);
console.log("bathBuddyInstance.vestedAmount(DAI) = %s (Last hour of the vesting period)", web3.utils.fromWei(await bathBuddyInstance.vestedAmount(DAIInstance.address, curretTimeInSeconds + twoWeeks + twoWeeks - oneHour)));
console.log("%s DAI has been released from BathBuddy Vesting Wallet", web3.utils.fromWei(await bathBuddyInstance.released2(DAIInstance.address)));
// accounts[3] = Charles
await WETHInstance.deposit({
from: accounts[3],
value: web3.utils.toWei((8500).toString()),
});
await WETHInstance.approve(
bathAssetInstance.address,
web3.utils.toWei((8500).toString()),
{ from: accounts[3] }
);
await bathAssetInstance.methods["deposit(uint256)"](
web3.utils.toWei((8500).toString()),
{ from: accounts[3] }
);
console.log(
"Charles has %s bathWETH token, %s DAI, %s WETH",
web3.utils.fromWei((await bathAssetInstance.balanceOf(accounts[3]))),
web3.utils.fromWei((await DAIInstance.balanceOf(accounts[3]))),
web3.utils.fromWei((await WETHInstance.balanceOf(accounts[3]))),
);
console.log("Charles withdraw all his bathWETH tokens");
await bathAssetInstance.withdraw(await bathAssetInstance.balanceOf(accounts[3]), {from: accounts[3]});
console.log("%s DAI has been released from BathBuddy Vesting Wallet", web3.utils.fromWei(await bathBuddyInstance.released2(DAIInstance.address)));
console.log(
"Charles has %s bathWETH token, %s DAI, %s WETH",
web3.utils.fromWei((await bathAssetInstance.balanceOf(accounts[3]))),
web3.utils.fromWei((await DAIInstance.balanceOf(accounts[3]))),
web3.utils.fromWei((await WETHInstance.balanceOf(accounts[3]))),
);
// Alice withdrawing all her asset
console.log(
"Alice has %s bathWETH token, %s DAI, %s WETH",
web3.utils.fromWei((await bathAssetInstance.balanceOf(accounts[1]))),
web3.utils.fromWei((await DAIInstance.balanceOf(accounts[1]))),
web3.utils.fromWei((await WETHInstance.balanceOf(accounts[1]))),
);
await bathAssetInstance.withdraw(await bathAssetInstance.balanceOf(accounts[1]), {from: accounts[1]});
console.log("%s DAI has been released from BathBuddy Vesting Wallet", web3.utils.fromWei(await bathBuddyInstance.released2(DAIInstance.address)));
console.log(
"Alice has %s bathWETH token, %s DAI, %s WETH",
web3.utils.fromWei((await bathAssetInstance.balanceOf(accounts[1]))),
web3.utils.fromWei((await DAIInstance.balanceOf(accounts[1]))),
web3.utils.fromWei((await WETHInstance.balanceOf(accounts[1]))),
);
});
});
}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment