Links
Safe transaction | app.safe.global link |
Safe transaction hash | 0x425d0779ecec50f443f71ed6a43a57121d3f159c19aa8b0599a908cd1f74807b |
Safe transaction nonce | 81 |
GitHub PR | https://github.com/BeanstalkFarms/Beanstalk/pull/802 |
GitHub commit hash | https://github.com/BeanstalkFarms/Beanstalk/pull/802/commits/10c50916acdd1a2ea8c3699217779cbbe549389e |
Snapshot proposal | https://snapshot.org/#/beanstalkdao.eth/proposal/0x6d9816a73f63a122bc19d0e2690fbe744becc18dbeef2a25a39f8a48da1d44d7 |
diamondCut JSON:
{
"diamondCut": {
"diamondCut": [
[
"0x0000000000000000000000000000000000000000",
2,
[
"0xa84643e4"
]
],
[
"0xb52af7889b05eF652468E98D249700415a9F587D",
0,
[
"0xe68a543a"
]
],
[
"0xb52af7889b05eF652468E98D249700415a9F587D",
1,
[
"0x787cee99",
"0xfa345569",
"0x1acc0a47",
"0x1be655e8",
"0x9a516cad",
"0x087d78b4",
"0x7caa025f",
"0xbfe2f3be",
"0x6de45df2",
"0x014a8a49",
"0xbb7de478",
"0x43cc4ee0",
"0xab434eb7",
"0xadef4533",
"0x9f06b3fa",
"0xb8a04d1b",
"0x691bcc88",
"0xfc6a19df",
"0x13ed3cea",
"0xd3c73ec8",
"0xa33fa99f",
"0x33f37f27"
]
],
[
"0x2604D728D8c6918b8C427bF42aa2ed07ceB5cf23",
1,
[
"0xb362a6e8"
]
],
[
"0x09D466663586292F5f0c1D99e9547A7A81E887f5",
1,
[
"0x4aa06652",
"0x24dd285c"
]
],
[
"0x51F74C024936E296132c6F4E59b9EEd677eb3B1c",
1,
[
"0x64ee4b80",
"0xca7b7d7b",
"0xfc06d2a6"
]
],
[
"0x9fd4daD032324bC569decC3795731aEC309c2923",
1,
[
"0x2a27c499",
"0xeedc7ab9",
"0x7ba6cbf8",
"0xeb0e1215",
"0xd1db56b8",
"0x69aa7e02",
"0xcc88d4f9",
"0x673c75f0",
"0x64b3496b",
"0x93523425",
"0x64887852",
"0xb2b0556d",
"0x141933bf",
"0xf98da2de",
"0x383f170f",
"0xd1943f7f",
"0xcb2d0a3c",
"0xcce813a1",
"0x6af8e5a4",
"0x7d23804d",
"0x50539159",
"0xbbf459a7",
"0xf788b47c",
"0xa13a3742",
"0x93c9e531",
"0x5c975abb",
"0xe60d7a83",
"0x471bcdbe",
"0x43def26e",
"0xc50b0fb0",
"0x3b2ecb70",
"0x16ada547",
"0x06c499d8",
"0x686b6159",
"0x597490c0"
]
],
[
"0x9586878Ea437CBB6D4b6381Bde7B064f531CfB77",
0,
[
"0x12cb5eab"
]
],
[
"0x9586878Ea437CBB6D4b6381Bde7B064f531CfB77",
1,
[
"0x304ec65d",
"0xb6f42085",
"0x1799b3b2",
"0x1edb6be1",
"0x9bb4e35a",
"0x83e08888",
"0xdc6ba285",
"0x39448802",
"0xc85951a1",
"0x9c45a1d5",
"0x34af5416",
"0x1e223143",
"0x29130a66",
"0x4d622831",
"0x69744dd0",
"0xf4a057e2",
"0x6ae1c014",
"0xd47aee59",
"0x4a16607c",
"0x4f9a9678",
"0xf9c4ebde",
"0xa3ef48c9",
"0x363591d0",
"0x94daa221",
"0xe3d4e44c",
"0xf255da60",
"0x93a39bea"
]
]
],
"initFacetAddress": "0x2d130cEfa0bf9D1a3e0445c9478503c326F2F8E9",
"functionCall": "0xe1c7392a"
},
"encoded": "0x1f931c1c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000002d130cefa0bf9d1a3e0445c9478503c326f2f8e900000000000000000000000000000000000000000000000000000000000011c00000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000005a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000cc00000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001a84643e400000000000000000000000000000000000000000000000000000000000000000000000000000000b52af7889b05ef652468e98d249700415a9f587d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001e68a543a00000000000000000000000000000000000000000000000000000000000000000000000000000000b52af7889b05ef652468e98d249700415a9f587d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000016787cee9900000000000000000000000000000000000000000000000000000000fa345569000000000000000000000000000000000000000000000000000000001acc0a47000000000000000000000000000000000000000000000000000000001be655e8000000000000000000000000000000000000000000000000000000009a516cad00000000000000000000000000000000000000000000000000000000087d78b4000000000000000000000000000000000000000000000000000000007caa025f00000000000000000000000000000000000000000000000000000000bfe2f3be000000000000000000000000000000000000000000000000000000006de45df200000000000000000000000000000000000000000000000000000000014a8a4900000000000000000000000000000000000000000000000000000000bb7de4780000000000000000000000000000000000000000000000000000000043cc4ee000000000000000000000000000000000000000000000000000000000ab434eb700000000000000000000000000000000000000000000000000000000adef4533000000000000000000000000000000000000000000000000000000009f06b3fa00000000000000000000000000000000000000000000000000000000b8a04d1b00000000000000000000000000000000000000000000000000000000691bcc8800000000000000000000000000000000000000000000000000000000fc6a19df0000000000000000000000000000000000000000000000000000000013ed3cea00000000000000000000000000000000000000000000000000000000d3c73ec800000000000000000000000000000000000000000000000000000000a33fa99f0000000000000000000000000000000000000000000000000000000033f37f27000000000000000000000000000000000000000000000000000000000000000000000000000000002604d728d8c6918b8c427bf42aa2ed07ceb5cf23000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001b362a6e80000000000000000000000000000000000000000000000000000000000000000000000000000000009d466663586292f5f0c1d99e9547a7a81e887f50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024aa066520000000000000000000000000000000000000000000000000000000024dd285c0000000000000000000000000000000000000000000000000000000000000000000000000000000051f74c024936e296132c6f4e59b9eed677eb3b1c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000364ee4b8000000000000000000000000000000000000000000000000000000000ca7b7d7b00000000000000000000000000000000000000000000000000000000fc06d2a6000000000000000000000000000000000000000000000000000000000000000000000000000000009fd4dad032324bc569decc3795731aec309c29230000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000232a27c49900000000000000000000000000000000000000000000000000000000eedc7ab9000000000000000000000000000000000000000000000000000000007ba6cbf800000000000000000000000000000000000000000000000000000000eb0e121500000000000000000000000000000000000000000000000000000000d1db56b80000000000000000000000000000000000000000000000000000000069aa7e0200000000000000000000000000000000000000000000000000000000cc88d4f900000000000000000000000000000000000000000000000000000000673c75f00000000000000000000000000000000000000000000000000000000064b3496b0000000000000000000000000000000000000000000000000000000093523425000000000000000000000000000000000000000000000000000000006488785200000000000000000000000000000000000000000000000000000000b2b0556d00000000000000000000000000000000000000000000000000000000141933bf00000000000000000000000000000000000000000000000000000000f98da2de00000000000000000000000000000000000000000000000000000000383f170f00000000000000000000000000000000000000000000000000000000d1943f7f00000000000000000000000000000000000000000000000000000000cb2d0a3c00000000000000000000000000000000000000000000000000000000cce813a1000000000000000000000000000000000000000000000000000000006af8e5a4000000000000000000000000000000000000000000000000000000007d23804d000000000000000000000000000000000000000000000000000000005053915900000000000000000000000000000000000000000000000000000000bbf459a700000000000000000000000000000000000000000000000000000000f788b47c00000000000000000000000000000000000000000000000000000000a13a37420000000000000000000000000000000000000000000000000000000093c9e531000000000000000000000000000000000000000000000000000000005c975abb00000000000000000000000000000000000000000000000000000000e60d7a8300000000000000000000000000000000000000000000000000000000471bcdbe0000000000000000000000000000000000000000000000000000000043def26e00000000000000000000000000000000000000000000000000000000c50b0fb0000000000000000000000000000000000000000000000000000000003b2ecb700000000000000000000000000000000000000000000000000000000016ada5470000000000000000000000000000000000000000000000000000000006c499d800000000000000000000000000000000000000000000000000000000686b615900000000000000000000000000000000000000000000000000000000597490c0000000000000000000000000000000000000000000000000000000000000000000000000000000009586878ea437cbb6d4b6381bde7b064f531cfb7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000112cb5eab000000000000000000000000000000000000000000000000000000000000000000000000000000009586878ea437cbb6d4b6381bde7b064f531cfb7700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001b304ec65d00000000000000000000000000000000000000000000000000000000b6f42085000000000000000000000000000000000000000000000000000000001799b3b2000000000000000000000000000000000000000000000000000000001edb6be1000000000000000000000000000000000000000000000000000000009bb4e35a0000000000000000000000000000000000000000000000000000000083e0888800000000000000000000000000000000000000000000000000000000dc6ba285000000000000000000000000000000000000000000000000000000003944880200000000000000000000000000000000000000000000000000000000c85951a1000000000000000000000000000000000000000000000000000000009c45a1d50000000000000000000000000000000000000000000000000000000034af5416000000000000000000000000000000000000000000000000000000001e2231430000000000000000000000000000000000000000000000000000000029130a66000000000000000000000000000000000000000000000000000000004d6228310000000000000000000000000000000000000000000000000000000069744dd000000000000000000000000000000000000000000000000000000000f4a057e2000000000000000000000000000000000000000000000000000000006ae1c01400000000000000000000000000000000000000000000000000000000d47aee59000000000000000000000000000000000000000000000000000000004a16607c000000000000000000000000000000000000000000000000000000004f9a967800000000000000000000000000000000000000000000000000000000f9c4ebde00000000000000000000000000000000000000000000000000000000a3ef48c900000000000000000000000000000000000000000000000000000000363591d00000000000000000000000000000000000000000000000000000000094daa22100000000000000000000000000000000000000000000000000000000e3d4e44c00000000000000000000000000000000000000000000000000000000f255da600000000000000000000000000000000000000000000000000000000093a39bea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e1c7392a00000000000000000000000000000000000000000000000000000000"
}Overview
Init Contract
InitBipMiscImprovements: 0x2d130cEfa0bf9D1a3e0445c9478503c326F2F8E9
Facets Being Removed
Facet | Address |
UnripeFacet | 0xD64BB5c2dBf12fEBeFc6397926A3c0aA6f8b6535 |
ConvertFacet | 0xEb1b833D3E81cb3d390514cabB9b809E6170626C |
ConvertGettersFacet | 0x8ABa09526dc6EB6Ea44eE3f8745dD8bc9EF744E2 |
SeasonFacet | 0x92458b7ade7798c45E5ff583c353F70F950d66Cf |
SeasonGettersFacet | 0x5A1675f3156c9e73D7eA20eb58470A0002865E85 |
FertilizerFacet | 0x729672c68134E2DF0CdD36D3296841A2993534c7 |
Facets Being Added
Facet | Address |
UnripeFacet | 0xb52af7889b05eF652468E98D249700415a9F587D |
ConvertFacet | 0x2604D728D8c6918b8C427bF42aa2ed07ceB5cf23 |
ConvertGettersFacet | 0x09D466663586292F5f0c1D99e9547A7A81E887f5 |
SeasonFacet | 0x51F74C024936E296132c6F4E59b9EEd677eb3B1c |
SeasonGettersFacet | 0x9fd4daD032324bC569decC3795731aEC309c2923 |
FertilizerFacet | 0x9586878Ea437CBB6D4b6381Bde7B064f531CfB77 |
Verifying the Transaction
Setup
- Follow How to Setup Environment, pulling and compiling the latest changes on the
bip-misc-upgradesbranch.
The Diamond Cut Transaction
Add the following bip49enc task to hardhat.config.js per How to Verify Facet Changes.
You can verify that the following data value in the final line of code is the one that corresponds to the BIP transaction by comparing it with the Raw data field on the Safe multisig transaction.
task('bip49enc', async function () {
const bcm = await impersonateBeanstalkOwner()
await mintEth(bcm.address)
await bcm.sendTransaction({to: BEANSTALK, value: 0, data: '0x1f931c1c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000002d130cefa0bf9d1a3e0445c9478503c326f2f8e900000000000000000000000000000000000000000000000000000000000011c00000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000005a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007e00000000000000000000000000000000000000000000000000000000000000cc00000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001a84643e400000000000000000000000000000000000000000000000000000000000000000000000000000000b52af7889b05ef652468e98d249700415a9f587d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001e68a543a00000000000000000000000000000000000000000000000000000000000000000000000000000000b52af7889b05ef652468e98d249700415a9f587d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000016787cee9900000000000000000000000000000000000000000000000000000000fa345569000000000000000000000000000000000000000000000000000000001acc0a47000000000000000000000000000000000000000000000000000000001be655e8000000000000000000000000000000000000000000000000000000009a516cad00000000000000000000000000000000000000000000000000000000087d78b4000000000000000000000000000000000000000000000000000000007caa025f00000000000000000000000000000000000000000000000000000000bfe2f3be000000000000000000000000000000000000000000000000000000006de45df200000000000000000000000000000000000000000000000000000000014a8a4900000000000000000000000000000000000000000000000000000000bb7de4780000000000000000000000000000000000000000000000000000000043cc4ee000000000000000000000000000000000000000000000000000000000ab434eb700000000000000000000000000000000000000000000000000000000adef4533000000000000000000000000000000000000000000000000000000009f06b3fa00000000000000000000000000000000000000000000000000000000b8a04d1b00000000000000000000000000000000000000000000000000000000691bcc8800000000000000000000000000000000000000000000000000000000fc6a19df0000000000000000000000000000000000000000000000000000000013ed3cea00000000000000000000000000000000000000000000000000000000d3c73ec800000000000000000000000000000000000000000000000000000000a33fa99f0000000000000000000000000000000000000000000000000000000033f37f27000000000000000000000000000000000000000000000000000000000000000000000000000000002604d728d8c6918b8c427bf42aa2ed07ceb5cf23000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001b362a6e80000000000000000000000000000000000000000000000000000000000000000000000000000000009d466663586292f5f0c1d99e9547a7a81e887f50000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024aa066520000000000000000000000000000000000000000000000000000000024dd285c0000000000000000000000000000000000000000000000000000000000000000000000000000000051f74c024936e296132c6f4e59b9eed677eb3b1c00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000364ee4b8000000000000000000000000000000000000000000000000000000000ca7b7d7b00000000000000000000000000000000000000000000000000000000fc06d2a6000000000000000000000000000000000000000000000000000000000000000000000000000000009fd4dad032324bc569decc3795731aec309c29230000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000232a27c49900000000000000000000000000000000000000000000000000000000eedc7ab9000000000000000000000000000000000000000000000000000000007ba6cbf800000000000000000000000000000000000000000000000000000000eb0e121500000000000000000000000000000000000000000000000000000000d1db56b80000000000000000000000000000000000000000000000000000000069aa7e0200000000000000000000000000000000000000000000000000000000cc88d4f900000000000000000000000000000000000000000000000000000000673c75f00000000000000000000000000000000000000000000000000000000064b3496b0000000000000000000000000000000000000000000000000000000093523425000000000000000000000000000000000000000000000000000000006488785200000000000000000000000000000000000000000000000000000000b2b0556d00000000000000000000000000000000000000000000000000000000141933bf00000000000000000000000000000000000000000000000000000000f98da2de00000000000000000000000000000000000000000000000000000000383f170f00000000000000000000000000000000000000000000000000000000d1943f7f00000000000000000000000000000000000000000000000000000000cb2d0a3c00000000000000000000000000000000000000000000000000000000cce813a1000000000000000000000000000000000000000000000000000000006af8e5a4000000000000000000000000000000000000000000000000000000007d23804d000000000000000000000000000000000000000000000000000000005053915900000000000000000000000000000000000000000000000000000000bbf459a700000000000000000000000000000000000000000000000000000000f788b47c00000000000000000000000000000000000000000000000000000000a13a37420000000000000000000000000000000000000000000000000000000093c9e531000000000000000000000000000000000000000000000000000000005c975abb00000000000000000000000000000000000000000000000000000000e60d7a8300000000000000000000000000000000000000000000000000000000471bcdbe0000000000000000000000000000000000000000000000000000000043def26e00000000000000000000000000000000000000000000000000000000c50b0fb0000000000000000000000000000000000000000000000000000000003b2ecb700000000000000000000000000000000000000000000000000000000016ada5470000000000000000000000000000000000000000000000000000000006c499d800000000000000000000000000000000000000000000000000000000686b615900000000000000000000000000000000000000000000000000000000597490c0000000000000000000000000000000000000000000000000000000000000000000000000000000009586878ea437cbb6d4b6381bde7b064f531cfb7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000112cb5eab000000000000000000000000000000000000000000000000000000000000000000000000000000009586878ea437cbb6d4b6381bde7b064f531cfb7700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001b304ec65d00000000000000000000000000000000000000000000000000000000b6f42085000000000000000000000000000000000000000000000000000000001799b3b2000000000000000000000000000000000000000000000000000000001edb6be1000000000000000000000000000000000000000000000000000000009bb4e35a0000000000000000000000000000000000000000000000000000000083e0888800000000000000000000000000000000000000000000000000000000dc6ba285000000000000000000000000000000000000000000000000000000003944880200000000000000000000000000000000000000000000000000000000c85951a1000000000000000000000000000000000000000000000000000000009c45a1d50000000000000000000000000000000000000000000000000000000034af5416000000000000000000000000000000000000000000000000000000001e2231430000000000000000000000000000000000000000000000000000000029130a66000000000000000000000000000000000000000000000000000000004d6228310000000000000000000000000000000000000000000000000000000069744dd000000000000000000000000000000000000000000000000000000000f4a057e2000000000000000000000000000000000000000000000000000000006ae1c01400000000000000000000000000000000000000000000000000000000d47aee59000000000000000000000000000000000000000000000000000000004a16607c000000000000000000000000000000000000000000000000000000004f9a967800000000000000000000000000000000000000000000000000000000f9c4ebde00000000000000000000000000000000000000000000000000000000a3ef48c900000000000000000000000000000000000000000000000000000000363591d00000000000000000000000000000000000000000000000000000000094daa22100000000000000000000000000000000000000000000000000000000e3d4e44c00000000000000000000000000000000000000000000000000000000f255da600000000000000000000000000000000000000000000000000000000093a39bea000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e1c7392a00000000000000000000000000000000000000000000000000000000'})
})Verifying the Diamond Cut
- Follow How to Verify Facet Changes.
- Verify there are no remaining function selectors from the Facets Being Deprecated section above.
- Verify that all function selectors from the Facets Being Added section above are present.
Verifying the Deployed Code
- Add the following tasks to
hardhat.config.js: - Verify that each facet has the correct deployed code by:
task("verifybip-49", async function () {
facetNames = [
"UnripeFacet",
"ConvertFacet",
"ConvertGettersFacet",
"SeasonFacet",
"SeasonGettersFacet",
"FertilizerFacet"
];
facetLibraries = {
UnripeFacet: { LibLockedUnderlying: "0x38980F78D9d242fBB4fE9aEaBB0A3eA7a0509d48" },
ConvertFacet: { LibConvert: "0x7a92A0a493CAfFf4A9dC5802c8042dC3Ba35c022" },
SeasonFacet: {
LibGauge: "0xcd8AD6026D8C9c74E04cfEd97A167Ce54D8520b2",
LibIncentive: "0x9d5E1F29ABc45205Cf95161DEe74C1df95E11052",
LibLockedUnderlying: "0x38980F78D9d242fBB4fE9aEaBB0A3eA7a0509d48",
LibWellMinting: "0xc0EadEfb4A8336C3B259d612998c539841cA8963",
LibGerminate: "0x4785E65632b519f432382bC292be3AC9dE699089"
},
SeasonGettersFacet: {
LibLockedUnderlying: "0x38980F78D9d242fBB4fE9aEaBB0A3eA7a0509d48",
LibWellMinting: "0xc0EadEfb4A8336C3B259d612998c539841cA8963"
},
};
deployedFacetAddresses = {
UnripeFacet: "0xb52af7889b05eF652468E98D249700415a9F587D",
ConvertFacet: "0x2604D728D8c6918b8C427bF42aa2ed07ceB5cf23",
ConvertGettersFacet: "0x09D466663586292F5f0c1D99e9547A7A81E887f5",
SeasonFacet: "0x51F74C024936E296132c6F4E59b9EEd677eb3B1c",
SeasonGettersFacet: "0x9fd4daD032324bC569decC3795731aEC309c2923",
FertilizerFacet: "0x9586878Ea437CBB6D4b6381Bde7B064f531CfB77",
};
// get the bytecode by deploying facets.
data = await getFacetBytecode(facetNames, facetLibraries, true);
// compare facet bytecode with on-chain bytecode.
await compareBytecode(data, deployedFacetAddresses, false);
});
async function getFacetBytecode(facetNames, facetLibraries, verbose = false) {
if (verbose) {
console.log("Starting Bytecode Verification");
}
data = [];
// loop through all facets:
for (const facet of facetNames) {
if (verbose) {
console.log(`Deploying ${facet}`);
}
// check if facet is in facetLibraries:
if (facet in facetLibraries) {
// deploy libraries from facet dictionary:
for (const [libraryName, address] of Object.entries(facetLibraries[facet])) {
const libraryFactory = await ethers.getContractFactory(libraryName);
libraryContract = await libraryFactory.deploy();
await libraryContract.deployed();
const bytecode = await ethers.provider.getCode(libraryContract.address);
await network.provider.send("hardhat_setCode", [address, bytecode]);
}
}
// deploy facet:
const facetFactory = await ethers.getContractFactory(facet, {
libraries: facetLibraries[facet]
});
facetContract = await facetFactory.deploy();
await facetContract.deployed();
const bytecode = await ethers.provider.getCode(facetContract.address);
// add facet to data dictionary:
facetData = {};
facetData[facet] = {
"Contract Creation Code": facetContract.deployTransaction["data"].slice(2),
"Deployed Bytecode": bytecode
};
data.push(facetData);
}
// write data to file:
const facetBytecode = `facetBytecode-${Math.floor(Date.now() / 1000)}-${facetNames.length}-facets.json`;
fs.writeFileSync(`diamondCuts/${facetBytecode}`, JSON.stringify(data, null, 2));
console.log(`Facet bytecode written to diamondCuts/${facetBytecode}`);
return data;
}
async function compareBytecode(data, deployedFacetAddresses, verbose = true) {
invalidFacets = [];
validFacets = [];
for (const facets of data) {
const [name] = Object.keys(facets);
address = deployedFacetAddresses[name];
const onchainBytecode = await ethers.provider.getCode(address);
const jsonBytecode = facets[name]["Deployed Bytecode"];
if (onchainBytecode != jsonBytecode) {
invalidFacets.push(name);
} else {
validFacets.push(name);
}
}
if (verbose) {
console.log("valid facets: ", validFacets);
console.log("invalid facets: ", invalidFacets);
}
if (invalidFacets.length > 0) {
console.log("Invalid Facet Bytecode: ", invalidFacets);
} else {
console.log("All Facets Bytecode are valid!");
}
}Runing an anvil node forked from mainnet:
anvil --fork-url https://eth.llamarpc.com --chain-id 1337 Runing the script in a separate window in the protocol/ directory:
npx hardhat clean && npx hardhat compile && npx hardhat verifybip-49 --network localhostValidate that facet bytecode are correct.
Submitting Message Signature
Once Signers have verified the transaction, they shall submit and sign a verified message on Etherscan with their BCM address (guide).
Template message: Confirming that I have reviewed BIP-49 with BCM transaction nonce 81, Safe transaction hash 0x425d0779ecec50f443f71ed6a43a57121d3f159c19aa8b0599a908cd1f74807b, commit hash 10c50916acdd1a2ea8c3699217779cbbe549389e and Snapshot proposal https://snapshot.org/#/beanstalkdao.eth/proposal/0x6d9816a73f63a122bc19d0e2690fbe744becc18dbeef2a25a39f8a48da1d44d7.