diff --git a/packages/protocol/contract_layout.md b/packages/protocol/contract_layout.md index 618596f2d2..f48f3e8b10 100644 --- a/packages/protocol/contract_layout.md +++ b/packages/protocol/contract_layout.md @@ -305,6 +305,42 @@ | migratingInbound | bool | 303 | 20 | 1 | contracts/tokenvault/BridgedERC20.sol:BridgedERC20 | | __gap | uint256[47] | 304 | 0 | 1504 | contracts/tokenvault/BridgedERC20.sol:BridgedERC20 | +## BridgedERC20V2 +| Name | Type | Slot | Offset | Bytes | Contract | +|------------------|--------------------------------------------------------|------|--------|-------|--------------------------------------------------------| +| _initialized | uint8 | 0 | 0 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _initializing | bool | 0 | 1 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[50] | 1 | 0 | 1600 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _owner | address | 51 | 0 | 20 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[49] | 52 | 0 | 1568 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _pendingOwner | address | 101 | 0 | 20 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[49] | 102 | 0 | 1568 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| addressManager | address | 151 | 0 | 20 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[49] | 152 | 0 | 1568 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __reentry | uint8 | 201 | 0 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __paused | uint8 | 201 | 1 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[49] | 202 | 0 | 1568 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _balances | mapping(address => uint256) | 251 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _allowances | mapping(address => mapping(address => uint256)) | 252 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _totalSupply | uint256 | 253 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _name | string | 254 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _symbol | string | 255 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[45] | 256 | 0 | 1440 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| srcToken | address | 301 | 0 | 20 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __srcDecimals | uint8 | 301 | 20 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| srcChainId | uint256 | 302 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| migratingAddress | address | 303 | 0 | 20 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| migratingInbound | bool | 303 | 20 | 1 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[47] | 304 | 0 | 1504 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _hashedName | bytes32 | 351 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _hashedVersion | bytes32 | 352 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _name | string | 353 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _version | string | 354 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[48] | 355 | 0 | 1536 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| _nonces | mapping(address => struct CountersUpgradeable.Counter) | 403 | 0 | 32 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | +| __gap | uint256[49] | 404 | 0 | 1568 | contracts/tokenvault/BridgedERC20V2.sol:BridgedERC20V2 | + ## BridgedERC721 | Name | Type | Slot | Offset | Bytes | Contract | |--------------------|----------------------------------------------|------|--------|-------|------------------------------------------------------| @@ -360,33 +396,6 @@ | name | string | 354 | 0 | 32 | contracts/tokenvault/BridgedERC1155.sol:BridgedERC1155 | | __gap | uint256[46] | 355 | 0 | 1472 | contracts/tokenvault/BridgedERC1155.sol:BridgedERC1155 | -## AssignmentHook - -## ERC20Airdrop -| Name | Type | Slot | Offset | Bytes | Contract | -|----------------|--------------------------|------|--------|-------|------------------------------------------------------| -| _initialized | uint8 | 0 | 0 | 1 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| _initializing | bool | 0 | 1 | 1 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[50] | 1 | 0 | 1600 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| _owner | address | 51 | 0 | 20 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[49] | 52 | 0 | 1568 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| _pendingOwner | address | 101 | 0 | 20 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[49] | 102 | 0 | 1568 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| addressManager | address | 151 | 0 | 20 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[49] | 152 | 0 | 1568 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __reentry | uint8 | 201 | 0 | 1 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __paused | uint8 | 201 | 1 | 1 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[49] | 202 | 0 | 1568 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| isClaimed | mapping(bytes32 => bool) | 251 | 0 | 32 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| merkleRoot | bytes32 | 252 | 0 | 32 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| claimStart | uint64 | 253 | 0 | 8 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| claimEnd | uint64 | 253 | 8 | 8 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[47] | 254 | 0 | 1504 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| token | address | 301 | 0 | 20 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| vault | address | 302 | 0 | 20 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | -| __gap | uint256[48] | 303 | 0 | 1536 | contracts/team/airdrop/ERC20Airdrop.sol:ERC20Airdrop | - ## AutomataDcapV3Attestation | Name | Type | Slot | Offset | Bytes | Contract | |-------------------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------------------| diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol b/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol index 3ac25713fd..ded2c64168 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20V2.sol @@ -29,6 +29,7 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea error BTOKEN_INVALID_SIG(); /// @inheritdoc IBridgedERC20Initializable + /// @dev Calling this function will change the initialized version to 2. function init( address _owner, address _sharedAddressManager, @@ -41,7 +42,7 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea external virtual override - initializer + reinitializer(2) { // Check if provided parameters are valid LibBridgedToken.validateInputs(_srcToken, _srcChainId); @@ -55,10 +56,16 @@ contract BridgedERC20V2 is BridgedERC20, IERC20PermitUpgradeable, EIP712Upgradea __srcDecimals = _decimals; } + /// @dev This function shall be called when upgrading a deployed contract from {BridgedERC20} to + /// {BridgedERC20V2}. + function init2() external reinitializer(2) { + __EIP712_init_unchained(name(), "1"); + } /** * @inheritdoc IERC20PermitUpgradeable */ // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } diff --git a/packages/protocol/deployments/gen-layouts.sh b/packages/protocol/deployments/gen-layouts.sh index f6bdb51341..54551126c1 100755 --- a/packages/protocol/deployments/gen-layouts.sh +++ b/packages/protocol/deployments/gen-layouts.sh @@ -15,10 +15,9 @@ contracts=( "ERC721Vault" "ERC1155Vault" "BridgedERC20" + "BridgedERC20V2" "BridgedERC721" "BridgedERC1155" - "AssignmentHook" - "ERC20Airdrop" "AutomataDcapV3Attestation" "SgxVerifier" "RiscZeroVerifier" diff --git a/packages/protocol/test/TaikoTest.sol b/packages/protocol/test/TaikoTest.sol index adcbeb1c1b..d9d1a103dd 100644 --- a/packages/protocol/test/TaikoTest.sol +++ b/packages/protocol/test/TaikoTest.sol @@ -6,7 +6,7 @@ import "forge-std/src/Test.sol"; import "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "../contracts/tokenvault/BridgedERC20.sol"; +import "../contracts/tokenvault/BridgedERC20V2.sol"; import "../contracts/tokenvault/BridgedERC721.sol"; import "../contracts/tokenvault/BridgedERC1155.sol"; import "../contracts/tokenvault/ERC20Vault.sol"; diff --git a/packages/protocol/test/tokenvault/BridgedERC20.t.sol b/packages/protocol/test/tokenvault/BridgedERC20V2.t.sol similarity index 98% rename from packages/protocol/test/tokenvault/BridgedERC20.t.sol rename to packages/protocol/test/tokenvault/BridgedERC20V2.t.sol index 80470c7064..7b662e8841 100644 --- a/packages/protocol/test/tokenvault/BridgedERC20.t.sol +++ b/packages/protocol/test/tokenvault/BridgedERC20V2.t.sol @@ -127,7 +127,7 @@ contract TestBridgedERC20 is TaikoTest { return BridgedERC20( deployProxy({ name: "bridged_token1", - impl: address(new BridgedERC20()), + impl: address(new BridgedERC20V2()), data: abi.encodeCall( BridgedERC20.init, (owner, address(manager), srcToken, srcChainId, srcDecimals, name, name) diff --git a/packages/protocol/test/tokenvault/ERC20Vault.t.sol b/packages/protocol/test/tokenvault/ERC20Vault.t.sol index 98f1c9ddc1..e2079cfc5d 100644 --- a/packages/protocol/test/tokenvault/ERC20Vault.t.sol +++ b/packages/protocol/test/tokenvault/ERC20Vault.t.sol @@ -61,7 +61,7 @@ contract PrankDestBridge { } } -contract UpdatedBridgedERC20 is BridgedERC20 { +contract UpdatedBridgedERC20 is BridgedERC20V2 { function helloWorld() public pure returns (string memory) { return "helloworld"; }