Skip to content

Commit d0e0412

Browse files
authored
chore: upgrade devnet and testnet portals (#398)
Closes #395
1 parent 9c0a068 commit d0e0412

File tree

8 files changed

+784
-8
lines changed

8 files changed

+784
-8
lines changed

.changeset/unlucky-berries-cover.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@fuel-bridge/solidity-contracts': patch
3+
---
4+
5+
Upgraded portal implementations

packages/solidity-contracts/.openzeppelin/sepolia.json

+287
Original file line numberDiff line numberDiff line change
@@ -4512,6 +4512,293 @@
45124512
"0xf96DD2dA09A67c37CE79671923af1999b3553414",
45134513
"0x5F9eAEB3b7ec396F01617e9BAd787D0A6f93B7a3"
45144514
]
4515+
},
4516+
"13685e0abb15104bf2ba2e66a106e0ce94aa6ad997592dd16284652712c16645": {
4517+
"address": "0xF8F2AEdde6AEBB164f804f78Cc95FBCCc3d642A1",
4518+
"txHash": "0xee6a584c4d1e63672798749961aa118671ac1a3f1788f664c2a230b8d6e4a5c6",
4519+
"layout": {
4520+
"solcVersion": "0.8.24",
4521+
"storage": [
4522+
{
4523+
"label": "_initialized",
4524+
"offset": 0,
4525+
"slot": "0",
4526+
"type": "t_uint8",
4527+
"contract": "Initializable",
4528+
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63",
4529+
"retypedFrom": "bool"
4530+
},
4531+
{
4532+
"label": "_initializing",
4533+
"offset": 1,
4534+
"slot": "0",
4535+
"type": "t_bool",
4536+
"contract": "Initializable",
4537+
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68"
4538+
},
4539+
{
4540+
"label": "__gap",
4541+
"offset": 0,
4542+
"slot": "1",
4543+
"type": "t_array(t_uint256)50_storage",
4544+
"contract": "ContextUpgradeable",
4545+
"src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40"
4546+
},
4547+
{
4548+
"label": "_paused",
4549+
"offset": 0,
4550+
"slot": "51",
4551+
"type": "t_bool",
4552+
"contract": "PausableUpgradeable",
4553+
"src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29"
4554+
},
4555+
{
4556+
"label": "__gap",
4557+
"offset": 0,
4558+
"slot": "52",
4559+
"type": "t_array(t_uint256)49_storage",
4560+
"contract": "PausableUpgradeable",
4561+
"src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116"
4562+
},
4563+
{
4564+
"label": "__gap",
4565+
"offset": 0,
4566+
"slot": "101",
4567+
"type": "t_array(t_uint256)50_storage",
4568+
"contract": "ERC165Upgradeable",
4569+
"src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41"
4570+
},
4571+
{
4572+
"label": "_roles",
4573+
"offset": 0,
4574+
"slot": "151",
4575+
"type": "t_mapping(t_bytes32,t_struct(RoleData)23_storage)",
4576+
"contract": "AccessControlUpgradeable",
4577+
"src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:57"
4578+
},
4579+
{
4580+
"label": "__gap",
4581+
"offset": 0,
4582+
"slot": "152",
4583+
"type": "t_array(t_uint256)49_storage",
4584+
"contract": "AccessControlUpgradeable",
4585+
"src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260"
4586+
},
4587+
{
4588+
"label": "_status",
4589+
"offset": 0,
4590+
"slot": "201",
4591+
"type": "t_uint256",
4592+
"contract": "ReentrancyGuardTransientUpgradable",
4593+
"src": "contracts/security/ReentrancyGuardTransientUpgradable.sol:23"
4594+
},
4595+
{
4596+
"label": "__gap",
4597+
"offset": 0,
4598+
"slot": "202",
4599+
"type": "t_array(t_uint256)49_storage",
4600+
"contract": "ReentrancyGuardTransientUpgradable",
4601+
"src": "contracts/security/ReentrancyGuardTransientUpgradable.sol:81"
4602+
},
4603+
{
4604+
"label": "__gap",
4605+
"offset": 0,
4606+
"slot": "251",
4607+
"type": "t_array(t_uint256)50_storage",
4608+
"contract": "ERC1967UpgradeUpgradeable",
4609+
"src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169"
4610+
},
4611+
{
4612+
"label": "__gap",
4613+
"offset": 0,
4614+
"slot": "301",
4615+
"type": "t_array(t_uint256)50_storage",
4616+
"contract": "UUPSUpgradeable",
4617+
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111"
4618+
},
4619+
{
4620+
"label": "_incomingMessageSender",
4621+
"offset": 0,
4622+
"slot": "351",
4623+
"type": "t_bytes32",
4624+
"contract": "FuelMessagePortal",
4625+
"src": "contracts/fuelchain/FuelMessagePortal.sol:96"
4626+
},
4627+
{
4628+
"label": "_fuelChainState",
4629+
"offset": 0,
4630+
"slot": "352",
4631+
"type": "t_contract(FuelChainState)3301",
4632+
"contract": "FuelMessagePortal",
4633+
"src": "contracts/fuelchain/FuelMessagePortal.sol:99"
4634+
},
4635+
{
4636+
"label": "_outgoingMessageNonce",
4637+
"offset": 0,
4638+
"slot": "353",
4639+
"type": "t_uint256",
4640+
"contract": "FuelMessagePortal",
4641+
"src": "contracts/fuelchain/FuelMessagePortal.sol:102"
4642+
},
4643+
{
4644+
"label": "_incomingMessageSuccessful",
4645+
"offset": 0,
4646+
"slot": "354",
4647+
"type": "t_mapping(t_bytes32,t_bool)",
4648+
"contract": "FuelMessagePortal",
4649+
"src": "contracts/fuelchain/FuelMessagePortal.sol:105"
4650+
},
4651+
{
4652+
"label": "__gap",
4653+
"offset": 0,
4654+
"slot": "355",
4655+
"type": "t_array(t_uint256)49_storage",
4656+
"contract": "FuelMessagePortal",
4657+
"src": "contracts/fuelchain/FuelMessagePortal.sol:337"
4658+
},
4659+
{
4660+
"label": "totalDeposited",
4661+
"offset": 0,
4662+
"slot": "404",
4663+
"type": "t_uint256",
4664+
"contract": "FuelMessagePortalV2",
4665+
"src": "contracts/fuelchain/FuelMessagePortal/v2/FuelMessagePortalV2.sol:14"
4666+
},
4667+
{
4668+
"label": "__gap",
4669+
"offset": 0,
4670+
"slot": "405",
4671+
"type": "t_array(t_uint256)49_storage",
4672+
"contract": "FuelMessagePortalV2",
4673+
"src": "contracts/fuelchain/FuelMessagePortal/v2/FuelMessagePortalV2.sol:108"
4674+
},
4675+
{
4676+
"label": "withdrawalsPaused",
4677+
"offset": 0,
4678+
"slot": "454",
4679+
"type": "t_bool",
4680+
"contract": "FuelMessagePortalV3",
4681+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:31"
4682+
},
4683+
{
4684+
"label": "messageIsBlacklisted",
4685+
"offset": 0,
4686+
"slot": "455",
4687+
"type": "t_mapping(t_bytes32,t_bool)",
4688+
"contract": "FuelMessagePortalV3",
4689+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:33"
4690+
},
4691+
{
4692+
"label": "currentPeriodAmount",
4693+
"offset": 0,
4694+
"slot": "456",
4695+
"type": "t_uint256",
4696+
"contract": "FuelMessagePortalV3",
4697+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:36"
4698+
},
4699+
{
4700+
"label": "currentPeriodEnd",
4701+
"offset": 0,
4702+
"slot": "457",
4703+
"type": "t_uint256",
4704+
"contract": "FuelMessagePortalV3",
4705+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:39"
4706+
},
4707+
{
4708+
"label": "limitAmount",
4709+
"offset": 0,
4710+
"slot": "458",
4711+
"type": "t_uint256",
4712+
"contract": "FuelMessagePortalV3",
4713+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:42"
4714+
},
4715+
{
4716+
"label": "rateLimitEnabled",
4717+
"offset": 0,
4718+
"slot": "459",
4719+
"type": "t_bool",
4720+
"contract": "FuelMessagePortalV3",
4721+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:45"
4722+
},
4723+
{
4724+
"label": "__gap",
4725+
"offset": 0,
4726+
"slot": "460",
4727+
"type": "t_array(t_uint256)48_storage",
4728+
"contract": "FuelMessagePortalV3",
4729+
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:266"
4730+
}
4731+
],
4732+
"types": {
4733+
"t_address": {
4734+
"label": "address",
4735+
"numberOfBytes": "20"
4736+
},
4737+
"t_array(t_uint256)48_storage": {
4738+
"label": "uint256[48]",
4739+
"numberOfBytes": "1536"
4740+
},
4741+
"t_array(t_uint256)49_storage": {
4742+
"label": "uint256[49]",
4743+
"numberOfBytes": "1568"
4744+
},
4745+
"t_array(t_uint256)50_storage": {
4746+
"label": "uint256[50]",
4747+
"numberOfBytes": "1600"
4748+
},
4749+
"t_bool": {
4750+
"label": "bool",
4751+
"numberOfBytes": "1"
4752+
},
4753+
"t_bytes32": {
4754+
"label": "bytes32",
4755+
"numberOfBytes": "32"
4756+
},
4757+
"t_contract(FuelChainState)3301": {
4758+
"label": "contract FuelChainState",
4759+
"numberOfBytes": "20"
4760+
},
4761+
"t_mapping(t_address,t_bool)": {
4762+
"label": "mapping(address => bool)",
4763+
"numberOfBytes": "32"
4764+
},
4765+
"t_mapping(t_bytes32,t_bool)": {
4766+
"label": "mapping(bytes32 => bool)",
4767+
"numberOfBytes": "32"
4768+
},
4769+
"t_mapping(t_bytes32,t_struct(RoleData)23_storage)": {
4770+
"label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)",
4771+
"numberOfBytes": "32"
4772+
},
4773+
"t_struct(RoleData)23_storage": {
4774+
"label": "struct AccessControlUpgradeable.RoleData",
4775+
"members": [
4776+
{
4777+
"label": "members",
4778+
"type": "t_mapping(t_address,t_bool)",
4779+
"offset": 0,
4780+
"slot": "0"
4781+
},
4782+
{
4783+
"label": "adminRole",
4784+
"type": "t_bytes32",
4785+
"offset": 0,
4786+
"slot": "1"
4787+
}
4788+
],
4789+
"numberOfBytes": "64"
4790+
},
4791+
"t_uint256": {
4792+
"label": "uint256",
4793+
"numberOfBytes": "32"
4794+
},
4795+
"t_uint8": {
4796+
"label": "uint8",
4797+
"numberOfBytes": "1"
4798+
}
4799+
},
4800+
"namespaces": {}
4801+
}
45154802
}
45164803
}
45174804
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { MaxUint256, type TransactionResponse } from 'ethers';
2+
import type { HardhatRuntimeEnvironment } from 'hardhat/types';
3+
import type { DeployFunction } from 'hardhat-deploy/dist/types';
4+
5+
import { FuelMessagePortalV3__factory as FuelMessagePortalV3 } from '../../typechain';
6+
7+
const RATE_LIMIT_DURATION = 3600 * 24 * 7;
8+
const RATE_LIMIT_AMOUNT = 0n;
9+
10+
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
11+
const {
12+
ethers,
13+
upgrades: { upgradeProxy, prepareUpgrade },
14+
deployments: { get, save },
15+
} = hre;
16+
const [deployer] = await ethers.getSigners();
17+
18+
const fuelMessagePortal = await get('FuelMessagePortal');
19+
const constructorArgs = [MaxUint256, RATE_LIMIT_DURATION];
20+
const tx = (await prepareUpgrade(
21+
fuelMessagePortal.address,
22+
new FuelMessagePortalV3(deployer),
23+
{
24+
constructorArgs,
25+
getTxResponse: true,
26+
unsafeSkipStorageCheck: true,
27+
}
28+
)) as TransactionResponse;
29+
const receipt = await tx.wait();
30+
31+
const implementation = receipt?.contractAddress;
32+
33+
if (!implementation) {
34+
throw new Error('No contract in receipt');
35+
}
36+
37+
await upgradeProxy(
38+
fuelMessagePortal.address,
39+
new FuelMessagePortalV3(deployer),
40+
{
41+
unsafeAllow: ['constructor'],
42+
constructorArgs,
43+
call: { fn: 'reinitializeV3', args: [RATE_LIMIT_AMOUNT] },
44+
unsafeSkipStorageCheck: true,
45+
}
46+
);
47+
48+
console.log('Upgraded FuelMessagePortal to', implementation);
49+
await save('FuelMessagePortal', {
50+
address: fuelMessagePortal.address,
51+
abi: [...FuelMessagePortalV3.abi],
52+
implementation,
53+
});
54+
55+
return true;
56+
};
57+
58+
func.tags = ['018_portal_upgrade'];
59+
func.id = '018_portal_upgrade';
60+
export default func;

0 commit comments

Comments
 (0)