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
318 changes: 318 additions & 0 deletions simulations/vip-554/abi/XVS.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,318 @@
[
{
"inputs": [{ "internalType": "address", "name": "accessControlManager_", "type": "address" }],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [{ "internalType": "address", "name": "user", "type": "address" }],
"name": "AccountBlacklisted",
"type": "error"
},
{ "inputs": [], "name": "AddressesMustDiffer", "type": "error" },
{ "inputs": [], "name": "MintLimitExceed", "type": "error" },
{ "inputs": [], "name": "MintedAmountExceed", "type": "error" },
{ "inputs": [], "name": "NewCapNotGreaterThanMintedTokens", "type": "error" },
{ "inputs": [], "name": "Unauthorized", "type": "error" },
{ "inputs": [], "name": "ZeroAddressNotAllowed", "type": "error" },
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "owner", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "spender", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "user", "type": "address" },
{ "indexed": false, "internalType": "bool", "name": "value", "type": "bool" }
],
"name": "BlacklistUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "minter", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "MintCapChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "minter", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" }
],
"name": "MintLimitDecreased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "minter", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" }
],
"name": "MintLimitIncreased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "source", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "destination", "type": "address" }
],
"name": "MintedTokensMigrated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "oldAccessControlManager", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "newAccessControlManager", "type": "address" }
],
"name": "NewAccessControlManager",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" }
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "from", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "to", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "accessControlManager",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "owner", "type": "address" },
{ "internalType": "address", "name": "spender", "type": "address" }
],
"name": "allowance",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "spender", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "approve",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "account", "type": "address" }],
"name": "balanceOf",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "account_", "type": "address" },
{ "internalType": "uint256", "name": "amount_", "type": "uint256" }
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "spender", "type": "address" },
{ "internalType": "uint256", "name": "subtractedValue", "type": "uint256" }
],
"name": "decreaseAllowance",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "spender", "type": "address" },
{ "internalType": "uint256", "name": "addedValue", "type": "uint256" }
],
"name": "increaseAllowance",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "user_", "type": "address" }],
"name": "isBlackListed",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "source_", "type": "address" },
{ "internalType": "address", "name": "destination_", "type": "address" }
],
"name": "migrateMinterTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "account_", "type": "address" },
{ "internalType": "uint256", "name": "amount_", "type": "uint256" }
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "minterToCap",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "minterToMintedAmount",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{ "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" },
{
"inputs": [],
"name": "paused",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "view",
"type": "function"
},
{ "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" },
{
"inputs": [{ "internalType": "address", "name": "newAccessControlAddress_", "type": "address" }],
"name": "setAccessControlManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "minter_", "type": "address" },
{ "internalType": "uint256", "name": "amount_", "type": "uint256" }
],
"name": "setMintCap",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "transfer",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "from", "type": "address" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "transferFrom",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{ "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" },
{
"inputs": [
{ "internalType": "address", "name": "user_", "type": "address" },
{ "internalType": "bool", "name": "value_", "type": "bool" }
],
"name": "updateBlacklist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
30 changes: 30 additions & 0 deletions simulations/vip-554/bscmainnet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { expect } from "chai";
import { ethers } from "hardhat";
import { NETWORK_ADDRESSES } from "src/networkAddresses";
import { forking, testVip } from "src/vip-framework";

import vip552, { TOTAL_XVS } from "../../vips/vip-554/bscmainnet";
import XVS_ABI from "./abi/XVS.json";

const { bscmainnet } = NETWORK_ADDRESSES;

forking(64039825, async () => {
let provider: any;
let xvs: any;
let comptrollerPreviousXVSBalance: any;

before(async () => {
provider = ethers.provider;
xvs = new ethers.Contract(bscmainnet.XVS, XVS_ABI, provider);
comptrollerPreviousXVSBalance = await xvs.balanceOf(bscmainnet.UNITROLLER);
});

testVip("vip-552", await vip552());

describe("Post-VIP behavior", async () => {
it("should transfer XVS to the Comptroller", async () => {
const comptrollerXVSBalanceAfter = await xvs.balanceOf(bscmainnet.UNITROLLER);
expect(comptrollerXVSBalanceAfter).to.equal(comptrollerPreviousXVSBalance.add(TOTAL_XVS));
});
});
});
36 changes: 36 additions & 0 deletions vips/vip-554/bscmainnet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { parseUnits } from "ethers/lib/utils";
import { NETWORK_ADDRESSES } from "src/networkAddresses";
import { ProposalMeta, ProposalType } from "src/types";
import { makeProposal } from "src/utils";

const { bscmainnet } = NETWORK_ADDRESSES;

export const ARB_WITHDRAWN = parseUnits("1450.889", 18);
export const ETH_WITHDRAWN = parseUnits("40736.5574", 18);
export const ZKSYNC_WITHDRAWN = parseUnits("2904.6815", 18);
export const TOTAL_XVS = ARB_WITHDRAWN.add(ETH_WITHDRAWN).add(ZKSYNC_WITHDRAWN);

export const vip554 = async () => {
const meta: ProposalMeta = {
version: "v2",
title: "VIP-554",
description: ``,
forDescription: "I agree that Venus Protocol should proceed with this proposal",
againstDescription: "I do not think that Venus Protocol should proceed with this proposal",
abstainDescription: "I am indifferent to whether Venus Protocol proceeds or not",
};

return makeProposal(
[
{
target: bscmainnet.VTREASURY,
signature: "withdrawTreasuryBEP20(address,uint256,address)",
params: [bscmainnet.XVS, TOTAL_XVS, bscmainnet.UNITROLLER],
},
],
meta,
ProposalType.REGULAR,
);
};

export default vip554;
Loading