Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VEN-2090]: multisig proposal for remote XVS bridge configurations in Sepolia #141

Merged
merged 5 commits into from
Dec 28, 2023
Merged
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
165 changes: 110 additions & 55 deletions multisig/proposals/vip-003/vip-003-sepolia.ts
Original file line number Diff line number Diff line change
@@ -1,139 +1,194 @@
import { parseUnits } from "ethers/lib/utils";

import { NETWORK_ADDRESSES } from "../../../src/networkAddresses";
import { makeProposal } from "../../../src/utils";

const { sepolia } = NETWORK_ADDRESSES;

const ACM = "0xbf705C00578d43B6147ab4eaE04DBBEd1ccCdc96";
const NORMAL_TIMELOCK = "0x94fa6078b6b8a26f0b6edffbe6501b22a10470fb";
const XVS_BRIDGE_ADMIN_PROXY = "0xd3c6bdeeadB2359F726aD4cF42EAa8B7102DAd9B";
const XVS = "0x66ebd019E86e0af5f228a0439EBB33f045CBe63E";
const XVS_BRIDGE_DEST = "0xc340b7d3406502F43dC11a988E4EC5bbE536E642";
const REDSTONE_XVS_FEED = "0x0d7697a15bce933cE8671Ba3D60ab062dA216C60";

export const vip003 = () => {
return makeProposal([
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setSendVersion(uint16)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setSendVersion(uint16)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setReceiveVersion(uint16)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setReceiveVersion(uint16)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "forceResumeReceive(uint16,bytes)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "forceResumeReceive(uint16,bytes)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setOracle(address)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setOracle(address)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setMaxSingleTransactionLimit(uint16,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setMaxSingleTransactionLimit(uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setMaxDailyLimit(uint16,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setMaxDailyLimit(uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [
sepolia.XVS_BRIDGE_ADMIN,
"setMaxSingleReceiveTransactionLimit(uint16,uint256)",
sepolia.NORMAL_TIMELOCK,
],
params: [XVS_BRIDGE_ADMIN_PROXY, "setMaxSingleReceiveTransactionLimit(uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [XVS_BRIDGE_ADMIN_PROXY, "setMaxDailyReceiveLimit(uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setMaxDailyReceiveLimit(uint16,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "pause()", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "pause()", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "unpause()", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "unpause()", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "removeTrustedRemote(uint16)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "removeTrustedRemote(uint16)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "dropFailedMessage(uint16,bytes)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "dropFailedMessage(uint16,bytes)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setPrecrime(address)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "fallbackWithdraw(address,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setMinDstGas(uint16,uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setPrecrime(address)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setPayloadSizeLimit(uint16,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setMinDstGas(uint16,uint16,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setWhitelist(address,bool)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setPayloadSizeLimit(uint16,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setConfig(uint16,uint16,uint256,bytes)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setWhitelist(address,bool)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "sweepToken(address,address,uint256)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setConfig(uint16,uint16,uint256,bytes)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "updateSendAndCallEnabled(bool)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS, "mint(address,uint256)", sepolia.XVS_PROXY_OFT_DEST],
params: [XVS, "mint(address,uint256)", XVS_BRIDGE_DEST],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS, "burn(address,uint256)", sepolia.XVS_PROXY_OFT_DEST],
params: [XVS, "burn(address,uint256)", XVS_BRIDGE_DEST],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS, "setMintCap(address,uint256)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "setTrustedRemoteAddress(uint16,bytes)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "setTrustedRemoteAddress(uint16,bytes)", sepolia.NORMAL_TIMELOCK],
params: [XVS_BRIDGE_ADMIN_PROXY, "transferBridgeOwnership(address)", NORMAL_TIMELOCK],
},
{
target: sepolia.ACM,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [sepolia.XVS_BRIDGE_ADMIN, "transferBridgeOwnership(address)", sepolia.NORMAL_TIMELOCK],
params: [XVS, "migrateMinterTokens(address,address)", NORMAL_TIMELOCK],
},
{ target: sepolia.XVS_BRIDGE_ADMIN, signature: "acceptOwnership()", params: [] },
{
target: sepolia.XVS_BRIDGE_ADMIN,
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [XVS, "setMintCap(address,uint256)", NORMAL_TIMELOCK],
},
{
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [XVS, "pause()", NORMAL_TIMELOCK],
},
{
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [XVS, "unpause()", NORMAL_TIMELOCK],
},
{
target: ACM,
signature: "giveCallPermission(address,string,address)",
params: [XVS, "updateBlacklist(address,bool)", NORMAL_TIMELOCK],
},
{
target: sepolia.REDSTONE_ORACLE,
signature: "setTokenConfig((address,address,uint256))",
params: [[sepolia.XVS, REDSTONE_XVS_FEED, 144000]],
},
{
target: sepolia.RESILIENT_ORACLE,
signature: "setTokenConfig((address,address[3],bool[3]))",
params: [
[
sepolia.XVS,
[
sepolia.REDSTONE_ORACLE,
"0x0000000000000000000000000000000000000000",
"0x0000000000000000000000000000000000000000",
],
[true, false, false],
],
],
},
{ target: XVS_BRIDGE_ADMIN_PROXY, signature: "acceptOwnership()", params: [] },
{
target: XVS_BRIDGE_ADMIN_PROXY,
signature: "setTrustedRemoteAddress(uint16,bytes)",
params: [10102, "0x963cAbDC5bb51C1479ec94Df44DE2EC1a49439E3"],
params: [10102, "0x0E132cd94fd70298b747d2b4D977db8d086e5fD0"],
},
{
target: XVS_BRIDGE_ADMIN_PROXY,
signature: "setWhitelist(address,bool)",
params: [NORMAL_TIMELOCK, true],
},
{
target: sepolia.XVS,
target: XVS,
signature: "setMintCap(address,uint256)",
params: [sepolia.XVS_PROXY_OFT_DEST, "100000000000000000000"],
params: [XVS_BRIDGE_DEST, parseUnits("10000", 18)],
},
]);
};
11 changes: 6 additions & 5 deletions multisig/simulations/vip-003/vip-003-sepolia/simulations.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { expect } from "chai";
import { Contract } from "ethers";
import { parseUnits } from "ethers/lib/utils";
import { ethers } from "hardhat";

import { NETWORK_ADDRESSES } from "../../../../src/networkAddresses";
Expand All @@ -11,11 +12,11 @@ import XVS_BRIDGE_ABI from "./abi/xvsProxyOFTDest.json";

const { sepolia } = NETWORK_ADDRESSES;
const XVS = sepolia.XVS;
const XVS_BRIDGE_ADMIN = sepolia.XVS_BRIDGE_ADMIN;
const XVS_BRIDGE = sepolia.XVS_PROXY_OFT_DEST;
const XVS_BRIDGE_ADMIN = "0xd3c6bdeeadB2359F726aD4cF42EAa8B7102DAd9B";
const XVS_BRIDGE = "0xc340b7d3406502F43dC11a988E4EC5bbE536E642";
const SEPOLIA_MULTISIG = sepolia.NORMAL_TIMELOCK;

forking(4781369, () => {
forking(4936291, () => {
let xvs: Contract;
let xvsBridgeAdmin: Contract;
let xvsBridge: Contract;
Expand Down Expand Up @@ -53,12 +54,12 @@ forking(4781369, () => {

it("Should set trusted remote address in bridge", async () => {
const trustedRemote = await xvsBridge.getTrustedRemoteAddress(10102);
expect(trustedRemote).equals("0x963cabdc5bb51c1479ec94df44de2ec1a49439e3");
expect(trustedRemote).equals("0x0e132cd94fd70298b747d2b4d977db8d086e5fd0");
});

it("Should set minting limit in XVS token", async () => {
const cap = await xvs.minterToCap(XVS_BRIDGE);
expect(cap).equals("100000000000000000000");
expect(cap).equals(parseUnits("10000", 18));
});

it("Should set correct token address in bridge", async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/networkAddresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const NETWORK_ADDRESSES = {
MOCK_USDT: "0x8d412FD0bc5d826615065B931171Eed10F5AF266",
MOCK_WETH: "0x700868CAbb60e90d77B6588ce072d9859ec8E281",
MOCK_WBTC: "0x92A2928f5634BEa89A195e7BeCF0f0FEEDAB885b",
XVS: "0xDb633C11D3F9E6B8D17aC2c972C9e3B05DA59bF9",
XVS: "0x66ebd019E86e0af5f228a0439EBB33f045CBe63E",
POOL_REGISTRY: "0x758f5715d817e02857Ba40889251201A5aE3E186",
COMPTROLLER_CORE: "0x7Aa39ab4BcA897F403425C9C6FDbd0f882Be0D70",
VCRV_CORE: "0x121E3be152F283319310D807ed847E8b98319C1e",
Expand Down
Loading