diff --git a/.circleci/config.yml b/.circleci/config.yml index 98f55f9c..bdee3890 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: default: docker: - - image: circleci/node:12 + - image: circleci/node:14 working_directory: /tmp/workspace jobs: @@ -57,16 +57,48 @@ jobs: test: executor: default + resource_class: large + parallelism: 16 steps: - checkout - attach_workspace: at: /tmp/workspace - run: name: Run tests - command: yarn test:gas + command: | + circleci tests glob 'test/**/*.test.js' | + circleci tests split | + xargs yarn test:gas + - run: + name: Save gas report + command: | + mv gasReporterOutput.json /tmp/workspace/gasReporterOutput-$CIRCLE_NODE_INDEX.json + - persist_to_workspace: + root: /tmp/workspace + paths: + - gasReporterOutput-*.json + + report-gas: + executor: default + steps: + - checkout + - attach_workspace: + at: /tmp/workspace - run: name: Report gas changes - command: npx codechecks + command: | + npx hardhat gas-reporter:merge /tmp/workspace/gasReporterOutput-*.json + npx codechecks + - store_artifacts: + path: gasReporterOutput.json + - run: + name: Process test report + when: always + command: | + # Convert absolute paths to relative to support splitting tests by timing + if [ -e /tmp/workspace/log/test-results/mocha/test-results.xml ]; then + sed -i "s|`pwd`/||g" /tmp/workspace/log/test-results/mocha/test-results.xml + fi # FIXME: https://github.com/sc-forks/solidity-coverage/issues/574 # coverage: @@ -97,6 +129,9 @@ workflows: - test: requires: - compile + - report-gas: + requires: + - test # - coverage: # requires: # - compile diff --git a/.mocharc.js b/.mocharc.js deleted file mode 100644 index fac5fdfe..00000000 --- a/.mocharc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - timeout: 4000, -}; diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index 1dda7450..815d862f 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -1,1106 +1,57 @@ { "manifestVersion": "3.2", - "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0x70318289179C01FdBcce8c4071c6556cbd2C613b", - "txHash": "0xbd0644fa6410d20a83a4535379a65c844cf8289ad9acba9f592575b3a6d25954", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" - }, - { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" - }, - { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" - } - ], - "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0x50C3723bBF5074CD9Da1754713d1F48C38B26Da1", - "txHash": "0x3cafe0b96a077d80ba53ba620ed38e845be67eec730465b992ddd6562cb84101", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x2bC925698e1Dba66541f7529F0D7d59632bEA695", - "txHash": "0x862d4631f3df71551a4631bb105d10fec96e5888f114c7d2763bebd2997eda49", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" - }, - { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" - }, - { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/tokens/StakedEthToken.sol:29" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "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)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x209272625648DCA2077530Ef152081d1bB8a0bF7", - "txHash": "0xa60095d5c63718ed32ee0a2fa4fdf5132e294573781171372566a72c699049d0", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" - } - ], - "types": { - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_uint128": { - "label": "uint128" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "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)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0x45903E6De7Ee93e99Ae57DD1dCB4dDe61131F2bd", - "txHash": "0xc6fd0d563aebc0497f3be45b4129c3aa3fb188f6439870d9bb7f224e5f292177", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "0b75bd82778d4c360318bd59e498ceb95499641b67ab7608cee37b6c643a88ab": { - "address": "0xAB10021EA5d14156f52414C492bf81859d0b21F6", - "txHash": "0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5174", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5810", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5858", - "src": "contracts/collectors/Pool.sol:37" - }, - { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" - }, - { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" - }, - { - "contract": "Pool", - "label": "pendingValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" - }, - { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" - }, - { - "contract": "Pool", - "label": "pendingValidatorsLimit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)5174": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5810": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5858": { - "label": "contract IValidators" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.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)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF", - "txHash": "0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5652", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5533", - "src": "contracts/Oracles.sol:44" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)5652": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)5533": { - "label": "contract IPool" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.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_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } + "admin": { + "address": "0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8", + "txHash": "0x8f4bd6ede50b7fc589807a9277c3cd2624d2b5b4f9cda20b589aa2cb8b5a0cc5" + }, + "proxies": [ + { + "address": "0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7", + "txHash": "0x35323b9efb3871df2852134fc15c76dba1233a665d8f3224c48e4ef55e9f1232", + "kind": "transparent" + }, + { + "address": "0x221D9812823DBAb0F1fB40b0D294D9875980Ac19", + "txHash": "0xd745ea1ff1ada4725d40b2c7e73ba4bbc7171ab513822a0838e21a55d1c3a44c", + "kind": "transparent" + }, + { + "address": "0x826f88d423440c305D9096cC1581Ae751eFCAfB0", + "txHash": "0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6", + "kind": "transparent" + }, + { + "address": "0x0e2497aACec2755d831E4AFDEA25B4ef1B823855", + "txHash": "0xa4e348e58f8144e3cf6973983001e7fb6e74f0bb423f5a37ba87c686cf178314", + "kind": "transparent" + }, + { + "address": "0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59", + "txHash": "0xdcb1d1dfbb6a0bdfe5f2dfd9cc83a91f1a3e0fefd6c655f3afa6f3a29a012d7f", + "kind": "transparent" }, + { + "address": "0x6Ef0172b79131C66c7012Db3545D637B116feb12", + "txHash": "0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535", + "kind": "transparent" + }, + { + "address": "0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC", + "txHash": "0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3", + "kind": "transparent" + }, + { + "address": "0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb", + "txHash": "0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f", + "kind": "transparent" + }, + { + "address": "0x531b9D9cb268E88D53A87890699bbe31326A6f08", + "txHash": "0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d", + "kind": "transparent" + } + ], + "impls": { "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { "address": "0x6DEf201461DcA70f7fEB757FBADFF9c34a240bfC", "txHash": "0xd82302d4bbd39547684b3dc5289cc3b00b0d74228c79d0cc16adc98b9347fbe0", @@ -1320,9 +271,9 @@ } } }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0xb809AA5a1025170F09B3E3b31fDD8a93ac04da5e", - "txHash": "0x2b29d740ba4ebdcc5cc5ec417d78ce90d304375014e4bb7294b215c75be7fa48", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0x1BBf89F4Dc9913FCC14EF5A336A1d8C23Ccb74E3", + "txHash": "0x4a62b639e881e498f6e7128092f866ef3b660a8d3a61afa27f3b250867a61ef8", "layout": { "storage": [ { @@ -1386,34 +337,283 @@ "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" + } + ], + "types": { + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2026_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1761_storage" + } + ] + }, + "t_struct(Set)1761_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { + "address": "0x0786526AC78BBf46804acFA2D4DcF371404b0F77", + "txHash": "0xe1b809ff7b3a5b43fb32e4db11ace45309fe66642359efbfe02819aa8971dc3b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "StakedEthToken", + "label": "totalDeposits", + "type": "t_uint256", + "src": "contracts/tokens/StakedEthToken.sol:20" + }, + { + "contract": "StakedEthToken", + "label": "deposits", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/tokens/StakedEthToken.sol:23" + }, + { + "contract": "StakedEthToken", + "label": "pool", + "type": "t_address", + "src": "contracts/tokens/StakedEthToken.sol:26" + }, + { + "contract": "StakedEthToken", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)7534", + "src": "contracts/tokens/StakedEthToken.sol:29" + }, + { + "contract": "StakedEthToken", + "label": "distributorPrincipal", + "type": "t_uint256", + "src": "contracts/tokens/StakedEthToken.sol:32" } ], "types": { + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" + "t_contract(IRewardEthToken)7534": { + "label": "contract IRewardEthToken" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] }, "t_bytes32": { "label": "bytes32" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "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)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1421,16 +621,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1449,24 +649,15 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, "t_bool": { "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" } } } }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0x1BBf89F4Dc9913FCC14EF5A336A1d8C23Ccb74E3", - "txHash": "0x4a62b639e881e498f6e7128092f866ef3b660a8d3a61afa27f3b250867a61ef8", + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0xc20d2dD754496fA82Bfdd580863ca231a65C4A8A", + "txHash": "0xf2cc0ab1140c8aadba3fa79eaddca7b41b897c4c76cebd7712ec8106f3b623c5", "layout": { "storage": [ { @@ -1481,18 +672,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1522,30 +701,9 @@ "label": "__gap", "type": "t_array(t_uint256)49_storage", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, @@ -1557,7 +715,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1565,16 +723,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1608,9 +766,9 @@ } } }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0xc20DB27e61dAe99Cd53F920A06a0E7CEA2C3e4ba", - "txHash": "0x3bfea9caef4d0efe3fe9cf5a07828847ac15a770678d88be861d01fc69fdb825", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0x66D2603C6c11F366944B80Ded53B73051B34ac3F", + "txHash": "0xf65666a55c8c22570ef22415743298cb2e0e4adb7bbd1f265565856cb15ce4e5", "layout": { "storage": [ { @@ -1656,54 +814,79 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", - "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" }, { - "contract": "MerkleDistributor", - "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "contract": "PoolValidators", + "label": "isValidatorRegistered", + "type": "t_mapping(t_bytes32,t_bool)", + "src": "contracts/pool/PoolValidators.sol:24" }, { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6550_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6484", + "src": "contracts/pool/PoolValidators.sol:30" + }, + { + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" + }, "t_bytes32": { "label": "bytes32" }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Operator)6550_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" + }, "t_address": { "label": "address" }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" + "t_struct(Operator)6550_storage": { + "label": "struct IPoolValidators.Operator", + "members": [ + { + "label": "depositDataMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "committed", + "type": "t_bool" + } + ] + }, + "t_contract(IPool)6484": { + "label": "contract IPool" }, "t_uint256": { "label": "uint256" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -1749,21 +932,15 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" } } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0x49A8F635670A38153fE59B500F84cf155E5941CD", - "txHash": "0x70cedccd428127d85073912a66a2d9aadb8119638f65772a54818a9f937d01cd", + "b7742cf0e7125c81208f1a73472947e64737df4431110353145dd5659b68e347": { + "address": "0xD175545f395d0439b200dfecc73FD85152b92Dba", + "txHash": "0x3826ed57c645114cccf7bbee46b9d179348548528ac2ff643474a8f512bf138e", "layout": { "storage": [ { @@ -1778,18 +955,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1821,93 +986,90 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", + "contract": "Pool", + "label": "activatedValidators", "type": "t_uint256", - "src": "contracts/Oracles.sol:27" + "src": "contracts/pool/Pool.sol:26" }, { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" }, { - "contract": "Oracles", - "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" } ], "types": { "t_uint256": { "label": "uint256" }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" }, - "t_bool": { - "label": "bool" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] + "t_address": { + "label": "address" }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -1950,18 +1112,24 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, + "t_bool": { + "label": "bool" + }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" } } } }, - "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { - "address": "0x0786526AC78BBf46804acFA2D4DcF371404b0F77", - "txHash": "0xe1b809ff7b3a5b43fb32e4db11ace45309fe66642359efbfe02819aa8971dc3b", + "25bdc9887ecebf4990c02c9599b14fa2663352a025894b6dfe904a8cfb2f8a5b": { + "address": "0x8201844E42Ea995df63CF5939Ee07989502C428c", + "txHash": "0xbb614051aedddcbf1f286fdf9675ef84b5cdc3c3cd20d0a31d614a64c4da2a4b", "layout": { "storage": [ { @@ -2073,81 +1241,280 @@ "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" }, { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" }, { - "contract": "StakedEthToken", - "label": "pool", + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" + "src": "contracts/tokens/RewardEthToken.sol:34" }, { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/tokens/StakedEthToken.sol:29" + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" }, { - "contract": "StakedEthToken", - "label": "distributorPrincipal", + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:32" + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, "t_uint256": { "label": "uint256" }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, "t_mapping(t_address,t_uint256)": { "label": "mapping(address => uint256)" }, - "t_address": { - "label": "address" + "t_string_storage": { + "label": "string" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_uint8": { + "label": "uint8" }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + } + } + } + }, + "1d32117f5354e1f5554fee45d322372ed074377a6e790c3ede2b29d622cd26e3": { + "address": "0xC8d0c21fbb95050974f0fFfCB76e61e5AeD5C750", + "txHash": "0xf127920a192c4e6be534ed7094f2356fc4cb10161b99b89e06348878080a4be1", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { "t_bytes32": { "label": "bytes32" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_address": { + "label": "address" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_contract(IOracles)6192": { + "label": "contract IOracles" }, - "t_string_storage": { - "label": "string" + "t_uint256": { + "label": "uint256" }, - "t_uint8": { - "label": "uint8" + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2193,15 +1560,21 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "ffaa1d87d4edbb0fd66d5a7c5ca9b84aae9982f5b92e4ba1f27d1237331caddf": { - "address": "0x9BA7d72a9fb92e15863E3604F7B14B51CC56fCbD", - "txHash": "0x9b4f98101035190cc56dcbcbdadd9a5e051dffe5625fda5da7615ee2ae9d894f", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0x32664bAA1B9d47b07dc025fDF9cB00859B66BecE", + "txHash": "0x7fba7d093b9167d7aa41f4e26cadaa3f4e3419cbb9741252a2cdd8687d21e9ee", "layout": { "storage": [ { @@ -2247,170 +1620,43 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7696", - "src": "contracts/tokens/RewardEthToken.sol:24" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:27" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", - "src": "contracts/tokens/RewardEthToken.sol:30" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:33" + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" }, { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:36" + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" }, { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:39" + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)6794", + "src": "contracts/Oracles.sol:37" }, { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:42" + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/Oracles.sol:40" }, { - "contract": "RewardEthToken", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:45" + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/Oracles.sol:43" }, { - "contract": "RewardEthToken", + "contract": "Oracles", "label": "merkleDistributor", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:48" - }, - { - "contract": "RewardEthToken", - "label": "rewardsDisabled", - "type": "t_mapping(t_address,t_bool)", - "src": "contracts/tokens/RewardEthToken.sol:51" + "type": "t_contract(IMerkleDistributor)5968", + "src": "contracts/Oracles.sol:46" } ], "types": { - "t_contract(IStakedEthToken)7696": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_struct(Checkpoint)7408_storage": { - "label": "struct IRewardEthToken.Checkpoint", - "members": [ - { - "label": "reward", - "type": "t_uint128" - }, - { - "label": "rewardPerToken", - "type": "t_uint128" - } - ] - }, - "t_uint128": { - "label": "uint128" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ @@ -2420,33 +1666,27 @@ } ] }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" + "t_contract(IRewardEthToken)6794": { + "label": "contract IRewardEthToken" }, - "t_string_storage": { - "label": "string" + "t_contract(IPool)6482": { + "label": "contract IPool" }, - "t_uint8": { - "label": "uint8" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_contract(IMerkleDistributor)5968": { + "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ @@ -2487,55 +1727,18 @@ }, "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } } - }, - "proxies": [ - { - "address": "0xE2F13059454b626e42e04845815E9Ed2E9774bF3", - "kind": "transparent", - "txHash": "0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974" - }, - { - "address": "0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7", - "kind": "transparent", - "txHash": "0x35323b9efb3871df2852134fc15c76dba1233a665d8f3224c48e4ef55e9f1232" - }, - { - "address": "0x221D9812823DBAb0F1fB40b0D294D9875980Ac19", - "kind": "transparent", - "txHash": "0xd745ea1ff1ada4725d40b2c7e73ba4bbc7171ab513822a0838e21a55d1c3a44c" - }, - { - "address": "0x826f88d423440c305D9096cC1581Ae751eFCAfB0", - "kind": "transparent", - "txHash": "0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6" - }, - { - "address": "0x0e2497aACec2755d831E4AFDEA25B4ef1B823855", - "kind": "transparent", - "txHash": "0xa4e348e58f8144e3cf6973983001e7fb6e74f0bb423f5a37ba87c686cf178314" - }, - { - "address": "0xE54486fa4eB45716c5725d7A46FDDe810B8E8914", - "kind": "transparent", - "txHash": "0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c" - }, - { - "address": "0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59", - "kind": "transparent", - "txHash": "0xdcb1d1dfbb6a0bdfe5f2dfd9cc83a91f1a3e0fefd6c655f3afa6f3a29a012d7f" - }, - { - "address": "0x6Ef0172b79131C66c7012Db3545D637B116feb12", - "kind": "transparent", - "txHash": "0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535" - } - ], - "admin": { - "address": "0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8", - "txHash": "0x8f4bd6ede50b7fc589807a9277c3cd2624d2b5b4f9cda20b589aa2cb8b5a0cc5" } } diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index d7930be3..c66f0503 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -1,28 +1,79 @@ { "manifestVersion": "3.2", + "admin": { + "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", + "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + }, + "proxies": [ + { + "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", + "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", + "kind": "transparent" + }, + { + "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", + "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15", + "kind": "transparent" + }, + { + "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", + "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9", + "kind": "transparent" + }, + { + "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", + "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", + "kind": "transparent" + }, + { + "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", + "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", + "kind": "transparent" + }, + { + "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", + "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a", + "kind": "transparent" + }, + { + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "kind": "transparent" + }, + { + "address": "0x002932e11E95DC84C17ed5f94a0439645D8a97BC", + "txHash": "0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e", + "kind": "transparent" + }, + { + "address": "0x8a887282E67ff41d36C0b7537eAB035291461AcD", + "txHash": "0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506", + "kind": "transparent" + } + ], "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", - "txHash": "0x1a4332730b0fb57cf85d9cd1e69c2d90e708c6074786f56cbc05fbeee47e29db", + "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { + "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", + "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -39,7 +90,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -49,68 +100,211 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" }, { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "StakeWiseToken", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/tokens/StakeWiseToken.sol:15" + }, + { + "contract": "StakeWiseToken", + "label": "_totalSupply", + "type": "t_uint256", + "src": "contracts/tokens/StakeWiseToken.sol:17" } ], "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" }, "t_address": { "label": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_struct(Counter)1710_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1710_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, - "t_bool": { - "label": "bool" - }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" + }, + "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)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2026_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1761_storage" + } + ] + }, + "t_struct(Set)1761_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + }, + "t_bool": { + "label": "bool" } } } }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0xf6a519699dd2f66a8Aa1F49B81C73690F104647f", - "txHash": "0xd1a832b29db69905f48a075effac4d274565ff837d4a083712fb3dfa49a704f6", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", + "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -127,7 +321,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -137,54 +331,77 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" + "contract": "VestingEscrowFactory", + "label": "escrowImplementation", + "type": "t_address", + "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" + "t_struct(AddressSet)2026_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1761_storage" + } + ] }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" + "t_struct(Set)1761_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" @@ -198,28 +415,28 @@ } } }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x6A8a1716a44f700af56ea52D44B916A50333A369", - "txHash": "0x5e214beece1c31c69f3b927f96c0547ce744c5c3cc4c1dca171bb26fcd5a839b", + "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { + "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", + "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -236,7 +453,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -273,43 +490,43 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { "contract": "StakedEthToken", @@ -332,8 +549,14 @@ { "contract": "StakedEthToken", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", + "type": "t_contract(IRewardEthToken)7534", "src": "contracts/tokens/StakedEthToken.sol:29" + }, + { + "contract": "StakedEthToken", + "label": "distributorPrincipal", + "type": "t_uint256", + "src": "contracts/tokens/StakedEthToken.sol:32" } ], "types": { @@ -346,12 +569,21 @@ "t_address": { "label": "address" }, - "t_contract(IRewardEthToken)5069": { + "t_contract(IRewardEthToken)7534": { "label": "contract IRewardEthToken" }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { + "t_mapping(t_address,t_struct(Counter)1781_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, "t_bytes32": { "label": "bytes32" }, @@ -367,14 +599,55 @@ "t_string_storage": { "label": "string" }, - "t_uint8": { - "label": "uint8" + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, "t_bool": { "label": "bool" @@ -382,28 +655,28 @@ } } }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x46B7232bc7392b157371eBFcD4618Ca9CEedb1bd", - "txHash": "0xdc0f09fd8ffd9aeba4dcccf0994a2d26c61a7d418bf7d01fdaaa7bdc70a7a2c9", + "2b3ac17098d6878bec278c97e21f6f23d52c9485431ab442e877cb3c632f159c": { + "address": "0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09", + "txHash": "0xecadc60b31ea4f09978df5bc5f34cc5138e1346f2ad7993c60a81a476a0d6e55", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -420,7 +693,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -457,176 +730,398 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { "contract": "RewardEthToken", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/tokens/RewardEthToken.sol:25" }, { "contract": "RewardEthToken", "label": "oracles", "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" + "src": "contracts/tokens/RewardEthToken.sol:28" }, { "contract": "RewardEthToken", "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" + "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" }, { "contract": "RewardEthToken", - "label": "maintainer", + "label": "protocolFeeRecipient", "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" + "src": "contracts/tokens/RewardEthToken.sol:34" }, { "contract": "RewardEthToken", - "label": "maintainerFee", + "label": "protocolFee", "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" + "src": "contracts/tokens/RewardEthToken.sol:37" }, { "contract": "RewardEthToken", "label": "totalRewards", "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" + "src": "contracts/tokens/RewardEthToken.sol:40" }, { "contract": "RewardEthToken", "label": "rewardPerToken", "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" + "src": "contracts/tokens/RewardEthToken.sol:43" }, { "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", + "label": "lastUpdateBlockNumber", "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { - "t_contract(IStakedEthToken)5227": { + "t_contract(IStakedEthToken)7131": { "label": "contract IStakedEthToken" }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { + "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { "label": "mapping(address => struct IRewardEthToken.Checkpoint)" }, - "t_uint256": { - "label": "uint256" + "t_struct(Checkpoint)6889_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] }, "t_uint128": { "label": "uint128" }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, - "t_bytes32": { - "label": "bytes32" + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "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)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + } + } + } + }, + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] }, - "t_string_storage": { - "label": "string" + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_uint8": { - "label": "uint8" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0xfdec24BB3055BE9578300f1541d5e0Ee4eDa6261", - "txHash": "0x4b2bce9a29734672917727e27a47d4a44b20953b04be7f4215fae4d77058fdec", + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -643,7 +1138,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -651,65 +1146,58 @@ "label": "__gap", "type": "t_array(t_uint256)49_storage", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_bytes32": { + "label": "bytes32" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.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_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_uint256": { + "label": "uint256" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" @@ -723,9 +1211,9 @@ } } }, - "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { - "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", - "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", + "064504ebb100ee7d08a436e72c0bda2e728c75475bc94a7e2abd77a2848a7380": { + "address": "0xe68E649862F7036094f1E4eD5d69a738aCDE666f", + "txHash": "0x453dbec9becf6c8d132ba589c2653d33d48950a04353bd9f48070ebc5cd19b4f", "layout": { "storage": [ { @@ -774,61 +1262,61 @@ "contract": "Pool", "label": "activatedValidators", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" + "src": "contracts/pool/Pool.sol:26" }, { "contract": "Pool", "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" + "src": "contracts/pool/Pool.sol:29" }, { "contract": "Pool", "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5197", - "src": "contracts/collectors/Pool.sol:31" + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { "contract": "Pool", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5841", - "src": "contracts/collectors/Pool.sol:34" + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { "contract": "Pool", "label": "validators", - "type": "t_contract(IValidators)5889", - "src": "contracts/collectors/Pool.sol:37" + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { "contract": "Pool", "label": "oracles", "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" + "src": "contracts/pool/Pool.sol:41" }, { "contract": "Pool", "label": "activations", "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" + "src": "contracts/pool/Pool.sol:44" }, { "contract": "Pool", "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" + "src": "contracts/pool/Pool.sol:47" }, { "contract": "Pool", "label": "minActivatingDeposit", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" + "src": "contracts/pool/Pool.sol:50" }, { "contract": "Pool", "label": "pendingValidatorsLimit", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" + "src": "contracts/pool/Pool.sol:53" } ], "types": { @@ -838,14 +1326,14 @@ "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5197": { + "t_contract(IDepositContract)5811": { "label": "contract IDepositContract" }, - "t_contract(IStakedEthToken)5841": { + "t_contract(IStakedEthToken)6891": { "label": "contract IStakedEthToken" }, - "t_contract(IValidators)5889": { - "label": "contract IValidators" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, "t_address": { "label": "address" @@ -864,7 +1352,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)1421_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -872,16 +1360,16 @@ } ] }, - "t_struct(AddressSet)1421_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1156_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1156_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -912,9 +1400,9 @@ } } }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x749dCCE12E8337dfb44635082519E656d44A2672", - "txHash": "0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0xfa00515082fe90430C80DA9B299f353929653d7B", + "txHash": "0x65770cb60072af3601d69bac17b6c1143e98524a6fae4989c203f0b5cb409b51", "layout": { "storage": [ { @@ -929,18 +1417,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -972,85 +1448,80 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" }, { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" }, { - "contract": "Oracles", - "label": "submittedVotes", + "contract": "PoolValidators", + "label": "isValidatorRegistered", "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" + "src": "contracts/pool/PoolValidators.sol:24" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5683", - "src": "contracts/Oracles.sol:38" + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6548_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/pool/PoolValidators.sol:30" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5564", - "src": "contracts/Oracles.sol:44" + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, "t_bool": { "label": "bool" }, - "t_contract(IRewardEthToken)5683": { - "label": "contract IRewardEthToken" + "t_mapping(t_address,t_struct(Operator)6548_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", + "t_address": { + "label": "address" + }, + "t_struct(Operator)6548_storage": { + "label": "struct IPoolValidators.Operator", "members": [ { - "label": "_value", - "type": "t_uint256" + "label": "depositDataMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "committed", + "type": "t_bool" } ] }, - "t_contract(IPool)5564": { + "t_contract(IPool)6482": { "label": "contract IPool" }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, @@ -1059,7 +1530,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)1421_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1067,16 +1538,16 @@ } ] }, - "t_struct(AddressSet)1421_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1156_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1156_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1092,8 +1563,8 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" @@ -1101,9 +1572,9 @@ } } }, - "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { - "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", - "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE", + "txHash": "0x647d2cf174087c56fb6e6ffd75054f3a5ea1ed8572e280f27bdf13b7da691202", "layout": { "storage": [ { @@ -1149,98 +1620,44 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)6794", + "src": "contracts/Oracles.sol:37" }, { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/Oracles.sol:40" }, { - "contract": "StakeWiseToken", - "label": "_balances", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakeWiseToken.sol:15" + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/Oracles.sol:43" }, { - "contract": "StakeWiseToken", - "label": "_totalSupply", - "type": "t_uint256", - "src": "contracts/tokens/StakeWiseToken.sol:17" + "contract": "Oracles", + "label": "merkleDistributor", + "type": "t_contract(IMerkleDistributor)5968", + "src": "contracts/Oracles.sol:46" } ], "types": { - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Counter)1710_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1710_storage": { + "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ { @@ -1249,36 +1666,33 @@ } ] }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_contract(IRewardEthToken)6794": { + "label": "contract IRewardEthToken" }, - "t_string_storage": { - "label": "string" + "t_contract(IPool)6482": { + "label": "contract IPool" }, - "t_uint8": { - "label": "uint8" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_contract(IMerkleDistributor)5968": { + "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1286,16 +1700,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1314,15 +1728,21 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0x27356a244cD2a8bBd0A1f4E96E8FCd70bF926Bc3", - "txHash": "0x13ee96fe09831c3409799fa008729cb73efd98f65e43c5115841d42f9cbcaa16", + "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { + "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", + "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", "layout": { "storage": [ { @@ -1337,18 +1757,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1380,40 +1788,64 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" + "src": "contracts/merkles/MerkleDistributor.sol:27" }, { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)7086", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { + "t_bytes32": { + "label": "bytes32" + }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" + "t_contract(IOracles)7086": { + "label": "contract IOracles" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bytes32": { - "label": "bytes32" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1421,16 +1853,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1449,9 +1881,6 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -1464,9 +1893,9 @@ } } }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", - "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", + "d8130dc915911607e60a0d8df67e30e904fd2c72948a8e9cca6ca3460d3a8df2": { + "address": "0x3Cf7850F3C68624aAD34c17562669c0694E3ce7f", + "txHash": "0xd29453703e51ddaf141fe35f52696ca98223e0ff7592a139c2782f28d038a58a", "layout": { "storage": [ { @@ -1481,18 +1910,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1524,40 +1941,64 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" + "src": "contracts/merkles/MerkleDistributor.sol:27" }, { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { + "t_bytes32": { + "label": "bytes32" + }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" + "t_contract(IOracles)6192": { + "label": "contract IOracles" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bytes32": { - "label": "bytes32" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1565,16 +2006,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1593,9 +2034,6 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -1608,9 +2046,9 @@ } } }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", - "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", + "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { + "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", + "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", "layout": { "storage": [ { @@ -1656,51 +2094,87 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:25" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "src": "contracts/collectors/Pool.sol:28" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5197", + "src": "contracts/collectors/Pool.sol:31" }, { - "contract": "MerkleDistributor", + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)5841", + "src": "contracts/collectors/Pool.sol:34" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IValidators)5889", + "src": "contracts/collectors/Pool.sol:37" + }, + { + "contract": "Pool", "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "type": "t_address", + "src": "contracts/collectors/Pool.sol:40" }, { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/collectors/Pool.sol:43" + }, + { + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "src": "contracts/collectors/Pool.sol:46" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:49" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:52" } ], "types": { + "t_uint256": { + "label": "uint256" + }, "t_bytes32": { "label": "bytes32" }, - "t_address": { - "label": "address" + "t_contract(IDepositContract)5197": { + "label": "contract IDepositContract" }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" + "t_contract(IStakedEthToken)5841": { + "label": "contract IStakedEthToken" }, - "t_uint256": { - "label": "uint256" + "t_contract(IValidators)5889": { + "label": "contract IValidators" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, "t_mapping(t_uint256,t_uint256)": { "label": "mapping(uint256 => uint256)" @@ -1713,7 +2187,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)1421_storage" }, { "label": "adminRole", @@ -1721,16 +2195,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)1421_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1156_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1156_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2053,9 +2527,9 @@ } } }, - "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { - "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", - "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", + "1cbcdcdafb11126baead1ddf322344e63f3218adbddb2149a3ba6d13e257d018": { + "address": "0x8C3FC957cb0A339acbE442bD0792590737240BF7", + "txHash": "0x6f5e0a0d0b028502a8d3e5fa61311363677502bdafcd7450e7fd7d66c14c1520", "layout": { "storage": [ { @@ -2101,147 +2575,90 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" }, { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" }, { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" }, { - "contract": "StakedEthToken", - "label": "totalDeposits", + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" - }, - { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" + "src": "contracts/pool/Pool.sol:47" }, { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/tokens/StakedEthToken.sol:29" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" }, { - "contract": "StakedEthToken", - "label": "distributorPrincipal", + "contract": "Pool", + "label": "pendingValidatorsLimit", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:32" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] + "src": "contracts/pool/Pool.sol:53" + } + ], + "types": { + "t_uint256": { + "label": "uint256" }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_string_storage": { - "label": "string" + "t_address": { + "label": "address" }, - "t_uint8": { - "label": "uint8" + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2287,15 +2704,21 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0xd3ea5BF3bB42542B5b64358C12F06233704e9b99", - "txHash": "0xb19a687a2a602619e0424904de456cde8ea3f58286164ffd37db5e5cc7193e33", + "8403e73b5622e4987eb42a678b18c511ccbc91a96452889eff19be7f48562955": { + "address": "0x33582de22176cB084aFBFb818B490adb327BC5bb", + "txHash": "0xe641e2ef15aa49caabf74883627c7a97d910197cb9d48a9a2165a337e4af2e2f", "layout": { "storage": [ { @@ -2310,18 +2733,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -2353,78 +2764,169 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:27" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" }, { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" }, { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { - "contract": "Oracles", + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_address": { + "label": "address" }, - "t_bytes32": { - "label": "bytes32" + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] }, - "t_address": { - "label": "address" + "t_uint128": { + "label": "uint128" }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" }, "t_bool": { "label": "bool" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" }, "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", @@ -2435,11 +2937,29 @@ } ] }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_bytes32": { + "label": "bytes32" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "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)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2482,60 +3002,11 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" } } } } - }, - "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "kind": "transparent", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289" - }, - { - "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", - "kind": "transparent", - "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e" - }, - { - "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", - "kind": "transparent", - "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15" - }, - { - "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", - "kind": "transparent", - "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9" - }, - { - "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", - "kind": "transparent", - "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050" - }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "kind": "transparent", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d" - }, - { - "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", - "kind": "transparent", - "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5" - }, - { - "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", - "kind": "transparent", - "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a" - } - ], - "admin": { - "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", - "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" } } diff --git a/.openzeppelin/unknown-31337.json b/.openzeppelin/unknown-31337.json index d7930be3..c66f0503 100644 --- a/.openzeppelin/unknown-31337.json +++ b/.openzeppelin/unknown-31337.json @@ -1,28 +1,79 @@ { "manifestVersion": "3.2", + "admin": { + "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", + "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + }, + "proxies": [ + { + "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", + "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", + "kind": "transparent" + }, + { + "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", + "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15", + "kind": "transparent" + }, + { + "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", + "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9", + "kind": "transparent" + }, + { + "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", + "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", + "kind": "transparent" + }, + { + "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", + "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", + "kind": "transparent" + }, + { + "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", + "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a", + "kind": "transparent" + }, + { + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "kind": "transparent" + }, + { + "address": "0x002932e11E95DC84C17ed5f94a0439645D8a97BC", + "txHash": "0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e", + "kind": "transparent" + }, + { + "address": "0x8a887282E67ff41d36C0b7537eAB035291461AcD", + "txHash": "0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506", + "kind": "transparent" + } + ], "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", - "txHash": "0x1a4332730b0fb57cf85d9cd1e69c2d90e708c6074786f56cbc05fbeee47e29db", + "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { + "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", + "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -39,7 +90,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -49,68 +100,211 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" }, { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "StakeWiseToken", + "label": "_balances", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/tokens/StakeWiseToken.sol:15" + }, + { + "contract": "StakeWiseToken", + "label": "_totalSupply", + "type": "t_uint256", + "src": "contracts/tokens/StakeWiseToken.sol:17" } ], "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" }, "t_address": { "label": "address" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_struct(Counter)1710_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1710_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, - "t_bool": { - "label": "bool" - }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" + }, + "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)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2026_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1761_storage" + } + ] + }, + "t_struct(Set)1761_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + }, + "t_bool": { + "label": "bool" } } } }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0xf6a519699dd2f66a8Aa1F49B81C73690F104647f", - "txHash": "0xd1a832b29db69905f48a075effac4d274565ff837d4a083712fb3dfa49a704f6", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", + "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -127,7 +321,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -137,54 +331,77 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" + "contract": "VestingEscrowFactory", + "label": "escrowImplementation", + "type": "t_address", + "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" + "t_struct(AddressSet)2026_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1761_storage" + } + ] }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" + "t_struct(Set)1761_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" @@ -198,28 +415,28 @@ } } }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x6A8a1716a44f700af56ea52D44B916A50333A369", - "txHash": "0x5e214beece1c31c69f3b927f96c0547ce744c5c3cc4c1dca171bb26fcd5a839b", + "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { + "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", + "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -236,7 +453,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -273,43 +490,43 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { "contract": "StakedEthToken", @@ -332,8 +549,14 @@ { "contract": "StakedEthToken", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", + "type": "t_contract(IRewardEthToken)7534", "src": "contracts/tokens/StakedEthToken.sol:29" + }, + { + "contract": "StakedEthToken", + "label": "distributorPrincipal", + "type": "t_uint256", + "src": "contracts/tokens/StakedEthToken.sol:32" } ], "types": { @@ -346,12 +569,21 @@ "t_address": { "label": "address" }, - "t_contract(IRewardEthToken)5069": { + "t_contract(IRewardEthToken)7534": { "label": "contract IRewardEthToken" }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { + "t_mapping(t_address,t_struct(Counter)1781_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, "t_bytes32": { "label": "bytes32" }, @@ -367,14 +599,55 @@ "t_string_storage": { "label": "string" }, - "t_uint8": { - "label": "uint8" + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, "t_bool": { "label": "bool" @@ -382,28 +655,28 @@ } } }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x46B7232bc7392b157371eBFcD4618Ca9CEedb1bd", - "txHash": "0xdc0f09fd8ffd9aeba4dcccf0994a2d26c61a7d418bf7d01fdaaa7bdc70a7a2c9", + "2b3ac17098d6878bec278c97e21f6f23d52c9485431ab442e877cb3c632f159c": { + "address": "0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09", + "txHash": "0xecadc60b31ea4f09978df5bc5f34cc5138e1346f2ad7993c60a81a476a0d6e55", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -420,7 +693,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -457,176 +730,398 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { "contract": "RewardEthToken", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/tokens/RewardEthToken.sol:25" }, { "contract": "RewardEthToken", "label": "oracles", "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" + "src": "contracts/tokens/RewardEthToken.sol:28" }, { "contract": "RewardEthToken", "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" + "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" }, { "contract": "RewardEthToken", - "label": "maintainer", + "label": "protocolFeeRecipient", "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" + "src": "contracts/tokens/RewardEthToken.sol:34" }, { "contract": "RewardEthToken", - "label": "maintainerFee", + "label": "protocolFee", "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" + "src": "contracts/tokens/RewardEthToken.sol:37" }, { "contract": "RewardEthToken", "label": "totalRewards", "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" + "src": "contracts/tokens/RewardEthToken.sol:40" }, { "contract": "RewardEthToken", "label": "rewardPerToken", "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" + "src": "contracts/tokens/RewardEthToken.sol:43" }, { "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", + "label": "lastUpdateBlockNumber", "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { - "t_contract(IStakedEthToken)5227": { + "t_contract(IStakedEthToken)7131": { "label": "contract IStakedEthToken" }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { + "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { "label": "mapping(address => struct IRewardEthToken.Checkpoint)" }, - "t_uint256": { - "label": "uint256" + "t_struct(Checkpoint)6889_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] }, "t_uint128": { "label": "uint128" }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, - "t_bytes32": { - "label": "bytes32" + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "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)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.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)" + } + } + } + }, + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] }, - "t_string_storage": { - "label": "string" + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] }, - "t_uint8": { - "label": "uint8" + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0xfdec24BB3055BE9578300f1541d5e0Ee4eDa6261", - "txHash": "0x4b2bce9a29734672917727e27a47d4a44b20953b04be7f4215fae4d77058fdec", + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -643,7 +1138,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -651,65 +1146,58 @@ "label": "__gap", "type": "t_array(t_uint256)49_storage", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_bytes32": { + "label": "bytes32" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.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_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "t_uint256": { + "label": "uint256" }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" @@ -723,9 +1211,9 @@ } } }, - "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { - "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", - "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", + "064504ebb100ee7d08a436e72c0bda2e728c75475bc94a7e2abd77a2848a7380": { + "address": "0xe68E649862F7036094f1E4eD5d69a738aCDE666f", + "txHash": "0x453dbec9becf6c8d132ba589c2653d33d48950a04353bd9f48070ebc5cd19b4f", "layout": { "storage": [ { @@ -774,61 +1262,61 @@ "contract": "Pool", "label": "activatedValidators", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" + "src": "contracts/pool/Pool.sol:26" }, { "contract": "Pool", "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" + "src": "contracts/pool/Pool.sol:29" }, { "contract": "Pool", "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5197", - "src": "contracts/collectors/Pool.sol:31" + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { "contract": "Pool", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5841", - "src": "contracts/collectors/Pool.sol:34" + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { "contract": "Pool", "label": "validators", - "type": "t_contract(IValidators)5889", - "src": "contracts/collectors/Pool.sol:37" + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { "contract": "Pool", "label": "oracles", "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" + "src": "contracts/pool/Pool.sol:41" }, { "contract": "Pool", "label": "activations", "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" + "src": "contracts/pool/Pool.sol:44" }, { "contract": "Pool", "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" + "src": "contracts/pool/Pool.sol:47" }, { "contract": "Pool", "label": "minActivatingDeposit", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" + "src": "contracts/pool/Pool.sol:50" }, { "contract": "Pool", "label": "pendingValidatorsLimit", "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" + "src": "contracts/pool/Pool.sol:53" } ], "types": { @@ -838,14 +1326,14 @@ "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5197": { + "t_contract(IDepositContract)5811": { "label": "contract IDepositContract" }, - "t_contract(IStakedEthToken)5841": { + "t_contract(IStakedEthToken)6891": { "label": "contract IStakedEthToken" }, - "t_contract(IValidators)5889": { - "label": "contract IValidators" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, "t_address": { "label": "address" @@ -864,7 +1352,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)1421_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -872,16 +1360,16 @@ } ] }, - "t_struct(AddressSet)1421_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1156_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1156_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -912,9 +1400,9 @@ } } }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x749dCCE12E8337dfb44635082519E656d44A2672", - "txHash": "0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0xfa00515082fe90430C80DA9B299f353929653d7B", + "txHash": "0x65770cb60072af3601d69bac17b6c1143e98524a6fae4989c203f0b5cb409b51", "layout": { "storage": [ { @@ -929,18 +1417,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -972,85 +1448,80 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" }, { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" }, { - "contract": "Oracles", - "label": "submittedVotes", + "contract": "PoolValidators", + "label": "isValidatorRegistered", "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" + "src": "contracts/pool/PoolValidators.sol:24" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5683", - "src": "contracts/Oracles.sol:38" + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6548_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/pool/PoolValidators.sol:30" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5564", - "src": "contracts/Oracles.sol:44" + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, "t_bool": { "label": "bool" }, - "t_contract(IRewardEthToken)5683": { - "label": "contract IRewardEthToken" + "t_mapping(t_address,t_struct(Operator)6548_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", + "t_address": { + "label": "address" + }, + "t_struct(Operator)6548_storage": { + "label": "struct IPoolValidators.Operator", "members": [ { - "label": "_value", - "type": "t_uint256" + "label": "depositDataMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "committed", + "type": "t_bool" } ] }, - "t_contract(IPool)5564": { + "t_contract(IPool)6482": { "label": "contract IPool" }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, @@ -1059,7 +1530,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)1421_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1067,16 +1538,16 @@ } ] }, - "t_struct(AddressSet)1421_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1156_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1156_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1092,8 +1563,8 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" @@ -1101,9 +1572,9 @@ } } }, - "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { - "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", - "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE", + "txHash": "0x647d2cf174087c56fb6e6ffd75054f3a5ea1ed8572e280f27bdf13b7da691202", "layout": { "storage": [ { @@ -1149,98 +1620,44 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)6794", + "src": "contracts/Oracles.sol:37" }, { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/Oracles.sol:40" }, { - "contract": "StakeWiseToken", - "label": "_balances", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakeWiseToken.sol:15" + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/Oracles.sol:43" }, { - "contract": "StakeWiseToken", - "label": "_totalSupply", - "type": "t_uint256", - "src": "contracts/tokens/StakeWiseToken.sol:17" + "contract": "Oracles", + "label": "merkleDistributor", + "type": "t_contract(IMerkleDistributor)5968", + "src": "contracts/Oracles.sol:46" } ], "types": { - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Counter)1710_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1710_storage": { + "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ { @@ -1249,36 +1666,33 @@ } ] }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_contract(IRewardEthToken)6794": { + "label": "contract IRewardEthToken" }, - "t_string_storage": { - "label": "string" + "t_contract(IPool)6482": { + "label": "contract IPool" }, - "t_uint8": { - "label": "uint8" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_contract(IMerkleDistributor)5968": { + "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1286,16 +1700,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1314,15 +1728,21 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0x27356a244cD2a8bBd0A1f4E96E8FCd70bF926Bc3", - "txHash": "0x13ee96fe09831c3409799fa008729cb73efd98f65e43c5115841d42f9cbcaa16", + "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { + "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", + "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", "layout": { "storage": [ { @@ -1337,18 +1757,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1380,40 +1788,64 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" + "src": "contracts/merkles/MerkleDistributor.sol:27" }, { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)7086", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { + "t_bytes32": { + "label": "bytes32" + }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" + "t_contract(IOracles)7086": { + "label": "contract IOracles" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bytes32": { - "label": "bytes32" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1421,16 +1853,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1449,9 +1881,6 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -1464,9 +1893,9 @@ } } }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", - "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", + "d8130dc915911607e60a0d8df67e30e904fd2c72948a8e9cca6ca3460d3a8df2": { + "address": "0x3Cf7850F3C68624aAD34c17562669c0694E3ce7f", + "txHash": "0xd29453703e51ddaf141fe35f52696ca98223e0ff7592a139c2782f28d038a58a", "layout": { "storage": [ { @@ -1481,18 +1910,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -1524,40 +1941,64 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" + "src": "contracts/merkles/MerkleDistributor.sol:27" }, { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { + "t_bytes32": { + "label": "bytes32" + }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" + "t_contract(IOracles)6192": { + "label": "contract IOracles" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bytes32": { - "label": "bytes32" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2026_storage" + "type": "t_struct(AddressSet)2097_storage" }, { "label": "adminRole", @@ -1565,16 +2006,16 @@ } ] }, - "t_struct(AddressSet)2026_storage": { + "t_struct(AddressSet)2097_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1761_storage" + "type": "t_struct(Set)1832_storage" } ] }, - "t_struct(Set)1761_storage": { + "t_struct(Set)1832_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -1593,9 +2034,6 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -1608,9 +2046,9 @@ } } }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", - "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", + "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { + "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", + "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", "layout": { "storage": [ { @@ -1656,51 +2094,87 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:25" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "src": "contracts/collectors/Pool.sol:28" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5197", + "src": "contracts/collectors/Pool.sol:31" }, { - "contract": "MerkleDistributor", + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)5841", + "src": "contracts/collectors/Pool.sol:34" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IValidators)5889", + "src": "contracts/collectors/Pool.sol:37" + }, + { + "contract": "Pool", "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "type": "t_address", + "src": "contracts/collectors/Pool.sol:40" }, { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/collectors/Pool.sol:43" + }, + { + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "src": "contracts/collectors/Pool.sol:46" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:49" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:52" } ], "types": { + "t_uint256": { + "label": "uint256" + }, "t_bytes32": { "label": "bytes32" }, - "t_address": { - "label": "address" + "t_contract(IDepositContract)5197": { + "label": "contract IDepositContract" }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" + "t_contract(IStakedEthToken)5841": { + "label": "contract IStakedEthToken" }, - "t_uint256": { - "label": "uint256" + "t_contract(IValidators)5889": { + "label": "contract IValidators" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, "t_mapping(t_uint256,t_uint256)": { "label": "mapping(uint256 => uint256)" @@ -1713,7 +2187,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)1421_storage" }, { "label": "adminRole", @@ -1721,16 +2195,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)1421_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1156_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1156_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2053,9 +2527,9 @@ } } }, - "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { - "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", - "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", + "1cbcdcdafb11126baead1ddf322344e63f3218adbddb2149a3ba6d13e257d018": { + "address": "0x8C3FC957cb0A339acbE442bD0792590737240BF7", + "txHash": "0x6f5e0a0d0b028502a8d3e5fa61311363677502bdafcd7450e7fd7d66c14c1520", "layout": { "storage": [ { @@ -2101,147 +2575,90 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" }, { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" }, { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" }, { - "contract": "StakedEthToken", - "label": "totalDeposits", + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" - }, - { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" + "src": "contracts/pool/Pool.sol:47" }, { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/tokens/StakedEthToken.sol:29" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" }, { - "contract": "StakedEthToken", - "label": "distributorPrincipal", + "contract": "Pool", + "label": "pendingValidatorsLimit", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:32" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] + "src": "contracts/pool/Pool.sol:53" + } + ], + "types": { + "t_uint256": { + "label": "uint256" }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_string_storage": { - "label": "string" + "t_address": { + "label": "address" }, - "t_uint8": { - "label": "uint8" + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2287,15 +2704,21 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, "t_bool": { "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0xd3ea5BF3bB42542B5b64358C12F06233704e9b99", - "txHash": "0xb19a687a2a602619e0424904de456cde8ea3f58286164ffd37db5e5cc7193e33", + "8403e73b5622e4987eb42a678b18c511ccbc91a96452889eff19be7f48562955": { + "address": "0x33582de22176cB084aFBFb818B490adb327BC5bb", + "txHash": "0xe641e2ef15aa49caabf74883627c7a97d910197cb9d48a9a2165a337e4af2e2f", "layout": { "storage": [ { @@ -2310,18 +2733,6 @@ "type": "t_bool", "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, { "contract": "ContextUpgradeable", "label": "__gap", @@ -2353,78 +2764,169 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:27" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" }, { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" }, { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { - "contract": "Oracles", + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { - "t_uint256": { - "label": "uint256" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" + "t_address": { + "label": "address" }, - "t_bytes32": { - "label": "bytes32" + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" }, - "t_array(t_address)dyn_storage": { - "label": "address[]" + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] }, - "t_address": { - "label": "address" + "t_uint128": { + "label": "uint128" }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" }, "t_bool": { "label": "bool" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" }, "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", @@ -2435,11 +2937,29 @@ } ] }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_bytes32": { + "label": "bytes32" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "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)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2482,60 +3002,11 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" } } } } - }, - "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "kind": "transparent", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289" - }, - { - "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", - "kind": "transparent", - "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e" - }, - { - "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", - "kind": "transparent", - "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15" - }, - { - "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", - "kind": "transparent", - "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9" - }, - { - "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", - "kind": "transparent", - "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050" - }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "kind": "transparent", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d" - }, - { - "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", - "kind": "transparent", - "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5" - }, - { - "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", - "kind": "transparent", - "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a" - } - ], - "admin": { - "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", - "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" } } diff --git a/README.md b/README.md index a3c10d85..62a74b41 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,19 @@ # StakeWise smart contracts [![CircleCI](https://circleci.com/gh/stakewise/contracts.svg?style=svg)](https://circleci.com/gh/stakewise/contracts) -[![CodeCov](https://codecov.io/gh/stakewise/contracts/branch/master/graph/badge.svg)](https://codecov.io/gh/stakewise/contracts) [![Discord](https://user-images.githubusercontent.com/7288322/34471967-1df7808a-efbb-11e7-9088-ed0b04151291.png)](https://discord.gg/2BSdr2g) -The StakeWise smart contracts for tokenized staking and non-custodial validators. +The StakeWise smart contracts for liquid non-custodial ETH2 staking. -- **Extensible:** It is possible to create your own contract with logic for accumulating validator deposit amount. -- **Upgradable:** By using [OpenZeppelin Upgrades](https://github.com/OpenZeppelin/openzeppelin-upgrades), it's possible to fix bugs and critical issues when the contracts are deployed to the mainnet. - Only the [Solos](./contracts/collectors/Solos.sol) contract cannot be upgraded to prevent the possibility of changing staker's withdrawal credentials. -- **Role-based access:** By having [Operators](./contracts/Validators.sol), [Admins](./contracts/presets/OwnablePausableUpgradeable.sol), [Pausers](./contracts/presets/OwnablePausableUpgradeable.sol) - and [Oracles](contracts/Oracles.sol) roles, it is possible to restrict user capabilities. -- **Integration friendly:** Any contract state emits event. Applications can monitor and act on these events. +## Documentation + +You can find the documentation for every contract in the `contracts` directory. For integration, check the `contracts/interfaces` directory. +The documentation is also available on the [official documentation page](https://docs.stakewise.io/smart-contracts). ## Deployment +**NB!** You would have to define the `initialize` function for the contracts that don't have it when deploying for the first time. + 1. Install dependencies: ```shell script @@ -27,33 +26,16 @@ The StakeWise smart contracts for tokenized staking and non-custodial validators yarn compile --optimizer ``` -3. Define network parameters in `hardhat.config.js`. Learn more at [Hardhat config options](https://hardhat.org/config/). - -4. Change [initial settings](./deployments/settings.js) accordingly. - -5. If you are deploying to the network without [ETH2 deposit contract](https://github.com/ethereum/eth2.0-specs/tree/dev/solidity_deposit_contract), run the following commands: - - ```shell script - yarn deployVRC --network rinkeby - ``` - -6. If you are deploying to the network without `DAI contract`, run the following commands: +3. Update network parameters in `hardhat.config.js`. Learn more at [Hardhat config options](https://hardhat.org/config/). - ```shell script - yarn deployDAI --network rinkeby - ``` +4. Change [settings](./deployments/settings.js) if needed. -7. Deploy StakeWise contracts to the selected network: +5. Deploy StakeWise contracts to the selected network: ```shell script - yarn deploy --network rinkeby + yarn deploy-contracts --network rinkeby ``` -## Documentation - -You can find the documentation for every contract in the `contracts` directory. -The documentation is also available on the [official documentation page](https://docs.stakewise.io/smart-contracts). - ## Contributing Development of the project happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements. diff --git a/abi/ContractChecker.json b/abi/ContractChecker.json new file mode 100644 index 00000000..0a6b89b6 --- /dev/null +++ b/abi/ContractChecker.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isContract", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/MerkleDistributor.json b/abi/MerkleDistributor.json index 48cdae56..b615e97b 100644 --- a/abi/MerkleDistributor.json +++ b/abi/MerkleDistributor.json @@ -39,76 +39,113 @@ "name": "sender", "type": "address" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "merkleProofs", + "type": "string" + } + ], + "name": "MerkleRootUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, "internalType": "address", - "name": "token", + "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", - "name": "beneficiary", + "name": "origin", "type": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "startBlock", + "name": "amount", "type": "uint256" }, { "indexed": false, - "internalType": "uint256", - "name": "endBlock", - "type": "uint256" + "internalType": "string", + "name": "rewardsLink", + "type": "string" } ], - "name": "DistributionAdded", + "name": "OneTimeDistributionAdded", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, + "indexed": false, "internalType": "address", - "name": "sender", + "name": "account", "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "merkleProofs", - "type": "string" } ], - "name": "MerkleRootUpdated", + "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" } ], - "name": "Paused", + "name": "PeriodicDistributionAdded", "type": "event" }, { @@ -310,6 +347,44 @@ }, { "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "rewardsLink", + "type": "string" + } + ], + "name": "distributeOneTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, { "internalType": "address", "name": "token", @@ -331,7 +406,7 @@ "type": "uint256" } ], - "name": "distribute", + "name": "distributePeriodically", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -440,29 +515,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_rewardEthToken", - "type": "address" - }, - { - "internalType": "address", - "name": "_oracles", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -678,5 +730,18 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oracles", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] diff --git a/abi/Oracles.json b/abi/Oracles.json index c7c3c3c8..e8f10197 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -2,6 +2,25 @@ { "anonymous": false, "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "rewardsNonce", + "type": "uint256" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", @@ -30,6 +49,32 @@ "name": "MerkleRootVoteSubmitted", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleRemoved", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -46,6 +91,49 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "RegisterValidatorVoteSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", @@ -149,25 +237,6 @@ "name": "RoleRevoked", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "syncPeriod", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SyncPeriodUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -237,7 +306,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], @@ -260,14 +329,8 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "candidates", + "inputs": [], + "name": "currentRewardsNonce", "outputs": [ { "internalType": "uint256", @@ -280,7 +343,7 @@ }, { "inputs": [], - "name": "currentNonce", + "name": "currentValidatorsNonce", "outputs": [ { "internalType": "uint256", @@ -399,24 +462,38 @@ "inputs": [ { "internalType": "address", - "name": "oracle", + "name": "admin", "type": "address" }, { - "internalType": "bytes32", - "name": "candidateId", - "type": "bytes32" - } - ], - "name": "hasVote", - "outputs": [ + "internalType": "address", + "name": "oraclesV1", + "type": "address" + }, { - "internalType": "bool", - "name": "", - "type": "bool" + "internalType": "address", + "name": "_rewardEthToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_pool", + "type": "address" + }, + { + "internalType": "address", + "name": "_poolValidators", + "type": "address" + }, + { + "internalType": "address", + "name": "_merkleDistributor", + "type": "address" } ], - "stateMutability": "view", + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -455,7 +532,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], @@ -489,19 +566,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "isRewardsVoting", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "pause", @@ -522,6 +586,61 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "validatorsDepositRoot", + "type": "bytes32" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "name": "registerValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -539,7 +658,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], @@ -599,74 +718,23 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "_syncPeriod", - "type": "uint256" - } - ], - "name": "setSyncPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "syncPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_merkleDistributor", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_syncPeriod", - "type": "uint256" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, { "internalType": "bytes32", - "name": "_merkleRoot", + "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string", - "name": "_merkleProofs", + "name": "merkleProofs", "type": "string" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "name": "voteForMerkleRoot", + "name": "submitMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -675,21 +743,28 @@ "inputs": [ { "internalType": "uint256", - "name": "_nonce", + "name": "totalRewards", "type": "uint256" }, { "internalType": "uint256", - "name": "_totalRewards", + "name": "activatedValidators", "type": "uint256" }, { - "internalType": "uint256", - "name": "_activatedValidators", - "type": "uint256" + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "name": "voteForRewards", + "name": "submitRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/abi/Pool.json b/abi/Pool.json index 8da8c22c..9f11165d 100644 --- a/abi/Pool.json +++ b/abi/Pool.json @@ -125,6 +125,25 @@ "name": "PendingValidatorsLimitUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -204,32 +223,51 @@ "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "partner", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" } ], - "name": "Unpaused", + "name": "StakedWithPartner", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakedWithReferrer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": false, "internalType": "address", - "name": "operator", + "name": "account", "type": "address" } ], - "name": "ValidatorRegistered", + "name": "Unpaused", "type": "event" }, { @@ -237,12 +275,18 @@ "inputs": [ { "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "operator", + "type": "address" } ], - "name": "WithdrawalCredentialsUpdated", + "name": "ValidatorRegistered", "type": "event" }, { @@ -273,7 +317,7 @@ }, { "inputs": [], - "name": "VALIDATOR_DEPOSIT", + "name": "VALIDATOR_TOTAL_DEPOSIT", "outputs": [ { "internalType": "uint256", @@ -288,12 +332,12 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" }, { "internalType": "uint256", - "name": "_validatorIndex", + "name": "validatorIndex", "type": "uint256" } ], @@ -306,12 +350,12 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" }, { "internalType": "uint256[]", - "name": "_validatorIndexes", + "name": "validatorIndexes", "type": "uint256[]" } ], @@ -370,13 +414,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, { "inputs": [ { @@ -394,7 +431,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_validatorIndex", + "name": "validatorIndex", "type": "uint256" } ], @@ -610,10 +647,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "refund", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, { "internalType": "bytes", "name": "publicKey", @@ -623,15 +682,10 @@ "internalType": "bytes", "name": "signature", "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" } ], - "internalType": "struct IPool.Validator", - "name": "_validator", + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", "type": "tuple" } ], @@ -719,7 +773,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_minActivatingDeposit", + "name": "newMinActivatingDeposit", "type": "uint256" } ], @@ -732,7 +786,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_pendingValidatorsLimit", + "name": "newPendingValidatorsLimit", "type": "uint256" } ], @@ -741,52 +795,106 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "stake", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" + "internalType": "address", + "name": "recipient", + "type": "address" } ], - "name": "setWithdrawalCredentials", + "name": "stakeOnBehalf", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { - "inputs": [], - "name": "unpause", + "inputs": [ + { + "internalType": "address", + "name": "partner", + "type": "address" + } + ], + "name": "stakeWithPartner", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "_oracles", + "name": "partner", "type": "address" }, { - "internalType": "uint256", - "name": "_activatedValidators", - "type": "uint256" - }, + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "stakeWithPartnerOnBehalf", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ { - "internalType": "uint256", - "name": "_pendingValidators", - "type": "uint256" + "internalType": "address", + "name": "referrer", + "type": "address" + } + ], + "name": "stakeWithReferrer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "referrer", + "type": "address" }, { - "internalType": "uint256", - "name": "_minActivatingDeposit", - "type": "uint256" + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "stakeWithReferrerOnBehalf", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_poolValidators", + "type": "address" }, { - "internalType": "uint256", - "name": "_pendingValidatorsLimit", - "type": "uint256" + "internalType": "address", + "name": "_oracles", + "type": "address" } ], "name": "upgrade", @@ -819,5 +927,9 @@ ], "stateMutability": "view", "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } ] diff --git a/abi/Solos.json b/abi/PoolValidators.json similarity index 72% rename from abi/Solos.json rename to abi/PoolValidators.json index 83373346..92d3b9f7 100644 --- a/abi/Solos.json +++ b/abi/PoolValidators.json @@ -1,88 +1,45 @@ [ { + "anonymous": false, "inputs": [ { + "indexed": true, "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_validatorRegistration", - "type": "address" - }, - { - "internalType": "address", - "name": "_validators", + "name": "operator", "type": "address" }, { - "internalType": "uint256", - "name": "_validatorPrice", - "type": "uint256" + "indexed": true, + "internalType": "bytes32", + "name": "depositDataMerkleRoot", + "type": "bytes32" }, - { - "internalType": "uint256", - "name": "_cancelLockDuration", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "cancelLockDuration", - "type": "uint256" + "internalType": "string", + "name": "depositDataMerkleProofs", + "type": "string" } ], - "name": "CancelLockDurationUpdated", + "name": "OperatorAdded", "type": "event" }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, { "indexed": true, "internalType": "address", - "name": "sender", + "name": "operator", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" } ], - "name": "DepositAdded", + "name": "OperatorCommitted", "type": "event" }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, { "indexed": true, "internalType": "address", @@ -90,19 +47,13 @@ "type": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" } ], - "name": "DepositCanceled", + "name": "OperatorRemoved", "type": "event" }, { @@ -206,50 +157,6 @@ "name": "Unpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "validatorPrice", - "type": "uint256" - } - ], - "name": "ValidatorPriceUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "price", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ValidatorRegistered", - "type": "event" - }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", @@ -276,19 +183,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "VALIDATOR_DEPOSIT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -304,15 +198,25 @@ }, { "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, { "internalType": "bytes32", - "name": "_withdrawalCredentials", + "name": "depositDataMerkleRoot", "type": "bytes32" + }, + { + "internalType": "string", + "name": "depositDataMerkleProofs", + "type": "string" } ], - "name": "addDeposit", + "name": "addOperator", "outputs": [], - "stateMutability": "payable", + "stateMutability": "nonpayable", "type": "function" }, { @@ -329,31 +233,31 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "cancelDeposit", + "inputs": [], + "name": "commitOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [], - "name": "cancelLockDuration", + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "getOperator", "outputs": [ { - "internalType": "uint256", + "internalType": "bytes32", "name": "", - "type": "uint256" + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" } ], "stateMutability": "view", @@ -463,6 +367,29 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "address", + "name": "_pool", + "type": "address" + }, + { + "internalType": "address", + "name": "_oracles", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -501,6 +428,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "isValidatorRegistered", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "pause", @@ -526,14 +472,14 @@ { "components": [ { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" + "internalType": "address", + "name": "operator", + "type": "address" }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" }, { "internalType": "bytes32", @@ -541,14 +487,24 @@ "type": "bytes32" }, { - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" } ], - "internalType": "struct ISolos.Validator", - "name": "_validator", + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" } ], "name": "registerValidator", @@ -573,29 +529,24 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "_operator", "type": "address" } ], - "name": "removePauser", + "name": "removeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, { "internalType": "address", - "name": "account", + "name": "_account", "type": "address" } ], - "name": "renounceRole", + "name": "removePauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -613,33 +564,7 @@ "type": "address" } ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_cancelLockDuration", - "type": "uint256" - } - ], - "name": "setCancelLockDuration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_validatorPrice", - "type": "uint256" - } - ], - "name": "setValidatorPrice", + "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -648,29 +573,18 @@ "inputs": [ { "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "solos", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", + "name": "role", "type": "bytes32" }, { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "stateMutability": "view", + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -679,31 +593,5 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" - }, - { - "inputs": [], - "name": "validatorPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "validatorRegistration", - "outputs": [ - { - "internalType": "contract IDepositContract", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" } ] diff --git a/abi/RewardEthToken.json b/abi/RewardEthToken.json index 36d7bca1..f1ff2b22 100644 --- a/abi/RewardEthToken.json +++ b/abi/RewardEthToken.json @@ -29,12 +29,12 @@ "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "maintainerFee", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "name": "MaintainerFeeUpdated", + "name": "Paused", "type": "event" }, { @@ -43,11 +43,11 @@ { "indexed": false, "internalType": "address", - "name": "maintainer", + "name": "recipient", "type": "address" } ], - "name": "MaintainerUpdated", + "name": "ProtocolFeeRecipientUpdated", "type": "event" }, { @@ -55,12 +55,12 @@ "inputs": [ { "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "internalType": "uint256", + "name": "protocolFee", + "type": "uint256" } ], - "name": "Paused", + "name": "ProtocolFeeUpdated", "type": "event" }, { @@ -102,6 +102,18 @@ "internalType": "uint256", "name": "rewardPerToken", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "distributorReward", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolReward", + "type": "uint256" } ], "name": "RewardsUpdated", @@ -610,32 +622,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "maintainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maintainerFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "merkleDistributor", @@ -744,6 +730,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFeeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -841,12 +853,12 @@ { "inputs": [ { - "internalType": "address", - "name": "_newMaintainer", - "type": "address" + "internalType": "uint256", + "name": "_protocolFee", + "type": "uint256" } ], - "name": "setMaintainer", + "name": "setProtocolFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -854,12 +866,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "_newMaintainerFee", - "type": "uint256" + "internalType": "address", + "name": "recipient", + "type": "address" } ], - "name": "setMaintainerFee", + "name": "setProtocolFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -1046,13 +1058,8 @@ "inputs": [ { "internalType": "address", - "name": "_merkleDistributor", + "name": "_oracles", "type": "address" - }, - { - "internalType": "uint256", - "name": "_lastUpdateBlockNumber", - "type": "uint256" } ], "name": "upgrade", diff --git a/abi/Validators.json b/abi/Roles.json similarity index 83% rename from abi/Validators.json rename to abi/Roles.json index 134fc57b..d33a91c0 100644 --- a/abi/Validators.json +++ b/abi/Roles.json @@ -1,4 +1,68 @@ [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "OperatorRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "revenueShare", + "type": "uint256" + } + ], + "name": "OperatorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "partner", + "type": "address" + } + ], + "name": "PartnerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "partner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "revenueShare", + "type": "uint256" + } + ], + "name": "PartnerUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -115,12 +179,12 @@ }, { "inputs": [], - "name": "OPERATOR_ROLE", + "name": "MAX_PERCENT", "outputs": [ { - "internalType": "bytes32", + "internalType": "uint256", "name": "", - "type": "bytes32" + "type": "uint256" } ], "stateMutability": "view", @@ -152,19 +216,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -286,17 +337,7 @@ "inputs": [ { "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_pool", - "type": "address" - }, - { - "internalType": "address", - "name": "_solos", + "name": "admin", "type": "address" } ], @@ -324,25 +365,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isOperator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -385,31 +407,25 @@ { "inputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "publicKeys", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" + "internalType": "address", + "name": "_account", + "type": "address" } ], - "stateMutability": "view", + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { - "internalType": "bytes32", - "name": "_validatorId", - "type": "bytes32" + "internalType": "address", + "name": "account", + "type": "address" } ], - "name": "register", + "name": "removeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -418,11 +434,11 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], - "name": "removeAdmin", + "name": "removePartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -435,20 +451,25 @@ "type": "address" } ], - "name": "removeOperator", + "name": "removePauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], - "name": "removePauser", + "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -466,7 +487,7 @@ "type": "address" } ], - "name": "renounceRole", + "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -474,17 +495,35 @@ { "inputs": [ { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" + "internalType": "address", + "name": "account", + "type": "address" }, + { + "internalType": "uint256", + "name": "revenueShare", + "type": "uint256" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "address", "name": "account", "type": "address" + }, + { + "internalType": "uint256", + "name": "revenueShare", + "type": "uint256" } ], - "name": "revokeRole", + "name": "setPartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/audits/2021-11-25-Omniscia.pdf b/audits/2021-11-25-Omniscia.pdf new file mode 100644 index 00000000..2e45a88c Binary files /dev/null and b/audits/2021-11-25-Omniscia.pdf differ diff --git a/contracts/ContractChecker.sol b/contracts/ContractChecker.sol new file mode 100644 index 00000000..564d50e0 --- /dev/null +++ b/contracts/ContractChecker.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +import "@openzeppelin/contracts/utils/Address.sol"; + +/** + * @title ContractChecker + * + * @dev ContractChecker can be used to check whether the address is a contract. + */ +contract ContractChecker { + /** + * @dev Returns true if `account` is a contract. + */ + function isContract(address account) external view returns (bool) { + return Address.isContract(account); + } +} diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 1fe5e7e5..dd5542b1 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -1,49 +1,47 @@ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.7.5; +pragma abicoder v2; import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/cryptography/ECDSAUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "./presets/OwnablePausableUpgradeable.sol"; import "./interfaces/IRewardEthToken.sol"; import "./interfaces/IPool.sol"; import "./interfaces/IOracles.sol"; import "./interfaces/IMerkleDistributor.sol"; +import "./interfaces/IPoolValidators.sol"; +import "./interfaces/IOraclesV1.sol"; /** * @title Oracles * - * @dev Oracles contract stores accounts responsible for submitting off-chain data. + * @dev Oracles contract stores accounts responsible for submitting or update values based on the off-chain data. * The threshold of inputs from different oracles is required to submit the data. */ -contract Oracles is IOracles, ReentrancyGuardUpgradeable, OwnablePausableUpgradeable { +contract Oracles is IOracles, OwnablePausableUpgradeable { using SafeMathUpgradeable for uint256; using CountersUpgradeable for CountersUpgradeable.Counter; bytes32 public constant ORACLE_ROLE = keccak256("ORACLE_ROLE"); - // @dev Defines how often oracles submit data (in blocks). - uint256 public override syncPeriod; + // @dev Rewards nonce is used to protect from submitting the same rewards vote several times. + CountersUpgradeable.Counter private rewardsNonce; - // @dev Maps candidate ID to the number of votes it has. - mapping(bytes32 => uint256) public override candidates; - - // @dev [Deprecated] List of supported rETH2 Uniswap pairs. - address[] private rewardEthUniswapPairs; - - // @dev Maps vote ID to whether it was submitted or not. - mapping(bytes32 => bool) private submittedVotes; + // @dev Validators nonce is used to protect from submitting the same validator vote several times. + CountersUpgradeable.Counter private validatorsNonce; // @dev Address of the RewardEthToken contract. IRewardEthToken private rewardEthToken; - // @dev Nonce is used to protect from submitting the same vote several times. - CountersUpgradeable.Counter private nonce; - // @dev Address of the Pool contract. IPool private pool; + // @dev Address of the Pool contract. + IPoolValidators private poolValidators; + // @dev Address of the MerkleDistributor contract. IMerkleDistributor private merkleDistributor; @@ -56,159 +54,226 @@ contract Oracles is IOracles, ReentrancyGuardUpgradeable, OwnablePausableUpgrade } /** - * @dev See {IOracles-upgrade}. + * @dev See {IOracles-initialize}. */ - function upgrade(address _merkleDistributor, uint256 _syncPeriod) external override onlyAdmin whenPaused { - require(address(merkleDistributor) == address(0), "Oracles: already upgraded"); + function initialize( + address admin, + address oraclesV1, + address _rewardEthToken, + address _pool, + address _poolValidators, + address _merkleDistributor + ) + external override initializer + { + require(admin != address(0), "Pool: invalid admin address"); + require(_rewardEthToken != address(0), "Pool: invalid RewardEthToken address"); + require(_pool != address(0), "Pool: invalid Pool address"); + require(_poolValidators != address(0), "Pool: invalid PoolValidators address"); + require(_merkleDistributor != address(0), "Pool: invalid MerkleDistributor address"); + + __OwnablePausableUpgradeable_init(admin); + + // migrate data from previous Oracles contract + rewardsNonce._value = IOraclesV1(oraclesV1).currentNonce().add(1000); + uint256 oraclesCount = AccessControlUpgradeable(oraclesV1).getRoleMemberCount(ORACLE_ROLE); + for (uint256 i = 0; i < oraclesCount; i++) { + address oracle = AccessControlUpgradeable(oraclesV1).getRoleMember(ORACLE_ROLE, i); + _setupRole(ORACLE_ROLE, oracle); + emit OracleAdded(oracle); + } + + rewardEthToken = IRewardEthToken(_rewardEthToken); + pool = IPool(_pool); + poolValidators = IPoolValidators(_poolValidators); merkleDistributor = IMerkleDistributor(_merkleDistributor); - syncPeriod = _syncPeriod; + emit Initialized(rewardsNonce.current()); } /** - * @dev See {IOracles-hasVote}. + * @dev See {IOracles-currentRewardsNonce}. */ - function hasVote(address oracle, bytes32 candidateId) external override view returns (bool) { - return submittedVotes[keccak256(abi.encode(oracle, candidateId))]; + function currentRewardsNonce() external override view returns (uint256) { + return rewardsNonce.current(); } /** - * @dev See {IOracles-currentNonce}. + * @dev See {IOracles-currentValidatorsNonce}. */ - function currentNonce() external override view returns (uint256) { - return nonce.current(); + function currentValidatorsNonce() external override view returns (uint256) { + return validatorsNonce.current(); } /** * @dev See {IOracles-isOracle}. */ - function isOracle(address _account) external override view returns (bool) { - return hasRole(ORACLE_ROLE, _account); + function isOracle(address account) external override view returns (bool) { + return hasRole(ORACLE_ROLE, account); } /** * @dev See {IOracles-addOracle}. */ - function addOracle(address _account) external override { - grantRole(ORACLE_ROLE, _account); + function addOracle(address account) external override { + grantRole(ORACLE_ROLE, account); + emit OracleAdded(account); } /** * @dev See {IOracles-removeOracle}. */ - function removeOracle(address _account) external override { - revokeRole(ORACLE_ROLE, _account); + function removeOracle(address account) external override { + revokeRole(ORACLE_ROLE, account); + emit OracleRemoved(account); } /** - * @dev See {IOracles-setSyncPeriod}. + * @dev See {IOracles-isMerkleRootVoting}. */ - function setSyncPeriod(uint256 _syncPeriod) external override onlyAdmin { - require(!isRewardsVoting(), "Oracles: cannot update during voting"); - syncPeriod = _syncPeriod; - emit SyncPeriodUpdated(_syncPeriod, msg.sender); + function isMerkleRootVoting() public override view returns (bool) { + uint256 lastRewardBlockNumber = rewardEthToken.lastUpdateBlockNumber(); + return merkleDistributor.lastUpdateBlockNumber() < lastRewardBlockNumber && lastRewardBlockNumber != block.number; } /** - * @dev See {IOracles-isRewardsVoting}. - */ - function isRewardsVoting() public override view returns (bool) { - return rewardEthToken.lastUpdateBlockNumber().add(syncPeriod) < block.number; + * @dev Function for checking whether number of signatures is enough to update the value. + * @param signaturesCount - number of signatures. + */ + function isEnoughSignatures(uint256 signaturesCount) internal view returns (bool) { + return signaturesCount.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2); } /** - * @dev See {IOracles-isMerkleRootVoting}. + * @dev See {IOracles-submitRewards}. */ - function isMerkleRootVoting() public override view returns (bool) { - uint256 lastRewardBlockNumber = rewardEthToken.lastUpdateBlockNumber(); - return merkleDistributor.lastUpdateBlockNumber() < lastRewardBlockNumber && lastRewardBlockNumber < block.number; + function submitRewards( + uint256 totalRewards, + uint256 activatedValidators, + bytes[] calldata signatures + ) + external override onlyOracle whenNotPaused + { + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); + + // calculate candidate ID hash + uint256 nonce = rewardsNonce.current(); + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(nonce, activatedValidators, totalRewards)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); + } + signedOracles[i] = signer; + emit RewardsVoteSubmitted(msg.sender, signer, nonce, totalRewards, activatedValidators); + } + + // increment nonce for future signatures + rewardsNonce.increment(); + + // update total rewards + rewardEthToken.updateTotalRewards(totalRewards); + + // update activated validators + if (activatedValidators != pool.activatedValidators()) { + pool.setActivatedValidators(activatedValidators); + } } /** - * @dev See {IOracles-voteForRewards}. + * @dev See {IOracles-submitMerkleRoot}. */ - function voteForRewards( - uint256 _nonce, - uint256 _totalRewards, - uint256 _activatedValidators + function submitMerkleRoot( + bytes32 merkleRoot, + string calldata merkleProofs, + bytes[] calldata signatures ) external override onlyOracle whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); - bytes32 candidateId = keccak256(abi.encode(_nonce, _totalRewards, _activatedValidators)); - bytes32 voteId = keccak256(abi.encode(msg.sender, candidateId)); - require(!submittedVotes[voteId], "Oracles: already voted"); - require(isRewardsVoting(), "Oracles: too early vote"); - - // mark vote as submitted, update candidate votes number - submittedVotes[voteId] = true; - uint256 candidateNewVotes = candidates[candidateId].add(1); - candidates[candidateId] = candidateNewVotes; - emit RewardsVoteSubmitted(msg.sender, _nonce, _totalRewards, _activatedValidators); - - // update only if enough votes accumulated - uint256 oraclesCount = getRoleMemberCount(ORACLE_ROLE); - if (candidateNewVotes.mul(3) > oraclesCount.mul(2)) { - // update total rewards - rewardEthToken.updateTotalRewards(_totalRewards); - - // update activated validators - if (_activatedValidators != pool.activatedValidators()) { - pool.setActivatedValidators(_activatedValidators); + require(isMerkleRootVoting(), "Oracles: too early"); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); + + // calculate candidate ID hash + uint256 nonce = rewardsNonce.current(); + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(nonce, merkleProofs, merkleRoot)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); } + signedOracles[i] = signer; + emit MerkleRootVoteSubmitted(msg.sender, signer, nonce, merkleRoot, merkleProofs); + } - // clean up votes - delete submittedVotes[voteId]; - for (uint256 i = 0; i < oraclesCount; i++) { - address oracle = getRoleMember(ORACLE_ROLE, i); - if (oracle == msg.sender) continue; - delete submittedVotes[keccak256(abi.encode(oracle, candidateId))]; - } + // increment nonce for future signatures + rewardsNonce.increment(); - // clean up candidate - nonce.increment(); - delete candidates[candidateId]; - } + // update merkle root + merkleDistributor.setMerkleRoot(merkleRoot, merkleProofs); } /** - * @dev See {IOracles-voteForMerkleRoot}. + * @dev See {IOracles-registerValidator}. */ - function voteForMerkleRoot( - uint256 _nonce, - bytes32 _merkleRoot, - string calldata _merkleProofs + function registerValidator( + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes32 validatorsDepositRoot, + bytes[] calldata signatures ) external override onlyOracle whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); - bytes32 candidateId = keccak256(abi.encode(_nonce, _merkleRoot, _merkleProofs)); - bytes32 voteId = keccak256(abi.encode(msg.sender, candidateId)); - require(!submittedVotes[voteId], "Oracles: already voted"); - require(isMerkleRootVoting(), "Oracles: too early vote"); - - // mark vote as submitted, update candidate votes number - submittedVotes[voteId] = true; - uint256 candidateNewVotes = candidates[candidateId].add(1); - candidates[candidateId] = candidateNewVotes; - emit MerkleRootVoteSubmitted(msg.sender, _nonce, _merkleRoot, _merkleProofs); - - // update only if enough votes accumulated - uint256 oraclesCount = getRoleMemberCount(ORACLE_ROLE); - if (candidateNewVotes.mul(3) > oraclesCount.mul(2)) { - // update merkle root - merkleDistributor.setMerkleRoot(_merkleRoot, _merkleProofs); - - // clean up votes - delete submittedVotes[voteId]; - for (uint256 i = 0; i < oraclesCount; i++) { - address oracle = getRoleMember(ORACLE_ROLE, i); - if (oracle == msg.sender) continue; - delete submittedVotes[keccak256(abi.encode(oracle, candidateId))]; + require( + pool.validatorRegistration().get_deposit_root() == validatorsDepositRoot, + "Oracles: invalid validators deposit root" + ); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); + + // calculate candidate ID hash + uint256 nonce = validatorsNonce.current(); + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator, validatorsDepositRoot)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); } - - // clean up candidate - nonce.increment(); - delete candidates[candidateId]; + signedOracles[i] = signer; + emit RegisterValidatorVoteSubmitted( + msg.sender, + signer, + depositData.operator, + depositData.publicKey, + nonce + ); } + + // increment nonce for future signatures + validatorsNonce.increment(); + + // register validator + poolValidators.registerValidator(depositData, merkleProof); } } diff --git a/contracts/Roles.sol b/contracts/Roles.sol new file mode 100644 index 00000000..8f1ba20f --- /dev/null +++ b/contracts/Roles.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +import "./presets/OwnablePausableUpgradeable.sol"; +import "./interfaces/IRoles.sol"; + +/** + * @title Roles + * + * @dev Roles contract assigns roles to the accounts for the rewards distribution. + */ +contract Roles is IRoles, OwnablePausableUpgradeable { + uint256 public constant MAX_PERCENT = 1e4; + + /** + * @dev See {IRoles-initialize}. + */ + function initialize(address admin) external override initializer { + __OwnablePausableUpgradeable_init(admin); + } + + /** + * @dev See {IRoles-setOperator}. + */ + function setOperator(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + require(revenueShare <= MAX_PERCENT, "Roles: invalid revenue share"); + emit OperatorUpdated(account, revenueShare); + } + + /** + * @dev See {IRoles-removeOperator}. + */ + function removeOperator(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit OperatorRemoved(account); + } + + /** + * @dev See {IRoles-setPartner}. + */ + function setPartner(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + require(revenueShare <= MAX_PERCENT, "Roles: invalid revenue share"); + emit PartnerUpdated(account, revenueShare); + } + + /** + * @dev See {IRoles-removePartner}. + */ + function removePartner(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit PartnerRemoved(account); + } +} diff --git a/contracts/Validators.sol b/contracts/Validators.sol deleted file mode 100644 index 6a1bbe07..00000000 --- a/contracts/Validators.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -import "./presets/OwnablePausableUpgradeable.sol"; -import "./interfaces/IValidators.sol"; - - -/** - * @title Validators - * - * @dev Validators contract keeps track of all the registered validators. - * Only collectors can register validators. - */ -contract Validators is IValidators, OwnablePausableUpgradeable { - bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); - - // @dev Maps hash of the public key to whether it was already used. - mapping(bytes32 => bool) public override publicKeys; - - // @dev Address of the Pool contract. - address private pool; - - // @dev Address of the Solos contract. - address private solos; - - // @dev Checks whether the caller is the collector contract. - modifier onlyCollector() { - require(msg.sender == solos || msg.sender == pool, "Validators: access denied"); - _; - } - - /** - * @dev See {IValidators-initialize}. - */ - function initialize(address _admin, address _pool, address _solos) external override initializer { - __OwnablePausableUpgradeable_init(_admin); - pool = _pool; - solos = _solos; - } - - /** - * @dev See {IValidators-isOperator}. - */ - function isOperator(address _account) external override view returns (bool) { - return hasRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-addOperator}. - */ - function addOperator(address _account) external override { - grantRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-removeOperator}. - */ - function removeOperator(address _account) external override { - revokeRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-register}. - */ - function register(bytes32 _validatorId) external override onlyCollector whenNotPaused { - require(!publicKeys[_validatorId], "Validators: invalid public key"); - publicKeys[_validatorId] = true; - } -} diff --git a/contracts/collectors/Pool.sol b/contracts/collectors/Pool.sol deleted file mode 100644 index a6e03b32..00000000 --- a/contracts/collectors/Pool.sol +++ /dev/null @@ -1,205 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "../presets/OwnablePausableUpgradeable.sol"; -import "../interfaces/IStakedEthToken.sol"; -import "../interfaces/IDepositContract.sol"; -import "../interfaces/IValidators.sol"; -import "../interfaces/IPool.sol"; - -/** - * @title Pool - * - * @dev Pool contract accumulates deposits from the users, mints tokens and registers validators. - */ -contract Pool is IPool, OwnablePausableUpgradeable { - using SafeMathUpgradeable for uint256; - - // @dev Validator deposit amount. - uint256 public constant VALIDATOR_DEPOSIT = 32 ether; - - // @dev Total activated validators. - uint256 public override activatedValidators; - - // @dev Pool validator withdrawal credentials. - bytes32 public override withdrawalCredentials; - - // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). - IDepositContract public override validatorRegistration; - - // @dev Address of the StakedEthToken contract. - IStakedEthToken private stakedEthToken; - - // @dev Address of the Validators contract. - IValidators private validators; - - // @dev Address of the Oracles contract. - address private oracles; - - // @dev Maps senders to the validator index that it will be activated in. - mapping(address => mapping(uint256 => uint256)) public override activations; - - // @dev Total pending validators. - uint256 public override pendingValidators; - - // @dev Amount of deposited ETH that is not considered for the activation period. - uint256 public override minActivatingDeposit; - - // @dev Pending validators percent limit. If it's not exceeded tokens can be minted immediately. - uint256 public override pendingValidatorsLimit; - - /** - * @dev See {IPool-upgrade}. - * The `initialize` must be called before upgrading in previous implementation contract: - * https://github.com/stakewise/contracts/blob/v1.0.0/contracts/collectors/Pool.sol#L42 - */ - function upgrade( - address _oracles, - uint256 _activatedValidators, - uint256 _pendingValidators, - uint256 _minActivatingDeposit, - uint256 _pendingValidatorsLimit - ) - external override onlyAdmin whenPaused - { - require(oracles == address(0), "Pool: already upgraded"); - oracles = _oracles; - - pendingValidators = _pendingValidators; - activatedValidators = _activatedValidators; - emit ActivatedValidatorsUpdated(_activatedValidators, msg.sender); - - minActivatingDeposit = _minActivatingDeposit; - emit MinActivatingDepositUpdated(_minActivatingDeposit, msg.sender); - - pendingValidatorsLimit = _pendingValidatorsLimit; - emit PendingValidatorsLimitUpdated(_pendingValidatorsLimit, msg.sender); - } - - /** - * @dev See {IPool-setWithdrawalCredentials}. - */ - function setWithdrawalCredentials(bytes32 _withdrawalCredentials) external override onlyAdmin { - withdrawalCredentials = _withdrawalCredentials; - emit WithdrawalCredentialsUpdated(_withdrawalCredentials); - } - - /** - * @dev See {IPool-setMinActivatingDeposit}. - */ - function setMinActivatingDeposit(uint256 _minActivatingDeposit) external override onlyAdmin { - minActivatingDeposit = _minActivatingDeposit; - emit MinActivatingDepositUpdated(_minActivatingDeposit, msg.sender); - } - - /** - * @dev See {IPool-setPendingValidatorsLimit}. - */ - function setPendingValidatorsLimit(uint256 _pendingValidatorsLimit) external override onlyAdmin { - require(_pendingValidatorsLimit < 10000, "Pool: invalid limit"); - pendingValidatorsLimit = _pendingValidatorsLimit; - emit PendingValidatorsLimitUpdated(_pendingValidatorsLimit, msg.sender); - } - - /** - * @dev See {IPool-setActivatedValidators}. - */ - function setActivatedValidators(uint256 newActivatedValidators) external override { - require(msg.sender == oracles || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Pool: access denied"); - - // subtract activated validators from pending validators - pendingValidators = pendingValidators.sub(newActivatedValidators.sub(activatedValidators)); - activatedValidators = newActivatedValidators; - emit ActivatedValidatorsUpdated(newActivatedValidators, msg.sender); - } - - /** - * @dev See {IPool-addDeposit}. - */ - function addDeposit() external payable override whenNotPaused { - require(msg.value > 0, "Pool: invalid deposit amount"); - - // mint tokens for small deposits immediately - if (msg.value <= minActivatingDeposit) { - stakedEthToken.mint(msg.sender, msg.value); - return; - } - - // mint tokens if current pending validators limit is not exceed - uint256 _pendingValidators = pendingValidators.add((address(this).balance).div(VALIDATOR_DEPOSIT)); - uint256 _activatedValidators = activatedValidators; // gas savings - uint256 validatorIndex = _activatedValidators.add(_pendingValidators); - if (validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4))) { - stakedEthToken.mint(msg.sender, msg.value); - } else { - // lock deposit amount until validator activated - activations[msg.sender][validatorIndex] = activations[msg.sender][validatorIndex].add(msg.value); - emit ActivationScheduled(msg.sender, validatorIndex, msg.value); - } - } - - /** - * @dev See {IPool-canActivate}. - */ - function canActivate(uint256 _validatorIndex) external view override returns (bool) { - return _validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)); - } - - /** - * @dev See {IPool-activate}. - */ - function activate(address _account, uint256 _validatorIndex) external override whenNotPaused { - require(_validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)), "Pool: validator is not active yet"); - - uint256 amount = activations[_account][_validatorIndex]; - require(amount > 0, "Pool: invalid validator index"); - - delete activations[_account][_validatorIndex]; - stakedEthToken.mint(_account, amount); - emit Activated(_account, _validatorIndex, amount, msg.sender); - } - - /** - * @dev See {IPool-activateMultiple}. - */ - function activateMultiple(address _account, uint256[] calldata _validatorIndexes) external override whenNotPaused { - uint256 toMint; - uint256 _activatedValidators = activatedValidators; - for (uint256 i = 0; i < _validatorIndexes.length; i++) { - uint256 validatorIndex = _validatorIndexes[i]; - require(validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4)), "Pool: validator is not active yet"); - - uint256 amount = activations[_account][validatorIndex]; - toMint = toMint.add(amount); - delete activations[_account][validatorIndex]; - - emit Activated(_account, validatorIndex, amount, msg.sender); - } - require(toMint > 0, "Pool: invalid validator index"); - stakedEthToken.mint(_account, toMint); - } - - /** - * @dev See {IPool-registerValidator}. - */ - function registerValidator(Validator calldata _validator) external override whenNotPaused { - require(validators.isOperator(msg.sender), "Pool: access denied"); - - // register validator - validators.register(keccak256(abi.encodePacked(_validator.publicKey))); - emit ValidatorRegistered(_validator.publicKey, msg.sender); - - // update number of pending validators - pendingValidators = pendingValidators.add(1); - - validatorRegistration.deposit{value : VALIDATOR_DEPOSIT}( - _validator.publicKey, - abi.encodePacked(withdrawalCredentials), - _validator.signature, - _validator.depositDataRoot - ); - } -} diff --git a/contracts/collectors/Solos.sol b/contracts/collectors/Solos.sol deleted file mode 100644 index 645a8c26..00000000 --- a/contracts/collectors/Solos.sol +++ /dev/null @@ -1,160 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "@openzeppelin/contracts/math/SafeMath.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; -import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -import "../presets/OwnablePausable.sol"; -import "../interfaces/IDepositContract.sol"; -import "../interfaces/IValidators.sol"; -import "../interfaces/ISolos.sol"; - -/** - * @title Solos - * - * @dev Users can create standalone validators with their own withdrawal key using this contract. - * The validator can be registered as soon as deposit is added. - */ -contract Solos is ISolos, ReentrancyGuard, OwnablePausable { - using Address for address payable; - using SafeMath for uint256; - - // @dev Validator deposit amount. - uint256 public constant VALIDATOR_DEPOSIT = 32 ether; - - // @dev Maps ID of the solo to its information. - mapping(bytes32 => Solo) public override solos; - - // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). - IDepositContract public override validatorRegistration; - - // @dev Solo validator price per month. - uint256 public override validatorPrice; - - // @dev Solo validator deposit cancel lock duration. - uint256 public override cancelLockDuration; - - // @dev Address of the Validators contract. - IValidators private validators; - - /** - * @dev Constructor for initializing the Solos contract. - * @param _admin - address of the contract admin. - * @param _validatorRegistration - address of the VRC (deployed by Ethereum). - * @param _validators - address of the Validators contract. - * @param _validatorPrice - validator price. - * @param _cancelLockDuration - cancel lock duration in seconds. - */ - constructor( - address _admin, - address _validatorRegistration, - address _validators, - uint256 _validatorPrice, - uint256 _cancelLockDuration - ) - OwnablePausable(_admin) - { - validatorRegistration = IDepositContract(_validatorRegistration); - validators = IValidators(_validators); - - // set validator price - validatorPrice = _validatorPrice; - emit ValidatorPriceUpdated(_validatorPrice); - - // set cancel lock duration - cancelLockDuration = _cancelLockDuration; - emit CancelLockDurationUpdated(_cancelLockDuration); - } - - /** - * @dev See {ISolos-addDeposit}. - */ - function addDeposit(bytes32 _withdrawalCredentials) external payable override whenNotPaused { - require(_withdrawalCredentials != "" && _withdrawalCredentials[0] == 0x00, "Solos: invalid credentials"); - require(msg.value > 0 && msg.value.mod(VALIDATOR_DEPOSIT) == 0, "Solos: invalid deposit amount"); - - bytes32 soloId = keccak256(abi.encodePacked(address(this), msg.sender, _withdrawalCredentials)); - Solo storage solo = solos[soloId]; - - // update solo data - solo.amount = solo.amount.add(msg.value); - if (solo.withdrawalCredentials == "") { - solo.withdrawalCredentials = _withdrawalCredentials; - } - // the deposit can be canceled after lock has expired and it was not yet sent for staking - // solhint-disable-next-line not-rely-on-time - solo.releaseTime = block.timestamp.add(cancelLockDuration); - - // emit event - emit DepositAdded(soloId, msg.sender, msg.value, _withdrawalCredentials); - } - - /** - * @dev See {ISolos-cancelDeposit}. - */ - function cancelDeposit(bytes32 _withdrawalCredentials, uint256 _amount) external override nonReentrant { - // update balance - bytes32 soloId = keccak256(abi.encodePacked(address(this), msg.sender, _withdrawalCredentials)); - Solo storage solo = solos[soloId]; - - // solhint-disable-next-line not-rely-on-time - require(block.timestamp >= solo.releaseTime, "Solos: too early cancel"); - - uint256 newAmount = solo.amount.sub(_amount, "Solos: insufficient balance"); - require(newAmount.mod(VALIDATOR_DEPOSIT) == 0, "Solos: invalid cancel amount"); - - // emit event - emit DepositCanceled(soloId, msg.sender, _amount, solo.withdrawalCredentials); - - if (newAmount > 0) { - solo.amount = newAmount; - // solhint-disable-next-line not-rely-on-time - solo.releaseTime = block.timestamp.add(cancelLockDuration); - } else { - delete solos[soloId]; - } - - // transfer canceled amount to the recipient - msg.sender.sendValue(_amount); - } - - /** - * @dev See {ISolos-setValidatorPrice}. - */ - function setValidatorPrice(uint256 _validatorPrice) external override onlyAdmin { - validatorPrice = _validatorPrice; - emit ValidatorPriceUpdated(_validatorPrice); - } - - /** - * @dev See {ISolos-setCancelLockDuration}. - */ - function setCancelLockDuration(uint256 _cancelLockDuration) external override onlyAdmin { - cancelLockDuration = _cancelLockDuration; - emit CancelLockDurationUpdated(_cancelLockDuration); - } - - /** - * @dev See {ISolos-registerValidator}. - */ - function registerValidator(Validator calldata _validator) external override whenNotPaused { - require(validators.isOperator(msg.sender), "Solos: access denied"); - - // update solo balance - Solo storage solo = solos[_validator.soloId]; - solo.amount = solo.amount.sub(VALIDATOR_DEPOSIT, "Solos: insufficient balance"); - - // register validator - validators.register(keccak256(abi.encodePacked(_validator.publicKey))); - emit ValidatorRegistered(_validator.soloId, _validator.publicKey, validatorPrice, msg.sender); - - validatorRegistration.deposit{value : VALIDATOR_DEPOSIT}( - _validator.publicKey, - abi.encodePacked(solo.withdrawalCredentials), - _validator.signature, - _validator.depositDataRoot - ); - } -} diff --git a/contracts/interfaces/IMerkleDistributor.sol b/contracts/interfaces/IMerkleDistributor.sol index f34f02d6..5dae7dc7 100644 --- a/contracts/interfaces/IMerkleDistributor.sol +++ b/contracts/interfaces/IMerkleDistributor.sol @@ -23,16 +23,16 @@ interface IMerkleDistributor { ); /** - * @dev Event for tracking SWISE token distributions. - * @param sender - address of the new transaction sender. + * @dev Event for tracking periodic tokens distributions. + * @param from - address to transfer the tokens from. * @param token - address of the token. - * @param beneficiary - address of the beneficiary, the SWISE allocation is added to. - * @param amount - amount of tokens distributed. + * @param beneficiary - address of the beneficiary, the allocation is added to. + * @param amount - amount of tokens to distribute. * @param startBlock - start block of the tokens distribution. * @param endBlock - end block of the tokens distribution. */ - event DistributionAdded( - address indexed sender, + event PeriodicDistributionAdded( + address indexed from, address indexed token, address indexed beneficiary, uint256 amount, @@ -40,6 +40,22 @@ interface IMerkleDistributor { uint256 endBlock ); + /** + * @dev Event for tracking one time tokens distributions. + * @param from - address to transfer the tokens from. + * @param origin - predefined origin address to label the distribution. + * @param token - address of the token. + * @param amount - amount of tokens to distribute. + * @param rewardsLink - link to the file where rewards are stored. + */ + event OneTimeDistributionAdded( + address indexed from, + address indexed origin, + address indexed token, + uint256 amount, + string rewardsLink + ); + /** * @dev Event for tracking tokens' claims. * @param account - the address of the user that has claimed the tokens. @@ -70,12 +86,11 @@ interface IMerkleDistributor { function lastUpdateBlockNumber() external view returns (uint256); /** - * @dev Constructor for initializing the MerkleDistributor contract. - * @param _admin - address of the contract admin. - * @param _rewardEthToken - address of the RewardEthToken contract. + * @dev Function for upgrading the MerkleDistributor contract. The `initialize` function must be defined + * if deploying contract for the first time that will initialize the state variables above. * @param _oracles - address of the Oracles contract. */ - function initialize(address _admin, address _rewardEthToken, address _oracles) external; + function upgrade(address _oracles) external; /** * @dev Function for checking the claimed bit map. @@ -92,19 +107,37 @@ interface IMerkleDistributor { function setMerkleRoot(bytes32 newMerkleRoot, string calldata merkleProofs) external; /** - * @dev Function for adding tokens distribution. + * @dev Function for distributing tokens periodically for the number of blocks. + * @param from - address of the account to transfer the tokens from. * @param token - address of the token. * @param beneficiary - address of the beneficiary. * @param amount - amount of tokens to distribute. * @param durationInBlocks - duration in blocks when the token distribution should be stopped. */ - function distribute( + function distributePeriodically( + address from, address token, address beneficiary, uint256 amount, uint256 durationInBlocks ) external; + /** + * @dev Function for distributing tokens one time. + * @param from - address of the account to transfer the tokens from. + * @param origin - predefined origin address to label the distribution. + * @param token - address of the token. + * @param amount - amount of tokens to distribute. + * @param rewardsLink - link to the file where rewards for the accounts are stored. + */ + function distributeOneTime( + address from, + address origin, + address token, + uint256 amount, + string calldata rewardsLink + ) external; + /** * @dev Function for checking whether the tokens were already claimed. * @param index - the index of the user that is part of the merkle root. diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 76734bc5..39fdc181 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -2,18 +2,29 @@ pragma solidity 0.7.5; +import "./IPoolValidators.sol"; +pragma abicoder v2; + /** * @dev Interface of the Oracles contract. */ interface IOracles { + /** + * @dev Event for tracking the Oracles contract initialization. + * @param rewardsNonce - rewards nonce the contract was initialized with. + */ + event Initialized(uint256 rewardsNonce); + /** * @dev Event for tracking oracle rewards votes. + * @param sender - address of the transaction sender. * @param oracle - address of the account which submitted vote. * @param nonce - current nonce. * @param totalRewards - submitted value of total rewards. * @param activatedValidators - submitted amount of activated validators. */ event RewardsVoteSubmitted( + address indexed sender, address indexed oracle, uint256 nonce, uint256 totalRewards, @@ -22,12 +33,14 @@ interface IOracles { /** * @dev Event for tracking oracle merkle root votes. + * @param sender - address of the transaction sender. * @param oracle - address of the account which submitted vote. * @param nonce - current nonce. * @param merkleRoot - new merkle root. * @param merkleProofs - link to the merkle proofs. */ event MerkleRootVoteSubmitted( + address indexed sender, address indexed oracle, uint256 nonce, bytes32 indexed merkleRoot, @@ -35,49 +48,56 @@ interface IOracles { ); /** - * @dev Event for tracking changes of oracles' sync periods. - * @param syncPeriod - new sync period in blocks. + * @dev Event for tracking validator registration votes. * @param sender - address of the transaction sender. + * @param oracle - address of the signed oracle. + * @param operator - address of the operator the vote was sent for. + * @param publicKey - public key of the validator the vote was sent for. + * @param nonce - validator registration nonce. */ - event SyncPeriodUpdated(uint256 syncPeriod, address indexed sender); + event RegisterValidatorVoteSubmitted( + address indexed sender, + address indexed oracle, + address indexed operator, + bytes publicKey, + uint256 nonce + ); /** - * @dev Function for retrieving number of votes of the submission candidate. - * @param _candidateId - ID of the candidate to retrieve number of votes for. + * @dev Event for tracking new or updates oracles. + * @param oracle - address of new or updated oracle. */ - function candidates(bytes32 _candidateId) external view returns (uint256); + event OracleAdded(address indexed oracle); /** - * @dev Function for retrieving oracles sync period (in blocks). + * @dev Event for tracking removed oracles. + * @param oracle - address of removed oracle. */ - function syncPeriod() external view returns (uint256); + event OracleRemoved(address indexed oracle); /** - * @dev Function for upgrading the Oracles contract. - * If deploying contract for the first time, the upgrade function should be replaced with `initialize` - * and contain initializations from all the previous versions. + * @dev Constructor for initializing the Oracles contract. + * @param admin - address of the contract admin. + * @param oraclesV1 - address of the Oracles V1 contract. + * @param _rewardEthToken - address of the RewardEthToken contract. + * @param _pool - address of the Pool contract. + * @param _poolValidators - address of the PoolValidators contract. * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param _syncPeriod - number of blocks to wait before the next sync. */ - function upgrade(address _merkleDistributor, uint256 _syncPeriod) external; + function initialize( + address admin, + address oraclesV1, + address _rewardEthToken, + address _pool, + address _poolValidators, + address _merkleDistributor + ) external; /** * @dev Function for checking whether an account has an oracle role. - * @param _account - account to check. - */ - function isOracle(address _account) external view returns (bool); - - /** - * @dev Function for checking whether an oracle has voted. - * @param oracle - oracle address to check. - * @param candidateId - hash of nonce and vote parameters. + * @param account - account to check. */ - function hasVote(address oracle, bytes32 candidateId) external view returns (bool); - - /** - * @dev Function for checking whether the oracles are currently voting for new total rewards. - */ - function isRewardsVoting() external view returns (bool); + function isOracle(address account) external view returns (bool); /** * @dev Function for checking whether the oracles are currently voting for new merkle root. @@ -85,46 +105,67 @@ interface IOracles { function isMerkleRootVoting() external view returns (bool); /** - * @dev Function for retrieving current nonce. + * @dev Function for retrieving current rewards nonce. */ - function currentNonce() external view returns (uint256); + function currentRewardsNonce() external view returns (uint256); /** - * @dev Function for adding an oracle role to the account. - * Can only be called by an account with an admin role. - * @param _account - account to assign an oracle role to. + * @dev Function for retrieving current validators nonce. */ - function addOracle(address _account) external; + function currentValidatorsNonce() external view returns (uint256); /** - * @dev Function for removing an oracle role from the account. + * @dev Function for adding an oracle role to the account. * Can only be called by an account with an admin role. - * @param _account - account to remove an oracle role from. + * @param account - account to assign an oracle role to. */ - function removeOracle(address _account) external; + function addOracle(address account) external; /** - * @dev Function for updating oracles sync period. The number of blocks after they will submit the off-chain data. + * @dev Function for removing an oracle role from the account. * Can only be called by an account with an admin role. - * @param _syncPeriod - new sync period. + * @param account - account to remove an oracle role from. */ - function setSyncPeriod(uint256 _syncPeriod) external; + function removeOracle(address account) external; /** - * @dev Function for submitting oracle vote for total rewards. The last vote required for quorum will update the values. - * Can only be called by an account with an oracle role. - * @param _nonce - current nonce. - * @param _totalRewards - voted total rewards. - * @param _activatedValidators - voted amount of activated validators. + * @dev Function for submitting oracle vote for total rewards. + * The quorum of signatures over the same data is required to submit the new value. + * @param totalRewards - voted total rewards. + * @param activatedValidators - voted amount of activated validators. + * @param signatures - oracles' signatures. */ - function voteForRewards(uint256 _nonce, uint256 _totalRewards, uint256 _activatedValidators) external; + function submitRewards( + uint256 totalRewards, + uint256 activatedValidators, + bytes[] calldata signatures + ) external; /** - * @dev Function for submitting oracle vote for merkle root. The last vote required for quorum will update the values. - * Can only be called by an account with an oracle role. - * @param _nonce - current nonce. - * @param _merkleRoot - hash of the new merkle root. - * @param _merkleProofs - link to the merkle proofs. - */ - function voteForMerkleRoot(uint256 _nonce, bytes32 _merkleRoot, string calldata _merkleProofs) external; + * @dev Function for submitting new merkle root. + * The quorum of signatures over the same data is required to submit the new value. + * @param merkleRoot - hash of the new merkle root. + * @param merkleProofs - link to the merkle proofs. + * @param signatures - oracles' signatures. + */ + function submitMerkleRoot( + bytes32 merkleRoot, + string calldata merkleProofs, + bytes[] calldata signatures + ) external; + + /** + * @dev Function for submitting registration of the new validator. + * The quorum of signatures over the same data is required to register. + * @param depositData - the deposit data for the registration. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the deposit data merkle root. + * @param validatorsDepositRoot - validators deposit root to protect from malicious operators. + * @param signatures - oracles' signatures. + */ + function registerValidator( + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes32 validatorsDepositRoot, + bytes[] calldata signatures + ) external; } diff --git a/contracts/interfaces/IOraclesV1.sol b/contracts/interfaces/IOraclesV1.sol new file mode 100644 index 00000000..00de7469 --- /dev/null +++ b/contracts/interfaces/IOraclesV1.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +pragma abicoder v2; + +/** + * @dev Interface of the Oracles V1 contract. + */ +interface IOraclesV1 { + /** + * @dev Function for retrieving current rewards nonce. + */ + function currentNonce() external view returns (uint256); +} diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 4e1c878e..4dd1d93d 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -4,17 +4,12 @@ pragma solidity 0.7.5; pragma abicoder v2; import "./IDepositContract.sol"; +import "./IPoolValidators.sol"; /** * @dev Interface of the Pool contract. */ interface IPool { - /** - * @dev Event for tracking new pool withdrawal credentials. - * @param withdrawalCredentials - new withdrawal credentials for the pool validators. - */ - event WithdrawalCredentialsUpdated(bytes32 withdrawalCredentials); - /** * @dev Event for tracking registered validators. * @param publicKey - validator public key. @@ -22,6 +17,13 @@ interface IPool { */ event ValidatorRegistered(bytes publicKey, address operator); + /** + * @dev Event for tracking refunds. + * @param sender - address of the refund sender. + * @param amount - refunded amount. + */ + event Refunded(address indexed sender, uint256 amount); + /** * @dev Event for tracking scheduled deposit activation. * @param sender - address of the deposit sender. @@ -62,35 +64,35 @@ interface IPool { event PendingValidatorsLimitUpdated(uint256 pendingValidatorsLimit, address sender); /** - * @dev Structure for passing information about new Validator. - * @param publicKey - BLS public key of the validator, generated by the operator. - * @param signature - BLS signature of the validator, generated by the operator. - * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. + * @dev Event for tracking added deposits with partner. + * @param partner - address of the partner. + * @param amount - the amount added. + */ + event StakedWithPartner(address indexed partner, uint256 amount); + + /** + * @dev Event for tracking added deposits with referrer. + * @param referrer - address of the referrer. + * @param amount - the amount added. */ - struct Validator { - bytes publicKey; - bytes signature; - bytes32 depositDataRoot; - } + event StakedWithReferrer(address indexed referrer, uint256 amount); /** - * @dev Function for upgrading the Pools contract. + * @dev Function for upgrading the Pools contract. The `initialize` function must be defined if deploying contract + * for the first time that will initialize the state variables above. + * @param _poolValidators - address of the PoolValidators contract. * @param _oracles - address of the Oracles contract. - * @param _activatedValidators - initial amount of activated validators. - * @param _pendingValidators - initial amount of pending validators. - * @param _minActivatingDeposit - minimal deposit in Wei to be considered for the activation period. - * @param _pendingValidatorsLimit - pending validators percent limit. If it's not exceeded tokens can be minted immediately. */ - function upgrade( - address _oracles, - uint256 _activatedValidators, - uint256 _pendingValidators, - uint256 _minActivatingDeposit, - uint256 _pendingValidatorsLimit - ) external; + function upgrade(address _poolValidators, address _oracles) external; /** - * @dev Function for getting the total amount of pending validators. + * @dev Function for getting the total validator deposit. + */ + // solhint-disable-next-line func-name-mixedcase + function VALIDATOR_TOTAL_DEPOSIT() external view returns (uint256); + + /** + * @dev Function for retrieving the total amount of pending validators. */ function pendingValidators() external view returns (uint256); @@ -100,7 +102,7 @@ interface IPool { function activatedValidators() external view returns (uint256); /** - * @dev Function for getting the withdrawal credentials used to + * @dev Function for retrieving the withdrawal credentials used to * initiate pool validators withdrawal from the beacon chain. */ function withdrawalCredentials() external view returns (bytes32); @@ -125,33 +127,27 @@ interface IPool { /** * @dev Function for setting minimal deposit amount considered for the activation period. - * @param _minActivatingDeposit - new minimal deposit amount considered for the activation. - */ - function setMinActivatingDeposit(uint256 _minActivatingDeposit) external; - - /** - * @dev Function for changing withdrawal credentials. - * @param _withdrawalCredentials - new withdrawal credentials for the pool validators. + * @param newMinActivatingDeposit - new minimal deposit amount considered for the activation. */ - function setWithdrawalCredentials(bytes32 _withdrawalCredentials) external; + function setMinActivatingDeposit(uint256 newMinActivatingDeposit) external; /** * @dev Function for changing the total amount of activated validators. - * @param _activatedValidators - new total amount of activated validators. + * @param newActivatedValidators - new total amount of activated validators. */ - function setActivatedValidators(uint256 _activatedValidators) external; + function setActivatedValidators(uint256 newActivatedValidators) external; /** * @dev Function for changing pending validators limit. - * @param _pendingValidatorsLimit - new pending validators limit. When it's exceeded, the deposits will be set for the activation. + * @param newPendingValidatorsLimit - new pending validators limit. When it's exceeded, the deposits will be set for the activation. */ - function setPendingValidatorsLimit(uint256 _pendingValidatorsLimit) external; + function setPendingValidatorsLimit(uint256 newPendingValidatorsLimit) external; /** * @dev Function for checking whether validator index can be activated. - * @param _validatorIndex - index of the validator to check. + * @param validatorIndex - index of the validator to check. */ - function canActivate(uint256 _validatorIndex) external view returns (bool); + function canActivate(uint256 validatorIndex) external view returns (bool); /** * @dev Function for retrieving the validator registration contract address. @@ -159,27 +155,67 @@ interface IPool { function validatorRegistration() external view returns (IDepositContract); /** - * @dev Function for adding deposits to the pool. + * @dev Function for staking ether to the pool to the different tokens' recipient. + * @param recipient - address of the tokens recipient. + */ + function stakeOnBehalf(address recipient) external payable; + + /** + * @dev Function for staking ether to the pool. */ - function addDeposit() external payable; + function stake() external payable; + + /** + * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee. + * @param partner - address of partner who will get the revenue share. + */ + function stakeWithPartner(address partner) external payable; + + /** + * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee + * and the different tokens' recipient. + * @param partner - address of partner who will get the revenue share. + * @param recipient - address of the tokens recipient. + */ + function stakeWithPartnerOnBehalf(address partner, address recipient) external payable; + + /** + * @dev Function for staking ether with the referrer who will receive the one time bonus. + * @param referrer - address of referrer who will get its referral bonus. + */ + function stakeWithReferrer(address referrer) external payable; + + /** + * @dev Function for staking ether with the referrer who will receive the one time bonus + * and the different tokens' recipient. + * @param referrer - address of referrer who will get its referral bonus. + * @param recipient - address of the tokens recipient. + */ + function stakeWithReferrerOnBehalf(address referrer, address recipient) external payable; /** * @dev Function for minting account's tokens for the specific validator index. - * @param _account - account address to activate the tokens for. - * @param _validatorIndex - index of the activated validator. + * @param account - account address to activate the tokens for. + * @param validatorIndex - index of the activated validator. */ - function activate(address _account, uint256 _validatorIndex) external; + function activate(address account, uint256 validatorIndex) external; /** * @dev Function for minting account's tokens for the specific validator indexes. - * @param _account - account address to activate the tokens for. - * @param _validatorIndexes - list of activated validator indexes. + * @param account - account address to activate the tokens for. + * @param validatorIndexes - list of activated validator indexes. + */ + function activateMultiple(address account, uint256[] calldata validatorIndexes) external; + + /** + * @dev Function for registering new pool validator registration. + * @param depositData - the deposit data to submit for the validator. */ - function activateMultiple(address _account, uint256[] calldata _validatorIndexes) external; + function registerValidator(IPoolValidators.DepositData calldata depositData) external; /** - * @dev Function for registering new pool validator. - * @param _validator - validator to register. + * @dev Function for refunding to the pool. + * Can only be executed by the account with admin role. */ - function registerValidator(Validator calldata _validator) external; + function refund() external payable; } diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol new file mode 100644 index 00000000..289386d4 --- /dev/null +++ b/contracts/interfaces/IPoolValidators.sol @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +/** + * @dev Interface of the PoolValidators contract. + */ +interface IPoolValidators { + /** + * @dev Structure for storing operator data. + * @param depositDataMerkleRoot - validators deposit data merkle root. + * @param committed - defines whether operator has committed its readiness to host validators. + */ + struct Operator { + bytes32 depositDataMerkleRoot; + bool committed; + } + + /** + * @dev Structure for passing information about the validator deposit data. + * @param operator - address of the operator. + * @param withdrawalCredentials - withdrawal credentials used for generating the deposit data. + * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. + * @param publicKey - BLS public key of the validator, generated by the operator. + * @param signature - BLS signature of the validator, generated by the operator. + */ + struct DepositData { + address operator; + bytes32 withdrawalCredentials; + bytes32 depositDataRoot; + bytes publicKey; + bytes signature; + } + + /** + * @dev Event for tracking new operators. + * @param operator - address of the operator. + * @param depositDataMerkleRoot - validators deposit data merkle root. + * @param depositDataMerkleProofs - validators deposit data merkle proofs. + */ + event OperatorAdded( + address indexed operator, + bytes32 indexed depositDataMerkleRoot, + string depositDataMerkleProofs + ); + + /** + * @dev Event for tracking operator's commitments. + * @param operator - address of the operator that expressed its readiness to host validators. + */ + event OperatorCommitted(address indexed operator); + + /** + * @dev Event for tracking operators' removals. + * @param sender - address of the transaction sender. + * @param operator - address of the operator. + */ + event OperatorRemoved( + address indexed sender, + address indexed operator + ); + + /** + * @dev Constructor for initializing the PoolValidators contract. + * @param _admin - address of the contract admin. + * @param _pool - address of the Pool contract. + * @param _oracles - address of the Oracles contract. + */ + function initialize(address _admin, address _pool, address _oracles) external; + + /** + * @dev Function for retrieving the operator. + * @param _operator - address of the operator to retrieve the data for. + */ + function getOperator(address _operator) external view returns (bytes32, bool); + + /** + * @dev Function for checking whether validator is registered. + * @param validatorId - hash of the validator public key to receive the status for. + */ + function isValidatorRegistered(bytes32 validatorId) external view returns (bool); + + /** + * @dev Function for adding new operator. + * @param _operator - address of the operator to add or update. + * @param depositDataMerkleRoot - validators deposit data merkle root. + * @param depositDataMerkleProofs - validators deposit data merkle proofs. + */ + function addOperator( + address _operator, + bytes32 depositDataMerkleRoot, + string calldata depositDataMerkleProofs + ) external; + + /** + * @dev Function for committing operator. Must be called by the operator address + * specified through the `addOperator` function call. + */ + function commitOperator() external; + + /** + * @dev Function for removing operator. Can be called either by operator or admin. + * @param _operator - address of the operator to remove. + */ + function removeOperator(address _operator) external; + + /** + * @dev Function for registering the validator. + * @param depositData - deposit data of the validator. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the merkle root. + */ + function registerValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; +} diff --git a/contracts/interfaces/IRewardEthToken.sol b/contracts/interfaces/IRewardEthToken.sol index fddf45f7..79919915 100644 --- a/contracts/interfaces/IRewardEthToken.sol +++ b/contracts/interfaces/IRewardEthToken.sol @@ -9,16 +9,26 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; */ interface IRewardEthToken is IERC20Upgradeable { /** - * @dev Event for tracking updated maintainer. - * @param maintainer - address of the new maintainer, where the fee will be paid. + * @dev Structure for storing information about user reward checkpoint. + * @param rewardPerToken - user reward per token. + * @param reward - user reward checkpoint. + */ + struct Checkpoint { + uint128 reward; + uint128 rewardPerToken; + } + + /** + * @dev Event for tracking updated protocol fee recipient. + * @param recipient - address of the new fee recipient. */ - event MaintainerUpdated(address maintainer); + event ProtocolFeeRecipientUpdated(address recipient); /** - * @dev Event for tracking updated maintainer fee. - * @param maintainerFee - new maintainer fee. + * @dev Event for tracking updated protocol fee. + * @param protocolFee - new protocol fee. */ - event MaintainerFeeUpdated(uint256 maintainerFee); + event ProtocolFeeUpdated(uint256 protocolFee); /** * @dev Event for tracking whether rewards distribution through merkle distributor is enabled/disabled. @@ -27,36 +37,28 @@ interface IRewardEthToken is IERC20Upgradeable { */ event RewardsToggled(address indexed account, bool isDisabled); - /** - * @dev Structure for storing information about user reward checkpoint. - * @param rewardPerToken - user reward per token. - * @param reward - user reward checkpoint. - */ - struct Checkpoint { - uint128 reward; - uint128 rewardPerToken; - } - /** * @dev Event for tracking rewards update by oracles. * @param periodRewards - rewards since the last update. * @param totalRewards - total amount of rewards. * @param rewardPerToken - calculated reward per token for account reward calculation. + * @param distributorReward - distributor reward. + * @param protocolReward - protocol reward. */ event RewardsUpdated( uint256 periodRewards, uint256 totalRewards, - uint256 rewardPerToken + uint256 rewardPerToken, + uint256 distributorReward, + uint256 protocolReward ); /** - * @dev Function for upgrading the RewardEthToken contract. - * If deploying contract for the first time, the upgrade function should be replaced with `initialize` and - * contain initializations from the previous versions. - * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param _lastUpdateBlockNumber - block number of the last rewards update. + * @dev Function for upgrading the RewardEthToken contract. The `initialize` function must be defined + * if deploying contract for the first time that will initialize the state variables above. + * @param _oracles - address of the Oracles contract. */ - function upgrade(address _merkleDistributor, uint256 _lastUpdateBlockNumber) external; + function upgrade(address _oracles) external; /** * @dev Function for getting the address of the merkle distributor. @@ -64,26 +66,26 @@ interface IRewardEthToken is IERC20Upgradeable { function merkleDistributor() external view returns (address); /** - * @dev Function for getting the address of the maintainer, where the fee will be paid. + * @dev Function for getting the address of the protocol fee recipient. */ - function maintainer() external view returns (address); + function protocolFeeRecipient() external view returns (address); /** - * @dev Function for changing the maintainer's address. - * @param _newMaintainer - new maintainer's address. + * @dev Function for changing the protocol fee recipient's address. + * @param recipient - new protocol fee recipient's address. */ - function setMaintainer(address _newMaintainer) external; + function setProtocolFeeRecipient(address recipient) external; /** - * @dev Function for getting maintainer fee. The percentage fee users pay from their reward for using the pool service. + * @dev Function for getting protocol fee. The percentage fee users pay from their reward for using the pool service. */ - function maintainerFee() external view returns (uint256); + function protocolFee() external view returns (uint256); /** - * @dev Function for changing the maintainer's fee. - * @param _newMaintainerFee - new maintainer's fee. Must be less than 10000 (100.00%). + * @dev Function for changing the protocol fee. + * @param _protocolFee - new protocol fee. Must be less than 10000 (100.00%). */ - function setMaintainerFee(uint256 _newMaintainerFee) external; + function setProtocolFee(uint256 _protocolFee) external; /** * @dev Function for retrieving the total rewards amount. diff --git a/contracts/interfaces/IRoles.sol b/contracts/interfaces/IRoles.sol new file mode 100644 index 00000000..664ea1f4 --- /dev/null +++ b/contracts/interfaces/IRoles.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +/** + * @dev Interface of the Roles contract. + */ +interface IRoles { + /** + * @dev Event for tracking operators' updates. + * @param operator - address of the operator. + * @param revenueShare - the share of the protocol's revenue to distribute. + */ + event OperatorUpdated(address indexed operator, uint256 revenueShare); + + /** + * @dev Event for tracking operators' removals. + * @param operator - address of the operator. + */ + event OperatorRemoved(address indexed operator); + + /** + * @dev Event for tracking partners' updates. + * @param partner - address of the partner. + * @param revenueShare - the share of the protocol's revenue to distribute. + */ + event PartnerUpdated(address indexed partner, uint256 revenueShare); + + /** + * @dev Event for tracking partners' removals. + * @param partner - address of the partner. + */ + event PartnerRemoved(address indexed partner); + + /** + * @dev Constructor for initializing the Roles contract. + * @param admin - address of the contract admin. + */ + function initialize(address admin) external; + + /** + * @dev Function for updating the operator. Can only be called by account with `admin` privilege. + * @param account - address of the account to update. + * @param revenueShare - the share of the protocol's revenue to distribute to the operator based on its total validators. + */ + function setOperator(address account, uint256 revenueShare) external; + + /** + * @dev Function for removing the operator. Can only be called by account with `admin` privilege. + * @param account - address of the account to remove. + */ + function removeOperator(address account) external; + + /** + * @dev Function for setting the partner. Can only be called by account with `admin` privilege. + * @param account - address of the account to update. + * @param revenueShare - the share of the protocol's revenue to distribute to the partner based on its contributed ETH amount. + */ + function setPartner(address account, uint256 revenueShare) external; + + /** + * @dev Function for removing the partner. Can only be called by account with `admin` privilege. + * @param account - address of the account to remove. + */ + function removePartner(address account) external; +} diff --git a/contracts/interfaces/ISolos.sol b/contracts/interfaces/ISolos.sol deleted file mode 100644 index 323c0d1d..00000000 --- a/contracts/interfaces/ISolos.sol +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "./IDepositContract.sol"; - -/** - * @dev Interface of the Solos contract. - */ -interface ISolos { - /** - * @dev Structure for storing information about the solo deposits. - * @param amount - amount deposited. - * @param withdrawalCredentials - withdrawal credentials of the validators. - * @param releaseTime - the time when the deposit amount can be canceled. - */ - struct Solo { - uint256 amount; - bytes32 withdrawalCredentials; - uint256 releaseTime; - } - - /** - * @dev Structure for passing information about new Validator. - * @param publicKey - BLS public key of the validator, generated by the operator. - * @param signature - BLS signature of the validator, generated by the operator. - * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. - * @param soloId - ID of the solo to register validator for. - */ - struct Validator { - bytes publicKey; - bytes signature; - bytes32 depositDataRoot; - bytes32 soloId; - } - - /** - * @dev Event for tracking added deposits. - * @param soloId - ID of the solo. - * @param sender - address of the deposit sender. - * @param amount - amount added. - * @param withdrawalCredentials - withdrawal credentials submitted by deposit owner. - */ - event DepositAdded( - bytes32 indexed soloId, - address indexed sender, - uint256 amount, - bytes32 withdrawalCredentials - ); - - /** - * @dev Event for tracking canceled deposits. - * @param soloId - ID of the solo. - * @param sender - address of the deposit sender. - * @param amount - amount canceled. - * @param withdrawalCredentials - withdrawal credentials submitted by deposit owner. - */ - event DepositCanceled( - bytes32 indexed soloId, - address indexed sender, - uint256 amount, - bytes32 withdrawalCredentials - ); - - /** - * @dev Event for tracking new cancel lock duration time. - * @param cancelLockDuration - new cancel lock duration for solo deposits. - */ - event CancelLockDurationUpdated(uint256 cancelLockDuration); - - /** - * @dev Event for tracking solo validator price updates. - * @param validatorPrice - new price for the solo validators. - */ - event ValidatorPriceUpdated(uint256 validatorPrice); - - /** - * @dev Event for tracking registered validators. - * @param soloId - ID of the solo where the deposit was accumulated. - * @param publicKey - validator public key. - * @param price - validator monthly price. - * @param operator - address of the validator operator. - */ - event ValidatorRegistered(bytes32 indexed soloId, bytes publicKey, uint256 price, address operator); - - /** - * @dev Function for getting solo's details. - * @param _soloId - ID of the solo to retrieve data for. - */ - function solos(bytes32 _soloId) external view returns ( - uint256 amount, - bytes32 withdrawalCredentials, - uint256 releaseTime - ); - - /** - * @dev Function for retrieving the validator registration contract address. - */ - function validatorRegistration() external view returns (IDepositContract); - - /** - * @dev Function for getting solo validator price per month. - */ - function validatorPrice() external view returns (uint256); - - /** - * @dev Function for updating solo validator price. - * @param _validatorPrice - new validator price. - */ - function setValidatorPrice(uint256 _validatorPrice) external; - - /** - * @dev Function for getting cancel lock duration in seconds. - */ - function cancelLockDuration() external view returns (uint256); - - /** - * @dev Function for updating cancel lock duration in seconds. - * @param newCancelLockDuration - new cancel lock duration in seconds. - */ - function setCancelLockDuration(uint256 newCancelLockDuration) external; - - /** - * @dev Function for adding solo deposits. - * The deposit amount must be divisible by the validator deposit amount. - * @param _withdrawalCredentials - withdrawal credentials for performing validator withdrawal. - */ - function addDeposit(bytes32 _withdrawalCredentials) external payable; - - /** - * @dev Function for canceling solo deposits. - * The deposit amount can only be canceled before it will be registered as a validator. - * @param _withdrawalCredentials - withdrawal credentials of solo validators. - * @param _amount - amount to cancel. - */ - function cancelDeposit(bytes32 _withdrawalCredentials, uint256 _amount) external; - - /** - * @dev Function for registering new solo validator. - * @param _validator - validator to register. - */ - function registerValidator(Validator calldata _validator) external; -} diff --git a/contracts/interfaces/IValidators.sol b/contracts/interfaces/IValidators.sol deleted file mode 100644 index 1f8a884f..00000000 --- a/contracts/interfaces/IValidators.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -/** - * @dev Interface of the Validators contract. - */ -interface IValidators { - /** - * @dev Constructor for initializing the Validators contract. - * @param _admin - address of the contract admin. - * @param _pool - address of the Pool contract. - * @param _solos - address of the Solos contract. - */ - function initialize(address _admin, address _pool, address _solos) external; - - /** - * @dev Function for checking whether an account has an operator role. - * @param _account - account to check. - */ - function isOperator(address _account) external view returns (bool); - - /** - * @dev Function for adding an operator role to the account. - * Can only be called by an account with an admin role. - * @param _account - account to assign an operator role to. - */ - function addOperator(address _account) external; - - /** - * @dev Function for removing an operator role from the account. - * Can only be called by an account with an admin role. - * @param _account - account to remove an operator role from. - */ - function removeOperator(address _account) external; - - /** - * @dev Function for checking whether public key was already used. - * @param _publicKey - hash of public key to check. - */ - function publicKeys(bytes32 _publicKey) external view returns (bool); - - /** - * @dev Function for registering validators. Can only be called by collectors. - * @param _validatorId - ID of the validator. - */ - function register(bytes32 _validatorId) external; -} diff --git a/contracts/merkles/MerkleDistributor.sol b/contracts/merkles/MerkleDistributor.sol index 11606326..4c4bd194 100644 --- a/contracts/merkles/MerkleDistributor.sol +++ b/contracts/merkles/MerkleDistributor.sol @@ -36,11 +36,13 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { mapping (bytes32 => mapping (uint256 => uint256)) private _claimedBitMap; /** - * @dev See {IMerkleDistributor-initialize}. + * @dev See {IMerkleDistributor-upgrade}. */ - function initialize(address _admin, address _rewardEthToken, address _oracles) external override initializer { - __OwnablePausableUpgradeable_init(_admin); - rewardEthToken = _rewardEthToken; + function upgrade(address _oracles) external override onlyAdmin whenPaused { + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "MerkleDistributor: invalid Oracles address" + ); oracles = IOracles(_oracles); } @@ -56,23 +58,22 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { */ function setMerkleRoot(bytes32 newMerkleRoot, string calldata newMerkleProofs) external override { require(msg.sender == address(oracles), "MerkleDistributor: access denied"); - if (newMerkleRoot != merkleRoot) { - merkleRoot = newMerkleRoot; - emit MerkleRootUpdated(msg.sender, newMerkleRoot, newMerkleProofs); - } + merkleRoot = newMerkleRoot; lastUpdateBlockNumber = block.number; + emit MerkleRootUpdated(msg.sender, newMerkleRoot, newMerkleProofs); } /** - * @dev See {IMerkleDistributor-distribute}. + * @dev See {IMerkleDistributor-distributePeriodically}. */ - function distribute( + function distributePeriodically( + address from, address token, address beneficiary, uint256 amount, uint256 durationInBlocks ) - external override onlyAdmin + external override onlyAdmin whenNotPaused { require(amount > 0, "MerkleDistributor: invalid amount"); @@ -80,8 +81,26 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { uint256 endBlock = startBlock + durationInBlocks; require(endBlock > startBlock, "MerkleDistributor: invalid blocks duration"); - IERC20Upgradeable(token).safeTransferFrom(msg.sender, address(this), amount); - emit DistributionAdded(msg.sender, token, beneficiary, amount, startBlock, endBlock); + IERC20Upgradeable(token).safeTransferFrom(from, address(this), amount); + emit PeriodicDistributionAdded(from, token, beneficiary, amount, startBlock, endBlock); + } + + /** + * @dev See {IMerkleDistributor-distributeOneTime}. + */ + function distributeOneTime( + address from, + address origin, + address token, + uint256 amount, + string calldata rewardsLink + ) + external override onlyAdmin whenNotPaused + { + require(amount > 0, "MerkleDistributor: invalid amount"); + + IERC20Upgradeable(token).safeTransferFrom(from, address(this), amount); + emit OneTimeDistributionAdded(from, origin, token, amount, rewardsLink); } /** @@ -116,6 +135,7 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { ) external override whenNotPaused { + require(account != address(0), "MerkleDistributor: invalid account"); address _rewardEthToken = rewardEthToken; // gas savings require( IRewardEthToken(_rewardEthToken).lastUpdateBlockNumber() < lastUpdateBlockNumber, diff --git a/contracts/mocks/OracleMock.sol b/contracts/mocks/MulticallMock.sol similarity index 55% rename from contracts/mocks/OracleMock.sol rename to contracts/mocks/MulticallMock.sol index e598f0d7..e9aa84a8 100644 --- a/contracts/mocks/OracleMock.sol +++ b/contracts/mocks/MulticallMock.sol @@ -1,12 +1,26 @@ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.7.5; +pragma abicoder v2; + import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "../interfaces/IOracles.sol"; import "../interfaces/IMerkleDistributor.sol"; -contract OracleMock { +contract MulticallMock { + struct OracleRewards { + uint256 totalRewards; + uint256 activatedValidators; + bytes[] signatures; + } + + struct MerkleRoot { + bytes32 merkleRoot; + string merkleProofs; + bytes[] signatures; + } + IOracles private oracles; IERC20Upgradeable private stakedEthToken; IERC20Upgradeable private rewardEthToken; @@ -19,45 +33,32 @@ contract OracleMock { merkleDistributor = IMerkleDistributor(_merkleDistributor); } - function updateTotalRewards(uint256 totalRewards, uint256 activatedValidators) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - } - - function updateTotalRewardsAndMerkleRoot( + function transferRewardsAndUpdateTotalRewards( uint256 totalRewards, uint256 activatedValidators, - bytes32 merkleRoot, - string calldata merkleProofs + address payee, + bytes[] calldata signatures ) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); - } - - function updateTotalRewardsAndTransferRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); + oracles.submitRewards(totalRewards, activatedValidators, signatures); } - function transferRewardsAndUpdateTotalRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { + function updateTotalRewardsAndTransferRewards( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + oracles.submitRewards(totalRewards, activatedValidators, signatures); rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - } - - function updateTotalRewardsAndTransferStakedEth(uint256 totalRewards, uint256 activatedValidators, address payee) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); - } - - function transferStakedEthAndUpdateTotalRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { - stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); } function updateTotalRewardsAndClaim( - uint256 totalRewards, - uint256 activatedValidators, + OracleRewards memory oracleRewards, uint256 index, address account, address[] calldata tokens, @@ -66,13 +67,12 @@ contract OracleMock { ) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); } function claimAndUpdateTotalRewards( - uint256 totalRewards, - uint256 activatedValidators, + OracleRewards memory oracleRewards, uint256 index, address account, address[] calldata tokens, @@ -82,38 +82,68 @@ contract OracleMock { external { merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); } - function updateMerkleRootAndClaim( - bytes32 merkleRoot, - string calldata merkleProofs, + function claimAndUpdateMerkleRoot( + MerkleRoot memory merkleRoot, uint256 index, address account, address[] calldata tokens, uint256[] calldata amounts, bytes32[] calldata merkleProof - ) external { - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } - function claimAndUpdateMerkleRoot( - bytes32 merkleRoot, - string calldata merkleProofs, + function updateMerkleRootAndClaim( + MerkleRoot memory merkleRoot, uint256 index, address account, address[] calldata tokens, uint256[] calldata amounts, bytes32[] calldata merkleProof - ) external { + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); + } + + function updateTotalRewardsAndTransferStakedEth( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + oracles.submitRewards(totalRewards, activatedValidators, signatures); + stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); + } + + function transferStakedEthAndUpdateTotalRewards( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); + oracles.submitRewards(totalRewards, activatedValidators, signatures); + } + + function updateTotalRewardsAndMerkleRoot( + OracleRewards memory oracleRewards, + MerkleRoot memory merkleRoot + ) + external + { + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } } diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol new file mode 100644 index 00000000..0e1c5538 --- /dev/null +++ b/contracts/pool/Pool.sol @@ -0,0 +1,259 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; +import "../presets/OwnablePausableUpgradeable.sol"; +import "../interfaces/IStakedEthToken.sol"; +import "../interfaces/IDepositContract.sol"; +import "../interfaces/IPoolValidators.sol"; +import "../interfaces/IPool.sol"; +import "../interfaces/IPoolValidators.sol"; + +/** + * @title Pool + * + * @dev Pool contract accumulates deposits from the users, mints tokens and registers validators. + */ +contract Pool is IPool, OwnablePausableUpgradeable { + using SafeMathUpgradeable for uint256; + + // @dev Validator deposit amount. + uint256 public constant override VALIDATOR_TOTAL_DEPOSIT = 32 ether; + + // @dev Total activated validators. + uint256 public override activatedValidators; + + // @dev Pool validator withdrawal credentials. + bytes32 public override withdrawalCredentials; + + // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). + IDepositContract public override validatorRegistration; + + // @dev Address of the StakedEthToken contract. + IStakedEthToken private stakedEthToken; + + // @dev Address of the PoolValidators contract. + IPoolValidators private validators; + + // @dev Address of the Oracles contract. + address private oracles; + + // @dev Maps senders to the validator index that it will be activated in. + mapping(address => mapping(uint256 => uint256)) public override activations; + + // @dev Total pending validators. + uint256 public override pendingValidators; + + // @dev Amount of deposited ETH that is not considered for the activation period. + uint256 public override minActivatingDeposit; + + // @dev Pending validators percent limit. If it's not exceeded tokens can be minted immediately. + uint256 public override pendingValidatorsLimit; + + /** + * @dev See {IPool-upgrade}. + */ + function upgrade(address _poolValidators, address _oracles) external override onlyAdmin whenPaused { + require( + _poolValidators != address(0) && address(validators) == 0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5, + "Pool: invalid PoolValidators address" + ); + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "Pool: invalid Oracles address" + ); + + // set contract addresses + validators = IPoolValidators(_poolValidators); + oracles = _oracles; + } + + /** + * @dev See {IPool-setMinActivatingDeposit}. + */ + function setMinActivatingDeposit(uint256 newMinActivatingDeposit) external override onlyAdmin { + minActivatingDeposit = newMinActivatingDeposit; + emit MinActivatingDepositUpdated(newMinActivatingDeposit, msg.sender); + } + + /** + * @dev See {IPool-setPendingValidatorsLimit}. + */ + function setPendingValidatorsLimit(uint256 newPendingValidatorsLimit) external override onlyAdmin { + require(newPendingValidatorsLimit < 1e4, "Pool: invalid limit"); + pendingValidatorsLimit = newPendingValidatorsLimit; + emit PendingValidatorsLimitUpdated(newPendingValidatorsLimit, msg.sender); + } + + /** + * @dev See {IPool-setActivatedValidators}. + */ + function setActivatedValidators(uint256 newActivatedValidators) external override { + require(msg.sender == oracles || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Pool: access denied"); + + // subtract activated validators from pending validators + pendingValidators = pendingValidators.sub(newActivatedValidators.sub(activatedValidators)); + activatedValidators = newActivatedValidators; + emit ActivatedValidatorsUpdated(newActivatedValidators, msg.sender); + } + + /** + * @dev See {IPool-stake}. + */ + function stake() external payable override { + _stake(msg.sender, msg.value); + } + + /** + * @dev See {IPool-stakeOnBehalf}. + */ + function stakeOnBehalf(address recipient) external payable override { + _stake(recipient, msg.value); + } + + /** + * @dev Function for staking ETH using transfer. + */ + receive() external payable { + _stake(msg.sender, msg.value); + } + + /** + * @dev See {IPool-stakeWithPartner}. + */ + function stakeWithPartner(address partner) external payable override { + // stake amount + _stake(msg.sender, msg.value); + emit StakedWithPartner(partner, msg.value); + } + + /** + * @dev See {IPool-stakeWithPartnerOnBehalf}. + */ + function stakeWithPartnerOnBehalf(address partner, address recipient) external payable override { + // stake amount + _stake(recipient, msg.value); + emit StakedWithPartner(partner, msg.value); + } + + /** + * @dev See {IPool-stakeWithReferrer}. + */ + function stakeWithReferrer(address referrer) external payable override { + // stake amount + _stake(msg.sender, msg.value); + emit StakedWithReferrer(referrer, msg.value); + } + + /** + * @dev See {IPool-stakeWithReferrerOnBehalf}. + */ + function stakeWithReferrerOnBehalf(address referrer, address recipient) external payable override { + // stake amount + _stake(recipient, msg.value); + emit StakedWithReferrer(referrer, msg.value); + } + + function _stake(address recipient, uint256 value) internal whenNotPaused { + require(recipient != address(0), "Pool: invalid recipient"); + require(value > 0, "Pool: invalid deposit amount"); + + // mint tokens for small deposits immediately + if (value <= minActivatingDeposit) { + stakedEthToken.mint(recipient, value); + return; + } + + // mint tokens if current pending validators limit is not exceed + uint256 _pendingValidators = pendingValidators.add((address(this).balance).div(VALIDATOR_TOTAL_DEPOSIT)); + uint256 _activatedValidators = activatedValidators; // gas savings + uint256 validatorIndex = _activatedValidators.add(_pendingValidators); + if (validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4))) { + stakedEthToken.mint(recipient, value); + } else { + // lock deposit amount until validator activated + activations[recipient][validatorIndex] = activations[recipient][validatorIndex].add(value); + emit ActivationScheduled(recipient, validatorIndex, value); + } + } + + /** + * @dev See {IPool-canActivate}. + */ + function canActivate(uint256 validatorIndex) external view override returns (bool) { + return validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)); + } + + /** + * @dev See {IPool-activate}. + */ + function activate(address account, uint256 validatorIndex) external override whenNotPaused { + uint256 activatedAmount = _activateAmount( + account, + validatorIndex, + activatedValidators.mul(pendingValidatorsLimit.add(1e4)) + ); + + stakedEthToken.mint(account, activatedAmount); + } + + /** + * @dev See {IPool-activateMultiple}. + */ + function activateMultiple(address account, uint256[] calldata validatorIndexes) external override whenNotPaused { + uint256 toMint; + uint256 maxValidatorIndex = activatedValidators.mul(pendingValidatorsLimit.add(1e4)); + for (uint256 i = 0; i < validatorIndexes.length; i++) { + uint256 activatedAmount = _activateAmount(account, validatorIndexes[i], maxValidatorIndex); + toMint = toMint.add(activatedAmount); + } + stakedEthToken.mint(account, toMint); + } + + function _activateAmount( + address account, + uint256 validatorIndex, + uint256 maxValidatorIndex + ) + internal returns (uint256 amount) + { + require(validatorIndex.mul(1e4) <= maxValidatorIndex, "Pool: validator is not active yet"); + + amount = activations[account][validatorIndex]; + require(amount > 0, "Pool: invalid validator index"); + + delete activations[account][validatorIndex]; + emit Activated(account, validatorIndex, amount, msg.sender); + } + + /** + * @dev See {IPool-registerValidator}. + */ + function registerValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { + require(msg.sender == address(validators), "Pool: access denied"); + require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); + + // update number of pending validators + pendingValidators = pendingValidators.add(1); + emit ValidatorRegistered(depositData.publicKey, depositData.operator); + + // register validator + validatorRegistration.deposit{value : VALIDATOR_TOTAL_DEPOSIT}( + depositData.publicKey, + abi.encodePacked(depositData.withdrawalCredentials), + depositData.signature, + depositData.depositDataRoot + ); + } + + /** + * @dev See {IPool-refund}. + */ + function refund() external override payable { + require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || msg.sender == address(validators), "Pool: access denied"); + require(msg.value > 0, "Pool: invalid refund amount"); + emit Refunded(msg.sender, msg.value); + } +} diff --git a/contracts/collectors/PoolEscrow.sol b/contracts/pool/PoolEscrow.sol similarity index 100% rename from contracts/collectors/PoolEscrow.sol rename to contracts/pool/PoolEscrow.sol diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol new file mode 100644 index 00000000..5ba4dd5b --- /dev/null +++ b/contracts/pool/PoolValidators.sol @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import "../presets/OwnablePausableUpgradeable.sol"; +import "../interfaces/IPoolValidators.sol"; +import "../interfaces/IPool.sol"; + +/** + * @title PoolValidators + * + * @dev PoolValidators contract keeps track of the pool validators' deposit data and onboards new operators. + */ +contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, ReentrancyGuardUpgradeable { + using AddressUpgradeable for address payable; + using SafeMathUpgradeable for uint256; + + // Maps hash of the validator public key to whether it is registered. + mapping(bytes32 => bool) public override isValidatorRegistered; + + // Maps operator address to its data. + mapping(address => Operator) private operators; + + // @dev Address of the Pool contract. + IPool private pool; + + // @dev Address of the Oracles contract. + address private oracles; + + /** + * @dev See {IPoolValidators-initialize}. + */ + function initialize(address _admin, address _pool, address _oracles) external override initializer { + require(_admin != address(0), "Pool: invalid admin address"); + require(_pool != address(0), "Pool: invalid Pool address"); + require(_oracles != address(0), "Pool: invalid Oracles address"); + + __OwnablePausableUpgradeable_init(_admin); + pool = IPool(_pool); + oracles = _oracles; + } + + /** + * @dev See {IPoolValidators-getOperator}. + */ + function getOperator(address _operator) external view override returns (bytes32, bool) { + Operator storage operator = operators[_operator]; + return ( + operator.depositDataMerkleRoot, + operator.committed + ); + } + + /** + * @dev See {IPoolValidators-addOperator}. + */ + function addOperator( + address _operator, + bytes32 depositDataMerkleRoot, + string calldata depositDataMerkleProofs + ) + external override onlyAdmin whenNotPaused + { + require(_operator != address(0), "PoolValidators: invalid operator"); + // merkle root and proofs must be validated off chain prior submitting the transaction + require(depositDataMerkleRoot != "", "PoolValidators: invalid merkle root"); + require(bytes(depositDataMerkleProofs).length != 0, "PoolValidators: invalid merkle proofs"); + + // load operator + Operator storage operator = operators[_operator]; + require(operator.depositDataMerkleRoot != depositDataMerkleRoot, "PoolValidators: same merkle root"); + + // update operator + operator.depositDataMerkleRoot = depositDataMerkleRoot; + operator.committed = false; + + emit OperatorAdded( + _operator, + depositDataMerkleRoot, + depositDataMerkleProofs + ); + } + + /** + * @dev See {IPoolValidators-commitOperator}. + */ + function commitOperator() external override whenNotPaused { + // mark operator as committed + Operator storage operator = operators[msg.sender]; + require(operator.depositDataMerkleRoot != "" && !operator.committed, "PoolValidators: invalid operator"); + operator.committed = true; + + emit OperatorCommitted(msg.sender); + } + + /** + * @dev See {IPoolValidators-removeOperator}. + */ + function removeOperator(address _operator) external override whenNotPaused { + require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || msg.sender == _operator, "PoolValidators: access denied"); + + Operator storage operator = operators[_operator]; + require(operator.depositDataMerkleRoot != "", "PoolValidators: invalid operator"); + + // clean up operator + delete operators[_operator]; + + emit OperatorRemoved(msg.sender, _operator); + } + + /** + * @dev See {IPoolValidators-registerValidator}. + */ + function registerValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { + require(msg.sender == oracles, "PoolValidators: access denied"); + + // mark validator as registered -> prevents from registering the same validator twice + bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); + require(!isValidatorRegistered[validatorId], "PoolValidators: validator already registered"); + isValidatorRegistered[validatorId] = true; + + // fetch deposit data merkle root + Operator storage operator = operators[depositData.operator]; + bytes32 depositDataMerkleRoot = operator.depositDataMerkleRoot; + require(depositDataMerkleRoot != "" && operator.committed, "PoolValidators: invalid operator"); + + // check whether provided deposit data was previously approved + bytes32 node = keccak256(abi.encode( + depositData.publicKey, + depositData.withdrawalCredentials, + depositData.signature, + depositData.depositDataRoot + )); + require( + MerkleProofUpgradeable.verify(merkleProof, depositDataMerkleRoot, node), + "PoolValidators: invalid merkle proof" + ); + + // register validator + pool.registerValidator(depositData); + } +} diff --git a/contracts/tokens/ERC20Upgradeable.sol b/contracts/tokens/ERC20Upgradeable.sol index 934fc924..4790c40f 100644 --- a/contracts/tokens/ERC20Upgradeable.sol +++ b/contracts/tokens/ERC20Upgradeable.sol @@ -199,7 +199,7 @@ abstract contract ERC20Upgradeable is Initializable, IERC20Upgradeable { * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ - function _transfer(address sender, address recipient, uint256 amount) internal virtual { } + function _transfer(address sender, address recipient, uint256 amount) internal virtual; /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 70ea6b31..341150fb 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -15,6 +15,7 @@ import "./ERC20PermitUpgradeable.sol"; * @title RewardEthToken * * @dev RewardEthToken contract stores pool reward tokens. + * If deploying contract for the first time, the `initialize` function should replace the `upgrade` function. */ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20PermitUpgradeable { using SafeMathUpgradeable for uint256; @@ -29,11 +30,11 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per // @dev Maps account address to its reward checkpoint. mapping(address => Checkpoint) public override checkpoints; - // @dev Address of the maintainer, where the fee will be paid. - address public override maintainer; + // @dev Address where protocol fee will be paid. + address public override protocolFeeRecipient; - // @dev Maintainer percentage fee. - uint256 public override maintainerFee; + // @dev Protocol percentage fee. + uint256 public override protocolFee; // @dev Total amount of rewards. uint128 public override totalRewards; @@ -53,11 +54,12 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per /** * @dev See {IRewardEthToken-upgrade}. */ - function upgrade(address _merkleDistributor, uint256 _lastUpdateBlockNumber) external override onlyAdmin whenPaused { - require(merkleDistributor == address(0), "RewardEthToken: already upgraded"); - merkleDistributor = _merkleDistributor; - lastUpdateBlockNumber = _lastUpdateBlockNumber; - updateRewardCheckpoint(address(0)); + function upgrade(address _oracles) external override onlyAdmin whenPaused { + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "Pool: invalid Oracles address" + ); + oracles = _oracles; } /** @@ -66,7 +68,6 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per function setRewardsDisabled(address account, bool isDisabled) external override { require(msg.sender == address(stakedEthToken), "RewardEthToken: access denied"); require(rewardsDisabled[account] != isDisabled, "RewardEthToken: value did not change"); - require(block.number > lastUpdateBlockNumber, "RewardEthToken: cannot disable during rewards update"); uint128 _rewardPerToken = rewardPerToken; checkpoints[account] = Checkpoint({ @@ -79,21 +80,21 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per } /** - * @dev See {IRewardEthToken-setMaintainer}. + * @dev See {IRewardEthToken-setProtocolFeeRecipient}. */ - function setMaintainer(address _newMaintainer) external override onlyAdmin { - require(_newMaintainer != address(0), "RewardEthToken: invalid address"); - maintainer = _newMaintainer; - emit MaintainerUpdated(_newMaintainer); + function setProtocolFeeRecipient(address recipient) external override onlyAdmin { + // can be address(0) to distribute fee through the Merkle Distributor + protocolFeeRecipient = recipient; + emit ProtocolFeeRecipientUpdated(recipient); } /** - * @dev See {IRewardEthToken-setMaintainerFee}. + * @dev See {IRewardEthToken-setProtocolFee}. */ - function setMaintainerFee(uint256 _newMaintainerFee) external override onlyAdmin { - require(_newMaintainerFee < 10000, "RewardEthToken: invalid fee"); - maintainerFee = _newMaintainerFee; - emit MaintainerFeeUpdated(_newMaintainerFee); + function setProtocolFee(uint256 _protocolFee) external override onlyAdmin { + require(_protocolFee < 1e4, "RewardEthToken: invalid protocol fee"); + protocolFee = _protocolFee; + emit ProtocolFeeUpdated(_protocolFee); } /** @@ -213,31 +214,53 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per require(msg.sender == oracles, "RewardEthToken: access denied"); uint256 periodRewards = newTotalRewards.sub(totalRewards); - if (periodRewards == 0) return; + if (periodRewards == 0) { + lastUpdateBlockNumber = block.number; + emit RewardsUpdated(0, newTotalRewards, rewardPerToken, 0, 0); + return; + } - // calculate reward per token used for account reward calculation - uint256 maintainerReward = periodRewards.mul(maintainerFee).div(10000); + // calculate protocol reward and new reward per token amount + uint256 protocolReward = periodRewards.mul(protocolFee).div(1e4); uint256 prevRewardPerToken = rewardPerToken; - uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(maintainerReward).mul(1e18).div(stakedEthToken.totalDeposits())); + uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(stakedEthToken.totalDeposits())); uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); + // store previous distributor rewards for period reward calculation + uint256 prevDistributorBalance = _balanceOf(address(0), prevRewardPerToken); + // update total rewards and new reward per token (totalRewards, rewardPerToken) = (newTotalRewards.toUint128(), newRewardPerToken128); - // update distributor's checkpoint - checkpoints[address(0)] = Checkpoint({ - reward: _balanceOf(address(0), newRewardPerToken).toUint128(), - rewardPerToken: newRewardPerToken128 - }); + uint256 newDistributorBalance = _balanceOf(address(0), newRewardPerToken); + address _protocolFeeRecipient = protocolFeeRecipient; + if (_protocolFeeRecipient == address(0) && protocolReward > 0) { + // add protocol reward to the merkle distributor + newDistributorBalance = newDistributorBalance.add(protocolReward); + } else if (protocolReward > 0) { + // update fee recipient's checkpoint and add its period reward + checkpoints[_protocolFeeRecipient] = Checkpoint({ + reward: _balanceOf(_protocolFeeRecipient, newRewardPerToken).add(protocolReward).toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } - // update maintainer's checkpoint and add its period reward - checkpoints[maintainer] = Checkpoint({ - reward: _balanceOf(maintainer, newRewardPerToken).add(maintainerReward).toUint128(), - rewardPerToken: newRewardPerToken128 - }); + // update distributor's checkpoint + if (newDistributorBalance != prevDistributorBalance) { + checkpoints[address(0)] = Checkpoint({ + reward: newDistributorBalance.toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } lastUpdateBlockNumber = block.number; - emit RewardsUpdated(periodRewards, newTotalRewards, newRewardPerToken); + emit RewardsUpdated( + periodRewards, + newTotalRewards, + newRewardPerToken, + newDistributorBalance.sub(prevDistributorBalance), + _protocolFeeRecipient == address(0) ? protocolReward: 0 + ); } /** @@ -245,6 +268,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per */ function claim(address account, uint256 amount) external override { require(msg.sender == merkleDistributor, "RewardEthToken: access denied"); + require(account != address(0), "RewardEthToken: invalid account"); // update checkpoints, transfer amount from distributor to account uint128 _rewardPerToken = rewardPerToken; diff --git a/deployments/index.js b/deployments/index.js index 55b26010..83339ee5 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -1,22 +1,14 @@ -const hre = require('hardhat'); const { contracts } = require('./settings'); -function log(message) { - if (hre.config != null && hre.config.suppressLogs !== true) { - console.log(message); - } -} - -async function prepareContractsUpgrades() { - log('No contracts to prepare for upgrade...'); +async function deployContracts() { + return contracts; } async function upgradeContracts() { - log('No contracts to upgrade...'); return contracts; } module.exports = { - prepareContractsUpgrades, + deployContracts, upgradeContracts, }; diff --git a/deployments/merkleDistributor.js b/deployments/merkleDistributor.js deleted file mode 100644 index f4e19914..00000000 --- a/deployments/merkleDistributor.js +++ /dev/null @@ -1,25 +0,0 @@ -const { ethers, upgrades } = require('hardhat'); - -async function deployAnInitializeMerkleDistributor( - adminAddress, - rewardEthTokenContractAddress, - oraclesContractAddress -) { - const MerkleDistributor = await ethers.getContractFactory( - 'MerkleDistributor' - ); - const proxy = await upgrades.deployProxy( - MerkleDistributor, - [adminAddress, rewardEthTokenContractAddress, oraclesContractAddress], - { - kind: 'transparent', - unsafeAllowCustomTypes: true, - } - ); - await proxy.deployed(); - return proxy.address; -} - -module.exports = { - deployAnInitializeMerkleDistributor, -}; diff --git a/deployments/settings.js b/deployments/settings.js index 01f8efb4..4ee16ab8 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -3,69 +3,45 @@ const hre = require('hardhat'); let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { - validators: '0xE2F13059454b626e42e04845815E9Ed2E9774bF3', - oracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', + oracles: '0x531b9D9cb268E88D53A87890699bbe31326A6f08', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', + poolValidators: '0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', - solos: '0xcf809A020EE599034C010b387F2116237a5B22Bc', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', stakeWiseToken: '0x0e2497aACec2755d831E4AFDEA25B4ef1B823855', vestingEscrowFactory: '0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59', merkleDrop: '0xFc3513E92799F0169e5f14F354d0097E4b790498', merkleDistributor: '0x6Ef0172b79131C66c7012Db3545D637B116feb12', + roles: '0x3ae8a774CFBBE305520A4a3Be3A480701B66aFba', + contractChecker: '0x85ee326f839Bc430655A3fad447837072ef52C2F', proxyAdmin: '0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8', }; contractSettings = { - cancelLockDuration: '86400', // 1 day - syncPeriod: '6646', // 1 day in blocks - totalRewardsLastUpdateBlockNumber: '4821781', // total rewards last update block number - validatorPrice: '10000000000000000000', // 10 DAI / month - maintainerFee: '1000', // 10%, admin: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', - maintainer: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', - VRC: '0x8c5fecdC472E27Bc447696F431E425D02dd46a8c', vestingEscrow: '0x4CDAe3f1Eaa84b88fFc97627Ef1c77F762794287', - withdrawalCredentials: - '0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5', - activatedValidators: '0', - pendingValidators: '1', - minActivatingDeposit: '5000000000000000000', // 5 ETH - pendingValidatorsLimit: '500', // 5 % }; } else { contracts = { - validators: '0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5', - oracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', + oracles: '0x8a887282E67ff41d36C0b7537eAB035291461AcD', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', + poolValidators: '0x002932e11E95DC84C17ed5f94a0439645D8a97BC', poolEscrow: '0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079', - solos: '0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca', stakedEthToken: '0xFe2e637202056d30016725477c5da089Ab0A043A', rewardEthToken: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', stakeWiseToken: '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', vestingEscrowFactory: '0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5', merkleDrop: '0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5', merkleDistributor: '0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20', + roles: '0xC486c10e3611565F5b38b50ad68277b11C889623', + contractChecker: '0xFC1fC7257AEA7C7c08A498594DCA97CE5A72fdCB', proxyAdmin: '0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22', }; contractSettings = { - cancelLockDuration: '86400', // 1 day - syncPeriod: '6646', // 1 day in blocks - totalRewardsLastUpdateBlockNumber: '12653584', // total rewards last update block number - validatorPrice: '10000000000000000000', // 10 DAI / month - maintainerFee: '1000', // 10%, admin: '0x144a98cb1CdBb23610501fE6108858D9B7D24934', - maintainer: '0xf91AA4a655B6F43243ed4C2853F3508314DaA2aB', - VRC: '0x00000000219ab540356cbb839cbe05303d7705fa', vestingEscrow: '0x1E6d872CE26C8711e7D47b8E0C47aB91d95a6dF3', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - activatedValidators: '770', - pendingValidators: '21', - minActivatingDeposit: '32000000000000000000', // 32 ETH - pendingValidatorsLimit: '500', // 5 % }; } diff --git a/deployments/vrc.js b/deployments/vrc.js deleted file mode 100644 index 3713c28e..00000000 --- a/deployments/vrc.js +++ /dev/null @@ -1,64 +0,0 @@ -// https://github.com/ethereum/eth2.0-specs/blob/dev/solidity_deposit_contract/deposit_contract.json -// Commit: e4a9c5f -let vrcAbi = [ - { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'bytes', name: 'pubkey', type: 'bytes' }, - { - indexed: false, - internalType: 'bytes', - name: 'withdrawal_credentials', - type: 'bytes', - }, - { indexed: false, internalType: 'bytes', name: 'amount', type: 'bytes' }, - { - indexed: false, - internalType: 'bytes', - name: 'signature', - type: 'bytes', - }, - { indexed: false, internalType: 'bytes', name: 'index', type: 'bytes' }, - ], - name: 'DepositEvent', - type: 'event', - }, - { - inputs: [ - { internalType: 'bytes', name: 'pubkey', type: 'bytes' }, - { internalType: 'bytes', name: 'withdrawal_credentials', type: 'bytes' }, - { internalType: 'bytes', name: 'signature', type: 'bytes' }, - { internalType: 'bytes32', name: 'deposit_data_root', type: 'bytes32' }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'get_deposit_count', - outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'get_deposit_root', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }], - name: 'supportsInterface', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'pure', - type: 'function', - }, -]; - -module.exports = { - vrcAbi, -}; diff --git a/hardhat.config.js b/hardhat.config.js index 761a6009..6d00a299 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,8 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const GAS_PRICE = 20e9; // 20 Gwei -const BLOCK_NUMBER = 12660565; +const BLOCK_NUMBER = 13952000; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); @@ -102,9 +101,6 @@ module.exports = { }, networks: { hardhat: { - blockGasLimit: 0x1fffffffffffff, - gasPrice: GAS_PRICE, - allowUnlimitedContractSize: true, forking: { url: process.env.HARDHAT_FORK_API_URL, blockNumber: BLOCK_NUMBER, @@ -112,9 +108,6 @@ module.exports = { }, local: { url: 'http://localhost:8545', - blockGasLimit: 0x1fffffffffffff, - gasPrice: GAS_PRICE, - allowUnlimitedContractSize: true, }, }, throwOnTransactionFailures: true, @@ -133,16 +126,17 @@ module.exports = { 'IDepositContract', 'IERC20Upgradeable', 'Pool', + 'PoolEscrow', + 'PoolValidators', 'RewardEthToken', - 'Solos', 'StakedEthToken', 'StakeWiseToken', - 'Validators', 'VestingEscrow', 'VestingEscrowFactory', - 'PoolEscrow', 'MerkleDrop', 'MerkleDistributor', + 'ContractChecker', + 'Roles', ], clear: true, flat: true, @@ -150,4 +144,7 @@ module.exports = { etherscan: { apiKey: 'api key goes here', }, + mocha: { + timeout: 20000, + }, }; diff --git a/networks/goerli.md b/networks/goerli.md index 9bf7a6f7..2bf694c7 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -1,10 +1,5 @@ # Goerli Contracts -## Validators - -- Contract: [0xE2F13059454b626e42e04845815E9Ed2E9774bF3](https://goerli.etherscan.io/address/0xE2F13059454b626e42e04845815E9Ed2E9774bF3) -- Transaction: [0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974](https://goerli.etherscan.io/tx/0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974) - ## Pool - Contract: [0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7](https://goerli.etherscan.io/address/0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7) @@ -15,15 +10,20 @@ - Implementation: [0xAB10021EA5d14156f52414C492bf81859d0b21F6](https://goerli.etherscan.io/address/0xAB10021EA5d14156f52414C492bf81859d0b21F6) - Transaction: [0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5](https://goerli.etherscan.io/tx/0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5) +### Upgrade to v2.0.0 + +- Implementation: [0x6931a7A2B196386005a3E1F9752542227d4f4d64](https://goerli.etherscan.io/address/0x6931a7A2B196386005a3E1F9752542227d4f4d64) +- Transaction: [0x228165334c43538905f2352b399181f2ae789672a80377a2af256d7142591553](https://goerli.etherscan.io/tx/0x228165334c43538905f2352b399181f2ae789672a80377a2af256d7142591553) + ## Pool Escrow - Contract: [0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218](https://goerli.etherscan.io/address/0x040f15c6b5bfc5f324ecab5864c38d4e1eef4218) - Transaction: [0x7d0aa2f273c715ee913ffc45a1f830faac52fb84bf384b6fa3ac58308f375602](https://goerli.etherscan.io/tx/0x7d0aa2f273c715ee913ffc45a1f830faac52fb84bf384b6fa3ac58308f375602) -## Solos +## Pool Validators -- Contract: [0xcf809A020EE599034C010b387F2116237a5B22Bc](https://goerli.etherscan.io/address/0xcf809A020EE599034C010b387F2116237a5B22Bc) -- Transaction: [0x19ef944992fb27c80db82dce243fba62749dc563c0920c65c05c06b1ac2a8a39](https://goerli.etherscan.io/tx/0x19ef944992fb27c80db82dce243fba62749dc563c0920c65c05c06b1ac2a8a39) +- Contract: [0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb](https://goerli.etherscan.io/address/0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb) +- Transaction: [0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f](https://goerli.etherscan.io/tx/0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f) ## StakedEthToken @@ -35,6 +35,11 @@ - Contract: [0x826f88d423440c305D9096cC1581Ae751eFCAfB0](https://goerli.etherscan.io/address/0x826f88d423440c305D9096cC1581Ae751eFCAfB0) - Transaction: [0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6](https://goerli.etherscan.io/tx/0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6) +### Upgrade to v2.0.0 + +- Implementation: [0x45E444930236De8548CAe187C2CD0BbDE73f5e13](https://goerli.etherscan.io/address/0x45E444930236De8548CAe187C2CD0BbDE73f5e13) +- Transaction: [0xd380bc2b7825760baab9b63dbf79f21e58d1a2854189b725f3d8dd20c8a2073c](https://goerli.etherscan.io/tx/0xd380bc2b7825760baab9b63dbf79f21e58d1a2854189b725f3d8dd20c8a2073c) + ## StakeWiseToken - Contract: [0x0e2497aACec2755d831E4AFDEA25B4ef1B823855](https://goerli.etherscan.io/address/0x0e2497aACec2755d831E4AFDEA25B4ef1B823855) @@ -42,13 +47,8 @@ ## Oracles -- Contract: [0xE54486fa4eB45716c5725d7A46FDDe810B8E8914](https://goerli.etherscan.io/address/0xE54486fa4eB45716c5725d7A46FDDe810B8E8914) -- Transaction: [0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c](https://goerli.etherscan.io/tx/0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c) - -### Upgrade to v1.1.0 - -- Implementation: [0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF](https://goerli.etherscan.io/address/0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF) -- Transaction: [0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015](https://goerli.etherscan.io/tx/0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015) +- Contract: [0x531b9D9cb268E88D53A87890699bbe31326A6f08](https://goerli.etherscan.io/address/0x531b9D9cb268E88D53A87890699bbe31326A6f08) +- Transaction: [0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d](https://goerli.etherscan.io/tx/0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d) ## Vesting Escrow @@ -80,6 +80,21 @@ - Contract: [0x6Ef0172b79131C66c7012Db3545D637B116feb12](https://goerli.etherscan.io/address/0x6Ef0172b79131C66c7012Db3545D637B116feb12) - Transaction: [0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535](https://goerli.etherscan.io/tx/0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535) +### Upgrade to v2.0.0 + +- Implementation: [0x3022648376AfBf1f716111a256221043b7a03c1f](https://goerli.etherscan.io/address/0x3022648376AfBf1f716111a256221043b7a03c1f) +- Transaction: [0xa015f12cee81675b2e1254084398ac43c8b799590a1748752daee6ab1d0bc1cb](https://goerli.etherscan.io/tx/0xa015f12cee81675b2e1254084398ac43c8b799590a1748752daee6ab1d0bc1cb) + +## Roles + +- Contract: [0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC](https://goerli.etherscan.io/address/0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC) +- Transaction: [0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3](https://goerli.etherscan.io/tx/0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3) + +## Contract Checker + +- Contract: [0x85ee326f839Bc430655A3fad447837072ef52C2F](https://goerli.etherscan.io/address/0x85ee326f839Bc430655A3fad447837072ef52C2F) +- Transaction: [0x80254a6b782b5146ba311a3b1d21fd9a2002025a343dcac10907789b49974439](https://goerli.etherscan.io/tx/0x80254a6b782b5146ba311a3b1d21fd9a2002025a343dcac10907789b49974439) + ## Proxy Admin - Implementation: [0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8](https://goerli.etherscan.io/address/0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8) diff --git a/networks/mainnet.md b/networks/mainnet.md index b8d592b4..91ab8172 100644 --- a/networks/mainnet.md +++ b/networks/mainnet.md @@ -1,10 +1,5 @@ # Mainnet Contracts -## Validators - -- Contract: [0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5](https://etherscan.io/address/0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5) -- Transaction: [0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289](https://etherscan.io/tx/0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289) - ## Pool - Contract: [0xC874b064f465bdD6411D45734b56fac750Cda29A](https://etherscan.io/address/0xC874b064f465bdD6411D45734b56fac750Cda29A) @@ -15,15 +10,20 @@ - Implementation: [0xc8970E7C07c251625F9F93cE510b1D9c1a08d299](https://etherscan.io/address/0xc8970E7C07c251625F9F93cE510b1D9c1a08d299) - Transaction: [0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2](https://etherscan.io/tx/0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2) +### Upgrade to v2.0.0 + +- Implementation: [0xe68E649862F7036094f1E4eD5d69a738aCDE666f](https://etherscan.io/address/0xe68E649862F7036094f1E4eD5d69a738aCDE666f) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + ## Pool Escrow - Contract: [0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079](https://etherscan.io/address/0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079) - Transaction: [0xaf485028fa48fe546a72d0a26c8ea8adc6ae0c460faa3b5fab7513834c0e1155](https://etherscan.io/tx/0xaf485028fa48fe546a72d0a26c8ea8adc6ae0c460faa3b5fab7513834c0e1155) -## Solos +## Pool Validators -- Contract: [0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca](https://etherscan.io/address/0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca) -- Transaction: [0xb06d6b7288424b04fab9136388c68cb9083e392bae00816c36e062dac3666dc2](https://etherscan.io/tx/0xb06d6b7288424b04fab9136388c68cb9083e392bae00816c36e062dac3666dc2) +- Contract: [0x002932e11E95DC84C17ed5f94a0439645D8a97BC](https://etherscan.io/address/0x002932e11E95DC84C17ed5f94a0439645D8a97BC) +- Transaction: [0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e](https://etherscan.io/tx/0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e) ## StakedEthToken @@ -45,6 +45,11 @@ - Implementation: [0x610B58583642610967727fe4fadd125a92D6F678](https://etherscan.io/address/0x610B58583642610967727fe4fadd125a92D6F678) - Transaction: [0x647087d8fc2f729e03a0a4e18729e0ae20bdd77f3454e32cd190d0d271255399](https://etherscan.io/tx/0x647087d8fc2f729e03a0a4e18729e0ae20bdd77f3454e32cd190d0d271255399) +### Upgrade to v2.0.0 + +- Implementation: [0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09](https://etherscan.io/address/0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + ## StakeWiseToken - Contract: [0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2](https://etherscan.io/address/0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2) @@ -52,18 +57,8 @@ ## Oracles -- Contract: [0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514](https://etherscan.io/address/0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514) -- Transaction: [0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d](https://etherscan.io/tx/0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d) - -### Upgrade to v1.1.0 - -- Implementation: [0x749dCCE12E8337dfb44635082519E656d44A2672](https://etherscan.io/address/0x749dCCE12E8337dfb44635082519E656d44A2672) -- Transaction: [0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f](https://etherscan.io/tx/0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f) - -### Upgrade to v1.3.0 - -- Implementation: [0xd3ea5BF3bB42542B5b64358C12F06233704e9b99](https://etherscan.io/address/0xd3ea5BF3bB42542B5b64358C12F06233704e9b99) -- Transaction: [0xd03b2316cb5cde5f52272deaf96640fd7f6d50556d798fd7818887a1f7ac2b73](https://etherscan.io/tx/0xd03b2316cb5cde5f52272deaf96640fd7f6d50556d798fd7818887a1f7ac2b73) +- Contract: [0x8a887282E67ff41d36C0b7537eAB035291461AcD](https://etherscan.io/address/0x8a887282E67ff41d36C0b7537eAB035291461AcD) +- Transaction: [0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506](https://etherscan.io/tx/0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506) ## Vesting Escrow @@ -96,11 +91,26 @@ - Contract: [0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20](https://etherscan.io/address/0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20) - Transaction: [0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a](https://etherscan.io/tx/0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a) +### Upgrade to v2.0.0 + +- Implementation: [0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC](https://etherscan.io/address/0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + +## Roles + +- Contract: [0xC486c10e3611565F5b38b50ad68277b11C889623](https://etherscan.io/address/0xC486c10e3611565F5b38b50ad68277b11C889623) +- Transaction: [0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2](https://etherscan.io/tx/0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2) + ## Early Adopters Campaign (Merkle Drop) - Contract: [0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5](https://etherscan.io/address/0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5) - Transaction: [0x4912a5f2c61be471dc5200ae7a4d08cdb61d32e13d3071e226807346ac9a1c87](https://etherscan.io/tx/0x4912a5f2c61be471dc5200ae7a4d08cdb61d32e13d3071e226807346ac9a1c87) +## Contract Checker + +- Contract: [0x85ee326f839Bc430655A3fad447837072ef52C2F](https://etherscan.io/address/0xfc1fc7257aea7c7c08a498594dca97ce5a72fdcb) +- Transaction: [0xedd8ba44e04a766a79a0ce50a16343e7635483633eac7169cbf4e52f50961ce1](https://etherscan.io/tx/0xedd8ba44e04a766a79a0ce50a16343e7635483633eac7169cbf4e52f50961ce1) + ## Proxy Admin - Contract: [0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22](https://etherscan.io/address/0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22) diff --git a/package.json b/package.json index d2827e7f..2b6f6f55 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "slither": "pip3 install --user slither-analyzer && slither .", "test": "hardhat test", "test:gas": "hardhat test --gas --optimizer", - "prepare-upgrade": "yarn compile --optimizer && npx hardhat run --no-compile scripts/prepareUpgrade.js", + "deploy-contracts": "yarn compile --optimizer && npx hardhat run --no-compile scripts/deploy.js", "upgrade-contracts": "yarn compile --optimizer && npx hardhat run --no-compile scripts/upgrade.js", "verify": "npx hardhat verify --optimizer" }, @@ -45,33 +45,32 @@ "url": "https://github.com/stakewise/contracts/issues" }, "devDependencies": { - "@codechecks/client": "^0.1.10", - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.2", - "@nomiclabs/hardhat-truffle5": "^2.0.0", + "@codechecks/client": "^0.1.12", + "@nomiclabs/hardhat-ethers": "^2.0.3", + "@nomiclabs/hardhat-etherscan": "^2.1.8", + "@nomiclabs/hardhat-truffle5": "^2.0.3", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", - "@openzeppelin/hardhat-upgrades": "^1.7.0", - "@openzeppelin/test-helpers": "^0.5.11", + "@openzeppelin/hardhat-upgrades": "^1.12.0", + "@openzeppelin/test-helpers": "^0.5.15", "chai": "^4.3.4", - "chalk": "^4.1.1", - "eslint": "^7.25.0", + "chalk": "^4.1.2", + "eslint": "^8.4.1", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-prettier": "^4.0.0", "eth-sig-util": "^3.0.1", - "ethereumjs-util": "^7.0.10", - "ethers": "^5.1.4", - "hardhat": "^2.1.2", - "hardhat-abi-exporter": "^2.2.1", - "hardhat-contract-sizer": "^2.0.3", - "hardhat-gas-reporter": "^1.0.4", - "husky": "^6.0.0", - "lint-staged": "10.5.4", - "prettier": "^2.2.1", - "solhint": "^3.3.4", - "solidity-coverage": "^0.7.16", - "web3": "^1.3.5" + "ethers": "^5.5.2", + "hardhat": "^2.7.1", + "hardhat-abi-exporter": "^2.3.1", + "hardhat-contract-sizer": "^2.1.1", + "hardhat-gas-reporter": "^1.0.6", + "husky": "^7.0.4", + "lint-staged": "12.1.2", + "prettier": "^2.5.1", + "solhint": "^3.3.6", + "solidity-coverage": "^0.7.17", + "web3": "^1.6.1" }, "dependencies": {} } diff --git a/scripts/prepareUpgrade.js b/scripts/deploy.js similarity index 54% rename from scripts/prepareUpgrade.js rename to scripts/deploy.js index 69fd525c..e8f5d8bf 100644 --- a/scripts/prepareUpgrade.js +++ b/scripts/deploy.js @@ -1,6 +1,6 @@ -const { prepareContractsUpgrades } = require('../deployments'); +const { deployContracts } = require('../deployments'); -prepareContractsUpgrades() +deployContracts() .then(() => process.exit(0)) .catch((error) => { console.error(error); diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index ca244006..accde955 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -1,3 +1,4 @@ +const { defaultAbiCoder, hexlify, keccak256 } = require('ethers/lib/utils'); const { expectRevert, expectEvent, @@ -5,7 +6,6 @@ const { send, BN, constants, - time, } = require('@openzeppelin/test-helpers'); const { upgradeContracts } = require('../deployments'); const { contractSettings, contracts } = require('../deployments/settings'); @@ -13,7 +13,7 @@ const { stopImpersonatingAccount, impersonateAccount, resetFork, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, setMerkleRoot, } = require('./utils'); @@ -22,7 +22,7 @@ const MerkleDistributor = artifacts.require('MerkleDistributor'); const StakeWiseToken = artifacts.require('StakeWiseToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const StakedEthToken = artifacts.require('StakedEthToken'); -const OracleMock = artifacts.require('OracleMock'); +const MulticallMock = artifacts.require('MulticallMock'); const Oracles = artifacts.require('Oracles'); const Pool = artifacts.require('Pool'); @@ -63,7 +63,7 @@ const merkleProofs = { }, }; -contract('Merkle Distributor', ([beneficiary, anyone]) => { +contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; let merkleDistributor, amount, @@ -73,6 +73,7 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { stakedEthToken, oracles, oracleAccounts, + prevDistributorBalance, pool; after(async () => stopImpersonatingAccount(admin)); @@ -91,12 +92,15 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); - merkleDistributor = await MerkleDistributor.at( - upgradedContracts.merkleDistributor - ); - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + merkleDistributor = await MerkleDistributor.at(contracts.merkleDistributor); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); pool = await Pool.at(contracts.pool); + prevDistributorBalance = await token.balanceOf(merkleDistributor.address); }); afterEach(async () => resetFork()); @@ -110,10 +114,11 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { ); }); - describe('distribute', () => { + describe('periodically distribute', () => { it('not admin fails to distribute tokens', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -128,7 +133,8 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('fails to distribute tokens with zero amount', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, new BN(0), @@ -141,9 +147,26 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { ); }); + it('fails to distribute tokens from zero address', async () => { + await expectRevert( + merkleDistributor.distributePeriodically( + constants.ZERO_ADDRESS, + token.address, + beneficiary, + amount, + durationInBlocks, + { + from: admin, + } + ), + 'ERC20: transfer from the zero address' + ); + }); + it('fails to distribute tokens with max uint duration', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -158,7 +181,8 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('fails to distribute tokens with zero duration', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -173,7 +197,8 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('fails to distribute tokens without allowance', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -186,12 +211,30 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { ); }); + it('fails to distribute when paused', async () => { + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.distributePeriodically( + admin, + token.address, + beneficiary, + amount, + durationInBlocks, + { + from: admin, + } + ), + 'Pausable: paused' + ); + }); + it('admin can distribute tokens', async () => { await token.approve(merkleDistributor.address, amount, { from: admin, }); - let receipt = await merkleDistributor.distribute( + let receipt = await merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -202,8 +245,8 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { ); let startBlock = new BN(receipt.receipt.blockNumber); - await expectEvent(receipt, 'DistributionAdded', { - sender: admin, + await expectEvent(receipt, 'PeriodicDistributionAdded', { + from: admin, token: token.address, beneficiary, amount, @@ -212,34 +255,149 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); expect( await token.balanceOf(merkleDistributor.address) - ).to.bignumber.equal(amount); + ).to.bignumber.equal(prevDistributorBalance.add(amount)); }); }); - describe('claim', () => { - it('cannot claim when contract paused', async () => { - const { index, proof, amounts, tokens } = merkleProofs[account1]; + describe('one time distribute', () => { + const origin = '0x1111111111111111111111111111111111111111'; + const rewardsLink = 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; + + it('not admin fails to distribute tokens', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: anyone, + } + ), + 'OwnablePausable: access denied' + ); + }); + + it('fails to distribute tokens with zero amount', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + new BN(0), + rewardsLink, + { + from: admin, + } + ), + 'MerkleDistributor: invalid amount' + ); + }); + + it('fails to distribute tokens from zero address', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + constants.ZERO_ADDRESS, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), + 'ERC20: transfer from the zero address' + ); + }); + + it('fails to distribute tokens without allowance', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), + 'SafeMath: subtraction overflow' + ); + }); + + it('fails to distribute when paused', async () => { await merkleDistributor.pause({ from: admin }); await expectRevert( - merkleDistributor.claim(index, account1, tokens, amounts, proof, { - from: anyone, - }), + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), 'Pausable: paused' ); }); - it('cannot claim when merkle root updating', async () => { + it('admin can distribute tokens', async () => { + await token.approve(merkleDistributor.address, amount, { + from: admin, + }); + + let receipt = await merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OneTimeDistributionAdded', { + from: admin, + origin, + token: token.address, + amount, + rewardsLink, + }); + expect( + await token.balanceOf(merkleDistributor.address) + ).to.bignumber.equal(prevDistributorBalance.add(amount)); + }); + }); + + describe('claim', () => { + beforeEach(async () => { // new rewards arrive let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, pool, totalRewards, }); + }); + it('cannot claim when contract paused', async () => { + const { index, proof, amounts, tokens } = merkleProofs[account1]; + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.claim(index, account1, tokens, amounts, proof, { + from: anyone, + }), + 'Pausable: paused' + ); + }); + + it('cannot claim when merkle root updating', async () => { // try to claim before merkle root update const { index, proof, amounts, tokens } = merkleProofs[account1]; await expectRevert( @@ -274,32 +432,11 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { ); }); - it('cannot claim more eth rewards than allocated to the distributor', async () => { - await token.transfer(merkleDistributor.address, distributorTokenReward, { - from: admin, - }); - await setMerkleRoot({ - merkleDistributor, - merkleRoot, - merkleProofs, - oracles, - oracleAccounts, - }); - - const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - merkleDistributor.claim(index, account1, tokens, amounts, proof, { - from: anyone, - }), - 'SafeMath: subtraction overflow' - ); - }); - it('cannot claim twice', async () => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.addDeposit({ + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -311,14 +448,13 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { let periodReward = distributorEthReward .mul(totalDeposits) .div(ether('1000')); - let maintainerFee = await rewardEthToken.maintainerFee(); + let protocolFee = await rewardEthToken.protocolFee(); totalRewards = totalRewards.add(periodReward); totalRewards = totalRewards.add( - periodReward.mul(maintainerFee).div(new BN(10000)) + periodReward.mul(protocolFee).div(new BN(10000)) ); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -354,7 +490,7 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.addDeposit({ + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -362,7 +498,6 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { from: admin, }); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -436,7 +571,12 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); describe('claiming within the same block', () => { - let mockedOracle, totalRewards, activatedValidators; + let multicallMock, + totalRewards, + activatedValidators, + rewardsSignatures, + merkleRootSignatures; + beforeEach(async () => { await setMerkleRoot({ merkleDistributor, @@ -446,35 +586,18 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { oracleAccounts, }); - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked oracle - mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor.address ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { + await oracles.addOracle(multicallMock.address, { from: admin, }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - await pool.addDeposit({ + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -482,22 +605,56 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { from: admin, }); let totalDeposits = await stakedEthToken.totalDeposits(); - let maintainerFee = await rewardEthToken.maintainerFee(); + let protocolFee = await rewardEthToken.protocolFee(); totalRewards = distributorEthReward .mul(totalDeposits) .div(ether('1000')); totalRewards = totalRewards.add( - totalRewards.add(maintainerFee.div(new BN(10000))) + totalRewards.add(protocolFee.div(new BN(10000))) ); activatedValidators = await pool.activatedValidators(); + + // create rewards signature + let currentNonce = await oracles.currentRewardsNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + activatedValidators.toString(), + totalRewards.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + rewardsSignatures = []; + for (const oracleAccount of oracleAccounts) { + rewardsSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } + + // create merkle root signature + encoded = defaultAbiCoder.encode( + ['uint256', 'string', 'bytes32'], + [currentNonce.add(new BN(1)).toString(), merkleProofs, merkleRoot] + ); + candidateId = hexlify(keccak256(encoded)); + merkleRootSignatures = []; + for (const oracleAccount of oracleAccounts) { + merkleRootSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } }); it('cannot claim after total rewards update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; await expectRevert( - mockedOracle.updateTotalRewardsAndClaim( - totalRewards, - activatedValidators, + multicallMock.updateTotalRewardsAndClaim( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, index, account1, tokens, @@ -513,33 +670,36 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('can claim before total rewards update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - mockedOracle.claimAndUpdateTotalRewards( - totalRewards, - activatedValidators, - index, - account1, - tokens, - amounts, - proof, - { - from: anyone, - } - ), - 'SafeMath: subtraction overflow' + await multicallMock.claimAndUpdateTotalRewards( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, + index, + account1, + tokens, + amounts, + proof, + { + from: anyone, + } ); }); it('cannot claim before merkle root update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; - await mockedOracle.updateTotalRewards( + await oracles.submitRewards( totalRewards, - activatedValidators + activatedValidators, + rewardsSignatures, + { + from: oracleAccounts[0], + } ); await expectRevert( - mockedOracle.claimAndUpdateMerkleRoot( - merkleRoot, - merkleProofs, + multicallMock.claimAndUpdateMerkleRoot( + { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, index, account1, tokens, @@ -554,27 +714,57 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); it('can claim after merkle root update in the same block', async () => { - await mockedOracle.updateTotalRewards( + await oracles.submitRewards( totalRewards, - activatedValidators + activatedValidators, + rewardsSignatures, + { + from: oracleAccounts[0], + } ); const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - mockedOracle.updateMerkleRootAndClaim( - merkleRoot, - merkleProofs, - index, - account1, - tokens, - amounts, - proof, - { - from: anyone, - } - ), - 'SafeMath: subtraction overflow' + await multicallMock.updateMerkleRootAndClaim( + { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, + index, + account1, + tokens, + amounts, + proof, + { + from: anyone, + } ); }); }); }); + + describe('upgrading', () => { + it('fails to upgrade with not admin privilege', async () => { + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to upgrade when not paused', async () => { + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: admin, + }), + 'Pausable: not paused' + ); + }); + + it('fails to upgrade twice', async () => { + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: admin, + }), + 'MerkleDistributor: invalid Oracles address' + ); + }); + }); }); diff --git a/test/Proxies.test.js b/test/Proxies.test.js index c2c1e401..db828ae0 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -3,24 +3,26 @@ const { contractSettings, contracts } = require('../deployments/settings'); let proxies = [ contracts.pool, - contracts.validators, + contracts.poolValidators, + contracts.oracles, contracts.stakedEthToken, contracts.rewardEthToken, contracts.stakeWiseToken, - contracts.oracles, contracts.vestingEscrowFactory, contracts.merkleDistributor, + contracts.roles, ]; let implementations = [ - '0xc8970E7C07c251625F9F93cE510b1D9c1a08d299', - '0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90', + '0xe68E649862F7036094f1E4eD5d69a738aCDE666f', + '0xfa00515082fe90430C80DA9B299f353929653d7B', + '0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', - '0x610B58583642610967727fe4fadd125a92D6F678', + '0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', - '0xd3ea5BF3bB42542B5b64358C12F06233704e9b99', '0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf', - '0x459beef3c5Bd5D1E66de93AC908E278ee2488F14', + '0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC', + '0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C', ]; contract('Proxies', () => { @@ -46,7 +48,7 @@ contract('Proxies', () => { } }); - it('proxy admin admin owner is DAO', async () => { + it('proxy admin owner is DAO', async () => { expect(await proxyAdmin.owner()).to.equal(contractSettings.admin); }); }); diff --git a/test/Roles.test.js b/test/Roles.test.js new file mode 100644 index 00000000..414e216c --- /dev/null +++ b/test/Roles.test.js @@ -0,0 +1,171 @@ +const { + expectRevert, + expectEvent, + ether, + send, + BN, + constants, +} = require('@openzeppelin/test-helpers'); +const { upgradeContracts } = require('../deployments'); +const { contractSettings } = require('../deployments/settings'); +const { + stopImpersonatingAccount, + impersonateAccount, + resetFork, +} = require('./utils'); + +const Roles = artifacts.require('Roles'); + +contract('Roles', ([anyone, operator, partner]) => { + const admin = contractSettings.admin; + let revenueShare = new BN(3000); + let roles; + + after(async () => stopImpersonatingAccount(admin)); + + beforeEach(async () => { + await impersonateAccount(admin); + await send.ether(anyone, admin, ether('5')); + + let upgradedContracts = await upgradeContracts(); + roles = await Roles.at(upgradedContracts.roles); + }); + + afterEach(async () => resetFork()); + + describe('operators', () => { + it('not admin fails to set operator', async () => { + await expectRevert( + roles.setOperator(operator, revenueShare, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to set operator to zero address', async () => { + await expectRevert( + roles.setOperator(constants.ZERO_ADDRESS, revenueShare, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to set operator with invalid revenue share', async () => { + await expectRevert( + roles.setOperator(operator, new BN(10001), { + from: admin, + }), + 'Roles: invalid revenue share' + ); + }); + + it('fails to set operator when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.setOperator(operator, revenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('admin can set operator', async () => { + let receipt = await roles.setOperator(operator, revenueShare, { + from: admin, + }); + await expectEvent(receipt, 'OperatorUpdated', { + operator, + revenueShare, + }); + }); + + it('fails to remove zero address operator', async () => { + await expectRevert( + roles.removeOperator(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to remove operator when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.removeOperator(operator, { + from: admin, + }), + 'Pausable: paused' + ); + }); + }); + + describe('partners', () => { + it('not admin fails to set partner', async () => { + await expectRevert( + roles.setPartner(partner, revenueShare, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to set partner to zero address', async () => { + await expectRevert( + roles.setPartner(constants.ZERO_ADDRESS, revenueShare, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to set partner with invalid revenue share', async () => { + await expectRevert( + roles.setPartner(partner, new BN(10001), { + from: admin, + }), + 'Roles: invalid revenue share' + ); + }); + + it('fails to set partner when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.setPartner(partner, revenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('admin can set partner', async () => { + let receipt = await roles.setPartner(partner, revenueShare, { + from: admin, + }); + await expectEvent(receipt, 'PartnerUpdated', { + partner, + revenueShare, + }); + }); + + it('fails to remove zero address partner', async () => { + await expectRevert( + roles.removePartner(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to remove partner when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.removePartner(partner, { + from: admin, + }), + 'Pausable: paused' + ); + }); + }); +}); diff --git a/test/Validators.test.js b/test/Validators.test.js deleted file mode 100644 index c88a5689..00000000 --- a/test/Validators.test.js +++ /dev/null @@ -1,144 +0,0 @@ -const { - expectRevert, - expectEvent, - ether, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../deployments'); -const { validatorParams } = require('./pool/validatorParams'); -const { contractSettings, contracts } = require('../deployments/settings'); -const { - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('./utils'); - -const Pool = artifacts.require('Pool'); -const Validators = artifacts.require('Validators'); - -const validatorId = web3.utils.soliditySha3( - '0xb07ef3635f585b5baeb057a45e7337ab5ba2b1205b43fac3a46e0add8aab242b0fb35a54373ad809405ca05c9cbf34c7' -); -const validatorDeposit = ether('32'); - -contract('Validators', ([operator, anotherOperator, anyone]) => { - const admin = contractSettings.admin; - let pool, validators; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(anyone, admin, ether('5')); - - await upgradeContracts(); - pool = await Pool.at(contracts.pool); - validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - }); - - afterEach(async () => resetFork()); - - it('only collectors can register validators', async () => { - await expectRevert( - validators.register(validatorId, { - from: anyone, - }), - 'Validators: access denied' - ); - }); - - it('fails to register validator with paused contract', async () => { - await validators.pause({ from: admin }); - expect(await validators.paused()).equal(true); - let poolBalance = await balance.current(pool.address); - let depositAmount = validatorDeposit.sub(poolBalance); - await pool.addDeposit({ - from: anyone, - value: depositAmount, - }); - - await expectRevert( - pool.registerValidator(validatorParams[0], { - from: operator, - }), - 'Pausable: paused' - ); - }); - - describe('assigning operators', () => { - it('admin can assign operator role to another account', async () => { - const receipt = await validators.addOperator(anotherOperator, { - from: admin, - }); - expectEvent(receipt, 'RoleGranted', { - role: await validators.OPERATOR_ROLE(), - account: anotherOperator, - sender: admin, - }); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - expect(await validators.isOperator(admin)).equal(false); - expect(await validators.isOperator(anyone)).equal(false); - }); - - it('others cannot assign operator role to an account', async () => { - await expectRevert( - validators.addOperator(anotherOperator, { from: anyone }), - 'AccessControl: sender must be an admin to grant' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(false); - expect(await validators.isOperator(anyone)).equal(false); - }); - - it('operators cannot assign operator role to others', async () => { - await validators.addOperator(operator, { from: admin }); - await expectRevert( - validators.addOperator(anotherOperator, { from: operator }), - 'AccessControl: sender must be an admin to grant' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(false); - }); - }); - - describe('removing operators', () => { - beforeEach(async () => { - await validators.addOperator(operator, { from: admin }); - await validators.addOperator(anotherOperator, { from: admin }); - }); - - it('anyone cannot remove operators', async () => { - await expectRevert( - validators.removeOperator(operator, { from: anyone }), - 'AccessControl: sender must be an admin to revoke' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - - it('operator cannot remove other operators', async () => { - await expectRevert( - validators.removeOperator(anotherOperator, { from: operator }), - 'AccessControl: sender must be an admin to revoke' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - - it('admins can remove operators', async () => { - const receipt = await validators.removeOperator(operator, { - from: admin, - }); - expectEvent(receipt, 'RoleRevoked', { - role: await validators.OPERATOR_ROLE(), - account: operator, - sender: admin, - }); - expect(await validators.isOperator(operator)).equal(false); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - }); -}); diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 1ec9bad7..d7ce0452 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -6,29 +6,33 @@ const { ether, BN, send, - time, } = require('@openzeppelin/test-helpers'); const { impersonateAccount, stopImpersonatingAccount, resetFork, - getOracleAccounts, - setMerkleRoot, + setupOracleAccounts, setTotalRewards, } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); +const { + depositDataMerkleRoot, + depositData, +} = require('../pool/depositDataMerkleRoot'); const RewardEthToken = artifacts.require('RewardEthToken'); const Oracles = artifacts.require('Oracles'); const Pool = artifacts.require('Pool'); +const MulticallMock = artifacts.require('MulticallMock'); const MerkleDistributor = artifacts.require('MerkleDistributor'); -const OracleMock = artifacts.require('OracleMock'); +const PoolValidators = artifacts.require('PoolValidators'); +const iDepositContract = artifacts.require('IDepositContract'); -contract('Oracles', ([_, ...accounts]) => { +contract('Oracles', ([_, anyone, operator, ...accounts]) => { let admin = contractSettings.admin; - let oracles, rewardEthToken, pool, merkleDistributor; - let [oracle, anotherOracle, anyone] = accounts; + let oracles, rewardEthToken, pool, merkleDistributor, poolValidators; + let [oracle, anotherOracle] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -38,12 +42,11 @@ contract('Oracles', ([_, ...accounts]) => { let upgradedContracts = await upgradeContracts(); - oracles = await Oracles.at(contracts.oracles); + oracles = await Oracles.at(upgradedContracts.oracles); pool = await Pool.at(contracts.pool); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - merkleDistributor = await MerkleDistributor.at( - upgradedContracts.merkleDistributor - ); + merkleDistributor = await MerkleDistributor.at(contracts.merkleDistributor); + poolValidators = await PoolValidators.at(upgradedContracts.poolValidators); }); afterEach(async () => resetFork()); @@ -58,6 +61,9 @@ contract('Oracles', ([_, ...accounts]) => { account: oracle, sender: admin, }); + expectEvent(receipt, 'OracleAdded', { + oracle, + }); expect(await oracles.isOracle(oracle)).equal(true); expect(await oracles.isOracle(admin)).equal(false); expect(await oracles.isOracle(anyone)).equal(false); @@ -65,7 +71,9 @@ contract('Oracles', ([_, ...accounts]) => { it('others cannot assign oracle role to an account', async () => { await expectRevert( - oracles.addOracle(oracle, { from: anyone }), + oracles.addOracle(oracle, { + from: anyone, + }), 'AccessControl: sender must be an admin to grant' ); expect(await oracles.isOracle(oracle)).equal(false); @@ -73,7 +81,9 @@ contract('Oracles', ([_, ...accounts]) => { }); it('oracles cannot assign oracle role to others', async () => { - await oracles.addOracle(oracle, { from: admin }); + await oracles.addOracle(oracle, { + from: admin, + }); await expectRevert( oracles.addOracle(anotherOracle, { from: oracle }), 'AccessControl: sender must be an admin to grant' @@ -85,7 +95,9 @@ contract('Oracles', ([_, ...accounts]) => { describe('removing', () => { beforeEach(async () => { - await oracles.addOracle(oracle, { from: admin }); + await oracles.addOracle(oracle, { + from: admin, + }); await oracles.addOracle(anotherOracle, { from: admin }); }); @@ -121,92 +133,49 @@ contract('Oracles', ([_, ...accounts]) => { }); }); - describe('oracles sync period', () => { - it('admin user can update sync period', async () => { - let newSyncPeriod = new BN('700'); - const receipt = await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - expectEvent(receipt, 'SyncPeriodUpdated', { - syncPeriod: newSyncPeriod, - sender: admin, - }); - expect(await oracles.syncPeriod()).bignumber.equal(newSyncPeriod); - }); - - it('anyone cannot update oracles sync period', async () => { - let newSyncPeriod = new BN('700'); - await expectRevert( - oracles.setSyncPeriod(newSyncPeriod, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - expect(await oracles.syncPeriod()).bignumber.equal( - new BN(contractSettings.syncPeriod) - ); - }); - - it('cannot update oracles sync period when voting for rewards', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(newSyncPeriod)); - - await expectRevert( - oracles.setSyncPeriod(new BN('900'), { - from: admin, - }), - 'Oracles: cannot update during voting' - ); - expect(await oracles.syncPeriod()).bignumber.equal(newSyncPeriod); - }); - }); - describe('rewards voting', () => { let prevTotalRewards, newTotalRewards, currentNonce, - pendingValidators, - activatedValidators, + newActivatedValidators, oracleAccounts, - candidateId; + candidateId, + signatures; beforeEach(async () => { - oracleAccounts = await getOracleAccounts({ oracles }); - for (const oracleAccount of oracleAccounts) { - await send.ether(anyone, oracleAccount, ether('2')); - } - + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); prevTotalRewards = await rewardEthToken.totalRewards(); newTotalRewards = prevTotalRewards.add(ether('10')); - currentNonce = await oracles.currentNonce(); - - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = new BN(contractSettings.pendingValidators); + currentNonce = await oracles.currentRewardsNonce(); + newActivatedValidators = (await pool.activatedValidators()).add( + await pool.pendingValidators() + ); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), + newActivatedValidators.toString(), newTotalRewards.toString(), - activatedValidators.toString(), ] ); candidateId = keccak256(encoded); + + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } }); - it('fails to vote when contract is paused', async () => { + it('fails to submit when contract is paused', async () => { await oracles.pause({ from: admin }); expect(await oracles.paused()).equal(true); await expectRevert( - oracles.voteForRewards( - currentNonce, + oracles.submitRewards( newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } @@ -215,251 +184,97 @@ contract('Oracles', ([_, ...accounts]) => { ); }); - it('only oracle can submit vote', async () => { + it('fails to submit with not enough signatures', async () => { await expectRevert( - oracles.voteForRewards( - currentNonce, + oracles.submitRewards( newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures.slice(signatures.length - 1), { - from: anyone, + from: oracleAccounts[0], } ), - 'Oracles: access denied' + 'Oracles: invalid number of signatures' ); }); - it('cannot vote twice', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - await oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: oracleAccounts[0], - } - ); - - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true - ); - + it('fails to submit with invalid signature', async () => { + signatures[0] = await web3.eth.sign(candidateId, anyone); await expectRevert( - oracles.voteForRewards( - currentNonce, + oracles.submitRewards( newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: already voted' + 'Oracles: invalid signer' ); }); - it('cannot vote too early', async () => { + it('fails to submit with repeated signature', async () => { + signatures.push(signatures[0]); await expectRevert( - oracles.voteForRewards( - currentNonce, + oracles.submitRewards( newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: too early vote' + 'Oracles: repeated signature' ); }); - it('does not submit new data when not enough votes', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.submitRewards( + newTotalRewards, + newActivatedValidators, + signatures, + { + from: anyone, + } + ), + 'Oracles: access denied' ); + }); - const receipt = await oracles.voteForRewards( - currentNonce, + it('submits data with enough signatures', async () => { + let receipt = await oracles.submitRewards( newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ); - expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[0], - totalRewards: newTotalRewards, - activatedValidators, - nonce: currentNonce, - }); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true - ); - expect(await rewardEthToken.totalRewards()).to.bignumber.equal( - prevTotalRewards - ); - expect(await pool.activatedValidators()).to.bignumber.equal( - new BN(activatedValidators) - ); - expect(await pool.pendingValidators()).to.bignumber.equal( - pendingValidators - ); - }); - - it('submits data when enough votes collected', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - let newActivatedValidators = activatedValidators.add(pendingValidators); - let encoded = defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256'], - [ - currentNonce.toString(), - newTotalRewards.toString(), - newActivatedValidators.toString(), - ] - ); - let candidateId = keccak256(encoded); - - for (let i = 0; i < oracleAccounts.length; i++) { - let receipt = await oracles.voteForRewards( - currentNonce, - newTotalRewards, - newActivatedValidators, - { - from: oracleAccounts[i], - } - ); - if (!prevTotalRewards.eq(await rewardEthToken.totalRewards())) { - // data submitted - break; - } - expect(await oracles.hasVote(oracleAccounts[i], candidateId)).to.equal( - true - ); + // check signatures + for (const oracleAccount of oracleAccounts) { expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[i], + oracle: oracleAccount, totalRewards: newTotalRewards, activatedValidators: newActivatedValidators, nonce: currentNonce, }); } - // update submitted + // check values updates expect(await rewardEthToken.totalRewards()).to.bignumber.equal( newTotalRewards ); - expect(await pool.activatedValidators()).to.bignumber.equal( - newActivatedValidators - ); - expect(await pool.pendingValidators()).to.bignumber.equal(new BN(0)); - - lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(newSyncPeriod)); - - // nonce has incremented - await expectRevert( - oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: oracleAccounts[0], - } - ), - 'Oracles: invalid nonce' - ); - - // new vote comes with different nonce - let receipt = await oracles.voteForRewards( - currentNonce.add(new BN(1)), - newTotalRewards, - newActivatedValidators, - { - from: oracleAccounts[0], - } - ); - - // previous vote cleaned up - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - false - ); - encoded = defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256'], - [ - currentNonce.add(new BN(1)).toString(), - newTotalRewards.toString(), - newActivatedValidators.toString(), - ] - ); - let candidateId2 = keccak256(encoded); - - // new vote comes with an increased vote ID - expect(await oracles.hasVote(oracleAccounts[0], candidateId2)).to.equal( - true - ); - expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[0], - totalRewards: newTotalRewards, - activatedValidators: newActivatedValidators, - nonce: currentNonce.add(new BN(1)), - }); - }); - - it('does not update activation data when did not change', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = await pool.pendingValidators(); - - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if (!prevTotalRewards.eq(await rewardEthToken.totalRewards())) { - // data submitted - break; - } - } // update submitted expect(await rewardEthToken.totalRewards()).to.bignumber.equal( newTotalRewards ); expect(await pool.activatedValidators()).to.bignumber.equal( - activatedValidators - ); - expect(await pool.pendingValidators()).to.bignumber.equal( - pendingValidators + newActivatedValidators ); + expect(await pool.pendingValidators()).to.bignumber.equal(new BN(0)); }); }); @@ -468,75 +283,133 @@ contract('Oracles', ([_, ...accounts]) => { '0xa3e724fce28a564a7908e40994bd8f48ed4470ffcab4c135fe661bcf5b15afe6'; const merkleProofs = 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; - let currentNonce, oracleAccounts, candidateId; + let currentNonce, oracleAccounts, candidateId, signatures; beforeEach(async () => { - oracleAccounts = await getOracleAccounts({ oracles }); - for (const oracleAccount of oracleAccounts) { - await send.ether(anyone, oracleAccount, ether('2')); - } - currentNonce = await oracles.currentNonce(); + let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); + await setTotalRewards({ + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + + currentNonce = await oracles.currentRewardsNonce(); + let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] + ['uint256', 'string', 'bytes32'], + [ + currentNonce.toString(), + merkleProofs.toString(), + merkleRoot.toString(), + ] ); candidateId = keccak256(encoded); + + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } }); - it('fails to vote when contract is paused', async () => { + it('fails to submit when contract is paused', async () => { await oracles.pause({ from: admin }); expect(await oracles.paused()).equal(true); await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { from: oracleAccounts[0], }), 'Pausable: paused' ); }); - it('only oracle can submit vote', async () => { + it('fails to submit too early', async () => { + await oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }); + await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: anyone, + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], }), - 'Oracles: access denied' + 'Oracles: too early' ); }); - it('cannot vote twice', async () => { - await oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }); - - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] + it('fails to submit with not enough signatures', async () => { + await expectRevert( + oracles.submitMerkleRoot( + merkleRoot, + merkleProofs, + signatures.slice(signatures.length - 1), + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid number of signatures' ); - let candidateId = keccak256(encoded); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true + }); + + it('fails to submit with invalid signature', async () => { + signatures[0] = await web3.eth.sign(candidateId, anyone); + await expectRevert( + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }), + 'Oracles: invalid signer' ); + }); + it('fails to submit with repeated signature', async () => { + signatures.push(signatures[0]); await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { from: oracleAccounts[0], }), - 'Oracles: already voted' + 'Oracles: repeated signature' ); }); - it('fails to vote for total rewards and merkle root in same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: anyone, + }), + 'Oracles: access denied' + ); + }); + + it('submits data with enough signatures', async () => { + let receipt = await oracles.submitMerkleRoot( + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } + ); + + // check signatures + for (const oracleAccount of oracleAccounts) { + expectEvent(receipt, 'MerkleRootVoteSubmitted', { + oracle: oracleAccount, + merkleRoot, + merkleProofs, + nonce: currentNonce, }); } + // check values updates + expect(await merkleDistributor.merkleRoot()).equal(merkleRoot); + }); + + it('fails to vote for total rewards and merkle root in same block', async () => { // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, + let mockedOracle = await MulticallMock.new( + oracles.address, contracts.stakedEthToken, contracts.rewardEthToken, merkleDistributor.address @@ -545,158 +418,193 @@ contract('Oracles', ([_, ...accounts]) => { from: admin, }); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - await expectRevert( - mockedOracle.updateTotalRewardsAndMerkleRoot( - totalRewards, - activatedValidators, - merkleRoot, - merkleProofs, - { - from: anyone, - } - ), - 'Oracles: too early vote' + // create rewards signatures + let currentNonce = await oracles.currentRewardsNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + activatedValidators.toString(), + totalRewards.toString(), + ] ); - }); + candidateId = keccak256(encoded); + let rewardSignatures = []; + for (const oracleAccount of oracleAccounts) { + rewardSignatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } - it('cannot vote too early', async () => { - await setMerkleRoot({ - merkleDistributor, - merkleRoot, - merkleProofs, - oracles, - oracleAccounts, - }); + // create merkle root signatures + currentNonce = await oracles.currentRewardsNonce(); + encoded = defaultAbiCoder.encode( + ['uint256', 'string', 'bytes32'], + [currentNonce.toString(), merkleProofs, merkleRoot] + ); + candidateId = keccak256(encoded); + let merkleRootSignatures = []; + for (const oracleAccount of oracleAccounts) { + merkleRootSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } await expectRevert( - oracles.voteForMerkleRoot( - currentNonce.add(new BN(1)), - merkleRoot, - merkleProofs, + mockedOracle.updateTotalRewardsAndMerkleRoot( { - from: oracleAccounts[0], + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardSignatures, + }, + { + merkleRoot, + merkleProofs, + signatures: merkleRootSignatures, + }, + { + from: anyone, } ), - 'Oracles: too early vote' + 'Oracles: too early' ); }); + }); - it('does not submit new data when not enough votes', async () => { - const receipt = await oracles.voteForMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, + describe('validator voting', () => { + const depositDataMerkleProofs = + 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; + let { + publicKey, + signature, + depositDataRoot, + withdrawalCredentials, + merkleProof, + } = depositData[0]; + let currentNonce, + oracleAccounts, + candidateId, + signatures, + validatorsDepositRoot; + let validatorData = { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }; + + beforeEach(async () => { + await poolValidators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, { - from: oracleAccounts[0], + from: admin, } ); - - expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[0], - merkleRoot, - merkleProofs, - nonce: currentNonce, + await poolValidators.commitOperator({ + from: operator, }); - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] - ); - let candidateId = keccak256(encoded); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); + currentNonce = await oracles.currentValidatorsNonce(); + + let depositContract = await iDepositContract.at( + await pool.validatorRegistration() ); - expect(await merkleDistributor.merkleRoot()).to.not.equal(merkleRoot); - }); + validatorsDepositRoot = await depositContract.get_deposit_root(); - it('submits data when enough votes collected', async () => { - for (let i = 0; i < oracleAccounts.length; i++) { - let receipt = await oracles.voteForMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - { - from: oracleAccounts[i], - } - ); - if ((await merkleDistributor.merkleRoot()) === merkleRoot) { - break; - } + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes', 'address', 'bytes32'], + [currentNonce.toString(), publicKey, operator, validatorsDepositRoot] + ); + candidateId = keccak256(encoded); - expect(await oracles.hasVote(oracleAccounts[i], candidateId)).to.equal( - true - ); - expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[i], - merkleRoot, - merkleProofs, - nonce: currentNonce, - }); + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); } + }); - // update submitted - expect(await merkleDistributor.merkleRoot()).to.equal(merkleRoot); + it('fails to submit when contract is paused', async () => { + await oracles.pause({ from: admin }); + expect(await oracles.paused()).equal(true); - // nonce has incremented await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }), - 'Oracles: invalid nonce' + oracles.registerValidator( + validatorData, + merkleProof, + validatorsDepositRoot, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Pausable: paused' ); + }); - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - await setTotalRewards({ - admin, - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - - // new vote comes with different nonce - let receipt = await oracles.voteForMerkleRoot( - currentNonce.add(new BN(2)), - merkleRoot, - merkleProofs, - { - from: oracleAccounts[0], - } + it('fails to submit with not enough signatures', async () => { + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsDepositRoot, + signatures.slice(signatures.length - 1), + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid number of signatures' ); + }); - // previous vote cleaned up - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - false + it('fails to submit with invalid signature', async () => { + signatures[0] = await web3.eth.sign(candidateId, anyone); + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsDepositRoot, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid signer' ); - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.add(new BN(2)).toString(), merkleRoot, merkleProofs] + }); + + it('fails to submit with repeated signature', async () => { + signatures.push(signatures[0]); + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsDepositRoot, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: repeated signature' ); - let candidateId2 = keccak256(encoded); + }); - // new vote comes with an increased vote ID - expect(await oracles.hasVote(oracleAccounts[0], candidateId2)).to.equal( - true + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsDepositRoot, + signatures, + { + from: anyone, + } + ), + 'Oracles: access denied' ); - expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[0], - merkleRoot, - merkleProofs, - nonce: currentNonce.add(new BN(2)), - }); }); }); }); diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js deleted file mode 100644 index ba899ed2..00000000 --- a/test/oracles/upgrading.test.js +++ /dev/null @@ -1,55 +0,0 @@ -const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { upgradeContracts } = require('../../deployments'); -const { - impersonateAccount, - stopImpersonatingAccount, - resetFork, -} = require('../utils'); - -const Oracles = artifacts.require('Oracles'); - -contract('Oracles (upgrading)', ([anyone]) => { - let admin = contractSettings.admin; - let oracles, merkleDistributor; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(anyone, admin, ether('5')); - - oracles = await Oracles.at(contracts.oracles); - ({ merkleDistributor } = await upgradeContracts()); - }); - - afterEach(async () => resetFork()); - - it('fails to upgrade with not admin privilege', async () => { - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - }); - - it('fails to upgrade when not paused', async () => { - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: admin, - }), - 'Pausable: not paused' - ); - }); - - it('fails to upgrade twice', async () => { - await oracles.pause({ from: admin }); - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: admin, - }), - 'Oracles: already upgraded' - ); - }); -}); diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js new file mode 100644 index 00000000..f4dc767a --- /dev/null +++ b/test/pool/PoolValidators.test.js @@ -0,0 +1,464 @@ +const { + expectRevert, + expectEvent, + ether, + balance, + send, + constants, +} = require('@openzeppelin/test-helpers'); +const { keccak256, defaultAbiCoder } = require('ethers/lib/utils'); +const { upgradeContracts } = require('../../deployments'); +const { contractSettings, contracts } = require('../../deployments/settings'); +const { + registerValidator, + setupOracleAccounts, + stopImpersonatingAccount, + impersonateAccount, + resetFork, + checkValidatorRegistered, +} = require('../utils'); +const { + depositData, + depositDataMerkleRoot, +} = require('./depositDataMerkleRoot'); + +const Pool = artifacts.require('Pool'); +const PoolValidators = artifacts.require('PoolValidators'); +const Oracles = artifacts.require('Oracles'); +const iDepositContract = artifacts.require('IDepositContract'); + +contract('Pool Validators', (accounts) => { + const admin = contractSettings.admin; + const validatorDeposit = ether('32'); + const depositDataMerkleProofs = + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs'; + let pool, + validators, + validatorDepositAmount, + oracleAccounts, + oracles, + depositContract, + validatorsDepositRoot; + let [operator, anyone, ...otherAccounts] = accounts; + + after(async () => stopImpersonatingAccount(admin)); + + beforeEach(async () => { + await impersonateAccount(admin); + await send.ether(anyone, admin, ether('5')); + + let upgradedContracts = await upgradeContracts(); + pool = await Pool.at(contracts.pool); + depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorDepositAmount = await pool.VALIDATOR_TOTAL_DEPOSIT(); + validatorsDepositRoot = await depositContract.get_deposit_root(); + + validators = await PoolValidators.at(upgradedContracts.poolValidators); + + // collect validator deposit + let poolBalance = await balance.current(pool.address); + let depositAmount = validatorDeposit.sub(poolBalance.mod(validatorDeposit)); + await pool.stake({ + from: anyone, + value: depositAmount, + }); + + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); + }); + + afterEach(async () => resetFork()); + + describe('add operator', () => { + it('fails to add with not admin privilege', async () => { + await expectRevert( + validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: anyone, + } + ), + 'OwnablePausable: access denied' + ); + }); + + it('fails to add with zero operator address', async () => { + await expectRevert( + validators.addOperator( + constants.ZERO_ADDRESS, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to add with invalid merkle root', async () => { + await expectRevert( + validators.addOperator( + operator, + constants.ZERO_BYTES32, + depositDataMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle root' + ); + }); + + it('fails to add with invalid merkle proofs', async () => { + await expectRevert( + validators.addOperator(operator, depositDataMerkleRoot, '', { + from: admin, + }), + 'PoolValidators: invalid merkle proofs' + ); + }); + + it('can update existing operator', async () => { + await validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + + let depositDataMerkleRoot2 = + '0x2a6d4eed3ba81bd99efdfd31333e244bb84989cfadbf9ddbf8fabd7296099bc0'; + + let receipt = await validators.addOperator( + operator, + depositDataMerkleRoot2, + depositDataMerkleProofs, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OperatorAdded', { + operator, + depositDataMerkleRoot: depositDataMerkleRoot2, + depositDataMerkleProofs, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(depositDataMerkleRoot2); + expect(_operator[1]).to.equal(false); + }); + + it('can add new operator', async () => { + let receipt = await validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OperatorAdded', { + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(depositDataMerkleRoot); + expect(_operator[1]).to.equal(false); + }); + }); + + describe('remove operator', () => { + beforeEach(async () => { + await validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to remove by user other than admin and operator', async () => { + await expectRevert( + validators.removeOperator(operator, { + from: anyone, + }), + 'PoolValidators: access denied' + ); + }); + + it('fails to remove not existing operator', async () => { + await expectRevert( + validators.removeOperator(anyone, { + from: admin, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('operator or admin can remove operator', async () => { + let receipt = await validators.removeOperator(operator, { + from: admin, + }); + + await expectEvent(receipt, 'OperatorRemoved', { + sender: admin, + operator, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(constants.ZERO_BYTES32); + expect(_operator[1]).to.equal(false); + }); + }); + + describe('commit operator', () => { + beforeEach(async () => { + await validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to commit invalid operator', async () => { + await expectRevert( + validators.commitOperator({ + from: anyone, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to commit operator twice', async () => { + await validators.commitOperator({ + from: operator, + }); + await expectRevert( + validators.commitOperator({ + from: operator, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('can commit operator', async () => { + let receipt = await validators.commitOperator({ + from: operator, + }); + + await expectEvent(receipt, 'OperatorCommitted', { + operator, + }); + }); + }); + + describe('register validator', () => { + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = depositData[0]; + + beforeEach(async () => { + await validators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to register validator by not oracles', async () => { + await expectRevert( + validators.registerValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: anyone, + } + ), + 'PoolValidators: access denied' + ); + }); + + it('fails to register validator for not committed operator', async () => { + await expectRevert( + registerValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + validatorsDepositRoot, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to register validator twice', async () => { + await validators.commitOperator({ + from: operator, + }); + await registerValidator({ + operator, + merkleProof, + signature, + publicKey, + withdrawalCredentials, + depositDataRoot, + oracles, + oracleAccounts, + validatorsDepositRoot, + }); + + await expectRevert( + registerValidator({ + operator, + merkleProof, + signature, + publicKey, + withdrawalCredentials, + depositDataRoot, + oracles, + oracleAccounts, + validatorsDepositRoot: await depositContract.get_deposit_root(), + }), + 'PoolValidators: validator already registered' + ); + }); + + it('fails to register for invalid operator', async () => { + await validators.commitOperator({ + from: operator, + }); + await expectRevert( + registerValidator({ + operator: anyone, + merkleProof, + signature, + publicKey, + withdrawalCredentials, + depositDataRoot, + oracles, + oracleAccounts, + validatorsDepositRoot, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to register for invalid deposit data', async () => { + await validators.commitOperator({ + from: operator, + }); + await expectRevert( + registerValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot: constants.ZERO_BYTES32, + oracles, + oracleAccounts, + withdrawalCredentials, + validatorsDepositRoot, + }), + 'PoolValidators: invalid merkle proof' + ); + }); + + it('fails to register with invalid validators deposit root', async () => { + await validators.commitOperator({ + from: operator, + }); + await expectRevert( + registerValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + validatorsDepositRoot: keccak256('0x6be4000000000000'), + }), + 'Oracles: invalid validators deposit root' + ); + }); + + it('oracles can register validator', async () => { + await validators.commitOperator({ + from: operator, + }); + + let poolBalance = await balance.current(pool.address); + let receipt = await registerValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + validatorsDepositRoot, + }); + + await expectEvent.inTransaction(receipt.tx, Pool, 'ValidatorRegistered', { + operator, + publicKey, + }); + expect( + await validators.isValidatorRegistered( + keccak256(defaultAbiCoder.encode(['bytes'], [publicKey])) + ) + ).to.equal(true); + let _operator = await validators.getOperator(operator); + expect(_operator[1]).to.equal(true); + expect(await balance.current(pool.address)).to.bignumber.equal( + poolBalance.sub(validatorDepositAmount) + ); + await checkValidatorRegistered({ + transaction: receipt.tx, + pubKey: publicKey, + withdrawalCredentials, + signature, + validatorDepositAmount, + }); + }); + }); +}); diff --git a/test/pool/depositDataMerkleRoot.js b/test/pool/depositDataMerkleRoot.js new file mode 100644 index 00000000..6522d03d --- /dev/null +++ b/test/pool/depositDataMerkleRoot.js @@ -0,0 +1,362 @@ +const depositDataMerkleRoot = + '0x29d7fc50216bc4cba49c0d8b31a1051a2d7cb48382d785009c7da0ea2702cc8e'; + +const depositData = [ + { + amount: '32000000000000000000', + depositDataRoot: + '0xcccacf8386b796d725a67bc7052158f5753f7ced36d9e1a6ace3ff53a966b4d1', + merkleProof: [ + '0x6821b132933b9e1771d14d8a69100cf73ed24bfb0e2b96a61968d90c38aa3326', + '0xdc020283d5739e700bb84135acbf0d09953e7b77ba8a18e8cc0067ad373631cf', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb6495cc4ce37cb5627dfbb1226b2973bc1069b8f9b6b1ec4c3e551cbc6b1534a7cb4f820f768bb24c153caf7157835cf', + signature: + '0xa418a527998cd1f6f81659efa876edfa524ce0b3e44f0695bfca3de95f95fce6b36bf3dda012d4de30a343a50cf1b60e0bfe074ba4dcc06054e21494076a69175c42b05d0a1ec7eaa9e8d260607a50e29dd3d658127d95e6bdffebe6206927e3', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x81418e8cb990c55f74fdd8cefb9989eb2f98b079a706017e0841488aeb829fd2', + merkleProof: [ + '0x09aa891bc0370a422b246c317d4a587fa6a252b54ae0052243952eb0843324ef', + '0xd2547f9c37c08d6a47c33046b8020dc0b4c228b0a90b1d0afea1521c9d41772f', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa90cfb18b6fc9a0acd26e37f43c18081aab4c9c337639730daca683f1cb15230b49b143dae9151fe76d2d95c6fb10423', + signature: + '0x8ce693531c9de86e5864830fdd4fd93b54cd2817cb564caf1fe6547d6affe683348dc140e43fe1d51b50aba8858b619f0040ed309446a22d23fbe0720a60a35b2c932d7e83ce9ed6f0baebc213e3a6cd13e3e88b2b52b268356deabf4cabb7c8', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x9052ff21f1675a72b4fdc3b2193dde9ff513826c92d09cf93529ea352606f043', + merkleProof: [ + '0xe4270c6e26bc957269912710be0f40a9b5c83dfbb0f02124aa0c3777202f8e10', + '0xd8364e8622fe07611c160ce421d1ed49eeed8e52549ad3ed3beac60b3bcecefe', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xb5e181843ecff8a563c17ec7ce897ee5b9ad90f2dc9fdd814c9890cfdaa796307e4178ca8ae62bd5101a69f8b4dffe38', + signature: + '0x96b73715512d295e5429e5648a50b9eee2df198702c0a18c635aee7ff2840363d7c5d4478b2b2ec6729922960ecd7b2b106288e7775c0ceb21933d23a848eaf4ca214e4bc4ab5757ad8516e07586ea3e81fbcd51d61b148d1e77140ddb2031e1', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x5a1eec35a4ee86d3114a28372ec81c21fcf8617deb5c9cf78b7cb06ad29e7150', + merkleProof: [ + '0xc07cff912f1b3d3080af217d15d6d96ccb140ced91b2a513899764e779b60887', + '0xd8364e8622fe07611c160ce421d1ed49eeed8e52549ad3ed3beac60b3bcecefe', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xaf3679b497b43c7fe5eb730fb3e7535fa98e98bc6ec0e92495f6127cddd64b7d113ce8f3b92498b4bfec392940373778', + signature: + '0x8fc88068283fa6eff542024dd6b359f171add8be6b71b738478d291015f936f6fde9a086308c4c8607742991093c973f06eb19ff118f17ccaf21c13147777eb5606fa71ca7e30aca2615f2f6b7f20b5d0c6fc5e097c265dadcdf47461c06587a', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x5b0e24581f97a974485bcbbae392dbe729f4f0a29a833a4857fe8c7b56a3d239', + merkleProof: [ + '0x9c3ff00ce6bd4c1098571e73f83db7ad4a3f53429515b208fa738441bd4f7a0d', + '0x0b1d9c2f398810bf35a66345d87f36a177326184150ac0427b49addc9a568c04', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x8c8352d83b677cbc577a61c7bfb6838cb21cb3e18a4ab3152a266b122bcccbb11cd81885854cf9c4f277f76d32caa3d6', + signature: + '0xa930d46042d38c34b4cf6dda30be5c3d234f1a45f18493c2c86e47a3ece4e22873ddb190c047c901f80d58e70012952c109b66de19b419d30cbefbde3e3277fbcd081b7d8d3331fb62dd5e93a96e0d2cb0486a2d9642c57d87c441ed354f668e', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x20d42807c1af7740bd7d8a9eedebc47e77ac83db644bd89c2e8643477ee83cd7', + merkleProof: [ + '0x4f0cb8a7ea47f382704393338d2d52840bcf5f53fe1d23dff871ac7d0ad220bc', + '0x4f3814db1d48a3699ab7700e319563a2d90332032f92b34c0cf9d397f14b39c8', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x9944d852ab7906fc6043d428e44c70f6661239b74a835571c0229fa16b45fb93d6a33a7723f2d282de306b7ecfb8dc42', + signature: + '0x82de46cc24f229a5ddc0d0cb2daef6bf0aede690ab8e6d002d57ad66c000142023dbc4b185c23c63c5f61f97f6238cf015713a7a9a952e6866fa2220228cef1adfed9dcd2374182c6e1924bc070712ab2472a10f16963274ff3959e40db8dc35', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x3594430dfa971714c1856fa175541f36f67ab107bde20ba154cd0df964ec5d12', + merkleProof: [ + '0xfec450d516e35341b8074848c6a967edf4f36066a15ca51c9f1bf0243b5e2b60', + '0x8ff3bb2fbdeabe68c1a118306dc3ffa308bd347c2afab3070fc121b649ec77b4', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0x8d17cbdcf72b872d6022797042ddedb4c60ba0934380d22628fabd84e51a95e82408f08cf12642979c73b87ed635ea43', + signature: + '0x96a8eb7ffb2b5c3ec2f1015cd4eb0945f962e956b7f3605c1bdf9cc7155142c3f51ab04ebd3f3e1bb4eef8c898e571cd0b8e1788cce56f8b3a2a9d12f8f37372f340e35d5cb0dae761f28a470d12e28a5082a48cf56192ccf1f7dfab70df3ab4', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xd2daf3e37076e68a21474066d502fa10a33d8b22c72407678a0287c7d1859998', + merkleProof: [ + '0x7d028b488b7a88fbe994c99e9360397f2c5f66dc8aca00512bcdb7bc34f72967', + '0x1c16b21f531964c4b4ce9ae8eb342e2bde26db2ff2d46a8d371a7c623cdbadd0', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa9c2d1b8e410f9c0fddb4acc0afaec7d7f533281aadbf16025419c3b0a59661493e4a7c82f3be8bef13ef74237db1f03', + signature: + '0xa33e1426452bf374e14f76600f259587bfd178630575fec125e24a7877bfca1ab57394bfdb8f19b7e8e1a12d7ca556c8010698cc1d0f3462e6d5099f2c65cd09b6d4e8beb19daf6432d90a7ad472add4329afde4ad71c90f867a7c00ad6a669b', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x2365533b2eb7e07b34046c5cc82ae53f3ddf79c48a213dae680383b742a1c609', + merkleProof: [ + '0x484b461380d9e6d2e29983dcd6279a55f6900877ae8f361d25b77cd3c6b5776f', + '0x8e55d7e28f72c09f34a2e0f674d738e84abdb969e77b973702944478392edbb5', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb7a67bf5be7dfb70b0aa131aac42ae32f741f780a274e25cb8341bcbc23ba226394b12ac98c529c1d01d94e1e20e7656', + signature: + '0x93f57ca32e437fb4db288e55513452b7cbab3d4b7a0829ea0f04e17a1551e3347b5014f3276c74ed8f03335fbdc597dd0217454959ca3e5ebb22324d747ea91f420e9cd5ab8659e620b1e2ff791a96dfc89fdd12072a1447c91a6b145f70c820', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x1eb358a759b2c82a86f760b4a21d837a489ee11e271173fbf21885915d44d5e6', + merkleProof: [ + '0x73ee03c3e7f8a0e7b98095c90fb9961143577dd815699e7514027622649acfa4', + '0xdc020283d5739e700bb84135acbf0d09953e7b77ba8a18e8cc0067ad373631cf', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x86fcb52d578aeaf519f3d47efb2f2b09cb6ab46f88026d7eae6fca9dc7c285ebdae663d848b552a2041ee80a25617b6f', + signature: + '0xb324d2fcf2df124b9a711fb6b7afce722dd182a1942d64660639ff656aa120b872206c4d7eec9339b724cb19901591b202cedeb0821bb0b9b3cc0dd71e0fba9086aa186c9b73b7f7e6f5355cabc99324882a784340e4ca6191fbe1b1f336c46d', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xb6faa5db13a6e6ecf125030970d83c6bccadd5b6eee5536daf088283b3754e24', + merkleProof: [ + '0x1af76be7cf21381b86842912a011353d792f25967d5567db5582c46a4e28d778', + '0xd2547f9c37c08d6a47c33046b8020dc0b4c228b0a90b1d0afea1521c9d41772f', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa2791e7200433a48a65b8440a316d6d4b1aebbefb475d20214d48d0c6f8a4213be32431b2e1b0438f2742600b2eab79b', + signature: + '0xa0a1165b939f298127ca5558946b0522a7d942965765bc3f36b68e0f63627bea8d339b0f19e6ca09ae70da5b59f06bc214b9e7ab2c83e6ddca65e1389e753f5826f6d9293114feba0bde7f2187a99688342abcc082c6fe31bfb19f7036daf322', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xf20f651e145cf2be6d39298977a79c83bd53cf20d91e5a7fcd1c5158d526798b', + merkleProof: [ + '0xba1702e0c13916f2382891d6a3da9bd39a590f5d7a333c4e8a59b9f48271f206', + '0xd71b3a963a6b1f58198dd731c834f828b1faccfe5b3fa52c0bdcfd83cf3c6eb9', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb11100b9789fd0a6edb847f37d71a2c75e486f5b2f0edf652fa5d8df4efd1f13263db2e93ca1faccbc021ff3ab743fb0', + signature: + '0x92207c189dec07386398899a42fc5be9c117cf33d35be363fd7ea687bda5b63b561f5d375c9dd15b5bb7b643c2b140ac134128c301a3b885777037b60459a0a206a58efd6c48b1ef587ffc6508aded968f2a6a38a747950f4425cf596c368b22', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xae1d94310fdd58d4004ebc96add719a1e243252a479698308b267af78499076a', + merkleProof: [ + '0x741c78665be5fc4ecad84b73834afb70c6a7720d5c4c92c4bd2f958bb7a7c139', + '0x1c16b21f531964c4b4ce9ae8eb342e2bde26db2ff2d46a8d371a7c623cdbadd0', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa12c8b578215a93cd83ba31810b24027f4175a2321105fc98b4dcdbaadc3fa5576a7ac32c06dbd4fd8f77600692d074a', + signature: + '0xb766531b6dcaf92d33190b33ed4e36ace04dc96409f3f1653333930f573a43a1271375e20a5037cf8e654320e954dd41094ecca6061f28ff7492fe68063753fe60f38036b06ce585eb9e14f89d785902d84cf9b19ac2dbf3c1397f22a56f5dd8', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x84ad0525a837c2c717de29faddb6ac7b55f4a769139f73a3ad3f739cee08bde3', + merkleProof: [ + '0xa9e7754329d37b273cb687a3c72bab97fb46b72e9fb8074e3094e4014c7f4db0', + '0xd71b3a963a6b1f58198dd731c834f828b1faccfe5b3fa52c0bdcfd83cf3c6eb9', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa71c7f0d3a04792191505a964531f90ae8d3287027f4e2e82247664cd0c048d00741da43d7aa591bf57c607532eb33d0', + signature: + '0xb4e710f85aa79598c9be4ca754b0d6b452d40e90049782a08d762d4336a0a4cae0d4df107698399f2b236ee16b534d2014c3c60935614e567e4f6f5f92b044a8d51efd4ad10f61f22a9de1af271c3cdd49ea8e9f274cd24654e8ca05e899f9a7', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xf2103aed334750d0bfbce33b8c0d366abc02bf4aa95fc88d68fcb390db1db760', + merkleProof: [ + '0xf4a7e1427a330d72f73cd325832d8ba0fe2f9872059ecb5c44343838172a7bb8', + '0x8ff3bb2fbdeabe68c1a118306dc3ffa308bd347c2afab3070fc121b649ec77b4', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xb44f595cb9be710f23babff4031cbd65a8cc9ba1dda76512147e82b51e26822dd33f24db2213c66139f55285ff9a2571', + signature: + '0xa70275cb5b96ff132425c6426ec36e450eb372aadf47abb7d11ea3ca79986740e4fd78183e12aa383165c8babb60e9b015daa179c32480e4b209c9b327f5e4819672ece998642e165c7db9fca70698228397ae1dcca29b80f7c541898c522ed0', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xb477d49c7585761a4f4a2b582f1269e0460c6732c0bbf9f1990aabc3348e1946', + merkleProof: [ + '0xbfd702c9d24334e372610758bfe0513718f45de0b89e85a3d038e79e010aea18', + '0xdb26887c31065f0bcda615acb28af0fc66a671f83c0c8b0eedcce813bf082ca3', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x8c0ec3be2b93cda6b130778955a93008aef32eb73d54478e364d7b3af6e0759d4281f3424e8e9457888515bd2cbaae28', + signature: + '0x91eece005ffde29cf320d825d5ee0e29be434d06cdb284c0d7e9b637b2e1efd37d94149c72f53537ded2afea82dab97d13a466a7c84fa149d82d2c14a619644dec52a26c2edf9a6af9ee7383053b269a663d9579261916146b660873abc8ccc7', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x4246e1fd1d9929b83d5484ed0f382bd68c29eaabb79259572a4eefaa10fac06c', + merkleProof: [ + '0x399fc262ac318aa450b85fc48b9ac030fd46192103ce64888225795a56a77c79', + '0x8e55d7e28f72c09f34a2e0f674d738e84abdb969e77b973702944478392edbb5', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa3a5cfe51d416dc52c391fab0a7864d586adda3e6b5740349342a22bd12cd6d20520cca82660663a9f8d2c728e1829a5', + signature: + '0xb4e8e71e6164a2716aa5b523850d72fb5501423faa21c5c1e8c54dede7222d39d8b34ec3b75d19765bf2c117aa9daf750e3918b1ca7d725cc5856fc3a6ee23209e170f0b9328a8f54b457fd98c1d69864021d953995ef9a44d76dc1748a48309', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x6c1463920cc9e17893f5482736b668acff3c72c1138e9c8c624581b187c9520c', + merkleProof: [ + '0x87a841c6d5f0d05a915841e5445fea19b3f8368ae32f310e88583a4089c317cc', + '0x0b1d9c2f398810bf35a66345d87f36a177326184150ac0427b49addc9a568c04', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xad6304f931c1e0970a7b5f76ccae142be8c8509484e5b7cc54063baf6af71467bc34172775058ffbb8e049c399e3b51a', + signature: + '0x86099d7c244e2cf8884c2a0295d02da895fb2343ae28d4b482fbc4a764cd87480a8bad2dbc34f3b1bd17bb262ba238e901273c3f23841fa26a222cdfcd438caa3ba69ee307d61d8bfe6b79660d3090c9f56feb6bdc539f8366210e303065ff71', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xc7d2143ce6808a6466524bc9499888ae22300b824e6422138266345438e4d24d', + merkleProof: [ + '0x55f0e0719a348a4dbc810d830f20f32aaa5183df5dfa8f64e5a1f83569af87b5', + '0x4f3814db1d48a3699ab7700e319563a2d90332032f92b34c0cf9d397f14b39c8', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb0136d62e49f327f07141a33846d72006083331a7b4e2cfe45df4c07e737e79d6e91a5ec54efb68dde05efd2c163da16', + signature: + '0xb2f7646b9a288efb0fb8be27aec4e3602a4e08e62cc8cc2b1b93a61494c55e596c6e1ee96f74b9e0f754369442066971004d6cd2d61d2c0bb9a01512960e26dd4e2aee5aa8d6235ba3e095dc7ddc7c6ccc25ab32cd0f0a554f58245d332340cb', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x221c0a38479ef202d7439c8fd4faf74bbba1a2ebfb47f2ca6a86088425ef898c', + merkleProof: [ + '0xbcc107cdeb85c643ecd930ab22e80e048dff42ceab2adf7aa006d59c286156e2', + '0xdb26887c31065f0bcda615acb28af0fc66a671f83c0c8b0eedcce813bf082ca3', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa3695a11ed45481919c7a2b36c6a6c5d2a898403ff321c0baf228a5943f02759695c2f249b4c9bc53be3dcd79d2d8c97', + signature: + '0xa356a11b3c660572a7f87c6e1871d9f801cd8c921ab8b40f2f6a5b1cb303507d39afff6add66037d72da6281ca80d510015da342fc0dd95bc616041c9a121b165ddba83fe05e2385518250e5b997066026aad5563b26ef5174ba5b5ed16f11ef', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, +]; + +module.exports = { + depositData, + depositDataMerkleRoot, +}; diff --git a/test/pool/registerValidator.test.js b/test/pool/registerValidator.test.js deleted file mode 100644 index 2a401d46..00000000 --- a/test/pool/registerValidator.test.js +++ /dev/null @@ -1,167 +0,0 @@ -const { - BN, - expectRevert, - expectEvent, - ether, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { vrcAbi } = require('../../deployments/vrc'); -const { - checkCollectorBalance, - checkValidatorRegistered, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Pool = artifacts.require('Pool'); -const Validators = artifacts.require('Validators'); - -const validatorDeposit = ether('32'); -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; -const validator = validatorParams[0]; - -contract('Pool (register validator)', ([operator, sender, other]) => { - const admin = contractSettings.admin; - let pool, vrc; - - before(async () => { - vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); - }); - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(other, admin, ether('5')); - await upgradeContracts(); - - pool = await Pool.at(contracts.pool); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - // collect validator deposit - let poolBalance = await balance.current(pool.address); - let depositAmount = validatorDeposit.sub(poolBalance); - await pool.addDeposit({ - from: sender, - value: depositAmount, - }); - }); - - afterEach(async () => resetFork()); - - it('fails to register validator with callers other than operator', async () => { - await expectRevert( - pool.registerValidator(validator, { - from: other, - }), - 'Pool: access denied' - ); - }); - - it('fails to register validator with paused pool', async () => { - await pool.pause({ from: admin }); - expect(await pool.paused()).equal(true); - - await expectRevert( - pool.registerValidator(validator, { - from: other, - }), - 'Pausable: paused' - ); - }); - - it('fails to register validator with used public key', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // create new deposit - await pool.addDeposit({ - from: sender, - value: validatorDeposit, - }); - - // Register 1 validator - await pool.registerValidator(validator, { - from: operator, - }); - - // Register 2 validator with the same validator public key - await expectRevert( - pool.registerValidator(validator, { - from: operator, - }), - 'Validators: invalid public key' - ); - await checkCollectorBalance(pool, validatorDeposit); - }); - - it('fails to register validator when validator deposit amount is not collect', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // Register 1 validator - await pool.registerValidator(validator, { - from: operator, - }); - - await expectRevert.unspecified( - pool.registerValidator(validatorParams[1], { - from: operator, - }) - ); - - await checkCollectorBalance(pool, new BN(0)); - }); - - it('registers validator', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // one validator is already created - let totalAmount = validatorDeposit; - - for (let i = 1; i < validatorParams.length; i++) { - await pool.addDeposit({ - from: sender, - value: validatorDeposit, - }); - totalAmount = totalAmount.add(validatorDeposit); - } - - // check balance increased correctly - await checkCollectorBalance(pool, totalAmount); - - // register validators - for (let i = 0; i < validatorParams.length; i++) { - const receipt = await pool.registerValidator(validatorParams[i], { - from: operator, - }); - await expectEvent(receipt, 'ValidatorRegistered', { - publicKey: validatorParams[i].publicKey, - operator, - }); - totalAmount = totalAmount.sub(validatorDeposit); - await checkValidatorRegistered({ - vrc, - operator, - transaction: receipt.tx, - pubKey: validatorParams[i].publicKey, - withdrawalCredentials, - signature: validatorParams[i].signature, - }); - } - - // check balance empty - await checkCollectorBalance(pool); - }); -}); diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 95e540d6..179e40ef 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -4,45 +4,60 @@ const { ether, expectRevert, expectEvent, - BN, } = require('@openzeppelin/test-helpers'); const { stopImpersonatingAccount, impersonateAccount, resetFork, setActivatedValidators, - getOracleAccounts, + setupOracleAccounts, + registerValidator, } = require('../utils'); -const { validatorParams } = require('./validatorParams'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); +const { depositDataMerkleRoot } = require('./depositDataMerkleRoot'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const Validators = artifacts.require('Validators'); +const PoolValidators = artifacts.require('PoolValidators'); const RewardEthToken = artifacts.require('RewardEthToken'); +const iDepositContract = artifacts.require('IDepositContract'); -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; - -contract('Pool (settings)', ([operator, anyone]) => { +contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; - let pool, oracles, oracleAccounts, rewardEthToken; + let pool, oracles, oracleAccounts, rewardEthToken, validatorsDepositRoot; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - await upgradeContracts(); - pool = await Pool.at(contracts.pool); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + let upgradedContracts = await upgradeContracts(); + let validators = await PoolValidators.at(upgradedContracts.poolValidators); + await validators.addOperator( + operator, + depositDataMerkleRoot, + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', + { + from: admin, + } + ); + await validators.commitOperator({ + from: operator, + }); + pool = await Pool.at(contracts.pool); + let depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorsDepositRoot = await depositContract.get_deposit_root(); + oracles = await Oracles.at(upgradedContracts.oracles); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); }); afterEach(async () => resetFork()); @@ -120,9 +135,11 @@ contract('Pool (settings)', ([operator, anyone]) => { }); it('admin can override activated validators', async () => { - let activatedValidators = new BN( - contractSettings.activatedValidators - ).add(new BN(contractSettings.pendingValidators)); + let activatedValidators = await pool.activatedValidators(); + activatedValidators = activatedValidators.add( + await pool.pendingValidators() + ); + let receipt = await pool.setActivatedValidators(activatedValidators, { from: admin, }); @@ -135,22 +152,23 @@ contract('Pool (settings)', ([operator, anyone]) => { }); it('oracles contract can set activated validators', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.addDeposit({ + await pool.stake({ from: anyone, value: ether('32'), }); - await pool.registerValidator(validatorParams[0], { - from: operator, + await registerValidator({ + operator, + oracles, + oracleAccounts, + validatorsDepositRoot, }); - let activatedValidators = new BN(contractSettings.activatedValidators) - .add(new BN(contractSettings.pendingValidators)) - .add(new BN(1)); + let activatedValidators = await pool.activatedValidators(); + activatedValidators = activatedValidators.add( + await pool.pendingValidators() + ); + let receipt = await setActivatedValidators({ - admin, pool, rewardEthToken, activatedValidators, @@ -163,7 +181,7 @@ contract('Pool (settings)', ([operator, anyone]) => { 'ActivatedValidatorsUpdated', { activatedValidators, - sender: contracts.oracles, + sender: oracles.address, } ); expect(await pool.activatedValidators()).to.bignumber.equal( @@ -171,31 +189,4 @@ contract('Pool (settings)', ([operator, anyone]) => { ); }); }); - - describe('withdrawal credentials', () => { - const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; - - it('not admin fails to update withdrawal credentials', async () => { - await expectRevert( - pool.setWithdrawalCredentials(withdrawalCredentials, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - }); - - it('admin can update withdrawal credentials', async () => { - let receipt = await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - await expectEvent(receipt, 'WithdrawalCredentialsUpdated', { - withdrawalCredentials, - }); - expect(await pool.withdrawalCredentials()).to.equal( - withdrawalCredentials - ); - }); - }); }); diff --git a/test/pool/addDeposit.test.js b/test/pool/stake.test.js similarity index 52% rename from test/pool/addDeposit.test.js rename to test/pool/stake.test.js index 9f536e4f..7e878472 100644 --- a/test/pool/addDeposit.test.js +++ b/test/pool/stake.test.js @@ -5,6 +5,7 @@ const { send, expectRevert, expectEvent, + constants, BN, } = require('@openzeppelin/test-helpers'); const { @@ -12,62 +13,102 @@ const { impersonateAccount, resetFork, getDepositAmount, + registerValidator, + setupOracleAccounts, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); -const { checkCollectorBalance, checkStakedEthToken } = require('../utils'); -const { validatorParams } = require('./validatorParams'); +const { checkStakedEthToken } = require('../utils'); +const { + depositData, + depositDataMerkleRoot, +} = require('./depositDataMerkleRoot'); const Pool = artifacts.require('Pool'); const StakedEthToken = artifacts.require('StakedEthToken'); -const Validators = artifacts.require('Validators'); - -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; +const PoolValidators = artifacts.require('PoolValidators'); +const Oracles = artifacts.require('Oracles'); +const iDepositContract = artifacts.require('IDepositContract'); -contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { +contract('Pool (stake)', (accounts) => { const admin = contractSettings.admin; + let [sender1, sender2, sender3, operator, ...otherAccounts] = accounts; let pool, stakedEthToken, + validators, + oracles, + oracleAccounts, totalSupply, poolBalance, activatedValidators, - pendingValidators; + pendingValidators, + depositContract, + validatorsDepositRoot; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { - // reset contract settings - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = new BN(contractSettings.pendingValidators); - await impersonateAccount(admin); await send.ether(sender3, admin, ether('5')); - await upgradeContracts(); + let upgradedContracts = await upgradeContracts(); pool = await Pool.at(contracts.pool); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); + validators = await PoolValidators.at(upgradedContracts.poolValidators); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); + depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorsDepositRoot = await depositContract.get_deposit_root(); + await validators.addOperator( + operator, + depositDataMerkleRoot, + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', + { + from: admin, + } + ); + await validators.commitOperator({ + from: operator, + }); totalSupply = await stakedEthToken.totalSupply(); poolBalance = await balance.current(pool.address); + activatedValidators = await pool.activatedValidators(); + pendingValidators = await pool.pendingValidators(); }); afterEach(async () => resetFork()); - describe('adding deposit', () => { - it('fails to add a deposit with zero amount', async () => { + describe('stake', () => { + it('fails to stake with zero amount', async () => { await expectRevert( - pool.addDeposit({ from: sender1, value: ether('0') }), + pool.stake({ from: sender1, value: ether('0') }), 'Pool: invalid deposit amount' ); }); - it('fails to add a deposit to paused pool', async () => { + it('fails to stake with zero address', async () => { + await expectRevert( + pool.stakeOnBehalf(constants.ZERO_ADDRESS, { + from: sender1, + value: ether('0'), + }), + 'Pool: invalid recipient' + ); + }); + + it('fails to stake in paused pool', async () => { await pool.pause({ from: admin }); expect(await pool.paused()).equal(true); await expectRevert( - pool.addDeposit({ + pool.stake({ from: sender1, value: ether('1'), }), @@ -77,13 +118,14 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { it('mints tokens for users with deposit less than min activating', async () => { // User 1 creates a deposit + let maxAmount = await pool.minActivatingDeposit(); let depositAmount1 = getDepositAmount({ - max: new BN(contractSettings.minActivatingDeposit), + max: maxAmount, }); totalSupply = totalSupply.add(depositAmount1); poolBalance = poolBalance.add(depositAmount1); - await pool.addDeposit({ + await pool.stake({ from: sender1, value: depositAmount1, }); @@ -95,13 +137,14 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { }); // User 2 creates a deposit + maxAmount = await pool.minActivatingDeposit(); let depositAmount2 = getDepositAmount({ - max: new BN(contractSettings.minActivatingDeposit), + max: maxAmount, }); totalSupply = totalSupply.add(depositAmount2); poolBalance = poolBalance.add(depositAmount2); - await pool.addDeposit({ + await pool.stake({ from: sender2, value: depositAmount2, }); @@ -113,7 +156,9 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { }); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); }); it('places deposit of user to the activation queue with exceeded pending validators limit', async () => { @@ -125,10 +170,10 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { poolBalance = poolBalance.add(depositAmount); let validatorIndex = activatedValidators .add(pendingValidators) - .add(new BN(2)); + .add(poolBalance.div(ether('32'))); // check deposit amount placed in activation queue - let receipt = await pool.addDeposit({ + let receipt = await pool.stake({ from: sender1, value: depositAmount, }); @@ -142,7 +187,9 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { ).to.bignumber.equal(depositAmount); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); expect(await stakedEthToken.totalSupply()).to.bignumber.equal( totalSupply ); @@ -161,7 +208,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { totalSupply = totalSupply.add(depositAmount); // check deposit amount added immediately - await pool.addDeposit({ + await pool.stake({ from: sender1, value: depositAmount, }); @@ -176,7 +223,177 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { ).to.bignumber.equal(new BN(0)); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); + }); + + it('can stake to different recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeOnBehalf(sender2, { + from: sender1, + value: amount, + }); + await expectEvent.inTransaction(receipt.tx, StakedEthToken, 'Transfer', { + from: constants.ZERO_ADDRESS, + to: sender2, + value: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender2, + balance: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); + }); + + it('can stake without recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stake({ + from: sender1, + value: amount, + }); + await expectEvent.inTransaction(receipt.tx, StakedEthToken, 'Transfer', { + from: constants.ZERO_ADDRESS, + to: sender1, + value: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); + }); + + describe('staking with partner', () => { + const partner = otherAccounts[0]; + + it('can stake with partner', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithPartner(partner, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithPartner', { + partner, + amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); + }); + + it('can stake with partner to different recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithPartnerOnBehalf(partner, sender2, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithPartner', { + partner, + amount, + }); + await expectEvent.inTransaction( + receipt.tx, + StakedEthToken, + 'Transfer', + { + from: constants.ZERO_ADDRESS, + to: sender2, + value: amount, + } + ); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender2, + balance: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); + }); + }); + + describe('staking with referrer', () => { + const referrer = otherAccounts[0]; + + it('can stake with referrer', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithReferrer(referrer, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithReferrer', { + referrer, + amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); + }); + + it('can stake with referrer to different recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithReferrerOnBehalf(referrer, sender2, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithReferrer', { + referrer, + amount, + }); + await expectEvent.inTransaction( + receipt.tx, + StakedEthToken, + 'Transfer', + { + from: constants.ZERO_ADDRESS, + to: sender2, + value: amount, + } + ); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender2, + balance: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); + }); }); }); @@ -188,22 +405,31 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { await pool.setMinActivatingDeposit(ether('0.01'), { from: admin }); depositAmount = ether('32'); - await pool.addDeposit({ + await pool.stake({ from: sender1, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex = activatedValidators .add(pendingValidators) - .add(new BN(1)); - - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.registerValidator(validatorParams[0], { - from: operator, - }); + .add(poolBalance.div(ether('32'))); + + for (let i = 0; i < validatorIndex.sub(activatedValidators); i++) { + validatorsDepositRoot = await depositContract.get_deposit_root(); + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + validatorsDepositRoot, + merkleProof: depositData[i].merkleProof, + signature: depositData[i].signature, + publicKey: depositData[i].publicKey, + withdrawalCredentials: depositData[i].withdrawalCredentials, + depositDataRoot: depositData[i].depositDataRoot, + }); + } }); it('fails to activate with invalid validator index', async () => { @@ -277,9 +503,6 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { account: sender1, balance: depositAmount, }); - - // check contract balance - await checkCollectorBalance(pool, poolBalance); }); }); @@ -291,33 +514,40 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { await pool.setMinActivatingDeposit(ether('0.01'), { from: admin }); depositAmount = ether('32'); - await pool.addDeposit({ + await pool.stake({ from: sender3, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex1 = activatedValidators .add(pendingValidators) - .add(new BN(1)); + .add(poolBalance.div(ether('32'))); - await pool.addDeposit({ + await pool.stake({ from: sender3, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex2 = activatedValidators .add(pendingValidators) - .add(new BN(2)); - - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.registerValidator(validatorParams[0], { - from: operator, - }); - await pool.registerValidator(validatorParams[1], { - from: operator, - }); + .add(poolBalance.div(ether('32'))); + + for (let i = 0; i < validatorIndex2.sub(activatedValidators); i++) { + validatorsDepositRoot = await depositContract.get_deposit_root(); + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + validatorsDepositRoot, + merkleProof: depositData[i].merkleProof, + signature: depositData[i].signature, + publicKey: depositData[i].publicKey, + withdrawalCredentials: depositData[i].withdrawalCredentials, + depositDataRoot: depositData[i].depositDataRoot, + }); + } }); it('fails to activate with invalid validator indexes', async () => { @@ -407,9 +637,35 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { value: depositAmount, sender: sender3, }); - - // check contract balance - await checkCollectorBalance(pool, poolBalance); }); }); + + it('only PoolValidators contract can register new validators', async () => { + const { publicKey, signature, withdrawalCredentials, depositDataRoot } = + depositData[0]; + await expectRevert( + pool.registerValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + { + from: sender1, + } + ), + 'Pool: access denied' + ); + }); + + it('only PoolValidators contract can refund', async () => { + await expectRevert( + pool.refund({ + from: sender1, + }), + 'Pool: access denied' + ); + }); }); diff --git a/test/pool/upgrading.test.js b/test/pool/upgrading.test.js index 8dd80b30..ff2df257 100644 --- a/test/pool/upgrading.test.js +++ b/test/pool/upgrading.test.js @@ -1,4 +1,3 @@ -const { expect } = require('chai'); const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); const { stopImpersonatingAccount, @@ -12,50 +11,29 @@ const Pool = artifacts.require('Pool'); contract('Pool (upgrading)', ([sender]) => { const admin = contractSettings.admin; - let pool; + let pool, poolValidators, oracles; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(sender, admin, ether('5')); - await upgradeContracts(); + ({ poolValidators, oracles } = await upgradeContracts()); pool = await Pool.at(contracts.pool); - - expect(await pool.activatedValidators()).to.bignumber.equal( - contractSettings.activatedValidators - ); - expect(await pool.pendingValidatorsLimit()).to.bignumber.equal( - contractSettings.pendingValidatorsLimit - ); }); afterEach(async () => resetFork()); it('fails to upgrade with not admin privilege', async () => { await expectRevert( - pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, - { from: sender } - ), + pool.upgrade(poolValidators, oracles, { from: sender }), 'OwnablePausable: access denied' ); }); it('fails to upgrade when not paused', async () => { await expectRevert( - pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, - { from: admin } - ), + pool.upgrade(poolValidators, oracles, { from: admin }), 'Pausable: not paused' ); }); @@ -63,15 +41,8 @@ contract('Pool (upgrading)', ([sender]) => { it('fails to upgrade twice', async () => { await pool.pause({ from: admin }); await expectRevert( - pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, - { from: admin } - ), - 'Pool: already upgraded' + pool.upgrade(poolValidators, oracles, { from: admin }), + 'Pool: invalid PoolValidators address' ); }); }); diff --git a/test/pool/validatorParams.js b/test/pool/validatorParams.js deleted file mode 100644 index db90cba7..00000000 --- a/test/pool/validatorParams.js +++ /dev/null @@ -1,94 +0,0 @@ -const validatorParams = [ - { - publicKey: - '0xa5a341b7b6b3a7b0f274b665722c5c482cd4b80701312ecdb829dd5073e7f024ea71002a6721bd596d327d4a8bf87fe9', - signature: - '0xab99c43070ed99e26098b642a5ba56d64044b3fafdee841eef0a5a45a69ad196d6caa80f35174a57cc484ac346335dc80de9d58059ca148e77c320b66c1d4aad38862593b3d7cd5981a146ff081fbe1dda038f1a8de73595049d7cf22ac2781c', - depositDataRoot: - '0x13ea126f312aaa1b2b49f5a4807e9ea21a300b3dab40ff8323e159af9166acf4', - }, - { - publicKey: - '0xb3e0896caab475e0cb8cd8ac1a52880559b73e59e98de06c9e24f855dcaf8d7634c83645e4b693606ef11a045b23a3be', - signature: - '0x97581e9bab91ea0da809a31520bd664c03565a73bf86d6bb7803c9bec2d349b80e88b718f277240337edead3e003d5460101dc9191c1970dae0ac632ffcf78f31433bdf507f99fc6f10afcbfe8272aeb2dbb2923e537f313419da6d2d6ff3678', - depositDataRoot: - '0x1155f061ca0684ac5f271306ad3b212b4e8b704a0507c245639efee995d1954d', - }, - { - publicKey: - '0x992c0fc7922a60a51ddd7daa3adedbe0f0e0290127f8f601fcb9aa4bc3a367046631c3b029496662a5131045f6968a66', - signature: - '0xb93c1dc1f86285203dd4845813dc4596f60f9c1b047c3559a304a994fc9b9ba8b56461793a5cdef25d5f2fff65029d1203a6eefd58fb713810b715739688a2dd485381eed4c1db74ec10154ec9f4c9d0abc5419c75f7d24a11475108428c86ca', - depositDataRoot: - '0xa40c59dcd0fb12a0deec5d96f26472fb40b4d1ad12598db6962f5ea0df838d36', - }, - { - publicKey: - '0x8bb161b4ac08fae331a082851d2777439f95f8d68da282a78c288016f66e05025734d38f997953f86689d5a0be6e5f1f', - signature: - '0x94aa489f2fcfb520bd0b2a7ae98900250021b7a5cf8a7970165c3ba7d12fef72e1cb3044839f4b0bedf619bec8b99249100359c16820146d5ee9b7b5fb9b1ce8364f01e789da94f8b2667a648de31f05602e5d273368292a37856c6d9a81b675', - depositDataRoot: - '0xc3ed9752697d3b5da2a154c1e4ec9c2af8ef52a3b7e416c6e5a6df1242826ca3', - }, - { - publicKey: - '0xb22b95a3e2c5d950ceea9f7acaac6499c25f2244eb50c0859e03769986f77ebbf761b3d94868f1a7fc334b2d5a6afe49', - signature: - '0xa7fe9e26883dd457b91e55aae930ebe7220078b51452eeb05ff9e32c300f5005216e46a23bd9e7554926bdec342d9a0c035d3719b23c252f858a1d36e105296f28abdd5e0a3d7afdd7c994f4ceddf8e5ded86a64750ecc986390a205b2964ff7', - depositDataRoot: - '0xfcc28476f842d7a84f15297f188fce25eb1f13cc55f7c45770ea0e895e7e7891', - }, - { - publicKey: - '0xb25c9fa462da03fc6375cd57d81d8fc54f05a9512f4c553e515016abd89c379c72f183c7d688b2780cf367d41b71e160', - signature: - '0xa0fb194ea502d58a093e77ac8fc733eb9109e0d15bcaab7614d34d10b6153d95101a07a0ea560d21483da39bbb52a5a90cdab07bb1145076fcbc8b3c6aa77ed98fd184865c17316d615162c8b57497727bb0f6fb3cfae6c1644906c27212065e', - depositDataRoot: - '0x2bef74e78af9b3f53994acc29e6ccb86bed0720295a86f26723fd84d80769b8c', - }, - { - publicKey: - '0x970a4b03ea759a2e73293111e9a9bb27b6061b7f627ce0da9abd64d4dc59d6dd99ba6839fb39da8d2c4dc2171242fc43', - signature: - '0x8b63f69f2b46f335d16ab8ca4c5149ed6ec98fd576682801a63b69619465548d1267e06eae486d1c6d0075eada7ec69c012a68f530e68f4cca07575157c49d8de3fa5fb80747bf75699dd379da4863e8e300c875b03516a1c7e09b8a185a3220', - depositDataRoot: - '0xfd78caa5fec5f4a6ac7b899b367773514bbb5ddab321baec37de358cbf3f29c3', - }, - { - publicKey: - '0xb74bff094ccc7a09e42f9a3027db981a3beb649442019c3fb086efa84174e725f11e60d199cb0db00fdcae59929f687d', - signature: - '0xb0e8e7d377a8face914a7fd1a394d72c4d8ea33eac818a39c7489fb7eeb5e2e754fc752cced569de271e1329513d18900d4e5534aca795389ab4bdd978996ffb1381154e7232c6919efb1a7e6cdf29744b37cadb4935345099a0534f11c08942', - depositDataRoot: - '0xab12e4e9fd9e9c5db8aa6bfdbcfee1bbe51b1e2905df516955b989f2c4a0f631', - }, - { - publicKey: - '0x821bc505f04fed9e1084c6ce0b234239732482e11b0945ff0bd239415971c4acf40f758e45dd0ad5bc752084a391ca9e', - signature: - '0x819228438eab188d7def38f48551a07980b8bf969e97d7933fccbfaf59400cc6d61c87732659edafe9b61253155caf3b0db549b4d0f828d23d2ba642aa5aa009b26079d4b66831de11b5c1e2cb70cc340c159f5d3963b8c0991cc54ab23232d0', - depositDataRoot: - '0xb15967eb1e2cb2173422e1cee218ff48bb844b72de39fe64f0f8755e9e58cdec', - }, - { - publicKey: - '0xb0bed2fbbaf58907a4976e3db8ceb25436e6fb24ef6eb4351950fa402decd39d1b83c9cafe820d7f3751ad30202cf5dd', - signature: - '0xb730c7110892c763b603ccf0e7269ed2092d26e7a62d3ec8c1c630050505eb890ff9a8a5d00f0a5622fe4ace91e78059049201c3b552c212eeb8ab336412d79d0815b62f2a6add17c95b284b0b9b37c3a55bb96dbbb878d1e476d83f49cb62c5', - depositDataRoot: - '0x34a6c81083474e077933395b512d47bf7a376d862de1c2d41e9aac8ad25c973e', - }, - { - publicKey: - '0x8ab8f23b742af7c4af58da98ed3c2147f792952ff26236755ae1c0ffc16eea7ac0c44a867c3d19232794ae6fcf19720b', - signature: - '0x87a5645ed6931977d1d255517d1bc5b9f907eec41db6b9e50052e5dd6d7ee59c53bc27d67085fe1d98e0b605a5d4ae7f15a55eaf756ef5e5612aac59ba44e56c4d61b1f69d617e57e213ad10852156df59f64e3313afd9eed1db41131a2e85b6', - depositDataRoot: - '0xf9cb80db174fe97a6e20f53778a110ecd93105654bc12c216b5b72fd2d6c25cb', - }, -]; - -module.exports = { - validatorParams, -}; diff --git a/test/solos/addDeposit.test.js b/test/solos/addDeposit.test.js deleted file mode 100644 index e80c212e..00000000 --- a/test/solos/addDeposit.test.js +++ /dev/null @@ -1,231 +0,0 @@ -const { expect } = require('chai'); -const { - BN, - ether, - constants, - expectRevert, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { - stopImpersonatingAccount, - impersonateAccount, - resetFork, - checkCollectorBalance, - checkSoloDepositAdded, -} = require('../utils'); - -const Solos = artifacts.require('Solos'); - -const validatorDeposit = ether('32'); -const withdrawalCredentials = - '0x00fd1759df8cf0dfa07a7d0b9083c7527af46d8b87c33305cee15165c49d5061'; - -contract('Solos (add deposit)', ([sender1, sender2]) => { - const admin = contractSettings.admin; - let solos; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender1, admin, ether('5')); - - await upgradeContracts(); - - solos = await Solos.at(contracts.solos); - }); - - afterEach(async () => resetFork()); - - it('fails to add a deposit with invalid withdrawal credentials', async () => { - await expectRevert( - solos.addDeposit(constants.ZERO_BYTES32, { - from: sender1, - value: validatorDeposit, - }), - 'Solos: invalid credentials' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit with invalid withdrawal credentials prefix', async () => { - await expectRevert( - solos.addDeposit( - '0x9dfd1759df8cf0dfa07a7d0b9083c7527af46d8b87c33305cee15165c49d5061', - { - from: sender1, - value: validatorDeposit, - } - ), - 'Solos: invalid credentials' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit to paused contract', async () => { - await solos.pause({ from: admin }); - expect(await solos.paused()).equal(true); - - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }), - 'Pausable: paused' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit smaller than validator deposit amount', async () => { - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit.sub(ether('1')), - }), - 'Solos: invalid deposit amount' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit not divisible by validator deposit amount', async () => { - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit.add(ether('1')), - }), - 'Solos: invalid deposit amount' - ); - await checkCollectorBalance(solos); - }); - - it('adds deposits divisible by validator deposit amount', async () => { - let depositAmount = validatorDeposit.mul(new BN(3)); - // Send a deposit - const receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: depositAmount, - }); - - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: depositAmount, - totalAmount: depositAmount, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(3))); - }); - - it('increases amount for the same solo', async () => { - // Send first deposit - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // Send second deposit - receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit.mul(new BN(2)), - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); - - it('adds deposits for different users', async () => { - // User 1 creates a deposit - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // User 2 creates a deposit - receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender2, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender2, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); - - it('creates different solos for deposits with different withdrawal credentials', async () => { - // User creates deposit with first withdrawal credential - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // User creates deposit with second withdrawal credential - let withdrawalCredentials2 = - '0x00ef3debe27bec735f68fee62c107f6a2bf85a4bb308cee64ce3a9addefa44f7'; - receipt = await solos.addDeposit(withdrawalCredentials2, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials: withdrawalCredentials2, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); -}); diff --git a/test/solos/cancelDeposit.test.js b/test/solos/cancelDeposit.test.js deleted file mode 100644 index 7a6e0e0e..00000000 --- a/test/solos/cancelDeposit.test.js +++ /dev/null @@ -1,272 +0,0 @@ -const { expect } = require('chai'); -const { - ether, - expectRevert, - expectEvent, - time, - constants, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { - checkCollectorBalance, - checkSolo, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Solos = artifacts.require('Solos'); -const Validators = artifacts.require('Validators'); - -const validatorDeposit = ether('32'); -const cancelLockDuration = 86400; // 1 day -const { withdrawalCredentials } = validatorParams[0]; - -contract('Solos (cancel deposit)', ([operator, sender, anyone]) => { - const admin = contractSettings.admin; - let solos, soloId; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender, admin, ether('5')); - - await upgradeContracts(); - - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - solos = await Solos.at(contracts.solos); - await solos.setCancelLockDuration(cancelLockDuration, { - from: admin, - }); - - // create new solo - await solos.addDeposit(withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - soloId = web3.utils.soliditySha3( - solos.address, - sender, - withdrawalCredentials - ); - }); - - afterEach(async () => resetFork()); - - it('fails to cancel a deposit with invalid withdrawal credentials', async () => { - await expectRevert( - solos.cancelDeposit(constants.ZERO_BYTES32, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit for other user account', async () => { - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: anyone, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('can cancel a deposit with zero amount', async () => { - await time.increase(cancelLockDuration); - const receipt = await solos.cancelDeposit(withdrawalCredentials, 0, { - from: sender, - }); - expectEvent(receipt, 'DepositCanceled', { - soloId, - amount: '0', - sender, - withdrawalCredentials, - }); - - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit when lock duration has not passed', async () => { - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: too early cancel' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('not admin fails to update cancel lock duration', async () => { - await expectRevert( - solos.setCancelLockDuration(cancelLockDuration, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('admin can update cancel lock duration', async () => { - let receipt = await solos.setCancelLockDuration(cancelLockDuration, { - from: admin, - }); - - await expectEvent(receipt, 'CancelLockDurationUpdated', { - cancelLockDuration: cancelLockDuration.toString(), - }); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with amount bigger than deposit', async () => { - await time.increase(cancelLockDuration); - await expectRevert( - solos.cancelDeposit( - withdrawalCredentials, - validatorDeposit.add(ether('1')), - { - from: sender, - } - ), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with too small unit', async () => { - await time.increase(cancelLockDuration); - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, ether('1'), { - from: sender, - }), - 'Solos: invalid cancel amount' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with registered validator', async () => { - await time.increase(cancelLockDuration); - await solos.registerValidator( - { - publicKey: validatorParams[0].publicKey, - soloId, - signature: validatorParams[0].signature, - depositDataRoot: validatorParams[0].depositDataRoot, - }, - { - from: operator, - } - ); - - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ solos, soloId, withdrawalCredentials }); - await checkCollectorBalance(solos); - }); - - it('fails to cancel deposit amount twice', async () => { - await time.increase(cancelLockDuration); - await solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }); - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: constants.ZERO_BYTES32, - }); - await checkCollectorBalance(solos); - }); - - it('cancels deposit in full amount', async () => { - await time.increase(cancelLockDuration); - const prevBalance = await balance.current(sender); - const receipt = await solos.cancelDeposit( - withdrawalCredentials, - validatorDeposit, - { - from: sender, - } - ); - expectEvent(receipt, 'DepositCanceled', { - soloId, - amount: validatorDeposit, - sender, - withdrawalCredentials, - }); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: constants.ZERO_BYTES32, - }); - await checkCollectorBalance(solos); - - // Check recipient balance changed - expect(prevBalance.lt(await balance.current(sender))).to.be.equal(true); - }); -}); diff --git a/test/solos/registerValidator.test.js b/test/solos/registerValidator.test.js deleted file mode 100644 index 86eefc7e..00000000 --- a/test/solos/registerValidator.test.js +++ /dev/null @@ -1,239 +0,0 @@ -const { - BN, - expectRevert, - expectEvent, - constants, - ether, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { vrcAbi } = require('../../deployments/vrc'); -const { - checkCollectorBalance, - checkSolo, - checkValidatorRegistered, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Solos = artifacts.require('Solos'); -const Validators = artifacts.require('Validators'); - -const validatorPrice = ether('10'); -const validatorDeposit = ether('32'); -const validator = validatorParams[0]; - -contract('Solos (register validator)', ([operator, sender, other]) => { - const admin = contractSettings.admin; - let vrc, solos, soloId; - - before(async () => { - vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); - }); - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender, admin, ether('5')); - - await upgradeContracts(); - - solos = await Solos.at(contracts.solos); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - await solos.setValidatorPrice(validatorPrice, { - from: admin, - }); - - // create new solo - await solos.addDeposit(validator.withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - soloId = web3.utils.soliditySha3( - solos.address, - sender, - validator.withdrawalCredentials - ); - }); - - afterEach(async () => resetFork()); - - it('fails to register validator for invalid solo ID', async () => { - let validator = { soloId: constants.ZERO_BYTES32, ...validatorParams[0] }; - await expectRevert( - solos.registerValidator(validator, { - from: operator, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: validator.withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator with callers other than operator', async () => { - await expectRevert( - solos.registerValidator( - { soloId, ...validator }, - { - from: other, - } - ), - 'Solos: access denied' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: validator.withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator with used public key', async () => { - await solos.addDeposit(validator.withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - - await solos.registerValidator( - { soloId, ...validator }, - { - from: operator, - } - ); - - await expectRevert( - solos.registerValidator( - { soloId, ...validator }, - { - from: operator, - } - ), - 'Validators: invalid public key' - ); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator twice', async () => { - await solos.registerValidator( - { soloId, ...validatorParams[0] }, - { - from: operator, - } - ); - - await expectRevert( - solos.registerValidator( - { soloId, ...validatorParams[1] }, - { - from: operator, - } - ), - 'Solos: insufficient balance' - ); - - await checkCollectorBalance(solos, new BN(0)); - }); - - it('fails to register validator with paused solos', async () => { - await solos.pause({ from: admin }); - expect(await solos.paused()).equal(true); - - await expectRevert( - solos.registerValidator( - { soloId, ...validatorParams[1] }, - { - from: sender, - } - ), - 'Pausable: paused' - ); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('not admin fails to update validator price', async () => { - await expectRevert( - solos.setValidatorPrice(validatorPrice, { - from: other, - }), - 'OwnablePausable: access denied' - ); - }); - - it('admin can update validator price', async () => { - let receipt = await solos.setValidatorPrice(validatorPrice, { - from: admin, - }); - - await expectEvent(receipt, 'ValidatorPriceUpdated', { - validatorPrice: validatorPrice.toString(), - }); - }); - - it('registers single validator', async () => { - // one validator is already created - let totalAmount = validatorDeposit; - let newValidators = []; - newValidators.push({ - soloId: web3.utils.soliditySha3( - solos.address, - sender, - validator.withdrawalCredentials - ), - ...validator, - }); - - for (let i = 1; i < validatorParams.length; i++) { - await solos.addDeposit(validatorParams[i].withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - newValidators.push({ - soloId: web3.utils.soliditySha3( - solos.address, - sender, - validatorParams[i].withdrawalCredentials - ), - ...validatorParams[i], - }); - totalAmount = totalAmount.add(validatorDeposit); - } - - // check balance increased correctly - await checkCollectorBalance(solos, totalAmount); - - // register validators - for (let i = 0; i < newValidators.length; i++) { - let receipt = await solos.registerValidator(newValidators[i], { - from: operator, - }); - await checkValidatorRegistered({ - vrc, - operator, - transaction: receipt.tx, - pubKey: newValidators[i].publicKey, - withdrawalCredentials: newValidators[i].withdrawalCredentials, - signature: validatorParams[i].signature, - }); - await expectEvent(receipt, 'ValidatorRegistered', { - publicKey: validatorParams[i].publicKey, - soloId: newValidators[i].soloId, - price: validatorPrice, - operator, - }); - } - - await checkCollectorBalance(solos); - }); -}); diff --git a/test/solos/validatorParams.js b/test/solos/validatorParams.js deleted file mode 100644 index 382a0a54..00000000 --- a/test/solos/validatorParams.js +++ /dev/null @@ -1,56 +0,0 @@ -const validatorParams = [ - { - publicKey: - '0xac77c929681e44a8a8ca73b6b233156d2f5293104b7ba45810b9f306f7ce9f5474250987e422b2eb1339297ba2b8eba4', - signature: - '0xaaf804d51a0ea59c25f195a73185650692e67f131540152410d1bbf6f0900212c48567195406788998ead422555507dc0a1a82b20fc1863329bd0d29df0d7c153e3c5198d5ae9834033947d8322117a4a6d4548cfa990e80e8465d4f9f67ef37', - depositDataRoot: - '0x0e95ab0ebb2a2d7dddcd00bfb8c3dcd4ed41ad782147afa5098749e6a9a80794', - withdrawalCredentials: - '0x00986967e5a0aa1732539565fdd0d2f61a6069488b5924147d28d31ba94bc99b', - }, - { - publicKey: - '0x9883f4beb669b7848795ea98e03f5d43db9c3e5520be725e11805c8fe1be7776dcca6014d585904af321b166b3da83be', - signature: - '0xb320734cecd73b759f1dcaeb62b8c26217423ef0944ed482c64fbd739c43f672c785de841933fcc61e65bbc184bbf52b04267ff3656bd0309090c9406ec087c1611d3e338f110d1526037581e2a66f05389e0010fa2b8bc13c9355d938e4f4ce', - depositDataRoot: - '0xe7dd6595b4b5e79077cb8c30e565381e981d67975e74a7242459898f410654d6', - withdrawalCredentials: - '0x0000b8fdd5954180a07b0cb93300044f78588db6d1e8b333d35c99c8e73ba934', - }, - { - publicKey: - '0x91ad8babbfe790a99a1a51801ea6334aa20d29f15fb0f3c6286e83c5511af172c90ba7a1d5d44157e15cf951ca96ef9b', - signature: - '0xb0cd36c07af2206b61f1b0343f00e1a3ad7015010a491f533ba70dcb86cd94d18b6cec6e3f68004d9f2c3354eb904a3c050b41373399c7e3bf6bbc05056ebf644e247a7a85604bfce1a270730f3ad1ff3d363c9b526aafffd44f082f115068a4', - depositDataRoot: - '0x3c9b64bb71a67d1e6be459bf684b239a68b0335cc1206ca3c34857b340e879aa', - withdrawalCredentials: - '0x0051cec6eb753cd24fce4f421595ea9d8bbc87402a1028a72f468521819f3177', - }, - { - publicKey: - '0x8d8973c4565bf0104238611e3d4e660143146049489c8efee7b15df82d8593501269221a391bf50a5c78da5cc4dbddd5', - signature: - '0xa60be10dc3d35fb7de414aa638ed098211049d1578741e1a509fca334e3ba50bc365b293d1b362abc0fe5b545ab4ab3406200599b4121452efa4a8c831cc0f90d102954528f7f7d595f5daa3714e54060afdf2c6d55066cd2457537f8408dd2b', - depositDataRoot: - '0x4ff14da4a622977c67d75909055bee375a1d4fb87a3fbdea5477b9d44e6da807', - withdrawalCredentials: - '0x00c01386fa9823eda0af28e41b88608e61153b158623e2989ff7b2c489d766dc', - }, - { - publicKey: - '0xa3074a7179e674a8889142201e229e3a27e8ee66fe2d8f092e771afb5ce894bd614789a900f16e2327b5097132c75041', - signature: - '0x8c3e924bc357012de6a3cbd9eea5b2267ded3929849a8a7649f8a75e3d4c024f6ac14eb94330d6e4a99d7e598d49fab303ba1ebf299bc797609201459093b397d406ce1c69c0446f6dd3160818bd89263d03771f58d7df0856aece8950a2774e', - depositDataRoot: - '0x173856845dec3326fdc9d3c41ec7b744153799db175e36d753716ad4bfa6b1f0', - withdrawalCredentials: - '0x00206f328d344d1adfa297d5519c874b7e2b58dc2ef1cfb3725087b12f962609', - }, -]; - -module.exports = { - validatorParams, -}; diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index a1dd19c0..fdd30075 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -1,3 +1,4 @@ +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); const { expect } = require('chai'); const { expectRevert, @@ -6,31 +7,29 @@ const { ether, constants, send, - time, } = require('@openzeppelin/test-helpers'); const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); +const { contractSettings } = require('../../deployments/settings'); const { stopImpersonatingAccount, impersonateAccount, resetFork, checkRewardEthToken, setTotalRewards, - getOracleAccounts, + setupOracleAccounts, } = require('../utils'); const StakedEthToken = artifacts.require('StakedEthToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const OracleMock = artifacts.require('OracleMock'); -const maintainerFee = new BN(1000); +const MulticallMock = artifacts.require('MulticallMock'); +const protocolFee = new BN(1000); contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { const admin = contractSettings.admin; let stakedEthToken, rewardEthToken, - maintainer, totalSupply, pool, oracles, @@ -42,75 +41,78 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { await impersonateAccount(admin); await send.ether(sender, admin, ether('5')); - await upgradeContracts(); + let contracts = await upgradeContracts(); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + pool = await Pool.at(contracts.pool); oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); - maintainer = await rewardEthToken.maintainer(); + oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); totalSupply = await rewardEthToken.totalSupply(); - await rewardEthToken.setMaintainer(maintainer, { from: admin }); - await rewardEthToken.setMaintainerFee(maintainerFee, { from: admin }); + await rewardEthToken.setProtocolFee(protocolFee, { from: admin }); }); afterEach(async () => resetFork()); describe('restricted actions', () => { - it('not admin fails to update maintainer address', async () => { + it('not admin fails to update protocol fee recipient address', async () => { await expectRevert( - rewardEthToken.setMaintainer(sender, { + rewardEthToken.setProtocolFeeRecipient(sender, { from: sender, }), 'OwnablePausable: access denied' ); }); - it('fails to set zero address for the maintainer', async () => { - await expectRevert( - rewardEthToken.setMaintainer(constants.ZERO_ADDRESS, { + it('can set zero address for the protocol fee recipient', async () => { + let receipt = await rewardEthToken.setProtocolFeeRecipient( + constants.ZERO_ADDRESS, + { from: admin, - }), - 'RewardEthToken: invalid address' + } ); + + await expectEvent(receipt, 'ProtocolFeeRecipientUpdated', { + recipient: constants.ZERO_ADDRESS, + }); }); - it('admin can update maintainer address', async () => { - let receipt = await rewardEthToken.setMaintainer(sender, { + it('admin can update protocol fee recipient address', async () => { + let receipt = await rewardEthToken.setProtocolFeeRecipient(sender, { from: admin, }); - await expectEvent(receipt, 'MaintainerUpdated', { - maintainer: sender, + await expectEvent(receipt, 'ProtocolFeeRecipientUpdated', { + recipient: sender, }); }); - it('not admin fails to update maintainer fee', async () => { + it('not admin fails to update protocol fee', async () => { await expectRevert( - rewardEthToken.setMaintainerFee(9999, { + rewardEthToken.setProtocolFee(9999, { from: sender, }), 'OwnablePausable: access denied' ); }); - it('admin can update maintainer fee', async () => { - let receipt = await rewardEthToken.setMaintainerFee(9999, { + it('admin can update protocol fee', async () => { + let receipt = await rewardEthToken.setProtocolFee(9999, { from: admin, }); - await expectEvent(receipt, 'MaintainerFeeUpdated', { - maintainerFee: '9999', + await expectEvent(receipt, 'ProtocolFeeUpdated', { + protocolFee: '9999', }); }); - it('fails to set invalid maintainer fee', async () => { + it('fails to set invalid protocol fee', async () => { await expectRevert( - rewardEthToken.setMaintainerFee(10000, { + rewardEthToken.setProtocolFee(10000, { from: admin, }), - 'RewardEthToken: invalid fee' + 'RewardEthToken: invalid protocol fee' ); }); @@ -144,12 +146,74 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let prevTotalRewards = await rewardEthToken.totalRewards(); let newTotalRewards = prevTotalRewards.add(ether('10')); let receipt = await setTotalRewards({ - admin, + rewardEthToken, + oracles, + pool, totalRewards: newTotalRewards, + oracleAccounts, + }); + await expectEvent.inTransaction( + receipt.tx, + RewardEthToken, + 'RewardsUpdated', + { + periodRewards: newTotalRewards.sub(prevTotalRewards), + totalRewards: newTotalRewards, + } + ); + }); + + it('anyone cannot update rewards', async () => { + await expectRevert( + rewardEthToken.updateTotalRewards(ether('10'), { + from: sender, + }), + 'RewardEthToken: access denied' + ); + await checkRewardEthToken({ + rewardEthToken, + totalSupply, + account: sender, + balance: new BN(0), + }); + }); + + it('oracles can update rewards', async () => { + let prevTotalRewards = await rewardEthToken.totalRewards(); + let newTotalRewards = prevTotalRewards.add(ether('10')); + let receipt = await setTotalRewards({ rewardEthToken, oracles, + pool, + totalRewards: newTotalRewards, oracleAccounts, + }); + await expectEvent.inTransaction( + receipt.tx, + RewardEthToken, + 'RewardsUpdated', + { + periodRewards: newTotalRewards.sub(prevTotalRewards), + totalRewards: newTotalRewards, + protocolReward: new BN(0), + } + ); + }); + + it('assigns protocol fee to distributor', async () => { + await rewardEthToken.setProtocolFeeRecipient(constants.ZERO_ADDRESS, { + from: admin, + }); + + let periodReward = ether('10'); + let prevTotalRewards = await rewardEthToken.totalRewards(); + let newTotalRewards = prevTotalRewards.add(periodReward); + let receipt = await setTotalRewards({ + rewardEthToken, + oracles, pool, + totalRewards: newTotalRewards, + oracleAccounts, }); await expectEvent.inTransaction( receipt.tx, @@ -158,6 +222,9 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { { periodRewards: newTotalRewards.sub(prevTotalRewards), totalRewards: newTotalRewards, + protocolReward: periodReward + .mul(await rewardEthToken.protocolFee()) + .div(new BN(10000)), } ); }); @@ -173,18 +240,17 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { await pool.setMinActivatingDeposit(stakedAmount2.add(ether('1')), { from: admin, }); - await pool.addDeposit({ + await pool.stake({ from: sender1, value: stakedAmount1, }); - await pool.addDeposit({ + await pool.stake({ from: sender2, value: stakedAmount2, }); totalSupply = (await rewardEthToken.totalSupply()).add(ether('10')); await setTotalRewards({ - admin, totalRewards: totalSupply, rewardEthToken, pool, @@ -316,46 +382,44 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); it('cannot transfer rewards after total rewards update in the same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + let multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { + await oracles.addOracle(multicallMock.address, { from: admin, }); - await rewardEthToken.approve(mockedOracle.address, rewardAmount1, { + await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + let currentNonce = await oracles.currentRewardsNonce(); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); + let signatures = []; + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + activatedValidators.toString(), + totalRewards.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } await expectRevert( - mockedOracle.updateTotalRewardsAndTransferRewards( + multicallMock.updateTotalRewardsAndTransferRewards( totalRewards, activatedValidators, sender2, + signatures, { from: sender1, } @@ -365,45 +429,43 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); it('can transfer rewards before total rewards update in the same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { + await oracles.addOracle(multicallMock.address, { from: admin, }); - await rewardEthToken.approve(mockedOracle.address, rewardAmount1, { + await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + let currentNonce = await oracles.currentRewardsNonce(); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); + let signatures = []; + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + activatedValidators.toString(), + totalRewards.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } - let receipt = await mockedOracle.transferRewardsAndUpdateTotalRewards( + let receipt = await multicallMock.transferRewardsAndUpdateTotalRewards( totalRewards, activatedValidators, sender2, + signatures, { from: sender1, } diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index fec6240a..d1e2faec 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -1,3 +1,4 @@ +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); const { expect } = require('chai'); const { expectRevert, @@ -6,14 +7,13 @@ const { ether, constants, send, - time, } = require('@openzeppelin/test-helpers'); const { impersonateAccount, stopImpersonatingAccount, resetFork, checkStakedEthToken, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); @@ -23,29 +23,54 @@ const StakedEthToken = artifacts.require('StakedEthToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const OracleMock = artifacts.require('OracleMock'); +const MulticallMock = artifacts.require('MulticallMock'); -contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { +contract('StakedEthToken', (accounts) => { const admin = contractSettings.admin; + const [merkleDistributor, sender1, sender2, ...otherAccounts] = accounts; let stakedEthToken, rewardEthToken, pool, totalSupply, oracles, - oracleAccounts; + oracleAccounts, + activatedValidators, + totalRewards, + signatures; beforeEach(async () => { await impersonateAccount(admin); await send.ether(sender1, admin, ether('5')); - await upgradeContracts(); + let upgradedContracts = await upgradeContracts(); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); pool = await Pool.at(contracts.pool); - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + oracles, + admin, + accounts: otherAccounts, + }); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + let currentNonce = await oracles.currentRewardsNonce(); + activatedValidators = await pool.activatedValidators(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + activatedValidators.toString(), + totalRewards.toString(), + ] + ); + signatures = []; + let candidateId = hexlify(keccak256(encoded)); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } + totalSupply = await stakedEthToken.totalSupply(); }); @@ -71,9 +96,10 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { it('updates distributor principal when deposited by account with disabled rewards', async () => { // disable rewards + let prevPrincipal = await stakedEthToken.distributorPrincipal(); await stakedEthToken.toggleRewards(sender1, true, { from: admin }); let amount = ether('10'); - let receipt = await pool.addDeposit({ + let receipt = await pool.stake({ from: sender1, value: amount, }); @@ -83,23 +109,25 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { value: amount, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - amount + prevPrincipal.add(amount) ); }); }); describe('transfer', () => { let value = ether('10'); + let distributorPrincipal; beforeEach(async () => { await pool.setMinActivatingDeposit(value.add(ether('1')), { from: admin, }); - await pool.addDeposit({ + await pool.stake({ from: sender1, value, }); totalSupply = totalSupply.add(value); + distributorPrincipal = await stakedEthToken.distributorPrincipal(); }); it('cannot transfer to zero address', async () => { @@ -218,7 +246,6 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { it('preserves rewards during sETH2 transfer', async () => { let totalRewards = (await rewardEthToken.totalSupply()).add(ether('10')); await setTotalRewards({ - admin, totalRewards, rewardEthToken, pool, @@ -282,7 +309,7 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - value + distributorPrincipal.add(value) ); }); @@ -312,7 +339,7 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); }); @@ -343,51 +370,32 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - value + distributorPrincipal.add(value) ); }); it('cannot transfer staked amount after total rewards update in the same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, contracts.stakedEthToken, contracts.rewardEthToken, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { + await oracles.addOracle(multicallMock.address, { from: admin, }); - await stakedEthToken.approve(mockedOracle.address, value, { + await stakedEthToken.approve(multicallMock.address, value, { from: sender1, }); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let activatedValidators = await pool.activatedValidators(); - await expectRevert( - mockedOracle.updateTotalRewardsAndTransferStakedEth( + multicallMock.updateTotalRewardsAndTransferStakedEth( totalRewards, activatedValidators, sender2, + signatures, { from: sender1, } @@ -397,45 +405,26 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { }); it('can transfer staked amount before total rewards update in the same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, contracts.stakedEthToken, contracts.rewardEthToken, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { + await oracles.addOracle(multicallMock.address, { from: admin, }); - await stakedEthToken.approve(mockedOracle.address, value, { + await stakedEthToken.approve(multicallMock.address, value, { from: sender1, }); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let activatedValidators = await pool.activatedValidators(); - - let receipt = await mockedOracle.transferStakedEthAndUpdateTotalRewards( + let receipt = await multicallMock.transferStakedEthAndUpdateTotalRewards( totalRewards, activatedValidators, sender2, + signatures, { from: sender1, } diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index f05c459d..2fabdeb7 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -10,7 +10,7 @@ const { impersonateAccount, stopImpersonatingAccount, resetFork, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); @@ -23,7 +23,13 @@ const StakedEthToken = artifacts.require('StakedEthToken'); contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let admin = contractSettings.admin; - let oracles, rewardEthToken, stakedEthToken, pool, oracleAccounts; + let oracles, + rewardEthToken, + stakedEthToken, + distributorReward, + pool, + oracleAccounts, + distributorPrincipal; let [account, anyone] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -32,13 +38,14 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - await upgradeContracts(); - - oracles = await Oracles.at(contracts.oracles); + let upgradedContracts = await upgradeContracts(); + oracles = await Oracles.at(upgradedContracts.oracles); pool = await Pool.at(contracts.pool); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); - oracleAccounts = await getOracleAccounts({ oracles }); + oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); + distributorPrincipal = await stakedEthToken.distributorPrincipal(); + distributorReward = await rewardEthToken.balanceOf(constants.ZERO_ADDRESS); }); afterEach(async () => resetFork()); @@ -75,7 +82,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.addDeposit({ + await pool.stake({ from: account, value: deposit, }); @@ -93,7 +100,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { } ); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); receipt = await stakedEthToken.toggleRewards(account, false, { @@ -109,7 +116,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { } ); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); }); @@ -120,7 +127,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.addDeposit({ + await pool.stake({ from: account, value: deposit, }); @@ -133,14 +140,14 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // distributor principal updated expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); + ).to.be.bignumber.equal(distributorReward); // mint sETH2 for normal account - await pool.addDeposit({ + await pool.stake({ from: anyone, value: ether('5'), }); @@ -154,7 +161,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // new rewards arrive let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -176,11 +182,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(balance); + ).to.be.bignumber.greaterThan(distributorReward); // check normal account balance expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( @@ -204,7 +210,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { it('toggling rewards does not affect current rewards balance', async () => { // mint sETH2 for disabled account let deposit = ether('5'); - await pool.addDeposit({ + await pool.stake({ from: account, value: deposit, }); @@ -219,7 +225,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -242,13 +247,16 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let periodReward = await rewardEthToken.balanceOf(account); expect(periodReward).to.be.bignumber.greaterThan(new BN(0)); - // check distributor has no balance and reward + // check distributor reward arrived as usual expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal + ); + let newDistributorReward = await rewardEthToken.balanceOf( + constants.ZERO_ADDRESS + ); + expect(newDistributorReward).to.be.bignumber.greaterThan( + distributorReward ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); // disable rewards await stakedEthToken.toggleRewards(account, true, { @@ -273,16 +281,15 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance updated, reward didn't change expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); + ).to.be.bignumber.equal(newDistributorReward); // next rewards arrive totalRewards = totalRewards.add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -308,11 +315,14 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance didn't change, reward updated expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(periodReward); + ).to.be.bignumber.greaterThan(newDistributorReward); + newDistributorReward = await rewardEthToken.balanceOf( + constants.ZERO_ADDRESS + ); // re-enable rewards await stakedEthToken.toggleRewards(account, false, { @@ -337,46 +347,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance updated, reward didnt' change expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) - ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(periodReward); - - // next rewards arrive - totalRewards = totalRewards.add(ether('10')); - await setTotalRewards({ - admin, - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - - // manual checkpoints update - await rewardEthToken.updateRewardCheckpoint(account); - await rewardEthToken.updateRewardCheckpoint(constants.ZERO_ADDRESS); - await rewardEthToken.updateRewardCheckpoints( - account, - constants.ZERO_ADDRESS - ); - - // check user's balance didn't change, reward updated - expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( - deposit - ); - expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( - periodReward.mul(new BN(2)) - ); - - // check distributor balance and reward didn't change - expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.bignumber.equal(periodReward); + ).to.be.bignumber.equal(newDistributorReward); }); }); diff --git a/test/tokens/upgrading.test.js b/test/tokens/upgrading.test.js index b177ff71..1912a193 100644 --- a/test/tokens/upgrading.test.js +++ b/test/tokens/upgrading.test.js @@ -1,10 +1,4 @@ -const { - expectRevert, - send, - ether, - constants, - BN, -} = require('@openzeppelin/test-helpers'); +const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); const { @@ -17,7 +11,7 @@ const RewardEthToken = artifacts.require('RewardEthToken'); contract('RewardEthToken (upgrading)', ([anyone]) => { let admin = contractSettings.admin; - let rewardEthToken, merkleDistributor; + let rewardEthToken, oracles; after(async () => stopImpersonatingAccount(admin)); @@ -26,33 +20,25 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { await send.ether(anyone, admin, ether('5')); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - ({ merkleDistributor } = await upgradeContracts()); + ({ oracles } = await upgradeContracts()); }); afterEach(async () => resetFork()); it('fails to upgrade with not admin privilege', async () => { await expectRevert( - rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, - { - from: anyone, - } - ), + rewardEthToken.upgrade(oracles, { + from: anyone, + }), 'OwnablePausable: access denied' ); }); it('fails to upgrade when not paused', async () => { await expectRevert( - rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, - { - from: admin, - } - ), + rewardEthToken.upgrade(oracles, { + from: admin, + }), 'Pausable: not paused' ); }); @@ -60,25 +46,10 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { it('fails to upgrade twice', async () => { await rewardEthToken.pause({ from: admin }); await expectRevert( - rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, - { - from: admin, - } - ), - 'RewardEthToken: already upgraded' - ); - }); - - it('updates distributor checkpoint', async () => { - const rewardPerToken = await rewardEthToken.rewardPerToken(); - const distributorCheckpoint = await rewardEthToken.checkpoints( - constants.ZERO_ADDRESS - ); - await expect(distributorCheckpoint.rewardPerToken).to.bignumber.equal( - rewardPerToken + rewardEthToken.upgrade(oracles, { + from: admin, + }), + 'Pool: invalid Oracles address' ); - await expect(distributorCheckpoint.reward).to.bignumber.equal(new BN(0)); }); }); diff --git a/test/utils.js b/test/utils.js index 44b4285b..2d1784bc 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,7 +1,10 @@ -const hre = require('hardhat'); -const { expectEvent, constants, time } = require('@openzeppelin/test-helpers'); const { expect } = require('chai'); -const { BN, ether, balance } = require('@openzeppelin/test-helpers'); +const hre = require('hardhat'); +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); +const { BN, ether, expectEvent } = require('@openzeppelin/test-helpers'); +const { depositData } = require('./pool/depositDataMerkleRoot'); + +const iDepositContract = artifacts.require('IDepositContract'); function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { return ether(Math.random().toFixed(8)) @@ -10,57 +13,7 @@ function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { .add(min); } -async function checkSolo({ - solos, - soloId, - withdrawalCredentials = constants.ZERO_BYTES32, - amount = new BN(0), -} = {}) { - let solo = await solos.solos(soloId); - expect(solo.amount).to.bignumber.equal(amount); - expect(solo.withdrawalCredentials).equal(withdrawalCredentials); -} - -async function checkCollectorBalance( - collectorContract, - correctBalance = new BN(0) -) { - expect( - await balance.current(collectorContract.address) - ).to.be.bignumber.equal(correctBalance); -} - -async function checkSoloDepositAdded({ - receipt, - solos, - sender, - withdrawalCredentials, - addedAmount, - totalAmount, -}) { - let soloId = web3.utils.soliditySha3( - solos.address, - sender, - withdrawalCredentials - ); - - expectEvent(receipt, 'DepositAdded', { - soloId, - sender: sender, - amount: addedAmount, - withdrawalCredentials, - }); - - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: totalAmount, - }); -} - async function checkValidatorRegistered({ - vrc, transaction, pubKey, signature, @@ -68,17 +21,22 @@ async function checkValidatorRegistered({ validatorDepositAmount = ether('32'), }) { // Check VRC record created - await expectEvent.inTransaction(transaction, vrc, 'DepositEvent', { - pubkey: pubKey, - withdrawal_credentials: withdrawalCredentials, - amount: web3.utils.bytesToHex( - new BN(web3.utils.fromWei(validatorDepositAmount, 'gwei')).toArray( - 'le', - 8 - ) - ), - signature: signature, - }); + await expectEvent.inTransaction( + transaction, + iDepositContract, + 'DepositEvent', + { + pubkey: pubKey, + withdrawal_credentials: withdrawalCredentials, + amount: web3.utils.bytesToHex( + new BN(web3.utils.fromWei(validatorDepositAmount, 'gwei')).toArray( + 'le', + 8 + ) + ), + signature: signature, + } + ); } async function checkStakedEthToken({ @@ -119,19 +77,7 @@ async function checkRewardEthToken({ } } -async function getOracleAccounts({ oracles }) { - let oracleAccounts = []; - let oracleRole = await oracles.ORACLE_ROLE(); - for (let i = 0; i < (await oracles.getRoleMemberCount(oracleRole)); i++) { - let oracle = await oracles.getRoleMember(oracleRole, i); - await impersonateAccount(oracle); - oracleAccounts.push(oracle); - } - return oracleAccounts; -} - async function setActivatedValidators({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -143,33 +89,41 @@ async function setActivatedValidators({ return; } - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(new BN(newSyncPeriod))); - let totalRewards = await rewardEthToken.totalRewards(); - let nonce = await oracles.currentNonce(); - let receipt; + let nonce = await oracles.currentRewardsNonce(); + + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [nonce.toString(), activatedValidators.toString(), totalRewards.toString()] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForRewards( - nonce, - totalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if ((await pool.activatedValidators()).eq(activatedValidators)) { - return receipt; - } + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); } + + // update activated validators + let receipt = await oracles.submitRewards( + totalRewards, + activatedValidators, + signatures, + { + from: oracleAccounts[0], + } + ); + + expect(await pool.activatedValidators()).to.bignumber.equal( + activatedValidators + ); + + return receipt; } async function setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -179,30 +133,35 @@ async function setTotalRewards({ if ((await rewardEthToken.totalSupply()).eq(totalRewards)) { return; } - - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(new BN(newSyncPeriod))); - + // calculate candidate ID let activatedValidators = await pool.activatedValidators(); - let nonce = await oracles.currentNonce(); - let receipt; + let nonce = await oracles.currentRewardsNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [nonce.toString(), activatedValidators.toString(), totalRewards.toString()] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForRewards( - nonce, - totalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if ((await rewardEthToken.totalSupply()).eq(totalRewards)) { - return receipt; - } + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); } + + // update total rewards + let receipt = await oracles.submitRewards( + totalRewards, + activatedValidators, + signatures, + { + from: oracleAccounts[0], + } + ); + expect(await rewardEthToken.totalSupply()).to.bignumber.equal(totalRewards); + + return receipt; } async function setMerkleRoot({ @@ -216,16 +175,63 @@ async function setMerkleRoot({ return; } - let nonce = await oracles.currentNonce(); - let receipt; + let nonce = await oracles.currentRewardsNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'string', 'bytes32'], + [nonce.toString(), merkleProofs, merkleRoot] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForMerkleRoot(nonce, merkleRoot, merkleProofs, { - from: oracleAccounts[i], - }); - if ((await merkleDistributor.merkleRoot()) === merkleRoot) { - return receipt; - } + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); + } + + // update merkle root + return oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }); +} + +async function registerValidator({ + operator, + merkleProof = depositData[0].merkleProof, + signature = depositData[0].signature, + publicKey = depositData[0].publicKey, + withdrawalCredentials = depositData[0].withdrawalCredentials, + depositDataRoot = depositData[0].depositDataRoot, + oracles, + oracleAccounts, + validatorsDepositRoot, +}) { + let nonce = await oracles.currentValidatorsNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes', 'address', 'bytes32'], + [nonce.toString(), publicKey, operator, validatorsDepositRoot] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; + for (let i = 0; i < oracleAccounts.length; i++) { + await impersonateAccount(oracleAccounts[i]); + let sig = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(sig); } + + // register validator + return oracles.registerValidator( + { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, + merkleProof, + validatorsDepositRoot, + signatures, + { + from: oracleAccounts[0], + } + ); } async function impersonateAccount(account) { @@ -256,10 +262,32 @@ async function resetFork() { }); } +async function setupOracleAccounts({ admin, oracles, accounts }) { + let oracleRole = await oracles.ORACLE_ROLE(); + const totalOracles = ( + await oracles.getRoleMemberCount(oracleRole) + ).toNumber(); + + // remove oracles + for (let i = 0; i < totalOracles; i++) { + let oldOracle = await oracles.getRoleMember(oracleRole, 0); + await oracles.removeOracle(oldOracle, { from: admin }); + } + + // add oracles + let oracleAccounts = []; + for (let i = 0; i < totalOracles; i++) { + let newOracle = accounts[i]; + await oracles.addOracle(newOracle, { + from: admin, + }); + oracleAccounts.push(newOracle); + } + + return oracleAccounts; +} + module.exports = { - checkCollectorBalance, - checkSolo, - checkSoloDepositAdded, checkValidatorRegistered, getDepositAmount, checkStakedEthToken, @@ -270,5 +298,6 @@ module.exports = { setActivatedValidators, setTotalRewards, setMerkleRoot, - getOracleAccounts, + setupOracleAccounts, + registerValidator, }; diff --git a/yarn.lock b/yarn.lock index 4d7ccf75..b3a98979 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,38 +2,38 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.16.0" -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@codechecks/client@^0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.10.tgz#41fe736c424976d9feb8116b131fb9c1f099d105" - integrity sha512-rvX+LknmMohsLTU8mHJqIcNTo8fKfw6A5i7JvT6JJWqwCLi+TujHpRO8BLf48iF96+gU5viVvKfRaUyhc3wloA== +"@babel/runtime@^7.4.4": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== + dependencies: + regenerator-runtime "^0.13.4" + +"@codechecks/client@^0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.12.tgz#519f11be8fcaa581c6ee8d5e8457e35bbbe5d9b1" + integrity sha512-2GHHvhO3kaOyxFXxOaiznlY8ARmz33/p+WQdhc2y6wzWw5eOl2wSwg1eZxx3LsWlAnB963Y4bd1YjZcGIhKRzA== dependencies: bluebird "^3.5.3" chalk "^2.4.2" @@ -56,40 +56,134 @@ ts-node "^8.0.2" url-join "^4.0.0" -"@cto.af/textdecoder@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@cto.af/textdecoder/-/textdecoder-0.0.0.tgz#e1e8d84c936c30a0f4619971f19ca41941af9fdc" - integrity sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ== +"@ensdomains/address-encoder@^0.1.7": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" + integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== + dependencies: + bech32 "^1.1.3" + blakejs "^1.1.0" + bn.js "^4.11.8" + bs58 "^4.0.1" + crypto-addr-codec "^0.1.7" + nano-base32 "^1.0.1" + ripemd160 "^2.0.2" + +"@ensdomains/ens@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.3.tgz#f4a6b55146fe526c9a50e13f373bf90d36ca94dc" + integrity sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + ethereumjs-testrpc "^6.0.3" + ganache-cli "^6.1.0" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/ensjs@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.0.1.tgz#c27438f9ca074825ddb08430988c7decf2062a91" + integrity sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg== + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.3" + "@ensdomains/resolver" "0.2.4" + content-hash "^2.5.2" + eth-ens-namehash "^2.0.8" + ethers "^5.0.13" + js-sha3 "^0.8.0" -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@ensdomains/resolver@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" + debug "^4.3.2" + espree "^9.2.0" + globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethersproject/abi@5.0.0-beta.153": - version "5.0.0-beta.153" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" - integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== - dependencies: - "@ethersproject/address" ">=5.0.0-beta.128" - "@ethersproject/bignumber" ">=5.0.0-beta.130" - "@ethersproject/bytes" ">=5.0.0-beta.129" - "@ethersproject/constants" ">=5.0.0-beta.128" - "@ethersproject/hash" ">=5.0.0-beta.128" - "@ethersproject/keccak256" ">=5.0.0-beta.127" - "@ethersproject/logger" ">=5.0.0-beta.129" - "@ethersproject/properties" ">=5.0.0-beta.131" - "@ethersproject/strings" ">=5.0.0-beta.130" +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.0.tgz#5cf89ea748607597a3f8b038abc986e4ac0b05db" + integrity sha512-dqLo1LtsLG+Oelu5S5tWUDG0pah3QUwV5TJZy2cm19BXDr4ka/S9XBSgao0i09gTcuPlovlHgcs6d7EZ37urjQ== + dependencies: + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + ethereumjs-util "^7.1.3" + merkle-patricia-tree "^4.2.2" + +"@ethereumjs/blockchain@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz#60f1f50592c06cc47e1704800b88b7d32f609742" + integrity sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA== + dependencies: + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/ethash" "^1.1.0" + debug "^2.2.0" + ethereumjs-util "^7.1.3" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" + integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.3" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" + integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== + dependencies: + "@ethereumjs/common" "^2.6.0" + ethereumjs-util "^7.1.3" + +"@ethereumjs/vm@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" + integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== + dependencies: + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.1.3" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.2" + rustbn.js "~0.2.0" "@ethersproject/abi@5.0.7": version "5.0.7" @@ -106,571 +200,392 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.1.2", "@ethersproject/abi@^5.1.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.2.tgz#a8e75cd0455e6dc9e4861c3d1c22bbe436c1d775" - integrity sha512-uMhoQVPX0UtfzTpekYQSEUcJGDgsJ25ifz+SV6PDETWaUFhcR8RNgb1QPTASP13inW8r6iy0/Xdq9D5hK2pNvA== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.2": - version "5.0.13" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.13.tgz#600a559c3730467716595658beaa2894b4352bcc" - integrity sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg== - dependencies: - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/hash" "^5.0.10" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" - integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" - -"@ethersproject/abstract-provider@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz#a533aed39a5f27312745c8c4c40fa25fc884831c" - integrity sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ== - dependencies: - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/networks" "^5.0.7" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/transactions" "^5.0.9" - "@ethersproject/web" "^5.0.12" - -"@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" - integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/abstract-signer@^5.0.10": - version "5.0.14" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz#30ef912b0f86599d90fdffc65c110452e7b55cf1" - integrity sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g== - dependencies: - "@ethersproject/abstract-provider" "^5.0.8" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - -"@ethersproject/address@5.1.0", "@ethersproject/address@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" - integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - -"@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.11.tgz#12022e8c590c33939beb5ab18b401ecf585eac59" - integrity sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw== - dependencies: - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/rlp" "^5.0.7" - -"@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" - integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== - dependencies: - "@ethersproject/bytes" "^5.1.0" - -"@ethersproject/base64@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.9.tgz#bb1f35d3dba92082a574d5e2418f9202a0a1a7e6" - integrity sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA== - dependencies: - "@ethersproject/bytes" "^5.0.9" - -"@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" - integrity sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg== +"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" + integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + +"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/properties" "^5.1.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" -"@ethersproject/bignumber@5.1.1", "@ethersproject/bignumber@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" - integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== +"@ethersproject/address@5.5.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - bn.js "^4.4.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" -"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.7": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.15.tgz#b089b3f1e0381338d764ac1c10512f0c93b184ed" - integrity sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw== +"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.5.0" -"@ethersproject/bytes@5.1.0", "@ethersproject/bytes@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" - integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== +"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" -"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.11.tgz#21118e75b1d00db068984c15530e316021101276" - integrity sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg== +"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== dependencies: - "@ethersproject/logger" "^5.0.8" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" -"@ethersproject/constants@5.1.0", "@ethersproject/constants@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" - integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== +"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== dependencies: - "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.10.tgz#eb0c604fbc44c53ba9641eed31a1d0c9e1ebcadc" - integrity sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw== +"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== dependencies: - "@ethersproject/bignumber" "^5.0.13" + "@ethersproject/bignumber" "^5.5.0" -"@ethersproject/contracts@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" - integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== - dependencies: - "@ethersproject/abi" "^5.1.0" - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - -"@ethersproject/hash@5.1.0", "@ethersproject/hash@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" - integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.10", "@ethersproject/hash@^5.0.4": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.12.tgz#1074599f7509e2ca2bb7a3d4f4e39ab3a796da42" - integrity sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q== - dependencies: - "@ethersproject/abstract-signer" "^5.0.10" - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" - integrity sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/json-wallets@5.1.0", "@ethersproject/json-wallets@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz#bba7af2e520e8aea4d3829d80520db5d2e4fb8d2" - integrity sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + +"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.1.0", "@ethersproject/keccak256@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" - integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== - dependencies: - "@ethersproject/bytes" "^5.1.0" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.9.tgz#ca0d86e4af56c13b1ef25e533bde3e96d28f647d" - integrity sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw== - dependencies: - "@ethersproject/bytes" "^5.0.9" - js-sha3 "0.5.7" - -"@ethersproject/logger@5.1.0", "@ethersproject/logger@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" - integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== - -"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.10.tgz#fd884688b3143253e0356ef92d5f22d109d2e026" - integrity sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw== - -"@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" - integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/networks@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.9.tgz#ec5da11e4d4bfd69bec4eaebc9ace33eb9569279" - integrity sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg== +"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== dependencies: - "@ethersproject/logger" "^5.0.8" + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" -"@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" - integrity sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" +"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== -"@ethersproject/properties@5.1.0", "@ethersproject/properties@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" - integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== +"@ethersproject/networks@5.5.1", "@ethersproject/networks@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.1.tgz#b7f7b9fb88dec1ea48f739b7fb9621311aa8ce6c" + integrity sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.9.tgz#d7aae634680760136ea522e25c3ef043ec15b5c2" - integrity sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg== +"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== dependencies: - "@ethersproject/logger" "^5.0.8" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" -"@ethersproject/providers@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" - integrity sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" +"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/providers@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.1.tgz#ba87e3c93219bbd2e2edf8b369873aee774abf04" + integrity sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" bech32 "1.1.4" - ws "7.2.3" - -"@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" - integrity sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + ws "7.4.6" -"@ethersproject/rlp@5.1.0", "@ethersproject/rlp@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" - integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== +"@ethersproject/random@5.5.0", "@ethersproject/random@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9" + integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.9.tgz#da205bf8a34d3c3409eb73ddd237130a4b376aff" - integrity sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA== +"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" - integrity sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA== +"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - hash.js "1.1.3" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" -"@ethersproject/signing-key@5.1.0", "@ethersproject/signing-key@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" - integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== +"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" elliptic "6.5.4" + hash.js "1.1.7" -"@ethersproject/signing-key@^5.0.8": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.11.tgz#19fc5c4597e18ad0a5efc6417ba5b74069fdd2af" - integrity sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ== +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - elliptic "6.5.4" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" -"@ethersproject/solidity@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" - integrity sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ== +"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/strings@5.1.0", "@ethersproject/strings@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" - integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== +"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.10.tgz#ddce1e9724f4ac4f3f67e0cac0b48748e964bfdb" - integrity sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w== +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" + integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/logger" "^5.0.8" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" -"@ethersproject/transactions@5.1.1", "@ethersproject/transactions@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" - integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - -"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.11.tgz#b31df5292f47937136a45885d6ee6112477c13df" - integrity sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA== - dependencies: - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/rlp" "^5.0.7" - "@ethersproject/signing-key" "^5.0.8" - -"@ethersproject/units@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" - integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" -"@ethersproject/wallet@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.1.0.tgz#134c5816eaeaa586beae9f9ff67891104a2c9a15" - integrity sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/json-wallets" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/web@5.1.0", "@ethersproject/web@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" - integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== - dependencies: - "@ethersproject/base64" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/web@^5.0.12": - version "5.0.14" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.14.tgz#6e7bebdd9fb967cb25ee60f44d9218dc0803bac4" - integrity sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA== - dependencies: - "@ethersproject/base64" "^5.0.7" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" - integrity sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomiclabs/ethereumjs-vm@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.2.tgz#2f8817113ca0fb6c44c1b870d0a809f0e026a6cc" - integrity sha512-8WmX94mMcJaZ7/m7yBbyuS6B+wuOul+eF+RY9fBpGhNaUpyMR/vFIcDojqcWQ4Yafe1tMKY5LDu2yfT4NZgV4Q== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - core-js-pure "^3.0.1" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-blockchain "^4.0.3" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "3.0.0" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - util.promisify "^1.0.0" - -"@nomiclabs/hardhat-ethers@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" - integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== +"@nomiclabs/hardhat-ethers@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz#06e20a57274f6ce3148132910e723948a711edf1" + integrity sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag== -"@nomiclabs/hardhat-etherscan@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.2.tgz#333b70a6116e922d16de2ef833dcb7191319afdd" - integrity sha512-SExzaBuHlnmHw0HKkElHITzdvhUQmlIRc2tlaywzgvPbh7WoI24nYqZ4N0CO+JXSDgRpFycvQNA8zRaCqjuqUg== +"@nomiclabs/hardhat-etherscan@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz#e206275e96962cd15e5ba9148b44388bc922d8c2" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== dependencies: - "@ethersproject/abi" "^5.0.2" + "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" cbor "^5.0.2" debug "^4.1.1" @@ -678,15 +593,15 @@ node-fetch "^2.6.0" semver "^6.3.0" -"@nomiclabs/hardhat-truffle5@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.0.tgz#1363b7f4f90e3d5b049d22e5e6d3519ba1b91fdf" - integrity sha512-JLjyfeXTiSqa0oLHcN3i8kD4coJa4Gx6uAXybGv3aBiliEbHddLSzmBWx0EU69a1/Ad5YDdGSqVnjB8mkUCr/g== +"@nomiclabs/hardhat-truffle5@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.3.tgz#254319ea9f91bd22f124252d89399106768e5207" + integrity sha512-KbRrFB4NwppzwR8XkYyOopOO6XWOSqtxIoavCIDQ5iIikuZC+WGGoFgeHxypipk5qfD0DWi031IZlXBjOOuYAQ== dependencies: "@nomiclabs/truffle-contract" "^4.2.23" "@types/chai" "^4.2.0" chai "^4.2.0" - ethereumjs-util "^6.1.0" + ethereumjs-util "^7.1.3" fs-extra "^7.0.1" "@nomiclabs/hardhat-web3@^2.0.0": @@ -712,9 +627,9 @@ source-map-support "^0.5.19" "@openzeppelin/contract-loader@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz#f0c08f14d5dfeaeb44952ba777ec9ce1c9ff9759" - integrity sha512-/P8v8ZFVwK+Z7rHQH2N3hqzEmTzLFjhMtvNK4FeIak6DEeONZ92vdFaFb10CCCQtp390Rp/Y57Rtfrm50bUdMQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" + integrity sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg== dependencies: find-up "^4.1.0" fs-extra "^8.1.0" @@ -729,17 +644,17 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== -"@openzeppelin/hardhat-upgrades@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.7.0.tgz#3086273b477818822b889ced9b4bd6d431c35e33" - integrity sha512-fInSIsIu2jYOqMzw0uQF6cBB0xDDUl7YSKEGU3Jp31UGe4jQg11d/echw0gc4BvLvxWEzhMpmqwDqV1KJPqNyQ== +"@openzeppelin/hardhat-upgrades@^1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.12.0.tgz#35b4dd9bdefb203e7e0ba4b1c38df133bf721ddf" + integrity sha512-C5eOSt01zHKYUaRRDunqCsP5fXLpqFatIEs+NywVKLfVV6LNatugaNiRC4oHT8FF8wnr38uSoWrJJVTRoXUECw== dependencies: - "@openzeppelin/upgrades-core" "^1.7.0" + "@openzeppelin/upgrades-core" "^1.10.0" -"@openzeppelin/test-helpers@^0.5.11": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz#67a4d28b1c3b15f98c56ed64680f988c8e882bf0" - integrity sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw== +"@openzeppelin/test-helpers@^0.5.15": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.15.tgz#7727d4bb1535e1fa2372d65d1dcee335ce8d36af" + integrity sha512-10fS0kyOjc/UObo9iEWPNbC6MCeiQ7z97LDOJBj68g+AAs5pIGEI2h3V6G9TYTIq8VxOdwMQbfjKrx7Y3YZJtA== dependencies: "@openzeppelin/contract-loader" "^0.6.2" "@truffle/contract" "^4.0.35" @@ -752,19 +667,17 @@ web3 "^1.2.5" web3-utils "^1.2.5" -"@openzeppelin/upgrades-core@^1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.7.1.tgz#a63f06a6a904dcf543eb9fca32a127ec8e92fcad" - integrity sha512-il1BrWOmYGxhtmq0hEG4oXlCvcyCrKQzCgmFiv2lqM+qLhp3C/JaXSysVHLohKXrb3XLPNP0pC39KrMDzPW70Q== +"@openzeppelin/upgrades-core@^1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.10.0.tgz#d3aa72b7a23827e0e6daff08ddfb8dcd75171abb" + integrity sha512-N20t1i1wlHrVmu3etVZLiaRxT6XLkCrO9gIo4mUZNpsaVftl8V+WBu8o940AjoYXvzTEqj7O0re2DSFzjpkRBw== dependencies: bn.js "^5.1.2" - cbor "^7.0.0" + cbor "^8.0.0" chalk "^4.1.0" compare-versions "^3.6.0" debug "^4.1.1" ethereumjs-util "^7.0.3" - fp-ts "^2.7.1" - io-ts "^2.2.9" proper-lockfile "^4.1.1" solidity-ast "^0.4.15" @@ -841,15 +754,19 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.11.0": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" - integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== +"@solidity-parser/parser@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" + integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== + dependencies: + antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.0.tgz#18a0fb2a9d2484b23176f63b16093c64794fc323" - integrity sha512-DT3f/Aa4tQysZwUsuqBwvr8YRJzKkvPUKV/9o2/o5EVw3xqlbzmtx4O60lTUcZdCawL+N8bBLNUyOGpHjGlJVQ== +"@solidity-parser/parser@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.0.tgz#d51f074efb0acce0e953ec48133561ed710cebc0" + integrity sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ== + dependencies: + antlr4ts "^0.5.0-alpha.4" "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -858,6 +775,15 @@ dependencies: defer-to-connect "^1.0.1" +"@truffle/abi-utils@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.4.tgz#9fc8bfc95bbe29a33cca3ab9028865b078e2f051" + integrity sha512-ICr5Sger6r5uj2G5GN9Zp9OQDCaCqe2ZyAEyvavDoFB+jX0zZFUCfDnv5jllGRhgzdYJ3mec2390mjUyz9jSZA== + dependencies: + change-case "3.0.2" + faker "^5.3.1" + fast-check "^2.12.1" + "@truffle/blockchain-utils@^0.0.25": version "0.0.25" resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.25.tgz#f4b320890113d282f25f1a1ecd65b94a8b763ac1" @@ -865,16 +791,18 @@ dependencies: source-map-support "^0.5.19" -"@truffle/blockchain-utils@^0.0.28": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.28.tgz#6e2c7695c013bcce89af0f05de88210a25f7344a" - integrity sha512-Q3vtGzDAGI3q2OQV1rUX/HYGJ0PB4RKbrgnwSV3YLc01YOkv4baF5ZJbMxtgLDhJQap1llrN59u2BOAa+jVCsg== +"@truffle/blockchain-utils@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.31.tgz#0503d9fb2ce3e05c167c27294927f2f88d70a24d" + integrity sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw== -"@truffle/codec@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.10.2.tgz#b59746c91124b56370011ac1e1ac9a489b35b3eb" - integrity sha512-m396zHfF5ee8zv0O0SctVt0/FxGPv/x9pTm24BHlDz540S6wiWwarBb20QF4sXfJ7lwe6ZfwtyQHExuszCENlg== +"@truffle/codec@^0.11.20": + version "0.11.20" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.11.20.tgz#dfd74d16b739837415f42590b7a73ffa79b8af71" + integrity sha512-OJtP/AEaYH0QNoq/Z0Pyo4muN0piJDTXQlWPSTb+SI+ypgzd0RT5QOcpmtc6Q24mfeWRB3QbJxQP0ZSeyo1MVA== dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/compile-common" "^0.7.22" big.js "^5.2.2" bn.js "^5.1.3" cbor "^5.1.0" @@ -885,7 +813,7 @@ lodash.sum "^4.0.2" semver "^7.3.4" utf8 "^3.0.0" - web3-utils "1.2.9" + web3-utils "1.5.3" "@truffle/codec@^0.7.1": version "0.7.1" @@ -905,33 +833,41 @@ utf8 "^3.0.0" web3-utils "1.2.9" -"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.3.4.tgz#95f0265cac7de7bcaa0542f5fe671a7896011bfe" - integrity sha512-HzscBl/GhZBvPNQeD9l6ewSHSkvNmE+bA0iTVa0Y2mNf5GD5Y3fK2NPyfbOdtckOvLqebvYGEDEPRiXc3BZ05g== +"@truffle/compile-common@^0.7.22": + version "0.7.22" + resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.7.22.tgz#c376eea36f59dc770ece3bc8cbb7132f49352846" + integrity sha512-afFKh0Wphn8JrCSjOORKjO8/E1X0EtQv6GpFJpQCAWo3/i4VGcSVKR1rjkknnExtjEGe9PJH/Ym/opGH3pQyDw== + dependencies: + "@truffle/error" "^0.0.14" + colors "^1.4.0" + +"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.4.3": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.3.tgz#c1bcde343f70b9438314202e103a7d77d684603c" + integrity sha512-pgaTgF4CKIpkqVYZVr2qGTxZZQOkNCWOXW9VQpKvLd4G0SNF2Y1gyhrFbBhoOUtYlbbSty+IEFFHsoAqpqlvpQ== dependencies: ajv "^6.10.0" - crypto-js "^3.1.9-1" debug "^4.3.1" "@truffle/contract@^4.0.35": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.12.tgz#9c1fed962fae17a8fe1895c6e80314a00dc62cce" - integrity sha512-gnOkZe28k/pwPkl4Ke9mj7UwLHDr6nq1ZitZOhukXvq5mf6Ll9hsHhGCwlzKnxdwKHHUpJ/1saqp6OjXOiJYEw== - dependencies: - "@truffle/blockchain-utils" "^0.0.28" - "@truffle/contract-schema" "^3.3.4" - "@truffle/debug-utils" "^5.0.12" - "@truffle/error" "^0.0.12" - "@truffle/interface-adapter" "^0.4.20" + version "4.4.0" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.4.0.tgz#f49c50292e07cd147001899914dc58f08c351355" + integrity sha512-k/YbwIOJsRAn3+VseG/lOlFiqjValHYwXdEyCT5D1HRQ0MQZ7JPabR05+dAlY88BK5o9ejUXCh+TDc0CRDn/eQ== + dependencies: + "@ensdomains/ensjs" "^2.0.1" + "@truffle/blockchain-utils" "^0.0.31" + "@truffle/contract-schema" "^3.4.3" + "@truffle/debug-utils" "^6.0.1" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" bignumber.js "^7.2.1" - ethereum-ens "^0.8.0" + debug "^4.3.1" ethers "^4.0.32" - web3 "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" + web3 "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" "@truffle/debug-utils@^4.2.9": version "4.2.14" @@ -945,46 +881,54 @@ highlight.js "^9.15.8" highlightjs-solidity "^1.0.18" -"@truffle/debug-utils@^5.0.12": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.0.12.tgz#82ff52cef545ca8c0274292fb97d473253df1570" - integrity sha512-NkdSLjAvyylZAOJeywYHzCWHkrAm0kVPVkZZUtsej0wAvzqqL6FWV/jy9wKtpAv5hYhCQBU9BKrPdfdTnE6dYA== +"@truffle/debug-utils@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-6.0.1.tgz#8935a316f3a59bcee37bab0e4c43eea7d1283fc3" + integrity sha512-ntuLPYwKNOIeWfeb2emO9Tu2v1aH6mCLGBrKRrDX4ofMUbPyN3ujxiCg/FCxbkL9cpkbH9zOHLmu2ubNlZ3gvA== dependencies: - "@truffle/codec" "^0.10.2" + "@truffle/codec" "^0.11.20" "@trufflesuite/chromafi" "^2.2.2" bn.js "^5.1.3" chalk "^2.4.2" debug "^4.3.1" - highlight.js "^10.4.0" - highlightjs-solidity "^1.0.21" + highlightjs-solidity "^2.0.2" "@truffle/error@^0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.11.tgz#2789c0042d7e796dcbb840c7a9b5d2bcd8e0e2d8" integrity sha512-ju6TucjlJkfYMmdraYY/IBJaFb+Sa+huhYtOoyOJ+G29KcgytUVnDzKGwC7Kgk6IsxQMm62Mc1E0GZzFbGGipw== -"@truffle/error@^0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.12.tgz#83e02e6ffe1d154fe274141d90038a91fd1e186d" - integrity sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g== +"@truffle/error@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" + integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== + +"@truffle/interface-adapter@^0.4.16": + version "0.4.24" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.24.tgz#5d6d4f10c756e967f19ac2ad1620d11d25c034bb" + integrity sha512-2Zho4dJbm/XGwNleY7FdxcjXiAR3SzdGklgrAW4N/YVmltaJv6bT56ACIbPNN6AdzkTSTO65OlsB/63sfSa/VA== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.3.6" -"@truffle/interface-adapter@^0.4.16", "@truffle/interface-adapter@^0.4.20": - version "0.4.20" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz#cf3f176e6fe14321bf164d502bf8d05e50209eb5" - integrity sha512-GcdtXjU+Mhx/WuD3Af1thojHilhUAWtKfoNF09oEDyGSrS0QEWq9s9kOFjrfTFJrK+g0I6VXMrU2sIido96NBA== +"@truffle/interface-adapter@^0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.8.tgz#76cfd34374d85849e1164de1a3d5a3dce0dc5d01" + integrity sha512-vvy3xpq36oLgjjy8KE9l2Jabg3WcGPOt18tIyMfTQX9MFnbHoQA2Ne2i8xsd4p6KfxIqSjAB53Q9/nScAqY0UQ== dependencies: bn.js "^5.1.3" ethers "^4.0.32" - web3 "1.2.9" + web3 "1.5.3" "@truffle/provider@^0.2.24": - version "0.2.27" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.27.tgz#8d06f94df6e6ea632ccd4518c419f6d3c0b05531" - integrity sha512-PwFcrH++FslHQMZEiID6t6CFTVavJHj4EVszmMS3E4+P9HIcpZTh/hHACqXhvlBxv94J9yM6SFmcSSokn8GC7A== + version "0.2.42" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.42.tgz#9da6a144b3c9188cdb587451dd7bd907b4c7164b" + integrity sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg== dependencies: - "@truffle/error" "^0.0.12" - "@truffle/interface-adapter" "^0.4.20" - web3 "1.2.9" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" + web3 "1.5.3" "@trufflesuite/chromafi@^2.2.1", "@trufflesuite/chromafi@^2.2.2": version "2.2.2" @@ -1006,6 +950,11 @@ strip-indent "^2.0.0" super-split "^1.1.0" +"@types/abstract-leveldown@*": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz#ee81917fe38f770e29eec8139b6f16ee4a8b0a5f" + integrity sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ== + "@types/bignumber.js@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" @@ -1013,7 +962,7 @@ dependencies: bignumber.js "*" -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1028,14 +977,14 @@ "@types/node" "*" "@types/chai@^4.2.0": - version "4.2.15" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.15.tgz#b7a6d263c2cecf44b6de9a051cf496249b154553" - integrity sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== "@types/concat-stream@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" - integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: "@types/node" "*" @@ -1047,48 +996,57 @@ "@types/node" "*" "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + "@types/lru-cache@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" - integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + version "16.11.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.12.tgz#ac7fb693ac587ee182c3780c26eb65546a1a3c10" + integrity sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw== -"@types/node@^10.0.3", "@types/node@^10.12.18": - version "10.17.56" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" - integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^12.12.6", "@types/node@^12.6.1": - version "12.20.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" - integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== +"@types/node@^12.12.6": + version "12.20.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" + integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== "@types/node@^8.0.0": version "8.10.66" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -1097,14 +1055,14 @@ "@types/node" "*" "@types/qs@^6.2.31": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/secp256k1@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" - integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" @@ -1125,25 +1083,26 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" - integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~2.6.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" xtend "~4.0.0" accepts@~1.3.7: @@ -1154,20 +1113,37 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.7: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== address@^1.0.1: version "1.1.2" @@ -1199,7 +1175,12 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1209,15 +1190,14 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.4.tgz#8e239d4d56cf884bccca8cca362f508446dc160f" - integrity sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A== +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" amdefine@>=0.0.4: version "1.0.1" @@ -1262,6 +1242,11 @@ ansi-mark@^1.0.0: strip-ansi "^4.0.0" super-split "^1.1.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -1272,10 +1257,15 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1291,6 +1281,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -1301,10 +1296,23 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1321,10 +1329,25 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-flatten@1.1.1: version "1.1.1" @@ -1336,11 +1359,16 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.3: +array-uniq@1.0.3, array-uniq@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1357,9 +1385,9 @@ asn1.js@^5.2.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -1368,11 +1396,24 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + ast-parents@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" @@ -1388,7 +1429,12 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.2: +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -1400,12 +1446,12 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, async@^1.4.2: +async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.6.1: +async@^2.1.2, async@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1417,12 +1463,15 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -available-typed-arrays@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" - integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== - dependencies: - array-filter "^1.0.0" +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: version "0.7.0" @@ -1435,22 +1484,35 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2, base-x@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" - integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1458,26 +1520,36 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bech32@1.1.4: +bech32@1.1.4, bech32@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" - integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== bignumber.js@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1498,11 +1570,11 @@ bip66@^1.1.5: safe-buffer "^5.0.1" blakejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" - integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.3: +bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.2, bluebird@^3.5.3: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1517,17 +1589,17 @@ bn.js@4.11.8: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -body-parser@1.19.0, body-parser@^1.16.0: +body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -1543,11 +1615,27 @@ body-parser@1.19.0, body-parser@^1.16.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - +body-parser@^1.16.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== + dependencies: + bytes "3.1.1" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + borc@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19" @@ -1569,6 +1657,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1640,7 +1744,14 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -bs58@^4.0.0: +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= @@ -1657,9 +1768,9 @@ bs58check@^2.1.2: safe-buffer "^5.1.2" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-to-arraybuffer@^0.0.5: version "0.0.5" @@ -1678,6 +1789,23 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" +buffer@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1687,17 +1815,42 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: ieee754 "^1.1.13" bufferutil@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" + integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -1743,6 +1896,24 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -1774,18 +1945,25 @@ cbor@^5.0.2, cbor@^5.1.0: bignumber.js "^9.0.1" nofilter "^1.0.4" -cbor@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-7.0.4.tgz#8a3ef39f07ac3fdb69dda461b87db7113233481b" - integrity sha512-9hBTn31l7+9qteBso7+HPp2R5ytqFRBd98fHK4ZTpvrba8V7CuoOsEL0S6vf7+11gubMTd3RW97lOgMTl5SNfg== +cbor@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== dependencies: - "@cto.af/textdecoder" "^0.0.0" - nofilter "^2.0.3" + nofilter "^3.1.0" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" chai-bn@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.1.tgz#1dad95e24c3afcd8139ab0262e9bbefff8a30ab7" - integrity sha512-01jt2gSXAw7UYFPT5K8d7HYjdXj2vyeIuE+0T/34FWzlNcVbs1JkPxRu7rYMfQnJhrHT8Nr6qjSf5ZwwLU2EYg== + version "0.2.2" + resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" + integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== chai@^4.2.0, chai@^4.3.4: version "4.3.4" @@ -1808,21 +1986,37 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" +change-case@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" + integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" chardet@^0.7.0: version "0.7.0" @@ -1839,36 +2033,29 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -checkpoint-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= - dependencies: - functional-red-black-tree "^1.0.1" - -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== +cheerio-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" + integrity sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg== dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" + css-select "^4.1.3" + css-what "^5.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.7.0" cheerio@^1.0.0-rc.2: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" + integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== + dependencies: + cheerio-select "^1.5.0" + dom-serializer "^1.3.2" + domhandler "^4.2.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + tslib "^2.2.0" chokidar@3.3.0: version "3.3.0" @@ -1885,22 +2072,41 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: - anymatch "~3.1.1" + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.0, chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -chownr@^1.1.1: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -1934,6 +2140,16 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -1974,9 +2190,9 @@ cli-table3@^0.6.0: colors "^1.1.2" cli-table@^0.3.1: - version "0.3.6" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" - integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== + version "0.3.11" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" + integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== dependencies: colors "1.0.3" @@ -1988,11 +2204,37 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2009,6 +2251,19 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2033,6 +2288,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -2070,16 +2330,21 @@ commander@^2.15.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== compare-versions@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2095,6 +2360,24 @@ concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2132,20 +2415,30 @@ cookie@^0.4.1: integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookiejar@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" - integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + version "3.19.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.3.tgz#c69b2b36b58927317824994b532ec3f0f7e49607" + integrity sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -2164,16 +2457,13 @@ cosmiconfig@^5.0.7: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + exit-on-epipe "~1.0.1" + printj "~1.1.0" create-ecdh@^4.0.0: version "4.0.4" @@ -2206,6 +2496,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2217,7 +2516,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2231,7 +2530,20 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -crypto-browserify@3.12.0: +crypto-addr-codec@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" + integrity sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg== + dependencies: + base-x "^3.0.8" + big-integer "1.6.36" + blakejs "^1.1.0" + bs58 "^4.0.1" + ripemd160-min "0.0.6" + safe-buffer "^5.2.0" + sha3 "^2.1.1" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -2248,26 +2560,21 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== +css-select@^4.1.3: + version "4.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.0.tgz#ab28276d3afb00cc05e818bd33eb030f14f57895" + integrity sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw== dependencies: boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +css-what@^5.0.1, css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== d@1, d@^1.0.1: version "1.0.1" @@ -2289,7 +2596,7 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= -debug@2.6.9, debug@^2.2.0, debug@^2.6.0: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2303,14 +2610,14 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2327,11 +2634,6 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -2340,28 +2642,21 @@ deep-eql@^3.0.1: type-detect "^4.0.0" deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -deferred-leveldown@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== - dependencies: - abstract-leveldown "~2.6.0" - -deferred-leveldown@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" - integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== dependencies: - abstract-leveldown "~5.0.0" + abstract-leveldown "~6.2.1" inherits "^2.0.3" define-properties@^1.1.2, define-properties@^1.1.3: @@ -2371,6 +2666,28 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2445,13 +2762,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@^1.0.1, dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== +dom-serializer@^1.0.1, dom-serializer@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" dom-walk@^0.1.0: @@ -2459,26 +2776,38 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domelementtype@^2.0.1, domelementtype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: - domelementtype "^2.1.0" + domelementtype "^2.2.0" -domutils@^2.4.3, domutils@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.0.tgz#42f49cffdabb92ad243278b331fd761c1c2d3039" - integrity sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg== +domutils@^2.5.2, domutils@^2.7.0, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= + dependencies: + no-case "^2.2.0" drbg.js@^1.0.1: version "1.0.1" @@ -2507,19 +2836,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -2543,21 +2859,30 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding-down@~5.0.0: - version "5.0.4" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" - integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== dependencies: - abstract-leveldown "^5.0.0" + abstract-leveldown "^6.2.1" inherits "^2.0.3" level-codec "^9.0.0" level-errors "^2.0.0" - xtend "^4.0.1" end-of-stream@^1.1.0: version "1.4.4" @@ -2566,6 +2891,16 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + enquirer@^2.3.0, enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -2578,51 +2913,50 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@~0.1.1: +errno@^0.1.3, errno@~0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.18.5, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" - is-callable "^1.2.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -2633,7 +2967,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -2642,7 +2976,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -2651,7 +2985,38 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -2659,6 +3024,16 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2669,6 +3044,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" @@ -2681,15 +3061,25 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-config-prettier@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-plugin-prettier@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== +eslint-plugin-prettier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" + integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -2701,13 +3091,13 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" + estraverse "^5.2.0" eslint-utils@^1.3.1: version "1.4.3" @@ -2716,22 +3106,27 @@ eslint-utils@^1.3.1: dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== eslint@^5.6.0: version "5.16.0" @@ -2775,46 +3170,47 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^7.25.0: - version "7.25.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" - integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== +eslint@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.4.1.tgz#d6531bbf3e598dffd7c0c7d35ec52a0b30fdfa2d" + integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.2.0" esquery "^1.4.0" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" + glob-parent "^6.0.1" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.21" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" progress "^2.0.0" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.2.1" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.4" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -2827,14 +3223,14 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: - acorn "^7.4.0" + acorn "^8.6.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.1.0" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" @@ -2871,9 +3267,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -2885,7 +3281,7 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0: +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0, eth-ens-namehash@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= @@ -2893,13 +3289,13 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.20: - version "0.2.22" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.22.tgz#bbe91f5d7b22433d26f099eeb5b20118ced0e575" - integrity sha512-L1FlC792aTf3j/j+gGzSNlGrXKSxNPXQNk6TnV5NNZ2w3jnQCRyJjDl0zUo25Cq2t90IS5vGdbkwqFQK7Ce+kw== +eth-gas-reporter@^0.2.23: + version "0.2.23" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.23.tgz#7a2a412b41285298cdad810cf54adac11d406208" + integrity sha512-T8KsVakDEupvQxW3MfFfHDfJ7y8zl2+XhyEQk4hZ3qQsAh/FE27BfFHM9UhqNQvrJLz8zVWnPZWNcARwLT/lsA== dependencies: "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.14.0" cli-table3 "^0.5.0" colors "^1.1.2" ethereumjs-util "6.2.0" @@ -2923,7 +3319,7 @@ eth-lib@0.2.7: elliptic "^6.4.0" xhr-request-promise "^0.1.2" -eth-lib@0.2.8, eth-lib@^0.2.8: +eth-lib@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== @@ -2964,20 +3360,10 @@ eth-sig-util@^3.0.1: tweetnacl "^1.0.3" tweetnacl-util "^0.15.0" -ethashjs@~0.0.7: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" - integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== - dependencies: - async "^2.1.2" - buffer-xor "^2.0.1" - ethereumjs-util "^7.0.2" - miller-rabin "^4.0.0" - ethereum-bloom-filters@^1.0.6: - version "1.0.9" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" - integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== dependencies: js-sha3 "^0.8.0" @@ -3022,48 +3408,19 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-account@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" - integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== - dependencies: - ethereumjs-util "^6.0.0" - rlp "^2.2.1" - safe-buffer "^5.1.1" - -ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" - integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== - dependencies: - async "^2.0.1" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.1" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-blockchain@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" - integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== - dependencies: - async "^2.6.1" - ethashjs "~0.0.7" - ethereumjs-block "~2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.1.0" - flow-stoplight "^1.0.0" - level-mem "^3.0.1" - lru-cache "^5.1.1" - rlp "^2.2.2" - semaphore "^1.1.0" - ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== -ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: +ethereumjs-testrpc@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz#7a0b87bf3670f92f607f98fa6a78801d9741b124" + integrity sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA== + dependencies: + webpack "^3.0.0" + +ethereumjs-tx@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== @@ -3084,7 +3441,7 @@ ethereumjs-util@6.2.0: rlp "^2.2.3" secp256k1 "^3.0.1" -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -3097,7 +3454,7 @@ ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumj ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.2.0: +ethereumjs-util@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== @@ -3110,38 +3467,25 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.2.0: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" - integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" + integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" create-hash "^1.1.2" ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" rlp "^2.2.4" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3: - version "7.0.9" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.9.tgz#2038baeb30f370a3e576ec175bd70bbbb6807d42" - integrity sha512-cRqvYYKJoitq6vMKMf8pXeVwvTrX+dRD0JwHaYqm8jvogK14tqIoCWH/KUHcRwnVxVXEYF/o6pup5jRG4V0xzg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.4" - -ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: - version "4.0.48" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" - integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== +ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== dependencies: aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.3" + bn.js "^4.11.9" + elliptic "6.5.4" hash.js "1.1.3" js-sha3 "0.5.7" scrypt-js "2.0.4" @@ -3149,41 +3493,41 @@ ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.4.tgz#8ae973705ed962f8f41dc59693704002a38dd18b" - integrity sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g== - dependencies: - "@ethersproject/abi" "5.1.2" - "@ethersproject/abstract-provider" "5.1.0" - "@ethersproject/abstract-signer" "5.1.0" - "@ethersproject/address" "5.1.0" - "@ethersproject/base64" "5.1.0" - "@ethersproject/basex" "5.1.0" - "@ethersproject/bignumber" "5.1.1" - "@ethersproject/bytes" "5.1.0" - "@ethersproject/constants" "5.1.0" - "@ethersproject/contracts" "5.1.1" - "@ethersproject/hash" "5.1.0" - "@ethersproject/hdnode" "5.1.0" - "@ethersproject/json-wallets" "5.1.0" - "@ethersproject/keccak256" "5.1.0" - "@ethersproject/logger" "5.1.0" - "@ethersproject/networks" "5.1.0" - "@ethersproject/pbkdf2" "5.1.0" - "@ethersproject/properties" "5.1.0" - "@ethersproject/providers" "5.1.2" - "@ethersproject/random" "5.1.0" - "@ethersproject/rlp" "5.1.0" - "@ethersproject/sha2" "5.1.0" - "@ethersproject/signing-key" "5.1.0" - "@ethersproject/solidity" "5.1.0" - "@ethersproject/strings" "5.1.0" - "@ethersproject/transactions" "5.1.1" - "@ethersproject/units" "5.1.0" - "@ethersproject/wallet" "5.1.0" - "@ethersproject/web" "5.1.0" - "@ethersproject/wordlists" "5.1.0" +ethers@^5.0.13, ethers@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.2.tgz#cd2e508c7342c44fa70392f722e8de8f2416489f" + integrity sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.1" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.1" + "@ethersproject/random" "5.5.0" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.1" + "@ethersproject/wordlists" "5.5.0" ethjs-abi@^0.2.1: version "0.2.1" @@ -3210,25 +3554,28 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -3238,6 +3585,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3251,21 +3611,39 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3303,11 +3681,26 @@ express@^4.14.0: vary "~1.1.2" ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: - type "^2.0.0" + assign-symbols "^1.0.0" + is-extendable "^1.0.1" extend@~3.0.2: version "3.0.2" @@ -3323,24 +3716,43 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fake-merkle-patricia-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= +faker@^5.3.1: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + +fast-check@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.20.0.tgz#0c88d8640649e981adb501ef92f90a26dc8bd628" + integrity sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog== dependencies: - checkpoint-store "^1.1.0" + pure-rand "^5.0.0" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -3351,16 +3763,15 @@ fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -3373,9 +3784,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -3386,13 +3797,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -3412,6 +3816,16 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3439,7 +3853,15 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^2.1.0: +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -3484,26 +3906,19 @@ flatted@^2.0.0: integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -flow-stoplight@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" - integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== follow-redirects@^1.12.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + version "1.14.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" + integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= foreach@^2.0.5: version "2.0.5" @@ -3533,10 +3948,10 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fp-ts@1.19.3: version "1.19.3" @@ -3548,10 +3963,12 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fp-ts@^2.7.1: - version "2.9.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.9.5.tgz#6690cd8b76b84214a38fc77cbbbd04a38f86ea90" - integrity sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA== +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" @@ -3596,7 +4013,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -3613,12 +4030,20 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -3633,7 +4058,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-cli@^6.11.0: +ganache-cli@^6.1.0, ganache-cli@^6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== @@ -3642,6 +4067,11 @@ ganache-cli@^6.11.0: source-map-support "0.5.12" yargs "13.2.4" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -3652,7 +4082,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -3661,11 +4091,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -3683,13 +4108,31 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3705,13 +4148,28 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -3736,9 +4194,9 @@ glob@^5.0.15: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3776,17 +4234,10 @@ globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" - integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" @@ -3841,10 +4292,10 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== growl@1.10.5: version "1.10.5" @@ -3876,36 +4327,42 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-abi-exporter@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.2.1.tgz#98ad242d08987d34416c6315729f36f9d544e4fa" - integrity sha512-Um7+RPvJEj+OqWjPoPKlTTkO1Akr10pqpgMk8Pw2jz2wrGv5XQBGNW5aQgGVDUosYktUIWDaEhcwwFKbFsir9A== +hardhat-abi-exporter@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.3.1.tgz#0efe56a9d51c3b1c15fe4e66864852e289611372" + integrity sha512-p55zxuCI6JwKSOC2Yp7IRqib41lVczL/h7gwL6xYytG0GCwrT9TJ3Su/18oc6gI4kXbOMYPo/LcXEV/s3P5ONg== -hardhat-contract-sizer@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.3.tgz#604455fd803865f81c29f60364e863eaa19395a7" - integrity sha512-iaixOzWxwOSIIE76cl2uk4m9VXI1hKU3bFt+gl7jDhyb2/JB2xOp5wECkfWqAoc4V5lD4JtjldZlpSTbzX+nPQ== +hardhat-contract-sizer@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.1.1.tgz#d861bfac8dff00cca859e14c5a4843367dd0f068" + integrity sha512-QgfuwdUkKT7Ugn6Zja26Eie7h6OLcBfWBewaaQtYMCzyglNafQPgUIznN2C42/iFmGrlqFPbqv4B98Iev89KSQ== dependencies: cli-table3 "^0.6.0" colors "^1.4.0" -hardhat-gas-reporter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.4.tgz#59e3137e38e0dfeac2e4f90d5c74160b50ad4829" - integrity sha512-G376zKh81G3K9WtDA+SoTLWsoygikH++tD1E7llx+X7J+GbIqfwhDKKgvJjcnEesMrtR9UqQHK02lJuXY1RTxw== +hardhat-gas-reporter@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.6.tgz#699bc0bb96e8c962c7f136a1c1f29cd3c32d569e" + integrity sha512-LlCEmSx1dZpnxKmODb2hmP5eJ1IAM5It3NnBNTUpBTxn9g9qPPI3JQTxj8AbGEiNc3r6V+w/mXYCmiC8pWvnoQ== dependencies: - eth-gas-reporter "^0.2.20" + array-uniq "1.0.3" + eth-gas-reporter "^0.2.23" sha1 "^1.1.1" -hardhat@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.1.2.tgz#a2128b71b0fb216ffc978c85a2030835b4e306ea" - integrity sha512-42iOheDsDl6Gr7sBfpA0S+bQUIcXSDEUrrqmnFEcBHx9qBoQad3s212y2ODmmkdLt+PqqTM+Mq8N3bZDTdjoLg== - dependencies: - "@nomiclabs/ethereumjs-vm" "4.2.2" +hardhat@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.7.1.tgz#576a0420ce874fe00e7749924aefef2a0b14d3ae" + integrity sha512-zmyQe9tOMI9UmFXNnDzdrKMezmKyAawVxU0oIipWPbl9D3zvQJEKaOaNgc9gG31dgkh4WqWCnUR/QxV1U6ctzA== + dependencies: + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + "@ethereumjs/vm" "^5.6.0" + "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.11.0" - "@types/bn.js" "^4.11.5" + "@solidity-parser/parser" "^0.14.0" + "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" adm-zip "^0.4.16" @@ -3919,19 +4376,16 @@ hardhat@^2.1.2: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" + ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" glob "^7.1.3" + https-proxy-agent "^5.0.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" lodash "^4.17.11" - merkle-patricia-tree "3.0.0" + merkle-patricia-tree "^4.2.0" mnemonist "^0.38.0" mocha "^7.1.2" node-fetch "^2.6.0" @@ -3945,8 +4399,8 @@ hardhat@^2.1.2: stacktrace-parser "^0.1.10" "true-case-path" "^2.2.1" tsort "0.0.1" - uuid "^3.3.2" - ws "^7.2.1" + uuid "^8.3.2" + ws "^7.4.6" has-bigints@^1.0.1: version "1.0.1" @@ -3990,6 +4444,44 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -4014,7 +4506,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -4027,22 +4519,35 @@ he@1.2.0, he@^1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -highlight.js@^10.4.0, highlight.js@^10.4.1: - version "10.7.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.1.tgz#a8ec4152db24ea630c90927d6cae2a45f8ecb955" - integrity sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA== +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + +highlight.js@^10.4.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== highlight.js@^9.15.8: version "9.18.5" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== -highlightjs-solidity@^1.0.18, highlightjs-solidity@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.0.21.tgz#6d257215b5b635231d4d0c523f2c419bbff6fe42" - integrity sha512-ozOtTD986CBIxuIuauzz2lqCOTpd27TbfYm+msMtNSB69mJ0cdFNvZ6rOO5iFtEHtDkVYVEFQywXffG2sX3XTw== +highlightjs-solidity@^1.0.18: + version "1.2.2" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.2.2.tgz#049a050c0d8009c99b373537a4e66bf55366de51" + integrity sha512-+cZ+1+nAO5Pi6c70TKuMcPmwqLECxiYhnQc1MxdXckK94zyWFMNZADzu98ECNlf5xCRdNh+XKp+eklmRU+Dniw== + +highlightjs-solidity@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.2.tgz#87ffdec3c51ae8b6def42d50f9a40b4676f57e4e" + integrity sha512-q0aYUKiZ9MPQg41qx/KpXKaCpqql50qTvmwGYyLFfcjt9AE/+C9CwjVIdJZc7EYj6NGgJuFJ4im1gfgrzUU1fQ== -hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -4051,14 +4556,19 @@ hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -htmlparser2@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" - integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" - domutils "^2.4.4" + domutils "^2.5.2" entities "^2.0.0" http-basic@^8.1.1: @@ -4087,7 +4597,18 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@~1.7.2: +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -4119,6 +4640,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -4127,15 +4653,15 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" - integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -4151,7 +4677,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4162,9 +4688,9 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== immediate@^3.2.3: version "3.3.0" @@ -4177,9 +4703,9 @@ immediate@~3.2.3: integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= immutable@^4.0.0-rc.12: - version "4.0.0-rc.12" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" - integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== import-fresh@^2.0.0: version "2.0.0" @@ -4220,6 +4746,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -4249,11 +4780,25 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -4266,22 +4811,32 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -io-ts@^2.2.9: - version "2.2.16" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.16.tgz#597dffa03db1913fc318c9c6df6931cb4ed808b2" - integrity sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -4289,9 +4844,18 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" @@ -4301,44 +4865,103 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-extglob@^2.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -4349,20 +4972,34 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-function@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-function@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" - integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -4371,26 +5008,37 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= + dependencies: + lower-case "^1.1.0" + is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" @@ -4401,73 +5049,96 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" + isobject "^3.0.1" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== dependencies: - available-typed-arrays "^1.0.2" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" + es-abstract "^1.18.5" foreach "^2.0.5" - has-symbols "^1.0.1" + has-tostringtag "^1.0.0" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= + dependencies: + upper-case "^1.1.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -4482,7 +5153,19 @@ iso-url@~0.4.7: resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.7.tgz#de7e48120dae46921079fe78f325ac9e9217a385" integrity sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog== -isstream@~0.1.2: +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= @@ -4531,6 +5214,13 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4541,30 +5231,25 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -4583,6 +5268,18 @@ json-text-sequence@~0.1.0: dependencies: delimit-stream "0.1.0" +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -4610,13 +5307,13 @@ jsonschema@^1.2.4: integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" keccak@^2.0.0: @@ -4630,12 +5327,13 @@ keccak@^2.0.0: safe-buffer "^5.2.0" keccak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" + readable-stream "^3.6.0" keyv@^3.0.0: version "3.1.0" @@ -4644,7 +5342,26 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -kind-of@^6.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4656,6 +5373,18 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -4670,17 +5399,10 @@ level-codec@^9.0.0: dependencies: buffer "^5.6.0" -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== - -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== - dependencies: - errno "~0.1.1" +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== level-errors@^2.0.0, level-errors@~2.0.0: version "2.0.1" @@ -4689,86 +5411,56 @@ level-errors@^2.0.0, level-errors@~2.0.0: dependencies: errno "~0.1.1" -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - -level-iterator-stream@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" - integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== dependencies: - inherits "^2.0.1" - readable-stream "^2.3.6" - xtend "^4.0.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" -level-mem@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" - integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== dependencies: - level-packager "~4.0.0" - memdown "~3.0.0" + level-packager "^5.0.3" + memdown "^5.0.0" -level-packager@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" - integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== dependencies: - encoding-down "~5.0.0" - levelup "^3.0.0" + encoding-down "^6.3.0" + levelup "^4.3.2" -level-ws@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== dependencies: - readable-stream "~1.0.15" - xtend "~2.1.1" + xtend "^4.0.2" -level-ws@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" - integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== dependencies: inherits "^2.0.3" - readable-stream "^2.2.8" + readable-stream "^3.1.0" xtend "^4.0.1" -levelup@^1.2.1: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - -levelup@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" - integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== dependencies: - deferred-leveldown "~4.0.0" + deferred-leveldown "~5.3.0" level-errors "~2.0.0" - level-iterator-stream "~3.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" xtend "~4.0.0" levn@^0.3.0, levn@~0.3.0: @@ -4787,47 +5479,80 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@10.5.4: - version "10.5.4" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" - integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== - dependencies: - chalk "^4.1.0" - cli-truncate "^2.1.0" - commander "^6.2.0" - cosmiconfig "^7.0.0" - debug "^4.2.0" - dedent "^0.7.0" +lilconfig@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + +lint-staged@12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.2.tgz#90c571927e1371fc133e720671dd7989eab53f74" + integrity sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^8.3.0" + debug "^4.3.2" enquirer "^2.3.6" - execa "^4.1.0" - listr2 "^3.2.2" - log-symbols "^4.0.0" - micromatch "^4.0.2" + execa "^5.1.1" + lilconfig "2.0.4" + listr2 "^3.13.3" + micromatch "^4.0.4" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "^3.3.0" + object-inspect "^1.11.0" + string-argv "^0.3.1" + supports-color "^9.0.2" + yaml "^1.10.2" -listr2@^3.2.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.4.3.tgz#543bcf849d5ffc70602708b69d2daac73f751699" - integrity sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA== +listr2@^3.13.3: + version "3.13.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" + integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== dependencies: - chalk "^4.1.0" cli-truncate "^2.1.0" - figures "^3.2.0" - indent-string "^4.0.0" + colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.6" + rfdc "^1.3.0" + rxjs "^7.4.0" through "^2.3.8" wrap-ansi "^7.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -4851,6 +5576,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -4881,12 +5611,7 @@ lodash.sum@^4.0.2: resolved "https://registry.yarnpkg.com/lodash.sum/-/lodash.sum-4.0.2.tgz#ad90e397965d803d4f1ff7aa5b2d0197f3b4637b" integrity sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s= -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4898,14 +5623,6 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -4916,6 +5633,23 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -4926,6 +5660,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4962,6 +5704,18 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + markdown-table@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" @@ -4984,6 +5738,11 @@ marked@^0.7.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -4998,6 +5757,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -5007,29 +5773,25 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memdown@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= - dependencies: - abstract-leveldown "~2.7.1" - functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - -memdown@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" - integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== dependencies: - abstract-leveldown "~5.0.0" + abstract-leveldown "~6.2.1" functional-red-black-tree "~1.0.1" immediate "~3.2.3" inherits "~2.0.1" ltgt "~2.2.0" - safe-buffer "~5.1.1" + safe-buffer "~5.2.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" memorystream@^0.3.1: version "0.3.1" @@ -5051,45 +5813,50 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" - integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== - dependencies: - async "^2.6.1" - ethereumjs-util "^5.2.0" - level-mem "^3.0.1" - level-ws "^1.0.0" - readable-stream "^3.0.6" - rlp "^2.0.0" - semaphore ">=1.0.1" - -merkle-patricia-tree@^2.1.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== - dependencies: - async "^1.4.2" - ethereumjs-util "^5.0.0" - level-ws "0.0.0" - levelup "^1.2.1" - memdown "^1.0.0" - readable-stream "^2.0.0" - rlp "^2.0.0" - semaphore ">=1.0.1" +merkle-patricia-tree@^4.2.0, merkle-patricia-tree@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.2.tgz#6dec17855370172458244c2f42c989dd60b773a3" + integrity sha512-eqZYNTshcYx9aESkSPr71EqwsR/QmpnObDEV4iLxkt/x/IoLYZYjJvKY72voP/27Vy61iMOrfOG6jrn7ttXD+Q== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.2" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" @@ -5099,17 +5866,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.46.0: - version "1.46.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" - integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.29" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" - integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.46.0" + mime-db "1.51.0" mime@1.6.0: version "1.6.0" @@ -5148,7 +5915,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -5160,12 +5927,12 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -5173,13 +5940,21 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -5192,7 +5967,7 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -5200,11 +5975,11 @@ mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: minimist "^1.2.5" mnemonist@^0.38.0: - version "0.38.3" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" - integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== dependencies: - obliterator "^1.6.1" + obliterator "^2.0.0" mocha@^7.1.1, mocha@^7.1.2: version "7.2.0" @@ -5237,9 +6012,9 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-unparser "1.6.0" mock-fs@^4.1.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" - integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== ms@2.0.0: version "2.0.0" @@ -5306,16 +6081,38 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.14.0: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nan@^2.12.1, nan@^2.14.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nano-base32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" + integrity sha1-ulSMh578+5DaHE2eCX20pGySVe8= nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5326,7 +6123,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -5341,17 +6138,24 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-emoji@^1.10.0, node-emoji@^1.4.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - lodash.toarray "^4.4.0" + lodash "^4.17.21" node-environment-flags@1.0.6: version "1.0.6" @@ -5362,26 +6166,55 @@ node-environment-flags@1.0.6: semver "^5.7.0" node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" -node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" nofilter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== -nofilter@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-2.0.3.tgz#f5460f3cb33147005883e3f5d4476239501fa187" - integrity sha512-FbuXC+lK+GU2+63D1kC1ETiZo+Z7SIi7B+mxKTCH1byrh6WFvfBCN/wpherFz0a0bjGd7EKTst/cz0yLeNngug== - dependencies: - "@cto.af/textdecoder" "^0.0.0" +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== nopt@3.x: version "3.0.6" @@ -5390,15 +6223,32 @@ nopt@3.x: dependencies: abbrev "1" +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== npm-run-path@^2.0.0: version "2.0.2" @@ -5407,20 +6257,25 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -5434,25 +6289,36 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" + integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" object.assign@4.1.0: version "4.1.0" @@ -5474,26 +6340,26 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== +object.getownpropertydescriptors@^2.0.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -obliterator@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" - integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + es-abstract "^1.19.1" -oboe@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: - http-https "^1.0.0" + isobject "^3.0.1" + +obliterator@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.1.tgz#fbdd873bf39fc4f365a53b1fc86617a22526987c" + integrity sha512-XnkiCrrBcIZQitJPAI36mrrpEUvatbte8hLcTcQwKA1v9NkCKasSi+UAguLsLDs/out7MoRzAlmz7VXvY6ph6w== oboe@2.1.5: version "2.1.5" @@ -5523,7 +6389,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -5554,6 +6420,27 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5652,11 +6539,18 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.4: +pako@^1.0.4, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +param-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5681,9 +6575,16 @@ parse-cache-control@^1.0.1: integrity sha1-juqz5U+laSD+Fro493+iGqzC104= parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" + integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" @@ -5693,24 +6594,14 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.0: +parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" -parse5@^6.0.0, parse5@^6.0.1: +parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -5720,6 +6611,43 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= + dependencies: + no-case "^2.2.0" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5751,15 +6679,31 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5771,9 +6715,9 @@ pathval@^1.1.1: integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pbkdf2@^3.0.17, pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5786,22 +6730,37 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: - semver-compare "^1.0.0" + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@^1.2.1: version "1.2.1" @@ -5835,12 +6794,17 @@ prettier@^1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -process-nextick-args@~2.0.0: +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -5872,11 +6836,11 @@ proper-lockfile@^4.1.1: signal-exit "^3.0.2" proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -5884,6 +6848,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -5909,25 +6878,45 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + punycode@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-rand@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.0.tgz#87f5bdabeadbd8904e316913a5c0b8caac517b37" + integrity sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + qs@^6.4.0, qs@^6.7.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + version "6.10.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" + integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== dependencies: side-channel "^1.0.4" @@ -5945,6 +6934,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -5980,27 +6979,51 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-body@2.4.2, raw-body@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" + integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.1" + http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + find-up "^1.0.0" + read-pkg "^1.0.0" -readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.3.6: +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6013,7 +7036,7 @@ readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.8, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.0: +readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6022,15 +7045,14 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" readdirp@~3.2.0: version "3.2.0" @@ -6039,10 +7061,10 @@ readdirp@~3.2.0: dependencies: picomatch "^2.0.4" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -6067,15 +7089,43 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= req-cwd@^2.0.0: version "2.0.0" @@ -6148,11 +7198,21 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + +require-from-string@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -6168,6 +7228,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -6180,7 +7245,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6: +resolve@^1.1.6, resolve@^1.10.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -6211,6 +7276,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -6221,6 +7291,18 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -6242,7 +7324,12 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160-min@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -6250,12 +7337,12 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" - integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== dependencies: - bn.js "^4.11.1" + bn.js "^5.2.0" run-async@^2.2.0: version "2.4.1" @@ -6274,23 +7361,37 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0, rxjs@^6.6.6: - version "6.6.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" - integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== +rxjs@^6.4.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" +rxjs@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== + dependencies: + tslib "~2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6349,17 +7450,12 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -semaphore@>=1.0.1, semaphore@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" - integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= -semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6376,11 +7472,6 @@ semver@^7.2.1, semver@^7.3.4: dependencies: lru-cache "^6.0.0" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -6400,6 +7491,14 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -6426,12 +7525,22 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= -setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -6441,6 +7550,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6457,6 +7571,13 @@ sha1@^1.1.1: charenc ">= 0.0.1" crypt ">= 0.0.1" +sha3@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" + integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== + dependencies: + buffer "6.0.3" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -6499,10 +7620,10 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== simple-concat@^1.0.0: version "1.0.1" @@ -6550,6 +7671,51 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= + dependencies: + no-case "^2.2.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -6565,12 +7731,23 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solhint@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.4.tgz#81770c60eeb027e6e447cb91ed599baf5e888e09" - integrity sha512-AEyjshF/PC6kox1c1l79Pji+DK9WVuk5u2WEh6bBKt188gWa63NBOAgYg0fBRr5CTUmsuGc1sGH7dgUVs83mKw== +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + +solhint@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.6.tgz#abe9af185a9a7defefba480047b3e42cbe9a1210" + integrity sha512-HWUxTAv2h7hx3s3hAab3ifnlwb02ZWhwFU/wSudUHqteMS3ll9c+m1FlGn9V8ztE2rf3Z82fQZA005Wv7KpcFA== dependencies: - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.13.2" ajv "^6.6.1" antlr4 "4.7.1" ast-parents "0.0.1" @@ -6588,22 +7765,22 @@ solhint@^3.3.4: prettier "^1.14.3" solidity-ast@^0.4.15: - version "0.4.19" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.19.tgz#3c6c27da922f2afd4a10522c8ecfc38f55095bdd" - integrity sha512-Mzg2lLr3VMN8V6ukmuLRB0cf1wuvNw78lR8dIhZOxlHSb4Nsy1ABUXJ31oA9IrLJIlI2v+C2WajVu0pFfVb2qA== + version "0.4.28" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.28.tgz#5589998512b9a3602e6ba612cbe7fed7401294f4" + integrity sha512-RtZCP5tSvZMadVtg9/IfLmAMKDOnQEvG2HA6VnPuoTMxqxsbbn4lQy8jgH3RVbqW0eO1hd7cSCKecb72/OeOIw== -solidity-coverage@^0.7.16: - version "0.7.16" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.16.tgz#c8c8c46baa361e2817bbf275116ddd2ec90a55fb" - integrity sha512-ttBOStywE6ZOTJmmABSg4b8pwwZfYKG8zxu40Nz+sRF5bQX7JULXWj/XbX0KXps3Fsp8CJXg8P29rH3W54ipxw== +solidity-coverage@^0.7.17: + version "0.7.17" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.17.tgz#5139de8f6666d4755d88f453d8e35632a7bb3444" + integrity sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg== dependencies: - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.13.2" "@truffle/provider" "^0.2.24" chalk "^2.4.2" death "^1.1.0" detect-port "^1.3.0" fs-extra "^8.1.0" - ganache-cli "^6.11.0" + ganache-cli "^6.12.2" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" @@ -6617,6 +7794,22 @@ solidity-coverage@^0.7.16: shelljs "^0.8.3" web3-utils "^1.3.0" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@0.5.12: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" @@ -6626,14 +7819,24 @@ source-map-support@0.5.12: source-map "^0.6.0" source-map-support@^0.5.13, source-map-support@^0.5.17, source-map-support@^0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1: +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6645,6 +7848,39 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -6672,6 +7908,14 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -6682,17 +7926,45 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@0.3.1: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6710,13 +7982,22 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd" + integrity sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g== + dependencies: + emoji-regex "^9.2.2" + is-fullwidth-code-point "^4.0.0" + strip-ansi "^7.0.1" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -6734,18 +8015,13 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -6753,14 +8029,12 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" + ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" @@ -6776,12 +8050,31 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" @@ -6834,6 +8127,13 @@ supports-color@^3.1.0: dependencies: has-flag "^1.0.0" +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.0.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6848,6 +8148,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^9.0.2: + version "9.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" + integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -6856,6 +8161,14 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -6899,28 +8212,28 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== - dependencies: - ajv "^7.0.2" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== tar@^4.0.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== text-table@^0.2.0: version "0.2.0" @@ -6954,6 +8267,21 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6961,11 +8289,31 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6973,11 +8321,26 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -6986,6 +8349,11 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + "true-case-path@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" @@ -7012,11 +8380,26 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7073,11 +8456,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -7091,7 +8469,7 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.0.0: +type@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== @@ -7108,17 +8486,41 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + uglify-js@^3.1.4: - version "3.13.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.2.tgz#fe10319861bccc8682bfe2e8151fbdd8aa921c44" - integrity sha512-SbMu4D2Vo95LMC/MetNaso1194M1htEA+JrqE9Hk+G2DhI+itfS9TRu9ZKeCahLDNa/J3n4MqUJ/fOHMzQpRWw== + version "3.14.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.5.tgz#cdabb7d4954231d80cb4a927654c4655e51f4859" + integrity sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ== + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -unbox-primitive@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -7128,15 +8530,30 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== underscore@^1.8.3: - version "1.12.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" - integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + version "1.13.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" + integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" universalify@^0.1.0: version "0.1.2" @@ -7148,6 +8565,31 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -7155,6 +8597,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + url-join@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" @@ -7184,12 +8631,25 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + utf-8-validate@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" - integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q== + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" utf8@3.0.0, utf8@^3.0.0: version "3.0.0" @@ -7201,21 +8661,24 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" util@^0.12.0: - version "0.12.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" - integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" @@ -7244,11 +8707,24 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -7268,643 +8744,646 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -web3-bzz@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" - integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +web3-bzz@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.6.tgz#95f370aecc3ff6ad07f057e6c0c916ef09b04dde" + integrity sha512-ibHdx1wkseujFejrtY7ZyC0QxQ4ATXjzcNUpaLrvM6AEae8prUiyT/OloG9FWDgFD2CPLwzKwfSQezYQlANNlw== dependencies: - "@types/node" "^10.12.18" + "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" + underscore "1.12.1" -web3-bzz@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.4.tgz#9be529353c4063bc68395370cb5d8e414c6b6c87" - integrity sha512-DBRVQB8FAgoAtZCpp2GAGPCJjgBgsuwOKEasjV044AAZiONpXcKHbkO6G1SgItIixnrJsRJpoGLGw52Byr6FKw== +web3-bzz@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" + integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" -web3-bzz@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" - integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== +web3-bzz@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.1.tgz#8430eb3cbb69baaee4981d190b840748c37a9ec2" + integrity sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" -web3-core-helpers@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" - integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw== +web3-core-helpers@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz#c478246a9abe4e5456acf42657dac2f7c330be74" + integrity sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA== dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.9" - web3-utils "1.2.9" + underscore "1.12.1" + web3-eth-iban "1.3.6" + web3-utils "1.3.6" -web3-core-helpers@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.4.tgz#b8549740bf24d5c71688d89c3cdd802d8d36b4e4" - integrity sha512-n7BqDalcTa1stncHMmrnFtyTgDhX5Fy+avNaHCf6qcOP2lwTQC8+mdHVBONWRJ6Yddvln+c8oY/TAaB6PzWK0A== +web3-core-helpers@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" + integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.4" - web3-utils "1.3.4" + web3-eth-iban "1.5.3" + web3-utils "1.5.3" -web3-core-helpers@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" - integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== +web3-core-helpers@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz#cb21047306871f4cf0fedfece7d47ea2aa96141b" + integrity sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng== dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.5" - web3-utils "1.3.5" + web3-eth-iban "1.6.1" + web3-utils "1.6.1" -web3-core-method@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" - integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg== +web3-core-method@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.6.tgz#4b0334edd94b03dfec729d113c69a4eb6ebc68ae" + integrity sha512-RyegqVGxn0cyYW5yzAwkPlsSEynkdPiegd7RxgB4ak1eKk2Cv1q2x4C7D2sZjeeCEF+q6fOkVmo2OZNqS2iQxg== dependencies: "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-utils "1.2.9" - -web3-core-method@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.4.tgz#6c2812d96dd6c811b9e6c8a5d25050d2c22b9527" - integrity sha512-JxmQrujsAWYRRN77P/RY7XuZDCzxSiiQJrgX/60Lfyf7FF1Y0le4L/UMCi7vUJnuYkbU1Kfl9E0udnqwyPqlvQ== - dependencies: + underscore "1.12.1" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-utils "1.3.6" + +web3-core-method@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" + integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== + dependencies: + "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-utils "1.3.4" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-utils "1.5.3" -web3-core-method@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" - integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== +web3-core-method@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.1.tgz#4ae91c639bf1da85ebfd8b99595da6a2235d7b98" + integrity sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w== dependencies: "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-utils "1.3.5" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-utils "1.6.1" -web3-core-promievent@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" - integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw== +web3-core-promievent@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz#6c27dc79de8f71b74f5d17acaf9aaf593d3cb0c9" + integrity sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw== dependencies: - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" -web3-core-promievent@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.4.tgz#d166239012d91496cdcbe91d5d54071ea818bc73" - integrity sha512-V61dZIeBwogg6hhZZUt0qL9hTp1WDhnsdjP++9fhTDr4vy/Gz8T5vibqT2LLg6lQC8i+Py33yOpMeMNjztaUaw== +web3-core-promievent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" + integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" - integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== +web3-core-promievent@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz#f650dea9361e2edf02691015b213fcc8ea499992" + integrity sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ== dependencies: eventemitter3 "4.0.4" -web3-core-requestmanager@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" - integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA== +web3-core-requestmanager@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.6.tgz#4fea269fe913fd4fca464b4f7c65cb94857b5b2a" + integrity sha512-2rIaeuqeo7QN1Eex7aXP0ZqeteJEPWXYFS/M3r3LXMiV8R4STQBKE+//dnHJXoo2ctzEB5cgd+7NaJM8S3gPyA== dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-providers-http "1.2.9" - web3-providers-ipc "1.2.9" - web3-providers-ws "1.2.9" + underscore "1.12.1" + util "^0.12.0" + web3-core-helpers "1.3.6" + web3-providers-http "1.3.6" + web3-providers-ipc "1.3.6" + web3-providers-ws "1.3.6" -web3-core-requestmanager@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.4.tgz#e105ced735c2b5fcedd5771e0ecf9879ae9c373f" - integrity sha512-xriouCrhVnVDYQ04TZXdEREZm0OOJzkSEsoN5bu4JYsA6e/HzROeU+RjDpMUxFMzN4wxmFZ+HWbpPndS3QwMag== +web3-core-requestmanager@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" + integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== dependencies: - underscore "1.9.1" util "^0.12.0" - web3-core-helpers "1.3.4" - web3-providers-http "1.3.4" - web3-providers-ipc "1.3.4" - web3-providers-ws "1.3.4" + web3-core-helpers "1.5.3" + web3-providers-http "1.5.3" + web3-providers-ipc "1.5.3" + web3-providers-ws "1.5.3" -web3-core-requestmanager@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" - integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== +web3-core-requestmanager@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz#d9c08b0716c9cda546a0c02767b7e08deb04448a" + integrity sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A== dependencies: - underscore "1.9.1" util "^0.12.0" - web3-core-helpers "1.3.5" - web3-providers-http "1.3.5" - web3-providers-ipc "1.3.5" - web3-providers-ws "1.3.5" + web3-core-helpers "1.6.1" + web3-providers-http "1.6.1" + web3-providers-ipc "1.6.1" + web3-providers-ws "1.6.1" -web3-core-subscriptions@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" - integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg== +web3-core-subscriptions@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.6.tgz#ee24e7974d1d72ff6c992c599deba4ef9b308415" + integrity sha512-wi9Z9X5X75OKvxAg42GGIf81ttbNR2TxzkAsp1g+nnp5K8mBwgZvXrIsDuj7Z7gx72Y45mWJADCWjk/2vqNu8g== dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.9" + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" -web3-core-subscriptions@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.4.tgz#7b00e92bde21f792620cd02e6e508fcf4f4c31d3" - integrity sha512-drVHVDxh54hv7xmjIm44g4IXjfGj022fGw4/meB5R2D8UATFI40F73CdiBlyqk3DysP9njDOLTJFSQvEkLFUOg== +web3-core-subscriptions@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" + integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" -web3-core-subscriptions@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" - integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== +web3-core-subscriptions@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz#4dfc1f74137354d4ac9eaa628aa916c5e2cc8741" + integrity sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.6.1" -web3-core@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" - integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA== +web3-core@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.6.tgz#a6a761d1ff2f3ee462b8dab679229d2f8e267504" + integrity sha512-gkLDM4T1Sc0T+HZIwxrNrwPg0IfWI0oABSglP2X5ZbBAYVUeEATA0o92LWV8BeF+okvKXLK1Fek/p6axwM/h3Q== dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-requestmanager "1.2.9" - web3-utils "1.2.9" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-requestmanager "1.3.6" + web3-utils "1.3.6" -web3-core@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.4.tgz#2cc7ba7f35cc167f7a0a46fd5855f86e51d34ce8" - integrity sha512-7OJu46RpCEfTerl+gPvHXANR2RkLqAfW7l2DAvQ7wN0pnCzl9nEfdgW6tMhr31k3TR2fWucwKzCyyxMGzMHeSA== +web3-core@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" + integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-requestmanager "1.3.4" - web3-utils "1.3.4" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" -web3-core@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" - integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== +web3-core@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.1.tgz#b41f08fdc9ea1082d15384a3d6fa93a47c3fc1b4" + integrity sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-requestmanager "1.3.5" - web3-utils "1.3.5" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-requestmanager "1.6.1" + web3-utils "1.6.1" -web3-eth-abi@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" - integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q== +web3-eth-abi@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz#4272ca48d817aa651bbf97b269f5ff10abc2b8a9" + integrity sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ== dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.9" + "@ethersproject/abi" "5.0.7" + underscore "1.12.1" + web3-utils "1.3.6" -web3-eth-abi@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.4.tgz#10f5d8b6080dbb6cbaa1bcef7e0c70573da6566f" - integrity sha512-PVSLXJ2dzdXsC+R24llIIEOS6S1KhG5qwNznJjJvXZFe3sqgdSe47eNvwUamZtCBjcrdR/HQr+L/FTxqJSf80Q== +web3-eth-abi@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" + integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== dependencies: "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.4" + web3-utils "1.5.3" -web3-eth-abi@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" - integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== +web3-eth-abi@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz#15b937e3188570754d50bbac51a4bb0578600d1d" + integrity sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ== dependencies: "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.5" + web3-utils "1.6.1" -web3-eth-accounts@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" - integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== +web3-eth-accounts@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.6.tgz#f9fcb50b28ee58090ab292a10d996155caa2b474" + integrity sha512-Ilr0hG6ONbCdSlVKffasCmNwftD5HsNpwyQASevocIQwHdTlvlwO0tb3oGYuajbKOaDzNTwXfz25bttAEoFCGA== dependencies: crypto-browserify "3.12.0" - eth-lib "^0.2.8" + eth-lib "0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" scrypt-js "^3.0.1" - underscore "1.9.1" + underscore "1.12.1" uuid "3.3.2" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" - -web3-eth-accounts@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.4.tgz#cf513d78531c13ce079a5e7862820570350e79a5" - integrity sha512-gz9ReSmQEjqbYAjpmAx+UZF4CVMbyS4pfjSYWGAnNNI+Xz0f0u0kCIYXQ1UEaE+YeLcYiE+ZlZdgg6YoatO5nA== - dependencies: + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" + +web3-eth-accounts@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" + integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" crypto-browserify "3.12.0" eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" + ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" - underscore "1.9.1" uuid "3.3.2" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" -web3-eth-accounts@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" - integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== +web3-eth-accounts@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz#aeb0dfb52c4391773550569732975b471212583f" + integrity sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w== dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" crypto-browserify "3.12.0" eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" + ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" - underscore "1.9.1" uuid "3.3.2" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" -web3-eth-contract@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" - integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== +web3-eth-contract@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.6.tgz#cccf4d32dc56917fb6923e778498a9ba2a5ba866" + integrity sha512-8gDaRrLF2HCg+YEZN1ov0zN35vmtPnGf3h1DxmJQK5Wm2lRMLomz9rsWsuvig3UJMHqZAQKD7tOl3ocJocQsmA== dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" - -web3-eth-contract@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.4.tgz#1ea2dd71be0c4a9cf4772d4f75dbb2fa99751472" - integrity sha512-Fvy8ZxUksQY2ePt+XynFfOiSqxgQtMn4m2NJs6VXRl2Inl17qyRi/nIJJVKTcENLocm+GmZ/mxq2eOE5u02nPg== + "@types/bn.js" "^4.11.5" + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-utils "1.3.6" + +web3-eth-contract@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" + integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== dependencies: "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-utils "1.3.4" - -web3-eth-contract@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" - integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" + +web3-eth-contract@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz#4b0a2c0b37015d70146e54c7cb3f035a58fbeec0" + integrity sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ== dependencies: "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-utils "1.3.5" - -web3-eth-ens@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" - integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-utils "1.6.1" + +web3-eth-ens@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.6.tgz#0d28c5d4ea7b4462ef6c077545a77956a6cdf175" + integrity sha512-n27HNj7lpSkRxTgSx+Zo7cmKAgyg2ElFilaFlUu/X2CNH23lXfcPm2bWssivH9z0ndhg0OyR4AYFZqPaqDHkJA== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-contract "1.2.9" - web3-utils "1.2.9" - -web3-eth-ens@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.4.tgz#a7e4bb18481fb0e2ce5bfb3b3da2fbb0ad78cefe" - integrity sha512-b0580tQyQwpV2wyacwQiBEfQmjCUln5iPhge3IBIMXaI43BUNtH3lsCL9ERFQeOdweB4o+6rYyNYr6xbRcSytg== + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-contract "1.3.6" + web3-utils "1.3.6" + +web3-eth-ens@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" + integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-contract "1.3.4" - web3-utils "1.3.4" - -web3-eth-ens@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" - integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-contract "1.5.3" + web3-utils "1.5.3" + +web3-eth-ens@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz#801bd5fb5237377ec2ed8517a9fe4634f2269c7a" + integrity sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-contract "1.3.5" - web3-utils "1.3.5" - -web3-eth-iban@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" - integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ== + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-contract "1.6.1" + web3-utils "1.6.1" + +web3-eth-iban@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz#0d6ba21fe78f190af8919e9cd5453882457209e0" + integrity sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ== dependencies: - bn.js "4.11.8" - web3-utils "1.2.9" + bn.js "^4.11.9" + web3-utils "1.3.6" -web3-eth-iban@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.4.tgz#5eb7a564e0dcf68730d68f48f95dd207cd173d81" - integrity sha512-Y7/hLjVvIN/OhaAyZ8L/hxbTqVX6AFTl2RwUXR6EEU9oaLydPcMjAx/Fr8mghUvQS3QJSr+UGubP3W4SkyNiYw== +web3-eth-iban@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" + integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== dependencies: bn.js "^4.11.9" - web3-utils "1.3.4" + web3-utils "1.5.3" -web3-eth-iban@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" - integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== +web3-eth-iban@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz#20bbed75723e3e9ff98e624979629d26329462b6" + integrity sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q== dependencies: bn.js "^4.11.9" - web3-utils "1.3.5" - -web3-eth-personal@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" - integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== - dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" + web3-utils "1.6.1" -web3-eth-personal@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.4.tgz#0d0e0abea3447283d7ee5658ed312990c9bf48dd" - integrity sha512-JiTbaktYVk1j+S2EDooXAhw5j/VsdvZfKRmHtXUe/HizPM9ETXmj1+ne4RT6m+950jQ7DJwUF3XU1FKYNtEDwQ== +web3-eth-personal@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.6.tgz#226137916754c498f0284f22c55924c87a2efcf0" + integrity sha512-pOHU0+/h1RFRYoh1ehYBehRbcKWP4OSzd4F7mDljhHngv6W8ewMHrAN8O1ol9uysN2MuCdRE19qkRg5eNgvzFQ== dependencies: "@types/node" "^12.12.6" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" -web3-eth-personal@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" - integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== +web3-eth-personal@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" + integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== dependencies: "@types/node" "^12.12.6" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" -web3-eth@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" - integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== +web3-eth-personal@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz#9b524fb9f92b51163f46920ee2663d34a4897c8d" + integrity sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw== dependencies: - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-accounts "1.2.9" - web3-eth-contract "1.2.9" - web3-eth-ens "1.2.9" - web3-eth-iban "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" + "@types/node" "^12.12.6" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" -web3-eth@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.4.tgz#7c4607685e66a1c43e3e315e526c959f24f96907" - integrity sha512-8OIVMLbvmx+LB5RZ4tDhXuFGWSdNMrCZ4HM0+PywQ08uEcmAcqTMFAn4vdPii+J8gCatZR501r1KdzX3SDLoPw== - dependencies: - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-accounts "1.3.4" - web3-eth-contract "1.3.4" - web3-eth-ens "1.3.4" - web3-eth-iban "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" - -web3-eth@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" - integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== - dependencies: - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-accounts "1.3.5" - web3-eth-contract "1.3.5" - web3-eth-ens "1.3.5" - web3-eth-iban "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" - -web3-net@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" - integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== +web3-eth@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.6.tgz#2c650893d540a7a0eb1365dd5b2dca24ac919b7c" + integrity sha512-9+rnywRRpyX3C4hfsAQXPQh6vHh9XzQkgLxo3gyeXfbhbShUoq2gFVuy42vsRs//6JlsKdyZS7Z3hHPHz2wreA== + dependencies: + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-accounts "1.3.6" + web3-eth-contract "1.3.6" + web3-eth-ens "1.3.6" + web3-eth-iban "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" + +web3-eth@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" + integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== + dependencies: + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-accounts "1.5.3" + web3-eth-contract "1.5.3" + web3-eth-ens "1.5.3" + web3-eth-iban "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" + +web3-eth@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.1.tgz#a25aba1ac213d872ecf3f81c7b4ab8072ecae224" + integrity sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ== + dependencies: + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-accounts "1.6.1" + web3-eth-contract "1.6.1" + web3-eth-ens "1.6.1" + web3-eth-iban "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" + +web3-net@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.6.tgz#a56492e2227475e38db29394f8bac305a2446e41" + integrity sha512-KhzU3wMQY/YYjyMiQzbaLPt2kut88Ncx2iqjy3nw28vRux3gVX0WOCk9EL/KVJBiAA/fK7VklTXvgy9dZnnipw== dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" -web3-net@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.4.tgz#d76158bf0b4a7b3b14352b4f95472db9efc57a2a" - integrity sha512-wVyqgVC3Zt/0uGnBiR3GpnsS8lvOFTDgWZMxAk9C6Guh8aJD9MUc7pbsw5rHrPUVe6S6RUfFJvh/Xq8oMIQgSw== +web3-net@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" + integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" -web3-net@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" - integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== +web3-net@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.1.tgz#7a630a804ec9f81908ae52ccbb4ebbb9530b3906" + integrity sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw== dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" -web3-providers-http@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" - integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A== +web3-providers-http@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.6.tgz#36e8724a7424d52827819d53fd75dbf31f5422c2" + integrity sha512-OQkT32O1A06dISIdazpGLveZcOXhEo5cEX6QyiSQkiPk/cjzDrXMw4SKZOGQbbS1+0Vjizm1Hrp7O8Vp2D1M5Q== dependencies: - web3-core-helpers "1.2.9" + web3-core-helpers "1.3.6" xhr2-cookies "1.1.0" -web3-providers-http@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.4.tgz#89389e18e27148faa2fef58842740ffadbdda8cc" - integrity sha512-aIg/xHXvxpqpFU70sqfp+JC3sGkLfAimRKTUhG4oJZ7U+tTcYTHoxBJj+4A3Id4JAoKiiv0k1/qeyQ8f3rMC3g== +web3-providers-http@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" + integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== dependencies: - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" xhr2-cookies "1.1.0" -web3-providers-http@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" - integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== +web3-providers-http@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.1.tgz#b59b14eefef23b98c327806f5f566303a73bd435" + integrity sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A== dependencies: - web3-core-helpers "1.3.5" + web3-core-helpers "1.6.1" xhr2-cookies "1.1.0" -web3-providers-ipc@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" - integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ== +web3-providers-ipc@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.6.tgz#cef8d12c1ebb47adce5ebf597f553c623362cb4a" + integrity sha512-+TVsSd2sSVvVgHG4s6FXwwYPPT91boKKcRuEFXqEfAbUC5t52XOgmyc2LNiD9LzPhed65FbV4LqICpeYGUvSwA== dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.9" + oboe "2.1.5" + underscore "1.12.1" + web3-core-helpers "1.3.6" -web3-providers-ipc@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.4.tgz#b963518989b1b7847063cdd461ff73b83855834a" - integrity sha512-E0CvXEJElr/TIlG1YfJeO3Le5NI/4JZM+1SsEdiPIfBUAJN18oOoum138EBGKv5+YaLKZUtUuJSXWjIIOR/0Ig== +web3-providers-ipc@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" + integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== dependencies: oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" -web3-providers-ipc@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" - integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== +web3-providers-ipc@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz#7ba460589d46896bb3d124288deed1b6a72d517e" + integrity sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ== dependencies: oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.6.1" -web3-providers-ws@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" - integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA== +web3-providers-ws@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.6.tgz#e1df617bc89d66165abdf2191da0014c505bfaac" + integrity sha512-bk7MnJf5or0Re2zKyhR3L3CjGululLCHXx4vlbc/drnaTARUVvi559OI5uLytc/1k5HKUUyENAxLvetz2G1dnQ== dependencies: - eventemitter3 "^4.0.0" - underscore "1.9.1" - web3-core-helpers "1.2.9" - websocket "^1.0.31" + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" + websocket "^1.0.32" -web3-providers-ws@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.4.tgz#b94c2e0ec51a0c472abdec53a472b5bf8176bec1" - integrity sha512-WBd9hk2fUAdrbA3kUyUk94ZeILtE6txLeoVVvIKAw2bPegx+RjkLyxC1Du0oceKgQ/qQWod8CCzl1E/GgTP+MQ== +web3-providers-ws@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" + integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" websocket "^1.0.32" -web3-providers-ws@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" - integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== +web3-providers-ws@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz#f7ee71f158971102b865e99ea7911f483e0507e9" + integrity sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.6.1" websocket "^1.0.32" -web3-shh@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" - integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== +web3-shh@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.6.tgz#4e3486c7eca5cbdb87f88910948223a5b7ea6c20" + integrity sha512-9zRo415O0iBslxBnmu9OzYjNErzLnzOsy+IOvSpIreLYbbAw0XkDWxv3SfcpKnTIWIACBR4AYMIxmmyi5iB3jw== dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-net "1.2.9" + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-net "1.3.6" -web3-shh@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.4.tgz#b7d29e118f26416c1a74575e585be379cc01a77a" - integrity sha512-zoeww5mxLh3xKcqbX85irQbtFe5pc5XwrgjvmdMkhkOdZzPASlWOgqzUFtaPykpLwC3yavVx4jG5RqifweXLUA== +web3-shh@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" + integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-net "1.3.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" -web3-shh@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" - integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== +web3-shh@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.1.tgz#eebaab2e5e6be80fe2585c6c094fa10a03349ca7" + integrity sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A== dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-net "1.3.5" + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-net "1.6.1" web3-utils@1.2.9: version "1.2.9" @@ -7920,10 +9399,10 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.4.tgz#9b1aa30d7549f860b573e7bb7e690999e7192198" - integrity sha512-/vC2v0MaZNpWooJfpRw63u0Y3ag2gNjAWiLtMSL6QQLmCqCy4SQIndMt/vRyx0uMoeGt1YTwSXEcHjUzOhLg0A== +web3-utils@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" + integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -7931,13 +9410,13 @@ web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" + underscore "1.12.1" utf8 "3.0.0" -web3-utils@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" - integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== +web3-utils@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" + integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -7945,52 +9424,105 @@ web3-utils@1.3.5: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" -web3@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" - integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== - dependencies: - web3-bzz "1.2.9" - web3-core "1.2.9" - web3-eth "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-shh "1.2.9" - web3-utils "1.2.9" +web3-utils@1.6.1, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5, web3-utils@^1.3.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.1.tgz#befcb23922b00603ab56d8c5b4158468dc494aca" + integrity sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w== + dependencies: + bn.js "^4.11.9" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" -web3@^1.0.0-beta.34, web3@^1.2.5: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.4.tgz#31e014873360aa5840eb17f9f171190c967cffb7" - integrity sha512-D6cMb2EtTMLHgdGbkTPGl/Qi7DAfczR+Lp7iFX3bcu/bsD9V8fZW69hA8v5cRPNGzXUwVQebk3bS17WKR4cD2w== +web3@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.6.tgz#599425461c3f9a8cbbefa70616438995f4a064cc" + integrity sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA== + dependencies: + web3-bzz "1.3.6" + web3-core "1.3.6" + web3-eth "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-shh "1.3.6" + web3-utils "1.3.6" + +web3@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" + integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== + dependencies: + web3-bzz "1.5.3" + web3-core "1.5.3" + web3-eth "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-shh "1.5.3" + web3-utils "1.5.3" + +web3@^1.0.0-beta.34, web3@^1.2.5, web3@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.1.tgz#c9e68fe7b3073adddf35393441f950ec69b92735" + integrity sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ== + dependencies: + web3-bzz "1.6.1" + web3-core "1.6.1" + web3-eth "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-shh "1.6.1" + web3-utils "1.6.1" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: - web3-bzz "1.3.4" - web3-core "1.3.4" - web3-eth "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-shh "1.3.4" - web3-utils "1.3.4" + source-list-map "^2.0.0" + source-map "~0.6.1" -web3@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" - integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== - dependencies: - web3-bzz "1.3.5" - web3-core "1.3.5" - web3-eth "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-shh "1.3.5" - web3-utils "1.3.5" - -websocket@^1.0.31, websocket@^1.0.32: - version "1.0.33" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" - integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== +webpack@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: bufferutil "^4.0.1" debug "^2.2.0" @@ -7999,6 +9531,14 @@ websocket@^1.0.31, websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -8010,23 +9550,27 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + version "1.1.7" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" @@ -8049,16 +9593,39 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -8098,10 +9665,10 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^3.0.0: version "3.3.3" @@ -8112,10 +9679,10 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.2.1: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== +ws@^7.4.6: + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== xhr-request-promise@^0.1.2: version "0.1.3" @@ -8159,29 +9726,32 @@ xmlhttprequest@1.8.0: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -8191,7 +9761,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -8204,6 +9774,21 @@ yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + yargs-unparser@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" @@ -8246,6 +9831,55 @@ yargs@13.3.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"