From 9bec469c2772c26aef8e4d2df8774c580df3b30f Mon Sep 17 00:00:00 2001 From: wewelll Date: Fri, 19 Apr 2024 15:40:58 +0200 Subject: [PATCH] deploy production contracts on Polygon --- .cache-137.json | 30 ++ .openzeppelin/polygon.json | 773 +++++++++++++++++++++++++++++++++++++ scripts/config.json | 10 +- 3 files changed, 808 insertions(+), 5 deletions(-) create mode 100644 .cache-137.json create mode 100644 .openzeppelin/polygon.json diff --git a/.cache-137.json b/.cache-137.json new file mode 100644 index 0000000..6b3941d --- /dev/null +++ b/.cache-137.json @@ -0,0 +1,30 @@ +{ + "forwarder": { + "txHash": "0xc56e16f7680c3fdf8d05e1701177a5f718021044cbc2a6b31da288f8dc1091d1", + "address": "0x42DB5A5AF4D82E8eD42405dfA37278c360d923C3" + }, + "manager": { + "txHash": "0x9412b83b4aeddf2d1408d31d95b5e062f4b5e43714e2cbc3e8f1e20f2a8a3d49", + "address": "0x344278aff344d6fb960705dc18a4912221608472" + }, + "redemption": { + "txHash": "0xb06597ba15cff62131ffe34147310287d4aa458f71b97ceff41d0e6a85abd285", + "address": "0xDA5599f04e9b437C8394b0c2BC68B502A66ebFe8" + }, + "token-EUTBL": { + "txHash": "0x6d3489ea81e74ec51b63f6c6e8a0a96b8e8d0ff02fe97e909ec065674b2004f3", + "address": "0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80" + }, + "oracle-EUTBL": { + "txHash": "0x3fbafb7fce42772071dc4d6a69f532df5b6a1365787b20b6fb6a88ed049a993d", + "address": "0x29503f31B73F0734455942Eb888E13acA1588a4e" + }, + "token-USTBL": { + "txHash": "0x958995eb61d9ae70b717e979aa3c57a1024175465c3eb7f49ba1cb51442d79fd", + "address": "0xe4880249745eAc5F1eD9d8F7DF844792D560e750" + }, + "oracle-USTBL": { + "txHash": "0x3161a4c6590c1b2d99d8cdc47de35fb4d36d643638be28199ca56eb1a98ca042", + "address": "0x021289588cd81dC1AC87ea91e91607eEF68303F5" + } +} \ No newline at end of file diff --git a/.openzeppelin/polygon.json b/.openzeppelin/polygon.json new file mode 100644 index 0000000..941b29b --- /dev/null +++ b/.openzeppelin/polygon.json @@ -0,0 +1,773 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x344278aff344d6fb960705dc18a4912221608472", + "txHash": "0x9412b83b4aeddf2d1408d31d95b5e062f4b5e43714e2cbc3e8f1e20f2a8a3d49", + "kind": "uups" + }, + { + "address": "0xDA5599f04e9b437C8394b0c2BC68B502A66ebFe8", + "txHash": "0xb06597ba15cff62131ffe34147310287d4aa458f71b97ceff41d0e6a85abd285", + "kind": "uups" + }, + { + "address": "0xa0769f7A8fC65e47dE93797b4e21C073c117Fc80", + "txHash": "0x6d3489ea81e74ec51b63f6c6e8a0a96b8e8d0ff02fe97e909ec065674b2004f3", + "kind": "uups" + }, + { + "address": "0x29503f31B73F0734455942Eb888E13acA1588a4e", + "txHash": "0x3fbafb7fce42772071dc4d6a69f532df5b6a1365787b20b6fb6a88ed049a993d", + "kind": "uups" + }, + { + "address": "0xe4880249745eAc5F1eD9d8F7DF844792D560e750", + "txHash": "0x958995eb61d9ae70b717e979aa3c57a1024175465c3eb7f49ba1cb51442d79fd", + "kind": "uups" + }, + { + "address": "0x021289588cd81dC1AC87ea91e91607eEF68303F5", + "txHash": "0x3161a4c6590c1b2d99d8cdc47de35fb4d36d643638be28199ca56eb1a98ca042", + "kind": "uups" + } + ], + "impls": { + "0c3a62f80f0032c053f2baad421feb98f03d98d2f5576c2a580d10d0a8f981b7": { + "address": "0xd3f5f1524e1A472B51374A3ff41B8936EB5B658E", + "txHash": "0x5eb6ac7027b5bb49f08b061c296ffad5c34995fe977dd32a60912243e09c2a35", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_permissions", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_userDefinedValueType(Mask)13963)", + "contract": "PermissionManager", + "src": "contracts/permissions/PermissionManager.sol:26" + }, + { + "label": "_restrictions", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_bytes4,t_userDefinedValueType(Mask)13963))", + "contract": "PermissionManager", + "src": "contracts/permissions/PermissionManager.sol:27" + }, + { + "label": "_admin", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint8,t_userDefinedValueType(Mask)13963)", + "contract": "PermissionManager", + "src": "contracts/permissions/PermissionManager.sol:28" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)941_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes4": { + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_mapping(t_bytes4,t_userDefinedValueType(Mask)13963))": { + "label": "mapping(address => mapping(bytes4 => Masks.Mask))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_userDefinedValueType(Mask)13963)": { + "label": "mapping(address => Masks.Mask)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes4,t_userDefinedValueType(Mask)13963)": { + "label": "mapping(bytes4 => Masks.Mask)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint8,t_userDefinedValueType(Mask)13963)": { + "label": "mapping(uint8 => Masks.Mask)", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + }, + "t_userDefinedValueType(Mask)13963": { + "label": "Masks.Mask", + "numberOfBytes": "32", + "underlying": "t_bytes32" + }, + "t_bytes32": { + "label": "bytes32" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "30e673afae37ae90ac8ea2a7100e1032ea7e133ab50b61dc3e0c270af7c9d8eb": { + "address": "0xa925C217e4c1C82Ee721eBD496d3863D5C2d829A", + "txHash": "0x0b31f1af4dd5c13d58c2eceb2349575a6ba9031579ae22dc6d2a05b6ca947667", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "details", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes32,t_struct(Details)12895_storage)", + "contract": "Redemption", + "src": "contracts/token/Redemption.sol:42" + }, + { + "label": "minimum", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_contract(IERC20)4734,t_uint256)", + "contract": "Redemption", + "src": "contracts/token/Redemption.sol:43" + }, + { + "label": "_outputs", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_contract(IERC20)4734,t_struct(AddressSet)11603_storage)", + "contract": "Redemption", + "src": "contracts/token/Redemption.sol:44" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)941_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)4734": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_enum(Status)12889": { + "label": "enum Redemption.Status", + "members": [ + "NULL", + "PENDING", + "EXECUTED", + "CANCELED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_struct(Details)12895_storage)": { + "label": "mapping(bytes32 => struct Redemption.Details)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)4734,t_struct(AddressSet)11603_storage)": { + "label": "mapping(contract IERC20 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)4734,t_uint256)": { + "label": "mapping(contract IERC20 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)11603_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)11288_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Details)12895_storage": { + "label": "struct Redemption.Details", + "members": [ + { + "label": "status", + "type": "t_enum(Status)12889", + "offset": 0, + "slot": "0" + }, + { + "label": "deadline", + "type": "t_uint48", + "offset": 1, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Set)11288_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_positions", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "7f4f74d84e6b0c203efb9fe85ed69632742f47f65e33db522f46a5e44381a9c1": { + "address": "0x15EA0EC460a0E6847EC0AA8D50A84B3A51B95f74", + "txHash": "0xe906f0a544626e74fa6ae65f6aa6930523c28974c4e83669f25bb98acbdcf07a", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "m_decimals", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Token", + "src": "contracts/token/Token.sol:35" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(EIP712Storage)552_storage": { + "label": "struct EIP712Upgradeable.EIP712Storage", + "members": [ + { + "label": "_hashedName", + "type": "t_bytes32", + "offset": 0, + "slot": "0" + }, + { + "label": "_hashedVersion", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "_version", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(ERC20Storage)247_storage": { + "label": "struct ERC20Upgradeable.ERC20Storage", + "members": [ + { + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + }, + { + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "offset": 0, + "slot": "1" + }, + { + "label": "_totalSupply", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "_name", + "type": "t_string_storage", + "offset": 0, + "slot": "3" + }, + { + "label": "_symbol", + "type": "t_string_storage", + "offset": 0, + "slot": "4" + } + ], + "numberOfBytes": "160" + }, + "t_struct(InitializableStorage)111_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(NoncesStorage)438_storage": { + "label": "struct NoncesUpgradeable.NoncesStorage", + "members": [ + { + "label": "_nonces", + "type": "t_mapping(t_address,t_uint256)", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(OwnableStorage)27_storage": { + "label": "struct OwnableUpgradeable.OwnableStorage", + "members": [ + { + "label": "_owner", + "type": "t_address", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(PausableStorage)475_storage": { + "label": "struct PausableUpgradeable.PausableStorage", + "members": [ + { + "label": "_paused", + "type": "t_bool", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Nonces": [ + { + "contract": "NoncesUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/utils/NoncesUpgradeable.sol:17", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.EIP712": [ + { + "contract": "EIP712Upgradeable", + "label": "_hashedName", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:39", + "offset": 0, + "slot": "0" + }, + { + "contract": "EIP712Upgradeable", + "label": "_hashedVersion", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:41", + "offset": 0, + "slot": "1" + }, + { + "contract": "EIP712Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:43", + "offset": 0, + "slot": "2" + }, + { + "contract": "EIP712Upgradeable", + "label": "_version", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44", + "offset": 0, + "slot": "3" + } + ], + "erc7201:openzeppelin.storage.Pausable": [ + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:21", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.ERC20": [ + { + "contract": "ERC20Upgradeable", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:38", + "offset": 0, + "slot": "0" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40", + "offset": 0, + "slot": "1" + }, + { + "contract": "ERC20Upgradeable", + "label": "_totalSupply", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42", + "offset": 0, + "slot": "2" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44", + "offset": 0, + "slot": "3" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:45", + "offset": 0, + "slot": "4" + } + ], + "erc7201:openzeppelin.storage.Ownable": [ + { + "contract": "OwnableUpgradeable", + "label": "_owner", + "type": "t_address", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:24", + "offset": 0, + "slot": "0" + } + ], + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + }, + "53b03670a3f4d6b49506a39dd8d91ea3c392fc0d164b974a9f7fa361ada412d3": { + "address": "0xCBeb19549054CC0a6257A77736FC78C367216cE7", + "txHash": "0xd6f8f25bf5022446590421d4cc676b0b27ce615871be5d310863517f79f1b8cd", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "token", + "offset": 0, + "slot": "0", + "type": "t_contract(IERC20Metadata)4760", + "contract": "Oracle", + "src": "contracts/oracle/Oracle.sol:26" + }, + { + "label": "decimals", + "offset": 20, + "slot": "0", + "type": "t_uint8", + "contract": "Oracle", + "src": "contracts/oracle/Oracle.sol:28" + }, + { + "label": "description", + "offset": 0, + "slot": "1", + "type": "t_string_storage", + "contract": "Oracle", + "src": "contracts/oracle/Oracle.sol:29" + }, + { + "label": "_history", + "offset": 0, + "slot": "2", + "type": "t_struct(Trace208)10239_storage", + "contract": "Oracle", + "src": "contracts/oracle/Oracle.sol:30" + } + ], + "types": { + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(InitializableStorage)941_storage": { + "label": "struct Initializable.InitializableStorage", + "members": [ + { + "label": "_initialized", + "type": "t_uint64", + "offset": 0, + "slot": "0" + }, + { + "label": "_initializing", + "type": "t_bool", + "offset": 8, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_array(t_struct(Checkpoint208)10244_storage)dyn_storage": { + "label": "struct Checkpoints.Checkpoint208[]", + "numberOfBytes": "32" + }, + "t_contract(IERC20Metadata)4760": { + "label": "contract IERC20Metadata", + "numberOfBytes": "20" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Checkpoint208)10244_storage": { + "label": "struct Checkpoints.Checkpoint208", + "members": [ + { + "label": "_key", + "type": "t_uint48", + "offset": 0, + "slot": "0" + }, + { + "label": "_value", + "type": "t_uint208", + "offset": 6, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Trace208)10239_storage": { + "label": "struct Checkpoints.Trace208", + "members": [ + { + "label": "_checkpoints", + "type": "t_array(t_struct(Checkpoint208)10244_storage)dyn_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint208": { + "label": "uint208", + "numberOfBytes": "26" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": { + "erc7201:openzeppelin.storage.Initializable": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_uint64", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:69", + "offset": 0, + "slot": "0" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts/proxy/utils/Initializable.sol:73", + "offset": 8, + "slot": "0" + } + ] + } + } + } + } +} diff --git a/scripts/config.json b/scripts/config.json index 1bdce89..bce2a25 100644 --- a/scripts/config.json +++ b/scripts/config.json @@ -26,19 +26,19 @@ }, "roles": { "admin": { - "members": [] + "members": ["0xa4196F06fe948b8Ca81D3dC77110d3f83d10ABD9"] }, "operator-exceptional": { "admins": ["admin"], - "members": [] + "members": ["0xF5f6447bdAf6a8DFaA0e53cF66aBcF967C4DCAB6"] }, "operator-daily": { "admins": ["admin"], - "members": [] + "members": ["0x54c3BdB934f9BF36a8851306475Eb68CD43a25b3"] }, "operator-oracle": { "admins": ["admin"], - "members": [] + "members": ["0x54c3BdB934f9BF36a8851306475Eb68CD43a25b3"] }, "burner": { "admins": ["admin"], @@ -46,7 +46,7 @@ }, "whitelister": { "admins": ["admin"], - "members": [] + "members": ["0x54c3BdB934f9BF36a8851306475Eb68CD43a25b3"] }, "whitelisted": { "admins": ["whitelister"],