Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions mai.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"@studydefi/money-legos": "^2.4.1",
"abi-decoder": "^2.3.0",
"dotenv": "^8.2.0",
"ethers": "^5.1.3"
"ethers": "^5.4.0"
},
"devDependencies": {
"eslint": "^7.10.0"
Expand Down
12 changes: 8 additions & 4 deletions scripts/contracts.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ const { ethers } = require("ethers");
const erc20 = require("@studydefi/money-legos/erc20");
require("dotenv").config();

const provider = new ethers.providers.InfuraProvider(1, process.env.INFURA_API);
const urlInfo = {
url: "https://nd-654-291-805.p2pify.com",
user: "keen-bell",
password: "chaste-gulf-chunk-aloe-deuce-copied"
};

const provider = new ethers.providers.JsonRpcProvider(urlInfo, 137);
const jarABI = require("../ABIs/jar.json");
const masterchefABI = require("../ABIs/masterchef.json");

module.exports = {
provider,
masterchef: new ethers.Contract("0xbD17B1ce622d73bD438b9E658acA5996dc394b0d", masterchefABI, provider),
pBACDAI: new ethers.Contract("0x2350fc7268F3f5a6cC31f26c38f706E41547505d", jarABI, provider),
pBASDAI: new ethers.Contract("0x748712686a78737da0b7643df78fdf2778dc5944", jarABI, provider),
masterchef: new ethers.Contract("0x20b2a3fc7b13ca0ccf7af81a68a14cb3116e8749", masterchefABI, provider),
pMAIUSDC: new ethers.Contract("0xf12bb9dcd40201b5a110e11e38dcddf4d11e6f83", jarABI, provider),
};
75 changes: 31 additions & 44 deletions scripts/snapshot.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
const fs = require("fs");
const { ethers } = require("ethers");
const contracts = require("./contracts");
const { masterchef } = require("./contracts");
const erc20IFace = new ethers.utils.Interface(require("../ABIs/jar.json"));
const provider = contracts.provider;
const abiDecoder = require("abi-decoder");
abiDecoder.addABI(require("../ABIs/jar.json"));

const generateData = async ({ jar, poolID, fuckedBlock }) => {
const snapshotBlock = 12272232;
let users = {};

// 1. Getting all the users
const filter = jar.filters.Transfer();
const events = await jar.queryFilter(filter);
const events = await jar.queryFilter(filter, fuckedBlock );
console.log(events[0])
for (const e of events) {
users[e.args.from] = ethers.constants.Zero;
users[e.args.to] = ethers.constants.Zero;
Expand All @@ -21,43 +24,27 @@ const generateData = async ({ jar, poolID, fuckedBlock }) => {
delete users[contracts.masterchef.address];
delete users["0x000000000000000000000000000000000000dEaD"];

// 2. Getting the total asset balance of the users at the pre-fucked block
const ratio = await jar.getRatio({ blockTag: fuckedBlock - 1 });
await Promise.all(
Object.keys(users).map(async (userAddress) => {
// pToken balance in jar
const balInJar = await jar.balanceOf(userAddress, {
blockTag: fuckedBlock - 1,
});
// pToken balance in farm
const { amount: balInFarm } = await contracts.masterchef.userInfo(poolID, userAddress, {
blockTag: fuckedBlock - 1,
});

// store total asset balance of the users (at pre-fucked state)
users[userAddress] = balInJar
.add(balInFarm)
.mul(ratio) // convert from pToken to token
.div(ethers.utils.parseEther("1"));
})
);

// Post fuck block
// 3. Do a state transition to see how much users have withdrawn and deposited into the fund
const depositEventsPostFuck = events
.filter((x) => x.blockNumber >= fuckedBlock && x.blockNumber < snapshotBlock)
.filter(
(x) => x.blockNumber >= fuckedBlock)
.filter((x) => x.args.from === ethers.constants.AddressZero);
await Promise.all(
depositEventsPostFuck.map(async (evt) => {
const txReceipt = await provider.getTransactionReceipt(evt.transactionHash);
txReceipt.logs = txReceipt.logs.map((x) => {
return erc20IFace.parseLog(x);
});
const txReceipt = await provider.getTransactionReceipt(
evt.transactionHash
);

txReceipt.logs = txReceipt.logs.map((x) => erc20IFace.parseLog(x));

txReceipt.logs.forEach((x) => {
// for each transfer, see how much non-pToken is deposited into the jar
if (x.args.to === jar.address) {
// whatever ppl put into the jar, add that to the balance
users[x.args.from] = (users[x.args.from] || ethers.BigNumber.from(0)).add(x.args.value);
users[x.args.from] = (
users[x.args.from] || ethers.BigNumber.from(0)
).add(x.args.value);
}
});
})
Expand All @@ -68,7 +55,9 @@ const generateData = async ({ jar, poolID, fuckedBlock }) => {
.filter((x) => x.args.to === ethers.constants.AddressZero);
await Promise.all(
withdrawEventsPostFuck.map(async (evt) => {
const txReceipt = await provider.getTransactionReceipt(evt.transactionHash);
const txReceipt = await provider.getTransactionReceipt(
evt.transactionHash
);

txReceipt.logs = txReceipt.logs
.map((x) => {
Expand All @@ -82,8 +71,14 @@ const generateData = async ({ jar, poolID, fuckedBlock }) => {

txReceipt.logs.forEach((x) => {
// for each transfer, see how much non-pToken was sent out from the jar
if (x.args.from === jar.address && x.args.to !== ethers.constants.AddressZero) {
users[x.args.to] = (users[x.args.to] || ethers.BigNumber.from(0)).sub(x.args.value);
if (
x.args.from === jar.address &&
x.args.to !== ethers.constants.AddressZero &&
x.args.to !== masterchef.address
) {
users[x.args.to] = (users[x.args.to] || ethers.BigNumber.from(0)).sub(
x.args.value
);
}
});
})
Expand All @@ -110,21 +105,13 @@ const generateData = async ({ jar, poolID, fuckedBlock }) => {
};

const main = async () => {
const bacdaiFuckedBlock = 12243088;
const basdaiFuckedBlock = 12243432;

const monies = [
{
jar: contracts.pBACDAI,
poolID: 22,
fuckedBlock: bacdaiFuckedBlock,
outfile: "bacdai.json",
},
{
jar: contracts.pBASDAI,
poolID: 27,
fuckedBlock: basdaiFuckedBlock,
outfile: "basdai.json",
jar: contracts.pMAIUSDC,
poolID: 7,
fuckedBlock: 15597905,
outfile: "mai.json",
},
];

Expand Down
Loading