Skip to content

Commit 8e4388d

Browse files
committed
feat: upgrade the implementation of vWBNB and check facets
1 parent 16e9b6c commit 8e4388d

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

simulations/vip-545/bscmainnet.ts

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ import VBEP20_DELEGATOR_ABI from "./abi/VBep20Delegator.json";
3030
const { bscmainnet } = NETWORK_ADDRESSES;
3131
const CHAINLINK_WBNB_FEED = "0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE";
3232

33+
const OLD_REWARD_FACET = "0xc2F6bDCEa4907E8CB7480d3d315bc01c125fb63C";
34+
const OLD_SETTER_FACET = "0x9D1fdD581Bd6E638A7b98ac5567248A0c4E88f64";
35+
const OLD_MARKET_FACET = "0x94573965fbCCAC5cD4558208A8cCB3F18E71B7Db";
36+
const OLD_POLICY_FACET = "0x5bb2Dfe996629E558Cd5BDBfC4c0eC7367BB96E9";
37+
38+
const NEW_REWARD_FACET = "0x05e4C8f3dbb6c2eaD4eB1f28611FA7180e79f428";
39+
const NEW_SETTER_FACET = "0x92B26cb819335DA336f59480F0ca30F9a3f18E0a";
40+
const NEW_MARKET_FACET = "0xd47c074c219E6947BB350D9aD220eE20fCCC6549";
41+
const NEW_POLICY_FACET = "0xF2095BeCa3030D43976ED46D5ca488D58354E8c9";
42+
43+
let marketFacetFunctionSelectors: string[];
44+
let policyFacetFunctionSelectors: string[];
45+
let rewardFacetFuntionSelectors: string[];
46+
let setterFacetFuntionSelectors: string[];
47+
let unitroller: Contract;
48+
3349
forking(60902107, async () => {
3450
before(async () => {
3551
await setMaxStalePeriodInChainlinkOracle(
@@ -40,13 +56,55 @@ forking(60902107, async () => {
4056
315360000,
4157
);
4258
await setMaxStalePeriodInBinanceOracle(bscmainnet.BINANCE_ORACLE, "BNB");
59+
unitroller = new ethers.Contract(bscmainnet.UNITROLLER, DIAMOND_ABI, ethers.provider);
4360
});
4461

4562
testVip("vip-543", await vip543());
4663
testVip("vip-544", await vip544());
4764
const defaultProxyAdmin = await ethers.provider.getSigner(DEFAULT_PROXY_ADMIN);
4865

4966
describe("Pre-VIP behavior", async () => {
67+
before(async () => {
68+
rewardFacetFuntionSelectors = await unitroller.facetFunctionSelectors(OLD_REWARD_FACET);
69+
setterFacetFuntionSelectors = await unitroller.facetFunctionSelectors(OLD_SETTER_FACET);
70+
marketFacetFunctionSelectors = await unitroller.facetFunctionSelectors(OLD_MARKET_FACET);
71+
policyFacetFunctionSelectors = await unitroller.facetFunctionSelectors(OLD_POLICY_FACET);
72+
});
73+
74+
describe("facets", async () => {
75+
it("market facet function selectors should be correct", async () => {
76+
expect(await unitroller.facetFunctionSelectors(OLD_MARKET_FACET)).to.deep.equal(marketFacetFunctionSelectors);
77+
expect(await unitroller.facetFunctionSelectors(NEW_MARKET_FACET)).to.deep.equal([]);
78+
});
79+
80+
it("policy facet function selectors should be correct", async () => {
81+
expect(await unitroller.facetFunctionSelectors(OLD_POLICY_FACET)).to.deep.equal(policyFacetFunctionSelectors);
82+
expect(await unitroller.facetFunctionSelectors(NEW_POLICY_FACET)).to.deep.equal([]);
83+
});
84+
85+
it("setter facet function selectors should be correct", async () => {
86+
expect(await unitroller.facetFunctionSelectors(OLD_SETTER_FACET)).to.deep.equal(setterFacetFuntionSelectors);
87+
expect(await unitroller.facetFunctionSelectors(NEW_SETTER_FACET)).to.deep.equal([]);
88+
});
89+
90+
it("reward facet function selectors should be correct", async () => {
91+
expect(await unitroller.facetFunctionSelectors(OLD_REWARD_FACET)).to.deep.equal(rewardFacetFuntionSelectors);
92+
expect(await unitroller.facetFunctionSelectors(NEW_REWARD_FACET)).to.deep.equal([]);
93+
});
94+
95+
it("unitroller should contain only old facet addresses", async () => {
96+
expect(await unitroller.facetAddresses()).to.include(OLD_SETTER_FACET);
97+
expect(await unitroller.facetAddresses()).to.include(OLD_POLICY_FACET);
98+
expect(await unitroller.facetAddresses()).to.include(OLD_MARKET_FACET);
99+
expect(await unitroller.facetAddresses()).to.include(OLD_REWARD_FACET);
100+
101+
expect(await unitroller.facetAddresses()).to.not.include(NEW_SETTER_FACET);
102+
expect(await unitroller.facetAddresses()).to.not.include(NEW_POLICY_FACET);
103+
expect(await unitroller.facetAddresses()).to.not.include(NEW_MARKET_FACET);
104+
expect(await unitroller.facetAddresses()).to.not.include(NEW_REWARD_FACET);
105+
});
106+
});
107+
50108
describe("check implementation", async () => {
51109
it("check vBNBAdmin implementation", async () => {
52110
const vBNBAdmin = (await ethers.getContractAt(TRANSPARENT_PROXY_ABI, vBNB_ADMIN)) as Contract;
@@ -86,11 +144,45 @@ forking(60902107, async () => {
86144
testVip("VIP-545", await vip545(), {
87145
callbackAfterExecution: async txResponse => {
88146
await expectEvents(txResponse, [DIAMOND_ABI], ["DiamondCut"], [1]);
89-
await expectEvents(txResponse, [UNITROLLER_ABI], ["NewImplementation"], [40]);
147+
await expectEvents(txResponse, [UNITROLLER_ABI], ["NewImplementation"], [41]);
90148
},
91149
});
92150

93151
describe("Post-VIP behavior", async () => {
152+
describe("facets", async () => {
153+
it("market facet function selectors should be updated for new facet address", async () => {
154+
const expectSelectors = [...marketFacetFunctionSelectors].sort();
155+
const updatedSelectors = [...(await unitroller.facetFunctionSelectors(NEW_MARKET_FACET))].sort();
156+
157+
expect(updatedSelectors).to.deep.equal(expectSelectors);
158+
expect(await unitroller.facetFunctionSelectors(OLD_MARKET_FACET)).to.deep.equal([]);
159+
});
160+
161+
it("policy facet function selectors should be updated for new facet address", async () => {
162+
const expectSelectors = [...policyFacetFunctionSelectors].sort();
163+
const updatedSelectors = [...(await unitroller.facetFunctionSelectors(NEW_POLICY_FACET))].sort();
164+
165+
expect(updatedSelectors).to.deep.equal(expectSelectors);
166+
expect(await unitroller.facetFunctionSelectors(OLD_POLICY_FACET)).to.deep.equal([]);
167+
});
168+
169+
it("setter facet function selectors should be updated for new facet address", async () => {
170+
const expectSelectors = [...setterFacetFuntionSelectors].sort();
171+
const updatedSelectors = [...(await unitroller.facetFunctionSelectors(NEW_SETTER_FACET))].sort();
172+
173+
expect(updatedSelectors).to.deep.equal(expectSelectors);
174+
expect(await unitroller.facetFunctionSelectors(OLD_SETTER_FACET)).to.deep.equal([]);
175+
});
176+
177+
it("reward facet function selectors should be updated for new facet address", async () => {
178+
const expectSelectors = [...rewardFacetFuntionSelectors].sort();
179+
const updatedSelectors = [...(await unitroller.facetFunctionSelectors(NEW_REWARD_FACET))].sort();
180+
181+
expect(updatedSelectors).to.deep.equal(expectSelectors);
182+
expect(await unitroller.facetFunctionSelectors(OLD_REWARD_FACET)).to.deep.equal([]);
183+
});
184+
});
185+
94186
describe("check implementation", async () => {
95187
it("check vBNBAdmin implementation", async () => {
96188
const vBNBAdmin = (await ethers.getContractAt(TRANSPARENT_PROXY_ABI, vBNB_ADMIN)) as Contract;

vips/vip-545/bscmainnet.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const vTokens = {
5454
vUSDT: "0xfD5840Cd36d94D7229439859C0112a4185BC0255",
5555
vUSD1: "0x0C1DA220D301155b87318B90692Da8dc43B67340",
5656
vWBETH: "0x6CFdEc747f37DAf3b87a35a1D9c8AD3063A1A8A0",
57+
vWBNB: "0x6bCa74586218dB34cdB402295796b79663d816e9",
5758
vXRP: "0xB248a295732e0225acd3337607cc01068e3b9c10",
5859
vxSolvBTC: "0xd804dE60aFD05EE6B89aab5D152258fD461B07D5",
5960
vXVS: "0x151B1e2635A717bcDc836ECd6FbB62B674FE3E1D",

vips/vip-545/cut-params-mainnet.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
"0xc488847b",
1717
"0xa78dc775",
1818
"0x0686dab6",
19-
"0xddbf54fd"
19+
"0xddbf54fd",
20+
"0xc5b4db55"
2021
]
2122
],
2223
[
@@ -56,8 +57,7 @@
5657
"0x7858524d",
5758
"0xbf32442d",
5859
"0xededbae6",
59-
"0x655f0725",
60-
"0xc5b4db55"
60+
"0x655f0725"
6161
]
6262
],
6363
[

0 commit comments

Comments
 (0)