Skip to content

Commit

Permalink
fix(protocol): fix BridgedERC20V2.sol initializer logic (#17823)
Browse files Browse the repository at this point in the history
Co-authored-by: dantaik <dantaik@users.noreply.github.com>
  • Loading branch information
dantaik and dantaik committed Jul 24, 2024
1 parent f495e40 commit d538d99
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 33 deletions.
63 changes: 36 additions & 27 deletions packages/protocol/contract_layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
|--------------------|----------------------------------------------|------|--------|-------|------------------------------------------------------|
Expand Down Expand Up @@ -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 |
|-------------------------|-------------------------------------------------|------|--------|-------|----------------------------------------------------------------------------------------|
Expand Down
9 changes: 8 additions & 1 deletion packages/protocol/contracts/tokenvault/BridgedERC20V2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);
Expand All @@ -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();
}
Expand Down
3 changes: 1 addition & 2 deletions packages/protocol/deployments/gen-layouts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ contracts=(
"ERC721Vault"
"ERC1155Vault"
"BridgedERC20"
"BridgedERC20V2"
"BridgedERC721"
"BridgedERC1155"
"AssignmentHook"
"ERC20Airdrop"
"AutomataDcapV3Attestation"
"SgxVerifier"
"RiscZeroVerifier"
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/TaikoTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/test/tokenvault/ERC20Vault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ contract PrankDestBridge {
}
}

contract UpdatedBridgedERC20 is BridgedERC20 {
contract UpdatedBridgedERC20 is BridgedERC20V2 {
function helloWorld() public pure returns (string memory) {
return "helloworld";
}
Expand Down

0 comments on commit d538d99

Please sign in to comment.