Skip to content

Commit

Permalink
Add EIP-3009 Transfer with Authorization
Browse files Browse the repository at this point in the history
* 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
treygrainger authored Jul 26, 2022
1 parent 832ae7d commit b40d5f3
Show file tree
Hide file tree
Showing 31 changed files with 82,733 additions and 17,333 deletions.
389 changes: 389 additions & 0 deletions .openzeppelin/goerli.json
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)"
}
}
}
}
}
}
Loading

0 comments on commit b40d5f3

Please sign in to comment.