-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add EIP-3009 Transfer with Authorization
* work in progress on transfer with permit * Add EIP-3009 and revised EIP-2612 for initial testing * Reorganize for safe upgrade * Add goerli testnet config * Replace EIP712 impl with OpenZeppelin versions * Replace EIP712 with EIP712Upgradeable * cleanup * Reset access modifiers and optimize gas * Ensure initialize() can only be called once * Add unsafeAllowCustomTypes since original deploy still needs it * Add upgrade unit tests and upgrade some dependencies * Add EIP-3009 Transfer with Authorization
- Loading branch information
1 parent
832ae7d
commit b40d5f3
Showing
31 changed files
with
82,733 additions
and
17,333 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,389 @@ | ||
{ | ||
"manifestVersion": "3.2", | ||
"admin": { | ||
"address": "0xBc635DeAd0535a263A84f8629bd51aCB62fdaAcC", | ||
"txHash": "0x7623500c709afa12fe26cfed863d3ea7b3722f37e5f6f8f17e6e7f79e98eeb20" | ||
}, | ||
"proxies": [], | ||
"impls": { | ||
"04173612f3b74f46e641220a124785fc77545b28704a4eac6c304f8eaf324a23": { | ||
"address": "0x1693BF59cf32Ccf16bcEEC6ACEA700A81dc23d36", | ||
"txHash": "0xb22ddda25a32d92def0b3fbc3d43ed074a61fc66a9c7a47819254c0ed5359e2e", | ||
"layout": { | ||
"storage": [ | ||
{ | ||
"contract": "Initializable", | ||
"label": "initialized", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:21" | ||
}, | ||
{ | ||
"contract": "Initializable", | ||
"label": "initializing", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:26" | ||
}, | ||
{ | ||
"contract": "Initializable", | ||
"label": "______gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:61" | ||
}, | ||
{ | ||
"contract": "ContextUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol:37" | ||
}, | ||
{ | ||
"contract": "AccessControlUpgradeSafe", | ||
"label": "_roles", | ||
"type": "t_mapping(t_bytes32,t_struct(RoleData)964_storage)", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol:58" | ||
}, | ||
{ | ||
"contract": "AccessControlUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)49_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol:210" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_balances", | ||
"type": "t_mapping(t_address,t_uint256)", | ||
"src": "EnhancedERC20.sol:37" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_allowances", | ||
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", | ||
"src": "EnhancedERC20.sol:39" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_totalSupply", | ||
"type": "t_uint256", | ||
"src": "EnhancedERC20.sol:41" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_name", | ||
"type": "t_string_storage", | ||
"src": "EnhancedERC20.sol:43" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_symbol", | ||
"type": "t_string_storage", | ||
"src": "EnhancedERC20.sol:44" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_decimals", | ||
"type": "t_uint8", | ||
"src": "EnhancedERC20.sol:45" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)44_storage", | ||
"src": "EnhancedERC20.sol:335" | ||
}, | ||
{ | ||
"contract": "PausableUpgradeSafe", | ||
"label": "_paused", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol:26" | ||
}, | ||
{ | ||
"contract": "PausableUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)49_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol:84" | ||
}, | ||
{ | ||
"contract": "ManagedEnhancedERC20", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "ManagedEnhancedERC20.sol:71" | ||
}, | ||
{ | ||
"contract": "PREToken", | ||
"label": "_maxSupply", | ||
"type": "t_uint256", | ||
"src": "PREToken.sol:15" | ||
} | ||
], | ||
"types": { | ||
"t_uint256": { | ||
"label": "uint256" | ||
}, | ||
"t_array(t_uint256)50_storage": { | ||
"label": "uint256[50]" | ||
}, | ||
"t_bool": { | ||
"label": "bool" | ||
}, | ||
"t_array(t_uint256)49_storage": { | ||
"label": "uint256[49]" | ||
}, | ||
"t_mapping(t_address,t_uint256)": { | ||
"label": "mapping(address => uint256)" | ||
}, | ||
"t_mapping(t_address,t_mapping(t_address,t_uint256))": { | ||
"label": "mapping(address => mapping(address => uint256))" | ||
}, | ||
"t_string_storage": { | ||
"label": "string" | ||
}, | ||
"t_uint8": { | ||
"label": "uint8" | ||
}, | ||
"t_array(t_uint256)44_storage": { | ||
"label": "uint256[44]" | ||
}, | ||
"t_mapping(t_bytes32,t_struct(RoleData)964_storage)": { | ||
"label": "mapping(bytes32 => struct AccessControlUpgradeSafe.RoleData)" | ||
} | ||
} | ||
} | ||
}, | ||
"e2ebff930ac51b0849e38580b75887928eba275e45283899e99b593403a6f388": { | ||
"address": "0xb59A044FAc407087376918B5Cb4a108DCe035263", | ||
"txHash": "0xeac37e48f4ed1f865488ff04cf61548076e3474cc1eda38b20663c2324be6ca8", | ||
"layout": { | ||
"storage": [ | ||
{ | ||
"contract": "Initializable", | ||
"label": "initialized", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:21" | ||
}, | ||
{ | ||
"contract": "Initializable", | ||
"label": "initializing", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:26" | ||
}, | ||
{ | ||
"contract": "Initializable", | ||
"label": "______gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol:61" | ||
}, | ||
{ | ||
"contract": "ContextUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol:37" | ||
}, | ||
{ | ||
"contract": "AccessControlUpgradeSafe", | ||
"label": "_roles", | ||
"type": "t_mapping(t_bytes32,t_struct(RoleData)2177_storage)", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol:58" | ||
}, | ||
{ | ||
"contract": "AccessControlUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)49_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol:210" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_balances", | ||
"type": "t_mapping(t_address,t_uint256)", | ||
"src": "EnhancedERC20.sol:37" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_allowances", | ||
"type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", | ||
"src": "EnhancedERC20.sol:39" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_totalSupply", | ||
"type": "t_uint256", | ||
"src": "EnhancedERC20.sol:41" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_name", | ||
"type": "t_string_storage", | ||
"src": "EnhancedERC20.sol:43" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_symbol", | ||
"type": "t_string_storage", | ||
"src": "EnhancedERC20.sol:44" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "_decimals", | ||
"type": "t_uint8", | ||
"src": "EnhancedERC20.sol:45" | ||
}, | ||
{ | ||
"contract": "EnhancedERC20", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)44_storage", | ||
"src": "EnhancedERC20.sol:335" | ||
}, | ||
{ | ||
"contract": "PausableUpgradeSafe", | ||
"label": "_paused", | ||
"type": "t_bool", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol:26" | ||
}, | ||
{ | ||
"contract": "PausableUpgradeSafe", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)49_storage", | ||
"src": "../@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol:84" | ||
}, | ||
{ | ||
"contract": "ManagedEnhancedERC20", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "ManagedEnhancedERC20.sol:71" | ||
}, | ||
{ | ||
"contract": "PREToken", | ||
"label": "_maxSupply", | ||
"type": "t_uint256", | ||
"src": "PREToken.sol:15" | ||
}, | ||
{ | ||
"contract": "PREToken", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "PREToken.sol:36" | ||
}, | ||
{ | ||
"contract": "EIP712Upgradeable", | ||
"label": "_HASHED_NAME", | ||
"type": "t_bytes32", | ||
"src": "EIP712.sol:31" | ||
}, | ||
{ | ||
"contract": "EIP712Upgradeable", | ||
"label": "_HASHED_VERSION", | ||
"type": "t_bytes32", | ||
"src": "EIP712.sol:32" | ||
}, | ||
{ | ||
"contract": "EIP712Upgradeable", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)50_storage", | ||
"src": "EIP712.sol:128" | ||
}, | ||
{ | ||
"contract": "TransferAuthorizableERC20", | ||
"label": "_authorizationStates", | ||
"type": "t_mapping(t_address,t_mapping(t_bytes32,t_bool))", | ||
"src": "TransferAuthorizableERC20.sol:60" | ||
}, | ||
{ | ||
"contract": "TransferAuthorizableERC20", | ||
"label": "__gap", | ||
"type": "t_array(t_uint256)49_storage", | ||
"src": "TransferAuthorizableERC20.sol:246" | ||
}, | ||
{ | ||
"contract": "PRETokenV2", | ||
"label": "_initializedV2", | ||
"type": "t_bool", | ||
"src": "PRETokenV2.sol:13" | ||
} | ||
], | ||
"types": { | ||
"t_bool": { | ||
"label": "bool" | ||
}, | ||
"t_mapping(t_address,t_mapping(t_bytes32,t_bool))": { | ||
"label": "mapping(address => mapping(bytes32 => bool))" | ||
}, | ||
"t_address": { | ||
"label": "address" | ||
}, | ||
"t_mapping(t_bytes32,t_bool)": { | ||
"label": "mapping(bytes32 => bool)" | ||
}, | ||
"t_bytes32": { | ||
"label": "bytes32" | ||
}, | ||
"t_array(t_uint256)49_storage": { | ||
"label": "uint256[49]" | ||
}, | ||
"t_uint256": { | ||
"label": "uint256" | ||
}, | ||
"t_array(t_uint256)50_storage": { | ||
"label": "uint256[50]" | ||
}, | ||
"t_mapping(t_address,t_uint256)": { | ||
"label": "mapping(address => uint256)" | ||
}, | ||
"t_mapping(t_address,t_mapping(t_address,t_uint256))": { | ||
"label": "mapping(address => mapping(address => uint256))" | ||
}, | ||
"t_string_storage": { | ||
"label": "string" | ||
}, | ||
"t_uint8": { | ||
"label": "uint8" | ||
}, | ||
"t_array(t_uint256)44_storage": { | ||
"label": "uint256[44]" | ||
}, | ||
"t_mapping(t_bytes32,t_struct(RoleData)2177_storage)": { | ||
"label": "mapping(bytes32 => struct AccessControlUpgradeSafe.RoleData)" | ||
}, | ||
"t_struct(RoleData)2177_storage": { | ||
"label": "struct AccessControlUpgradeSafe.RoleData", | ||
"members": [ | ||
{ | ||
"label": "members", | ||
"type": "t_struct(AddressSet)2918_storage" | ||
}, | ||
{ | ||
"label": "adminRole", | ||
"type": "t_bytes32" | ||
} | ||
] | ||
}, | ||
"t_struct(AddressSet)2918_storage": { | ||
"label": "struct EnumerableSet.AddressSet", | ||
"members": [ | ||
{ | ||
"label": "_inner", | ||
"type": "t_struct(Set)2743_storage" | ||
} | ||
] | ||
}, | ||
"t_struct(Set)2743_storage": { | ||
"label": "struct EnumerableSet.Set", | ||
"members": [ | ||
{ | ||
"label": "_values", | ||
"type": "t_array(t_bytes32)dyn_storage" | ||
}, | ||
{ | ||
"label": "_indexes", | ||
"type": "t_mapping(t_bytes32,t_uint256)" | ||
} | ||
] | ||
}, | ||
"t_array(t_bytes32)dyn_storage": { | ||
"label": "bytes32[]" | ||
}, | ||
"t_mapping(t_bytes32,t_uint256)": { | ||
"label": "mapping(bytes32 => uint256)" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.