Skip to content

Commit

Permalink
chore: upgrade devnet and testnet portals (#398)
Browse files Browse the repository at this point in the history
Closes #395
  • Loading branch information
DefiCake authored Feb 27, 2025
1 parent 9c0a068 commit d0e0412
Show file tree
Hide file tree
Showing 8 changed files with 784 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .changeset/unlucky-berries-cover.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@fuel-bridge/solidity-contracts': patch
---

Upgraded portal implementations
287 changes: 287 additions & 0 deletions packages/solidity-contracts/.openzeppelin/sepolia.json
Original file line number Diff line number Diff line change
Expand Up @@ -4512,6 +4512,293 @@
"0xf96DD2dA09A67c37CE79671923af1999b3553414",
"0x5F9eAEB3b7ec396F01617e9BAd787D0A6f93B7a3"
]
},
"13685e0abb15104bf2ba2e66a106e0ce94aa6ad997592dd16284652712c16645": {
"address": "0xF8F2AEdde6AEBB164f804f78Cc95FBCCc3d642A1",
"txHash": "0xee6a584c4d1e63672798749961aa118671ac1a3f1788f664c2a230b8d6e4a5c6",
"layout": {
"solcVersion": "0.8.24",
"storage": [
{
"label": "_initialized",
"offset": 0,
"slot": "0",
"type": "t_uint8",
"contract": "Initializable",
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63",
"retypedFrom": "bool"
},
{
"label": "_initializing",
"offset": 1,
"slot": "0",
"type": "t_bool",
"contract": "Initializable",
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68"
},
{
"label": "__gap",
"offset": 0,
"slot": "1",
"type": "t_array(t_uint256)50_storage",
"contract": "ContextUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40"
},
{
"label": "_paused",
"offset": 0,
"slot": "51",
"type": "t_bool",
"contract": "PausableUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29"
},
{
"label": "__gap",
"offset": 0,
"slot": "52",
"type": "t_array(t_uint256)49_storage",
"contract": "PausableUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116"
},
{
"label": "__gap",
"offset": 0,
"slot": "101",
"type": "t_array(t_uint256)50_storage",
"contract": "ERC165Upgradeable",
"src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41"
},
{
"label": "_roles",
"offset": 0,
"slot": "151",
"type": "t_mapping(t_bytes32,t_struct(RoleData)23_storage)",
"contract": "AccessControlUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:57"
},
{
"label": "__gap",
"offset": 0,
"slot": "152",
"type": "t_array(t_uint256)49_storage",
"contract": "AccessControlUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260"
},
{
"label": "_status",
"offset": 0,
"slot": "201",
"type": "t_uint256",
"contract": "ReentrancyGuardTransientUpgradable",
"src": "contracts/security/ReentrancyGuardTransientUpgradable.sol:23"
},
{
"label": "__gap",
"offset": 0,
"slot": "202",
"type": "t_array(t_uint256)49_storage",
"contract": "ReentrancyGuardTransientUpgradable",
"src": "contracts/security/ReentrancyGuardTransientUpgradable.sol:81"
},
{
"label": "__gap",
"offset": 0,
"slot": "251",
"type": "t_array(t_uint256)50_storage",
"contract": "ERC1967UpgradeUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169"
},
{
"label": "__gap",
"offset": 0,
"slot": "301",
"type": "t_array(t_uint256)50_storage",
"contract": "UUPSUpgradeable",
"src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111"
},
{
"label": "_incomingMessageSender",
"offset": 0,
"slot": "351",
"type": "t_bytes32",
"contract": "FuelMessagePortal",
"src": "contracts/fuelchain/FuelMessagePortal.sol:96"
},
{
"label": "_fuelChainState",
"offset": 0,
"slot": "352",
"type": "t_contract(FuelChainState)3301",
"contract": "FuelMessagePortal",
"src": "contracts/fuelchain/FuelMessagePortal.sol:99"
},
{
"label": "_outgoingMessageNonce",
"offset": 0,
"slot": "353",
"type": "t_uint256",
"contract": "FuelMessagePortal",
"src": "contracts/fuelchain/FuelMessagePortal.sol:102"
},
{
"label": "_incomingMessageSuccessful",
"offset": 0,
"slot": "354",
"type": "t_mapping(t_bytes32,t_bool)",
"contract": "FuelMessagePortal",
"src": "contracts/fuelchain/FuelMessagePortal.sol:105"
},
{
"label": "__gap",
"offset": 0,
"slot": "355",
"type": "t_array(t_uint256)49_storage",
"contract": "FuelMessagePortal",
"src": "contracts/fuelchain/FuelMessagePortal.sol:337"
},
{
"label": "totalDeposited",
"offset": 0,
"slot": "404",
"type": "t_uint256",
"contract": "FuelMessagePortalV2",
"src": "contracts/fuelchain/FuelMessagePortal/v2/FuelMessagePortalV2.sol:14"
},
{
"label": "__gap",
"offset": 0,
"slot": "405",
"type": "t_array(t_uint256)49_storage",
"contract": "FuelMessagePortalV2",
"src": "contracts/fuelchain/FuelMessagePortal/v2/FuelMessagePortalV2.sol:108"
},
{
"label": "withdrawalsPaused",
"offset": 0,
"slot": "454",
"type": "t_bool",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:31"
},
{
"label": "messageIsBlacklisted",
"offset": 0,
"slot": "455",
"type": "t_mapping(t_bytes32,t_bool)",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:33"
},
{
"label": "currentPeriodAmount",
"offset": 0,
"slot": "456",
"type": "t_uint256",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:36"
},
{
"label": "currentPeriodEnd",
"offset": 0,
"slot": "457",
"type": "t_uint256",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:39"
},
{
"label": "limitAmount",
"offset": 0,
"slot": "458",
"type": "t_uint256",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:42"
},
{
"label": "rateLimitEnabled",
"offset": 0,
"slot": "459",
"type": "t_bool",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:45"
},
{
"label": "__gap",
"offset": 0,
"slot": "460",
"type": "t_array(t_uint256)48_storage",
"contract": "FuelMessagePortalV3",
"src": "contracts/fuelchain/FuelMessagePortal/v3/FuelMessagePortalV3.sol:266"
}
],
"types": {
"t_address": {
"label": "address",
"numberOfBytes": "20"
},
"t_array(t_uint256)48_storage": {
"label": "uint256[48]",
"numberOfBytes": "1536"
},
"t_array(t_uint256)49_storage": {
"label": "uint256[49]",
"numberOfBytes": "1568"
},
"t_array(t_uint256)50_storage": {
"label": "uint256[50]",
"numberOfBytes": "1600"
},
"t_bool": {
"label": "bool",
"numberOfBytes": "1"
},
"t_bytes32": {
"label": "bytes32",
"numberOfBytes": "32"
},
"t_contract(FuelChainState)3301": {
"label": "contract FuelChainState",
"numberOfBytes": "20"
},
"t_mapping(t_address,t_bool)": {
"label": "mapping(address => bool)",
"numberOfBytes": "32"
},
"t_mapping(t_bytes32,t_bool)": {
"label": "mapping(bytes32 => bool)",
"numberOfBytes": "32"
},
"t_mapping(t_bytes32,t_struct(RoleData)23_storage)": {
"label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)",
"numberOfBytes": "32"
},
"t_struct(RoleData)23_storage": {
"label": "struct AccessControlUpgradeable.RoleData",
"members": [
{
"label": "members",
"type": "t_mapping(t_address,t_bool)",
"offset": 0,
"slot": "0"
},
{
"label": "adminRole",
"type": "t_bytes32",
"offset": 0,
"slot": "1"
}
],
"numberOfBytes": "64"
},
"t_uint256": {
"label": "uint256",
"numberOfBytes": "32"
},
"t_uint8": {
"label": "uint8",
"numberOfBytes": "1"
}
},
"namespaces": {}
}
}
}
}
60 changes: 60 additions & 0 deletions packages/solidity-contracts/deploy/devnet/018.portal_upgrade.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { MaxUint256, type TransactionResponse } from 'ethers';
import type { HardhatRuntimeEnvironment } from 'hardhat/types';
import type { DeployFunction } from 'hardhat-deploy/dist/types';

import { FuelMessagePortalV3__factory as FuelMessagePortalV3 } from '../../typechain';

const RATE_LIMIT_DURATION = 3600 * 24 * 7;
const RATE_LIMIT_AMOUNT = 0n;

const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const {
ethers,
upgrades: { upgradeProxy, prepareUpgrade },
deployments: { get, save },
} = hre;
const [deployer] = await ethers.getSigners();

const fuelMessagePortal = await get('FuelMessagePortal');
const constructorArgs = [MaxUint256, RATE_LIMIT_DURATION];
const tx = (await prepareUpgrade(
fuelMessagePortal.address,
new FuelMessagePortalV3(deployer),
{
constructorArgs,
getTxResponse: true,
unsafeSkipStorageCheck: true,
}
)) as TransactionResponse;
const receipt = await tx.wait();

const implementation = receipt?.contractAddress;

if (!implementation) {
throw new Error('No contract in receipt');
}

await upgradeProxy(
fuelMessagePortal.address,
new FuelMessagePortalV3(deployer),
{
unsafeAllow: ['constructor'],
constructorArgs,
call: { fn: 'reinitializeV3', args: [RATE_LIMIT_AMOUNT] },
unsafeSkipStorageCheck: true,
}
);

console.log('Upgraded FuelMessagePortal to', implementation);
await save('FuelMessagePortal', {
address: fuelMessagePortal.address,
abi: [...FuelMessagePortalV3.abi],
implementation,
});

return true;
};

func.tags = ['018_portal_upgrade'];
func.id = '018_portal_upgrade';
export default func;
Loading

0 comments on commit d0e0412

Please sign in to comment.