From f23c15c403258e6389dd02f3bef9d3fdf2f85c27 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 26 May 2023 16:24:26 +0200 Subject: [PATCH 001/176] Update nitro smart contracts to support erc20-based rollups ERC20-based rollup is the one where fees are paid in custom ERC20 token instead of in ETH. Fee token gets escrowed in the bridge and minted on L2 side as native currency. --- src/bridge/AbsBridge.sol | 295 +++++++++++++++++++++++ src/bridge/AbsInbox.sol | 334 +++++++++++++++++++++++++++ src/bridge/AbsOutbox.sol | 295 +++++++++++++++++++++++ src/bridge/Bridge.sol | 259 ++------------------- src/bridge/ERC20Bridge.sol | 74 ++++++ src/bridge/ERC20Inbox.sol | 141 +++++++++++ src/bridge/ERC20Outbox.sol | 27 +++ src/bridge/IBridge.sol | 17 +- src/bridge/IERC20Bridge.sol | 35 +++ src/bridge/IERC20Inbox.sol | 75 ++++++ src/bridge/IEthBridge.sol | 26 +++ src/bridge/IEthInbox.sol | 133 +++++++++++ src/bridge/IInbox.sol | 136 ++--------- src/bridge/Inbox.sol | 306 ++++-------------------- src/bridge/Outbox.sol | 273 +--------------------- src/libraries/Error.sol | 10 +- src/mocks/BridgeStub.sol | 5 +- src/mocks/InboxStub.sol | 33 ++- src/mocks/SequencerInboxStub.sol | 5 +- src/rollup/AbsBridgeCreator.sol | 117 ++++++++++ src/rollup/AbsRollupCreator.sol | 150 ++++++++++++ src/rollup/AbsRollupEventInbox.sol | 45 ++++ src/rollup/BridgeCreator.sol | 105 ++------- src/rollup/ERC20BridgeCreator.sol | 48 ++++ src/rollup/ERC20RollupCreator.sol | 50 ++++ src/rollup/ERC20RollupEventInbox.sol | 26 +++ src/rollup/IBridgeCreator.sol | 64 +++++ src/rollup/IRollupCreator.sol | 37 +++ src/rollup/RollupCreator.sol | 142 +++--------- src/rollup/RollupEventInbox.sol | 42 +--- src/test-helpers/BridgeTester.sol | 5 +- src/test-helpers/EthVault.sol | 20 ++ 32 files changed, 2182 insertions(+), 1148 deletions(-) create mode 100644 src/bridge/AbsBridge.sol create mode 100644 src/bridge/AbsInbox.sol create mode 100644 src/bridge/AbsOutbox.sol create mode 100644 src/bridge/ERC20Bridge.sol create mode 100644 src/bridge/ERC20Inbox.sol create mode 100644 src/bridge/ERC20Outbox.sol create mode 100644 src/bridge/IERC20Bridge.sol create mode 100644 src/bridge/IERC20Inbox.sol create mode 100644 src/bridge/IEthBridge.sol create mode 100644 src/bridge/IEthInbox.sol create mode 100644 src/rollup/AbsBridgeCreator.sol create mode 100644 src/rollup/AbsRollupCreator.sol create mode 100644 src/rollup/AbsRollupEventInbox.sol create mode 100644 src/rollup/ERC20BridgeCreator.sol create mode 100644 src/rollup/ERC20RollupCreator.sol create mode 100644 src/rollup/ERC20RollupEventInbox.sol create mode 100644 src/rollup/IBridgeCreator.sol create mode 100644 src/rollup/IRollupCreator.sol create mode 100644 src/test-helpers/EthVault.sol diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol new file mode 100644 index 00000000..0187b9b1 --- /dev/null +++ b/src/bridge/AbsBridge.sol @@ -0,0 +1,295 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; + +import { + NotContract, + NotRollupOrOwner, + NotDelayedInbox, + NotSequencerInbox, + NotOutbox, + InvalidOutboxSet, + BadSequencerMessageNumber +} from "../libraries/Error.sol"; +import "./IBridge.sol"; +import "./Messages.sol"; +import "../libraries/DelegateCallAware.sol"; + +import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; + +/** + * @title Staging ground for incoming and outgoing messages + * @notice Holds the inbox accumulator for sequenced and delayed messages. + * Since the escrow is held here, this contract also contains a list of allowed + * outboxes that can make calls from here and withdraw this escrow. + */ +abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { + using AddressUpgradeable for address; + + struct InOutInfo { + uint256 index; + bool allowed; + } + + mapping(address => InOutInfo) private allowedDelayedInboxesMap; + mapping(address => InOutInfo) private allowedOutboxesMap; + + address[] public allowedDelayedInboxList; + address[] public allowedOutboxList; + + address internal _activeOutbox; + + /// @inheritdoc IBridge + bytes32[] public delayedInboxAccs; + + /// @inheritdoc IBridge + bytes32[] public sequencerInboxAccs; + + IOwnable public rollup; + address public sequencerInbox; + + uint256 public override sequencerReportedSubMessageCount; + + address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); + + modifier onlyRollupOrOwner() { + if (msg.sender != address(rollup)) { + address rollupOwner = rollup.owner(); + if (msg.sender != rollupOwner) { + revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); + } + } + _; + } + + /// @dev returns the address of current active Outbox, or zero if no outbox is active + function activeOutbox() public view returns (address) { + address outbox = _activeOutbox; + // address zero is returned if no outbox is set, but the value used in storage + // is non-zero to save users some gas (as storage refunds are usually maxed out) + // EIP-1153 would help here. + // we don't return `EMPTY_ACTIVEOUTBOX` to avoid a breaking change on the current api + if (outbox == EMPTY_ACTIVEOUTBOX) return address(0); + return outbox; + } + + function allowedDelayedInboxes(address inbox) public view returns (bool) { + return allowedDelayedInboxesMap[inbox].allowed; + } + + function allowedOutboxes(address outbox) public view returns (bool) { + return allowedOutboxesMap[outbox].allowed; + } + + modifier onlySequencerInbox() { + if (msg.sender != sequencerInbox) revert NotSequencerInbox(msg.sender); + _; + } + + function enqueueSequencerMessage( + bytes32 dataHash, + uint256 afterDelayedMessagesRead, + uint256 prevMessageCount, + uint256 newMessageCount + ) + external + onlySequencerInbox + returns ( + uint256 seqMessageIndex, + bytes32 beforeAcc, + bytes32 delayedAcc, + bytes32 acc + ) + { + if ( + sequencerReportedSubMessageCount != prevMessageCount && + prevMessageCount != 0 && + sequencerReportedSubMessageCount != 0 + ) { + revert BadSequencerMessageNumber(sequencerReportedSubMessageCount, prevMessageCount); + } + sequencerReportedSubMessageCount = newMessageCount; + seqMessageIndex = sequencerInboxAccs.length; + if (sequencerInboxAccs.length > 0) { + beforeAcc = sequencerInboxAccs[sequencerInboxAccs.length - 1]; + } + if (afterDelayedMessagesRead > 0) { + delayedAcc = delayedInboxAccs[afterDelayedMessagesRead - 1]; + } + acc = keccak256(abi.encodePacked(beforeAcc, dataHash, delayedAcc)); + sequencerInboxAccs.push(acc); + } + + /// @inheritdoc IBridge + function submitBatchSpendingReport(address sender, bytes32 messageDataHash) + external + onlySequencerInbox + returns (uint256) + { + return + addMessageToDelayedAccumulator( + L1MessageType_batchPostingReport, + sender, + uint64(block.number), + uint64(block.timestamp), // solhint-disable-line not-rely-on-time, + block.basefee, + messageDataHash + ); + } + + function _enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 amount + ) internal returns (uint256) { + if (!allowedDelayedInboxes(msg.sender)) revert NotDelayedInbox(msg.sender); + + uint256 messageCount = addMessageToDelayedAccumulator( + kind, + sender, + uint64(block.number), + uint64(block.timestamp), // solhint-disable-line not-rely-on-time + _baseFeeToReport(), + messageDataHash + ); + + _transferFunds(amount); + + return messageCount; + } + + function addMessageToDelayedAccumulator( + uint8 kind, + address sender, + uint64 blockNumber, + uint64 blockTimestamp, + uint256 baseFeeL1, + bytes32 messageDataHash + ) internal returns (uint256) { + uint256 count = delayedInboxAccs.length; + bytes32 messageHash = Messages.messageHash( + kind, + sender, + blockNumber, + blockTimestamp, + count, + baseFeeL1, + messageDataHash + ); + bytes32 prevAcc = 0; + if (count > 0) { + prevAcc = delayedInboxAccs[count - 1]; + } + delayedInboxAccs.push(Messages.accumulateInboxMessage(prevAcc, messageHash)); + emit MessageDelivered( + count, + prevAcc, + msg.sender, + kind, + sender, + messageDataHash, + baseFeeL1, + blockTimestamp + ); + return count; + } + + /// @inheritdoc IBridge + function executeCall( + address to, + uint256 value, + bytes calldata data + ) external returns (bool success, bytes memory returnData) { + if (!allowedOutboxes(msg.sender)) revert NotOutbox(msg.sender); + if (data.length > 0 && !to.isContract()) revert NotContract(to); + address prevOutbox = _activeOutbox; + _activeOutbox = msg.sender; + // We set and reset active outbox around external call so activeOutbox remains valid during call + + // We use a low level call here since we want to bubble up whether it succeeded or failed to the caller + // rather than reverting on failure as well as allow contract and non-contract calls + (success, returnData) = _executeLowLevelCall(to, value, data); + + _activeOutbox = prevOutbox; + emit BridgeCallTriggered(msg.sender, to, value, data); + } + + function setSequencerInbox(address _sequencerInbox) external onlyRollupOrOwner { + sequencerInbox = _sequencerInbox; + emit SequencerInboxUpdated(_sequencerInbox); + } + + function setDelayedInbox(address inbox, bool enabled) external onlyRollupOrOwner { + InOutInfo storage info = allowedDelayedInboxesMap[inbox]; + bool alreadyEnabled = info.allowed; + emit InboxToggle(inbox, enabled); + if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { + return; + } + if (enabled) { + allowedDelayedInboxesMap[inbox] = InOutInfo(allowedDelayedInboxList.length, true); + allowedDelayedInboxList.push(inbox); + } else { + allowedDelayedInboxList[info.index] = allowedDelayedInboxList[ + allowedDelayedInboxList.length - 1 + ]; + allowedDelayedInboxesMap[allowedDelayedInboxList[info.index]].index = info.index; + allowedDelayedInboxList.pop(); + delete allowedDelayedInboxesMap[inbox]; + } + } + + function setOutbox(address outbox, bool enabled) external onlyRollupOrOwner { + if (outbox == EMPTY_ACTIVEOUTBOX) revert InvalidOutboxSet(outbox); + + InOutInfo storage info = allowedOutboxesMap[outbox]; + bool alreadyEnabled = info.allowed; + emit OutboxToggle(outbox, enabled); + if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { + return; + } + if (enabled) { + allowedOutboxesMap[outbox] = InOutInfo(allowedOutboxList.length, true); + allowedOutboxList.push(outbox); + } else { + allowedOutboxList[info.index] = allowedOutboxList[allowedOutboxList.length - 1]; + allowedOutboxesMap[allowedOutboxList[info.index]].index = info.index; + allowedOutboxList.pop(); + delete allowedOutboxesMap[outbox]; + } + } + + function setSequencerReportedSubMessageCount(uint256 newMsgCount) external onlyRollupOrOwner { + sequencerReportedSubMessageCount = newMsgCount; + } + + function delayedMessageCount() external view override returns (uint256) { + return delayedInboxAccs.length; + } + + function sequencerMessageCount() external view returns (uint256) { + return sequencerInboxAccs.length; + } + + /// @dev For the classic -> nitro migration. TODO: remove post-migration. + function acceptFundsFromOldBridge() external payable {} + + /// @dev transfer funds provided to pay for crosschain msg + function _transferFunds(uint256 amount) internal virtual; + + function _executeLowLevelCall( + address to, + uint256 value, + bytes memory data + ) internal virtual returns (bool success, bytes memory returnData); + + /// @dev get base fee which is emitted in `MessageDelivered` event and then picked up and + /// used in ArbOs to calculate the submission fee for retryable ticket + function _baseFeeToReport() internal view virtual returns (uint256); +} diff --git a/src/bridge/AbsInbox.sol b/src/bridge/AbsInbox.sol new file mode 100644 index 00000000..7facc1e9 --- /dev/null +++ b/src/bridge/AbsInbox.sol @@ -0,0 +1,334 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import { + DataTooLarge, + GasLimitTooLarge, + InsufficientValue, + InsufficientSubmissionCost, + L1Forked, + NotAllowedOrigin, + NotOrigin, + NotRollupOrOwner, + RetryableData +} from "../libraries/Error.sol"; +import "./IInbox.sol"; +import "./ISequencerInbox.sol"; +import "./IBridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import "../libraries/DelegateCallAware.sol"; +import { + L1MessageType_submitRetryableTx, + L2MessageType_unsignedContractTx, + L2MessageType_unsignedEOATx, + L2_MSG +} from "../libraries/MessageTypes.sol"; +import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; + +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; + +/** + * @title Inbox for user and contract originated messages + * @notice Messages created via this inbox are enqueued in the delayed accumulator + * to await inclusion in the SequencerInbox + */ +abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { + /// @inheritdoc IInbox + IBridge public bridge; + /// @inheritdoc IInbox + ISequencerInbox public sequencerInbox; + + /// ------------------------------------ allow list start ------------------------------------ /// + + /// @inheritdoc IInbox + bool public allowListEnabled; + + /// @inheritdoc IInbox + mapping(address => bool) public isAllowed; + + event AllowListAddressSet(address indexed user, bool val); + event AllowListEnabledUpdated(bool isEnabled); + + /// @inheritdoc IInbox + function setAllowList(address[] memory user, bool[] memory val) external onlyRollupOrOwner { + require(user.length == val.length, "INVALID_INPUT"); + + for (uint256 i = 0; i < user.length; i++) { + isAllowed[user[i]] = val[i]; + emit AllowListAddressSet(user[i], val[i]); + } + } + + /// @inheritdoc IInbox + function setAllowListEnabled(bool _allowListEnabled) external onlyRollupOrOwner { + require(_allowListEnabled != allowListEnabled, "ALREADY_SET"); + allowListEnabled = _allowListEnabled; + emit AllowListEnabledUpdated(_allowListEnabled); + } + + /// @dev this modifier checks the tx.origin instead of msg.sender for convenience (ie it allows + /// allowed users to interact with the token bridge without needing the token bridge to be allowList aware). + /// this modifier is not intended to use to be used for security (since this opens the allowList to + /// a smart contract phishing risk). + modifier onlyAllowed() { + // solhint-disable-next-line avoid-tx-origin + if (allowListEnabled && !isAllowed[tx.origin]) revert NotAllowedOrigin(tx.origin); + _; + } + + /// ------------------------------------ allow list end ------------------------------------ /// + + modifier onlyRollupOrOwner() { + IOwnable rollup = bridge.rollup(); + if (msg.sender != address(rollup)) { + address rollupOwner = rollup.owner(); + if (msg.sender != rollupOwner) { + revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); + } + } + _; + } + + uint256 internal immutable deployTimeChainId = block.chainid; + + function _chainIdChanged() internal view returns (bool) { + return deployTimeChainId != block.chainid; + } + + /// @inheritdoc IInbox + function pause() external onlyRollupOrOwner { + _pause(); + } + + /// @inheritdoc IInbox + function unpause() external onlyRollupOrOwner { + _unpause(); + } + + function __AbsInbox_init(IBridge _bridge, ISequencerInbox _sequencerInbox) + internal + onlyInitializing + { + bridge = _bridge; + sequencerInbox = _sequencerInbox; + allowListEnabled = false; + __Pausable_init(); + } + + /// @inheritdoc IInbox + function sendL2MessageFromOrigin(bytes calldata messageData) + external + whenNotPaused + onlyAllowed + returns (uint256) + { + if (_chainIdChanged()) revert L1Forked(); + // solhint-disable-next-line avoid-tx-origin + if (msg.sender != tx.origin) revert NotOrigin(); + if (messageData.length > MAX_DATA_SIZE) + revert DataTooLarge(messageData.length, MAX_DATA_SIZE); + uint256 msgNum = _deliverToBridge(L2_MSG, msg.sender, keccak256(messageData), 0); + emit InboxMessageDeliveredFromOrigin(msgNum); + return msgNum; + } + + /// @inheritdoc IInbox + function sendL2Message(bytes calldata messageData) + external + whenNotPaused + onlyAllowed + returns (uint256) + { + if (_chainIdChanged()) revert L1Forked(); + return _deliverMessage(L2_MSG, msg.sender, messageData, 0); + } + + /// @inheritdoc IInbox + function sendUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + uint256 value, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + // arbos will discard unsigned tx with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + return + _deliverMessage( + L2_MSG, + msg.sender, + abi.encodePacked( + L2MessageType_unsignedEOATx, + gasLimit, + maxFeePerGas, + nonce, + uint256(uint160(to)), + value, + data + ), + 0 + ); + } + + /// @inheritdoc IInbox + function sendContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + uint256 value, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + // arbos will discard unsigned tx with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + return + _deliverMessage( + L2_MSG, + msg.sender, + abi.encodePacked( + L2MessageType_unsignedContractTx, + gasLimit, + maxFeePerGas, + uint256(uint160(to)), + value, + data + ), + 0 + ); + } + + function _createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 amount, + bytes calldata data + ) internal returns (uint256) { + // ensure the user's deposit alone will make submission succeed + if (amount < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas)) { + revert InsufficientValue( + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + amount + ); + } + + // if a refund address is a contract, we apply the alias to it + // so that it can access its funds on the L2 + // since the beneficiary and other refund addresses don't get rewritten by arb-os + if (AddressUpgradeable.isContract(excessFeeRefundAddress)) { + excessFeeRefundAddress = AddressAliasHelper.applyL1ToL2Alias(excessFeeRefundAddress); + } + if (AddressUpgradeable.isContract(callValueRefundAddress)) { + // this is the beneficiary. be careful since this is the address that can cancel the retryable in the L2 + callValueRefundAddress = AddressAliasHelper.applyL1ToL2Alias(callValueRefundAddress); + } + + // gas limit is validated to be within uint64 in unsafeCreateRetryableTicket + return + _unsafeCreateRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + amount, + data + ); + } + + function _unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 amount, + bytes calldata data + ) internal returns (uint256) { + // gas price and limit of 1 should never be a valid input, so instead they are used as + // magic values to trigger a revert in eth calls that surface data without requiring a tx trace + if (gasLimit == 1 || maxFeePerGas == 1) + revert RetryableData( + msg.sender, + to, + l2CallValue, + amount, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + data + ); + + // arbos will discard retryable with gas limit too large + if (gasLimit > type(uint64).max) { + revert GasLimitTooLarge(); + } + + uint256 submissionFee = calculateRetryableSubmissionFee(data.length, block.basefee); + if (maxSubmissionCost < submissionFee) + revert InsufficientSubmissionCost(submissionFee, maxSubmissionCost); + + return + _deliverMessage( + L1MessageType_submitRetryableTx, + msg.sender, + abi.encodePacked( + uint256(uint160(to)), + l2CallValue, + amount, + maxSubmissionCost, + uint256(uint160(excessFeeRefundAddress)), + uint256(uint160(callValueRefundAddress)), + gasLimit, + maxFeePerGas, + data.length, + data + ), + amount + ); + } + + function _deliverMessage( + uint8 _kind, + address _sender, + bytes memory _messageData, + uint256 amount + ) internal returns (uint256) { + if (_messageData.length > MAX_DATA_SIZE) + revert DataTooLarge(_messageData.length, MAX_DATA_SIZE); + uint256 msgNum = _deliverToBridge(_kind, _sender, keccak256(_messageData), amount); + emit InboxMessageDelivered(msgNum, _messageData); + return msgNum; + } + + function _deliverToBridge( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 amount + ) internal virtual returns (uint256); + + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + public + view + virtual + returns (uint256); +} diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol new file mode 100644 index 00000000..59eb4797 --- /dev/null +++ b/src/bridge/AbsOutbox.sol @@ -0,0 +1,295 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import { + AlreadyInit, + NotRollup, + ProofTooLong, + PathNotMinimal, + UnknownRoot, + AlreadySpent, + BridgeCallFailed, + HadZeroInit +} from "../libraries/Error.sol"; +import "./IBridge.sol"; +import "./IOutbox.sol"; +import "../libraries/MerkleLib.sol"; +import "../libraries/DelegateCallAware.sol"; + +/// @dev this error is thrown since certain functions are only expected to be used in simulations, not in actual txs +error SimulationOnlyEntrypoint(); + +abstract contract AbsOutbox is DelegateCallAware, IOutbox { + address public rollup; // the rollup contract + IBridge public bridge; // the bridge contract + + mapping(uint256 => bytes32) public spent; // packed spent bitmap + mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash + + // we're packing this struct into 4 storage slots + // 1st slot: timestamp, l2Block (128 bits each, max ~3.4*10^38) + // 2nd slot: outputId (256 bits) + // 3rd slot: l1Block (96 bits, max ~7.9*10^28), sender (address 160 bits) + // 4th slot: withdrawalAmount (256 bits) + struct L2ToL1Context { + uint128 l2Block; + uint128 timestamp; + bytes32 outputId; + address sender; + uint96 l1Block; + uint256 withdrawalAmount; + } + + // Note, these variables are set and then wiped during a single transaction. + // Therefore their values don't need to be maintained, and their slots will + // hold default values (which are interpreted as empty values) outside of transactions + L2ToL1Context internal context; + + // default context values to be used in storage instead of zero, to save on storage refunds + // it is assumed that arb-os never assigns these values to a valid leaf to be redeemed + uint128 private constant L2BLOCK_DEFAULT_CONTEXT = type(uint128).max; + uint96 private constant L1BLOCK_DEFAULT_CONTEXT = type(uint96).max; + uint128 private constant TIMESTAMP_DEFAULT_CONTEXT = type(uint128).max; + bytes32 private constant OUTPUTID_DEFAULT_CONTEXT = bytes32(type(uint256).max); + address private constant SENDER_DEFAULT_CONTEXT = address(type(uint160).max); + + uint128 public constant OUTBOX_VERSION = 2; + + function initialize(IBridge _bridge) external onlyDelegated { + if (address(_bridge) == address(0)) revert HadZeroInit(); + if (address(bridge) != address(0)) revert AlreadyInit(); + // address zero is returned if no context is set, but the values used in storage + // are non-zero to save users some gas (as storage refunds are usually maxed out) + // EIP-1153 would help here + context = L2ToL1Context({ + l2Block: L2BLOCK_DEFAULT_CONTEXT, + l1Block: L1BLOCK_DEFAULT_CONTEXT, + timestamp: TIMESTAMP_DEFAULT_CONTEXT, + outputId: OUTPUTID_DEFAULT_CONTEXT, + sender: SENDER_DEFAULT_CONTEXT, + withdrawalAmount: _defaultContextAmount() + }); + bridge = _bridge; + rollup = address(_bridge.rollup()); + } + + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { + if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); + roots[root] = l2BlockHash; + emit SendRootUpdated(root, l2BlockHash); + } + + /// @inheritdoc IOutbox + function l2ToL1Sender() external view returns (address) { + address sender = context.sender; + // we don't return the default context value to avoid a breaking change in the API + if (sender == SENDER_DEFAULT_CONTEXT) return address(0); + return sender; + } + + /// @inheritdoc IOutbox + function l2ToL1Block() external view returns (uint256) { + uint128 l2Block = context.l2Block; + // we don't return the default context value to avoid a breaking change in the API + if (l2Block == L2BLOCK_DEFAULT_CONTEXT) return uint256(0); + return uint256(l2Block); + } + + /// @inheritdoc IOutbox + function l2ToL1EthBlock() external view returns (uint256) { + uint96 l1Block = context.l1Block; + // we don't return the default context value to avoid a breaking change in the API + if (l1Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); + return uint256(l1Block); + } + + /// @inheritdoc IOutbox + function l2ToL1Timestamp() external view returns (uint256) { + uint128 timestamp = context.timestamp; + // we don't return the default context value to avoid a breaking change in the API + if (timestamp == TIMESTAMP_DEFAULT_CONTEXT) return uint256(0); + return uint256(timestamp); + } + + /// @notice batch number is deprecated and now always returns 0 + function l2ToL1BatchNum() external pure returns (uint256) { + return 0; + } + + /// @inheritdoc IOutbox + function l2ToL1OutputId() external view returns (bytes32) { + bytes32 outputId = context.outputId; + // we don't return the default context value to avoid a breaking change in the API + if (outputId == OUTPUTID_DEFAULT_CONTEXT) return bytes32(0); + return outputId; + } + + /// @inheritdoc IOutbox + function executeTransaction( + bytes32[] calldata proof, + uint256 index, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) external { + bytes32 userTx = calculateItemHash( + l2Sender, + to, + l2Block, + l1Block, + l2Timestamp, + value, + data + ); + + recordOutputAsSpent(proof, index, userTx); + + executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); + } + + /// @inheritdoc IOutbox + function executeTransactionSimulation( + uint256 index, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) external { + if (msg.sender != address(0)) revert SimulationOnlyEntrypoint(); + executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); + } + + function executeTransactionImpl( + uint256 outputId, + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) internal { + emit OutBoxTransactionExecuted(to, l2Sender, 0, outputId); + + // we temporarily store the previous values so the outbox can naturally + // unwind itself when there are nested calls to `executeTransaction` + L2ToL1Context memory prevContext = context; + + context = L2ToL1Context({ + sender: l2Sender, + l2Block: uint128(l2Block), + l1Block: uint96(l1Block), + timestamp: uint128(l2Timestamp), + outputId: bytes32(outputId), + withdrawalAmount: _amountToSetInContext(value) + }); + + // set and reset vars around execution so they remain valid during call + executeBridgeCall(to, value, data); + + context = prevContext; + } + + function _calcSpentIndexOffset(uint256 index) + internal + view + returns ( + uint256, + uint256, + bytes32 + ) + { + uint256 spentIndex = index / 255; // Note: Reserves the MSB. + uint256 bitOffset = index % 255; + bytes32 replay = spent[spentIndex]; + return (spentIndex, bitOffset, replay); + } + + function _isSpent(uint256 bitOffset, bytes32 replay) internal pure returns (bool) { + return ((replay >> bitOffset) & bytes32(uint256(1))) != bytes32(0); + } + + /// @inheritdoc IOutbox + function isSpent(uint256 index) external view returns (bool) { + (, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); + return _isSpent(bitOffset, replay); + } + + function recordOutputAsSpent( + bytes32[] memory proof, + uint256 index, + bytes32 item + ) internal { + if (proof.length >= 256) revert ProofTooLong(proof.length); + if (index >= 2**proof.length) revert PathNotMinimal(index, 2**proof.length); + + // Hash the leaf an extra time to prove it's a leaf + bytes32 calcRoot = calculateMerkleRoot(proof, index, item); + if (roots[calcRoot] == bytes32(0)) revert UnknownRoot(calcRoot); + + (uint256 spentIndex, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); + + if (_isSpent(bitOffset, replay)) revert AlreadySpent(index); + spent[spentIndex] = (replay | bytes32(1 << bitOffset)); + } + + function executeBridgeCall( + address to, + uint256 value, + bytes memory data + ) internal { + (bool success, bytes memory returndata) = bridge.executeCall(to, value, data); + if (!success) { + if (returndata.length > 0) { + // solhint-disable-next-line no-inline-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert BridgeCallFailed(); + } + } + } + + function calculateItemHash( + address l2Sender, + address to, + uint256 l2Block, + uint256 l1Block, + uint256 l2Timestamp, + uint256 value, + bytes calldata data + ) public pure returns (bytes32) { + return + keccak256(abi.encodePacked(l2Sender, to, l2Block, l1Block, l2Timestamp, value, data)); + } + + function calculateMerkleRoot( + bytes32[] memory proof, + uint256 path, + bytes32 item + ) public pure returns (bytes32) { + return MerkleLib.calculateRoot(proof, path, keccak256(abi.encodePacked(item))); + } + + /// @notice default value to be used for 'amount' field in L2ToL1Context outside of transaction execution. + /// @return default 'amount' in case of ERC20-based rollup is type(uint256).max, or 0 in case of ETH-based rollup + function _defaultContextAmount() internal pure virtual returns (uint256); + + /// @notice value to be set for 'amount' field in L2ToL1Context during L2 to L1 transaction execution. + /// In case of ERC20-based rollup this is the amount of native token being withdrawn. In case of standard ETH-based + /// rollup this amount shall always be 0, because amount of ETH being withdrawn can be read from msg.value. + /// @return amount of native token being withdrawn in case of ERC20-based rollup, or 0 in case of ETH-based rollup + function _amountToSetInContext(uint256 value) internal pure virtual returns (uint256); +} diff --git a/src/bridge/Bridge.sol b/src/bridge/Bridge.sol index 722a5e28..9ebb5091 100644 --- a/src/bridge/Bridge.sol +++ b/src/bridge/Bridge.sol @@ -6,17 +6,8 @@ pragma solidity ^0.8.4; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; - -import { - NotContract, - NotRollupOrOwner, - NotDelayedInbox, - NotSequencerInbox, - NotOutbox, - InvalidOutboxSet, - BadSequencerMessageNumber -} from "../libraries/Error.sol"; -import "./IBridge.sol"; +import "./AbsBridge.sol"; +import "./IEthBridge.sol"; import "./Messages.sol"; import "../libraries/DelegateCallAware.sol"; @@ -24,260 +15,40 @@ import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; /** * @title Staging ground for incoming and outgoing messages - * @notice Holds the inbox accumulator for sequenced and delayed messages. - * It is also the ETH escrow for value sent with these messages. - * Since the escrow is held here, this contract also contains a list of allowed - * outboxes that can make calls from here and withdraw this escrow. + * @notice It is also the ETH escrow for value sent with these messages. */ -contract Bridge is Initializable, DelegateCallAware, IBridge { +contract Bridge is AbsBridge, IEthBridge { using AddressUpgradeable for address; - struct InOutInfo { - uint256 index; - bool allowed; - } - - mapping(address => InOutInfo) private allowedDelayedInboxesMap; - mapping(address => InOutInfo) private allowedOutboxesMap; - - address[] public allowedDelayedInboxList; - address[] public allowedOutboxList; - - address internal _activeOutbox; - - /// @inheritdoc IBridge - bytes32[] public delayedInboxAccs; - - /// @inheritdoc IBridge - bytes32[] public sequencerInboxAccs; - - IOwnable public rollup; - address public sequencerInbox; - - uint256 public override sequencerReportedSubMessageCount; - - address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - + /// @inheritdoc IEthBridge function initialize(IOwnable rollup_) external initializer onlyDelegated { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; } - modifier onlyRollupOrOwner() { - if (msg.sender != address(rollup)) { - address rollupOwner = rollup.owner(); - if (msg.sender != rollupOwner) { - revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); - } - } - _; - } - - /// @dev returns the address of current active Outbox, or zero if no outbox is active - function activeOutbox() public view returns (address) { - address outbox = _activeOutbox; - // address zero is returned if no outbox is set, but the value used in storage - // is non-zero to save users some gas (as storage refunds are usually maxed out) - // EIP-1153 would help here. - // we don't return `EMPTY_ACTIVEOUTBOX` to avoid a breaking change on the current api - if (outbox == EMPTY_ACTIVEOUTBOX) return address(0); - return outbox; - } - - function allowedDelayedInboxes(address inbox) external view returns (bool) { - return allowedDelayedInboxesMap[inbox].allowed; - } - - function allowedOutboxes(address outbox) external view returns (bool) { - return allowedOutboxesMap[outbox].allowed; - } - - modifier onlySequencerInbox() { - if (msg.sender != sequencerInbox) revert NotSequencerInbox(msg.sender); - _; - } - - function enqueueSequencerMessage( - bytes32 dataHash, - uint256 afterDelayedMessagesRead, - uint256 prevMessageCount, - uint256 newMessageCount - ) - external - onlySequencerInbox - returns ( - uint256 seqMessageIndex, - bytes32 beforeAcc, - bytes32 delayedAcc, - bytes32 acc - ) - { - if ( - sequencerReportedSubMessageCount != prevMessageCount && - prevMessageCount != 0 && - sequencerReportedSubMessageCount != 0 - ) { - revert BadSequencerMessageNumber(sequencerReportedSubMessageCount, prevMessageCount); - } - sequencerReportedSubMessageCount = newMessageCount; - seqMessageIndex = sequencerInboxAccs.length; - if (sequencerInboxAccs.length > 0) { - beforeAcc = sequencerInboxAccs[sequencerInboxAccs.length - 1]; - } - if (afterDelayedMessagesRead > 0) { - delayedAcc = delayedInboxAccs[afterDelayedMessagesRead - 1]; - } - acc = keccak256(abi.encodePacked(beforeAcc, dataHash, delayedAcc)); - sequencerInboxAccs.push(acc); - } - - /// @inheritdoc IBridge - function submitBatchSpendingReport(address sender, bytes32 messageDataHash) - external - onlySequencerInbox - returns (uint256) - { - return - addMessageToDelayedAccumulator( - L1MessageType_batchPostingReport, - sender, - uint64(block.number), - uint64(block.timestamp), // solhint-disable-line not-rely-on-time, - block.basefee, - messageDataHash - ); - } - - /// @inheritdoc IBridge + /// @inheritdoc IEthBridge function enqueueDelayedMessage( uint8 kind, address sender, bytes32 messageDataHash ) external payable returns (uint256) { - if (!allowedDelayedInboxesMap[msg.sender].allowed) revert NotDelayedInbox(msg.sender); - return - addMessageToDelayedAccumulator( - kind, - sender, - uint64(block.number), - uint64(block.timestamp), // solhint-disable-line not-rely-on-time - block.basefee, - messageDataHash - ); + return _enqueueDelayedMessage(kind, sender, messageDataHash, msg.value); } - function addMessageToDelayedAccumulator( - uint8 kind, - address sender, - uint64 blockNumber, - uint64 blockTimestamp, - uint256 baseFeeL1, - bytes32 messageDataHash - ) internal returns (uint256) { - uint256 count = delayedInboxAccs.length; - bytes32 messageHash = Messages.messageHash( - kind, - sender, - blockNumber, - blockTimestamp, - count, - baseFeeL1, - messageDataHash - ); - bytes32 prevAcc = 0; - if (count > 0) { - prevAcc = delayedInboxAccs[count - 1]; - } - delayedInboxAccs.push(Messages.accumulateInboxMessage(prevAcc, messageHash)); - emit MessageDelivered( - count, - prevAcc, - msg.sender, - kind, - sender, - messageDataHash, - baseFeeL1, - blockTimestamp - ); - return count; + function _transferFunds(uint256) internal override { + // do nothing as Eth transfer is part of TX execution } - function executeCall( + function _executeLowLevelCall( address to, uint256 value, - bytes calldata data - ) external returns (bool success, bytes memory returnData) { - if (!allowedOutboxesMap[msg.sender].allowed) revert NotOutbox(msg.sender); - if (data.length > 0 && !to.isContract()) revert NotContract(to); - address prevOutbox = _activeOutbox; - _activeOutbox = msg.sender; - // We set and reset active outbox around external call so activeOutbox remains valid during call - - // We use a low level call here since we want to bubble up whether it succeeded or failed to the caller - // rather than reverting on failure as well as allow contract and non-contract calls + bytes memory data + ) internal override returns (bool success, bytes memory returnData) { // solhint-disable-next-line avoid-low-level-calls (success, returnData) = to.call{value: value}(data); - _activeOutbox = prevOutbox; - emit BridgeCallTriggered(msg.sender, to, value, data); - } - - function setSequencerInbox(address _sequencerInbox) external onlyRollupOrOwner { - sequencerInbox = _sequencerInbox; - emit SequencerInboxUpdated(_sequencerInbox); } - function setDelayedInbox(address inbox, bool enabled) external onlyRollupOrOwner { - InOutInfo storage info = allowedDelayedInboxesMap[inbox]; - bool alreadyEnabled = info.allowed; - emit InboxToggle(inbox, enabled); - if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { - return; - } - if (enabled) { - allowedDelayedInboxesMap[inbox] = InOutInfo(allowedDelayedInboxList.length, true); - allowedDelayedInboxList.push(inbox); - } else { - allowedDelayedInboxList[info.index] = allowedDelayedInboxList[ - allowedDelayedInboxList.length - 1 - ]; - allowedDelayedInboxesMap[allowedDelayedInboxList[info.index]].index = info.index; - allowedDelayedInboxList.pop(); - delete allowedDelayedInboxesMap[inbox]; - } + function _baseFeeToReport() internal view override returns (uint256) { + return block.basefee; } - - function setOutbox(address outbox, bool enabled) external onlyRollupOrOwner { - if (outbox == EMPTY_ACTIVEOUTBOX) revert InvalidOutboxSet(outbox); - - InOutInfo storage info = allowedOutboxesMap[outbox]; - bool alreadyEnabled = info.allowed; - emit OutboxToggle(outbox, enabled); - if ((alreadyEnabled && enabled) || (!alreadyEnabled && !enabled)) { - return; - } - if (enabled) { - allowedOutboxesMap[outbox] = InOutInfo(allowedOutboxList.length, true); - allowedOutboxList.push(outbox); - } else { - allowedOutboxList[info.index] = allowedOutboxList[allowedOutboxList.length - 1]; - allowedOutboxesMap[allowedOutboxList[info.index]].index = info.index; - allowedOutboxList.pop(); - delete allowedOutboxesMap[outbox]; - } - } - - function setSequencerReportedSubMessageCount(uint256 newMsgCount) external onlyRollupOrOwner { - sequencerReportedSubMessageCount = newMsgCount; - } - - function delayedMessageCount() external view override returns (uint256) { - return delayedInboxAccs.length; - } - - function sequencerMessageCount() external view returns (uint256) { - return sequencerInboxAccs.length; - } - - /// @dev For the classic -> nitro migration. TODO: remove post-migration. - function acceptFundsFromOldBridge() external payable {} -} +} \ No newline at end of file diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol new file mode 100644 index 00000000..c6f08548 --- /dev/null +++ b/src/bridge/ERC20Bridge.sol @@ -0,0 +1,74 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsBridge.sol"; +import "./IERC20Bridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import {InvalidTokenSet, CallTargetNotAllowed} from "../libraries/Error.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title Staging ground for incoming and outgoing messages + * @notice Unlike the standard Eth bridge, native token bridge escrows the custom ERC20 token which is + * used as native currency on L2. + */ +contract ERC20Bridge is AbsBridge, IERC20Bridge { + using SafeERC20 for IERC20; + + /// @inheritdoc IERC20Bridge + address public nativeToken; + + /// @inheritdoc IERC20Bridge + function initialize(IOwnable rollup_, address nativeToken_) external initializer onlyDelegated { + if (nativeToken_ == address(0)) revert InvalidTokenSet(nativeToken_); + nativeToken = nativeToken_; + _activeOutbox = EMPTY_ACTIVEOUTBOX; + rollup = rollup_; + } + + /// @inheritdoc IERC20Bridge + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenFeeAmount + ) external returns (uint256) { + return _enqueueDelayedMessage(kind, sender, messageDataHash, tokenFeeAmount); + } + + function _transferFunds(uint256 amount) internal override { + // fetch native token from Inbox + IERC20(nativeToken).safeTransferFrom(msg.sender, address(this), amount); + } + + function _executeLowLevelCall( + address to, + uint256 value, + bytes memory data + ) internal override returns (bool success, bytes memory returnData) { + if (to == nativeToken) { + revert CallTargetNotAllowed(nativeToken); + } + + // first release native token + IERC20(nativeToken).safeTransfer(to, value); + success = true; + + // if there's data do additional contract call + if (data.length > 0) { + // solhint-disable-next-line avoid-low-level-calls + (success, returnData) = to.call(data); + } + } + + function _baseFeeToReport() internal pure override returns (uint256) { + // ArbOs uses formula 'l1BaseFee * (1400 + 6 * calldataLengthInBytes)' to calculate retryable ticket's + // submission fee. When custom ERC20 token is used to pay for fees, submission fee shall be 0. That's + // why baseFee is reported as 0 here. + return 0; + } +} \ No newline at end of file diff --git a/src/bridge/ERC20Inbox.sol b/src/bridge/ERC20Inbox.sol new file mode 100644 index 00000000..b8dbdc5c --- /dev/null +++ b/src/bridge/ERC20Inbox.sol @@ -0,0 +1,141 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsInbox.sol"; +import "./IERC20Inbox.sol"; +import "./IERC20Bridge.sol"; +import "../libraries/AddressAliasHelper.sol"; +import {L1MessageType_ethDeposit} from "../libraries/MessageTypes.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +/** + * @title Inbox for user and contract originated messages + * @notice Messages created via this inbox are enqueued in the delayed accumulator + * to await inclusion in the SequencerInbox + */ +contract ERC20Inbox is AbsInbox, IERC20Inbox { + using SafeERC20 for IERC20; + + /// @inheritdoc IInbox + function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) + external + initializer + onlyDelegated + { + __AbsInbox_init(_bridge, _sequencerInbox); + + // inbox holds native token in transit used to pay for retryable tickets, approve bridge to use it + address nativeToken = IERC20Bridge(address(bridge)).nativeToken(); + IERC20(nativeToken).approve(address(bridge), type(uint256).max); + } + + /// @inheritdoc IERC20Inbox + function depositERC20(uint256 amount) public whenNotPaused onlyAllowed returns (uint256) { + address dest = msg.sender; + + // solhint-disable-next-line avoid-tx-origin + if (AddressUpgradeable.isContract(msg.sender) || tx.origin != msg.sender) { + // isContract check fails if this function is called during a contract's constructor. + dest = AddressAliasHelper.applyL1ToL2Alias(msg.sender); + } + + return + _deliverMessage( + L1MessageType_ethDeposit, + msg.sender, + abi.encodePacked(dest, amount), + amount + ); + } + + /// @inheritdoc IERC20Inbox + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external whenNotPaused onlyAllowed returns (uint256) { + return + _createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ); + } + + /// @inheritdoc IERC20Inbox + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) public whenNotPaused onlyAllowed returns (uint256) { + return + _unsafeCreateRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ); + } + + /// @inheritdoc IInbox + function calculateRetryableSubmissionFee(uint256, uint256) + public + pure + override(AbsInbox, IInbox) + returns (uint256) + { + // retryable ticket's submission fee is not charged when ERC20 token is used to pay for fees + return 0; + } + + function _deliverToBridge( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenAmount + ) internal override returns (uint256) { + // fetch native token from sender if inbox doesn't already hold enough tokens to pay for fees + address nativeToken = IERC20Bridge(address(bridge)).nativeToken(); + uint256 inboxNativeTokenBalance = IERC20(nativeToken).balanceOf(address(this)); + if (inboxNativeTokenBalance < tokenAmount) { + uint256 diff = tokenAmount - inboxNativeTokenBalance; + IERC20(nativeToken).safeTransferFrom(msg.sender, address(this), diff); + } + + return + IERC20Bridge(address(bridge)).enqueueDelayedMessage( + kind, + AddressAliasHelper.applyL1ToL2Alias(sender), + messageDataHash, + tokenAmount + ); + } +} \ No newline at end of file diff --git a/src/bridge/ERC20Outbox.sol b/src/bridge/ERC20Outbox.sol new file mode 100644 index 00000000..444e6729 --- /dev/null +++ b/src/bridge/ERC20Outbox.sol @@ -0,0 +1,27 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.4; + +import "./AbsOutbox.sol"; + +contract ERC20Outbox is AbsOutbox { + uint256 private constant AMOUNT_DEFAULT_CONTEXT = type(uint256).max; + + function l2ToL1WithdrawalAmount() external view returns (uint256) { + uint256 amount = context.withdrawalAmount; + if (amount == AMOUNT_DEFAULT_CONTEXT) return 0; + return amount; + } + + /// @inheritdoc AbsOutbox + function _defaultContextAmount() internal pure override returns (uint256) { + return AMOUNT_DEFAULT_CONTEXT; + } + + /// @inheritdoc AbsOutbox + function _amountToSetInContext(uint256 value) internal pure override returns (uint256) { + return value; + } +} \ No newline at end of file diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 5e318c3a..25267781 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -54,17 +54,6 @@ interface IBridge { function sequencerReportedSubMessageCount() external view returns (uint256); - /** - * @dev Enqueue a message in the delayed inbox accumulator. - * These messages are later sequenced in the SequencerInbox, either - * by the sequencer as part of a normal batch, or by force inclusion. - */ - function enqueueDelayedMessage( - uint8 kind, - address sender, - bytes32 messageDataHash - ) external payable returns (uint256); - function executeCall( address to, uint256 value, @@ -108,8 +97,4 @@ interface IBridge { function setDelayedInbox(address inbox, bool enabled) external; function setOutbox(address inbox, bool enabled) external; - - // ---------- initializer ---------- - - function initialize(IOwnable rollup_) external; -} +} \ No newline at end of file diff --git a/src/bridge/IERC20Bridge.sol b/src/bridge/IERC20Bridge.sol new file mode 100644 index 00000000..d654b3d3 --- /dev/null +++ b/src/bridge/IERC20Bridge.sol @@ -0,0 +1,35 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IOwnable.sol"; +import "./IBridge.sol"; + +interface IERC20Bridge is IBridge { + /** + * @dev token that is escrowed in bridge on L1 side and minted on L2 as native currency. + * Also fees are paid in this token. ERC777, fee on transfer tokens and rebasing tokens + * are not supported to be used as chain's native token, as they can break collateralization + * invariants. + */ + function nativeToken() external returns (address); + + /** + * @dev Enqueue a message in the delayed inbox accumulator. + * These messages are later sequenced in the SequencerInbox, either + * by the sequencer as part of a normal batch, or by force inclusion. + */ + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 tokenFeeAmount + ) external returns (uint256); + + // ---------- initializer ---------- + + function initialize(IOwnable rollup_, address nativeToken_) external; +} \ No newline at end of file diff --git a/src/bridge/IERC20Inbox.sol b/src/bridge/IERC20Inbox.sol new file mode 100644 index 00000000..5ad88a20 --- /dev/null +++ b/src/bridge/IERC20Inbox.sol @@ -0,0 +1,75 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IInbox.sol"; + +interface IERC20Inbox is IInbox { + /** + * @notice Deposit native token from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + * @dev This function should not be called inside contract constructors + */ + function depositERC20(uint256 amount) external returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev all tokenTotalFeeAmount will be deposited to callValueRefundAddress on L2 + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param tokenTotalFeeAmount amount of fees to be deposited in native token to cover for retryable ticket cost + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds + * come from the deposit alone, rather than falling back on the user's L2 balance + * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). + * createRetryableTicket method is the recommended standard. + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param tokenTotalFeeAmount amount of fees to be deposited in native token to cover for retryable ticket cost + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external returns (uint256); +} \ No newline at end of file diff --git a/src/bridge/IEthBridge.sol b/src/bridge/IEthBridge.sol new file mode 100644 index 00000000..a1b3183d --- /dev/null +++ b/src/bridge/IEthBridge.sol @@ -0,0 +1,26 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IOwnable.sol"; +import "./IBridge.sol"; + +interface IEthBridge is IBridge { + /** + * @dev Enqueue a message in the delayed inbox accumulator. + * These messages are later sequenced in the SequencerInbox, either + * by the sequencer as part of a normal batch, or by force inclusion. + */ + function enqueueDelayedMessage( + uint8 kind, + address sender, + bytes32 messageDataHash + ) external payable returns (uint256); + + // ---------- initializer ---------- + + function initialize(IOwnable rollup_) external; +} \ No newline at end of file diff --git a/src/bridge/IEthInbox.sol b/src/bridge/IEthInbox.sol new file mode 100644 index 00000000..48c1804e --- /dev/null +++ b/src/bridge/IEthInbox.sol @@ -0,0 +1,133 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IBridge.sol"; +import "./IInbox.sol"; + +interface IEthInbox is IInbox { + function sendL1FundedUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + bytes calldata data + ) external payable returns (uint256); + + function sendL1FundedContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + bytes calldata data + ) external payable returns (uint256); + + /** + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin + */ + function sendL1FundedUnsignedTransactionToFork( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + bytes calldata data + ) external payable returns (uint256); + + /** + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin + */ + function sendUnsignedTransactionToFork( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + uint256 value, + bytes calldata data + ) external returns (uint256); + + /** + * @notice Send a message to initiate L2 withdrawal + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin + */ + function sendWithdrawEthToFork( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + uint256 value, + address withdrawTo + ) external returns (uint256); + + /** + * @notice Deposit eth from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + * @dev This function should not be called inside contract constructors + */ + function depositEth() external payable returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev all msg.value will deposited to callValueRefundAddress on L2 + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + bytes calldata data + ) external payable returns (uint256); + + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds + * come from the deposit alone, rather than falling back on the user's L2 balance + * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). + * createRetryableTicket method is the recommended standard. + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + bytes calldata data + ) external payable returns (uint256); + + // ---------- initializer ---------- + + /** + * @dev function to be called one time during the inbox upgrade process + * this is used to fix the storage slots + */ + function postUpgradeInit(IBridge _bridge) external; +} \ No newline at end of file diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index ba424b6b..b27558c4 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -17,7 +17,6 @@ interface IInbox is IDelayedMessageProvider { /** * @notice Send a generic L2 message to the chain * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input - * This method will be disabled upon L1 fork to prevent replay attacks on L2 * @param messageData Data of the message being sent */ function sendL2MessageFromOrigin(bytes calldata messageData) external returns (uint256); @@ -25,26 +24,10 @@ interface IInbox is IDelayedMessageProvider { /** * @notice Send a generic L2 message to the chain * @dev This method can be used to send any type of message that doesn't require L1 validation - * This method will be disabled upon L1 fork to prevent replay attacks on L2 * @param messageData Data of the message being sent */ function sendL2Message(bytes calldata messageData) external returns (uint256); - function sendL1FundedUnsignedTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - bytes calldata data - ) external payable returns (uint256); - - function sendL1FundedContractTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - address to, - bytes calldata data - ) external payable returns (uint256); - function sendUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -62,44 +45,6 @@ interface IInbox is IDelayedMessageProvider { bytes calldata data ) external returns (uint256); - /** - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendL1FundedUnsignedTransactionToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - bytes calldata data - ) external payable returns (uint256); - - /** - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendUnsignedTransactionToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - uint256 value, - bytes calldata data - ) external returns (uint256); - - /** - * @notice Send a message to initiate L2 withdrawal - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendWithdrawEthToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - uint256 value, - address withdrawTo - ) external returns (uint256); - /** * @notice Get the L1 fee for submitting a retryable * @dev This fee can be paid by funds already in the L2 aliased address or by the current message value @@ -112,67 +57,6 @@ interface IInbox is IDelayedMessageProvider { view returns (uint256); - /** - * @notice Deposit eth from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract - * @dev This does not trigger the fallback function when receiving in the L2 side. - * Look into retryable tickets if you are interested in this functionality. - * @dev This function should not be called inside contract constructors - */ - function depositEth() external payable returns (uint256); - - /** - * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts - * @dev all msg.value will deposited to callValueRefundAddress on L2 - * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error - * @param to destination L2 contract address - * @param l2CallValue call value for retryable L2 message - * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee - * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance - * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled - * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param data ABI encoded data of L2 message - * @return unique message number of the retryable transaction - */ - function createRetryableTicket( - address to, - uint256 l2CallValue, - uint256 maxSubmissionCost, - address excessFeeRefundAddress, - address callValueRefundAddress, - uint256 gasLimit, - uint256 maxFeePerGas, - bytes calldata data - ) external payable returns (uint256); - - /** - * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts - * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds - * come from the deposit alone, rather than falling back on the user's L2 balance - * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). - * createRetryableTicket method is the recommended standard. - * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error - * @param to destination L2 contract address - * @param l2CallValue call value for retryable L2 message - * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee - * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance - * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled - * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param data ABI encoded data of L2 message - * @return unique message number of the retryable transaction - */ - function unsafeCreateRetryableTicket( - address to, - uint256 l2CallValue, - uint256 maxSubmissionCost, - address excessFeeRefundAddress, - address callValueRefundAddress, - uint256 gasLimit, - uint256 maxFeePerGas, - bytes calldata data - ) external payable returns (uint256); - // ---------- onlyRollupOrOwner functions ---------- /// @notice pauses all inbox functionality @@ -181,13 +65,19 @@ interface IInbox is IDelayedMessageProvider { /// @notice unpauses all inbox functionality function unpause() external; - // ---------- initializer ---------- + /// @notice add or remove users from allowList + function setAllowList(address[] memory user, bool[] memory val) external; - /** - * @dev function to be called one time during the inbox upgrade process - * this is used to fix the storage slots - */ - function postUpgradeInit(IBridge _bridge) external; + /// @notice enable or disable allowList + function setAllowListEnabled(bool _allowListEnabled) external; + + /// @notice check if user is in allowList + function isAllowed(address user) external view returns (bool); + + /// @notice check if allowList is enabled + function allowListEnabled() external view returns (bool); + + // ---------- initializer ---------- function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; -} +} \ No newline at end of file diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index 13eeca33..5f9ba219 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -5,28 +5,20 @@ pragma solidity ^0.8.4; import { - AlreadyInit, NotOrigin, DataTooLarge, - AlreadyPaused, - AlreadyUnpaused, - Paused, InsufficientValue, InsufficientSubmissionCost, - NotAllowedOrigin, RetryableData, - NotRollupOrOwner, L1Forked, NotForked, GasLimitTooLarge } from "../libraries/Error.sol"; -import "./IInbox.sol"; -import "./ISequencerInbox.sol"; +import "./AbsInbox.sol"; +import "./IEthInbox.sol"; import "./IBridge.sol"; - -import "./Messages.sol"; +import "./IEthBridge.sol"; import "../libraries/AddressAliasHelper.sol"; -import "../libraries/DelegateCallAware.sol"; import { L2_MSG, L1MessageType_L2FundedByL1, @@ -39,121 +31,26 @@ import {MAX_DATA_SIZE, UNISWAP_L1_TIMELOCK, UNISWAP_L2_FACTORY} from "../librari import "../precompiles/ArbSys.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; /** * @title Inbox for user and contract originated messages * @notice Messages created via this inbox are enqueued in the delayed accumulator * to await inclusion in the SequencerInbox */ -contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { - IBridge public bridge; - ISequencerInbox public sequencerInbox; - - /// ------------------------------------ allow list start ------------------------------------ /// - - bool public allowListEnabled; - mapping(address => bool) public isAllowed; - - event AllowListAddressSet(address indexed user, bool val); - event AllowListEnabledUpdated(bool isEnabled); - - function setAllowList(address[] memory user, bool[] memory val) external onlyRollupOrOwner { - require(user.length == val.length, "INVALID_INPUT"); - - for (uint256 i = 0; i < user.length; i++) { - isAllowed[user[i]] = val[i]; - emit AllowListAddressSet(user[i], val[i]); - } - } - - function setAllowListEnabled(bool _allowListEnabled) external onlyRollupOrOwner { - require(_allowListEnabled != allowListEnabled, "ALREADY_SET"); - allowListEnabled = _allowListEnabled; - emit AllowListEnabledUpdated(_allowListEnabled); - } - - /// @dev this modifier checks the tx.origin instead of msg.sender for convenience (ie it allows - /// allowed users to interact with the token bridge without needing the token bridge to be allowList aware). - /// this modifier is not intended to use to be used for security (since this opens the allowList to - /// a smart contract phishing risk). - modifier onlyAllowed() { - // solhint-disable-next-line avoid-tx-origin - if (allowListEnabled && !isAllowed[tx.origin]) revert NotAllowedOrigin(tx.origin); - _; - } - - /// ------------------------------------ allow list end ------------------------------------ /// - - modifier onlyRollupOrOwner() { - IOwnable rollup = bridge.rollup(); - if (msg.sender != address(rollup)) { - address rollupOwner = rollup.owner(); - if (msg.sender != rollupOwner) { - revert NotRollupOrOwner(msg.sender, address(rollup), rollupOwner); - } - } - _; - } - - uint256 internal immutable deployTimeChainId = block.chainid; - - function _chainIdChanged() internal view returns (bool) { - return deployTimeChainId != block.chainid; - } - +contract Inbox is AbsInbox, IEthInbox { /// @inheritdoc IInbox - function pause() external onlyRollupOrOwner { - _pause(); - } - - /// @inheritdoc IInbox - function unpause() external onlyRollupOrOwner { - _unpause(); - } - function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external initializer onlyDelegated { - bridge = _bridge; - sequencerInbox = _sequencerInbox; - allowListEnabled = false; - __Pausable_init(); + __AbsInbox_init(_bridge, _sequencerInbox); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function postUpgradeInit(IBridge) external onlyDelegated onlyProxyOwner {} - /// @inheritdoc IInbox - function sendL2MessageFromOrigin(bytes calldata messageData) - external - whenNotPaused - onlyAllowed - returns (uint256) - { - if (_chainIdChanged()) revert L1Forked(); - // solhint-disable-next-line avoid-tx-origin - if (msg.sender != tx.origin) revert NotOrigin(); - if (messageData.length > MAX_DATA_SIZE) - revert DataTooLarge(messageData.length, MAX_DATA_SIZE); - uint256 msgNum = deliverToBridge(L2_MSG, msg.sender, keccak256(messageData)); - emit InboxMessageDeliveredFromOrigin(msgNum); - return msgNum; - } - - /// @inheritdoc IInbox - function sendL2Message(bytes calldata messageData) - external - whenNotPaused - onlyAllowed - returns (uint256) - { - if (_chainIdChanged()) revert L1Forked(); - return _deliverMessage(L2_MSG, msg.sender, messageData); - } - + /// @inheritdoc IEthInbox function sendL1FundedUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -177,10 +74,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) + ), + msg.value ); } + /// @inheritdoc IEthInbox function sendL1FundedContractTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -202,65 +101,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) - ); - } - - function sendUnsignedTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - uint256 value, - bytes calldata data - ) external whenNotPaused onlyAllowed returns (uint256) { - // arbos will discard unsigned tx with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - return - _deliverMessage( - L2_MSG, - msg.sender, - abi.encodePacked( - L2MessageType_unsignedEOATx, - gasLimit, - maxFeePerGas, - nonce, - uint256(uint160(to)), - value, - data - ) - ); - } - - function sendContractTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - address to, - uint256 value, - bytes calldata data - ) external whenNotPaused onlyAllowed returns (uint256) { - // arbos will discard unsigned tx with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - return - _deliverMessage( - L2_MSG, - msg.sender, - abi.encodePacked( - L2MessageType_unsignedContractTx, - gasLimit, - maxFeePerGas, - uint256(uint160(to)), - value, - data - ) + ), + msg.value ); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function sendL1FundedUnsignedTransactionToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -288,11 +134,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), msg.value, data - ) + ), + msg.value ); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function sendUnsignedTransactionToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -321,11 +168,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(to)), value, data - ) + ), + 0 ); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function sendWithdrawEthToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -353,21 +201,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256(uint160(address(100))), // ArbSys address value, abi.encode(ArbSys.withdrawEth.selector, withdrawTo) - ) + ), + 0 ); } - /// @inheritdoc IInbox - function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) - public - view - returns (uint256) - { - // Use current block basefee if baseFee parameter is 0 - return (1400 + 6 * dataLength) * (baseFee == 0 ? block.basefee : baseFee); - } - - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function depositEth() public payable whenNotPaused onlyAllowed returns (uint256) { address dest = msg.sender; @@ -381,7 +220,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { _deliverMessage( L1MessageType_ethDeposit, msg.sender, - abi.encodePacked(dest, msg.value) + abi.encodePacked(dest, msg.value), + msg.value ); } @@ -428,7 +268,7 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { ); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function createRetryableTicket( address to, uint256 l2CallValue, @@ -439,28 +279,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256 maxFeePerGas, bytes calldata data ) external payable whenNotPaused onlyAllowed returns (uint256) { - // ensure the user's deposit alone will make submission succeed - if (msg.value < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas)) { - revert InsufficientValue( - maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, - msg.value - ); - } - - // if a refund address is a contract, we apply the alias to it - // so that it can access its funds on the L2 - // since the beneficiary and other refund addresses don't get rewritten by arb-os - if (AddressUpgradeable.isContract(excessFeeRefundAddress)) { - excessFeeRefundAddress = AddressAliasHelper.applyL1ToL2Alias(excessFeeRefundAddress); - } - if (AddressUpgradeable.isContract(callValueRefundAddress)) { - // this is the beneficiary. be careful since this is the address that can cancel the retryable in the L2 - callValueRefundAddress = AddressAliasHelper.applyL1ToL2Alias(callValueRefundAddress); - } - - // gas limit is validated to be within uint64 in unsafeCreateRetryableTicket return - unsafeCreateRetryableTicket( + _createRetryableTicket( to, l2CallValue, maxSubmissionCost, @@ -468,11 +288,12 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { callValueRefundAddress, gasLimit, maxFeePerGas, + msg.value, data ); } - /// @inheritdoc IInbox + /// @inheritdoc IEthInbox function unsafeCreateRetryableTicket( address to, uint256 l2CallValue, @@ -483,48 +304,29 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { uint256 maxFeePerGas, bytes calldata data ) public payable whenNotPaused onlyAllowed returns (uint256) { - // gas price and limit of 1 should never be a valid input, so instead they are used as - // magic values to trigger a revert in eth calls that surface data without requiring a tx trace - if (gasLimit == 1 || maxFeePerGas == 1) - revert RetryableData( - msg.sender, + return + _unsafeCreateRetryableTicket( to, l2CallValue, - msg.value, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, + msg.value, data ); + } - // arbos will discard retryable with gas limit too large - if (gasLimit > type(uint64).max) { - revert GasLimitTooLarge(); - } - - uint256 submissionFee = calculateRetryableSubmissionFee(data.length, block.basefee); - if (maxSubmissionCost < submissionFee) - revert InsufficientSubmissionCost(submissionFee, maxSubmissionCost); - - return - _deliverMessage( - L1MessageType_submitRetryableTx, - msg.sender, - abi.encodePacked( - uint256(uint160(to)), - l2CallValue, - msg.value, - maxSubmissionCost, - uint256(uint160(excessFeeRefundAddress)), - uint256(uint160(callValueRefundAddress)), - gasLimit, - maxFeePerGas, - data.length, - data - ) - ); + /// @inheritdoc IInbox + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + public + view + override(AbsInbox, IInbox) + returns (uint256) + { + // Use current block basefee if baseFee parameter is 0 + return (1400 + 6 * dataLength) * (baseFee == 0 ? block.basefee : baseFee); } /// @notice This is an one-time-exception to resolve a misconfiguration of Uniswap Arbitrum deployment @@ -601,32 +403,22 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { maxFeePerGas, data.length, data - ) + ), + msg.value ); } - function _deliverMessage( - uint8 _kind, - address _sender, - bytes memory _messageData - ) internal returns (uint256) { - if (_messageData.length > MAX_DATA_SIZE) - revert DataTooLarge(_messageData.length, MAX_DATA_SIZE); - uint256 msgNum = deliverToBridge(_kind, _sender, keccak256(_messageData)); - emit InboxMessageDelivered(msgNum, _messageData); - return msgNum; - } - - function deliverToBridge( + function _deliverToBridge( uint8 kind, address sender, - bytes32 messageDataHash - ) internal returns (uint256) { + bytes32 messageDataHash, + uint256 amount + ) internal override returns (uint256) { return - bridge.enqueueDelayedMessage{value: msg.value}( + IEthBridge(address(bridge)).enqueueDelayedMessage{value: amount}( kind, AddressAliasHelper.applyL1ToL2Alias(sender), messageDataHash ); } -} +} \ No newline at end of file diff --git a/src/bridge/Outbox.sol b/src/bridge/Outbox.sol index b0b4bbe0..31f50eb7 100644 --- a/src/bridge/Outbox.sol +++ b/src/bridge/Outbox.sol @@ -4,273 +4,16 @@ pragma solidity ^0.8.4; -import { - AlreadyInit, - NotRollup, - ProofTooLong, - PathNotMinimal, - UnknownRoot, - AlreadySpent, - BridgeCallFailed, - HadZeroInit -} from "../libraries/Error.sol"; -import "./IBridge.sol"; -import "./IOutbox.sol"; -import "../libraries/MerkleLib.sol"; -import "../libraries/DelegateCallAware.sol"; +import "./AbsOutbox.sol"; -/// @dev this error is thrown since certain functions are only expected to be used in simulations, not in actual txs -error SimulationOnlyEntrypoint(); - -contract Outbox is DelegateCallAware, IOutbox { - address public rollup; // the rollup contract - IBridge public bridge; // the bridge contract - - mapping(uint256 => bytes32) public spent; // packed spent bitmap - mapping(bytes32 => bytes32) public roots; // maps root hashes => L2 block hash - - struct L2ToL1Context { - uint128 l2Block; - uint128 l1Block; - uint128 timestamp; - bytes32 outputId; - address sender; - } - // Note, these variables are set and then wiped during a single transaction. - // Therefore their values don't need to be maintained, and their slots will - // be empty outside of transactions - L2ToL1Context internal context; - - // default context values to be used in storage instead of zero, to save on storage refunds - // it is assumed that arb-os never assigns these values to a valid leaf to be redeemed - uint128 private constant L2BLOCK_DEFAULT_CONTEXT = type(uint128).max; - uint128 private constant L1BLOCK_DEFAULT_CONTEXT = type(uint128).max; - uint128 private constant TIMESTAMP_DEFAULT_CONTEXT = type(uint128).max; - bytes32 private constant OUTPUTID_DEFAULT_CONTEXT = bytes32(type(uint256).max); - address private constant SENDER_DEFAULT_CONTEXT = address(type(uint160).max); - - uint128 public constant OUTBOX_VERSION = 2; - - function initialize(IBridge _bridge) external onlyDelegated { - if (address(_bridge) == address(0)) revert HadZeroInit(); - if (address(bridge) != address(0)) revert AlreadyInit(); - // address zero is returned if no context is set, but the values used in storage - // are non-zero to save users some gas (as storage refunds are usually maxed out) - // EIP-1153 would help here - context = L2ToL1Context({ - l2Block: L2BLOCK_DEFAULT_CONTEXT, - l1Block: L1BLOCK_DEFAULT_CONTEXT, - timestamp: TIMESTAMP_DEFAULT_CONTEXT, - outputId: OUTPUTID_DEFAULT_CONTEXT, - sender: SENDER_DEFAULT_CONTEXT - }); - bridge = _bridge; - rollup = address(_bridge.rollup()); - } - - function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { - if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); - roots[root] = l2BlockHash; - emit SendRootUpdated(root, l2BlockHash); - } - - /// @inheritdoc IOutbox - function l2ToL1Sender() external view returns (address) { - address sender = context.sender; - // we don't return the default context value to avoid a breaking change in the API - if (sender == SENDER_DEFAULT_CONTEXT) return address(0); - return sender; - } - - /// @inheritdoc IOutbox - function l2ToL1Block() external view returns (uint256) { - uint128 l2Block = context.l2Block; - // we don't return the default context value to avoid a breaking change in the API - if (l2Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); - return uint256(l2Block); - } - - /// @inheritdoc IOutbox - function l2ToL1EthBlock() external view returns (uint256) { - uint128 l1Block = context.l1Block; - // we don't return the default context value to avoid a breaking change in the API - if (l1Block == L1BLOCK_DEFAULT_CONTEXT) return uint256(0); - return uint256(l1Block); - } - - /// @inheritdoc IOutbox - function l2ToL1Timestamp() external view returns (uint256) { - uint128 timestamp = context.timestamp; - // we don't return the default context value to avoid a breaking change in the API - if (timestamp == TIMESTAMP_DEFAULT_CONTEXT) return uint256(0); - return uint256(timestamp); - } - - /// @notice batch number is deprecated and now always returns 0 - function l2ToL1BatchNum() external pure returns (uint256) { +contract Outbox is AbsOutbox { + /// @inheritdoc AbsOutbox + function _defaultContextAmount() internal pure override returns (uint256) { return 0; } - /// @inheritdoc IOutbox - function l2ToL1OutputId() external view returns (bytes32) { - bytes32 outputId = context.outputId; - // we don't return the default context value to avoid a breaking change in the API - if (outputId == OUTPUTID_DEFAULT_CONTEXT) return bytes32(0); - return outputId; - } - - /// @inheritdoc IOutbox - function executeTransaction( - bytes32[] calldata proof, - uint256 index, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) external { - bytes32 userTx = calculateItemHash( - l2Sender, - to, - l2Block, - l1Block, - l2Timestamp, - value, - data - ); - - recordOutputAsSpent(proof, index, userTx); - - executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); - } - - /// @inheritdoc IOutbox - function executeTransactionSimulation( - uint256 index, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) external { - if (msg.sender != address(0)) revert SimulationOnlyEntrypoint(); - executeTransactionImpl(index, l2Sender, to, l2Block, l1Block, l2Timestamp, value, data); - } - - function executeTransactionImpl( - uint256 outputId, - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) internal { - emit OutBoxTransactionExecuted(to, l2Sender, 0, outputId); - - // we temporarily store the previous values so the outbox can naturally - // unwind itself when there are nested calls to `executeTransaction` - L2ToL1Context memory prevContext = context; - - context = L2ToL1Context({ - sender: l2Sender, - l2Block: uint128(l2Block), - l1Block: uint128(l1Block), - timestamp: uint128(l2Timestamp), - outputId: bytes32(outputId) - }); - - // set and reset vars around execution so they remain valid during call - executeBridgeCall(to, value, data); - - context = prevContext; - } - - function _calcSpentIndexOffset(uint256 index) - internal - view - returns ( - uint256, - uint256, - bytes32 - ) - { - uint256 spentIndex = index / 255; // Note: Reserves the MSB. - uint256 bitOffset = index % 255; - bytes32 replay = spent[spentIndex]; - return (spentIndex, bitOffset, replay); - } - - function _isSpent(uint256 bitOffset, bytes32 replay) internal pure returns (bool) { - return ((replay >> bitOffset) & bytes32(uint256(1))) != bytes32(0); - } - - /// @inheritdoc IOutbox - function isSpent(uint256 index) external view returns (bool) { - (, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); - return _isSpent(bitOffset, replay); - } - - function recordOutputAsSpent( - bytes32[] memory proof, - uint256 index, - bytes32 item - ) internal { - if (proof.length >= 256) revert ProofTooLong(proof.length); - if (index >= 2**proof.length) revert PathNotMinimal(index, 2**proof.length); - - // Hash the leaf an extra time to prove it's a leaf - bytes32 calcRoot = calculateMerkleRoot(proof, index, item); - if (roots[calcRoot] == bytes32(0)) revert UnknownRoot(calcRoot); - - (uint256 spentIndex, uint256 bitOffset, bytes32 replay) = _calcSpentIndexOffset(index); - - if (_isSpent(bitOffset, replay)) revert AlreadySpent(index); - spent[spentIndex] = (replay | bytes32(1 << bitOffset)); - } - - function executeBridgeCall( - address to, - uint256 value, - bytes memory data - ) internal { - (bool success, bytes memory returndata) = bridge.executeCall(to, value, data); - if (!success) { - if (returndata.length > 0) { - // solhint-disable-next-line no-inline-assembly - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert BridgeCallFailed(); - } - } - } - - function calculateItemHash( - address l2Sender, - address to, - uint256 l2Block, - uint256 l1Block, - uint256 l2Timestamp, - uint256 value, - bytes calldata data - ) public pure returns (bytes32) { - return - keccak256(abi.encodePacked(l2Sender, to, l2Block, l1Block, l2Timestamp, value, data)); - } - - function calculateMerkleRoot( - bytes32[] memory proof, - uint256 path, - bytes32 item - ) public pure returns (bytes32) { - return MerkleLib.calculateRoot(proof, path, keccak256(abi.encodePacked(item))); + /// @inheritdoc AbsOutbox + function _amountToSetInContext(uint256) internal pure override returns (uint256) { + return 0; } -} +} \ No newline at end of file diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index 7aeef802..2d7294e7 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -61,6 +61,14 @@ error NotOutbox(address sender); /// @param outbox address of outbox being set error InvalidOutboxSet(address outbox); +/// @dev The provided token address isn't valid +/// @param token address of token being set +error InvalidTokenSet(address token); + +/// @dev Call to this specific address is not allowed +/// @param target address of the call receiver +error CallTargetNotAllowed(address target); + // Inbox Errors /// @dev The contract is paused, so cannot be paused @@ -160,4 +168,4 @@ error DataNotAuthenticated(); error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset -error NoSuchKeyset(bytes32); +error NoSuchKeyset(bytes32); \ No newline at end of file diff --git a/src/mocks/BridgeStub.sol b/src/mocks/BridgeStub.sol index 08dca5c4..39ed0900 100644 --- a/src/mocks/BridgeStub.sol +++ b/src/mocks/BridgeStub.sol @@ -8,8 +8,9 @@ import "./InboxStub.sol"; import {BadSequencerMessageNumber} from "../libraries/Error.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; -contract BridgeStub is IBridge { +contract BridgeStub is IBridge, IEthBridge { struct InOutInfo { uint256 index; bool allowed; @@ -179,4 +180,4 @@ contract BridgeStub is IBridge { function initialize(IOwnable) external pure { revert("NOT_IMPLEMENTED"); } -} +} \ No newline at end of file diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index 3b183883..51767d29 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -5,7 +5,9 @@ pragma solidity ^0.8.0; import "../bridge/IInbox.sol"; +import "../bridge/IEthInbox.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/Messages.sol"; import "./BridgeStub.sol"; @@ -17,7 +19,7 @@ import { L2MessageType_unsignedContractTx } from "../libraries/MessageTypes.sol"; -contract InboxStub is IInbox { +contract InboxStub is IInbox, IEthInbox { IBridge public override bridge; ISequencerInbox public override sequencerInbox; @@ -65,7 +67,12 @@ contract InboxStub is IInbox { address sender, bytes32 messageDataHash ) internal returns (uint256) { - return bridge.enqueueDelayedMessage{value: msg.value}(kind, sender, messageDataHash); + return + IEthBridge(address(bridge)).enqueueDelayedMessage{value: msg.value}( + kind, + sender, + messageDataHash + ); } function sendUnsignedTransaction( @@ -151,7 +158,7 @@ contract InboxStub is IInbox { address, uint256, bytes calldata - ) external pure returns (uint256) { + ) external returns (uint256) { revert("NOT_IMPLEMENTED"); } @@ -161,7 +168,7 @@ contract InboxStub is IInbox { uint256, uint256, address - ) external pure returns (uint256) { + ) external returns (uint256) { revert("NOT_IMPLEMENTED"); } @@ -179,4 +186,20 @@ contract InboxStub is IInbox { { revert("NOT_IMPLEMENTED"); } -} + + function setAllowList(address[] memory, bool[] memory) external pure { + revert("NOT_IMPLEMENTED"); + } + + function setAllowListEnabled(bool) external pure { + revert("NOT_IMPLEMENTED"); + } + + function isAllowed(address) external pure returns (bool) { + revert("NOT_IMPLEMENTED"); + } + + function allowListEnabled() external pure returns (bool) { + revert("NOT_IMPLEMENTED"); + } +} \ No newline at end of file diff --git a/src/mocks/SequencerInboxStub.sol b/src/mocks/SequencerInboxStub.sol index 20d5e9f0..85a2c2ab 100644 --- a/src/mocks/SequencerInboxStub.sol +++ b/src/mocks/SequencerInboxStub.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.0; import "../bridge/SequencerInbox.sol"; +import "../bridge/IEthBridge.sol"; import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; contract SequencerInboxStub is SequencerInbox { @@ -21,7 +22,7 @@ contract SequencerInboxStub is SequencerInbox { function addInitMessage(uint256 chainId) external { bytes memory initMsg = abi.encodePacked(chainId); - uint256 num = bridge.enqueueDelayedMessage( + uint256 num = IEthBridge(address(bridge)).enqueueDelayedMessage( INITIALIZATION_MSG_TYPE, address(0), keccak256(initMsg) @@ -51,4 +52,4 @@ contract SequencerInboxStub is SequencerInbox { this; // silence warning about function not being view return bounds; } -} +} \ No newline at end of file diff --git a/src/rollup/AbsBridgeCreator.sol b/src/rollup/AbsBridgeCreator.sol new file mode 100644 index 00000000..0eaf16d6 --- /dev/null +++ b/src/rollup/AbsBridgeCreator.sol @@ -0,0 +1,117 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "../bridge/IBridge.sol"; +import "../bridge/SequencerInbox.sol"; +import "../bridge/IInbox.sol"; +import "../bridge/Outbox.sol"; +import "../rollup/IBridgeCreator.sol"; +import "./IRollupEventInbox.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { + IBridge public bridgeTemplate; + SequencerInbox public sequencerInboxTemplate; + IInbox public inboxTemplate; + IRollupEventInbox public rollupEventInboxTemplate; + Outbox public outboxTemplate; + + event TemplatesUpdated(); + + constructor() Ownable() { + sequencerInboxTemplate = new SequencerInbox(); + outboxTemplate = new Outbox(); + } + + function updateTemplates( + address _bridgeTemplate, + address _sequencerInboxTemplate, + address _inboxTemplate, + address _rollupEventInboxTemplate, + address _outboxTemplate + ) external onlyOwner { + bridgeTemplate = IBridge(_bridgeTemplate); + sequencerInboxTemplate = SequencerInbox(_sequencerInboxTemplate); + inboxTemplate = IInbox(_inboxTemplate); + rollupEventInboxTemplate = IRollupEventInbox(_rollupEventInboxTemplate); + outboxTemplate = Outbox(_outboxTemplate); + + emit TemplatesUpdated(); + } + + struct CreateBridgeFrame { + ProxyAdmin admin; + IBridge bridge; + SequencerInbox sequencerInbox; + IInbox inbox; + IRollupEventInbox rollupEventInbox; + Outbox outbox; + } + + function _createBridge( + address adminProxy, + address rollup, + address nativeToken, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ) + internal + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ) + { + CreateBridgeFrame memory frame; + { + frame.bridge = IBridge( + address(new TransparentUpgradeableProxy(address(bridgeTemplate), adminProxy, "")) + ); + frame.sequencerInbox = SequencerInbox( + address( + new TransparentUpgradeableProxy(address(sequencerInboxTemplate), adminProxy, "") + ) + ); + frame.inbox = IInbox( + address(new TransparentUpgradeableProxy(address(inboxTemplate), adminProxy, "")) + ); + frame.rollupEventInbox = IRollupEventInbox( + address( + new TransparentUpgradeableProxy( + address(rollupEventInboxTemplate), + adminProxy, + "" + ) + ) + ); + frame.outbox = Outbox( + address(new TransparentUpgradeableProxy(address(outboxTemplate), adminProxy, "")) + ); + } + + _initializeBridge(frame.bridge, IOwnable(rollup), nativeToken); + frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); + frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); + frame.rollupEventInbox.initialize(IBridge(frame.bridge)); + frame.outbox.initialize(IBridge(frame.bridge)); + + return ( + frame.bridge, + frame.sequencerInbox, + frame.inbox, + frame.rollupEventInbox, + frame.outbox + ); + } + + function _initializeBridge( + IBridge bridge, + IOwnable rollup, + address + ) internal virtual; +} \ No newline at end of file diff --git a/src/rollup/AbsRollupCreator.sol b/src/rollup/AbsRollupCreator.sol new file mode 100644 index 00000000..5e7f191f --- /dev/null +++ b/src/rollup/AbsRollupCreator.sol @@ -0,0 +1,150 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./IBridgeCreator.sol"; +import "./IRollupCreator.sol"; +import "./RollupProxy.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +abstract contract AbsRollupCreator is Ownable, IRollupCreator { + event RollupCreated( + address indexed rollupAddress, + address inboxAddress, + address adminProxy, + address sequencerInbox, + address bridge + ); + event TemplatesUpdated(); + + IBridgeCreator public bridgeCreator; + IOneStepProofEntry public osp; + IChallengeManager public challengeManagerTemplate; + IRollupAdmin public rollupAdminLogic; + IRollupUser public rollupUserLogic; + + address public validatorUtils; + address public validatorWalletCreator; + + constructor() Ownable() {} + + function setTemplates( + IBridgeCreator _bridgeCreator, + IOneStepProofEntry _osp, + IChallengeManager _challengeManagerLogic, + IRollupAdmin _rollupAdminLogic, + IRollupUser _rollupUserLogic, + address _validatorUtils, + address _validatorWalletCreator + ) external onlyOwner { + bridgeCreator = _bridgeCreator; + osp = _osp; + challengeManagerTemplate = _challengeManagerLogic; + rollupAdminLogic = _rollupAdminLogic; + rollupUserLogic = _rollupUserLogic; + validatorUtils = _validatorUtils; + validatorWalletCreator = _validatorWalletCreator; + emit TemplatesUpdated(); + } + + struct CreateRollupFrame { + ProxyAdmin admin; + IBridge bridge; + ISequencerInbox sequencerInbox; + IInbox inbox; + IRollupEventInbox rollupEventInbox; + IOutbox outbox; + RollupProxy rollup; + } + + // After this setup: + // Rollup should be the owner of bridge + // RollupOwner should be the owner of Rollup's ProxyAdmin + // RollupOwner should be the owner of Rollup + // Bridge should have a single inbox and outbox + function _createRollup( + Config memory config, + address expectedRollupAddr, + address nativeToken + ) internal returns (address) { + CreateRollupFrame memory frame; + frame.admin = new ProxyAdmin(); + + ( + frame.bridge, + frame.sequencerInbox, + frame.inbox, + frame.rollupEventInbox, + frame.outbox + ) = _createBridge( + address(frame.admin), + expectedRollupAddr, + config.sequencerInboxMaxTimeVariation, + nativeToken + ); + + frame.admin.transferOwnership(config.owner); + + IChallengeManager challengeManager = IChallengeManager( + address( + new TransparentUpgradeableProxy( + address(challengeManagerTemplate), + address(frame.admin), + "" + ) + ) + ); + challengeManager.initialize( + IChallengeResultReceiver(expectedRollupAddr), + frame.sequencerInbox, + frame.bridge, + osp + ); + + frame.rollup = new RollupProxy( + config, + ContractDependencies({ + bridge: frame.bridge, + sequencerInbox: frame.sequencerInbox, + inbox: frame.inbox, + outbox: frame.outbox, + rollupEventInbox: frame.rollupEventInbox, + challengeManager: challengeManager, + rollupAdminLogic: rollupAdminLogic, + rollupUserLogic: rollupUserLogic, + validatorUtils: validatorUtils, + validatorWalletCreator: validatorWalletCreator + }) + ); + require(address(frame.rollup) == expectedRollupAddr, "WRONG_ROLLUP_ADDR"); + + emit RollupCreated( + address(frame.rollup), + address(frame.inbox), + address(frame.admin), + address(frame.sequencerInbox), + address(frame.bridge) + ); + return address(frame.rollup); + } + + function _createBridge( + address adminProxy, + address rollup, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation, + address nativeToken + ) + internal + virtual + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ); +} \ No newline at end of file diff --git a/src/rollup/AbsRollupEventInbox.sol b/src/rollup/AbsRollupEventInbox.sol new file mode 100644 index 00000000..b01eadce --- /dev/null +++ b/src/rollup/AbsRollupEventInbox.sol @@ -0,0 +1,45 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./IRollupEventInbox.sol"; +import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; +import "../bridge/IDelayedMessageProvider.sol"; +import "../libraries/DelegateCallAware.sol"; +import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; +import {AlreadyInit, HadZeroInit} from "../libraries/Error.sol"; + +/** + * @title The inbox for rollup protocol events + */ +abstract contract AbsRollupEventInbox is + IRollupEventInbox, + IDelayedMessageProvider, + DelegateCallAware +{ + IBridge public override bridge; + address public override rollup; + + modifier onlyRollup() { + require(msg.sender == rollup, "ONLY_ROLLUP"); + _; + } + + function initialize(IBridge _bridge) external override onlyDelegated { + if (address(bridge) != address(0)) revert AlreadyInit(); + if (address(_bridge) == address(0)) revert HadZeroInit(); + bridge = _bridge; + rollup = address(_bridge.rollup()); + } + + function rollupInitialized(uint256 chainId) external override onlyRollup { + bytes memory initMsg = abi.encodePacked(chainId); + uint256 num = _enqueueInitializationMsg(initMsg); + emit InboxMessageDelivered(num, initMsg); + } + + function _enqueueInitializationMsg(bytes memory initMsg) internal virtual returns (uint256); +} \ No newline at end of file diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index 4c2c7ba7..e773e43c 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -5,56 +5,16 @@ pragma solidity ^0.8.0; import "../bridge/Bridge.sol"; -import "../bridge/SequencerInbox.sol"; -import "../bridge/ISequencerInbox.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/Inbox.sol"; -import "../bridge/Outbox.sol"; -import "./RollupEventInbox.sol"; +import "../rollup/AbsBridgeCreator.sol"; +import "../rollup/RollupEventInbox.sol"; -import "../bridge/IBridge.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; - -contract BridgeCreator is Ownable { - Bridge public bridgeTemplate; - SequencerInbox public sequencerInboxTemplate; - Inbox public inboxTemplate; - RollupEventInbox public rollupEventInboxTemplate; - Outbox public outboxTemplate; - - event TemplatesUpdated(); - - constructor() Ownable() { +contract BridgeCreator is AbsBridgeCreator, IEthBridgeCreator { + constructor() AbsBridgeCreator() { bridgeTemplate = new Bridge(); - sequencerInboxTemplate = new SequencerInbox(); inboxTemplate = new Inbox(); rollupEventInboxTemplate = new RollupEventInbox(); - outboxTemplate = new Outbox(); - } - - function updateTemplates( - address _bridgeTemplate, - address _sequencerInboxTemplate, - address _inboxTemplate, - address _rollupEventInboxTemplate, - address _outboxTemplate - ) external onlyOwner { - bridgeTemplate = Bridge(_bridgeTemplate); - sequencerInboxTemplate = SequencerInbox(_sequencerInboxTemplate); - inboxTemplate = Inbox(_inboxTemplate); - rollupEventInboxTemplate = RollupEventInbox(_rollupEventInboxTemplate); - outboxTemplate = Outbox(_outboxTemplate); - - emit TemplatesUpdated(); - } - - struct CreateBridgeFrame { - ProxyAdmin admin; - Bridge bridge; - SequencerInbox sequencerInbox; - Inbox inbox; - RollupEventInbox rollupEventInbox; - Outbox outbox; } function createBridge( @@ -64,52 +24,21 @@ contract BridgeCreator is Ownable { ) external returns ( - Bridge, + IBridge, SequencerInbox, - Inbox, - RollupEventInbox, + IInbox, + IRollupEventInbox, Outbox ) { - CreateBridgeFrame memory frame; - { - frame.bridge = Bridge( - address(new TransparentUpgradeableProxy(address(bridgeTemplate), adminProxy, "")) - ); - frame.sequencerInbox = SequencerInbox( - address( - new TransparentUpgradeableProxy(address(sequencerInboxTemplate), adminProxy, "") - ) - ); - frame.inbox = Inbox( - address(new TransparentUpgradeableProxy(address(inboxTemplate), adminProxy, "")) - ); - frame.rollupEventInbox = RollupEventInbox( - address( - new TransparentUpgradeableProxy( - address(rollupEventInboxTemplate), - adminProxy, - "" - ) - ) - ); - frame.outbox = Outbox( - address(new TransparentUpgradeableProxy(address(outboxTemplate), adminProxy, "")) - ); - } - - frame.bridge.initialize(IOwnable(rollup)); - frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); - frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); - frame.rollupEventInbox.initialize(IBridge(frame.bridge)); - frame.outbox.initialize(IBridge(frame.bridge)); + return _createBridge(adminProxy, rollup, address(0), maxTimeVariation); + } - return ( - frame.bridge, - frame.sequencerInbox, - frame.inbox, - frame.rollupEventInbox, - frame.outbox - ); + function _initializeBridge( + IBridge bridge, + IOwnable rollup, + address + ) internal override { + IEthBridge(address(bridge)).initialize(IOwnable(rollup)); } -} +} \ No newline at end of file diff --git a/src/rollup/ERC20BridgeCreator.sol b/src/rollup/ERC20BridgeCreator.sol new file mode 100644 index 00000000..9f451ce4 --- /dev/null +++ b/src/rollup/ERC20BridgeCreator.sol @@ -0,0 +1,48 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "../rollup/AbsBridgeCreator.sol"; +import "../bridge/ERC20Bridge.sol"; +import "../bridge/IERC20Bridge.sol"; +import "../bridge/ERC20Inbox.sol"; +import "../rollup/IBridgeCreator.sol"; +import "../rollup/ERC20RollupEventInbox.sol"; + +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract ERC20BridgeCreator is AbsBridgeCreator, IERC20BridgeCreator { + constructor() AbsBridgeCreator() { + bridgeTemplate = new ERC20Bridge(); + inboxTemplate = new ERC20Inbox(); + rollupEventInboxTemplate = new ERC20RollupEventInbox(); + } + + function createBridge( + address adminProxy, + address rollup, + address nativeToken, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ) + external + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ) + { + return _createBridge(adminProxy, rollup, nativeToken, maxTimeVariation); + } + + function _initializeBridge( + IBridge bridge, + IOwnable rollup, + address nativeToken + ) internal override { + IERC20Bridge(address(bridge)).initialize(IOwnable(rollup), nativeToken); + } +} \ No newline at end of file diff --git a/src/rollup/ERC20RollupCreator.sol b/src/rollup/ERC20RollupCreator.sol new file mode 100644 index 00000000..75eda491 --- /dev/null +++ b/src/rollup/ERC20RollupCreator.sol @@ -0,0 +1,50 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./AbsRollupCreator.sol"; +import "./ERC20BridgeCreator.sol"; + +contract ERC20RollupCreator is AbsRollupCreator, IERC20RollupCreator { + constructor() AbsRollupCreator() {} + + // After this setup: + // Rollup should be the owner of bridge + // RollupOwner should be the owner of Rollup's ProxyAdmin + // RollupOwner should be the owner of Rollup + // Bridge should have a single inbox and outbox + function createRollup( + Config memory config, + address expectedRollupAddr, + address nativeToken + ) external override returns (address) { + return _createRollup(config, expectedRollupAddr, nativeToken); + } + + function _createBridge( + address adminProxy, + address rollup, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation, + address nativeToken + ) + internal + override + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ) + { + return + ERC20BridgeCreator(address(bridgeCreator)).createBridge( + adminProxy, + rollup, + nativeToken, + maxTimeVariation + ); + } +} \ No newline at end of file diff --git a/src/rollup/ERC20RollupEventInbox.sol b/src/rollup/ERC20RollupEventInbox.sol new file mode 100644 index 00000000..c9f4e28f --- /dev/null +++ b/src/rollup/ERC20RollupEventInbox.sol @@ -0,0 +1,26 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./AbsRollupEventInbox.sol"; +import "../bridge/IERC20Bridge.sol"; + +/** + * @title The inbox for rollup protocol events + */ +contract ERC20RollupEventInbox is AbsRollupEventInbox { + constructor() AbsRollupEventInbox() {} + + function _enqueueInitializationMsg(bytes memory initMsg) internal override returns (uint256) { + uint256 tokenAmount = 0; + return + IERC20Bridge(address(bridge)).enqueueDelayedMessage( + INITIALIZATION_MSG_TYPE, + address(0), + keccak256(initMsg), + tokenAmount + ); + } +} \ No newline at end of file diff --git a/src/rollup/IBridgeCreator.sol b/src/rollup/IBridgeCreator.sol new file mode 100644 index 00000000..e938f0e2 --- /dev/null +++ b/src/rollup/IBridgeCreator.sol @@ -0,0 +1,64 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "./RollupLib.sol"; +import "./IRollupCore.sol"; +import "../bridge/SequencerInbox.sol"; +import "../bridge/Outbox.sol"; +import "../rollup/RollupEventInbox.sol"; + +interface IBridgeCreator { + function updateTemplates( + address _bridgeTemplate, + address _sequencerInboxTemplate, + address _inboxTemplate, + address _rollupEventInboxTemplate, + address _outboxTemplate + ) external; + + function bridgeTemplate() external view returns (IBridge); + + function sequencerInboxTemplate() external view returns (SequencerInbox); + + function inboxTemplate() external view returns (IInbox); + + function rollupEventInboxTemplate() external view returns (IRollupEventInbox); + + function outboxTemplate() external view returns (Outbox); +} + +interface IEthBridgeCreator is IBridgeCreator { + function createBridge( + address adminProxy, + address rollup, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ) + external + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ); +} + +interface IERC20BridgeCreator is IBridgeCreator { + function createBridge( + address adminProxy, + address rollup, + address nativeToken, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ) + external + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ); +} \ No newline at end of file diff --git a/src/rollup/IRollupCreator.sol b/src/rollup/IRollupCreator.sol new file mode 100644 index 00000000..e9b1963b --- /dev/null +++ b/src/rollup/IRollupCreator.sol @@ -0,0 +1,37 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IBridgeCreator.sol"; +import "./RollupProxy.sol"; +import "../osp/IOneStepProofEntry.sol"; +import "../challenge/IChallengeManager.sol"; + +interface IRollupCreator { + function setTemplates( + IBridgeCreator _bridgeCreator, + IOneStepProofEntry _osp, + IChallengeManager _challengeManagerLogic, + IRollupAdmin _rollupAdminLogic, + IRollupUser _rollupUserLogic, + address _validatorUtils, + address _validatorWalletCreator + ) external; +} + +interface IEthRollupCreator is IRollupCreator { + function createRollup(Config memory config, address expectedRollupAddr) + external + returns (address); +} + +interface IERC20RollupCreator is IRollupCreator { + function createRollup( + Config memory config, + address expectedRollupAddr, + address nativeToken + ) external returns (address); +} \ No newline at end of file diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index ed086560..02f6f0c4 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -4,63 +4,11 @@ pragma solidity ^0.8.0; +import "./AbsRollupCreator.sol"; import "./BridgeCreator.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -import "./RollupProxy.sol"; - -contract RollupCreator is Ownable { - event RollupCreated( - address indexed rollupAddress, - address inboxAddress, - address adminProxy, - address sequencerInbox, - address bridge - ); - event TemplatesUpdated(); - - BridgeCreator public bridgeCreator; - IOneStepProofEntry public osp; - IChallengeManager public challengeManagerTemplate; - IRollupAdmin public rollupAdminLogic; - IRollupUser public rollupUserLogic; - - address public validatorUtils; - address public validatorWalletCreator; - - constructor() Ownable() {} - - function setTemplates( - BridgeCreator _bridgeCreator, - IOneStepProofEntry _osp, - IChallengeManager _challengeManagerLogic, - IRollupAdmin _rollupAdminLogic, - IRollupUser _rollupUserLogic, - address _validatorUtils, - address _validatorWalletCreator - ) external onlyOwner { - bridgeCreator = _bridgeCreator; - osp = _osp; - challengeManagerTemplate = _challengeManagerLogic; - rollupAdminLogic = _rollupAdminLogic; - rollupUserLogic = _rollupUserLogic; - validatorUtils = _validatorUtils; - validatorWalletCreator = _validatorWalletCreator; - emit TemplatesUpdated(); - } - - struct CreateRollupFrame { - ProxyAdmin admin; - IBridge bridge; - ISequencerInbox sequencerInbox; - IInbox inbox; - IRollupEventInbox rollupEventInbox; - IOutbox outbox; - RollupProxy rollup; - } +contract RollupCreator is AbsRollupCreator, IEthRollupCreator { + constructor() AbsRollupCreator() {} // After this setup: // Rollup should be the owner of bridge @@ -69,65 +17,33 @@ contract RollupCreator is Ownable { // Bridge should have a single inbox and outbox function createRollup(Config memory config, address expectedRollupAddr) external + override returns (address) { - CreateRollupFrame memory frame; - frame.admin = new ProxyAdmin(); - - ( - frame.bridge, - frame.sequencerInbox, - frame.inbox, - frame.rollupEventInbox, - frame.outbox - ) = bridgeCreator.createBridge( - address(frame.admin), - expectedRollupAddr, - config.sequencerInboxMaxTimeVariation - ); - - frame.admin.transferOwnership(config.owner); - - IChallengeManager challengeManager = IChallengeManager( - address( - new TransparentUpgradeableProxy( - address(challengeManagerTemplate), - address(frame.admin), - "" - ) - ) - ); - challengeManager.initialize( - IChallengeResultReceiver(expectedRollupAddr), - frame.sequencerInbox, - frame.bridge, - osp - ); - - frame.rollup = new RollupProxy( - config, - ContractDependencies({ - bridge: frame.bridge, - sequencerInbox: frame.sequencerInbox, - inbox: frame.inbox, - outbox: frame.outbox, - rollupEventInbox: frame.rollupEventInbox, - challengeManager: challengeManager, - rollupAdminLogic: rollupAdminLogic, - rollupUserLogic: rollupUserLogic, - validatorUtils: validatorUtils, - validatorWalletCreator: validatorWalletCreator - }) - ); - require(address(frame.rollup) == expectedRollupAddr, "WRONG_ROLLUP_ADDR"); + return _createRollup(config, expectedRollupAddr, address(0)); + } - emit RollupCreated( - address(frame.rollup), - address(frame.inbox), - address(frame.admin), - address(frame.sequencerInbox), - address(frame.bridge) - ); - return address(frame.rollup); + function _createBridge( + address adminProxy, + address rollup, + ISequencerInbox.MaxTimeVariation memory maxTimeVariation, + address + ) + internal + override + returns ( + IBridge, + SequencerInbox, + IInbox, + IRollupEventInbox, + Outbox + ) + { + return + BridgeCreator(address(bridgeCreator)).createBridge( + adminProxy, + rollup, + maxTimeVariation + ); } -} +} \ No newline at end of file diff --git a/src/rollup/RollupEventInbox.sol b/src/rollup/RollupEventInbox.sol index e20c6864..e59394df 100644 --- a/src/rollup/RollupEventInbox.sol +++ b/src/rollup/RollupEventInbox.sol @@ -4,39 +4,21 @@ pragma solidity ^0.8.0; -import "./IRollupEventInbox.sol"; -import "../bridge/IBridge.sol"; -import "../bridge/IDelayedMessageProvider.sol"; -import "../libraries/DelegateCallAware.sol"; -import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; -import {AlreadyInit, HadZeroInit} from "../libraries/Error.sol"; +import "./AbsRollupEventInbox.sol"; +import "../bridge/IEthBridge.sol"; /** * @title The inbox for rollup protocol events */ -contract RollupEventInbox is IRollupEventInbox, IDelayedMessageProvider, DelegateCallAware { - IBridge public override bridge; - address public override rollup; +contract RollupEventInbox is AbsRollupEventInbox { + constructor() AbsRollupEventInbox() {} - modifier onlyRollup() { - require(msg.sender == rollup, "ONLY_ROLLUP"); - _; + function _enqueueInitializationMsg(bytes memory initMsg) internal override returns (uint256) { + return + IEthBridge(address(bridge)).enqueueDelayedMessage( + INITIALIZATION_MSG_TYPE, + address(0), + keccak256(initMsg) + ); } - - function initialize(IBridge _bridge) external override onlyDelegated { - if (address(bridge) != address(0)) revert AlreadyInit(); - if (address(_bridge) == address(0)) revert HadZeroInit(); - bridge = _bridge; - rollup = address(_bridge.rollup()); - } - - function rollupInitialized(uint256 chainId) external override onlyRollup { - bytes memory initMsg = abi.encodePacked(chainId); - uint256 num = bridge.enqueueDelayedMessage( - INITIALIZATION_MSG_TYPE, - address(0), - keccak256(initMsg) - ); - emit InboxMessageDelivered(num, initMsg); - } -} +} \ No newline at end of file diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index 51454eb5..e0f742f6 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -16,6 +16,7 @@ import { InvalidOutboxSet } from "../libraries/Error.sol"; import "../bridge/IBridge.sol"; +import "../bridge/IEthBridge.sol"; import "../bridge/Messages.sol"; import "../libraries/DelegateCallAware.sol"; @@ -26,7 +27,7 @@ import "../libraries/DelegateCallAware.sol"; * Since the escrow is held here, this contract also contains a list of allowed * outboxes that can make calls from here and withdraw this escrow. */ -contract BridgeTester is Initializable, DelegateCallAware, IBridge { +contract BridgeTester is Initializable, DelegateCallAware, IBridge, IEthBridge { using AddressUpgradeable for address; struct InOutInfo { @@ -236,4 +237,4 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { receive() external payable {} function acceptFundsFromOldBridge() external payable {} -} +} \ No newline at end of file diff --git a/src/test-helpers/EthVault.sol b/src/test-helpers/EthVault.sol new file mode 100644 index 00000000..c620c891 --- /dev/null +++ b/src/test-helpers/EthVault.sol @@ -0,0 +1,20 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +/** + * Simple contract for testing bridge calls which include calldata + */ +contract EthVault { + uint256 public version = 0; + + function setVersion(uint256 _version) external payable { + version = _version; + } + + function justRevert() external payable { + revert("bye"); + } +} \ No newline at end of file From 350252ad7a3bbbf9a8718b997a727814f5419d0f Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 26 May 2023 18:36:51 -0700 Subject: [PATCH 002/176] deployment script added --- scripts/deployment.ts | 126 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 scripts/deployment.ts diff --git a/scripts/deployment.ts b/scripts/deployment.ts new file mode 100644 index 00000000..12d99604 --- /dev/null +++ b/scripts/deployment.ts @@ -0,0 +1,126 @@ +import { ethers } from "hardhat"; +import { ContractFactory, Contract, providers, Wallet } from "ethers"; +import "@nomiclabs/hardhat-ethers"; + + +async function deployContract(contractName: string, signer: any): Promise { + const factory: ContractFactory = await ethers.getContractFactory(contractName); + const connectedFactory: ContractFactory = factory.connect(signer); + const contract: Contract = await connectedFactory.deploy(); + await contract.deployTransaction.wait(); + console.log(`New ${contractName} created at address:`, contract.address); + return contract; +} + +async function deployAllContracts(signer: any): Promise> { + const bridgeCreator = await deployContract("BridgeCreator", signer); + const prover0 = await deployContract("OneStepProver0", signer); + const proverMem = await deployContract("OneStepProverMemory", signer); + const proverMath = await deployContract("OneStepProverMath", signer); + const proverHostIo = await deployContract("OneStepProverHostIo", signer); + const OneStepProofEntryFactory: ContractFactory = await ethers.getContractFactory("OneStepProofEntry"); + const OneStepProofEntryFactoryWithDeployer: ContractFactory = OneStepProofEntryFactory.connect(signer); + const osp: Contract = await OneStepProofEntryFactoryWithDeployer.deploy( + prover0.address, + proverMem.address, + proverMath.address, + proverHostIo.address + ); + await osp.deployTransaction.wait(); + console.log("New osp created at address:", osp.address); + const challengeManager = await deployContract("ChallengeManager", signer); + const rollupAdmin = await deployContract("RollupAdminLogic", signer); + const rollupUser = await deployContract("RollupUserLogic", signer); + const validatorUtils = await deployContract("ValidatorUtils", signer); + const validatorWalletCreator = await deployContract("ValidatorWalletCreator", signer); + const rollupCreator = await deployContract("RollupCreator", signer); + return { + bridgeCreator, + prover0, + proverMem, + proverMath, + proverHostIo, + osp, + challengeManager, + rollupAdmin, + rollupUser, + validatorUtils, + validatorWalletCreator, + rollupCreator, + }; +} + +async function main() { + // Get the signer (account) to deploy the contract + const privateKey = process.env.PRIVATE_KEY; + if (!privateKey) { + throw new Error("Private key is not defined"); + } + + const providerAPI = process.env.RPC_URL; + if (!providerAPI) { + throw new Error("RPC URL is not defined"); + } + + const provider = new providers.JsonRpcProvider(providerAPI) + const signer = new Wallet(privateKey, provider) + + try { + const contracts = await deployAllContracts(signer); + + // Call setTemplates with the deployed contract addresses + await contracts.rollupCreator.setTemplates( + contracts.bridgeCreator.address, + contracts.osp.address, + contracts.challengeManager.address, + contracts.rollupAdmin.address, + contracts.rollupUser.address, + contracts.validatorUtils.address, + contracts.validatorWalletCreator.address + ); + + // Define the configuration for the createRollup function + const rollupConfig = { + confirmPeriodBlocks: 10, + extraChallengeTimeBlocks: 10, + stakeToken: ethers.constants.AddressZero, + baseStake: ethers.utils.parseEther("1"), + wasmModuleRoot: ethers.constants.HashZero, + owner: signer.address, + loserStakeEscrow: ethers.constants.AddressZero, + chainId: 5, + chainConfig:ethers.constants.HashZero, + genesisBlockNum: 0, + sequencerInboxMaxTimeVariation: { + delayBlocks: 10, + futureBlocks: 10, + delaySeconds: 60, + futureSeconds: 60, + }, + }; + + // Call the createRollup function + const createRollupTx = await contracts.rollupCreator.createRollup(rollupConfig); + const createRollupReceipt = await createRollupTx.wait(); + const rollupCreatedEvent = createRollupReceipt.events?.find( + (event: { event: string }) => event.event === "RollupCreated" + ); + + if (rollupCreatedEvent) { + const rollupAddress = rollupCreatedEvent.args?.rollupAddress; + console.log("Congratulations! 🎉🎉🎉 New rollup created at address:", rollupAddress); + } else { + console.error("RollupCreated event not found"); + } + + } catch (error) { + console.error("Deployment failed:", error instanceof Error ? error.message : error); + } + } + + main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error); + process.exit(1); + }); From 03ee4f1d139115210aae35d2c1cbcd19d83d4374 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 26 May 2023 23:47:52 -0700 Subject: [PATCH 003/176] adding gas limit to txs --- scripts/deployment.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 12d99604..9f031d11 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -68,7 +68,8 @@ async function main() { try { const contracts = await deployAllContracts(signer); - // Call setTemplates with the deployed contract addresses + // Call setTemplates with the deployed contract addresses + console.log("Waiting for the Template to be set on the Rollup Creator") await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, contracts.osp.address, @@ -77,8 +78,9 @@ async function main() { contracts.rollupUser.address, contracts.validatorUtils.address, contracts.validatorWalletCreator.address + , {gasLimit: ethers.BigNumber.from("15000000")} ); - + console.log("Template is set on the Rollup Creator") // Define the configuration for the createRollup function const rollupConfig = { confirmPeriodBlocks: 10, @@ -98,9 +100,11 @@ async function main() { futureSeconds: 60, }, }; - + + // Call the createRollup function - const createRollupTx = await contracts.rollupCreator.createRollup(rollupConfig); + console.log("Calling createRollup to generate a new rollup ...") + const createRollupTx = await contracts.rollupCreator.createRollup(rollupConfig, {gasLimit: ethers.BigNumber.from("15000000")}); const createRollupReceipt = await createRollupTx.wait(); const rollupCreatedEvent = createRollupReceipt.events?.find( (event: { event: string }) => event.event === "RollupCreated" From 84e38e204235730d2a05a35ac9937495519eab68 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Sat, 27 May 2023 19:02:12 -0700 Subject: [PATCH 004/176] config, comments and some edits --- scripts/deployment.ts | 54 ++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 9f031d11..a63b2141 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -51,7 +51,8 @@ async function deployAllContracts(signer: any): Promise } async function main() { - // Get the signer (account) to deploy the contract + + // Get the private key and RPC to deploy the contract const privateKey = process.env.PRIVATE_KEY; if (!privateKey) { throw new Error("Private key is not defined"); @@ -66,9 +67,14 @@ async function main() { const signer = new Wallet(privateKey, provider) try { + + // Deploying all contracts const contracts = await deployAllContracts(signer); - // Call setTemplates with the deployed contract addresses + /* + * Call setTemplates with the deployed contract addresses + * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error + */ console.log("Waiting for the Template to be set on the Rollup Creator") await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, @@ -81,38 +87,58 @@ async function main() { , {gasLimit: ethers.BigNumber.from("15000000")} ); console.log("Template is set on the Rollup Creator") + // Define the configuration for the createRollup function const rollupConfig = { - confirmPeriodBlocks: 10, - extraChallengeTimeBlocks: 10, + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 0, stakeToken: ethers.constants.AddressZero, baseStake: ethers.utils.parseEther("1"), - wasmModuleRoot: ethers.constants.HashZero, + wasmModuleRoot: "0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21", owner: signer.address, loserStakeEscrow: ethers.constants.AddressZero, - chainId: 5, + chainId: 421613, chainConfig:ethers.constants.HashZero, genesisBlockNum: 0, sequencerInboxMaxTimeVariation: { - delayBlocks: 10, - futureBlocks: 10, - delaySeconds: 60, - futureSeconds: 60, + delayBlocks: 16, + futureBlocks: 192, + delaySeconds: 86400, + futureSeconds: 7200, }, }; - // Call the createRollup function - console.log("Calling createRollup to generate a new rollup ...") + /* + * Call the createRollup function + * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error + */ + console.log("Calling createRollup to generate a new rollup ...") const createRollupTx = await contracts.rollupCreator.createRollup(rollupConfig, {gasLimit: ethers.BigNumber.from("15000000")}); const createRollupReceipt = await createRollupTx.wait(); const rollupCreatedEvent = createRollupReceipt.events?.find( (event: { event: string }) => event.event === "RollupCreated" ); + //Checking for RollupCreated event for new rollup address if (rollupCreatedEvent) { const rollupAddress = rollupCreatedEvent.args?.rollupAddress; - console.log("Congratulations! 🎉🎉🎉 New rollup created at address:", rollupAddress); + const inboxAddress = rollupCreatedEvent.args?.inboxAddress; + const adminProxy = rollupCreatedEvent.args?.adminProxy; + const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox; + const bridge = rollupCreatedEvent.args?.bridge; + console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:"); + console.log("Rollup Contract created at address:", rollupAddress); + console.log("Inbox Contract created at address:", inboxAddress); + console.log("Admin Proxy Contract created at address:", adminProxy); + console.log("Sequencer Contract Inbox created at address:", sequencerInbox); + console.log("Bridge Contract created at address:", bridge); + console.log("Utils Contract created at address:",contracts.validatorUtils.address); + console.log("ValidatorWalletCreator Contract created at address:",contracts.validatorWalletCreator.address); + + // getting the block number + const blockNumber = createRollupReceipt.blockNumber; + console.log("All deployed at block number:", blockNumber); } else { console.error("RollupCreated event not found"); } @@ -127,4 +153,4 @@ async function main() { .catch((error: Error) => { console.error(error); process.exit(1); - }); + }); \ No newline at end of file From cd5066137970d1002bf6045952d15ad1a4d94d52 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 14:42:03 +0200 Subject: [PATCH 005/176] chore: forge init --- .gitignore | 3 +++ foundry.toml | 13 +++++++++++++ script/Counter.s.sol | 12 ++++++++++++ src/Counter.sol | 14 ++++++++++++++ test/Counter.t.sol | 24 ++++++++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 foundry.toml create mode 100644 script/Counter.s.sol create mode 100644 src/Counter.sol create mode 100644 test/Counter.t.sol diff --git a/.gitignore b/.gitignore index 1cd604bb..fcb4cac2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ deployments/ /test/prover/proofs/*.json /test/prover/spec-proofs/*.json /test/storage/*-old.dot +forge-cache/ +out/ +.env \ No newline at end of file diff --git a/foundry.toml b/foundry.toml new file mode 100644 index 00000000..895bbfc5 --- /dev/null +++ b/foundry.toml @@ -0,0 +1,13 @@ +[profile.default] +src = "src" +out = "out" +libs = ["node_modules"] +remappings = [ + "@ensdomains/=node_modules/@ensdomains/", + "@openzeppelin/=node_modules/@openzeppelin/", + "eth-gas-reporter/=node_modules/eth-gas-reporter/", + "hardhat-deploy/=node_modules/hardhat-deploy/", + "hardhat/=node_modules/hardhat/", +] + +# See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/script/Counter.s.sol b/script/Counter.s.sol new file mode 100644 index 00000000..0e546aba --- /dev/null +++ b/script/Counter.s.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; + +contract CounterScript is Script { + function setUp() public {} + + function run() public { + vm.broadcast(); + } +} diff --git a/src/Counter.sol b/src/Counter.sol new file mode 100644 index 00000000..aded7997 --- /dev/null +++ b/src/Counter.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +contract Counter { + uint256 public number; + + function setNumber(uint256 newNumber) public { + number = newNumber; + } + + function increment() public { + number++; + } +} diff --git a/test/Counter.t.sol b/test/Counter.t.sol new file mode 100644 index 00000000..30235e8a --- /dev/null +++ b/test/Counter.t.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import "../src/Counter.sol"; + +contract CounterTest is Test { + Counter public counter; + + function setUp() public { + counter = new Counter(); + counter.setNumber(0); + } + + function testIncrement() public { + counter.increment(); + assertEq(counter.number(), 1); + } + + function testSetNumber(uint256 x) public { + counter.setNumber(x); + assertEq(counter.number(), x); + } +} From e782d5b902a5b87881f27340039e54570888bace Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 14:42:03 +0200 Subject: [PATCH 006/176] forge install: forge-std v1.5.6 --- .gitmodules | 3 +++ lib/forge-std | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 lib/forge-std diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..888d42dc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry-rs/forge-std diff --git a/lib/forge-std b/lib/forge-std new file mode 160000 index 00000000..e8a047e3 --- /dev/null +++ b/lib/forge-std @@ -0,0 +1 @@ +Subproject commit e8a047e3f40f13fa37af6fe14e6e06283d9a060e From a5525e59bf15769aa0588b5be6f3dc9027f98bd0 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 14:46:39 +0200 Subject: [PATCH 007/176] Configure Foundry --- foundry.toml | 21 +++++++++++---------- remappings.txt | 4 ++++ script/Counter.s.sol | 12 ------------ src/Counter.sol | 14 -------------- test/Counter.t.sol | 24 ------------------------ 5 files changed, 15 insertions(+), 60 deletions(-) create mode 100644 remappings.txt delete mode 100644 script/Counter.s.sol delete mode 100644 src/Counter.sol delete mode 100644 test/Counter.t.sol diff --git a/foundry.toml b/foundry.toml index 895bbfc5..2512e19b 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,13 +1,14 @@ [profile.default] -src = "src" -out = "out" -libs = ["node_modules"] -remappings = [ - "@ensdomains/=node_modules/@ensdomains/", - "@openzeppelin/=node_modules/@openzeppelin/", - "eth-gas-reporter/=node_modules/eth-gas-reporter/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", -] +src = 'src' +out = 'out' +libs = ['node_modules', 'lib'] +test = 'test/foundry' +cache_path = 'forge-cache' +optimizer = true +optimizer_runs = 20000 +via_ir = false +[fmt] +number_underscore = 'thousands' +line_length = 100 # See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 00000000..dd3f1ab0 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,4 @@ +ds-test/=lib/forge-std/lib/ds-test/src/ +forge-std/=lib/forge-std/src/ + +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ \ No newline at end of file diff --git a/script/Counter.s.sol b/script/Counter.s.sol deleted file mode 100644 index 0e546aba..00000000 --- a/script/Counter.s.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import "forge-std/Script.sol"; - -contract CounterScript is Script { - function setUp() public {} - - function run() public { - vm.broadcast(); - } -} diff --git a/src/Counter.sol b/src/Counter.sol deleted file mode 100644 index aded7997..00000000 --- a/src/Counter.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Counter { - uint256 public number; - - function setNumber(uint256 newNumber) public { - number = newNumber; - } - - function increment() public { - number++; - } -} diff --git a/test/Counter.t.sol b/test/Counter.t.sol deleted file mode 100644 index 30235e8a..00000000 --- a/test/Counter.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import "forge-std/Test.sol"; -import "../src/Counter.sol"; - -contract CounterTest is Test { - Counter public counter; - - function setUp() public { - counter = new Counter(); - counter.setNumber(0); - } - - function testIncrement() public { - counter.increment(); - assertEq(counter.number(), 1); - } - - function testSetNumber(uint256 x) public { - counter.setNumber(x); - assertEq(counter.number(), x); - } -} From e573cffeedc651ec09a6abc9a8ec07a679ede277 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 14:52:06 +0200 Subject: [PATCH 008/176] Add Foundry unit test cases covering ERC20-rollup functionality --- test/foundry/AbsBridge.t.sol | 522 ++++++++++++++++++++ test/foundry/AbsInbox.t.sol | 403 ++++++++++++++++ test/foundry/AbsOutbox.t.sol | 28 ++ test/foundry/AbsRollupCreator.t.sol | 167 +++++++ test/foundry/Bridge.t.sol | 317 ++++++++++++ test/foundry/ERC20Bridge.t.sol | 353 ++++++++++++++ test/foundry/ERC20BridgeCreator.t.sol | 113 +++++ test/foundry/ERC20Inbox.t.sol | 661 ++++++++++++++++++++++++++ test/foundry/ERC20Outbox.t.sol | 179 +++++++ test/foundry/ERC20RollupCreator.t.sol | 88 ++++ test/foundry/Inbox.t.sol | 637 +++++++++++++++++++++++++ test/foundry/Outbox.t.sol | 116 +++++ test/foundry/RollupCreator.t.sol | 69 +++ test/foundry/util/TestUtil.sol | 12 + 14 files changed, 3665 insertions(+) create mode 100644 test/foundry/AbsBridge.t.sol create mode 100644 test/foundry/AbsInbox.t.sol create mode 100644 test/foundry/AbsOutbox.t.sol create mode 100644 test/foundry/AbsRollupCreator.t.sol create mode 100644 test/foundry/Bridge.t.sol create mode 100644 test/foundry/ERC20Bridge.t.sol create mode 100644 test/foundry/ERC20BridgeCreator.t.sol create mode 100644 test/foundry/ERC20Inbox.t.sol create mode 100644 test/foundry/ERC20Outbox.t.sol create mode 100644 test/foundry/ERC20RollupCreator.t.sol create mode 100644 test/foundry/Inbox.t.sol create mode 100644 test/foundry/Outbox.t.sol create mode 100644 test/foundry/RollupCreator.t.sol create mode 100644 test/foundry/util/TestUtil.sol diff --git a/test/foundry/AbsBridge.t.sol b/test/foundry/AbsBridge.t.sol new file mode 100644 index 00000000..f78b803c --- /dev/null +++ b/test/foundry/AbsBridge.t.sol @@ -0,0 +1,522 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/IBridge.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "../../src/test-helpers/EthVault.sol"; + +abstract contract AbsBridgeTest is Test { + IBridge public bridge; + + address public user = address(100); + address public userB = address(101); + + address public rollup = address(1000); + address public inbox; + address public outbox = address(1002); + address public seqInbox = address(1003); + + /* solhint-disable func-name-mixedcase */ + function test_enqueueSequencerMessage_NoDelayedMsgs() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // enqueue sequencer msg + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 0; + uint256 prevMessageCount = 0; + uint256 newMessageCount = 15; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid newMessageCount" + ); + bytes32 seqInboxEntry = keccak256(abi.encodePacked(bytes32(0), dataHash, bytes32(0))); + assertEq(bridge.sequencerInboxAccs(0), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 1, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 0, "Invalid seqMessageIndex"); + assertEq(beforeAcc, 0, "Invalid beforeAcc"); + assertEq(delayedAcc, 0, "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_IncludeDelayedMsgs() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + vm.stopPrank(); + + // enqueue sequencer msg with 2 delayed msgs + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 2; + uint256 prevMessageCount = 0; + uint256 newMessageCount = 15; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid sequencerReportedSubMessageCount" + ); + bytes32 seqInboxEntry = keccak256( + abi.encodePacked(bytes32(0), dataHash, bridge.delayedInboxAccs(1)) + ); + assertEq(bridge.sequencerInboxAccs(0), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 1, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 0, "Invalid seqMessageIndex"); + assertEq(beforeAcc, 0, "Invalid beforeAcc"); + assertEq(delayedAcc, bridge.delayedInboxAccs(1), "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_SecondEnqueuedMsg() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox and seq inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, 0, 10); + vm.stopPrank(); + + // enqueue 2nd sequencer msg with additional delayed msgs + vm.prank(seqInbox); + bytes32 dataHash = keccak256("blob"); + uint256 afterDelayedMessagesRead = 3; + uint256 prevMessageCount = 10; + uint256 newMessageCount = 20; + (uint256 seqMessageIndex, bytes32 beforeAcc, bytes32 delayedAcc, bytes32 acc) = bridge + .enqueueSequencerMessage( + dataHash, + afterDelayedMessagesRead, + prevMessageCount, + newMessageCount + ); + + // checks + assertEq( + bridge.sequencerReportedSubMessageCount(), + newMessageCount, + "Invalid sequencerReportedSubMessageCount" + ); + bytes32 seqInboxEntry = keccak256( + abi.encodePacked(bridge.sequencerInboxAccs(0), dataHash, bridge.delayedInboxAccs(2)) + ); + assertEq(bridge.sequencerInboxAccs(1), seqInboxEntry, "Invalid sequencerInboxAccs entry"); + assertEq(bridge.sequencerMessageCount(), 2, "Invalid sequencerMessageCount"); + assertEq(seqMessageIndex, 1, "Invalid seqMessageIndex"); + assertEq(beforeAcc, bridge.sequencerInboxAccs(0), "Invalid beforeAcc"); + assertEq(delayedAcc, bridge.delayedInboxAccs(2), "Invalid delayedAcc"); + assertEq(acc, seqInboxEntry, "Invalid acc"); + } + + function test_enqueueSequencerMessage_revert_BadSequencerMessageNumber() public { + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // put some msgs to delayed inbox and seq inbox + vm.startPrank(seqInbox); + bridge.submitBatchSpendingReport(address(1), keccak256("1")); + bridge.submitBatchSpendingReport(address(2), keccak256("2")); + bridge.submitBatchSpendingReport(address(3), keccak256("3")); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, 0, 10); + vm.stopPrank(); + + // setting wrong msg counter shall revert + vm.prank(seqInbox); + uint256 incorrectPrevMsgCount = 300; + vm.expectRevert( + abi.encodeWithSelector(BadSequencerMessageNumber.selector, 10, incorrectPrevMsgCount) + ); + bridge.enqueueSequencerMessage(keccak256("seq"), 2, incorrectPrevMsgCount, 10); + } + + function test_enqueueSequencerMessage_revert_NonSeqInboxCall() public { + // enqueueSequencerMessage shall revert + vm.expectRevert(abi.encodeWithSelector(NotSequencerInbox.selector, address(this))); + bridge.enqueueSequencerMessage(keccak256("msg"), 0, 0, 10); + } + + function test_submitBatchSpendingReport() public { + address sender = address(250); + bytes32 messageDataHash = keccak256(abi.encode("msg")); + + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 0, + 0, + seqInbox, + 13, + sender, + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // submit report + vm.prank(seqInbox); + uint256 count = bridge.submitBatchSpendingReport(sender, messageDataHash); + + // checks + assertEq(count, 0, "Invalid count"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid msg count"); + } + + function test_submitBatchSpendingReport_TwoInRow() public { + address sender = address(250); + bytes32 messageDataHash = keccak256(abi.encode("msg")); + + // submit 1st report + vm.prank(rollup); + bridge.setSequencerInbox(seqInbox); + vm.prank(seqInbox); + bridge.submitBatchSpendingReport(sender, messageDataHash); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 1, + bridge.delayedInboxAccs(0), + seqInbox, + 13, + sender, + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // submit 2nd report + vm.prank(seqInbox); + uint256 count = bridge.submitBatchSpendingReport(sender, messageDataHash); + + // checks + assertEq(count, 1, "Invalid count"); + assertEq(bridge.delayedMessageCount(), 2, "Invalid msg count"); + } + + function test_submitBatchSpendingReport_revert_NonSeqInboxCall() public { + // submitBatchSpendingReport shall revert + vm.expectRevert(abi.encodeWithSelector(NotSequencerInbox.selector, address(this))); + bridge.submitBatchSpendingReport(address(2), keccak256("msg")); + } + + function test_setSequencerInbox() public { + // expect event + vm.expectEmit(true, true, true, true); + emit SequencerInboxUpdated(seqInbox); + + // set seqInbox + vm.prank(address(bridge.rollup())); + bridge.setSequencerInbox(seqInbox); + + // checks + assertEq(bridge.sequencerInbox(), seqInbox, "Invalid seqInbox"); + } + + function test_setSequencerInbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setSequencerInbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setSequencerInbox(seqInbox); + } + + function test_setDelayedInbox_enableInbox() public { + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, true); + + // enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + assertEq(inbox, bridge.allowedDelayedInboxList(0), "Invalid allowedDelayedInboxList"); + } + + function test_setDelayedInbox_disableInbox() public { + // initially enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, false); + + // disable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, false); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + vm.expectRevert(); + bridge.allowedDelayedInboxList(0); + } + + function test_setDelayedInbox_ReEnableInbox() public { + // initially enable inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, true); + + // enable again inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), true, "Invalid allowedDelayedInboxes"); + assertEq(inbox, bridge.allowedDelayedInboxList(0), "Invalid allowedDelayedInboxList"); + } + + function test_setDelayedInbox_ReDisableInbox() public { + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxToggle(inbox, false); + + // disable again inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, false); + + // checks + assertEq(bridge.allowedDelayedInboxes(inbox), false, "Invalid allowedDelayedInboxes"); + vm.expectRevert(); + bridge.allowedDelayedInboxList(0); + } + + function test_setDelayedInbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setDelayedInbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setDelayedInbox(inbox, true); + } + + function test_setOutbox_EnableOutbox() public { + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, true); + + // enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // checks + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + assertEq(outbox, bridge.allowedOutboxList(0), "Invalid allowedOutboxList"); + } + + function test_setOutbox_DisableOutbox() public { + // initially enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, false); + + // disable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, false); + + // checks + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + vm.expectRevert(); + bridge.allowedOutboxList(0); + } + + function test_setOutbox_ReEnableOutbox() public { + // initially enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, true); + + // enable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // checks + assertEq(bridge.allowedOutboxes(outbox), true, "Invalid allowedOutboxes"); + assertEq(outbox, bridge.allowedOutboxList(0), "Invalid allowedOutboxList"); + } + + function test_setOutbox_ReDisableOutbox() public { + // expect event + vm.expectEmit(true, true, true, true); + emit OutboxToggle(outbox, false); + + // disable outbox + vm.prank(rollup); + bridge.setOutbox(outbox, false); + + // checks + assertEq(bridge.allowedOutboxes(outbox), false, "Invalid allowedOutboxes"); + vm.expectRevert(); + bridge.allowedOutboxList(0); + } + + function test_setOutbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setOutbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + bridge.setOutbox(outbox, true); + } + + function test_setOutbox_revert_InvalidOutboxSet() public { + address invalidOutbox = address(type(uint160).max); + + // setOutbox shall revert + vm.expectRevert(abi.encodeWithSelector(InvalidOutboxSet.selector, invalidOutbox)); + vm.prank(rollup); + bridge.setOutbox(invalidOutbox, true); + } + + function test_setSequencerReportedSubMessageCount() public { + uint256 newCount = 1234; + + vm.prank(rollup); + AbsBridge(address(bridge)).setSequencerReportedSubMessageCount(newCount); + + assertEq( + bridge.sequencerReportedSubMessageCount(), + newCount, + "Invalid sequencerReportedSubMessageCount" + ); + } + + function test_setSequencerReportedSubMessageCount_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setOutbox shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + AbsBridge(address(bridge)).setSequencerReportedSubMessageCount(123); + } + + /**** + **** Event declarations + ***/ + + event SequencerInboxUpdated(address newSequencerInbox); + event InboxToggle(address indexed inbox, bool enabled); + event OutboxToggle(address indexed outbox, bool enabled); + event MessageDelivered( + uint256 indexed messageIndex, + bytes32 indexed beforeInboxAcc, + address inbox, + uint8 kind, + address sender, + bytes32 messageDataHash, + uint256 baseFeeL1, + uint64 timestamp + ); + event BridgeCallTriggered( + address indexed outbox, + address indexed to, + uint256 value, + bytes data + ); +} \ No newline at end of file diff --git a/test/foundry/AbsInbox.t.sol b/test/foundry/AbsInbox.t.sol new file mode 100644 index 00000000..0dd8aa47 --- /dev/null +++ b/test/foundry/AbsInbox.t.sol @@ -0,0 +1,403 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; +import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; + +abstract contract AbsInboxTest is Test { + IInbox public inbox; + IBridge public bridge; + + address public user = address(100); + address public rollup = address(1000); + address public seqInbox = address(1001); + + /* solhint-disable func-name-mixedcase */ + function test_setAllowList() public { + address[] memory users = new address[](2); + users[0] = address(300); + users[1] = address(301); + + bool[] memory allowed = new bool[](2); + allowed[0] = true; + allowed[0] = false; + + vm.expectEmit(true, true, true, true); + emit AllowListAddressSet(users[0], allowed[0]); + emit AllowListAddressSet(users[1], allowed[1]); + + vm.prank(rollup); + inbox.setAllowList(users, allowed); + + assertEq(inbox.isAllowed(users[0]), allowed[0], "Invalid isAllowed user[0]"); + assertEq(inbox.isAllowed(users[1]), allowed[1], "Invalid isAllowed user[1]"); + } + + function test_setAllowList_revert_InvalidLength() public { + address[] memory users = new address[](1); + users[0] = address(300); + + bool[] memory allowed = new bool[](2); + allowed[0] = true; + allowed[0] = false; + + vm.expectRevert("INVALID_INPUT"); + vm.prank(rollup); + inbox.setAllowList(users, allowed); + } + + function test_setOutbox_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setAllowList shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + + address[] memory users = new address[](2); + users[0] = address(300); + bool[] memory allowed = new bool[](2); + allowed[0] = true; + inbox.setAllowList(users, allowed); + } + + function test_setAllowListEnabled_EnableAllowList() public { + assertEq(inbox.allowListEnabled(), false, "Invalid initial value for allowList"); + + vm.expectEmit(true, true, true, true); + emit AllowListEnabledUpdated(true); + + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + assertEq(inbox.allowListEnabled(), true, "Invalid allowList"); + } + + function test_setAllowListEnabled_DisableAllowList() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + assertEq(inbox.allowListEnabled(), true, "Invalid initial value for allowList"); + + vm.expectEmit(true, true, true, true); + emit AllowListEnabledUpdated(false); + + vm.prank(rollup); + inbox.setAllowListEnabled(false); + + assertEq(inbox.allowListEnabled(), false, "Invalid allowList"); + } + + function test_setAllowListEnabled_revert_AlreadyEnabled() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + assertEq(inbox.allowListEnabled(), true, "Invalid initial value for allowList"); + + vm.expectRevert("ALREADY_SET"); + vm.prank(rollup); + inbox.setAllowListEnabled(true); + } + + function test_setAllowListEnabled_revert_AlreadyDisabled() public { + vm.prank(rollup); + vm.expectRevert("ALREADY_SET"); + inbox.setAllowListEnabled(false); + } + + function test_setAllowListEnabled_revert_NonOwnerCall() public { + // mock the owner() call on rollup + address mockRollupOwner = address(10000); + vm.mockCall( + rollup, + abi.encodeWithSelector(IOwnable.owner.selector), + abi.encode(mockRollupOwner) + ); + + // setAllowListEnabled shall revert + vm.expectRevert( + abi.encodeWithSelector( + NotRollupOrOwner.selector, + address(this), + rollup, + mockRollupOwner + ) + ); + + inbox.setAllowListEnabled(true); + } + + function test_pause() public { + assertEq( + (PausableUpgradeable(address(inbox))).paused(), + false, + "Invalid initial paused state" + ); + + vm.prank(rollup); + inbox.pause(); + + assertEq((PausableUpgradeable(address(inbox))).paused(), true, "Invalid paused state"); + } + + function test_unpause() public { + vm.prank(rollup); + inbox.pause(); + assertEq( + (PausableUpgradeable(address(inbox))).paused(), + true, + "Invalid initial paused state" + ); + vm.prank(rollup); + inbox.unpause(); + + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + } + + function test_initialize_revert_NonDelegated() public { + ERC20Inbox inb = new ERC20Inbox(); + vm.expectRevert("Function must be called through delegatecall"); + inb.initialize(bridge, ISequencerInbox(seqInbox)); + } + + function test_sendL2MessageFromOrigin() public { + // L2 msg params + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDeliveredFromOrigin(0); + + // send L2 msg -> tx.origin == msg.sender + vm.prank(user, user); + uint256 msgNum = inbox.sendL2MessageFromOrigin(data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendL2MessageFromOrigin_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_L1Forked() public { + vm.chainId(10); + vm.expectRevert(abi.encodeWithSelector(L1Forked.selector)); + vm.prank(user, user); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2MessageFromOrigin_revert_NotOrigin() public { + vm.expectRevert(abi.encodeWithSelector(NotOrigin.selector)); + inbox.sendL2MessageFromOrigin(abi.encodePacked("some msg")); + } + + function test_sendL2Message() public { + // L2 msg params + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, data); + + // send L2 msg -> tx.origin == msg.sender + vm.prank(user, user); + uint256 msgNum = inbox.sendL2Message(data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendL2Message_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendL2Message_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendL2Message_revert_L1Forked() public { + vm.chainId(10); + vm.expectRevert(abi.encodeWithSelector(L1Forked.selector)); + vm.prank(user, user); + inbox.sendL2Message(abi.encodePacked("some msg")); + } + + function test_sendUnsignedTransaction() public { + // L2 msg params + uint256 maxFeePerGas = 0; + uint256 gasLimit = 10; + uint256 nonce = 3; + uint256 value = 300; + bytes memory data = abi.encodePacked("test data"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + L2MessageType_unsignedEOATx, + gasLimit, + maxFeePerGas, + nonce, + uint256(uint160(user)), + value, + data + ) + ); + + // send TX + vm.prank(user, user); + uint256 msgNum = inbox.sendUnsignedTransaction( + gasLimit, + maxFeePerGas, + nonce, + user, + value, + data + ); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendUnsignedTransaction_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + vm.prank(user); + inbox.sendUnsignedTransaction(10, 10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendUnsignedTransaction_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendUnsignedTransaction(10, 10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendUnsignedTransaction_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.expectRevert(GasLimitTooLarge.selector); + vm.prank(user, user); + inbox.sendUnsignedTransaction(tooBigGasLimit, 10, 10, user, 10, abi.encodePacked("data")); + } + + function test_sendContractTransaction() public { + // L2 msg params + uint256 maxFeePerGas = 0; + uint256 gasLimit = 10; + uint256 value = 300; + bytes memory data = abi.encodePacked("test data"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + L2MessageType_unsignedContractTx, + gasLimit, + maxFeePerGas, + uint256(uint160(user)), + value, + data + ) + ); + + // send TX + vm.prank(user); + uint256 msgNum = inbox.sendContractTransaction(gasLimit, maxFeePerGas, user, value, data); + + //// checks + assertEq(msgNum, 0, "Invalid msgNum"); + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_sendContractTransaction_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + inbox.sendContractTransaction(10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendContractTransaction_revert_NotAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + vm.prank(user, user); + inbox.sendContractTransaction(10, 10, user, 10, abi.encodePacked("test data")); + } + + function test_sendContractTransaction_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.expectRevert(GasLimitTooLarge.selector); + vm.prank(user); + inbox.sendContractTransaction(tooBigGasLimit, 10, user, 10, abi.encodePacked("data")); + } + + /**** + **** Event declarations + ***/ + + event AllowListAddressSet(address indexed user, bool val); + event AllowListEnabledUpdated(bool isEnabled); + event InboxMessageDelivered(uint256 indexed messageNum, bytes data); + event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum); +} + +contract Sender {} \ No newline at end of file diff --git a/test/foundry/AbsOutbox.t.sol b/test/foundry/AbsOutbox.t.sol new file mode 100644 index 00000000..52811032 --- /dev/null +++ b/test/foundry/AbsOutbox.t.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/IOutbox.sol"; +import "../../src/bridge/IBridge.sol"; + +abstract contract AbsOutboxTest is Test { + IOutbox public outbox; + IBridge public bridge; + + address public user = address(100); + address public rollup = address(1000); + address public seqInbox = address(1001); + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + + assertEq(outbox.l2ToL1Sender(), address(0), "Invalid l2ToL1Sender"); + assertEq(outbox.l2ToL1Block(), 0, "Invalid l2ToL1Block"); + assertEq(outbox.l2ToL1EthBlock(), 0, "Invalid l2ToL1EthBlock"); + assertEq(outbox.l2ToL1Timestamp(), 0, "Invalid l2ToL1Timestamp"); + assertEq(outbox.l2ToL1OutputId(), bytes32(0), "Invalid l2ToL1OutputId"); + } +} \ No newline at end of file diff --git a/test/foundry/AbsRollupCreator.t.sol b/test/foundry/AbsRollupCreator.t.sol new file mode 100644 index 00000000..b3cb2941 --- /dev/null +++ b/test/foundry/AbsRollupCreator.t.sol @@ -0,0 +1,167 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/rollup/IRollupCreator.sol"; +import "../../src/rollup/RollupAdminLogic.sol"; +import "../../src/rollup/RollupUserLogic.sol"; +import "../../src/rollup/ValidatorUtils.sol"; +import "../../src/rollup/ValidatorWalletCreator.sol"; +import "../../src/challenge/ChallengeManager.sol"; +import "../../src/osp/OneStepProver0.sol"; +import "../../src/osp/OneStepProverMemory.sol"; +import "../../src/osp/OneStepProverMath.sol"; +import "../../src/osp/OneStepProverHostIo.sol"; +import "../../src/osp/OneStepProofEntry.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +abstract contract AbsRollupCreatorTest is Test { + address public rollupOwner = address(4400); + address public deployer = address(4300); + + function _prepareRollupDeployment(address rollupCreator) + internal + returns ( + IOneStepProofEntry ospEntry, + IChallengeManager challengeManager, + IRollupAdmin rollupAdminLogic, + IRollupUser rollupUserLogic, + ISequencerInbox.MaxTimeVariation memory timeVars, + address expectedRollupAddr + ) + { + //// deploy challenge stuff + ospEntry = new OneStepProofEntry( + new OneStepProver0(), + new OneStepProverMemory(), + new OneStepProverMath(), + new OneStepProverHostIo() + ); + challengeManager = new ChallengeManager(); + + //// deploy rollup logic + rollupAdminLogic = IRollupAdmin(new RollupAdminLogic()); + rollupUserLogic = IRollupUser(new RollupUserLogic()); + + timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); + + //// calculate expected address for rollup + expectedRollupAddr = _calculateExpectedAddr(rollupCreator, vm.getNonce(rollupCreator) + 2); + + return ( + ospEntry, + challengeManager, + rollupAdminLogic, + rollupUserLogic, + timeVars, + expectedRollupAddr + ); + } + + function _calculateExpectedAddr(address rollupCreator, uint256 nonce) + internal + pure + returns (address) + { + bytes1 nonceBytes1 = bytes1(uint8(nonce)); + address expectedRollupAddr = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xd6), + bytes1(0x94), + address(rollupCreator), + nonceBytes1 + ) + ) + ) + ) + ); + + return expectedRollupAddr; + } + + function _checkRollupIsSetUp( + IRollupCreator rollupCreator, + address rollupAddress, + IRollupAdmin rollupAdmin, + IRollupUser rollupUser + ) internal { + /// rollup creator + assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); + + /// rollup proxy + assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); + assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); + assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); + assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); + + /// rollup check + RollupCore rollup = RollupCore(rollupAddress); + assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); + assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); + assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); + assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); + assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); + assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); + } + + function _expectEvents( + IRollupCreator rollupCreator, + IBridgeCreator bridgeCreator, + address expectedRollupAddr, + bytes32 wasmModuleRoot, + uint256 chainId + ) internal { + vm.expectEmit(true, true, true, true); + uint256 bridgeCreatorNonce = vm.getNonce(address(bridgeCreator)); + emit RollupCreated( + expectedRollupAddr, + _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce + 2), + _calculateExpectedAddr(address(rollupCreator), vm.getNonce(address(rollupCreator))), + _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce + 1), + _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce) + ); + + emit RollupInitialized(wasmModuleRoot, chainId); + } + + function _getProxyAdmin(address proxy) internal view returns (address) { + bytes32 adminSlot = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1); + return address(uint160(uint256(vm.load(proxy, adminSlot)))); + } + + function _getPrimary(address proxy) internal view returns (address) { + bytes32 primarySlot = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); + return address(uint160(uint256(vm.load(proxy, primarySlot)))); + } + + function _getSecondary(address proxy) internal view returns (address) { + bytes32 secondarySlot = bytes32( + uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 + ); + return address(uint160(uint256(vm.load(proxy, secondarySlot)))); + } + + /**** + **** Event declarations + ***/ + + event RollupCreated( + address indexed rollupAddress, + address inboxAddress, + address adminProxy, + address sequencerInbox, + address bridge + ); + + event RollupInitialized(bytes32 machineHash, uint256 chainId); +} \ No newline at end of file diff --git a/test/foundry/Bridge.t.sol b/test/foundry/Bridge.t.sol new file mode 100644 index 00000000..bea1c9c9 --- /dev/null +++ b/test/foundry/Bridge.t.sol @@ -0,0 +1,317 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "./AbsBridge.t.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; + +contract BridgeTest is AbsBridgeTest { + IEthBridge public ethBridge; + + // msg details + uint8 public kind = 7; + bytes32 public messageDataHash = keccak256(abi.encodePacked("some msg")); + uint256 public ethAmount = 2 ether; + + function setUp() public { + inbox = address(1001); + + // deploy eth and bridge + bridge = Bridge(TestUtil.deployProxy(address(new Bridge()))); + ethBridge = IEthBridge(address(bridge)); + + // init bridge + ethBridge.initialize(IOwnable(rollup)); + + // fund user account + vm.deal(user, 10 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + ethBridge.initialize(IOwnable(rollup)); + } + + function test_initialize_revert_NonDelegated() public { + IEthBridge noTokenBridge = new Bridge(); + vm.expectRevert("Function must be called through delegatecall"); + noTokenBridge.initialize(IOwnable(rollup)); + } + + function test_enqueueDelayedMessage() public { + // inbox will move ETH to bridge + vm.deal(inbox, ethAmount); + uint256 inboxEthBalanceBefore = address(inbox).balance; + uint256 bridgeEthBalanceBefore = address(bridge).balance; + + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // expect event + vm.expectEmit(true, true, true, true); + vm.fee(70); + uint256 baseFeeToReport = block.basefee; + emit MessageDelivered( + 0, + 0, + inbox, + kind, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + baseFeeToReport, + uint64(block.timestamp) + ); + + // enqueue msg inbox->bridge + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: ethAmount}(kind, userAliased, messageDataHash); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethAmount, + "Invalid bridge eth balance" + ); + + uint256 inboxEthBalanceAfter = address(inbox).balance; + assertEq(inboxEthBalanceBefore - inboxEthBalanceAfter, ethAmount, "Invalid inbox balance"); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_TwoInRow() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + vm.deal(inbox, ethAmount); + uint256 inboxEthBalanceBefore = address(inbox).balance; + uint256 bridgeEthBalanceBefore = address(bridge).balance; + + // 1st enqueue msg + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: 1 ether}(2, address(400), messageDataHash); + + // expect event + vm.expectEmit(true, true, true, true); + emit MessageDelivered( + 1, + bridge.delayedInboxAccs(0), + inbox, + 8, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + block.basefee, + uint64(block.timestamp) + ); + + // enqueue msg inbox->bridge + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + ethBridge.enqueueDelayedMessage{value: 1 ether}(8, userAliased, messageDataHash); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethAmount, + "Invalid bridge eth balance" + ); + + uint256 inboxEthBalanceAfter = address(inbox).balance; + assertEq(inboxEthBalanceBefore - inboxEthBalanceAfter, ethAmount, "Invalid inbox balance"); + + assertEq(bridge.delayedMessageCount(), 2, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_revert_UseTokenForFees() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // enqueue msg + hoax(inbox); + vm.expectRevert(); + IERC20Bridge(address(bridge)).enqueueDelayedMessage(kind, user, messageDataHash, 1000); + } + + function test_enqueueDelayedMessage_revert_NotDelayedInbox() public { + hoax(inbox); + vm.expectRevert(abi.encodeWithSelector(NotDelayedInbox.selector, inbox)); + ethBridge.enqueueDelayedMessage{value: ethAmount}(kind, user, messageDataHash); + } + + function test_executeCall_EmptyCalldata() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + uint256 withdrawalAmount = 3 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, user, withdrawalAmount, ""); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({to: user, value: withdrawalAmount, data: ""}); + + //// checks + assertTrue(success, "Execute call failed"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore - bridgeEthBalanceAfter, + withdrawalAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceAfter - userEthBalanceBefore, + withdrawalAmount, + "Invalid user eth balance" + ); + } + + function test_executeCall_WithCalldata() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 vaultEthBalanceBefore = address(vault).balance; + + // call params + uint256 newVaultVersion = 7; + uint256 withdrawalAmount = 3 ether; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertTrue(success, "Execute call failed"); + assertEq(vault.version(), newVaultVersion, "Invalid newVaultVersion"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore - bridgeEthBalanceAfter, + withdrawalAmount, + "Invalid bridge eth balance" + ); + + uint256 vaultEthBalanceAfter = address(vault).balance; + assertEq( + vaultEthBalanceAfter - vaultEthBalanceBefore, + withdrawalAmount, + "Invalid vault eth balance" + ); + } + + function test_executeCall_UnsuccessfulCall() public { + // fund bridge with some eth + vm.deal(address(bridge), 10 ether); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 vaultEthBalanceBefore = address(vault).balance; + + // call params + uint256 withdrawalAmount = 3 ether; + bytes memory revertingData = abi.encodeWithSelector(EthVault.justRevert.selector); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, revertingData); + + //// execute call - do call which reverts + vm.prank(outbox); + (bool success, bytes memory returnData) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: revertingData + }); + + //// checks + assertEq(success, false, "Execute shall be unsuccessful"); + assertEq(vault.version(), 0, "Invalid vaultVersion"); + + // get revert reason + assembly { + returnData := add(returnData, 0x04) + } + string memory revertReason = abi.decode(returnData, (string)); + assertEq(revertReason, "bye", "Invalid revert reason"); + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceBefore, + bridgeEthBalanceAfter, + "Invalid bridge eth balance after unsuccessful call" + ); + + uint256 vaultEthBalanceAfter = address(vault).balance; + assertEq( + vaultEthBalanceAfter, + vaultEthBalanceBefore, + "Invalid vault eth balance after unsuccessful call" + ); + } + + function test_executeCall_revert_NotOutbox() public { + vm.expectRevert(abi.encodeWithSelector(NotOutbox.selector, address(this))); + bridge.executeCall({to: user, value: 0.1 ether, data: ""}); + } + + function test_executeCall_revert_NotContract() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(234); + vm.expectRevert(abi.encodeWithSelector(NotContract.selector, address(to))); + vm.prank(outbox); + bridge.executeCall({to: to, value: 0.1 ether, data: "some data"}); + } +} \ No newline at end of file diff --git a/test/foundry/ERC20Bridge.t.sol b/test/foundry/ERC20Bridge.t.sol new file mode 100644 index 00000000..d37fcd8a --- /dev/null +++ b/test/foundry/ERC20Bridge.t.sol @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "./AbsBridge.t.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/IEthBridge.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol"; + +import "forge-std/console.sol"; + +contract ERC20BridgeTest is AbsBridgeTest { + IERC20Bridge public erc20Bridge; + IERC20 public nativeToken; + + // msg details + uint8 public kind = 7; + bytes32 public messageDataHash = keccak256(abi.encodePacked("some msg")); + uint256 public tokenFeeAmount = 30; + + function setUp() public { + // deploy token and bridge + nativeToken = new ERC20PresetMinterPauser("Appchain Token", "App"); + bridge = ERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + erc20Bridge = IERC20Bridge(address(bridge)); + + // init bridge + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + + // deploy inbox + inbox = address(TestUtil.deployProxy(address(new ERC20Inbox()))); + IERC20Inbox(address(inbox)).initialize(bridge, ISequencerInbox(seqInbox)); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq( + address(erc20Bridge.nativeToken()), + address(nativeToken), + "Invalid nativeToken ref" + ); + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + } + + function test_initialize_revert_ZeroAddressToken() public { + IERC20Bridge noTokenBridge = ERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + vm.expectRevert(abi.encodeWithSelector(InvalidTokenSet.selector, address(0))); + noTokenBridge.initialize(IOwnable(rollup), address(0)); + } + + function test_initialize_revert_ReInit() public { + vm.expectRevert("Initializable: contract is already initialized"); + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + } + + function test_initialize_revert_NonDelegated() public { + IERC20Bridge noTokenBridge = new ERC20Bridge(); + vm.expectRevert("Function must be called through delegatecall"); + noTokenBridge.initialize(IOwnable(rollup), address(nativeToken)); + } + + function test_enqueueDelayedMessage() public { + // add fee tokens to inbox + ERC20PresetMinterPauser(address(nativeToken)).mint(inbox, tokenFeeAmount); + + // snapshot + uint256 userNativeTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 inboxNativeTokenBalanceBefore = nativeToken.balanceOf(address(inbox)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // approve bridge to escrow tokens + vm.prank(user); + nativeToken.approve(address(bridge), tokenFeeAmount); + + // expect event + vm.expectEmit(true, true, true, true); + vm.fee(70); + uint256 baseFeeToReport = 0; + emit MessageDelivered( + 0, + 0, + inbox, + kind, + AddressAliasHelper.applyL1ToL2Alias(user), + messageDataHash, + baseFeeToReport, + uint64(block.timestamp) + ); + + // enqueue msg + address userAliased = AddressAliasHelper.applyL1ToL2Alias(user); + vm.prank(inbox); + erc20Bridge.enqueueDelayedMessage(kind, userAliased, messageDataHash, tokenFeeAmount); + + //// checks + uint256 userNativeTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userNativeTokenBalanceAfter, + userNativeTokenBalanceBefore, + "Invalid user token balance" + ); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceAfter - bridgeNativeTokenBalanceBefore, + tokenFeeAmount, + "Invalid bridge token balance" + ); + + uint256 inboxNativeTokenBalanceAfter = nativeToken.balanceOf(address(inbox)); + assertEq( + inboxNativeTokenBalanceBefore - inboxNativeTokenBalanceAfter, + tokenFeeAmount, + "Invalid inbox token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_enqueueDelayedMessage_revert_UseEthForFees() public { + // allow inbox + vm.prank(rollup); + bridge.setDelayedInbox(inbox, true); + + // enqueue msg + hoax(inbox); + vm.expectRevert(); + IEthBridge(address(bridge)).enqueueDelayedMessage{value: 0.1 ether}( + kind, + user, + messageDataHash + ); + } + + function test_enqueueDelayedMessage_revert_NotDelayedInbox() public { + vm.prank(inbox); + vm.expectRevert(abi.encodeWithSelector(NotDelayedInbox.selector, inbox)); + erc20Bridge.enqueueDelayedMessage(kind, user, messageDataHash, tokenFeeAmount); + } + + function test_executeCall_EmptyCalldata() public { + // fund bridge native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // call params + uint256 withdrawalAmount = 15; + bytes memory data = ""; + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, user, withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall(user, withdrawalAmount, data); + + //// checks + assertTrue(success, "Execute call failed"); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceAfter - userTokenBalanceBefore, + withdrawalAmount, + "Invalid user token balance" + ); + } + + function test_executeCall_ExtraCall() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // native token balances + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 vaultNativeTokenBalanceBefore = nativeToken.balanceOf(address(vault)); + + // call params + uint256 withdrawalAmount = 15; + uint256 newVaultVersion = 7; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call + vm.prank(outbox); + (bool success, ) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertTrue(success, "Execute call failed"); + assertEq(vault.version(), newVaultVersion, "Invalid newVaultVersion"); + + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge native token balance" + ); + + uint256 vaultNativeTokenBalanceAfter = nativeToken.balanceOf(address(vault)); + assertEq( + vaultNativeTokenBalanceAfter - vaultNativeTokenBalanceBefore, + withdrawalAmount, + "Invalid vault native token balance" + ); + } + + function test_executeCall_UnsuccessfulExtraCall() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // native token balances + uint256 bridgeNativeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 vaultNativeTokenBalanceBefore = nativeToken.balanceOf(address(vault)); + + // call params + uint256 withdrawalAmount = 15; + bytes memory data = abi.encodeWithSelector(EthVault.justRevert.selector); + + // expect event + vm.expectEmit(true, true, true, true); + emit BridgeCallTriggered(outbox, address(vault), withdrawalAmount, data); + + //// execute call - do call which reverts + vm.prank(outbox); + (bool success, bytes memory returnData) = bridge.executeCall({ + to: address(vault), + value: withdrawalAmount, + data: data + }); + + //// checks + assertEq(success, false, "Execute shall be unsuccessful"); + assertEq(vault.version(), 0, "Invalid vaultVersion"); + + // get and assert revert reason + assembly { + returnData := add(returnData, 0x04) + } + string memory revertReason = abi.decode(returnData, (string)); + assertEq(revertReason, "bye", "Invalid revert reason"); + + // bridge successfully sent native token even though extra call was unsuccessful (we didn't revert it) + uint256 bridgeNativeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeNativeTokenBalanceBefore - bridgeNativeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge native token balance after unsuccessful extra call" + ); + + // vault successfully recieved native token even though extra call was unsuccessful (we didn't revert it) + uint256 vaultNativeTokenBalanceAfter = nativeToken.balanceOf(address(vault)); + assertEq( + vaultNativeTokenBalanceAfter - vaultNativeTokenBalanceBefore, + withdrawalAmount, + "Invalid vault native token balance after unsuccessful call" + ); + } + + function test_executeCall_UnsuccessfulNativeTokenTransfer() public { + // fund bridge with native tokens + ERC20PresetMinterPauser(address(nativeToken)).mint(address(bridge), 15); + + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // deploy some contract that will be call receiver + EthVault vault = new EthVault(); + + // call params + uint256 withdrawalAmount = 100_000_000; + uint256 newVaultVersion = 9; + bytes memory data = abi.encodeWithSelector(EthVault.setVersion.selector, newVaultVersion); + + //// execute call - do call which reverts on native token transfer due to invalid amount + vm.prank(outbox); + vm.expectRevert("ERC20: transfer amount exceeds balance"); + bridge.executeCall({to: address(vault), value: withdrawalAmount, data: data}); + } + + function test_executeCall_revert_NotOutbox() public { + vm.expectRevert(abi.encodeWithSelector(NotOutbox.selector, address(this))); + bridge.executeCall({to: user, value: 10, data: ""}); + } + + function test_executeCall_revert_NotContract() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(234); + vm.expectRevert(abi.encodeWithSelector(NotContract.selector, address(to))); + vm.prank(outbox); + bridge.executeCall({to: to, value: 10, data: "some data"}); + } + + function test_executeCall_revert_CallTargetNotAllowed() public { + // allow outbox + vm.prank(rollup); + bridge.setOutbox(outbox, true); + + // executeCall shall revert when 'to' is not contract + address to = address(nativeToken); + vm.expectRevert(abi.encodeWithSelector(CallTargetNotAllowed.selector, to)); + vm.prank(outbox); + bridge.executeCall({to: to, value: 10, data: "some data"}); + } +} \ No newline at end of file diff --git a/test/foundry/ERC20BridgeCreator.t.sol b/test/foundry/ERC20BridgeCreator.t.sol new file mode 100644 index 00000000..b341f40a --- /dev/null +++ b/test/foundry/ERC20BridgeCreator.t.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/rollup/ERC20BridgeCreator.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/bridge/AbsInbox.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract ERC20BridgeCreatorTest is Test { + ERC20BridgeCreator public creator; + address public owner = address(100); + + function setUp() public { + vm.prank(owner); + creator = new ERC20BridgeCreator(); + } + + /* solhint-disable func-name-mixedcase */ + function test_constructor() public { + assertTrue(address(creator.bridgeTemplate()) != address(0), "Bridge not created"); + assertTrue(address(creator.sequencerInboxTemplate()) != address(0), "SeqInbox not created"); + assertTrue(address(creator.inboxTemplate()) != address(0), "Inbox not created"); + assertTrue( + address(creator.rollupEventInboxTemplate()) != address(0), + "Event inbox not created" + ); + assertTrue(address(creator.outboxTemplate()) != address(0), "Outbox not created"); + } + + function test_updateTemplates() public { + address bridge = address(200); + address sequencerInbox = address(201); + address inbox = address(202); + address rollupEventInbox = address(203); + address outbox = address(204); + + vm.prank(owner); + creator.updateTemplates(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); + + assertEq(address(creator.bridgeTemplate()), bridge, "Invalid bridge"); + assertEq(address(creator.sequencerInboxTemplate()), sequencerInbox, "Invalid seqInbox"); + assertEq(address(creator.inboxTemplate()), inbox, "Invalid inbox"); + assertEq( + address(creator.rollupEventInboxTemplate()), + rollupEventInbox, + "Invalid rollup event inbox" + ); + assertEq(address(creator.outboxTemplate()), outbox, "Invalid outbox"); + } + + function test_createBridge() public { + address proxyAdmin = address(300); + address rollup = address(301); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + 10, + 20, + 30, + 40 + ); + timeVars.delayBlocks; + + ( + IBridge bridge, + SequencerInbox seqInbox, + IInbox inbox, + IRollupEventInbox eventInbox, + Outbox outbox + ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); + + // bridge + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq( + address(IERC20Bridge(address(bridge)).nativeToken()), + nativeToken, + "Invalid nativeToken ref" + ); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + + // seqInbox + assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); + ( + uint256 _delayBlocks, + uint256 _futureBlocks, + uint256 _delaySeconds, + uint256 _futureSeconds + ) = seqInbox.maxTimeVariation(); + assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); + assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); + assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); + assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); + + // inbox + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); + + // rollup event inbox + assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); + + // outbox + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + } +} \ No newline at end of file diff --git a/test/foundry/ERC20Inbox.t.sol b/test/foundry/ERC20Inbox.t.sol new file mode 100644 index 00000000..cacc5b33 --- /dev/null +++ b/test/foundry/ERC20Inbox.t.sol @@ -0,0 +1,661 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsInbox.t.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Inbox.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol"; + +contract ERC20InboxTest is AbsInboxTest { + IERC20 public nativeToken; + IERC20Inbox public erc20Inbox; + + function setUp() public { + // deploy token, bridge and inbox + nativeToken = new ERC20PresetMinterPauser("Appchain Token", "App"); + bridge = IBridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + inbox = IInbox(TestUtil.deployProxy(address(new ERC20Inbox()))); + erc20Inbox = IERC20Inbox(address(inbox)); + + // init bridge and inbox + IERC20Bridge(address(bridge)).initialize(IOwnable(rollup), address(nativeToken)); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + vm.prank(rollup); + bridge.setDelayedInbox(address(inbox), true); + + // fund user account + ERC20PresetMinterPauser(address(nativeToken)).mint(user, 1_000 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), seqInbox, "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + + assertEq(IERC20(nativeToken).allowance(address(inbox), address(bridge)), type(uint256).max); + } + + function test_depositERC20_FromEOA() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + depositAmount, + "Invalid user token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_FromEOA_InboxPrefunded() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // prefund inbox with native token amount needed to pay for fees + ERC20PresetMinterPauser(address(nativeToken)).mint(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceBefore, userTokenBalanceAfter, "Invalid user token balance"); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_FromContract() public { + uint256 depositAmount = 300; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), depositAmount); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) + ); + + // deposit tokens -> tx.origin != msg.sender + vm.prank(user); + erc20Inbox.depositERC20(depositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + depositAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + depositAmount, + "Invalid user token balance" + ); + + uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); + assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + } + + function test_depositERC20_revert_NativeTokenTransferFails() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // deposit tokens + vm.prank(user); + uint256 invalidDepositAmount = 1_000_000; + vm.expectRevert("ERC20: insufficient allowance"); + erc20Inbox.depositERC20(invalidDepositAmount); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq(bridgeTokenBalanceAfter, bridgeTokenBalanceBefore, "Invalid bridge token balance"); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceBefore, userTokenBalanceAfter, "Invalid user token balance"); + + assertEq(bridge.delayedMessageCount(), 0, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromEOA() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.createRetryableTicket({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromContract() public { + address sender = address(new Sender()); + ERC20PresetMinterPauser(address(nativeToken)).mint(address(sender), 1_000); + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 senderTokenBalanceBefore = nativeToken.balanceOf(address(sender)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(sender); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + uint256 uintAlias = uint256(uint160(AddressAliasHelper.applyL1ToL2Alias(sender))); + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uintAlias, + uintAlias, + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable + vm.prank(sender); + erc20Inbox.createRetryableTicket({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 senderTokenBalanceAfter = nativeToken.balanceOf(sender); + assertEq( + senderTokenBalanceBefore - senderTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + tokenTotalFeeAmount: 200, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_OnlyAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.prank(user, user); + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + tokenTotalFeeAmount: 200, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientValue() public { + uint256 tooSmallTokenTotalFeeAmount = 3; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 1; + + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + InsufficientValue.selector, + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + tooSmallTokenTotalFeeAmount + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tooSmallTokenTotalFeeAmount, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_RetryableDataTracer() public { + uint256 tokenTotalFeeAmount = 300; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 1; + bytes memory data = abi.encodePacked("xy"); + + // revert as maxFeePerGas == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + gasLimit = 1; + maxFeePerGas = 2; + + // revert as gasLimit == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + } + + function test_createRetryableTicket_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.prank(user, user); + vm.expectRevert(GasLimitTooLarge.selector); + erc20Inbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: tooBigGasLimit, + maxFeePerGas: 2, + tokenTotalFeeAmount: uint256(type(uint64).max) * 3, + data: abi.encodePacked("data") + }); + } + + function test_unsafeCreateRetryableTicket_FromEOA() public { + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + erc20Inbox.unsafeCreateRetryableTicket({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_FromContract() public { + address sender = address(new Sender()); + ERC20PresetMinterPauser(address(nativeToken)).mint(address(sender), 1_000); + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 senderTokenBalanceBefore = nativeToken.balanceOf(address(sender)); + + uint256 tokenTotalFeeAmount = 300; + + // approve inbox to fetch tokens + vm.prank(sender); + nativeToken.approve(address(inbox), tokenTotalFeeAmount); + + // retyrable params + uint256 l2CallValue = 10; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 100; + uint256 maxFeePerGas = 2; + bytes memory data = abi.encodePacked("some msg"); + + // expect event (address shall not be aliased) + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + tokenTotalFeeAmount, + maxSubmissionCost, + uint256(uint160(sender)), + uint256(uint160(sender)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable + vm.prank(sender); + erc20Inbox.unsafeCreateRetryableTicket({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tokenTotalFeeAmount, + data: data + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 senderTokenBalanceAfter = nativeToken.balanceOf(sender); + assertEq( + senderTokenBalanceBefore - senderTokenBalanceAfter, + tokenTotalFeeAmount, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_NotRevertingOnInsufficientValue() public { + uint256 tooSmallTokenTotalFeeAmount = 3; + uint256 l2CallValue = 100; + uint256 maxSubmissionCost = 0; + uint256 gasLimit = 10; + uint256 maxFeePerGas = 2; + + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + // approve inbox to fetch tokens + vm.prank(user); + nativeToken.approve(address(inbox), tooSmallTokenTotalFeeAmount); + + vm.prank(user, user); + erc20Inbox.unsafeCreateRetryableTicket({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + tokenTotalFeeAmount: tooSmallTokenTotalFeeAmount, + data: abi.encodePacked("data") + }); + + //// checks + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + tooSmallTokenTotalFeeAmount, + "Invalid bridge token balance" + ); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq( + userTokenBalanceBefore - userTokenBalanceAfter, + tooSmallTokenTotalFeeAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_calculateRetryableSubmissionFee() public { + assertEq(inbox.calculateRetryableSubmissionFee(1, 2), 0, "Invalid ERC20 submission fee"); + } +} \ No newline at end of file diff --git a/test/foundry/ERC20Outbox.t.sol b/test/foundry/ERC20Outbox.t.sol new file mode 100644 index 00000000..b716d5e3 --- /dev/null +++ b/test/foundry/ERC20Outbox.t.sol @@ -0,0 +1,179 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsOutbox.t.sol"; +import "../../src/bridge/ERC20Bridge.sol"; +import "../../src/bridge/ERC20Outbox.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract ERC20OutboxTest is AbsOutboxTest { + ERC20Outbox public erc20Outbox; + ERC20Bridge public erc20Bridge; + IERC20 public nativeToken; + + function setUp() public { + // deploy token, bridge and outbox + nativeToken = new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)); + bridge = IBridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + erc20Bridge = ERC20Bridge(address(bridge)); + outbox = IOutbox(TestUtil.deployProxy(address(new ERC20Outbox()))); + erc20Outbox = ERC20Outbox(address(outbox)); + + // init bridge and outbox + erc20Bridge.initialize(IOwnable(rollup), address(nativeToken)); + erc20Outbox.initialize(IBridge(bridge)); + + vm.prank(rollup); + bridge.setOutbox(address(outbox), true); + + // fund user account + nativeToken.transfer(user, 1_000); + } + + function test_initialize_WithdrawalAmount() public { + assertEq(erc20Outbox.l2ToL1WithdrawalAmount(), 0, "Invalid withdrawalAmount"); + } + + function test_executeTransaction() public { + // fund bridge with some tokens + vm.startPrank(user); + nativeToken.approve(address(bridge), 100); + nativeToken.transfer(address(bridge), 100); + vm.stopPrank(); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0x7e87df146feb0900d5a441d1d081867190b34395307698f4e879c8164cd9a7f9, + 0x7e87df146feb0900d5a441d1d081867190b34395307698f4e879c8164cd9a7f9 + ); + + // create msg receiver on L1 + ERC20L2ToL1Target target = new ERC20L2ToL1Target(); + target.setOutbox(address(outbox)); + + //// execute transaction + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 targetTokenBalanceBefore = nativeToken.balanceOf(address(target)); + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15; + bytes memory data = abi.encodeWithSignature("receiveHook()"); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: address(target), + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: data + }); + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq( + bridgeTokenBalanceBefore - bridgeTokenBalanceAfter, + withdrawalAmount, + "Invalid bridge token balance" + ); + + uint256 targetTokenBalanceAfter = nativeToken.balanceOf(address(target)); + assertEq( + targetTokenBalanceAfter - targetTokenBalanceBefore, + withdrawalAmount, + "Invalid target token balance" + ); + + /// check context was properly set during execution + assertEq(uint256(target.l2Block()), 300, "Invalid l2Block"); + assertEq(uint256(target.timestamp()), 1234, "Invalid timestamp"); + assertEq(uint256(target.outputId()), 12, "Invalid outputId"); + assertEq(target.sender(), user, "Invalid sender"); + assertEq(uint256(target.l1Block()), 20, "Invalid l1Block"); + assertEq(uint256(target.withdrawalAmount()), withdrawalAmount, "Invalid withdrawalAmount"); + } + + function test_executeTransaction_revert_CallTargetNotAllowed() public { + // // fund bridge with some tokens + vm.startPrank(user); + nativeToken.approve(address(bridge), 100); + nativeToken.transfer(address(bridge), 100); + vm.stopPrank(); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0x5b6cd410f78e45e55eeb02133b8e72e6ca122c59b667eed4f214e374d808058e, + 0x5b6cd410f78e45e55eeb02133b8e72e6ca122c59b667eed4f214e374d808058e + ); + + //// execute transaction + uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); + uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15; + + address invalidTarget = address(nativeToken); + + vm.expectRevert(abi.encodeWithSelector(CallTargetNotAllowed.selector, invalidTarget)); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: invalidTarget, + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: "" + }); + + uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); + assertEq(bridgeTokenBalanceBefore, bridgeTokenBalanceAfter, "Invalid bridge token balance"); + + uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); + assertEq(userTokenBalanceAfter, userTokenBalanceBefore, "Invalid user token balance"); + } +} + +/** + * Contract for testing L2 to L1 msgs + */ +contract ERC20L2ToL1Target { + address public outbox; + + uint128 public l2Block; + uint128 public timestamp; + bytes32 public outputId; + address public sender; + uint96 public l1Block; + uint256 public withdrawalAmount; + + function receiveHook() external payable { + l2Block = uint128(IOutbox(outbox).l2ToL1Block()); + timestamp = uint128(IOutbox(outbox).l2ToL1Timestamp()); + outputId = IOutbox(outbox).l2ToL1OutputId(); + sender = IOutbox(outbox).l2ToL1Sender(); + l1Block = uint96(IOutbox(outbox).l2ToL1EthBlock()); + withdrawalAmount = ERC20Outbox(outbox).l2ToL1WithdrawalAmount(); + } + + function setOutbox(address _outbox) external { + outbox = _outbox; + } +} \ No newline at end of file diff --git a/test/foundry/ERC20RollupCreator.t.sol b/test/foundry/ERC20RollupCreator.t.sol new file mode 100644 index 00000000..275458d7 --- /dev/null +++ b/test/foundry/ERC20RollupCreator.t.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "./AbsRollupCreator.t.sol"; +import "../../src/rollup/ERC20RollupCreator.sol"; +import "../../src/rollup/ERC20BridgeCreator.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract ERC20RollupCreatorTest is AbsRollupCreatorTest { + address public nativeToken; + + function setUp() public { + vm.prank(deployer); + nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); + } + + /* solhint-disable func-name-mixedcase */ + function test_createRollup() public { + vm.startPrank(deployer); + + ERC20RollupCreator rollupCreator = new ERC20RollupCreator(); + + ( + IOneStepProofEntry ospEntry, + IChallengeManager challengeManager, + IRollupAdmin rollupAdmin, + IRollupUser rollupUser, + ISequencerInbox.MaxTimeVariation memory timeVars, + address expectedRollupAddr + ) = _prepareRollupDeployment(address(rollupCreator)); + + //// deployBridgeCreator + IBridgeCreator bridgeCreator = new ERC20BridgeCreator(); + + //// deploy creator and set logic + rollupCreator.setTemplates( + bridgeCreator, + ospEntry, + challengeManager, + rollupAdmin, + rollupUser, + address(new ValidatorUtils()), + address(new ValidatorWalletCreator()) + ); + + // deployment params + bytes32 wasmModuleRoot = keccak256("wasm"); + uint256 chainId = 1337; + + // expect deployment events + _expectEvents(rollupCreator, bridgeCreator, expectedRollupAddr, wasmModuleRoot, chainId); + + /// deploy rollup + address rollupAddress = rollupCreator.createRollup( + Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("0"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: chainId, + genesisBlockNum: 15000000, + sequencerInboxMaxTimeVariation: timeVars + }), + expectedRollupAddr, + nativeToken + ); + + vm.stopPrank(); + + /// common checks + _checkRollupIsSetUp(rollupCreator, rollupAddress, rollupAdmin, rollupUser); + + // native token check + IBridge bridge = RollupCore(address(rollupAddress)).bridge(); + assertEq( + IERC20Bridge(address(bridge)).nativeToken(), + nativeToken, + "Invalid native token ref" + ); + } +} \ No newline at end of file diff --git a/test/foundry/Inbox.t.sol b/test/foundry/Inbox.t.sol new file mode 100644 index 00000000..9b387286 --- /dev/null +++ b/test/foundry/Inbox.t.sol @@ -0,0 +1,637 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsInbox.t.sol"; +import "./util/TestUtil.sol"; +import "../../src/bridge/Inbox.sol"; +import "../../src/bridge/IEthInbox.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/libraries/AddressAliasHelper.sol"; + +contract InboxTest is AbsInboxTest { + IEthInbox public ethInbox; + + function setUp() public { + // deploy token, bridge and inbox + bridge = IBridge(TestUtil.deployProxy(address(new Bridge()))); + inbox = IInbox(TestUtil.deployProxy(address(new Inbox()))); + ethInbox = IEthInbox(address(inbox)); + + // init bridge and inbox + IEthBridge(address(bridge)).initialize(IOwnable(rollup)); + inbox.initialize(bridge, ISequencerInbox(seqInbox)); + vm.prank(rollup); + bridge.setDelayedInbox(address(inbox), true); + + // fund user account + vm.deal(user, 10 ether); + } + + /* solhint-disable func-name-mixedcase */ + function test_initialize() public { + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), seqInbox, "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); + } + + function test_depositEth_FromEOA() public { + uint256 depositAmount = 2 ether; + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + + // deposit tokens -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.depositEth{value: depositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + depositAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + depositAmount, + "Invalid user eth balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_depositEth_FromContract() public { + uint256 depositAmount = 1.2 ether; + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) + ); + + // deposit tokens -> tx.origin != msg.sender + vm.prank(user); + ethInbox.depositEth{value: depositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + depositAmount, + "Invalid bridge eth balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + depositAmount, + "Invalid eth token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_depositEth_revert_EthTransferFails() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + // deposit too many eth shall fail + vm.prank(user); + uint256 invalidDepositAmount = 300 ether; + vm.expectRevert(); + ethInbox.depositEth{value: invalidDepositAmount}(); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq(bridgeEthBalanceAfter, bridgeEthBalanceBefore, "Invalid bridge token balance"); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq(userEthBalanceBefore, userEthBalanceAfter, "Invalid user token balance"); + + assertEq(bridge.delayedMessageCount(), 0, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromEOA() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 ethToSend = 0.3 ether; + + // retyrable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000002 ether; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.createRetryableTicket{value: ethToSend}({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + ethToSend, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_FromContract() public { + address sender = address(new Sender()); + vm.deal(sender, 10 ether); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 senderEthBalanceBefore = sender.balance; + + uint256 ethToSend = 0.3 ether; + + // retyrable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000001 ether; + + // expect event + uint256 uintAlias = uint256(uint160(AddressAliasHelper.applyL1ToL2Alias(sender))); + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uintAlias, + uintAlias, + gasLimit, + maxFeePerGas, + abi.encodePacked("some msg").length, + abi.encodePacked("some msg") + ) + ); + + // create retryable + vm.prank(sender); + ethInbox.createRetryableTicket{value: ethToSend}({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("some msg") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 senderEthBalanceAfter = address(sender).balance; + assertEq( + senderEthBalanceBefore - senderEthBalanceAfter, + ethToSend, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_createRetryableTicket_revert_WhenPaused() public { + vm.prank(rollup); + inbox.pause(); + + vm.expectRevert("Pausable: paused"); + ethInbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_OnlyAllowed() public { + vm.prank(rollup); + inbox.setAllowListEnabled(true); + + vm.prank(user, user); + vm.expectRevert(abi.encodeWithSelector(NotAllowedOrigin.selector, user)); + ethInbox.createRetryableTicket({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 10, + maxFeePerGas: 1, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientValue() public { + uint256 tooSmallEthAmount = 1 ether; + uint256 l2CallValue = 2 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 200000; + uint256 maxFeePerGas = 0.00000002 ether; + + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + InsufficientValue.selector, + maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, + tooSmallEthAmount + ) + ); + ethInbox.createRetryableTicket{value: tooSmallEthAmount}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_RetryableDataTracer() public { + uint256 msgValue = 3 ether; + uint256 l2CallValue = 1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100000; + uint256 maxFeePerGas = 1; + bytes memory data = abi.encodePacked("xy"); + + // revert as maxFeePerGas == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + msgValue, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + ethInbox.createRetryableTicket{value: msgValue}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + gasLimit = 1; + maxFeePerGas = 2; + + // revert as gasLimit == 1 is magic value + vm.prank(user, user); + vm.expectRevert( + abi.encodeWithSelector( + RetryableData.selector, + user, + user, + l2CallValue, + msgValue, + maxSubmissionCost, + user, + user, + gasLimit, + maxFeePerGas, + data + ) + ); + ethInbox.createRetryableTicket{value: msgValue}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + } + + function test_createRetryableTicket_revert_GasLimitTooLarge() public { + uint256 tooBigGasLimit = uint256(type(uint64).max) + 1; + + vm.deal(user, uint256(type(uint64).max) * 3); + vm.prank(user, user); + vm.expectRevert(GasLimitTooLarge.selector); + ethInbox.createRetryableTicket{value: uint256(type(uint64).max) * 3}({ + to: user, + l2CallValue: 100, + maxSubmissionCost: 0, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: tooBigGasLimit, + maxFeePerGas: 2, + data: abi.encodePacked("data") + }); + } + + function test_createRetryableTicket_revert_InsufficientSubmissionCost() public { + uint256 tooSmallMaxSubmissionCost = 5; + bytes memory data = abi.encodePacked("msg"); + + // simulate 23 gwei basefee + vm.fee(23000000000); + uint256 submissionFee = ethInbox.calculateRetryableSubmissionFee( + data.length, + block.basefee + ); + + // call shall revert + vm.prank(user, user); + vm.expectRevert( + abi.encodePacked( + InsufficientSubmissionCost.selector, + submissionFee, + tooSmallMaxSubmissionCost + ) + ); + ethInbox.createRetryableTicket{value: 1 ether}({ + to: user, + l2CallValue: 100, + maxSubmissionCost: tooSmallMaxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: 60000, + maxFeePerGas: 0.00000001 ether, + data: data + }); + } + + function test_unsafeCreateRetryableTicket_FromEOA() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 ethToSend = 0.3 ether; + + // retyrable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000002 ether; + bytes memory data = abi.encodePacked("some msg"); + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + data.length, + data + ) + ); + + // create retryable -> tx.origin == msg.sender + vm.prank(user, user); + ethInbox.unsafeCreateRetryableTicket{value: ethToSend}({ + to: address(user), + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: data + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + ethToSend, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_FromContract() public { + address sender = address(new Sender()); + vm.deal(sender, 10 ether); + + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 senderEthBalanceBefore = sender.balance; + + uint256 ethToSend = 0.3 ether; + + // retyrable params + uint256 l2CallValue = 0.1 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 100_000; + uint256 maxFeePerGas = 0.000000001 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(sender)), + l2CallValue, + ethToSend, + maxSubmissionCost, + uint256(uint160(sender)), + uint256(uint160(sender)), + gasLimit, + maxFeePerGas, + abi.encodePacked("some msg").length, + abi.encodePacked("some msg") + ) + ); + + // create retryable + vm.prank(sender); + ethInbox.unsafeCreateRetryableTicket{value: ethToSend}({ + to: sender, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: sender, + callValueRefundAddress: sender, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("some msg") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + ethToSend, + "Invalid bridge token balance" + ); + + uint256 senderEthBalanceAfter = address(sender).balance; + assertEq( + senderEthBalanceBefore - senderEthBalanceAfter, + ethToSend, + "Invalid sender token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_unsafeCreateRetryableTicket_NotRevertingOnInsufficientValue() public { + uint256 bridgeEthBalanceBefore = address(bridge).balance; + uint256 userEthBalanceBefore = address(user).balance; + + uint256 tooSmallEthAmount = 1 ether; + uint256 l2CallValue = 2 ether; + uint256 maxSubmissionCost = 0.1 ether; + uint256 gasLimit = 200000; + uint256 maxFeePerGas = 0.00000002 ether; + + // expect event + vm.expectEmit(true, true, true, true); + emit InboxMessageDelivered( + 0, + abi.encodePacked( + uint256(uint160(user)), + l2CallValue, + tooSmallEthAmount, + maxSubmissionCost, + uint256(uint160(user)), + uint256(uint160(user)), + gasLimit, + maxFeePerGas, + abi.encodePacked("data").length, + abi.encodePacked("data") + ) + ); + + vm.prank(user, user); + ethInbox.unsafeCreateRetryableTicket{value: tooSmallEthAmount}({ + to: user, + l2CallValue: l2CallValue, + maxSubmissionCost: maxSubmissionCost, + excessFeeRefundAddress: user, + callValueRefundAddress: user, + gasLimit: gasLimit, + maxFeePerGas: maxFeePerGas, + data: abi.encodePacked("data") + }); + + //// checks + + uint256 bridgeEthBalanceAfter = address(bridge).balance; + assertEq( + bridgeEthBalanceAfter - bridgeEthBalanceBefore, + tooSmallEthAmount, + "Invalid bridge token balance" + ); + + uint256 userEthBalanceAfter = address(user).balance; + assertEq( + userEthBalanceBefore - userEthBalanceAfter, + tooSmallEthAmount, + "Invalid user token balance" + ); + + assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + } + + function test_calculateRetryableSubmissionFee() public { + // 30 gwei fee + uint256 basefee = 30000000000; + vm.fee(basefee); + uint256 datalength = 10; + + assertEq( + inbox.calculateRetryableSubmissionFee(datalength, 0), + (1400 + 6 * datalength) * basefee, + "Invalid eth retryable submission fee" + ); + } +} \ No newline at end of file diff --git a/test/foundry/Outbox.t.sol b/test/foundry/Outbox.t.sol new file mode 100644 index 00000000..e826c2d0 --- /dev/null +++ b/test/foundry/Outbox.t.sol @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsOutbox.t.sol"; +import "../../src/bridge/Bridge.sol"; +import "../../src/bridge/Outbox.sol"; + +contract OutboxTest is AbsOutboxTest { + Outbox public ethOutbox; + Bridge public ethBridge; + + function setUp() public { + // deploy bridge and outbox + bridge = IBridge(TestUtil.deployProxy(address(new Bridge()))); + ethBridge = Bridge(address(bridge)); + outbox = IOutbox(TestUtil.deployProxy(address(new Outbox()))); + ethOutbox = Outbox(address(outbox)); + + // init bridge and outbox + ethBridge.initialize(IOwnable(rollup)); + ethOutbox.initialize(IBridge(bridge)); + + vm.prank(rollup); + bridge.setOutbox(address(outbox), true); + } + + function test_executeTransaction() public { + // fund bridge with some ether + vm.deal(address(bridge), 100 ether); + + // store root + vm.prank(rollup); + outbox.updateSendRoot( + 0xc86f4eaf8efb31147795fb05564f8777abc3220d4caeb0227c6c69c115931dda, + 0xc86f4eaf8efb31147795fb05564f8777abc3220d4caeb0227c6c69c115931dda + ); + + // create msg receiver on L1 + L2ToL1Target target = new L2ToL1Target(); + target.setOutbox(address(outbox)); + + //// execute transaction + uint256 bridgeBalanceBefore = address(bridge).balance; + uint256 targetBalanceBefore = address(target).balance; + + bytes32[] memory proof = new bytes32[](5); + proof[0] = bytes32(0x1216ff070e3c87b032d79b298a3e98009ddd13bf8479b843e225857ca5f950e7); + proof[1] = bytes32(0x2b5ee8f4bd7664ca0cf31d7ab86119b63f6ff07bb86dbd5af356d0087492f686); + proof[2] = bytes32(0x0aa797064e0f3768bbac0a02ce031c4f282441a9cd8c669086cf59a083add893); + proof[3] = bytes32(0xc7aac0aad5108a46ac9879f0b1870fd0cbc648406f733eb9d0b944a18c32f0f8); + proof[4] = bytes32(0x477ce2b0bc8035ae3052b7339c7496531229bd642bb1871d81618cf93a4d2d1a); + + uint256 withdrawalAmount = 15 ether; + bytes memory data = abi.encodeWithSignature("receiveHook()"); + outbox.executeTransaction({ + proof: proof, + index: 12, + l2Sender: user, + to: address(target), + l2Block: 300, + l1Block: 20, + l2Timestamp: 1234, + value: withdrawalAmount, + data: data + }); + + uint256 bridgeBalanceAfter = address(bridge).balance; + assertEq( + bridgeBalanceBefore - bridgeBalanceAfter, + withdrawalAmount, + "Invalid bridge balance" + ); + + uint256 targetBalanceAfter = address(target).balance; + assertEq( + targetBalanceAfter - targetBalanceBefore, + withdrawalAmount, + "Invalid target balance" + ); + + /// check context was properly set during execution + assertEq(uint256(target.l2Block()), 300, "Invalid l2Block"); + assertEq(uint256(target.timestamp()), 1234, "Invalid timestamp"); + assertEq(uint256(target.outputId()), 12, "Invalid outputId"); + assertEq(target.sender(), user, "Invalid sender"); + assertEq(uint256(target.l1Block()), 20, "Invalid l1Block"); + assertEq(uint256(target.withdrawalAmount()), withdrawalAmount, "Invalid withdrawalAmount"); + } +} + +/** + * Contract for testing L2 to L1 msgs + */ +contract L2ToL1Target { + address public outbox; + + uint128 public l2Block; + uint128 public timestamp; + bytes32 public outputId; + address public sender; + uint96 public l1Block; + uint256 public withdrawalAmount; + + function receiveHook() external payable { + l2Block = uint128(IOutbox(outbox).l2ToL1Block()); + timestamp = uint128(IOutbox(outbox).l2ToL1Timestamp()); + outputId = IOutbox(outbox).l2ToL1OutputId(); + sender = IOutbox(outbox).l2ToL1Sender(); + l1Block = uint96(IOutbox(outbox).l2ToL1EthBlock()); + withdrawalAmount = msg.value; + } + + function setOutbox(address _outbox) external { + outbox = _outbox; + } +} \ No newline at end of file diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol new file mode 100644 index 00000000..d041f92c --- /dev/null +++ b/test/foundry/RollupCreator.t.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "./AbsRollupCreator.t.sol"; +import "../../src/rollup/BridgeCreator.sol"; +import "../../src/rollup/RollupCreator.sol"; + +contract RollupCreatorTest is AbsRollupCreatorTest { + function setUp() public {} + + /* solhint-disable func-name-mixedcase */ + + function test_createRollup() public { + vm.startPrank(deployer); + + RollupCreator rollupCreator = new RollupCreator(); + + ( + IOneStepProofEntry ospEntry, + IChallengeManager challengeManager, + IRollupAdmin rollupAdmin, + IRollupUser rollupUser, + ISequencerInbox.MaxTimeVariation memory timeVars, + address expectedRollupAddr + ) = _prepareRollupDeployment(address(rollupCreator)); + //// deployBridgeCreator + IBridgeCreator bridgeCreator = new BridgeCreator(); + + //// deploy creator and set logic + rollupCreator.setTemplates( + bridgeCreator, + ospEntry, + challengeManager, + rollupAdmin, + rollupUser, + address(new ValidatorUtils()), + address(new ValidatorWalletCreator()) + ); + + // deployment params + bytes32 wasmModuleRoot = keccak256("wasm"); + uint256 chainId = 1337; + + // expect deployment events + _expectEvents(rollupCreator, bridgeCreator, expectedRollupAddr, wasmModuleRoot, chainId); + + /// deploy rollup + address rollupAddress = rollupCreator.createRollup( + Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("0"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: 1337, + genesisBlockNum: 15000000, + sequencerInboxMaxTimeVariation: timeVars + }), + expectedRollupAddr + ); + + vm.stopPrank(); + + /// common checks + _checkRollupIsSetUp(rollupCreator, rollupAddress, rollupAdmin, rollupUser); + } +} \ No newline at end of file diff --git a/test/foundry/util/TestUtil.sol b/test/foundry/util/TestUtil.sol new file mode 100644 index 00000000..c16cc739 --- /dev/null +++ b/test/foundry/util/TestUtil.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +library TestUtil { + function deployProxy(address logic) public returns (address) { + ProxyAdmin pa = new ProxyAdmin(); + return address(new TransparentUpgradeableProxy(address(logic), address(pa), "")); + } +} \ No newline at end of file From 5bcb5b1a0c9ef0e701050931438bf51a0c30db38 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 15:05:59 +0200 Subject: [PATCH 009/176] Update contract storage layout files --- test/storage/Bridge.dot | 2 +- test/storage/ERC20Bridge.dot | 27 +++++++++++++++++++++++++++ test/storage/ERC20Inbox.dot | 15 +++++++++++++++ test/storage/ERC20Outbox.dot | 12 ++++++++++++ test/storage/Inbox.dot | 2 +- test/storage/Outbox.dot | 6 +++--- 6 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 test/storage/ERC20Bridge.dot create mode 100644 test/storage/ERC20Inbox.dot create mode 100644 test/storage/ERC20Outbox.dot diff --git a/test/storage/Bridge.dot b/test/storage/Bridge.dot index e35ab1d8..acf81bc6 100644 --- a/test/storage/Bridge.dot +++ b/test/storage/Bridge.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) }}}"] +7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) }}}"] 1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] diff --git a/test/storage/ERC20Bridge.dot b/test/storage/ERC20Bridge.dot new file mode 100644 index 00000000..ff456b92 --- /dev/null +++ b/test/storage/ERC20Bridge.dot @@ -0,0 +1,27 @@ + +digraph StorageDiagram { +rankdir=LR +color=black +arrowhead=open +node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] +7 [label="ERC20Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) } | { unallocated (12) | address: nativeToken (20) }}}"] + +1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] + +2 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] + +3 [label="address[]: allowedDelayedInboxList \<\\>\n0x11987c15ef5ed64ec2e3cd9cfc79d7bd155aea3982ea59f35a5e6b5c1593a54b | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] + +4 [label="address[]: allowedOutboxList \<\\>\n0x68f9c7fa29c0442459fc0d2760448ff932de4dd67b90b4a6ac1899621cfd70a7 | {{ slot| 0 } | { type: variable (bytes) | { unallocated (12) | address (20) }}}"] + +5 [label="bytes32[]: delayedInboxAccs \<\\>\n0x5ff1374942f1d7624ea1478457e8132b05531ee44999ffc0f33a70926c6a0d30 | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] + +6 [label="bytes32[]: sequencerInboxAccs \<\\>\n0x995663702627f3d8fc4237c51a46b303536bb17f3f65e07c08ad05fecbf4d88e | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] + + 7:5 -> 1 + 7:8 -> 2 + 7:10 -> 3 + 7:12 -> 4 + 7:15 -> 5 + 7:17 -> 6 +} \ No newline at end of file diff --git a/test/storage/ERC20Inbox.dot b/test/storage/ERC20Inbox.dot new file mode 100644 index 00000000..fc90ee0d --- /dev/null +++ b/test/storage/ERC20Inbox.dot @@ -0,0 +1,15 @@ + +digraph StorageDiagram { +rankdir=LR +color=black +arrowhead=open +node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] +3 [label="ERC20Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: AbsInbox.bridge (20) } | { unallocated (11) | bool: AbsInbox.allowListEnabled (1) | ISequencerInbox: AbsInbox.sequencerInbox (20) } | { mapping\(address=\>bool\): AbsInbox.isAllowed (32) }}}"] + +1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] + +2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] + + 3:53 -> 1 + 3:104 -> 2 +} \ No newline at end of file diff --git a/test/storage/ERC20Outbox.dot b/test/storage/ERC20Outbox.dot new file mode 100644 index 00000000..db69c272 --- /dev/null +++ b/test/storage/ERC20Outbox.dot @@ -0,0 +1,12 @@ + +digraph StorageDiagram { +rankdir=LR +color=black +arrowhead=open +node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] +2 [label="ERC20Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 } | { type: \.variable (bytes) | { unallocated (12) | address: AbsOutbox.rollup (20) } | { unallocated (12) | IBridge: AbsOutbox.bridge (20) } | { mapping\(uint256=\>bytes32\): AbsOutbox.spent (32) } | { mapping\(bytes32=\>bytes32\): AbsOutbox.roots (32) } | { <11> L2ToL1Context: AbsOutbox.context (128) }}}"] + +1 [label="L2ToL1Context \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint128: timestamp (16) | uint128: l2Block (16) } | { bytes32: outputId (32) } | { uint96: l1Block (12) | address: sender (20) } | { uint256: withdrawalAmount (32) }}}"] + + 2:11 -> 1 +} \ No newline at end of file diff --git a/test/storage/Inbox.dot b/test/storage/Inbox.dot index 218aaeec..98c5cd42 100644 --- a/test/storage/Inbox.dot +++ b/test/storage/Inbox.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -3 [label="Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (11) | bool: allowListEnabled (1) | ISequencerInbox: sequencerInbox (20) } | { mapping\(address=\>bool\): isAllowed (32) }}}"] +3 [label="Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: AbsInbox.bridge (20) } | { unallocated (11) | bool: AbsInbox.allowListEnabled (1) | ISequencerInbox: AbsInbox.sequencerInbox (20) } | { mapping\(address=\>bool\): AbsInbox.isAllowed (32) }}}"] 1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] diff --git a/test/storage/Outbox.dot b/test/storage/Outbox.dot index 089e0020..de11992c 100644 --- a/test/storage/Outbox.dot +++ b/test/storage/Outbox.dot @@ -4,9 +4,9 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -2 [label="Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 } | { type: \.variable (bytes) | { unallocated (12) | address: rollup (20) } | { unallocated (12) | IBridge: bridge (20) } | { mapping\(uint256=\>bytes32\): spent (32) } | { mapping\(bytes32=\>bytes32\): roots (32) } | { <10> L2ToL1Context: context (128) }}}"] +2 [label="Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 } | { type: \.variable (bytes) | { unallocated (12) | address: AbsOutbox.rollup (20) } | { unallocated (12) | IBridge: AbsOutbox.bridge (20) } | { mapping\(uint256=\>bytes32\): AbsOutbox.spent (32) } | { mapping\(bytes32=\>bytes32\): AbsOutbox.roots (32) } | { <11> L2ToL1Context: AbsOutbox.context (128) }}}"] -1 [label="L2ToL1Context \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint128: l1Block (16) | uint128: l2Block (16) } | { unallocated (16) | uint128: timestamp (16) } | { bytes32: outputId (32) } | { unallocated (12) | address: sender (20) }}}"] +1 [label="L2ToL1Context \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint128: timestamp (16) | uint128: l2Block (16) } | { bytes32: outputId (32) } | { uint96: l1Block (12) | address: sender (20) } | { uint256: withdrawalAmount (32) }}}"] - 2:10 -> 1 + 2:11 -> 1 } \ No newline at end of file From f813068037801b82b8aec719ab26131778b6a68d Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 29 May 2023 15:11:49 +0200 Subject: [PATCH 010/176] Make unit testing part of CI --- .github/workflows/contract-tests.yml | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/contract-tests.yml b/.github/workflows/contract-tests.yml index 61b0c747..15384ce5 100644 --- a/.github/workflows/contract-tests.yml +++ b/.github/workflows/contract-tests.yml @@ -10,6 +10,35 @@ on: - develop jobs: + test-unit: + name: Test unit + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: contracts + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Setup node/yarn + uses: actions/setup-node@v3 + with: + node-version: 16 + cache: 'yarn' + cache-dependency-path: '**/yarn.lock' + + - name: Install packages + run: yarn + + - name: Run unit tests + run: forge test tests: name: Contract tests runs-on: ubuntu-8 From f8fad6fd6a79a45a1a6c8aa3629fd9b82522fa1d Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 1 Jun 2023 12:26:47 +0200 Subject: [PATCH 011/176] Fix rollup creator test cases --- test/foundry/AbsRollupCreator.t.sol | 97 ++------------------------- test/foundry/ERC20RollupCreator.t.sol | 71 ++++++++++++-------- test/foundry/RollupCreator.t.sol | 71 ++++++++++++-------- 3 files changed, 93 insertions(+), 146 deletions(-) diff --git a/test/foundry/AbsRollupCreator.t.sol b/test/foundry/AbsRollupCreator.t.sol index 57d3545e..ccaa4d38 100644 --- a/test/foundry/AbsRollupCreator.t.sol +++ b/test/foundry/AbsRollupCreator.t.sol @@ -21,15 +21,16 @@ abstract contract AbsRollupCreatorTest is Test { address public rollupOwner = address(4400); address public deployer = address(4300); - function _prepareRollupDeployment(address rollupCreator) + function _prepareRollupDeployment( + address rollupCreator, + Config memory config + ) internal returns ( IOneStepProofEntry ospEntry, IChallengeManager challengeManager, IRollupAdmin rollupAdminLogic, - IRollupUser rollupUserLogic, - ISequencerInbox.MaxTimeVariation memory timeVars, - address expectedRollupAddr + IRollupUser rollupUserLogic ) { //// deploy challenge stuff @@ -45,93 +46,7 @@ abstract contract AbsRollupCreatorTest is Test { rollupAdminLogic = IRollupAdmin(new RollupAdminLogic()); rollupUserLogic = IRollupUser(new RollupUserLogic()); - timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); - - //// calculate expected address for rollup - expectedRollupAddr = _calculateExpectedAddr(rollupCreator, vm.getNonce(rollupCreator) + 2); - - return ( - ospEntry, - challengeManager, - rollupAdminLogic, - rollupUserLogic, - timeVars, - expectedRollupAddr - ); - } - - function _calculateExpectedAddr(address rollupCreator, uint256 nonce) - internal - pure - returns (address) - { - bytes1 nonceBytes1 = bytes1(uint8(nonce)); - address expectedRollupAddr = address( - uint160( - uint256( - keccak256( - abi.encodePacked( - bytes1(0xd6), - bytes1(0x94), - address(rollupCreator), - nonceBytes1 - ) - ) - ) - ) - ); - - return expectedRollupAddr; - } - - function _checkRollupIsSetUp( - IRollupCreator rollupCreator, - address rollupAddress, - IRollupAdmin rollupAdmin, - IRollupUser rollupUser - ) internal { - /// rollup creator - assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); - - /// rollup proxy - assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); - assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); - assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); - assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); - - /// rollup check - RollupCore rollup = RollupCore(rollupAddress); - assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); - assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); - assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); - assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); - assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); - assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); - } - - function _expectEvents( - IRollupCreator rollupCreator, - IBridgeCreator bridgeCreator, - address expectedRollupAddr, - bytes32 wasmModuleRoot, - uint256 chainId - ) internal { - vm.expectEmit(true, true, true, true); - uint256 bridgeCreatorNonce = vm.getNonce(address(bridgeCreator)); - emit RollupCreated( - expectedRollupAddr, - _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce + 2), - _calculateExpectedAddr(address(rollupCreator), vm.getNonce(address(rollupCreator))), - _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce + 1), - _calculateExpectedAddr(address(bridgeCreator), bridgeCreatorNonce) - ); - - emit RollupInitialized(wasmModuleRoot, chainId); + return (ospEntry, challengeManager, rollupAdminLogic, rollupUserLogic); } function _getProxyAdmin(address proxy) internal view returns (address) { diff --git a/test/foundry/ERC20RollupCreator.t.sol b/test/foundry/ERC20RollupCreator.t.sol index 2a450308..4cff58cc 100644 --- a/test/foundry/ERC20RollupCreator.t.sol +++ b/test/foundry/ERC20RollupCreator.t.sol @@ -24,14 +24,35 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { ERC20RollupCreator rollupCreator = new ERC20RollupCreator(); + // deployment params + bytes32 wasmModuleRoot = keccak256("wasm"); + uint256 chainId = 1337; + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); + Config memory config = Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("0"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: chainId, + chainConfig: "abc", + genesisBlockNum: 15000000, + sequencerInboxMaxTimeVariation: timeVars + }); + ( IOneStepProofEntry ospEntry, IChallengeManager challengeManager, IRollupAdmin rollupAdmin, - IRollupUser rollupUser, - ISequencerInbox.MaxTimeVariation memory timeVars, - address expectedRollupAddr - ) = _prepareRollupDeployment(address(rollupCreator)); + IRollupUser rollupUser + ) = _prepareRollupDeployment(address(rollupCreator), config); //// deployBridgeCreator IBridgeCreator bridgeCreator = new ERC20BridgeCreator(); @@ -47,36 +68,30 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { address(new ValidatorWalletCreator()) ); - // deployment params - bytes32 wasmModuleRoot = keccak256("wasm"); - uint256 chainId = 1337; - - // expect deployment events - _expectEvents(rollupCreator, bridgeCreator, expectedRollupAddr, wasmModuleRoot, chainId); - /// deploy rollup - address rollupAddress = rollupCreator.createRollup( - Config({ - confirmPeriodBlocks: 20, - extraChallengeTimeBlocks: 200, - stakeToken: address(0), - baseStake: 1000, - wasmModuleRoot: keccak256("0"), - owner: rollupOwner, - loserStakeEscrow: address(200), - chainId: chainId, - chainConfig: "abc", - genesisBlockNum: 15000000, - sequencerInboxMaxTimeVariation: timeVars - }), - nativeToken - ); + address rollupAddress = rollupCreator.createRollup(config, nativeToken); vm.stopPrank(); /// common checks - _checkRollupIsSetUp(rollupCreator, rollupAddress, rollupAdmin, rollupUser); + /// rollup creator + assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); + + /// rollup proxy + assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); + assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); + assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); + assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); + + /// rollup check + RollupCore rollup = RollupCore(rollupAddress); + assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); + assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); + assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); + assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); + assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); + assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index f9dce467..9acd7106 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -15,14 +15,35 @@ contract RollupCreatorTest is AbsRollupCreatorTest { RollupCreator rollupCreator = new RollupCreator(); + // deployment params + bytes32 wasmModuleRoot = keccak256("wasm"); + uint256 chainId = 1337; + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); + Config memory config = Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("0"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: chainId, + chainConfig: "abc", + genesisBlockNum: 15000000, + sequencerInboxMaxTimeVariation: timeVars + }); + ( IOneStepProofEntry ospEntry, IChallengeManager challengeManager, IRollupAdmin rollupAdmin, - IRollupUser rollupUser, - ISequencerInbox.MaxTimeVariation memory timeVars, - address expectedRollupAddr - ) = _prepareRollupDeployment(address(rollupCreator)); + IRollupUser rollupUser + ) = _prepareRollupDeployment(address(rollupCreator), config); //// deployBridgeCreator IBridgeCreator bridgeCreator = new BridgeCreator(); @@ -37,33 +58,29 @@ contract RollupCreatorTest is AbsRollupCreatorTest { address(new ValidatorWalletCreator()) ); - // deployment params - bytes32 wasmModuleRoot = keccak256("wasm"); - uint256 chainId = 1337; - - // expect deployment events - _expectEvents(rollupCreator, bridgeCreator, expectedRollupAddr, wasmModuleRoot, chainId); - /// deploy rollup - address rollupAddress = rollupCreator.createRollup( - Config({ - confirmPeriodBlocks: 20, - extraChallengeTimeBlocks: 200, - stakeToken: address(0), - baseStake: 1000, - wasmModuleRoot: keccak256("0"), - owner: rollupOwner, - loserStakeEscrow: address(200), - chainId: 1337, - chainConfig: "abcd", - genesisBlockNum: 15000000, - sequencerInboxMaxTimeVariation: timeVars - }) - ); + address rollupAddress = rollupCreator.createRollup(config); vm.stopPrank(); /// common checks - _checkRollupIsSetUp(rollupCreator, rollupAddress, rollupAdmin, rollupUser); + + /// rollup creator + assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); + + /// rollup proxy + assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); + assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); + assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); + assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); + + /// rollup check + RollupCore rollup = RollupCore(rollupAddress); + assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); + assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); + assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); + assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); + assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); + assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); } } From 3bdec16eed675ba0f467d1066841cc8b04340e16 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 2 Jun 2023 13:50:02 +0200 Subject: [PATCH 012/176] Add e2e erc20-bridge tests --- package.json | 5 +- scripts/genNetwork.ts | 17 ++ scripts/testSetup.ts | 130 +++++++++++++ test/e2e/erc20rollup.ts | 405 ++++++++++++++++++++++++++++++++++++++++ yarn.lock | 96 +++++++++- 5 files changed, 649 insertions(+), 4 deletions(-) create mode 100644 scripts/genNetwork.ts create mode 100644 scripts/testSetup.ts create mode 100644 test/e2e/erc20rollup.ts diff --git a/package.json b/package.json index a330b882..606ab8c0 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,12 @@ "build:0.7": "INTERFACE_TESTER_SOLC_VERSION=0.7.0 yarn run build", "test:compatibility": "yarn run build:0.6 && yarn run build:0.7", "test:storage": "./test/storage/test.bash", + "test:e2e": "hardhat test test/e2e/*.ts", "postinstall": "patch-package" }, "dependencies": { + "@arbitrum/sdk": "^3.1.3", + "@ethersproject/providers": "^5.7.2", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "patch-package": "^6.4.7" @@ -60,8 +63,8 @@ "solhint": "^3.3.7", "solhint-plugin-prettier": "^0.0.5", "solidity-coverage": "^0.7.20", - "tslint": "^6.1.3", "ts-node": "^10.4.0", + "tslint": "^6.1.3", "typechain": "^8.0.0", "typescript": "^4.5.4" }, diff --git a/scripts/genNetwork.ts b/scripts/genNetwork.ts new file mode 100644 index 00000000..ad60ae08 --- /dev/null +++ b/scripts/genNetwork.ts @@ -0,0 +1,17 @@ +import { setupNetworks, config } from './testSetup' +import * as fs from 'fs' + +async function main() { + const { l1Network, l2Network } = await setupNetworks( + config.ethUrl, + config.arbUrl + ) + + fs.writeFileSync( + './files/local/network.json', + JSON.stringify({ l1Network, l2Network }, null, 2) + ) + console.log('network.json updated') +} + +main().then(() => console.log('Done.')) \ No newline at end of file diff --git a/scripts/testSetup.ts b/scripts/testSetup.ts new file mode 100644 index 00000000..54db9174 --- /dev/null +++ b/scripts/testSetup.ts @@ -0,0 +1,130 @@ +import { JsonRpcProvider } from '@ethersproject/providers' +import { L1Network, L2Network, addCustomNetwork } from '@arbitrum/sdk' +import { execSync } from 'child_process' +import { Bridge__factory } from '@arbitrum/sdk/dist/lib/abi/factories/Bridge__factory' +import { RollupAdminLogic__factory } from '@arbitrum/sdk/dist/lib/abi/factories/RollupAdminLogic__factory' + +export const config = { + arbUrl: 'http://localhost:8547', + ethUrl: 'http://localhost:8545', +} + +export const getCustomNetworks = async ( + l1Url: string, + l2Url: string +): Promise<{ + l1Network: L1Network + l2Network: Omit & { nativeToken: string } +}> => { + const l1Provider = new JsonRpcProvider(l1Url) + const l2Provider = new JsonRpcProvider(l2Url) + let deploymentData: string + try { + deploymentData = execSync( + 'docker exec nitro_sequencer_1 cat /config/deployment.json' + ).toString() + } catch (e) { + deploymentData = execSync( + 'docker exec nitro-sequencer-1 cat /config/deployment.json' + ).toString() + } + const parsedDeploymentData = JSON.parse(deploymentData) as { + bridge: string + inbox: string + ['sequencer-inbox']: string + rollup: string + ['native-erc20-token']: string + } + + const rollup = RollupAdminLogic__factory.connect( + parsedDeploymentData.rollup, + l1Provider + ) + const confirmPeriodBlocks = await rollup.confirmPeriodBlocks() + + const bridge = Bridge__factory.connect( + parsedDeploymentData.bridge, + l1Provider + ) + const outboxAddr = await bridge.allowedOutboxList(0) + + const l1NetworkInfo = await l1Provider.getNetwork() + const l2NetworkInfo = await l2Provider.getNetwork() + + const l1Network: L1Network = { + blockTime: 10, + chainID: l1NetworkInfo.chainId, + explorerUrl: '', + isCustom: true, + name: 'EthLocal', + partnerChainIDs: [l2NetworkInfo.chainId], + isArbitrum: false, + } + + const l2Network: Omit & { nativeToken: string } = { + chainID: l2NetworkInfo.chainId, + confirmPeriodBlocks: confirmPeriodBlocks.toNumber(), + ethBridge: { + bridge: parsedDeploymentData.bridge, + inbox: parsedDeploymentData.inbox, + outbox: outboxAddr, + rollup: parsedDeploymentData.rollup, + sequencerInbox: parsedDeploymentData['sequencer-inbox'], + }, + nativeToken: parsedDeploymentData['native-erc20-token'], + explorerUrl: '', + isArbitrum: true, + isCustom: true, + name: 'ArbLocal', + partnerChainID: l1NetworkInfo.chainId, + retryableLifetimeSeconds: 7 * 24 * 60 * 60, + nitroGenesisBlock: 0, + nitroGenesisL1Block: 0, + depositTimeout: 900000, + } + return { + l1Network, + l2Network, + } +} + +export const setupNetworks = async (l1Url: string, l2Url: string) => { + const { l1Network, l2Network: coreL2Network } = await getCustomNetworks( + l1Url, + l2Url + ) + const l2Network: L2Network & { nativeToken: string } = { + ...coreL2Network, + tokenBridge: { + l1CustomGateway: '', + l1ERC20Gateway: '', + l1GatewayRouter: '', + l1MultiCall: '', + l1ProxyAdmin: '', + l1Weth: '', + l1WethGateway: '', + + l2CustomGateway: '', + l2ERC20Gateway: '', + l2GatewayRouter: '', + l2Multicall: '', + l2ProxyAdmin: '', + l2Weth: '', + l2WethGateway: '', + }, + } + + addCustomNetwork({ + customL1Network: l1Network, + customL2Network: l2Network, + }) + + return { + l1Network, + l2Network, + } +} + +export function sleep(ms: number) { + return new Promise(resolve => setTimeout(resolve, ms)) +} diff --git a/test/e2e/erc20rollup.ts b/test/e2e/erc20rollup.ts new file mode 100644 index 00000000..a09e5c26 --- /dev/null +++ b/test/e2e/erc20rollup.ts @@ -0,0 +1,405 @@ +import { + L1ToL2MessageGasEstimator, + L1ToL2MessageStatus, + L1TransactionReceipt, + L2Network, + L2TransactionReceipt, +} from '@arbitrum/sdk' +import { getBaseFee } from '@arbitrum/sdk/dist/lib/utils/lib' +import { JsonRpcProvider } from '@ethersproject/providers' +import { expect } from 'chai' +import { ethers, Wallet } from '@arbitrum/sdk/node_modules/ethers' +import { + ArbSys__factory, + ERC20, + ERC20Bridge__factory, + ERC20Inbox, + ERC20Inbox__factory, + ERC20__factory, + EthVault__factory, + RollupCore__factory, +} from '../../build/types' +import { setupNetworks, sleep } from '../../scripts/testSetup' +import { applyAlias } from '../contract/utils' + +export const config = { + arbUrl: 'http://localhost:8547', + ethUrl: 'http://localhost:8545', +} + +let l1Provider: JsonRpcProvider +let l2Provider: JsonRpcProvider +let _l2Network: L2Network & { nativeToken: string } +let userL1Wallet: Wallet +let userL2Wallet: Wallet +let token: ERC20 +let inbox: ERC20Inbox +const excessFeeRefundAddress = Wallet.createRandom().address +const callValueRefundAddress = Wallet.createRandom().address + +describe('ArbERC20Rollup', () => { + // setup providers and connect deployed contracts + before(async function () { + const { l2Network } = await setupNetworks(config.ethUrl, config.arbUrl) + _l2Network = l2Network + + l1Provider = new JsonRpcProvider(config.ethUrl) + l2Provider = new JsonRpcProvider(config.arbUrl) + userL1Wallet = new ethers.Wallet( + ethers.utils.sha256(ethers.utils.toUtf8Bytes('user_l1user')), + l1Provider + ) + userL2Wallet = new ethers.Wallet(userL1Wallet.privateKey, l2Provider) + token = ERC20__factory.connect(_l2Network.nativeToken, l1Provider) + inbox = ERC20Inbox__factory.connect(_l2Network.ethBridge.inbox, l1Provider) + }) + + it('should have deployed bridge contracts', async function () { + // get rollup as entry point + const rollup = RollupCore__factory.connect( + _l2Network.ethBridge.rollup, + l1Provider + ) + + // check contract refs are properly set + expect(rollup.address).to.be.eq(_l2Network.ethBridge.rollup) + expect((await rollup.sequencerInbox()).toLowerCase()).to.be.eq( + _l2Network.ethBridge.sequencerInbox + ) + expect(await rollup.outbox()).to.be.eq(_l2Network.ethBridge.outbox) + expect((await rollup.inbox()).toLowerCase()).to.be.eq( + _l2Network.ethBridge.inbox + ) + + const erc20Bridge = ERC20Bridge__factory.connect( + await rollup.bridge(), + l1Provider + ) + expect(erc20Bridge.address.toLowerCase()).to.be.eq( + _l2Network.ethBridge.bridge + ) + expect((await erc20Bridge.nativeToken()).toLowerCase()).to.be.eq( + _l2Network.nativeToken + ) + }) + + it('can deposit native token to L2', async function () { + // snapshot state before deposit + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + + /// deposit 60 tokens + const amountToDeposit = ethers.utils.parseEther('60') + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, amountToDeposit) + ).wait() + const depositTx = await inbox + .connect(userL1Wallet) + .depositERC20(amountToDeposit) + + // wait for deposit to be processed + const depositRec = await L1TransactionReceipt.monkeyPatchEthDepositWait( + depositTx + ).wait() + const l2Result = await depositRec.waitForL2(l2Provider) + expect(l2Result.complete).to.be.true + + // check user balance increased on L2 and decreased on L1 + const userL1TokenBalanceAfter = await token.balanceOf(userL1Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenBalanceAfter)).to.be.eq( + amountToDeposit + ) + const userL2BalanceAfter = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2BalanceAfter.sub(userL2Balance)).to.be.eq(amountToDeposit) + + const bridgeL1TokenBalanceAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + // bridge escrow increased + expect(bridgeL1TokenBalanceAfter.sub(bridgeL1TokenBalance)).to.be.eq( + amountToDeposit + ) + }) + + it('can issue retryable ticket (no calldata)', async function () { + // snapshot state before issuing retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const aliasL2Balance = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + const excessFeeReceiverBalance = await l2Provider.getBalance( + excessFeeRefundAddress + ) + const callValueRefundReceiverBalance = await l2Provider.getBalance( + callValueRefundAddress + ) + + //// retryables params + + const to = userL1Wallet.address + const l2CallValue = ethers.utils.parseEther('37') + const data = '0x' + + const l1ToL2MessageGasEstimate = new L1ToL2MessageGasEstimator(l2Provider) + const retryableParams = await l1ToL2MessageGasEstimate.estimateAll( + { + from: userL1Wallet.address, + to: to, + l2CallValue: l2CallValue, + excessFeeRefundAddress: excessFeeRefundAddress, + callValueRefundAddress: callValueRefundAddress, + data: data, + }, + await getBaseFee(l1Provider), + l1Provider + ) + + const tokenTotalFeeAmount = retryableParams.deposit + const gasLimit = retryableParams.gasLimit + const maxFeePerGas = retryableParams.maxFeePerGas + const maxSubmissionCost = retryableParams.maxSubmissionCost + + /// deposit 37 tokens using retryable + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, tokenTotalFeeAmount) + ).wait() + + const retryableTx = await inbox + .connect(userL1Wallet) + .createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ) + + // wait for L2 msg to be executed + await waitOnL2Msg(retryableTx) + + // check balances after retryable is processed + const userL1TokenAfter = await token.balanceOf(userL1Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenAfter)).to.be.eq( + tokenTotalFeeAmount + ) + + const userL2After = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2After.sub(userL2Balance)).to.be.eq(l2CallValue) + + const aliasL2BalanceAfter = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + expect(aliasL2BalanceAfter).to.be.eq(aliasL2Balance) + + const excessFeeReceiverBalanceAfter = await l2Provider.getBalance( + excessFeeRefundAddress + ) + expect(excessFeeReceiverBalanceAfter).to.be.gte(excessFeeReceiverBalance) + + const callValueRefundReceiverBalanceAfter = await l2Provider.getBalance( + callValueRefundAddress + ) + expect(callValueRefundReceiverBalanceAfter).to.be.eq( + callValueRefundReceiverBalance + ) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenAfter.sub(bridgeL1TokenBalance)).to.be.eq( + tokenTotalFeeAmount + ) + }) + + it('can issue retryable ticket', async function () { + // deploy contract on L2 which will be retryable's target + const ethVaultContract = await new EthVault__factory( + userL2Wallet.connect(l2Provider) + ).deploy() + await ethVaultContract.deployed() + + // snapshot state before retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const aliasL2Balance = await l2Provider.getBalance( + applyAlias(userL2Wallet.address) + ) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + const excessFeeReceiverBalance = await l2Provider.getBalance( + excessFeeRefundAddress + ) + const callValueRefundReceiverBalance = await l2Provider.getBalance( + callValueRefundAddress + ) + + //// retryables params + + const to = ethVaultContract.address + const l2CallValue = ethers.utils.parseEther('45') + // calldata -> change 'version' field to 11 + const newValue = 11 + const data = new ethers.utils.Interface([ + 'function setVersion(uint256 _version)', + ]).encodeFunctionData('setVersion', [newValue]) + + const l1ToL2MessageGasEstimate = new L1ToL2MessageGasEstimator(l2Provider) + const retryableParams = await l1ToL2MessageGasEstimate.estimateAll( + { + from: userL1Wallet.address, + to: to, + l2CallValue: l2CallValue, + excessFeeRefundAddress: excessFeeRefundAddress, + callValueRefundAddress: callValueRefundAddress, + data: data, + }, + await getBaseFee(l1Provider), + l1Provider + ) + + const tokenTotalFeeAmount = retryableParams.deposit + const gasLimit = retryableParams.gasLimit + const maxFeePerGas = retryableParams.maxFeePerGas + const maxSubmissionCost = retryableParams.maxSubmissionCost + + /// execute retryable + await ( + await token + .connect(userL1Wallet) + .approve(_l2Network.ethBridge.inbox, tokenTotalFeeAmount) + ).wait() + + const retryableTx = await inbox + .connect(userL1Wallet) + .createRetryableTicket( + to, + l2CallValue, + maxSubmissionCost, + excessFeeRefundAddress, + callValueRefundAddress, + gasLimit, + maxFeePerGas, + tokenTotalFeeAmount, + data + ) + + // wait for L2 msg to be executed + await waitOnL2Msg(retryableTx) + + // check balances after retryable is processed + const userL1TokenAfter = await token.balanceOf(userL2Wallet.address) + expect(userL1TokenBalance.sub(userL1TokenAfter)).to.be.eq( + tokenTotalFeeAmount + ) + + const userL2After = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2After).to.be.eq(userL2Balance) + + const ethVaultBalanceAfter = await l2Provider.getBalance( + ethVaultContract.address + ) + expect(ethVaultBalanceAfter).to.be.eq(l2CallValue) + + const ethVaultVersion = await ethVaultContract.version() + expect(ethVaultVersion).to.be.eq(newValue) + + const aliasL2BalanceAfter = await l2Provider.getBalance( + applyAlias(userL1Wallet.address) + ) + expect(aliasL2BalanceAfter).to.be.eq(aliasL2Balance) + + const excessFeeReceiverBalanceAfter = await l2Provider.getBalance( + excessFeeRefundAddress + ) + expect(excessFeeReceiverBalanceAfter).to.be.gte(excessFeeReceiverBalance) + + const callValueRefundReceiverBalanceAfter = await l2Provider.getBalance( + callValueRefundAddress + ) + expect(callValueRefundReceiverBalanceAfter).to.be.eq( + callValueRefundReceiverBalance + ) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenAfter.sub(bridgeL1TokenBalance)).to.be.eq( + tokenTotalFeeAmount + ) + }) + + it('can withdraw funds from L2 to L1', async function () { + // snapshot state before issuing retryable + const userL1TokenBalance = await token.balanceOf(userL1Wallet.address) + const userL2Balance = await l2Provider.getBalance(userL2Wallet.address) + const bridgeL1TokenBalance = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + + /// send L2 to L1 TX + const arbSys = ArbSys__factory.connect( + '0x0000000000000000000000000000000000000064', + l2Provider + ) + const withdrawAmount = ethers.utils.parseEther('3') + const withdrawTx = await arbSys + .connect(userL2Wallet) + .sendTxToL1(userL1Wallet.address, '0x', { + value: withdrawAmount, + }) + const withdrawReceipt = await withdrawTx.wait() + const l2Receipt = new L2TransactionReceipt(withdrawReceipt) + + // wait until dispute period passes and withdrawal is ready for execution + await sleep(5 * 1000) + + const messages = await l2Receipt.getL2ToL1Messages(userL1Wallet) + const l2ToL1Msg = messages[0] + const timeToWaitMs = 60 * 1000 + await l2ToL1Msg.waitUntilReadyToExecute(l2Provider, timeToWaitMs) + + // execute + await (await l2ToL1Msg.execute(l2Provider)).wait() + + // check balances after withdrawal is processed + const userL1TokenAfter = await token.balanceOf(userL2Wallet.address) + expect(userL1TokenAfter.sub(userL1TokenBalance)).to.be.eq(withdrawAmount) + + const userL2BalanceAfter = await l2Provider.getBalance(userL2Wallet.address) + expect(userL2BalanceAfter).to.be.lte(userL2Balance.sub(withdrawAmount)) + + const bridgeL1TokenAfter = await token.balanceOf( + _l2Network.ethBridge.bridge + ) + expect(bridgeL1TokenBalance.sub(bridgeL1TokenAfter)).to.be.eq( + withdrawAmount + ) + }) +}) + +async function waitOnL2Msg(tx: ethers.ContractTransaction) { + const retryableReceipt = await tx.wait() + const l1TxReceipt = new L1TransactionReceipt(retryableReceipt) + const messages = await l1TxReceipt.getL1ToL2Messages(l2Provider) + + // 1 msg expected + const messageResult = await messages[0].waitForStatus() + const status = messageResult.status + expect(status).to.be.eq(L1ToL2MessageStatus.REDEEMED) +} diff --git a/yarn.lock b/yarn.lock index 824e092e..f83dbf09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,16 @@ resolved "https://registry.yarnpkg.com/@aduh95/viz.js/-/viz.js-3.7.0.tgz#a20d86c5fc8f6abebdc39b96a4326e10375d77c0" integrity sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng== +"@arbitrum/sdk@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.3.tgz#75236043717a450b569faaa087687c51d525b0c3" + integrity sha512-Dn1or7/Guc3dItuiiWaoYQ37aCDwiWTZGPIrg4yBJW27BgiDGbo0mjPDAhKTh4p5NDOWyE8bZ0vZai86COZIUA== + dependencies: + "@ethersproject/address" "^5.0.8" + "@ethersproject/bignumber" "^5.1.1" + "@ethersproject/bytes" "^5.0.8" + ethers "^5.1.0" + "@babel/code-frame@^7.0.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -351,7 +361,7 @@ "@ethersproject/logger" "^5.6.0" "@ethersproject/rlp" "^5.6.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -412,7 +422,7 @@ "@ethersproject/logger" "^5.6.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -437,7 +447,7 @@ dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== @@ -681,6 +691,13 @@ dependencies: "@ethersproject/logger" "^5.7.0" +"@ethersproject/networks@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" @@ -794,6 +811,32 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.6.0", "@ethersproject/random@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" @@ -1031,6 +1074,17 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" @@ -4911,6 +4965,42 @@ ethers@^5.0.1, ethers@^5.0.2: "@ethersproject/web" "5.6.0" "@ethersproject/wordlists" "5.6.0" +ethers@^5.1.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + ethers@^5.5.2: version "5.6.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.4.tgz#23629e9a7d4bc5802dfb53d4da420d738744b53c" From 12a4a0270e16e596cd6f35b5234aafd305a46949 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Sun, 4 Jun 2023 19:50:07 +0200 Subject: [PATCH 013/176] Remove unnecessary CI config --- .github/workflows/contract-tests.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/contract-tests.yml b/.github/workflows/contract-tests.yml index 15384ce5..b5add914 100644 --- a/.github/workflows/contract-tests.yml +++ b/.github/workflows/contract-tests.yml @@ -13,10 +13,6 @@ jobs: test-unit: name: Test unit runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: contracts steps: - uses: actions/checkout@v3 with: From 89f12bd5b7abb46fd1982a2ca557c5124c41bdd0 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Sun, 4 Jun 2023 19:58:33 +0200 Subject: [PATCH 014/176] Format contracts --- scripts/genNetwork.ts | 2 +- src/bridge/Bridge.sol | 2 +- src/bridge/ERC20Bridge.sol | 2 +- src/bridge/ERC20Inbox.sol | 2 +- src/bridge/ERC20Outbox.sol | 2 +- src/bridge/IBridge.sol | 2 +- src/bridge/IERC20Bridge.sol | 2 +- src/bridge/IERC20Inbox.sol | 2 +- src/bridge/IEthBridge.sol | 2 +- src/bridge/IEthInbox.sol | 2 +- src/bridge/IInbox.sol | 2 +- src/bridge/Inbox.sol | 2 +- src/bridge/Outbox.sol | 2 +- src/libraries/Error.sol | 2 +- src/mocks/BridgeStub.sol | 2 +- src/mocks/InboxStub.sol | 2 +- src/mocks/SequencerInboxStub.sol | 2 +- src/rollup/AbsBridgeCreator.sol | 2 +- src/rollup/AbsRollupCreator.sol | 2 +- src/rollup/AbsRollupEventInbox.sol | 2 +- src/rollup/BridgeCreator.sol | 2 +- src/rollup/ERC20BridgeCreator.sol | 2 +- src/rollup/ERC20RollupCreator.sol | 2 +- src/rollup/ERC20RollupEventInbox.sol | 2 +- src/rollup/IBridgeCreator.sol | 2 +- src/rollup/RollupCreator.sol | 2 +- src/rollup/RollupEventInbox.sol | 2 +- src/test-helpers/BridgeTester.sol | 2 +- test/foundry/AbsRollupCreator.t.sol | 5 +---- 29 files changed, 29 insertions(+), 32 deletions(-) diff --git a/scripts/genNetwork.ts b/scripts/genNetwork.ts index ad60ae08..992e4597 100644 --- a/scripts/genNetwork.ts +++ b/scripts/genNetwork.ts @@ -14,4 +14,4 @@ async function main() { console.log('network.json updated') } -main().then(() => console.log('Done.')) \ No newline at end of file +main().then(() => console.log('Done.')) diff --git a/src/bridge/Bridge.sol b/src/bridge/Bridge.sol index 9ebb5091..ce32a17b 100644 --- a/src/bridge/Bridge.sol +++ b/src/bridge/Bridge.sol @@ -51,4 +51,4 @@ contract Bridge is AbsBridge, IEthBridge { function _baseFeeToReport() internal view override returns (uint256) { return block.basefee; } -} \ No newline at end of file +} diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol index c6f08548..5c643562 100644 --- a/src/bridge/ERC20Bridge.sol +++ b/src/bridge/ERC20Bridge.sol @@ -71,4 +71,4 @@ contract ERC20Bridge is AbsBridge, IERC20Bridge { // why baseFee is reported as 0 here. return 0; } -} \ No newline at end of file +} diff --git a/src/bridge/ERC20Inbox.sol b/src/bridge/ERC20Inbox.sol index b8dbdc5c..0a065988 100644 --- a/src/bridge/ERC20Inbox.sol +++ b/src/bridge/ERC20Inbox.sol @@ -138,4 +138,4 @@ contract ERC20Inbox is AbsInbox, IERC20Inbox { tokenAmount ); } -} \ No newline at end of file +} diff --git a/src/bridge/ERC20Outbox.sol b/src/bridge/ERC20Outbox.sol index 444e6729..e5fe31c8 100644 --- a/src/bridge/ERC20Outbox.sol +++ b/src/bridge/ERC20Outbox.sol @@ -24,4 +24,4 @@ contract ERC20Outbox is AbsOutbox { function _amountToSetInContext(uint256 value) internal pure override returns (uint256) { return value; } -} \ No newline at end of file +} diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 25267781..a84f52d9 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -97,4 +97,4 @@ interface IBridge { function setDelayedInbox(address inbox, bool enabled) external; function setOutbox(address inbox, bool enabled) external; -} \ No newline at end of file +} diff --git a/src/bridge/IERC20Bridge.sol b/src/bridge/IERC20Bridge.sol index d654b3d3..f937a1c6 100644 --- a/src/bridge/IERC20Bridge.sol +++ b/src/bridge/IERC20Bridge.sol @@ -32,4 +32,4 @@ interface IERC20Bridge is IBridge { // ---------- initializer ---------- function initialize(IOwnable rollup_, address nativeToken_) external; -} \ No newline at end of file +} diff --git a/src/bridge/IERC20Inbox.sol b/src/bridge/IERC20Inbox.sol index 5ad88a20..dd1b8390 100644 --- a/src/bridge/IERC20Inbox.sol +++ b/src/bridge/IERC20Inbox.sol @@ -72,4 +72,4 @@ interface IERC20Inbox is IInbox { uint256 tokenTotalFeeAmount, bytes calldata data ) external returns (uint256); -} \ No newline at end of file +} diff --git a/src/bridge/IEthBridge.sol b/src/bridge/IEthBridge.sol index a1b3183d..aa52d75c 100644 --- a/src/bridge/IEthBridge.sol +++ b/src/bridge/IEthBridge.sol @@ -23,4 +23,4 @@ interface IEthBridge is IBridge { // ---------- initializer ---------- function initialize(IOwnable rollup_) external; -} \ No newline at end of file +} diff --git a/src/bridge/IEthInbox.sol b/src/bridge/IEthInbox.sol index 48c1804e..dd484903 100644 --- a/src/bridge/IEthInbox.sol +++ b/src/bridge/IEthInbox.sol @@ -130,4 +130,4 @@ interface IEthInbox is IInbox { * this is used to fix the storage slots */ function postUpgradeInit(IBridge _bridge) external; -} \ No newline at end of file +} diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index b27558c4..fc0ba1a9 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -80,4 +80,4 @@ interface IInbox is IDelayedMessageProvider { // ---------- initializer ---------- function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; -} \ No newline at end of file +} diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index fd1fc704..bd37b098 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -421,4 +421,4 @@ contract Inbox is AbsInbox, IEthInbox { messageDataHash ); } -} \ No newline at end of file +} diff --git a/src/bridge/Outbox.sol b/src/bridge/Outbox.sol index 31f50eb7..d7d79ef5 100644 --- a/src/bridge/Outbox.sol +++ b/src/bridge/Outbox.sol @@ -16,4 +16,4 @@ contract Outbox is AbsOutbox { function _amountToSetInContext(uint256) internal pure override returns (uint256) { return 0; } -} \ No newline at end of file +} diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index 2d7294e7..75fa5045 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -168,4 +168,4 @@ error DataNotAuthenticated(); error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset -error NoSuchKeyset(bytes32); \ No newline at end of file +error NoSuchKeyset(bytes32); diff --git a/src/mocks/BridgeStub.sol b/src/mocks/BridgeStub.sol index 67ff03ad..96d4d65b 100644 --- a/src/mocks/BridgeStub.sol +++ b/src/mocks/BridgeStub.sol @@ -180,4 +180,4 @@ contract BridgeStub is IBridge, IEthBridge { function initialize(IOwnable) external pure { revert("NOT_IMPLEMENTED"); } -} \ No newline at end of file +} diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index 51767d29..dd9d4417 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -202,4 +202,4 @@ contract InboxStub is IInbox, IEthInbox { function allowListEnabled() external pure returns (bool) { revert("NOT_IMPLEMENTED"); } -} \ No newline at end of file +} diff --git a/src/mocks/SequencerInboxStub.sol b/src/mocks/SequencerInboxStub.sol index 85a2c2ab..601ed119 100644 --- a/src/mocks/SequencerInboxStub.sol +++ b/src/mocks/SequencerInboxStub.sol @@ -52,4 +52,4 @@ contract SequencerInboxStub is SequencerInbox { this; // silence warning about function not being view return bounds; } -} \ No newline at end of file +} diff --git a/src/rollup/AbsBridgeCreator.sol b/src/rollup/AbsBridgeCreator.sol index 0eaf16d6..4379c50a 100644 --- a/src/rollup/AbsBridgeCreator.sol +++ b/src/rollup/AbsBridgeCreator.sol @@ -114,4 +114,4 @@ abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { IOwnable rollup, address ) internal virtual; -} \ No newline at end of file +} diff --git a/src/rollup/AbsRollupCreator.sol b/src/rollup/AbsRollupCreator.sol index 54cea1b0..8dbafb2a 100644 --- a/src/rollup/AbsRollupCreator.sol +++ b/src/rollup/AbsRollupCreator.sol @@ -137,4 +137,4 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { IRollupEventInbox, Outbox ); -} \ No newline at end of file +} diff --git a/src/rollup/AbsRollupEventInbox.sol b/src/rollup/AbsRollupEventInbox.sol index 9ebe6972..be59f537 100644 --- a/src/rollup/AbsRollupEventInbox.sol +++ b/src/rollup/AbsRollupEventInbox.sol @@ -47,4 +47,4 @@ abstract contract AbsRollupEventInbox is } function _enqueueInitializationMsg(bytes memory initMsg) internal virtual returns (uint256); -} \ No newline at end of file +} diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index e773e43c..966e624b 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -41,4 +41,4 @@ contract BridgeCreator is AbsBridgeCreator, IEthBridgeCreator { ) internal override { IEthBridge(address(bridge)).initialize(IOwnable(rollup)); } -} \ No newline at end of file +} diff --git a/src/rollup/ERC20BridgeCreator.sol b/src/rollup/ERC20BridgeCreator.sol index 9f451ce4..5d83e0b3 100644 --- a/src/rollup/ERC20BridgeCreator.sol +++ b/src/rollup/ERC20BridgeCreator.sol @@ -45,4 +45,4 @@ contract ERC20BridgeCreator is AbsBridgeCreator, IERC20BridgeCreator { ) internal override { IERC20Bridge(address(bridge)).initialize(IOwnable(rollup), nativeToken); } -} \ No newline at end of file +} diff --git a/src/rollup/ERC20RollupCreator.sol b/src/rollup/ERC20RollupCreator.sol index 45d0fc46..ceebd917 100644 --- a/src/rollup/ERC20RollupCreator.sol +++ b/src/rollup/ERC20RollupCreator.sol @@ -47,4 +47,4 @@ contract ERC20RollupCreator is AbsRollupCreator, IERC20RollupCreator { maxTimeVariation ); } -} \ No newline at end of file +} diff --git a/src/rollup/ERC20RollupEventInbox.sol b/src/rollup/ERC20RollupEventInbox.sol index c9f4e28f..20451f34 100644 --- a/src/rollup/ERC20RollupEventInbox.sol +++ b/src/rollup/ERC20RollupEventInbox.sol @@ -23,4 +23,4 @@ contract ERC20RollupEventInbox is AbsRollupEventInbox { tokenAmount ); } -} \ No newline at end of file +} diff --git a/src/rollup/IBridgeCreator.sol b/src/rollup/IBridgeCreator.sol index e938f0e2..f03e2a0e 100644 --- a/src/rollup/IBridgeCreator.sol +++ b/src/rollup/IBridgeCreator.sol @@ -61,4 +61,4 @@ interface IERC20BridgeCreator is IBridgeCreator { IRollupEventInbox, Outbox ); -} \ No newline at end of file +} diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index faa46237..17ff8196 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -42,4 +42,4 @@ contract RollupCreator is AbsRollupCreator, IEthRollupCreator { maxTimeVariation ); } -} \ No newline at end of file +} diff --git a/src/rollup/RollupEventInbox.sol b/src/rollup/RollupEventInbox.sol index e59394df..5b552aa5 100644 --- a/src/rollup/RollupEventInbox.sol +++ b/src/rollup/RollupEventInbox.sol @@ -21,4 +21,4 @@ contract RollupEventInbox is AbsRollupEventInbox { keccak256(initMsg) ); } -} \ No newline at end of file +} diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index e0f742f6..9a680f44 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -237,4 +237,4 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge, IEthBridge { receive() external payable {} function acceptFundsFromOldBridge() external payable {} -} \ No newline at end of file +} diff --git a/test/foundry/AbsRollupCreator.t.sol b/test/foundry/AbsRollupCreator.t.sol index ccaa4d38..214fe73b 100644 --- a/test/foundry/AbsRollupCreator.t.sol +++ b/test/foundry/AbsRollupCreator.t.sol @@ -21,10 +21,7 @@ abstract contract AbsRollupCreatorTest is Test { address public rollupOwner = address(4400); address public deployer = address(4300); - function _prepareRollupDeployment( - address rollupCreator, - Config memory config - ) + function _prepareRollupDeployment(address rollupCreator, Config memory config) internal returns ( IOneStepProofEntry ospEntry, From d9426288c08c13a4caaa29619fac440c3c0dcf1e Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 5 Jun 2023 14:26:21 +0200 Subject: [PATCH 015/176] Add gap variables to AbsBridge --- src/bridge/AbsBridge.sol | 7 +++++++ test/storage/Bridge.dot | 17 ++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index 5936e57a..438c4341 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -292,4 +292,11 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { /// @dev get base fee which is emitted in `MessageDelivered` event and then picked up and /// used in ArbOs to calculate the submission fee for retryable ticket function _baseFeeToReport() internal view virtual returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; } diff --git a/test/storage/Bridge.dot b/test/storage/Bridge.dot index acf81bc6..a7fc3978 100644 --- a/test/storage/Bridge.dot +++ b/test/storage/Bridge.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) }}}"] +8 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11-60 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) } | { <71> uint256[50]: AbsBridge.__gap (1600) }}}"] 1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] @@ -18,10 +18,13 @@ node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] 6 [label="bytes32[]: sequencerInboxAccs \<\\>\n0x995663702627f3d8fc4237c51a46b303536bb17f3f65e07c08ad05fecbf4d88e | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] - 7:5 -> 1 - 7:8 -> 2 - 7:10 -> 3 - 7:12 -> 4 - 7:15 -> 5 - 7:17 -> 6 +7 [label="uint256[50]: __gap \<\\>\n | {{ slot| 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] + + 8:5 -> 1 + 8:8 -> 2 + 8:10 -> 3 + 8:12 -> 4 + 8:15 -> 5 + 8:17 -> 6 + 8:71 -> 7 } \ No newline at end of file From 17a08edd7bd12a1c627f0a0ef86907aa2db22e7a Mon Sep 17 00:00:00 2001 From: fredlacs <32464905+fredlacs@users.noreply.github.com> Date: Mon, 12 Jun 2023 19:58:34 -0300 Subject: [PATCH 016/176] Update RollupEventInbox.sol (#21) --- src/rollup/RollupEventInbox.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rollup/RollupEventInbox.sol b/src/rollup/RollupEventInbox.sol index 9d7353fc..ba63a95b 100644 --- a/src/rollup/RollupEventInbox.sol +++ b/src/rollup/RollupEventInbox.sol @@ -36,7 +36,8 @@ contract RollupEventInbox is IRollupEventInbox, IDelayedMessageProvider, Delegat onlyRollup { require(bytes(chainConfig).length > 0, "EMPTY_CHAIN_CONFIG"); - bytes memory initMsg = abi.encodePacked(chainId, uint8(0), chainConfig); + uint8 initMsgVersion = 0; + bytes memory initMsg = abi.encodePacked(chainId, initMsgVersion, chainConfig); uint256 num = bridge.enqueueDelayedMessage( INITIALIZATION_MSG_TYPE, address(0), From d807163832b06e4abf89126377d18f91069a4839 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Mon, 12 Jun 2023 19:39:22 -0700 Subject: [PATCH 017/176] format fixed --- scripts/deployment.ts | 205 +++++++++++++++++++++++------------------- 1 file changed, 113 insertions(+), 92 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index a63b2141..9aa06279 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -1,39 +1,48 @@ -import { ethers } from "hardhat"; -import { ContractFactory, Contract, providers, Wallet } from "ethers"; -import "@nomiclabs/hardhat-ethers"; +import { ethers } from 'hardhat' +import { ContractFactory, Contract, providers, Wallet } from 'ethers' +import '@nomiclabs/hardhat-ethers' - -async function deployContract(contractName: string, signer: any): Promise { - const factory: ContractFactory = await ethers.getContractFactory(contractName); - const connectedFactory: ContractFactory = factory.connect(signer); - const contract: Contract = await connectedFactory.deploy(); - await contract.deployTransaction.wait(); - console.log(`New ${contractName} created at address:`, contract.address); - return contract; +async function deployContract( + contractName: string, + signer: any +): Promise { + const factory: ContractFactory = await ethers.getContractFactory(contractName) + const connectedFactory: ContractFactory = factory.connect(signer) + const contract: Contract = await connectedFactory.deploy() + await contract.deployTransaction.wait() + console.log(`New ${contractName} created at address:`, contract.address) + return contract } -async function deployAllContracts(signer: any): Promise> { - const bridgeCreator = await deployContract("BridgeCreator", signer); - const prover0 = await deployContract("OneStepProver0", signer); - const proverMem = await deployContract("OneStepProverMemory", signer); - const proverMath = await deployContract("OneStepProverMath", signer); - const proverHostIo = await deployContract("OneStepProverHostIo", signer); - const OneStepProofEntryFactory: ContractFactory = await ethers.getContractFactory("OneStepProofEntry"); - const OneStepProofEntryFactoryWithDeployer: ContractFactory = OneStepProofEntryFactory.connect(signer); +async function deployAllContracts( + signer: any +): Promise> { + const bridgeCreator = await deployContract('BridgeCreator', signer) + const prover0 = await deployContract('OneStepProver0', signer) + const proverMem = await deployContract('OneStepProverMemory', signer) + const proverMath = await deployContract('OneStepProverMath', signer) + const proverHostIo = await deployContract('OneStepProverHostIo', signer) + const OneStepProofEntryFactory: ContractFactory = + await ethers.getContractFactory('OneStepProofEntry') + const OneStepProofEntryFactoryWithDeployer: ContractFactory = + OneStepProofEntryFactory.connect(signer) const osp: Contract = await OneStepProofEntryFactoryWithDeployer.deploy( prover0.address, proverMem.address, proverMath.address, proverHostIo.address - ); - await osp.deployTransaction.wait(); - console.log("New osp created at address:", osp.address); - const challengeManager = await deployContract("ChallengeManager", signer); - const rollupAdmin = await deployContract("RollupAdminLogic", signer); - const rollupUser = await deployContract("RollupUserLogic", signer); - const validatorUtils = await deployContract("ValidatorUtils", signer); - const validatorWalletCreator = await deployContract("ValidatorWalletCreator", signer); - const rollupCreator = await deployContract("RollupCreator", signer); + ) + await osp.deployTransaction.wait() + console.log('New osp created at address:', osp.address) + const challengeManager = await deployContract('ChallengeManager', signer) + const rollupAdmin = await deployContract('RollupAdminLogic', signer) + const rollupUser = await deployContract('RollupUserLogic', signer) + const validatorUtils = await deployContract('ValidatorUtils', signer) + const validatorWalletCreator = await deployContract( + 'ValidatorWalletCreator', + signer + ) + const rollupCreator = await deployContract('RollupCreator', signer) return { bridgeCreator, prover0, @@ -47,35 +56,33 @@ async function deployAllContracts(signer: any): Promise validatorUtils, validatorWalletCreator, rollupCreator, - }; + } } async function main() { - // Get the private key and RPC to deploy the contract - const privateKey = process.env.PRIVATE_KEY; + const privateKey = process.env.PRIVATE_KEY if (!privateKey) { - throw new Error("Private key is not defined"); + throw new Error('Private key is not defined') } - const providerAPI = process.env.RPC_URL; + const providerAPI = process.env.RPC_URL if (!providerAPI) { - throw new Error("RPC URL is not defined"); + throw new Error('RPC URL is not defined') } const provider = new providers.JsonRpcProvider(providerAPI) const signer = new Wallet(privateKey, provider) try { - // Deploying all contracts - const contracts = await deployAllContracts(signer); - - /* - * Call setTemplates with the deployed contract addresses - * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error - */ - console.log("Waiting for the Template to be set on the Rollup Creator") + const contracts = await deployAllContracts(signer) + + /* + * Call setTemplates with the deployed contract addresses + * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error + */ + console.log('Waiting for the Template to be set on the Rollup Creator') await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, contracts.osp.address, @@ -83,22 +90,23 @@ async function main() { contracts.rollupAdmin.address, contracts.rollupUser.address, contracts.validatorUtils.address, - contracts.validatorWalletCreator.address - , {gasLimit: ethers.BigNumber.from("15000000")} - ); - console.log("Template is set on the Rollup Creator") + contracts.validatorWalletCreator.address, + { gasLimit: ethers.BigNumber.from('15000000') } + ) + console.log('Template is set on the Rollup Creator') // Define the configuration for the createRollup function const rollupConfig = { confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 0, stakeToken: ethers.constants.AddressZero, - baseStake: ethers.utils.parseEther("1"), - wasmModuleRoot: "0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21", + baseStake: ethers.utils.parseEther('1'), + wasmModuleRoot: + '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', owner: signer.address, loserStakeEscrow: ethers.constants.AddressZero, - chainId: 421613, - chainConfig:ethers.constants.HashZero, + chainId: 1337, + chainConfig: ethers.constants.HashZero, genesisBlockNum: 0, sequencerInboxMaxTimeVariation: { delayBlocks: 16, @@ -106,51 +114,64 @@ async function main() { delaySeconds: 86400, futureSeconds: 7200, }, - }; - + } - /* - * Call the createRollup function - * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error - */ - console.log("Calling createRollup to generate a new rollup ...") - const createRollupTx = await contracts.rollupCreator.createRollup(rollupConfig, {gasLimit: ethers.BigNumber.from("15000000")}); - const createRollupReceipt = await createRollupTx.wait(); + /* + * Call the createRollup function + * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error + */ + console.log('Calling createRollup to generate a new rollup ...') + const createRollupTx = await contracts.rollupCreator.createRollup( + rollupConfig, + { gasLimit: ethers.BigNumber.from('15000000') } + ) + const createRollupReceipt = await createRollupTx.wait() const rollupCreatedEvent = createRollupReceipt.events?.find( - (event: { event: string }) => event.event === "RollupCreated" - ); + (event: { event: string }) => event.event === 'RollupCreated' + ) - //Checking for RollupCreated event for new rollup address - if (rollupCreatedEvent) { - const rollupAddress = rollupCreatedEvent.args?.rollupAddress; - const inboxAddress = rollupCreatedEvent.args?.inboxAddress; - const adminProxy = rollupCreatedEvent.args?.adminProxy; - const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox; - const bridge = rollupCreatedEvent.args?.bridge; - console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:"); - console.log("Rollup Contract created at address:", rollupAddress); - console.log("Inbox Contract created at address:", inboxAddress); - console.log("Admin Proxy Contract created at address:", adminProxy); - console.log("Sequencer Contract Inbox created at address:", sequencerInbox); - console.log("Bridge Contract created at address:", bridge); - console.log("Utils Contract created at address:",contracts.validatorUtils.address); - console.log("ValidatorWalletCreator Contract created at address:",contracts.validatorWalletCreator.address); + //Checking for RollupCreated event for new rollup address + if (rollupCreatedEvent) { + const rollupAddress = rollupCreatedEvent.args?.rollupAddress + const inboxAddress = rollupCreatedEvent.args?.inboxAddress + const adminProxy = rollupCreatedEvent.args?.adminProxy + const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox + const bridge = rollupCreatedEvent.args?.bridge + console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") + console.log('Rollup Contract created at address:', rollupAddress) + console.log('Inbox Contract created at address:', inboxAddress) + console.log('Admin Proxy Contract created at address:', adminProxy) + console.log( + 'Sequencer Contract Inbox created at address:', + sequencerInbox + ) + console.log('Bridge Contract created at address:', bridge) + console.log( + 'Utils Contract created at address:', + contracts.validatorUtils.address + ) + console.log( + 'ValidatorWalletCreator Contract created at address:', + contracts.validatorWalletCreator.address + ) - // getting the block number - const blockNumber = createRollupReceipt.blockNumber; - console.log("All deployed at block number:", blockNumber); - } else { - console.error("RollupCreated event not found"); - } - - } catch (error) { - console.error("Deployment failed:", error instanceof Error ? error.message : error); + // getting the block number + const blockNumber = createRollupReceipt.blockNumber + console.log('All deployed at block number:', blockNumber) + } else { + console.error('RollupCreated event not found') } + } catch (error) { + console.error( + 'Deployment failed:', + error instanceof Error ? error.message : error + ) } - - main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error); - process.exit(1); - }); \ No newline at end of file +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) From 35907b76cff38cd321452126e11a276a68c2d4df Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 14 Jun 2023 10:40:29 -0700 Subject: [PATCH 018/176] add check for event address --- scripts/deployment.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 9aa06279..678af548 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -2,6 +2,19 @@ import { ethers } from 'hardhat' import { ContractFactory, Contract, providers, Wallet } from 'ethers' import '@nomiclabs/hardhat-ethers' +interface RollupCreatedEvent { + event: string; + address: string; + args?: { + rollupAddress: string; + inboxAddress: string; + adminProxy: string; + sequencerInbox: string; + bridge: string; + }; +} + + async function deployContract( contractName: string, signer: any @@ -126,10 +139,10 @@ async function main() { { gasLimit: ethers.BigNumber.from('15000000') } ) const createRollupReceipt = await createRollupTx.wait() + const rollupCreatedEvent = createRollupReceipt.events?.find( - (event: { event: string }) => event.event === 'RollupCreated' + (event: RollupCreatedEvent) => event.event === 'RollupCreated' && event.address.toLowerCase() === contracts.rollupCreator.address.toLowerCase() ) - //Checking for RollupCreated event for new rollup address if (rollupCreatedEvent) { const rollupAddress = rollupCreatedEvent.args?.rollupAddress From f19657644c4126cf1192efc7c1ac6c43b6bedaa0 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 14 Jun 2023 10:56:27 -0700 Subject: [PATCH 019/176] using hardhat network and signer --- scripts/deployment.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 678af548..2a3af695 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -73,19 +73,8 @@ async function deployAllContracts( } async function main() { - // Get the private key and RPC to deploy the contract - const privateKey = process.env.PRIVATE_KEY - if (!privateKey) { - throw new Error('Private key is not defined') - } - - const providerAPI = process.env.RPC_URL - if (!providerAPI) { - throw new Error('RPC URL is not defined') - } - const provider = new providers.JsonRpcProvider(providerAPI) - const signer = new Wallet(privateKey, provider) + const [signer] = await ethers.getSigners() try { // Deploying all contracts From a24e89c9f696d6e9a632a9e40d833ee7a650de7f Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 14 Jun 2023 11:07:16 -0700 Subject: [PATCH 020/176] adding sepolia --- hardhat.config.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hardhat.config.ts b/hardhat.config.ts index 89fbc7a6..76929c70 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -88,6 +88,12 @@ module.exports = { ? [process.env['DEVNET_PRIVKEY']] : [], }, + sepolia: { + url: 'https://sepolia.infura.io/v3/' + process.env['INFURA_KEY'], + accounts: process.env['DEVNET_PRIVKEY'] + ? [process.env['DEVNET_PRIVKEY']] + : [], + }, rinkeby: { url: 'https://rinkeby.infura.io/v3/' + process.env['INFURA_KEY'], accounts: process.env['DEVNET_PRIVKEY'] @@ -126,6 +132,7 @@ module.exports = { apiKey: { mainnet: process.env['ETHERSCAN_API_KEY'], goerli: process.env['ETHERSCAN_API_KEY'], + sepolia: process.env['ETHERSCAN_API_KEY'], rinkeby: process.env['ETHERSCAN_API_KEY'], arbitrumOne: process.env['ARBISCAN_API_KEY'], arbitrumTestnet: process.env['ARBISCAN_API_KEY'], From 8c92856808a8bad4e4048f5f35f94f0cdc7a38bd Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 14 Jun 2023 11:18:37 -0700 Subject: [PATCH 021/176] adding outbox address --- scripts/deployment.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 2a3af695..a6936aff 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -1,5 +1,5 @@ import { ethers } from 'hardhat' -import { ContractFactory, Contract, providers, Wallet } from 'ethers' +import { ContractFactory, Contract} from 'ethers' import '@nomiclabs/hardhat-ethers' interface RollupCreatedEvent { @@ -156,6 +156,10 @@ async function main() { 'ValidatorWalletCreator Contract created at address:', contracts.validatorWalletCreator.address ) + console.log( + 'outbox Contract created at address:', + await contracts.rollup.outbox() + ) // getting the block number const blockNumber = createRollupReceipt.blockNumber From b2dce25a60464d05d05bba1eda71363c905a6488 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Thu, 15 Jun 2023 11:46:32 -0700 Subject: [PATCH 022/176] editing stuff --- scripts/deployment.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index a6936aff..31d627b9 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -1,5 +1,5 @@ import { ethers } from 'hardhat' -import { ContractFactory, Contract} from 'ethers' +import { ContractFactory, Contract } from 'ethers' import '@nomiclabs/hardhat-ethers' interface RollupCreatedEvent { @@ -156,10 +156,6 @@ async function main() { 'ValidatorWalletCreator Contract created at address:', contracts.validatorWalletCreator.address ) - console.log( - 'outbox Contract created at address:', - await contracts.rollup.outbox() - ) // getting the block number const blockNumber = createRollupReceipt.blockNumber From e32dc9b655bc159c1dd1bbdc73f0afad606145a6 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 16 Jun 2023 10:42:41 -0600 Subject: [PATCH 023/176] Include L1 gas charges in L3 batch posting reports --- src/bridge/SequencerInbox.sol | 11 +++++++++++ src/libraries/ArbitrumChecker.sol | 16 ++++++++++++++++ src/rollup/RollupCore.sol | 10 ++-------- 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/libraries/ArbitrumChecker.sol diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index c95cd70b..1698e115 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -27,10 +27,12 @@ import "./IInbox.sol"; import "./ISequencerInbox.sol"; import "../rollup/IRollupLogic.sol"; import "./Messages.sol"; +import "../precompiles/ArbGasInfo.sol"; import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; import {GasRefundEnabled, IGasRefunder} from "../libraries/IGasRefunder.sol"; import "../libraries/DelegateCallAware.sol"; +import "../libraries/ArbitrumChecker.sol"; import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; /** @@ -66,6 +68,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox mapping(address => bool) public isSequencer; + // If the chain this SequencerInbox is deployed on is an Arbitrum chain. + bool internal immutable hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum(); + function _chainIdChanged() internal view returns (bool) { return deployTimeChainId != block.chainid; } @@ -394,6 +399,12 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox seqMessageIndex, block.basefee ); + if (hostChainIsArbitrum) { + // Include extra gas for the host chain's L1 gas charging + uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); + uint64 extraGas = uint64(l1Fees / block.basefee); + spendingReportMsg = abi.encodePacked(spendingReportMsg, extraGas); + } uint256 msgNum = bridge.submitBatchSpendingReport( batchPoster, keccak256(spendingReportMsg) diff --git a/src/libraries/ArbitrumChecker.sol b/src/libraries/ArbitrumChecker.sol new file mode 100644 index 00000000..714c4e75 --- /dev/null +++ b/src/libraries/ArbitrumChecker.sol @@ -0,0 +1,16 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import "../precompiles/ArbSys.sol"; + +library ArbitrumChecker { + function runningOnArbitrum() internal view returns (bool) { + (bool ok, bytes memory data) = address(100).staticcall( + abi.encodeWithSelector(ArbSys.arbOSVersion.selector) + ); + return ok && data.length == 32; + } +} diff --git a/src/rollup/RollupCore.sol b/src/rollup/RollupCore.sol index ec417596..d12fb149 100644 --- a/src/rollup/RollupCore.sol +++ b/src/rollup/RollupCore.sol @@ -19,6 +19,7 @@ import "../bridge/IOutbox.sol"; import "../precompiles/ArbSys.sol"; +import "../libraries/ArbitrumChecker.sol"; import {NO_CHAL_INDEX} from "../libraries/Constants.sol"; abstract contract RollupCore is IRollupCore, PausableUpgradeable { @@ -78,17 +79,10 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable { bool public validatorWhitelistDisabled; // If the chain this RollupCore is deployed on is an Arbitrum chain. - bool internal immutable _hostChainIsArbitrum; + bool internal immutable _hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum(); // If the chain RollupCore is deployed on, this will contain the ArbSys.blockNumber() at each node's creation. mapping(uint64 => uint256) internal _nodeCreatedAtArbSysBlock; - constructor() { - (bool ok, bytes memory data) = address(100).staticcall( - abi.encodeWithSelector(ArbSys.arbOSVersion.selector) - ); - _hostChainIsArbitrum = ok && data.length == 32; - } - /** * @notice Get a storage reference to the Node for the given node index * @param nodeNum Index of the node From 5eb3ff91b009263004167230895387dcb30965d6 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 16 Jun 2023 13:05:54 -0600 Subject: [PATCH 024/176] Wrap in L1 cost to data gas cost --- src/bridge/SequencerInbox.sol | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 1698e115..b0c88a32 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -392,19 +392,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox // this msg isn't included in the current sequencer batch, but instead added to // the delayed messages queue that is yet to be included address batchPoster = msg.sender; + uint256 dataCost = block.basefee; + if (hostChainIsArbitrum) { + // Include extra cost for the host chain's L1 gas charging + dataCost += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate(); + } bytes memory spendingReportMsg = abi.encodePacked( block.timestamp, batchPoster, dataHash, seqMessageIndex, - block.basefee + dataCost ); - if (hostChainIsArbitrum) { - // Include extra gas for the host chain's L1 gas charging - uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); - uint64 extraGas = uint64(l1Fees / block.basefee); - spendingReportMsg = abi.encodePacked(spendingReportMsg, extraGas); - } uint256 msgNum = bridge.submitBatchSpendingReport( batchPoster, keccak256(spendingReportMsg) From 51cd55901676ec998c5260f779c385b77855d817 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Fri, 16 Jun 2023 13:08:35 -0600 Subject: [PATCH 025/176] Include the current data cost in the init message --- src/rollup/RollupEventInbox.sol | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/rollup/RollupEventInbox.sol b/src/rollup/RollupEventInbox.sol index ba63a95b..3a56288d 100644 --- a/src/rollup/RollupEventInbox.sol +++ b/src/rollup/RollupEventInbox.sol @@ -7,7 +7,9 @@ pragma solidity ^0.8.0; import "./IRollupEventInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IDelayedMessageProvider.sol"; +import "../precompiles/ArbGasInfo.sol"; import "../libraries/DelegateCallAware.sol"; +import "../libraries/ArbitrumChecker.sol"; import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; import {AlreadyInit, HadZeroInit} from "../libraries/Error.sol"; @@ -36,8 +38,17 @@ contract RollupEventInbox is IRollupEventInbox, IDelayedMessageProvider, Delegat onlyRollup { require(bytes(chainConfig).length > 0, "EMPTY_CHAIN_CONFIG"); - uint8 initMsgVersion = 0; - bytes memory initMsg = abi.encodePacked(chainId, initMsgVersion, chainConfig); + uint8 initMsgVersion = 1; + uint256 currentDataCost = block.basefee; + if (ArbitrumChecker.runningOnArbitrum()) { + currentDataCost += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate(); + } + bytes memory initMsg = abi.encodePacked( + chainId, + initMsgVersion, + currentDataCost, + chainConfig + ); uint256 num = bridge.enqueueDelayedMessage( INITIALIZATION_MSG_TYPE, address(0), From 28365549c842e757e9f5d92b2258979926550f49 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Mon, 19 Jun 2023 13:03:35 -0600 Subject: [PATCH 026/176] Track L1 gas separately from basefee in batch posting report --- src/bridge/SequencerInbox.sol | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index b0c88a32..1698e115 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -392,18 +392,19 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox // this msg isn't included in the current sequencer batch, but instead added to // the delayed messages queue that is yet to be included address batchPoster = msg.sender; - uint256 dataCost = block.basefee; - if (hostChainIsArbitrum) { - // Include extra cost for the host chain's L1 gas charging - dataCost += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate(); - } bytes memory spendingReportMsg = abi.encodePacked( block.timestamp, batchPoster, dataHash, seqMessageIndex, - dataCost + block.basefee ); + if (hostChainIsArbitrum) { + // Include extra gas for the host chain's L1 gas charging + uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); + uint64 extraGas = uint64(l1Fees / block.basefee); + spendingReportMsg = abi.encodePacked(spendingReportMsg, extraGas); + } uint256 msgNum = bridge.submitBatchSpendingReport( batchPoster, keccak256(spendingReportMsg) From 1b10711dc5f2eeefebc8c9f07d5c5f580534f703 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Tue, 20 Jun 2023 09:43:13 -0600 Subject: [PATCH 027/176] Address PR comments --- src/bridge/SequencerInbox.sol | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 1698e115..9b28ef41 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -392,18 +392,28 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox // this msg isn't included in the current sequencer batch, but instead added to // the delayed messages queue that is yet to be included address batchPoster = msg.sender; - bytes memory spendingReportMsg = abi.encodePacked( - block.timestamp, - batchPoster, - dataHash, - seqMessageIndex, - block.basefee - ); + bytes memory spendingReportMsg; if (hostChainIsArbitrum) { // Include extra gas for the host chain's L1 gas charging uint256 l1Fees = ArbGasInfo(address(0x6c)).getCurrentTxL1GasFees(); - uint64 extraGas = uint64(l1Fees / block.basefee); - spendingReportMsg = abi.encodePacked(spendingReportMsg, extraGas); + uint256 extraGas = l1Fees / block.basefee; + require(extraGas <= type(uint64).max, "L1_GAS_NOT_UINT64"); + spendingReportMsg = abi.encodePacked( + block.timestamp, + batchPoster, + dataHash, + seqMessageIndex, + block.basefee, + uint64(extraGas) + ); + } else { + spendingReportMsg = abi.encodePacked( + block.timestamp, + batchPoster, + dataHash, + seqMessageIndex, + block.basefee + ); } uint256 msgNum = bridge.submitBatchSpendingReport( batchPoster, From 6a5f7bb4b562a7e667e4e18e087fefaab6714b00 Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Thu, 22 Jun 2023 12:08:29 -0600 Subject: [PATCH 028/176] Add additional redeem checks to mock Simple.sol --- src/mocks/Simple.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mocks/Simple.sol b/src/mocks/Simple.sol index 25d4b67b..3cdb99ac 100644 --- a/src/mocks/Simple.sol +++ b/src/mocks/Simple.sol @@ -30,6 +30,8 @@ contract Simple { } function incrementRedeem() external { + require(msg.sender == tx.origin, "SENDER_NOT_ORIGIN"); + require(ArbSys(address(0x64)).wasMyCallersAddressAliased(), "NOT_ALIASED"); counter++; emit RedeemedEvent(msg.sender, ArbRetryableTx(address(110)).getCurrentRedeemer()); } From 1a42df52086be787682372d5801bbe73394496cb Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Thu, 22 Jun 2023 23:13:24 -0700 Subject: [PATCH 029/176] changing the flow, adding verificatins, missing addresses etc. --- scripts/config.ts | 21 +++++ scripts/deployment.ts | 168 +++++++++++++++++--------------------- scripts/rollupCreation.ts | 124 ++++++++++++++++++++++++++++ 3 files changed, 221 insertions(+), 92 deletions(-) create mode 100644 scripts/config.ts create mode 100644 scripts/rollupCreation.ts diff --git a/scripts/config.ts b/scripts/config.ts new file mode 100644 index 00000000..12317532 --- /dev/null +++ b/scripts/config.ts @@ -0,0 +1,21 @@ +import { ethers } from 'ethers' + +export const rollupConfig = { + confirmPeriodBlocks: ethers.BigNumber.from(''), + extraChallengeTimeBlocks: ethers.BigNumber.from(''), + stakeToken: '', + baseStake: ethers.utils.parseEther(''), + wasmModuleRoot: + '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', + owner: '', + loserStakeEscrow: '', + chainId: ethers.BigNumber.from(''), + chainConfig: '', + genesisBlockNum: ethers.BigNumber.from(''), + sequencerInboxMaxTimeVariation: { + delayBlocks: ethers.BigNumber.from(''), + futureBlocks: ethers.BigNumber.from(''), + delaySeconds: ethers.BigNumber.from(''), + futureSeconds: ethers.BigNumber.from(''), + }, +} diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 31d627b9..9a5bf94f 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -1,32 +1,62 @@ import { ethers } from 'hardhat' import { ContractFactory, Contract } from 'ethers' import '@nomiclabs/hardhat-ethers' +import { run } from 'hardhat' -interface RollupCreatedEvent { - event: string; - address: string; - args?: { - rollupAddress: string; - inboxAddress: string; - adminProxy: string; - sequencerInbox: string; - bridge: string; - }; -} +// Define a verification function +async function verifyContract( + contractName: string, + contractAddress: string, + constructorArguments: any[] = [], + contractPathAndName?: string // optional +): Promise { + try { + // Define the verification options with possible 'contract' property + const verificationOptions: { + contract?: string + address: string + constructorArguments: any[] + } = { + address: contractAddress, + constructorArguments: constructorArguments, + } + // if contractPathAndName is provided, add it to the verification options + if (contractPathAndName) { + verificationOptions.contract = contractPathAndName + } + + await run('verify:verify', verificationOptions) + console.log(`Verified contract ${contractName} successfully.`) + } catch (error: any) { + if (error.message.includes('Already Verified')) { + console.log(`Contract ${contractName} is already verified.`) + } else { + console.error( + `Verification for ${contractName} failed with the following error: ${error.message}` + ) + } + } +} +// Function to handle contract deployment async function deployContract( contractName: string, - signer: any + signer: any, + constructorArgs: any[] = [] ): Promise { const factory: ContractFactory = await ethers.getContractFactory(contractName) const connectedFactory: ContractFactory = factory.connect(signer) - const contract: Contract = await connectedFactory.deploy() + const contract: Contract = await connectedFactory.deploy(...constructorArgs) await contract.deployTransaction.wait() console.log(`New ${contractName} created at address:`, contract.address) + + await verifyContract(contractName, contract.address, constructorArgs) + return contract } +// Function to handle all deployments of core contracts using deployContract function async function deployAllContracts( signer: any ): Promise> { @@ -35,18 +65,12 @@ async function deployAllContracts( const proverMem = await deployContract('OneStepProverMemory', signer) const proverMath = await deployContract('OneStepProverMath', signer) const proverHostIo = await deployContract('OneStepProverHostIo', signer) - const OneStepProofEntryFactory: ContractFactory = - await ethers.getContractFactory('OneStepProofEntry') - const OneStepProofEntryFactoryWithDeployer: ContractFactory = - OneStepProofEntryFactory.connect(signer) - const osp: Contract = await OneStepProofEntryFactoryWithDeployer.deploy( + const osp: Contract = await deployContract('OneStepProofEntry', signer, [ prover0.address, proverMem.address, proverMath.address, - proverHostIo.address - ) - await osp.deployTransaction.wait() - console.log('New osp created at address:', osp.address) + proverHostIo.address, + ]) const challengeManager = await deployContract('ChallengeManager', signer) const rollupAdmin = await deployContract('RollupAdminLogic', signer) const rollupUser = await deployContract('RollupUserLogic', signer) @@ -73,17 +97,13 @@ async function deployAllContracts( } async function main() { - const [signer] = await ethers.getSigners() try { // Deploying all contracts const contracts = await deployAllContracts(signer) - /* - * Call setTemplates with the deployed contract addresses - * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error - */ + // Call setTemplates with the deployed contract addresses console.log('Waiting for the Template to be set on the Rollup Creator') await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, @@ -92,77 +112,41 @@ async function main() { contracts.rollupAdmin.address, contracts.rollupUser.address, contracts.validatorUtils.address, - contracts.validatorWalletCreator.address, - { gasLimit: ethers.BigNumber.from('15000000') } + contracts.validatorWalletCreator.address ) console.log('Template is set on the Rollup Creator') - // Define the configuration for the createRollup function - const rollupConfig = { - confirmPeriodBlocks: 20, - extraChallengeTimeBlocks: 0, - stakeToken: ethers.constants.AddressZero, - baseStake: ethers.utils.parseEther('1'), - wasmModuleRoot: - '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', - owner: signer.address, - loserStakeEscrow: ethers.constants.AddressZero, - chainId: 1337, - chainConfig: ethers.constants.HashZero, - genesisBlockNum: 0, - sequencerInboxMaxTimeVariation: { - delayBlocks: 16, - futureBlocks: 192, - delaySeconds: 86400, - futureSeconds: 7200, - }, - } + const bridgeAddress = await contracts.bridgeCreator.bridgeTemplate() + const sequencerInboxAddress = + await contracts.bridgeCreator.sequencerInboxTemplate() + const inboxAddress = await contracts.bridgeCreator.inboxTemplate() + const outboxAddress = await contracts.bridgeCreator.outboxTemplate() - /* - * Call the createRollup function - * Adding 15 million gas limit otherwise it'll be reverted with "gas exceeds block gas limit" error - */ - console.log('Calling createRollup to generate a new rollup ...') - const createRollupTx = await contracts.rollupCreator.createRollup( - rollupConfig, - { gasLimit: ethers.BigNumber.from('15000000') } + console.log( + `"bridge implementation contract" created at address:`, + bridgeAddress ) - const createRollupReceipt = await createRollupTx.wait() - - const rollupCreatedEvent = createRollupReceipt.events?.find( - (event: RollupCreatedEvent) => event.event === 'RollupCreated' && event.address.toLowerCase() === contracts.rollupCreator.address.toLowerCase() + await verifyContract( + 'Bridge', + bridgeAddress, + [], + 'src/bridge/Bridge.sol:Bridge' ) - //Checking for RollupCreated event for new rollup address - if (rollupCreatedEvent) { - const rollupAddress = rollupCreatedEvent.args?.rollupAddress - const inboxAddress = rollupCreatedEvent.args?.inboxAddress - const adminProxy = rollupCreatedEvent.args?.adminProxy - const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox - const bridge = rollupCreatedEvent.args?.bridge - console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") - console.log('Rollup Contract created at address:', rollupAddress) - console.log('Inbox Contract created at address:', inboxAddress) - console.log('Admin Proxy Contract created at address:', adminProxy) - console.log( - 'Sequencer Contract Inbox created at address:', - sequencerInbox - ) - console.log('Bridge Contract created at address:', bridge) - console.log( - 'Utils Contract created at address:', - contracts.validatorUtils.address - ) - console.log( - 'ValidatorWalletCreator Contract created at address:', - contracts.validatorWalletCreator.address - ) - - // getting the block number - const blockNumber = createRollupReceipt.blockNumber - console.log('All deployed at block number:', blockNumber) - } else { - console.error('RollupCreated event not found') - } + console.log( + `"sequencerInbox implementation contract" created at address:`, + sequencerInboxAddress + ) + await verifyContract('SequencerInbox', sequencerInboxAddress, []) + console.log( + `"inbox implementation contract" created at address:`, + inboxAddress + ) + await verifyContract('Inbox', inboxAddress, []) + console.log( + `"outbox implementation contract" created at address:`, + outboxAddress + ) + await verifyContract('Outbox', outboxAddress, []) } catch (error) { console.error( 'Deployment failed:', diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts new file mode 100644 index 00000000..af6ffe26 --- /dev/null +++ b/scripts/rollupCreation.ts @@ -0,0 +1,124 @@ +import { ethers } from 'hardhat' +import '@nomiclabs/hardhat-ethers' +import { run } from 'hardhat' +import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' +import { rollupConfig } from './config' +import { abi as rollupCoreAbi } from '../build/contracts/src/rollup/RollupCore.sol/RollupCore.json' + +interface RollupCreatedEvent { + event: string + address: string + args?: { + rollupAddress: string + inboxAddress: string + adminProxy: string + sequencerInbox: string + bridge: string + } +} + +async function main() { + const rollupCreatorAddress = process.env.ROLLUP_CREATOR_ADDRESS + + if (!rollupCreatorAddress) { + console.error( + 'Please provide ROLLUP_CREATOR_ADDRESS as an environment variable.' + ) + process.exit(1) + } + + if (!rollupCreatorAbi) { + throw new Error( + 'You need to first run script to deploy and compile the contracts first' + ) + } + + const [signer] = await ethers.getSigners() + const rollupCreator = await new ethers.Contract( + rollupCreatorAddress, + rollupCreatorAbi, + signer + ) + + try { + // Call the createRollup function + console.log('Calling createRollup to generate a new rollup ...') + const createRollupTx = await rollupCreator.createRollup(rollupConfig) + const createRollupReceipt = await createRollupTx.wait() + + const rollupCreatedEvent = createRollupReceipt.events?.find( + (event: RollupCreatedEvent) => + event.event === 'RollupCreated' && + event.address.toLowerCase() === rollupCreatorAddress.toLowerCase() + ) + + // Checking for RollupCreated event for new rollup address + if (rollupCreatedEvent) { + const rollupAddress = rollupCreatedEvent.args?.rollupAddress + const inboxAddress = rollupCreatedEvent.args?.inboxAddress + const adminProxy = rollupCreatedEvent.args?.adminProxy + const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox + const bridge = rollupCreatedEvent.args?.bridge + + const rollupCore = new ethers.Contract( + rollupAddress, + rollupCoreAbi, + signer + ) + + console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") + console.log('RollupProxy Contract created at address:', rollupAddress) + console.log( + `Attempting to verify Rollup contract at address ${rollupAddress}...` + ) + try { + await run('verify:verify', { + contract: 'src/rollup/RollupProxy.sol:RollupProxy', + address: rollupAddress, + constructorArguments: [], + }) + } catch (error: any) { + if (error.message.includes('Already Verified')) { + console.log(`Contract RollupProxy is already verified.`) + } else { + console.error( + `Verification for RollupProxy failed with the following error: ${error.message}` + ) + } + } + console.log('Inbox (proxy) Contract created at address:', inboxAddress) + console.log( + 'Outbox Contract created at address:', + await rollupCore.outbox() + ) + console.log('AdminProxy Contract created at address:', adminProxy) + console.log('SequencerInbox (proxy) created at address:', sequencerInbox) + console.log('Bridge (proxy) Contract created at address:', bridge) + console.log( + 'ValidatorUtils Contract created at address:', + await rollupCore.validatorUtils() + ) + console.log( + 'ValidatorWalletCreator Contract created at address:', + await rollupCore.validatorWalletCreator() + ) + + const blockNumber = createRollupReceipt.blockNumber + console.log('All deployed at block number:', blockNumber) + } else { + console.error('RollupCreated event not found') + } + } catch (error) { + console.error( + 'Deployment failed:', + error instanceof Error ? error.message : error + ) + } +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) From b6793a6eaad668f699912d82c56f43aa01cf01e2 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 23 Jun 2023 12:01:15 -0700 Subject: [PATCH 030/176] outbox proxy fixed --- scripts/rollupCreation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index af6ffe26..d4954542 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -88,7 +88,7 @@ async function main() { } console.log('Inbox (proxy) Contract created at address:', inboxAddress) console.log( - 'Outbox Contract created at address:', + 'Outbox (proxy) Contract created at address:', await rollupCore.outbox() ) console.log('AdminProxy Contract created at address:', adminProxy) From e827007a0784f9f679ec36b5f6eeebd09ca34986 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 23 Jun 2023 13:04:58 -0700 Subject: [PATCH 031/176] populating config.ts --- scripts/config.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index 12317532..4f2fb29c 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -1,21 +1,22 @@ import { ethers } from 'ethers' export const rollupConfig = { - confirmPeriodBlocks: ethers.BigNumber.from(''), - extraChallengeTimeBlocks: ethers.BigNumber.from(''), - stakeToken: '', - baseStake: ethers.utils.parseEther(''), + confirmPeriodBlocks: ethers.BigNumber.from('45818'), + extraChallengeTimeBlocks: ethers.BigNumber.from('200'), + stakeToken: ethers.constants.AddressZero, + baseStake: ethers.utils.parseEther('1'), wasmModuleRoot: '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', - owner: '', - loserStakeEscrow: '', - chainId: ethers.BigNumber.from(''), - chainConfig: '', - genesisBlockNum: ethers.BigNumber.from(''), + owner: '0x1234123412341234123412341234123412341234', + loserStakeEscrow: ethers.constants.AddressZero, + chainId: ethers.BigNumber.from('1337'), + chainConfig: + '{"chainId":1337,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":true,"eip150Block":0,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":0,"berlinBlock":0,"londonBlock":0,"clique":{"period":0,"epoch":0},"arbitrum":{"EnableArbOS":true,"AllowDebugPrecompiles":false,"DataAvailabilityCommittee":false,"InitialArbOSVersion":10,"InitialChainOwner":"0x1234123412341234123412341234123412341234","GenesisBlockNum":0}}', + genesisBlockNum: ethers.BigNumber.from('0'), sequencerInboxMaxTimeVariation: { - delayBlocks: ethers.BigNumber.from(''), - futureBlocks: ethers.BigNumber.from(''), - delaySeconds: ethers.BigNumber.from(''), - futureSeconds: ethers.BigNumber.from(''), + delayBlocks: ethers.BigNumber.from('5760'), + futureBlocks: ethers.BigNumber.from('12'), + delaySeconds: ethers.BigNumber.from('86400'), + futureSeconds: ethers.BigNumber.from('3600'), }, } From 7b569fa1ebb7afadc74f45c179c857e3d53b46a8 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 23 Jun 2023 13:45:57 -0700 Subject: [PATCH 032/176] add config to .ignore --- .gitignore | 2 ++ scripts/{config.ts => config.ts.example} | 0 2 files changed, 2 insertions(+) rename scripts/{config.ts => config.ts.example} (100%) diff --git a/.gitignore b/.gitignore index 1cd604bb..7d9a004d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ deployments/ /test/prover/proofs/*.json /test/prover/spec-proofs/*.json /test/storage/*-old.dot +scripts/config.ts +scripts/config.ts diff --git a/scripts/config.ts b/scripts/config.ts.example similarity index 100% rename from scripts/config.ts rename to scripts/config.ts.example From 909586ea688de00b5808b5c6a44f49fd6dcddb35 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 23 Jun 2023 13:46:39 -0700 Subject: [PATCH 033/176] update .ignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7d9a004d..4d219b57 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ deployments/ /test/prover/spec-proofs/*.json /test/storage/*-old.dot scripts/config.ts -scripts/config.ts From 6a2d9e1f0356877fb8cb82d0ea12e47aa5ca55f0 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 28 Jun 2023 12:56:03 -0700 Subject: [PATCH 034/176] adding tasks to run scripts --- package.json | 5 ++++- scripts/rollupCreation.ts | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a330b882..6d5da54d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,10 @@ "build:0.7": "INTERFACE_TESTER_SOLC_VERSION=0.7.0 yarn run build", "test:compatibility": "yarn run build:0.6 && yarn run build:0.7", "test:storage": "./test/storage/test.bash", - "postinstall": "patch-package" + "postinstall": "patch-package", + "deployment": "hardhat run scripts/deployment.ts", + "rollup": "hardhat run scripts/rollupCreation.ts" + }, "dependencies": { "@openzeppelin/contracts": "4.5.0", diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index d4954542..fec50d08 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -34,6 +34,7 @@ async function main() { } const [signer] = await ethers.getSigners() + const rollupCreator = await new ethers.Contract( rollupCreatorAddress, rollupCreatorAbi, From 42691296b5ea509b0b008be8f65ffd8ea7024c2b Mon Sep 17 00:00:00 2001 From: Mehdi Salehi <61604245+GreatSoshiant@users.noreply.github.com> Date: Thu, 29 Jun 2023 08:01:57 -0700 Subject: [PATCH 035/176] Update package.json Co-authored-by: gzeon --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6d5da54d..0f6135e2 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "test:compatibility": "yarn run build:0.6 && yarn run build:0.7", "test:storage": "./test/storage/test.bash", "postinstall": "patch-package", - "deployment": "hardhat run scripts/deployment.ts", - "rollup": "hardhat run scripts/rollupCreation.ts" + "deploy-factory": "hardhat run scripts/deployment.ts", + "deploy-rollup": "hardhat run scripts/rollupCreation.ts" }, "dependencies": { From 6beb27e6bb334656fb0411e3322f0547b42476a7 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 30 Jun 2023 20:34:04 -0700 Subject: [PATCH 036/176] changing RollupCreated event adding outbox, validatorUtils and validatorWalletCreator to RollupCreated event. Also changing tests/scripts correspondingly --- scripts/rollupCreation.ts | 12 +++++++++--- src/rollup/RollupCreator.sol | 10 ++++++++-- test/contract/arbRollup.spec.ts | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index fec50d08..746f83c8 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -11,9 +11,12 @@ interface RollupCreatedEvent { args?: { rollupAddress: string inboxAddress: string + outbox: string adminProxy: string sequencerInbox: string bridge: string + validatorUtils: string + validatorWalletCreator: string } } @@ -57,9 +60,12 @@ async function main() { if (rollupCreatedEvent) { const rollupAddress = rollupCreatedEvent.args?.rollupAddress const inboxAddress = rollupCreatedEvent.args?.inboxAddress + const outbox = rollupCreatedEvent.args?.outbox const adminProxy = rollupCreatedEvent.args?.adminProxy const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox const bridge = rollupCreatedEvent.args?.bridge + const validatorUtils = rollupCreatedEvent.args?.validatorUtils + const validatorWalletCreator = rollupCreatedEvent.args?.validatorWalletCreator const rollupCore = new ethers.Contract( rollupAddress, @@ -90,18 +96,18 @@ async function main() { console.log('Inbox (proxy) Contract created at address:', inboxAddress) console.log( 'Outbox (proxy) Contract created at address:', - await rollupCore.outbox() + outbox ) console.log('AdminProxy Contract created at address:', adminProxy) console.log('SequencerInbox (proxy) created at address:', sequencerInbox) console.log('Bridge (proxy) Contract created at address:', bridge) console.log( 'ValidatorUtils Contract created at address:', - await rollupCore.validatorUtils() + validatorUtils ) console.log( 'ValidatorWalletCreator Contract created at address:', - await rollupCore.validatorWalletCreator() + validatorWalletCreator ) const blockNumber = createRollupReceipt.blockNumber diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 0d469a05..aa49acf3 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -16,9 +16,12 @@ contract RollupCreator is Ownable { event RollupCreated( address indexed rollupAddress, address inboxAddress, + address outbox, address adminProxy, address sequencerInbox, - address bridge + address bridge, + address validatorUtils, + address validatorWalletCreator ); event TemplatesUpdated(); @@ -112,9 +115,12 @@ contract RollupCreator is Ownable { emit RollupCreated( address(rollup), address(inbox), + address(outbox), address(proxyAdmin), address(sequencerInbox), - address(bridge) + address(bridge), + address(validatorUtils), + address(validatorWalletCreator) ); return address(rollup); } diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index ad71ad1e..77e4238e 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -236,7 +236,7 @@ const setup = async () => { rollupUserLogicTemplate, blockChallengeFactory: challengeManagerTemplateFac, rollupEventBridge: await rollupAdmin.rollupEventInbox(), - outbox: await rollupAdmin.outbox(), + outbox: rollupCreatedEvent.outbox, sequencerInbox: rollupCreatedEvent.sequencerInbox, delayedBridge: rollupCreatedEvent.bridge, delayedInbox: rollupCreatedEvent.inboxAddress, From c91e7d76ff56994934db1300236035e8d974e820 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Fri, 30 Jun 2023 20:35:03 -0700 Subject: [PATCH 037/176] formatting --- package.json | 1 - scripts/rollupCreation.ts | 13 ++++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 0f6135e2..152ddab6 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "postinstall": "patch-package", "deploy-factory": "hardhat run scripts/deployment.ts", "deploy-rollup": "hardhat run scripts/rollupCreation.ts" - }, "dependencies": { "@openzeppelin/contracts": "4.5.0", diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 746f83c8..468dcffb 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -65,7 +65,8 @@ async function main() { const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox const bridge = rollupCreatedEvent.args?.bridge const validatorUtils = rollupCreatedEvent.args?.validatorUtils - const validatorWalletCreator = rollupCreatedEvent.args?.validatorWalletCreator + const validatorWalletCreator = + rollupCreatedEvent.args?.validatorWalletCreator const rollupCore = new ethers.Contract( rollupAddress, @@ -94,17 +95,11 @@ async function main() { } } console.log('Inbox (proxy) Contract created at address:', inboxAddress) - console.log( - 'Outbox (proxy) Contract created at address:', - outbox - ) + console.log('Outbox (proxy) Contract created at address:', outbox) console.log('AdminProxy Contract created at address:', adminProxy) console.log('SequencerInbox (proxy) created at address:', sequencerInbox) console.log('Bridge (proxy) Contract created at address:', bridge) - console.log( - 'ValidatorUtils Contract created at address:', - validatorUtils - ) + console.log('ValidatorUtils Contract created at address:', validatorUtils) console.log( 'ValidatorWalletCreator Contract created at address:', validatorWalletCreator From 668b11a7e73058138cae747d5e474f280188e351 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Sat, 1 Jul 2023 15:18:08 -0700 Subject: [PATCH 038/176] added rollupEventInbox and challengeManager addresses to event --- scripts/rollupCreation.ts | 13 ++++++------- src/rollup/RollupCreator.sol | 4 ++++ test/contract/arbRollup.spec.ts | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 468dcffb..adf18b87 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -3,7 +3,6 @@ import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' import { rollupConfig } from './config' -import { abi as rollupCoreAbi } from '../build/contracts/src/rollup/RollupCore.sol/RollupCore.json' interface RollupCreatedEvent { event: string @@ -12,6 +11,8 @@ interface RollupCreatedEvent { rollupAddress: string inboxAddress: string outbox: string + rollupEventInbox: string + challengeManager: string adminProxy: string sequencerInbox: string bridge: string @@ -61,6 +62,8 @@ async function main() { const rollupAddress = rollupCreatedEvent.args?.rollupAddress const inboxAddress = rollupCreatedEvent.args?.inboxAddress const outbox = rollupCreatedEvent.args?.outbox + const rollupEventInbox = rollupCreatedEvent.args?.rollupEventInbox + const challengeManager = rollupCreatedEvent.args?.challengeManager const adminProxy = rollupCreatedEvent.args?.adminProxy const sequencerInbox = rollupCreatedEvent.args?.sequencerInbox const bridge = rollupCreatedEvent.args?.bridge @@ -68,12 +71,6 @@ async function main() { const validatorWalletCreator = rollupCreatedEvent.args?.validatorWalletCreator - const rollupCore = new ethers.Contract( - rollupAddress, - rollupCoreAbi, - signer - ) - console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") console.log('RollupProxy Contract created at address:', rollupAddress) console.log( @@ -96,6 +93,8 @@ async function main() { } console.log('Inbox (proxy) Contract created at address:', inboxAddress) console.log('Outbox (proxy) Contract created at address:', outbox) + console.log('rollupEventInbox (proxy) Contract created at address:', rollupEventInbox) + console.log('challengeManager (proxy) Contract created at address:', challengeManager) console.log('AdminProxy Contract created at address:', adminProxy) console.log('SequencerInbox (proxy) created at address:', sequencerInbox) console.log('Bridge (proxy) Contract created at address:', bridge) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index aa49acf3..13f6ba5a 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -17,6 +17,8 @@ contract RollupCreator is Ownable { address indexed rollupAddress, address inboxAddress, address outbox, + address rollupEventInbox, + address challengeManager, address adminProxy, address sequencerInbox, address bridge, @@ -116,6 +118,8 @@ contract RollupCreator is Ownable { address(rollup), address(inbox), address(outbox), + address(rollupEventInbox), + address(challengeManager), address(proxyAdmin), address(sequencerInbox), address(bridge), diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 77e4238e..a29e0a2a 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -18,7 +18,7 @@ import { ethers, run, network } from 'hardhat' import { Signer } from '@ethersproject/abstract-signer' import { BigNumberish, BigNumber } from '@ethersproject/bignumber' -import { BytesLike, hexConcat, zeroPad } from '@ethersproject/bytes' +import { BytesLike } from '@ethersproject/bytes' import { ContractTransaction } from '@ethersproject/contracts' import { assert, expect } from 'chai' import { From 93b0599be7e4c2c7cf13beff89db9fd37f228dd9 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 4 Jul 2023 16:48:58 +0800 Subject: [PATCH 039/176] fix: remove uniswapCreateRetryableTicket --- src/bridge/Inbox.sol | 80 +-------------------------------- src/libraries/Constants.sol | 3 -- test/contract/arbRollup.spec.ts | 77 ------------------------------- 3 files changed, 1 insertion(+), 159 deletions(-) diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index aa23d07a..9e718b66 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -35,7 +35,7 @@ import { L2MessageType_unsignedEOATx, L2MessageType_unsignedContractTx } from "../libraries/MessageTypes.sol"; -import {MAX_DATA_SIZE, UNISWAP_L1_TIMELOCK, UNISWAP_L2_FACTORY} from "../libraries/Constants.sol"; +import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; import "../precompiles/ArbSys.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; @@ -527,84 +527,6 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { ); } - /// @notice This is an one-time-exception to resolve a misconfiguration of Uniswap Arbitrum deployment - /// Only the Uniswap L1 Timelock may call this function and it is allowed to create a crosschain - /// retryable ticket without address aliasing. More info here: - /// https://gov.uniswap.org/t/consensus-check-fix-the-cross-chain-messaging-bridge-on-arbitrum/18547 - /// @dev This function will be removed in future releases - function uniswapCreateRetryableTicket( - address to, - uint256 l2CallValue, - uint256 maxSubmissionCost, - address excessFeeRefundAddress, - address callValueRefundAddress, - uint256 gasLimit, - uint256 maxFeePerGas, - bytes calldata data - ) external payable whenNotPaused onlyAllowed returns (uint256) { - // this can only be called by UNISWAP_L1_TIMELOCK - require(msg.sender == UNISWAP_L1_TIMELOCK, "NOT_UNISWAP_L1_TIMELOCK"); - // the retryable can only call UNISWAP_L2_FACTORY - require(to == UNISWAP_L2_FACTORY, "NOT_TO_UNISWAP_L2_FACTORY"); - - // ensure the user's deposit alone will make submission succeed - if (msg.value < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas)) { - revert InsufficientValue( - maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas, - msg.value - ); - } - - // if a refund address is a contract, we apply the alias to it - // so that it can access its funds on the L2 - // since the beneficiary and other refund addresses don't get rewritten by arb-os - if (AddressUpgradeable.isContract(excessFeeRefundAddress)) { - excessFeeRefundAddress = AddressAliasHelper.applyL1ToL2Alias(excessFeeRefundAddress); - } - if (AddressUpgradeable.isContract(callValueRefundAddress)) { - // this is the beneficiary. be careful since this is the address that can cancel the retryable in the L2 - callValueRefundAddress = AddressAliasHelper.applyL1ToL2Alias(callValueRefundAddress); - } - - // gas price and limit of 1 should never be a valid input, so instead they are used as - // magic values to trigger a revert in eth calls that surface data without requiring a tx trace - if (gasLimit == 1 || maxFeePerGas == 1) - revert RetryableData( - msg.sender, - to, - l2CallValue, - msg.value, - maxSubmissionCost, - excessFeeRefundAddress, - callValueRefundAddress, - gasLimit, - maxFeePerGas, - data - ); - - uint256 submissionFee = calculateRetryableSubmissionFee(data.length, block.basefee); - if (maxSubmissionCost < submissionFee) - revert InsufficientSubmissionCost(submissionFee, maxSubmissionCost); - - return - _deliverMessage( - L1MessageType_submitRetryableTx, - AddressAliasHelper.undoL1ToL2Alias(msg.sender), - abi.encodePacked( - uint256(uint160(to)), - l2CallValue, - msg.value, - maxSubmissionCost, - uint256(uint160(excessFeeRefundAddress)), - uint256(uint160(callValueRefundAddress)), - gasLimit, - maxFeePerGas, - data.length, - data - ) - ); - } - function _deliverMessage( uint8 _kind, address _sender, diff --git a/src/libraries/Constants.sol b/src/libraries/Constants.sol index 57dfec6f..d15bdf16 100644 --- a/src/libraries/Constants.sol +++ b/src/libraries/Constants.sol @@ -11,6 +11,3 @@ uint64 constant NO_CHAL_INDEX = 0; // Expected seconds per block in Ethereum PoS uint256 constant ETH_POS_BLOCK_TIME = 12; - -address constant UNISWAP_L1_TIMELOCK = 0x1a9C8182C09F50C8318d769245beA52c32BE35BC; -address constant UNISWAP_L2_FACTORY = 0x1F98431c8aD98523631AE4a59f267346ea31F984; diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index a29e0a2a..89ab50da 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -1227,81 +1227,4 @@ describe('ArbRollup', () => { ) }) - it('should fail to call uniswapCreateRetryableTicket with random signer', async function () { - const maxSubmissionCost = 10000 - await expect( - delayedInbox.uniswapCreateRetryableTicket( - ethers.constants.AddressZero, - 0, - maxSubmissionCost, - ethers.constants.AddressZero, - ethers.constants.AddressZero, - 0, - 0, - '0x', - { value: maxSubmissionCost } - ) - ).to.revertedWith('NOT_UNISWAP_L1_TIMELOCK') - }) - - it('should allow uniswap to call uniswapCreateRetryableTicket without aliasing to l2 factory only', async function () { - const uniswap_l1_timelock = '0x1a9C8182C09F50C8318d769245beA52c32BE35BC' - await network.provider.request({ - method: 'hardhat_impersonateAccount', - params: [uniswap_l1_timelock], - }) - await network.provider.send('hardhat_setBalance', [ - uniswap_l1_timelock, - '0x10000000000000000000', - ]) - const uniswap_signer = await ethers.getSigner(uniswap_l1_timelock) - const anyValue = () => true - const maxSubmissionCost = 10000 - await expect( - delayedInbox - .connect(uniswap_signer) - .uniswapCreateRetryableTicket( - ethers.constants.AddressZero, - 0, - maxSubmissionCost, - ethers.constants.AddressZero, - ethers.constants.AddressZero, - 0, - 0, - '0x', - { value: maxSubmissionCost } - ) - ).to.revertedWith('NOT_TO_UNISWAP_L2_FACTORY') - const uniswap_l2_factory = '0x1F98431c8aD98523631AE4a59f267346ea31F984' - await expect( - delayedInbox - .connect(uniswap_signer) - .uniswapCreateRetryableTicket( - uniswap_l2_factory, - 0, - maxSubmissionCost, - ethers.constants.AddressZero, - ethers.constants.AddressZero, - 0, - 0, - '0x', - { value: maxSubmissionCost } - ) - ) - .emit(bridge, 'MessageDelivered') - .withArgs( - anyValue, - anyValue, - anyValue, - anyValue, - uniswap_l1_timelock, - anyValue, - anyValue, - anyValue - ) - await network.provider.request({ - method: 'hardhat_stopImpersonatingAccount', - params: [uniswap_l1_timelock], - }) - }) }) From aa39668479154f1de3a7fa22b39580466444107a Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 4 Jul 2023 22:23:34 +0800 Subject: [PATCH 040/176] fix: format --- scripts/rollupCreation.ts | 10 ++++++++-- test/contract/arbRollup.spec.ts | 1 - 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index adf18b87..e88e2957 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -93,8 +93,14 @@ async function main() { } console.log('Inbox (proxy) Contract created at address:', inboxAddress) console.log('Outbox (proxy) Contract created at address:', outbox) - console.log('rollupEventInbox (proxy) Contract created at address:', rollupEventInbox) - console.log('challengeManager (proxy) Contract created at address:', challengeManager) + console.log( + 'rollupEventInbox (proxy) Contract created at address:', + rollupEventInbox + ) + console.log( + 'challengeManager (proxy) Contract created at address:', + challengeManager + ) console.log('AdminProxy Contract created at address:', adminProxy) console.log('SequencerInbox (proxy) created at address:', sequencerInbox) console.log('Bridge (proxy) Contract created at address:', bridge) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 89ab50da..b67a685c 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -1226,5 +1226,4 @@ describe('ArbRollup', () => { 'VALIDATOR_NOT_AFK' ) }) - }) From e44c80c01627456b427ed941a66c2be08bf1f428 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 5 Jul 2023 21:15:25 -0700 Subject: [PATCH 041/176] setting validators and batch poster on createRollup --- scripts/config.ts.example | 43 +++++++++++++++++++-------------- scripts/rollupCreation.ts | 23 +++++++++++++++--- src/rollup/RollupCreator.sol | 24 +++++++++++++++--- test/contract/arbRollup.spec.ts | 15 ++++++------ 4 files changed, 72 insertions(+), 33 deletions(-) diff --git a/scripts/config.ts.example b/scripts/config.ts.example index 4f2fb29c..7f911710 100644 --- a/scripts/config.ts.example +++ b/scripts/config.ts.example @@ -1,22 +1,29 @@ import { ethers } from 'ethers' -export const rollupConfig = { - confirmPeriodBlocks: ethers.BigNumber.from('45818'), - extraChallengeTimeBlocks: ethers.BigNumber.from('200'), - stakeToken: ethers.constants.AddressZero, - baseStake: ethers.utils.parseEther('1'), - wasmModuleRoot: - '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', - owner: '0x1234123412341234123412341234123412341234', - loserStakeEscrow: ethers.constants.AddressZero, - chainId: ethers.BigNumber.from('1337'), - chainConfig: - '{"chainId":1337,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":true,"eip150Block":0,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":0,"berlinBlock":0,"londonBlock":0,"clique":{"period":0,"epoch":0},"arbitrum":{"EnableArbOS":true,"AllowDebugPrecompiles":false,"DataAvailabilityCommittee":false,"InitialArbOSVersion":10,"InitialChainOwner":"0x1234123412341234123412341234123412341234","GenesisBlockNum":0}}', - genesisBlockNum: ethers.BigNumber.from('0'), - sequencerInboxMaxTimeVariation: { - delayBlocks: ethers.BigNumber.from('5760'), - futureBlocks: ethers.BigNumber.from('12'), - delaySeconds: ethers.BigNumber.from('86400'), - futureSeconds: ethers.BigNumber.from('3600'), +export const config = { + rollupConfig: { + confirmPeriodBlocks: ethers.BigNumber.from('45818'), + extraChallengeTimeBlocks: ethers.BigNumber.from('200'), + stakeToken: ethers.constants.AddressZero, + baseStake: ethers.utils.parseEther('1'), + wasmModuleRoot: + '0xda4e3ad5e7feacb817c21c8d0220da7650fe9051ece68a3f0b1c5d38bbb27b21', + owner: '0x1234123412341234123412341234123412341234', + loserStakeEscrow: ethers.constants.AddressZero, + chainId: ethers.BigNumber.from('13331370'), + chainConfig: + '{"chainId":13331370,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":true,"eip150Block":0,"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":0,"berlinBlock":0,"londonBlock":0,"clique":{"period":0,"epoch":0},"arbitrum":{"EnableArbOS":true,"AllowDebugPrecompiles":false,"DataAvailabilityCommittee":false,"InitialArbOSVersion":10,"InitialChainOwner":"0x1234123412341234123412341234123412341234","GenesisBlockNum":0}}', + genesisBlockNum: ethers.BigNumber.from('0'), + sequencerInboxMaxTimeVariation: { + delayBlocks: ethers.BigNumber.from('5760'), + futureBlocks: ethers.BigNumber.from('12'), + delaySeconds: ethers.BigNumber.from('86400'), + futureSeconds: ethers.BigNumber.from('3600'), + }, }, + validators: [ + '0x1234123412341234123412341234123412341234', + '0x1234512345123451234512345123451234512345', + ], + batchPoster: '0x1234123412341234123412341234123412341234', } diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index adf18b87..06d4cdc5 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -2,7 +2,7 @@ import { ethers } from 'hardhat' import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' -import { rollupConfig } from './config' +import { config } from './config' interface RollupCreatedEvent { event: string @@ -46,9 +46,18 @@ async function main() { ) try { + let vals: boolean[] = [] + for (let i = 0; i < config.validators.length; i++) { + vals.push(true) + } // Call the createRollup function console.log('Calling createRollup to generate a new rollup ...') - const createRollupTx = await rollupCreator.createRollup(rollupConfig) + const createRollupTx = await rollupCreator.createRollup( + config.rollupConfig, + config.batchPoster, + config.validators, + vals + ) const createRollupReceipt = await createRollupTx.wait() const rollupCreatedEvent = createRollupReceipt.events?.find( @@ -93,8 +102,14 @@ async function main() { } console.log('Inbox (proxy) Contract created at address:', inboxAddress) console.log('Outbox (proxy) Contract created at address:', outbox) - console.log('rollupEventInbox (proxy) Contract created at address:', rollupEventInbox) - console.log('challengeManager (proxy) Contract created at address:', challengeManager) + console.log( + 'rollupEventInbox (proxy) Contract created at address:', + rollupEventInbox + ) + console.log( + 'challengeManager (proxy) Contract created at address:', + challengeManager + ) console.log('AdminProxy Contract created at address:', adminProxy) console.log('SequencerInbox (proxy) created at address:', sequencerInbox) console.log('Bridge (proxy) Contract created at address:', bridge) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 13f6ba5a..62d400c0 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -11,6 +11,7 @@ import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.so import "@openzeppelin/contracts/access/Ownable.sol"; import "./RollupProxy.sol"; +import "./IRollupAdmin.sol"; contract RollupCreator is Ownable { event RollupCreated( @@ -36,6 +37,8 @@ contract RollupCreator is Ownable { address public validatorUtils; address public validatorWalletCreator; + bool[1] private vals = [true]; + constructor() Ownable() {} function setTemplates( @@ -62,7 +65,12 @@ contract RollupCreator is Ownable { // RollupOwner should be the owner of Rollup's ProxyAdmin // RollupOwner should be the owner of Rollup // Bridge should have a single inbox and outbox - function createRollup(Config memory config) external returns (address) { + function createRollup( + Config memory config, + address _batchPoster, + address[] memory _validators, + bool[] memory _vals + ) external returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); // Create the rollup proxy to figure out the address and initialize it later @@ -80,8 +88,6 @@ contract RollupCreator is Ownable { config.sequencerInboxMaxTimeVariation ); - proxyAdmin.transferOwnership(config.owner); - IChallengeManager challengeManager = IChallengeManager( address( new TransparentUpgradeableProxy( @@ -98,6 +104,8 @@ contract RollupCreator is Ownable { osp ); + address tempOwner = config.owner; + config.owner = address(this); rollup.initializeProxy( config, ContractDependencies({ @@ -114,6 +122,16 @@ contract RollupCreator is Ownable { }) ); + IRollupAdmin rollupAdmin = IRollupAdmin(address(rollup)); + sequencerInbox.setIsBatchPoster(_batchPoster, true); + + // Call setValidator on the newly created rollup contract + + rollupAdmin.setValidator(_validators, _vals); + + rollupAdmin.setOwner(tempOwner); + proxyAdmin.transferOwnership(config.owner); + emit RollupCreated( address(rollup), address(inbox), diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index a29e0a2a..64bb6331 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -182,7 +182,13 @@ const setup = async () => { ethers.constants.AddressZero ) - const response = await rollupCreator.createRollup(await getDefaultConfig()) + const response = await rollupCreator.createRollup( + await getDefaultConfig(), + await sequencer.getAddress(), + [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], + [true, true, true] + ) + const rec = await response.wait() const rollupCreatedEvent = rollupCreator.interface.parseLog( @@ -196,19 +202,12 @@ const setup = async () => { .attach(rollupCreatedEvent.rollupAddress) .connect(user) - await rollupAdmin.setValidator( - [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], - [true, true, true] - ) - sequencerInbox = ( (await ethers.getContractFactory( 'SequencerInbox' )) as SequencerInbox__factory ).attach(rollupCreatedEvent.sequencerInbox) - await sequencerInbox.setIsBatchPoster(await sequencer.getAddress(), true) - challengeManager = ( (await ethers.getContractFactory( 'ChallengeManager' From 1ded895dc4e7387e5020e13457d786351ef49a89 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Thu, 6 Jul 2023 07:58:48 -0700 Subject: [PATCH 042/176] debug stack too deep --- scripts/rollupCreation.ts | 3 +-- src/rollup/RollupCreator.sol | 25 ++++++++++++++----------- test/contract/arbRollup.spec.ts | 3 +-- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 06d4cdc5..2c9af885 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -55,8 +55,7 @@ async function main() { const createRollupTx = await rollupCreator.createRollup( config.rollupConfig, config.batchPoster, - config.validators, - vals + config.validators ) const createRollupReceipt = await createRollupTx.wait() diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 62d400c0..5a3cc0a9 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -68,8 +68,7 @@ contract RollupCreator is Ownable { function createRollup( Config memory config, address _batchPoster, - address[] memory _validators, - bool[] memory _vals + address[] memory _validators ) external returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); @@ -121,15 +120,19 @@ contract RollupCreator is Ownable { validatorWalletCreator: validatorWalletCreator }) ); - - IRollupAdmin rollupAdmin = IRollupAdmin(address(rollup)); - sequencerInbox.setIsBatchPoster(_batchPoster, true); - - // Call setValidator on the newly created rollup contract - - rollupAdmin.setValidator(_validators, _vals); - - rollupAdmin.setOwner(tempOwner); + { + IRollupAdmin rollupAdmin = IRollupAdmin(address(rollup)); + sequencerInbox.setIsBatchPoster(_batchPoster, true); + + // Call setValidator on the newly created rollup contract + bool[] memory _vals = new bool[](_validators.length); + for (uint256 i = 0; i < _validators.length; i++) { + _vals[i] = true; + } + rollupAdmin.setValidator(_validators, _vals); + + rollupAdmin.setOwner(tempOwner); + } proxyAdmin.transferOwnership(config.owner); emit RollupCreated( diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 64bb6331..6a56c6d8 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -185,8 +185,7 @@ const setup = async () => { const response = await rollupCreator.createRollup( await getDefaultConfig(), await sequencer.getAddress(), - [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], - [true, true, true] + [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()] ) const rec = await response.wait() From a917be11bb06170c74c775f6308e0ea405d8b4ff Mon Sep 17 00:00:00 2001 From: Mehdi Salehi <61604245+GreatSoshiant@users.noreply.github.com> Date: Thu, 6 Jul 2023 09:23:11 -0700 Subject: [PATCH 043/176] Update src/rollup/RollupCreator.sol Co-authored-by: gzeon --- src/rollup/RollupCreator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 5a3cc0a9..08cd3b12 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -68,7 +68,7 @@ contract RollupCreator is Ownable { function createRollup( Config memory config, address _batchPoster, - address[] memory _validators + address[] calldata _validators ) external returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); From d3d90e735e855aa9c5cacd0127c568b2478f2073 Mon Sep 17 00:00:00 2001 From: Mehdi Salehi <61604245+GreatSoshiant@users.noreply.github.com> Date: Thu, 6 Jul 2023 09:23:30 -0700 Subject: [PATCH 044/176] Update src/rollup/RollupCreator.sol Co-authored-by: gzeon --- src/rollup/RollupCreator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 08cd3b12..dfaaf0a3 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -133,7 +133,7 @@ contract RollupCreator is Ownable { rollupAdmin.setOwner(tempOwner); } - proxyAdmin.transferOwnership(config.owner); + proxyAdmin.transferOwnership(tempOwner); emit RollupCreated( address(rollup), From c2a1bee3dadb23f2cb30076c2ab70a58046730b1 Mon Sep 17 00:00:00 2001 From: Mehdi Salehi <61604245+GreatSoshiant@users.noreply.github.com> Date: Thu, 6 Jul 2023 09:32:32 -0700 Subject: [PATCH 045/176] Update src/rollup/RollupCreator.sol Co-authored-by: gzeon --- src/rollup/RollupCreator.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index dfaaf0a3..f92fe319 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -103,7 +103,9 @@ contract RollupCreator is Ownable { osp ); - address tempOwner = config.owner; + // initialize the rollup with this contract as owner to set batch poster and validators + // it will transfer the ownership back to the actual owner later + address actualOwner = config.owner; config.owner = address(this); rollup.initializeProxy( config, From 90d41c971a50cac5856fbcf37047777c4f8e7ac5 Mon Sep 17 00:00:00 2001 From: Mehdi Salehi <61604245+GreatSoshiant@users.noreply.github.com> Date: Thu, 6 Jul 2023 09:32:40 -0700 Subject: [PATCH 046/176] Update src/rollup/RollupCreator.sol Co-authored-by: gzeon --- src/rollup/RollupCreator.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index f92fe319..cf124a18 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -37,8 +37,6 @@ contract RollupCreator is Ownable { address public validatorUtils; address public validatorWalletCreator; - bool[1] private vals = [true]; - constructor() Ownable() {} function setTemplates( From 34b7a34f665daa00df0cca6865cb379d898e23d5 Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Thu, 6 Jul 2023 09:59:15 -0700 Subject: [PATCH 047/176] workaround stack too deep --- src/rollup/RollupCreator.sol | 25 ++++++++++++------------- test/contract/arbRollup.spec.ts | 16 +--------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index cf124a18..0cb5fd26 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -120,20 +120,19 @@ contract RollupCreator is Ownable { validatorWalletCreator: validatorWalletCreator }) ); - { - IRollupAdmin rollupAdmin = IRollupAdmin(address(rollup)); - sequencerInbox.setIsBatchPoster(_batchPoster, true); - - // Call setValidator on the newly created rollup contract - bool[] memory _vals = new bool[](_validators.length); - for (uint256 i = 0; i < _validators.length; i++) { - _vals[i] = true; - } - rollupAdmin.setValidator(_validators, _vals); - - rollupAdmin.setOwner(tempOwner); + + sequencerInbox.setIsBatchPoster(_batchPoster, true); + + // Call setValidator on the newly created rollup contract + bool[] memory _vals = new bool[](_validators.length); + for (uint256 i = 0; i < _validators.length; i++) { + _vals[i] = true; } - proxyAdmin.transferOwnership(tempOwner); + IRollupAdmin(address(rollup)).setValidator(_validators, _vals); + + IRollupAdmin(address(rollup)).setOwner(actualOwner); + + proxyAdmin.transferOwnership(actualOwner); emit RollupCreated( address(rollup), diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 56d3710e..ba417541 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -15,20 +15,16 @@ */ /* eslint-env node, mocha */ -import { ethers, run, network } from 'hardhat' +import { ethers, run } from 'hardhat' import { Signer } from '@ethersproject/abstract-signer' import { BigNumberish, BigNumber } from '@ethersproject/bignumber' import { BytesLike } from '@ethersproject/bytes' import { ContractTransaction } from '@ethersproject/contracts' import { assert, expect } from 'chai' import { - Bridge, BridgeCreator__factory, - Bridge__factory, ChallengeManager, ChallengeManager__factory, - Inbox, - Inbox__factory, OneStepProofEntry__factory, OneStepProver0__factory, OneStepProverHostIo__factory, @@ -82,8 +78,6 @@ let sequencerInbox: SequencerInbox let admin: Signer let sequencer: Signer let challengeManager: ChallengeManager -let delayedInbox: Inbox -let bridge: Bridge async function getDefaultConfig( _confirmPeriodBlocks = confirmationPeriodBlocks @@ -213,14 +207,6 @@ const setup = async () => { )) as ChallengeManager__factory ).attach(await rollupUser.challengeManager()) - delayedInbox = ( - (await ethers.getContractFactory('Inbox')) as Inbox__factory - ).attach(rollupCreatedEvent.inboxAddress) - - bridge = ( - (await ethers.getContractFactory('Bridge')) as Bridge__factory - ).attach(rollupCreatedEvent.bridge) - return { admin, user, From ab35c180baca04f23c6ac62c623b13303f9bd3bf Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Sun, 9 Jul 2023 22:06:05 -0700 Subject: [PATCH 048/176] moving the transfer ownership line in createRollup --- src/rollup/RollupCreator.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 0cb5fd26..e71263d8 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -101,6 +101,8 @@ contract RollupCreator is Ownable { osp ); + proxyAdmin.transferOwnership(config.owner); + // initialize the rollup with this contract as owner to set batch poster and validators // it will transfer the ownership back to the actual owner later address actualOwner = config.owner; @@ -132,8 +134,6 @@ contract RollupCreator is Ownable { IRollupAdmin(address(rollup)).setOwner(actualOwner); - proxyAdmin.transferOwnership(actualOwner); - emit RollupCreated( address(rollup), address(inbox), From c0cf27a58758ab722ab9b8a1255bf6de22f3c927 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 10 Jul 2023 17:24:50 +0200 Subject: [PATCH 049/176] Integrate setting of batch poster and validators --- src/rollup/AbsRollupCreator.sol | 63 ++++++++++++--------------- src/rollup/ERC20RollupCreator.sol | 36 ++++++++------- src/rollup/IRollupCreator.sol | 13 +++++- src/rollup/RollupCreator.sol | 25 +++++------ test/foundry/AbsRollupCreator.t.sol | 2 +- test/foundry/ERC20RollupCreator.t.sol | 21 +++++++-- test/foundry/RollupCreator.t.sol | 16 +++++-- 7 files changed, 99 insertions(+), 77 deletions(-) diff --git a/src/rollup/AbsRollupCreator.sol b/src/rollup/AbsRollupCreator.sol index 11761d6e..228e3b2b 100644 --- a/src/rollup/AbsRollupCreator.sol +++ b/src/rollup/AbsRollupCreator.sol @@ -36,6 +36,14 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { address public validatorUtils; address public validatorWalletCreator; + struct BridgeContracts { + IBridge bridge; + ISequencerInbox sequencerInbox; + IInbox inbox; + IRollupEventInbox rollupEventInbox; + IOutbox outbox; + } + constructor() Ownable() {} function setTemplates( @@ -73,18 +81,12 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { // Create the rollup proxy to figure out the address and initialize it later RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); - ( - IBridge bridge, - ISequencerInbox sequencerInbox, - IInbox inbox, - IRollupEventInbox rollupEventInbox, - IOutbox outbox - ) = _createBridge( - address(proxyAdmin), - address(rollup), - config.sequencerInboxMaxTimeVariation, - nativeToken - ); + BridgeContracts memory bridgeContracts = _createBridge( + address(proxyAdmin), + address(rollup), + config.sequencerInboxMaxTimeVariation, + nativeToken + ); IChallengeManager challengeManager = IChallengeManager( address( @@ -97,8 +99,8 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { ); challengeManager.initialize( IChallengeResultReceiver(address(rollup)), - sequencerInbox, - bridge, + bridgeContracts.sequencerInbox, + bridgeContracts.bridge, osp ); @@ -111,11 +113,11 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { rollup.initializeProxy( config, ContractDependencies({ - bridge: bridge, - sequencerInbox: sequencerInbox, - inbox: inbox, - outbox: outbox, - rollupEventInbox: rollupEventInbox, + bridge: bridgeContracts.bridge, + sequencerInbox: bridgeContracts.sequencerInbox, + inbox: bridgeContracts.inbox, + outbox: bridgeContracts.outbox, + rollupEventInbox: bridgeContracts.rollupEventInbox, challengeManager: challengeManager, rollupAdminLogic: address(rollupAdminLogic), rollupUserLogic: rollupUserLogic, @@ -124,7 +126,7 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { }) ); - sequencerInbox.setIsBatchPoster(_batchPoster, true); + bridgeContracts.sequencerInbox.setIsBatchPoster(_batchPoster, true); // Call setValidator on the newly created rollup contract bool[] memory _vals = new bool[](_validators.length); @@ -137,13 +139,13 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { emit RollupCreated( address(rollup), - address(inbox), - address(outbox), - address(rollupEventInbox), + address(bridgeContracts.inbox), + address(bridgeContracts.outbox), + address(bridgeContracts.rollupEventInbox), address(challengeManager), address(proxyAdmin), - address(sequencerInbox), - address(bridge), + address(bridgeContracts.sequencerInbox), + address(bridgeContracts.bridge), address(validatorUtils), address(validatorWalletCreator) ); @@ -158,14 +160,5 @@ abstract contract AbsRollupCreator is Ownable, IRollupCreator { address rollup, ISequencerInbox.MaxTimeVariation memory maxTimeVariation, address nativeToken - ) - internal - virtual - returns ( - IBridge, - SequencerInbox, - IInbox, - IRollupEventInbox, - Outbox - ); + ) internal virtual returns (BridgeContracts memory); } diff --git a/src/rollup/ERC20RollupCreator.sol b/src/rollup/ERC20RollupCreator.sol index ceebd917..a23419f0 100644 --- a/src/rollup/ERC20RollupCreator.sol +++ b/src/rollup/ERC20RollupCreator.sol @@ -15,12 +15,13 @@ contract ERC20RollupCreator is AbsRollupCreator, IERC20RollupCreator { // RollupOwner should be the owner of Rollup's ProxyAdmin // RollupOwner should be the owner of Rollup // Bridge should have a single inbox and outbox - function createRollup(Config memory config, address nativeToken) - external - override - returns (address) - { - return _createRollup(config, nativeToken); + function createRollup( + Config memory config, + address _batchPoster, + address[] calldata _validators, + address nativeToken + ) external override returns (address) { + return _createRollup(config, _batchPoster, _validators, nativeToken); } function _createBridge( @@ -28,23 +29,20 @@ contract ERC20RollupCreator is AbsRollupCreator, IERC20RollupCreator { address rollup, ISequencerInbox.MaxTimeVariation memory maxTimeVariation, address nativeToken - ) - internal - override - returns ( - IBridge, - SequencerInbox, - IInbox, - IRollupEventInbox, - Outbox - ) - { - return - ERC20BridgeCreator(address(bridgeCreator)).createBridge( + ) internal override returns (BridgeContracts memory) { + ( + IBridge bridge, + ISequencerInbox sequencerInbox, + IInbox inbox, + IRollupEventInbox rollupEventInbox, + IOutbox outbox + ) = ERC20BridgeCreator(address(bridgeCreator)).createBridge( proxyAdmin, rollup, nativeToken, maxTimeVariation ); + + return BridgeContracts(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); } } diff --git a/src/rollup/IRollupCreator.sol b/src/rollup/IRollupCreator.sol index 21850fef..8674b7a4 100644 --- a/src/rollup/IRollupCreator.sol +++ b/src/rollup/IRollupCreator.sol @@ -23,9 +23,18 @@ interface IRollupCreator { } interface IEthRollupCreator is IRollupCreator { - function createRollup(Config memory config) external returns (address); + function createRollup( + Config memory config, + address _batchPoster, + address[] calldata _validators + ) external returns (address); } interface IERC20RollupCreator is IRollupCreator { - function createRollup(Config memory config, address nativeToken) external returns (address); + function createRollup( + Config memory config, + address _batchPoster, + address[] calldata _validators, + address nativeToken + ) external returns (address); } diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 4a974fde..d8d76ee2 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -20,7 +20,7 @@ contract RollupCreator is AbsRollupCreator, IEthRollupCreator { address _batchPoster, address[] calldata _validators ) external override returns (address) { - return _createRollup(config, address(0)); + return _createRollup(config, _batchPoster, _validators, address(0)); } function _createBridge( @@ -28,22 +28,19 @@ contract RollupCreator is AbsRollupCreator, IEthRollupCreator { address rollup, ISequencerInbox.MaxTimeVariation memory maxTimeVariation, address // nativeToken does not exist in context of standard Eth based rollup - ) - internal - override - returns ( - IBridge, - SequencerInbox, - IInbox, - IRollupEventInbox, - Outbox - ) - { - return - BridgeCreator(address(bridgeCreator)).createBridge( + ) internal override returns (BridgeContracts memory) { + ( + IBridge bridge, + ISequencerInbox sequencerInbox, + IInbox inbox, + IRollupEventInbox rollupEventInbox, + IOutbox outbox + ) = BridgeCreator(address(bridgeCreator)).createBridge( proxyAdmin, rollup, maxTimeVariation ); + + return BridgeContracts(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); } } diff --git a/test/foundry/AbsRollupCreator.t.sol b/test/foundry/AbsRollupCreator.t.sol index 214fe73b..76a71e12 100644 --- a/test/foundry/AbsRollupCreator.t.sol +++ b/test/foundry/AbsRollupCreator.t.sol @@ -21,7 +21,7 @@ abstract contract AbsRollupCreatorTest is Test { address public rollupOwner = address(4400); address public deployer = address(4300); - function _prepareRollupDeployment(address rollupCreator, Config memory config) + function _prepareRollupDeployment() internal returns ( IOneStepProofEntry ospEntry, diff --git a/test/foundry/ERC20RollupCreator.t.sol b/test/foundry/ERC20RollupCreator.t.sol index 4cff58cc..0b620631 100644 --- a/test/foundry/ERC20RollupCreator.t.sol +++ b/test/foundry/ERC20RollupCreator.t.sol @@ -38,7 +38,7 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { extraChallengeTimeBlocks: 200, stakeToken: address(0), baseStake: 1000, - wasmModuleRoot: keccak256("0"), + wasmModuleRoot: wasmModuleRoot, owner: rollupOwner, loserStakeEscrow: address(200), chainId: chainId, @@ -52,7 +52,7 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { IChallengeManager challengeManager, IRollupAdmin rollupAdmin, IRollupUser rollupUser - ) = _prepareRollupDeployment(address(rollupCreator), config); + ) = _prepareRollupDeployment(); //// deployBridgeCreator IBridgeCreator bridgeCreator = new ERC20BridgeCreator(); @@ -69,7 +69,16 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { ); /// deploy rollup - address rollupAddress = rollupCreator.createRollup(config, nativeToken); + address batchPoster = makeAddr("batch poster"); + address[] memory validators = new address[](2); + validators[0] = makeAddr("validator1"); + validators[1] = makeAddr("validator2"); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + nativeToken + ); vm.stopPrank(); @@ -92,6 +101,12 @@ contract ERC20RollupCreatorTest is AbsRollupCreatorTest { assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); + assertTrue(rollup.isValidator(validators[0]), "Invalid validator set"); + assertTrue(rollup.isValidator(validators[1]), "Invalid validator set"); + assertTrue( + ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), + "Invalid batch poster" + ); // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 9acd7106..8fda4224 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -29,7 +29,7 @@ contract RollupCreatorTest is AbsRollupCreatorTest { extraChallengeTimeBlocks: 200, stakeToken: address(0), baseStake: 1000, - wasmModuleRoot: keccak256("0"), + wasmModuleRoot: wasmModuleRoot, owner: rollupOwner, loserStakeEscrow: address(200), chainId: chainId, @@ -43,7 +43,7 @@ contract RollupCreatorTest is AbsRollupCreatorTest { IChallengeManager challengeManager, IRollupAdmin rollupAdmin, IRollupUser rollupUser - ) = _prepareRollupDeployment(address(rollupCreator), config); + ) = _prepareRollupDeployment(); //// deployBridgeCreator IBridgeCreator bridgeCreator = new BridgeCreator(); @@ -59,7 +59,11 @@ contract RollupCreatorTest is AbsRollupCreatorTest { ); /// deploy rollup - address rollupAddress = rollupCreator.createRollup(config); + address batchPoster = makeAddr("batch poster"); + address[] memory validators = new address[](2); + validators[0] = makeAddr("validator1"); + validators[1] = makeAddr("validator2"); + address rollupAddress = rollupCreator.createRollup(config, batchPoster, validators); vm.stopPrank(); @@ -82,5 +86,11 @@ contract RollupCreatorTest is AbsRollupCreatorTest { assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); + assertTrue(rollup.isValidator(validators[0]), "Invalid validator set"); + assertTrue(rollup.isValidator(validators[1]), "Invalid validator set"); + assertTrue( + ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), + "Invalid batch poster" + ); } } From d0fbedb74063abcbaf16f9a95ef13257e25e20c3 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Jul 2023 22:44:22 +0800 Subject: [PATCH 050/176] chore: also include build/types in release --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8132a7e2..ea9708a1 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,15 @@ "url": "git+https://github.com/offchainlabs/nitro-contracts.git" }, "files": [ - "src/" + "src/", + "build/contracts", + "build/types" ], "bugs": { "url": "https://github.com/offchainlabs/nitro-contracts/issues" }, "scripts": { + "prepublishOnly": "hardhat clean && hardhat compile", "build": "hardhat compile", "lint:test": "eslint ./test", "solhint": "solhint -f table src/**/*.sol", From 243d98c7f2dbc70accf9957daedd12ba177f4cbb Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Jul 2023 22:48:50 +0800 Subject: [PATCH 051/176] v1.1.0-alpha.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ea9708a1..0c22991d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.0.2", + "version": "1.1.0-alpha.2", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From 1de72a9b8ff4538b251a05af00ac48930d50eda7 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Jul 2023 22:53:57 +0800 Subject: [PATCH 052/176] chore: remove build/contracts from release --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 0c22991d..caab2a31 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ }, "files": [ "src/", - "build/contracts", "build/types" ], "bugs": { From 311ff92f1c8a634aed485ae088a178517d147355 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 11 Jul 2023 22:54:57 +0800 Subject: [PATCH 053/176] v1.1.0-alpha.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index caab2a31..c053aa7d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-alpha.2", + "version": "1.1.0-alpha.3", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From dd934b426dd8709b086eac1259019789484b18ef Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 12 Jul 2023 17:06:39 -0700 Subject: [PATCH 054/176] check for empty validator set, and zero address for batch poster --- src/rollup/RollupCreator.sol | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index e71263d8..c2f938b0 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -63,6 +63,9 @@ contract RollupCreator is Ownable { // RollupOwner should be the owner of Rollup's ProxyAdmin // RollupOwner should be the owner of Rollup // Bridge should have a single inbox and outbox + // Validators and batch poster should be set if provided + // If you don't want to set validators, put an empty list + // If you don't want to set batch-poster, put zero address function createRollup( Config memory config, address _batchPoster, @@ -123,14 +126,19 @@ contract RollupCreator is Ownable { }) ); - sequencerInbox.setIsBatchPoster(_batchPoster, true); + // setting batch poster, if the address provided is not zero address + if (_batchPoster != address(0)) { + sequencerInbox.setIsBatchPoster(_batchPoster, true); + } - // Call setValidator on the newly created rollup contract - bool[] memory _vals = new bool[](_validators.length); - for (uint256 i = 0; i < _validators.length; i++) { - _vals[i] = true; + // Call setValidator on the newly created rollup contract just if validator set is not empty + if (_validators.length != 0) { + bool[] memory _vals = new bool[](_validators.length); + for (uint256 i = 0; i < _validators.length; i++) { + _vals[i] = true; + } + IRollupAdmin(address(rollup)).setValidator(_validators, _vals); } - IRollupAdmin(address(rollup)).setValidator(_validators, _vals); IRollupAdmin(address(rollup)).setOwner(actualOwner); From 832b4646a8219390ffd79458becabb3e8a4edbba Mon Sep 17 00:00:00 2001 From: GreatSoshiant Date: Wed, 12 Jul 2023 22:34:53 -0700 Subject: [PATCH 055/176] edit on comments --- src/rollup/RollupCreator.sol | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index c2f938b0..93cf0bb2 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -58,14 +58,19 @@ contract RollupCreator is Ownable { emit TemplatesUpdated(); } - // After this setup: - // Rollup should be the owner of bridge - // RollupOwner should be the owner of Rollup's ProxyAdmin - // RollupOwner should be the owner of Rollup - // Bridge should have a single inbox and outbox - // Validators and batch poster should be set if provided - // If you don't want to set validators, put an empty list - // If you don't want to set batch-poster, put zero address + /** + * @notice Create a new rollup + * @dev After this setup: + * @dev - Rollup should be the owner of bridge + * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin + * @dev - RollupOwner should be the owner of Rollup + * @dev - Bridge should have a single inbox and outbox + * @dev - Validators and batch poster should be set if provided + * @param config The configuration for the rollup + * @param _batchPoster The address of the batch poster, not used when set to zero address + * @param _validators The list of validator addresses, not used when set to empty list + * @return The address of the newly created rollup + */ function createRollup( Config memory config, address _batchPoster, From 90258cc3add7b41f32a4371df4fe2e1181681509 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 13 Jul 2023 10:41:11 +0200 Subject: [PATCH 056/176] Use single RollupCreator for both Eth and Erc20 based rollups --- src/rollup/AbsRollupCreator.sol | 164 --------------------- src/rollup/ERC20RollupCreator.sol | 48 ------ src/rollup/IRollupCreator.sol | 40 ----- src/rollup/RollupCreator.sol | 203 +++++++++++++++++++++---- test/foundry/AbsRollupCreator.t.sol | 79 ---------- test/foundry/ERC20RollupCreator.t.sol | 118 --------------- test/foundry/RollupCreator.t.sol | 204 ++++++++++++++++++++++---- 7 files changed, 350 insertions(+), 506 deletions(-) delete mode 100644 src/rollup/AbsRollupCreator.sol delete mode 100644 src/rollup/ERC20RollupCreator.sol delete mode 100644 src/rollup/IRollupCreator.sol delete mode 100644 test/foundry/AbsRollupCreator.t.sol delete mode 100644 test/foundry/ERC20RollupCreator.t.sol diff --git a/src/rollup/AbsRollupCreator.sol b/src/rollup/AbsRollupCreator.sol deleted file mode 100644 index 228e3b2b..00000000 --- a/src/rollup/AbsRollupCreator.sol +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "./IBridgeCreator.sol"; -import "./IRollupCreator.sol"; -import "./RollupProxy.sol"; -import "./IRollupAdmin.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; -import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -abstract contract AbsRollupCreator is Ownable, IRollupCreator { - event RollupCreated( - address indexed rollupAddress, - address inboxAddress, - address outbox, - address rollupEventInbox, - address challengeManager, - address adminProxy, - address sequencerInbox, - address bridge, - address validatorUtils, - address validatorWalletCreator - ); - event TemplatesUpdated(); - - IBridgeCreator public bridgeCreator; - IOneStepProofEntry public osp; - IChallengeManager public challengeManagerTemplate; - IRollupAdmin public rollupAdminLogic; - IRollupUser public rollupUserLogic; - - address public validatorUtils; - address public validatorWalletCreator; - - struct BridgeContracts { - IBridge bridge; - ISequencerInbox sequencerInbox; - IInbox inbox; - IRollupEventInbox rollupEventInbox; - IOutbox outbox; - } - - constructor() Ownable() {} - - function setTemplates( - IBridgeCreator _bridgeCreator, - IOneStepProofEntry _osp, - IChallengeManager _challengeManagerLogic, - IRollupAdmin _rollupAdminLogic, - IRollupUser _rollupUserLogic, - address _validatorUtils, - address _validatorWalletCreator - ) external onlyOwner { - bridgeCreator = _bridgeCreator; - osp = _osp; - challengeManagerTemplate = _challengeManagerLogic; - rollupAdminLogic = _rollupAdminLogic; - rollupUserLogic = _rollupUserLogic; - validatorUtils = _validatorUtils; - validatorWalletCreator = _validatorWalletCreator; - emit TemplatesUpdated(); - } - - // After this setup: - // Rollup should be the owner of bridge - // RollupOwner should be the owner of Rollup's ProxyAdmin - // RollupOwner should be the owner of Rollup - // Bridge should have a single inbox and outbox - function _createRollup( - Config memory config, - address _batchPoster, - address[] calldata _validators, - address nativeToken - ) internal returns (address) { - ProxyAdmin proxyAdmin = new ProxyAdmin(); - - // Create the rollup proxy to figure out the address and initialize it later - RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); - - BridgeContracts memory bridgeContracts = _createBridge( - address(proxyAdmin), - address(rollup), - config.sequencerInboxMaxTimeVariation, - nativeToken - ); - - IChallengeManager challengeManager = IChallengeManager( - address( - new TransparentUpgradeableProxy( - address(challengeManagerTemplate), - address(proxyAdmin), - "" - ) - ) - ); - challengeManager.initialize( - IChallengeResultReceiver(address(rollup)), - bridgeContracts.sequencerInbox, - bridgeContracts.bridge, - osp - ); - - proxyAdmin.transferOwnership(config.owner); - - // initialize the rollup with this contract as owner to set batch poster and validators - // it will transfer the ownership back to the actual owner later - address actualOwner = config.owner; - config.owner = address(this); - rollup.initializeProxy( - config, - ContractDependencies({ - bridge: bridgeContracts.bridge, - sequencerInbox: bridgeContracts.sequencerInbox, - inbox: bridgeContracts.inbox, - outbox: bridgeContracts.outbox, - rollupEventInbox: bridgeContracts.rollupEventInbox, - challengeManager: challengeManager, - rollupAdminLogic: address(rollupAdminLogic), - rollupUserLogic: rollupUserLogic, - validatorUtils: validatorUtils, - validatorWalletCreator: validatorWalletCreator - }) - ); - - bridgeContracts.sequencerInbox.setIsBatchPoster(_batchPoster, true); - - // Call setValidator on the newly created rollup contract - bool[] memory _vals = new bool[](_validators.length); - for (uint256 i = 0; i < _validators.length; i++) { - _vals[i] = true; - } - IRollupAdmin(address(rollup)).setValidator(_validators, _vals); - - IRollupAdmin(address(rollup)).setOwner(actualOwner); - - emit RollupCreated( - address(rollup), - address(bridgeContracts.inbox), - address(bridgeContracts.outbox), - address(bridgeContracts.rollupEventInbox), - address(challengeManager), - address(proxyAdmin), - address(bridgeContracts.sequencerInbox), - address(bridgeContracts.bridge), - address(validatorUtils), - address(validatorWalletCreator) - ); - return address(rollup); - } - - /** - * Create bridge using appropriate BridgeCreator. - */ - function _createBridge( - address proxyAdmin, - address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation, - address nativeToken - ) internal virtual returns (BridgeContracts memory); -} diff --git a/src/rollup/ERC20RollupCreator.sol b/src/rollup/ERC20RollupCreator.sol deleted file mode 100644 index a23419f0..00000000 --- a/src/rollup/ERC20RollupCreator.sol +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "./AbsRollupCreator.sol"; -import "./ERC20BridgeCreator.sol"; - -contract ERC20RollupCreator is AbsRollupCreator, IERC20RollupCreator { - constructor() AbsRollupCreator() {} - - // After this setup: - // Rollup should be the owner of bridge - // RollupOwner should be the owner of Rollup's ProxyAdmin - // RollupOwner should be the owner of Rollup - // Bridge should have a single inbox and outbox - function createRollup( - Config memory config, - address _batchPoster, - address[] calldata _validators, - address nativeToken - ) external override returns (address) { - return _createRollup(config, _batchPoster, _validators, nativeToken); - } - - function _createBridge( - address proxyAdmin, - address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation, - address nativeToken - ) internal override returns (BridgeContracts memory) { - ( - IBridge bridge, - ISequencerInbox sequencerInbox, - IInbox inbox, - IRollupEventInbox rollupEventInbox, - IOutbox outbox - ) = ERC20BridgeCreator(address(bridgeCreator)).createBridge( - proxyAdmin, - rollup, - nativeToken, - maxTimeVariation - ); - - return BridgeContracts(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); - } -} diff --git a/src/rollup/IRollupCreator.sol b/src/rollup/IRollupCreator.sol deleted file mode 100644 index 8674b7a4..00000000 --- a/src/rollup/IRollupCreator.sol +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -// solhint-disable-next-line compiler-version -pragma solidity >=0.6.9 <0.9.0; - -import "./IBridgeCreator.sol"; -import "./RollupProxy.sol"; -import "../osp/IOneStepProofEntry.sol"; -import "../challenge/IChallengeManager.sol"; - -interface IRollupCreator { - function setTemplates( - IBridgeCreator _bridgeCreator, - IOneStepProofEntry _osp, - IChallengeManager _challengeManagerLogic, - IRollupAdmin _rollupAdminLogic, - IRollupUser _rollupUserLogic, - address _validatorUtils, - address _validatorWalletCreator - ) external; -} - -interface IEthRollupCreator is IRollupCreator { - function createRollup( - Config memory config, - address _batchPoster, - address[] calldata _validators - ) external returns (address); -} - -interface IERC20RollupCreator is IRollupCreator { - function createRollup( - Config memory config, - address _batchPoster, - address[] calldata _validators, - address nativeToken - ) external returns (address); -} diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index d8d76ee2..450dbc09 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -4,43 +4,188 @@ pragma solidity ^0.8.0; -import "./AbsRollupCreator.sol"; +import "./RollupProxy.sol"; +import "./IRollupAdmin.sol"; import "./BridgeCreator.sol"; +import "./ERC20BridgeCreator.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; -contract RollupCreator is AbsRollupCreator, IEthRollupCreator { - constructor() AbsRollupCreator() {} +contract RollupCreator is Ownable { + event RollupCreated( + address indexed rollupAddress, + address indexed nativeToken, + address inboxAddress, + address outbox, + address rollupEventInbox, + address challengeManager, + address adminProxy, + address sequencerInbox, + address bridge, + address validatorUtils, + address validatorWalletCreator + ); + event TemplatesUpdated(); - // After this setup: - // Rollup should be the owner of bridge - // RollupOwner should be the owner of Rollup's ProxyAdmin - // RollupOwner should be the owner of Rollup - // Bridge should have a single inbox and outbox + BridgeCreator public ethBridgeCreator; + ERC20BridgeCreator public erc20BridgeCreator; + IOneStepProofEntry public osp; + IChallengeManager public challengeManagerTemplate; + IRollupAdmin public rollupAdminLogic; + IRollupUser public rollupUserLogic; + + address public validatorUtils; + address public validatorWalletCreator; + + struct BridgeContracts { + IBridge bridge; + ISequencerInbox sequencerInbox; + IInbox inbox; + IRollupEventInbox rollupEventInbox; + IOutbox outbox; + } + + constructor() Ownable() {} + + function setTemplates( + BridgeCreator _ethBridgeCreator, + ERC20BridgeCreator _erc20BridgeCreator, + IOneStepProofEntry _osp, + IChallengeManager _challengeManagerLogic, + IRollupAdmin _rollupAdminLogic, + IRollupUser _rollupUserLogic, + address _validatorUtils, + address _validatorWalletCreator + ) external onlyOwner { + ethBridgeCreator = _ethBridgeCreator; + erc20BridgeCreator = _erc20BridgeCreator; + osp = _osp; + challengeManagerTemplate = _challengeManagerLogic; + rollupAdminLogic = _rollupAdminLogic; + rollupUserLogic = _rollupUserLogic; + validatorUtils = _validatorUtils; + validatorWalletCreator = _validatorWalletCreator; + emit TemplatesUpdated(); + } + + /** + * @notice Create a new rollup + * @dev After this setup: + * @dev - Rollup should be the owner of bridge + * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin + * @dev - RollupOwner should be the owner of Rollup + * @dev - Bridge should have a single inbox and outbox + * @dev - Validators and batch poster should be set if provided + * @param config The configuration for the rollup + * @param _batchPoster The address of the batch poster, not used when set to zero address + * @param _validators The list of validator addresses, not used when set to empty list + * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided + * @return The address of the newly created rollup + */ function createRollup( Config memory config, address _batchPoster, - address[] calldata _validators - ) external override returns (address) { - return _createRollup(config, _batchPoster, _validators, address(0)); - } + address[] calldata _validators, + address _nativeToken + ) external returns (address) { + ProxyAdmin proxyAdmin = new ProxyAdmin(); - function _createBridge( - address proxyAdmin, - address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation, - address // nativeToken does not exist in context of standard Eth based rollup - ) internal override returns (BridgeContracts memory) { - ( - IBridge bridge, - ISequencerInbox sequencerInbox, - IInbox inbox, - IRollupEventInbox rollupEventInbox, - IOutbox outbox - ) = BridgeCreator(address(bridgeCreator)).createBridge( - proxyAdmin, - rollup, - maxTimeVariation + // Create the rollup proxy to figure out the address and initialize it later + RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); + + BridgeContracts memory bridgeContract; + if (_nativeToken == address(0)) { + // create ETH-based rollup if address zero is provided for native token + ( + bridgeContract.bridge, + bridgeContract.sequencerInbox, + bridgeContract.inbox, + bridgeContract.rollupEventInbox, + bridgeContract.outbox + ) = ethBridgeCreator.createBridge( + address(proxyAdmin), + address(rollup), + config.sequencerInboxMaxTimeVariation + ); + } else { + // otherwise create ERC20-based rollup with custom fee token + ( + bridgeContract.bridge, + bridgeContract.sequencerInbox, + bridgeContract.inbox, + bridgeContract.rollupEventInbox, + bridgeContract.outbox + ) = erc20BridgeCreator.createBridge( + address(proxyAdmin), + address(rollup), + _nativeToken, + config.sequencerInboxMaxTimeVariation ); + } + + IChallengeManager challengeManager = IChallengeManager( + address( + new TransparentUpgradeableProxy( + address(challengeManagerTemplate), + address(proxyAdmin), + "" + ) + ) + ); + challengeManager.initialize( + IChallengeResultReceiver(address(rollup)), + bridgeContract.sequencerInbox, + bridgeContract.bridge, + osp + ); + + proxyAdmin.transferOwnership(config.owner); + + // initialize the rollup with this contract as owner to set batch poster and validators + // it will transfer the ownership back to the actual owner later + address actualOwner = config.owner; + config.owner = address(this); + rollup.initializeProxy( + config, + ContractDependencies({ + bridge: bridgeContract.bridge, + sequencerInbox: bridgeContract.sequencerInbox, + inbox: bridgeContract.inbox, + outbox: bridgeContract.outbox, + rollupEventInbox: bridgeContract.rollupEventInbox, + challengeManager: challengeManager, + rollupAdminLogic: address(rollupAdminLogic), + rollupUserLogic: rollupUserLogic, + validatorUtils: validatorUtils, + validatorWalletCreator: validatorWalletCreator + }) + ); + + bridgeContract.sequencerInbox.setIsBatchPoster(_batchPoster, true); + + // Call setValidator on the newly created rollup contract + bool[] memory _vals = new bool[](_validators.length); + for (uint256 i = 0; i < _validators.length; i++) { + _vals[i] = true; + } + IRollupAdmin(address(rollup)).setValidator(_validators, _vals); + + IRollupAdmin(address(rollup)).setOwner(actualOwner); - return BridgeContracts(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); + emit RollupCreated( + address(rollup), + _nativeToken, + address(bridgeContract.inbox), + address(bridgeContract.outbox), + address(bridgeContract.rollupEventInbox), + address(challengeManager), + address(proxyAdmin), + address(bridgeContract.sequencerInbox), + address(bridgeContract.bridge), + address(validatorUtils), + address(validatorWalletCreator) + ); + return address(rollup); } } diff --git a/test/foundry/AbsRollupCreator.t.sol b/test/foundry/AbsRollupCreator.t.sol deleted file mode 100644 index 76a71e12..00000000 --- a/test/foundry/AbsRollupCreator.t.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.4; - -import "forge-std/Test.sol"; -import "./util/TestUtil.sol"; -import "../../src/rollup/IRollupCreator.sol"; -import "../../src/rollup/RollupAdminLogic.sol"; -import "../../src/rollup/RollupUserLogic.sol"; -import "../../src/rollup/ValidatorUtils.sol"; -import "../../src/rollup/ValidatorWalletCreator.sol"; -import "../../src/challenge/ChallengeManager.sol"; -import "../../src/osp/OneStepProver0.sol"; -import "../../src/osp/OneStepProverMemory.sol"; -import "../../src/osp/OneStepProverMath.sol"; -import "../../src/osp/OneStepProverHostIo.sol"; -import "../../src/osp/OneStepProofEntry.sol"; - -import "@openzeppelin/contracts/access/Ownable.sol"; - -abstract contract AbsRollupCreatorTest is Test { - address public rollupOwner = address(4400); - address public deployer = address(4300); - - function _prepareRollupDeployment() - internal - returns ( - IOneStepProofEntry ospEntry, - IChallengeManager challengeManager, - IRollupAdmin rollupAdminLogic, - IRollupUser rollupUserLogic - ) - { - //// deploy challenge stuff - ospEntry = new OneStepProofEntry( - new OneStepProver0(), - new OneStepProverMemory(), - new OneStepProverMath(), - new OneStepProverHostIo() - ); - challengeManager = new ChallengeManager(); - - //// deploy rollup logic - rollupAdminLogic = IRollupAdmin(new RollupAdminLogic()); - rollupUserLogic = IRollupUser(new RollupUserLogic()); - - return (ospEntry, challengeManager, rollupAdminLogic, rollupUserLogic); - } - - function _getProxyAdmin(address proxy) internal view returns (address) { - bytes32 adminSlot = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1); - return address(uint160(uint256(vm.load(proxy, adminSlot)))); - } - - function _getPrimary(address proxy) internal view returns (address) { - bytes32 primarySlot = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); - return address(uint160(uint256(vm.load(proxy, primarySlot)))); - } - - function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = bytes32( - uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 - ); - return address(uint160(uint256(vm.load(proxy, secondarySlot)))); - } - - /**** - **** Event declarations - ***/ - - event RollupCreated( - address indexed rollupAddress, - address inboxAddress, - address adminProxy, - address sequencerInbox, - address bridge - ); - - event RollupInitialized(bytes32 machineHash, uint256 chainId); -} diff --git a/test/foundry/ERC20RollupCreator.t.sol b/test/foundry/ERC20RollupCreator.t.sol deleted file mode 100644 index 0b620631..00000000 --- a/test/foundry/ERC20RollupCreator.t.sol +++ /dev/null @@ -1,118 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.4; - -import "forge-std/Test.sol"; -import "./util/TestUtil.sol"; -import "./AbsRollupCreator.t.sol"; -import "../../src/rollup/ERC20RollupCreator.sol"; -import "../../src/rollup/ERC20BridgeCreator.sol"; -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; - -contract ERC20RollupCreatorTest is AbsRollupCreatorTest { - address public nativeToken; - - function setUp() public { - vm.prank(deployer); - nativeToken = address( - new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) - ); - } - - /* solhint-disable func-name-mixedcase */ - function test_createRollup() public { - vm.startPrank(deployer); - - ERC20RollupCreator rollupCreator = new ERC20RollupCreator(); - - // deployment params - bytes32 wasmModuleRoot = keccak256("wasm"); - uint256 chainId = 1337; - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); - Config memory config = Config({ - confirmPeriodBlocks: 20, - extraChallengeTimeBlocks: 200, - stakeToken: address(0), - baseStake: 1000, - wasmModuleRoot: wasmModuleRoot, - owner: rollupOwner, - loserStakeEscrow: address(200), - chainId: chainId, - chainConfig: "abc", - genesisBlockNum: 15000000, - sequencerInboxMaxTimeVariation: timeVars - }); - - ( - IOneStepProofEntry ospEntry, - IChallengeManager challengeManager, - IRollupAdmin rollupAdmin, - IRollupUser rollupUser - ) = _prepareRollupDeployment(); - - //// deployBridgeCreator - IBridgeCreator bridgeCreator = new ERC20BridgeCreator(); - - //// deploy creator and set logic - rollupCreator.setTemplates( - bridgeCreator, - ospEntry, - challengeManager, - rollupAdmin, - rollupUser, - address(new ValidatorUtils()), - address(new ValidatorWalletCreator()) - ); - - /// deploy rollup - address batchPoster = makeAddr("batch poster"); - address[] memory validators = new address[](2); - validators[0] = makeAddr("validator1"); - validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - nativeToken - ); - - vm.stopPrank(); - - /// common checks - - /// rollup creator - assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); - - /// rollup proxy - assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); - assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); - assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); - assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); - - /// rollup check - RollupCore rollup = RollupCore(rollupAddress); - assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); - assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); - assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); - assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); - assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); - assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); - assertTrue(rollup.isValidator(validators[0]), "Invalid validator set"); - assertTrue(rollup.isValidator(validators[1]), "Invalid validator set"); - assertTrue( - ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), - "Invalid batch poster" - ); - // native token check - IBridge bridge = RollupCore(address(rollupAddress)).bridge(); - assertEq( - IERC20Bridge(address(bridge)).nativeToken(), - nativeToken, - "Invalid native token ref" - ); - } -} diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 8fda4224..9ae2b8db 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -1,23 +1,69 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; -import "./AbsRollupCreator.t.sol"; -import "../../src/rollup/BridgeCreator.sol"; +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; import "../../src/rollup/RollupCreator.sol"; +import "../../src/rollup/RollupAdminLogic.sol"; +import "../../src/rollup/RollupUserLogic.sol"; +import "../../src/rollup/ValidatorUtils.sol"; +import "../../src/rollup/ValidatorWalletCreator.sol"; +import "../../src/challenge/ChallengeManager.sol"; +import "../../src/osp/OneStepProver0.sol"; +import "../../src/osp/OneStepProverMemory.sol"; +import "../../src/osp/OneStepProverMath.sol"; +import "../../src/osp/OneStepProverHostIo.sol"; +import "../../src/osp/OneStepProofEntry.sol"; -contract RollupCreatorTest is AbsRollupCreatorTest { - function setUp() public {} +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract RollupCreatorTest is Test { + RollupCreator public rollupCreator; + address public rollupOwner = makeAddr("rollupOwner"); + address public deployer = makeAddr("deployer"); + IRollupAdmin public rollupAdmin; + IRollupUser public rollupUser; /* solhint-disable func-name-mixedcase */ - function test_createRollup() public { + function setUp() public { + //// deploy rollup creator and set templates vm.startPrank(deployer); + rollupCreator = new RollupCreator(); + + // deploy BridgeCreators + BridgeCreator ethBridgeCreator = new BridgeCreator(); + ERC20BridgeCreator erc20BridgeCreator = new ERC20BridgeCreator(); + + ( + IOneStepProofEntry ospEntry, + IChallengeManager challengeManager, + IRollupAdmin _rollupAdmin, + IRollupUser _rollupUser + ) = _prepareRollupDeployment(); + + rollupAdmin = _rollupAdmin; + rollupUser = _rollupUser; + + //// deploy creator and set logic + rollupCreator.setTemplates( + ethBridgeCreator, + erc20BridgeCreator, + ospEntry, + challengeManager, + _rollupAdmin, + _rollupUser, + address(new ValidatorUtils()), + address(new ValidatorWalletCreator()) + ); - RollupCreator rollupCreator = new RollupCreator(); + vm.stopPrank(); + } + + function test_createEthRollup() public { + vm.startPrank(deployer); // deployment params - bytes32 wasmModuleRoot = keccak256("wasm"); - uint256 chainId = 1337; ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( ((60 * 60 * 24) / 15), 12, @@ -29,41 +75,94 @@ contract RollupCreatorTest is AbsRollupCreatorTest { extraChallengeTimeBlocks: 200, stakeToken: address(0), baseStake: 1000, - wasmModuleRoot: wasmModuleRoot, + wasmModuleRoot: keccak256("wasm"), owner: rollupOwner, loserStakeEscrow: address(200), - chainId: chainId, + chainId: 1337, chainConfig: "abc", genesisBlockNum: 15000000, sequencerInboxMaxTimeVariation: timeVars }); - ( - IOneStepProofEntry ospEntry, - IChallengeManager challengeManager, - IRollupAdmin rollupAdmin, - IRollupUser rollupUser - ) = _prepareRollupDeployment(); - //// deployBridgeCreator - IBridgeCreator bridgeCreator = new BridgeCreator(); + /// deploy rollup + address batchPoster = makeAddr("batch poster"); + address[] memory validators = new address[](2); + validators[0] = makeAddr("validator1"); + validators[1] = makeAddr("validator2"); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + address(0) + ); - //// deploy creator and set logic - rollupCreator.setTemplates( - bridgeCreator, - ospEntry, - challengeManager, - rollupAdmin, - rollupUser, - address(new ValidatorUtils()), - address(new ValidatorWalletCreator()) + vm.stopPrank(); + + /// common checks + + /// rollup creator + assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); + + /// rollup proxy + assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); + assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); + assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); + assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); + + /// rollup check + RollupCore rollup = RollupCore(rollupAddress); + assertTrue(address(rollup.sequencerInbox()) != address(0), "Invalid seqInbox"); + assertTrue(address(rollup.bridge()) != address(0), "Invalid bridge"); + assertTrue(address(rollup.inbox()) != address(0), "Invalid inbox"); + assertTrue(address(rollup.outbox()) != address(0), "Invalid outbox"); + assertTrue(address(rollup.rollupEventInbox()) != address(0), "Invalid rollupEventInbox"); + assertTrue(address(rollup.challengeManager()) != address(0), "Invalid challengeManager"); + assertTrue(rollup.isValidator(validators[0]), "Invalid validator set"); + assertTrue(rollup.isValidator(validators[1]), "Invalid validator set"); + assertTrue( + ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), + "Invalid batch poster" ); + } + + function test_createErc20Rollup() public { + vm.startPrank(deployer); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); + + // deployment params + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); + Config memory config = Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("wasm"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: 1337, + chainConfig: "abc", + genesisBlockNum: 15000000, + sequencerInboxMaxTimeVariation: timeVars + }); /// deploy rollup address batchPoster = makeAddr("batch poster"); address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup(config, batchPoster, validators); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + nativeToken + ); vm.stopPrank(); @@ -92,5 +191,54 @@ contract RollupCreatorTest is AbsRollupCreatorTest { ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), "Invalid batch poster" ); + // native token check + IBridge bridge = RollupCore(address(rollupAddress)).bridge(); + assertEq( + IERC20Bridge(address(bridge)).nativeToken(), + nativeToken, + "Invalid native token ref" + ); + } + + function _prepareRollupDeployment() + internal + returns ( + IOneStepProofEntry ospEntry, + IChallengeManager challengeManager, + IRollupAdmin rollupAdminLogic, + IRollupUser rollupUserLogic + ) + { + //// deploy challenge stuff + ospEntry = new OneStepProofEntry( + new OneStepProver0(), + new OneStepProverMemory(), + new OneStepProverMath(), + new OneStepProverHostIo() + ); + challengeManager = new ChallengeManager(); + + //// deploy rollup logic + rollupAdminLogic = IRollupAdmin(new RollupAdminLogic()); + rollupUserLogic = IRollupUser(new RollupUserLogic()); + + return (ospEntry, challengeManager, rollupAdminLogic, rollupUserLogic); + } + + function _getProxyAdmin(address proxy) internal view returns (address) { + bytes32 adminSlot = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1); + return address(uint160(uint256(vm.load(proxy, adminSlot)))); + } + + function _getPrimary(address proxy) internal view returns (address) { + bytes32 primarySlot = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); + return address(uint160(uint256(vm.load(proxy, primarySlot)))); + } + + function _getSecondary(address proxy) internal view returns (address) { + bytes32 secondarySlot = bytes32( + uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 + ); + return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } From 106ae6c3683a16ff2b17fbd7f60f74fe4256cde4 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 13 Jul 2023 10:59:12 +0200 Subject: [PATCH 057/176] Update hardhat test --- test/contract/arbRollup.spec.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index ba417541..884da19d 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -156,10 +156,15 @@ const setup = async () => { )) as RollupUserLogic__factory const rollupUserLogicTemplate = await rollupUserLogicFac.deploy() - const bridgeCreatorFac = (await ethers.getContractFactory( + const ethBridgeCreatorFac = (await ethers.getContractFactory( 'BridgeCreator' )) as BridgeCreator__factory - const bridgeCreator = await bridgeCreatorFac.deploy() + const ethBridgeCreator = await ethBridgeCreatorFac.deploy() + + const erc20BridgeCreatorFac = (await ethers.getContractFactory( + 'ERC20BridgeCreator' + )) as BridgeCreator__factory + const erc20BridgeCreator = await erc20BridgeCreatorFac.deploy() const rollupCreatorFac = (await ethers.getContractFactory( 'RollupCreator' @@ -167,7 +172,8 @@ const setup = async () => { const rollupCreator = await rollupCreatorFac.deploy() await rollupCreator.setTemplates( - bridgeCreator.address, + ethBridgeCreator.address, + erc20BridgeCreator.address, oneStepProofEntry.address, challengeManagerTemplate.address, rollupAdminLogicTemplate.address, @@ -179,7 +185,8 @@ const setup = async () => { const response = await rollupCreator.createRollup( await getDefaultConfig(), await sequencer.getAddress(), - [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()] + [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], + ethers.constants.AddressZero ) const rec = await response.wait() From cc5a70ffb1c0d0f13dbd3d569555d7879ed08c11 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 18 Jul 2023 17:17:20 +0200 Subject: [PATCH 058/176] Update rollup creator to use both eth and erc20 bridge creators --- hardhat.config.ts | 3 +++ package.json | 2 ++ scripts/deployment.ts | 5 ++++- yarn.lock | 5 +++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 76929c70..b50c6b33 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -5,6 +5,9 @@ import '@nomiclabs/hardhat-etherscan' import '@typechain/hardhat' import 'solidity-coverage' import 'hardhat-gas-reporter' +import dotenv from 'dotenv' + +dotenv.config() const solidity = { compilers: [ diff --git a/package.json b/package.json index c053aa7d..4fcea9ba 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "test:e2e": "hardhat test test/e2e/*.ts", "postinstall": "patch-package", "deploy-factory": "hardhat run scripts/deployment.ts", + "deploy-factory:goerli": "hardhat run scripts/deployment.ts --network arbGoerliRollup", "deploy-rollup": "hardhat run scripts/rollupCreation.ts" }, "dependencies": { @@ -36,6 +37,7 @@ "@ethersproject/providers": "^5.7.2", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", + "dotenv": "^16.3.1", "patch-package": "^6.4.7" }, "private": false, diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 9a5bf94f..257311e8 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -40,7 +40,7 @@ async function verifyContract( } // Function to handle contract deployment -async function deployContract( +export async function deployContract( contractName: string, signer: any, constructorArgs: any[] = [] @@ -61,6 +61,7 @@ async function deployAllContracts( signer: any ): Promise> { const bridgeCreator = await deployContract('BridgeCreator', signer) + const erc20BridgeCreator = await deployContract('ERC20BridgeCreator', signer) const prover0 = await deployContract('OneStepProver0', signer) const proverMem = await deployContract('OneStepProverMemory', signer) const proverMath = await deployContract('OneStepProverMath', signer) @@ -82,6 +83,7 @@ async function deployAllContracts( const rollupCreator = await deployContract('RollupCreator', signer) return { bridgeCreator, + erc20BridgeCreator, prover0, proverMem, proverMath, @@ -107,6 +109,7 @@ async function main() { console.log('Waiting for the Template to be set on the Rollup Creator') await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, + contracts.erc20BridgeCreator.address, contracts.osp.address, contracts.challengeManager.address, contracts.rollupAdmin.address, diff --git a/yarn.lock b/yarn.lock index f83dbf09..6e0849cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4012,6 +4012,11 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.1" +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + dotignore@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" From e415340cebf44063e1ff1e5c8631039c73bc29e2 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 19 Jul 2023 14:50:52 +0200 Subject: [PATCH 059/176] Add support for deploying ERC20 rollup --- package.json | 4 ++-- scripts/createERC20Rollup.ts | 32 ++++++++++++++++++++++++++++++++ scripts/createEthRollup.ts | 13 +++++++++++++ scripts/deployment.ts | 2 +- scripts/rollupCreation.ts | 18 ++++++++---------- 5 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 scripts/createERC20Rollup.ts create mode 100644 scripts/createEthRollup.ts diff --git a/package.json b/package.json index 4fcea9ba..1e2afdb1 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ "test:e2e": "hardhat test test/e2e/*.ts", "postinstall": "patch-package", "deploy-factory": "hardhat run scripts/deployment.ts", - "deploy-factory:goerli": "hardhat run scripts/deployment.ts --network arbGoerliRollup", - "deploy-rollup": "hardhat run scripts/rollupCreation.ts" + "deploy-rollup": "hardhat run scripts/createEthRollup.ts", + "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { "@arbitrum/sdk": "^3.1.3", diff --git a/scripts/createERC20Rollup.ts b/scripts/createERC20Rollup.ts new file mode 100644 index 00000000..d6c68d87 --- /dev/null +++ b/scripts/createERC20Rollup.ts @@ -0,0 +1,32 @@ +import { ethers } from 'hardhat' +import '@nomiclabs/hardhat-ethers' +import { Signer } from 'ethers' +import { ERC20PresetFixedSupply__factory } from '../build/types/factories/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply__factory' +import { createRollup } from './rollupCreation' + +async function deployERC20Token(deployer: Signer): Promise { + const factory = await new ERC20PresetFixedSupply__factory(deployer).deploy( + 'FeeToken', + 'FEE', + ethers.utils.parseEther('1000000000'), + await deployer.getAddress() + ) + const feeToken = await factory.deployed() + + return feeToken.address +} + +async function main() { + const [deployer] = await ethers.getSigners() + const customFeeTokenAddress = await deployERC20Token(deployer) + + console.log('Creating new rollup with', customFeeTokenAddress, 'as fee token') + await createRollup(customFeeTokenAddress) +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/scripts/createEthRollup.ts b/scripts/createEthRollup.ts new file mode 100644 index 00000000..eb11e83d --- /dev/null +++ b/scripts/createEthRollup.ts @@ -0,0 +1,13 @@ +import '@nomiclabs/hardhat-ethers' +import { createRollup } from './rollupCreation' + +async function main() { + await createRollup() +} + +main() + .then(() => process.exit(0)) + .catch((error: Error) => { + console.error(error) + process.exit(1) + }) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 257311e8..437500b5 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -40,7 +40,7 @@ async function verifyContract( } // Function to handle contract deployment -export async function deployContract( +async function deployContract( contractName: string, signer: any, constructorArgs: any[] = [] diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 2c9af885..9eadb476 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -21,7 +21,7 @@ interface RollupCreatedEvent { } } -async function main() { +export async function createRollup(feeToken?: string) { const rollupCreatorAddress = process.env.ROLLUP_CREATOR_ADDRESS if (!rollupCreatorAddress) { @@ -39,12 +39,16 @@ async function main() { const [signer] = await ethers.getSigners() - const rollupCreator = await new ethers.Contract( + const rollupCreator = new ethers.Contract( rollupCreatorAddress, rollupCreatorAbi, signer ) + if (!feeToken) { + feeToken = ethers.constants.AddressZero + } + try { let vals: boolean[] = [] for (let i = 0; i < config.validators.length; i++) { @@ -55,7 +59,8 @@ async function main() { const createRollupTx = await rollupCreator.createRollup( config.rollupConfig, config.batchPoster, - config.validators + config.validators, + feeToken ) const createRollupReceipt = await createRollupTx.wait() @@ -130,10 +135,3 @@ async function main() { ) } } - -main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error) - process.exit(1) - }) From 14f7d01dd8e836477ab94f845a47a51c49ec3e53 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 19 Jul 2023 14:54:08 +0200 Subject: [PATCH 060/176] Add .env sample for goerli --- .env.sample.goerli | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .env.sample.goerli diff --git a/.env.sample.goerli b/.env.sample.goerli new file mode 100644 index 00000000..4d6dcc74 --- /dev/null +++ b/.env.sample.goerli @@ -0,0 +1,4 @@ +ROLLUP_CREATOR_ADDRESS="" +ARBISCAN_API_KEY="" +## deployer key +DEVNET_PRIVKEY="" \ No newline at end of file From b8a042bc670882e5cea3b07d6dc70c9a9a234f22 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 19 Jul 2023 14:55:20 +0200 Subject: [PATCH 061/176] Rename action --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e2afdb1..f739b391 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "test:e2e": "hardhat test test/e2e/*.ts", "postinstall": "patch-package", "deploy-factory": "hardhat run scripts/deployment.ts", - "deploy-rollup": "hardhat run scripts/createEthRollup.ts", + "deploy-eth-rollup": "hardhat run scripts/createEthRollup.ts", "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { From df77534aa8a6800c3f55d16898346cfcc5e63c3b Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Thu, 20 Jul 2023 11:11:29 -0400 Subject: [PATCH 062/176] add getL1RewardRate and getL1RewardRecipient methods to ArbGasInfo interface --- src/precompiles/ArbGasInfo.sol | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/precompiles/ArbGasInfo.sol b/src/precompiles/ArbGasInfo.sol index ff91c037..23b42c08 100644 --- a/src/precompiles/ArbGasInfo.sol +++ b/src/precompiles/ArbGasInfo.sol @@ -95,6 +95,12 @@ interface ArbGasInfo { /// @notice Get how slowly ArbOS updates its estimate of the L1 basefee function getL1BaseFeeEstimateInertia() external view returns (uint64); + /// @notice Get the L1 pricer reward rate + function getL1RewardRate() external view returns (uint64); + + /// @notice Get the L1 pricer reward recipient + function getL1RewardRecipient() external view returns (address); + /// @notice Deprecated -- Same as getL1BaseFeeEstimate() function getL1GasPriceEstimate() external view returns (uint256); From 1d6ae10655bbe7482e541dc1f02fe6fbc647858f Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 24 Jul 2023 15:21:32 +0200 Subject: [PATCH 063/176] Add option to provide existing ERC20 token to be used as rollup's fee token --- .env.sample.goerli | 5 ++++- scripts/createERC20Rollup.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.env.sample.goerli b/.env.sample.goerli index 4d6dcc74..52bf51b5 100644 --- a/.env.sample.goerli +++ b/.env.sample.goerli @@ -1,4 +1,7 @@ ROLLUP_CREATOR_ADDRESS="" ARBISCAN_API_KEY="" ## deployer key -DEVNET_PRIVKEY="" \ No newline at end of file +DEVNET_PRIVKEY="" + +## optional - address of already deployed ERC20 token which shall be used as rollup's fee token +FEE_TOKEN_ADDRESS="" diff --git a/scripts/createERC20Rollup.ts b/scripts/createERC20Rollup.ts index d6c68d87..000e8d64 100644 --- a/scripts/createERC20Rollup.ts +++ b/scripts/createERC20Rollup.ts @@ -18,7 +18,14 @@ async function deployERC20Token(deployer: Signer): Promise { async function main() { const [deployer] = await ethers.getSigners() - const customFeeTokenAddress = await deployERC20Token(deployer) + + let customFeeTokenAddress = process.env.FEE_TOKEN_ADDRESS + if (!customFeeTokenAddress) { + console.log( + 'FEE_TOKEN_ADDRESS env var not provided, deploying new ERC20 token' + ) + customFeeTokenAddress = await deployERC20Token(deployer) + } console.log('Creating new rollup with', customFeeTokenAddress, 'as fee token') await createRollup(customFeeTokenAddress) From 1aa65995664346a3ad5e874fd3581a4d6f34b734 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 26 Jul 2023 14:56:12 +0200 Subject: [PATCH 064/176] Mark getter read-only --- src/bridge/IERC20Bridge.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridge/IERC20Bridge.sol b/src/bridge/IERC20Bridge.sol index f937a1c6..b54a28c4 100644 --- a/src/bridge/IERC20Bridge.sol +++ b/src/bridge/IERC20Bridge.sol @@ -15,7 +15,7 @@ interface IERC20Bridge is IBridge { * are not supported to be used as chain's native token, as they can break collateralization * invariants. */ - function nativeToken() external returns (address); + function nativeToken() external view returns (address); /** * @dev Enqueue a message in the delayed inbox accumulator. From 09493b6fd9b3284d0ac243f6401631367e4b0f48 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Wed, 26 Jul 2023 17:20:35 -0500 Subject: [PATCH 065/176] add rectifyChainOwner function and ChainOwnerRectified event to ArbOwnerPublic --- src/precompiles/ArbOwnerPublic.sol | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/precompiles/ArbOwnerPublic.sol b/src/precompiles/ArbOwnerPublic.sol index d6fd6831..1a4314c5 100644 --- a/src/precompiles/ArbOwnerPublic.sol +++ b/src/precompiles/ArbOwnerPublic.sol @@ -10,6 +10,12 @@ interface ArbOwnerPublic { /// @notice See if the user is a chain owner function isChainOwner(address addr) external view returns (bool); + /** + * @notice Rectify the list of chain owners + * If successful, emits ChainOwnerRectified event. + */ + function rectifyChainOwner(address ownerToRectify) external; + /// @notice Retrieves the list of chain owners function getAllChainOwners() external view returns (address[] memory); @@ -18,4 +24,6 @@ interface ArbOwnerPublic { /// @notice Get the infrastructure fee collector function getInfraFeeAccount() external view returns (address); + + event ChainOwnerRectified(address rectifiedOwner); } From 7ea1da311458817c94dd776ea0a81ebfbb53c2e8 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Thu, 27 Jul 2023 10:56:33 -0500 Subject: [PATCH 066/176] document rate measured in --- src/precompiles/ArbGasInfo.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/precompiles/ArbGasInfo.sol b/src/precompiles/ArbGasInfo.sol index 23b42c08..d9d1ed2f 100644 --- a/src/precompiles/ArbGasInfo.sol +++ b/src/precompiles/ArbGasInfo.sol @@ -95,7 +95,7 @@ interface ArbGasInfo { /// @notice Get how slowly ArbOS updates its estimate of the L1 basefee function getL1BaseFeeEstimateInertia() external view returns (uint64); - /// @notice Get the L1 pricer reward rate + /// @notice Get the L1 pricer reward rate, in wei per unit function getL1RewardRate() external view returns (uint64); /// @notice Get the L1 pricer reward recipient From a724d3debdb9c071467aa5321dc3545c774d381a Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Sun, 30 Jul 2023 14:06:46 -0600 Subject: [PATCH 067/176] Use L2 block number for keyset info if applicable --- src/bridge/SequencerInbox.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 8c2c5387..2ba25c16 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -28,6 +28,7 @@ import "./ISequencerInbox.sol"; import "../rollup/IRollupLogic.sol"; import "./Messages.sol"; import "../precompiles/ArbGasInfo.sol"; +import "../precompiles/ArbSys.sol"; import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; import {GasRefundEnabled, IGasRefunder} from "../libraries/IGasRefunder.sol"; @@ -454,9 +455,13 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox require(keysetBytes.length < 64 * 1024, "keyset is too large"); if (dasKeySetInfo[ksHash].isValidKeyset) revert AlreadyValidDASKeyset(ksHash); + uint256 creationBlock = block.number; + if (hostChainIsArbitrum) { + creationBlock = ArbSys(address(100)).arbBlockNumber(); + } dasKeySetInfo[ksHash] = DasKeySetInfo({ isValidKeyset: true, - creationBlock: uint64(block.number) + creationBlock: uint64(creationBlock) }); emit SetValidKeyset(ksHash, keysetBytes); emit OwnerFunctionCalled(2); From 64717f5b8a502352326759f419ffc1c8a080ef92 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 3 Aug 2023 13:30:37 +0200 Subject: [PATCH 068/176] Add upgrade executor to rollup creation flow --- src/libraries/UpgradeExecutor.sol | 57 ++++++++++++ src/rollup/RollupCreator.sol | 20 ++++- test/contract/arbRollup.spec.ts | 7 ++ test/foundry/RollupCreator.t.sol | 139 ++++++++++++++++++++++-------- 4 files changed, 187 insertions(+), 36 deletions(-) create mode 100644 src/libraries/UpgradeExecutor.sol diff --git a/src/libraries/UpgradeExecutor.sol b/src/libraries/UpgradeExecutor.sol new file mode 100644 index 00000000..ada8c6de --- /dev/null +++ b/src/libraries/UpgradeExecutor.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; + +/// @title A root contract from which it execute upgrades +/// @notice Does not contain upgrade logic itself, only the means to call upgrade contracts and execute them +/// @dev We use these upgrade contracts as they allow multiple actions to take place in an upgrade +/// and for these actions to interact. However because we are delegatecalling into these upgrade +/// contracts, it's important that these upgrade contract do not touch or modify contract state. +contract UpgradeExecutor is Initializable, AccessControlUpgradeable, ReentrancyGuard { + using Address for address; + + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); + + /// @notice Emitted when an upgrade execution occurs + event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); + + /// @notice Initialise the upgrade executor + /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE + /// @param executors Can call the execute function - EXECUTOR_ROLE + function initialize(address admin, address[] memory executors) public initializer { + require(admin != address(0), "UpgradeExecutor: zero admin"); + + __AccessControl_init(); + + _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); + _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); + + _setupRole(ADMIN_ROLE, admin); + for (uint256 i = 0; i < executors.length; ++i) { + _setupRole(EXECUTOR_ROLE, executors[i]); + } + } + + /// @notice Execute an upgrade by delegate calling an upgrade contract + /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract + /// will have access to the state of this contract - including the roles. Only upgrade contracts + /// that do not touch local state should be used. + function execute(address upgrade, bytes memory upgradeCallData) + public + payable + onlyRole(EXECUTOR_ROLE) + nonReentrant + { + // OZ Address library check if the address is a contract and bubble up inner revert reason + address(upgrade).functionDelegateCall( + upgradeCallData, + "UpgradeExecutor: inner delegate call failed without reason" + ); + + emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); + } +} diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 0d257703..81a1ac76 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -8,6 +8,7 @@ import "./RollupProxy.sol"; import "./IRollupAdmin.sol"; import "./BridgeCreator.sol"; import "./ERC20BridgeCreator.sol"; +import "../libraries/UpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; @@ -34,6 +35,7 @@ contract RollupCreator is Ownable { IChallengeManager public challengeManagerTemplate; IRollupAdmin public rollupAdminLogic; IRollupUser public rollupUserLogic; + UpgradeExecutor public upgradeExecutorLogic; address public validatorUtils; address public validatorWalletCreator; @@ -55,6 +57,7 @@ contract RollupCreator is Ownable { IChallengeManager _challengeManagerLogic, IRollupAdmin _rollupAdminLogic, IRollupUser _rollupUserLogic, + UpgradeExecutor _upgradeExecutorLogic, address _validatorUtils, address _validatorWalletCreator ) external onlyOwner { @@ -64,6 +67,7 @@ contract RollupCreator is Ownable { challengeManagerTemplate = _challengeManagerLogic; rollupAdminLogic = _rollupAdminLogic; rollupUserLogic = _rollupUserLogic; + upgradeExecutorLogic = _upgradeExecutorLogic; validatorUtils = _validatorUtils; validatorWalletCreator = _validatorWalletCreator; emit TemplatesUpdated(); @@ -91,6 +95,20 @@ contract RollupCreator is Ownable { ) external returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); + // deploy and init upgrade executor + UpgradeExecutor upgradeExecutor = UpgradeExecutor( + address( + new TransparentUpgradeableProxy( + address(upgradeExecutorLogic), + address(proxyAdmin), + bytes("") + ) + ) + ); + address[] memory upgradeExecutors = new address[](1); + upgradeExecutors[0] = config.owner; + upgradeExecutor.initialize(address(upgradeExecutor), upgradeExecutors); + // Create the rollup proxy to figure out the address and initialize it later RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); @@ -140,7 +158,7 @@ contract RollupCreator is Ownable { osp ); - proxyAdmin.transferOwnership(config.owner); + proxyAdmin.transferOwnership(address(upgradeExecutor)); // initialize the rollup with this contract as owner to set batch poster and validators // it will transfer the ownership back to the actual owner later diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 884da19d..68ae8e1c 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -37,6 +37,7 @@ import { RollupUserLogic__factory, SequencerInbox, SequencerInbox__factory, + UpgradeExecutor__factory, } from '../../build/types' import { initializeAccounts } from './utils' @@ -156,6 +157,11 @@ const setup = async () => { )) as RollupUserLogic__factory const rollupUserLogicTemplate = await rollupUserLogicFac.deploy() + const upgradeExecutorLogicFac = (await ethers.getContractFactory( + 'UpgradeExecutor' + )) as UpgradeExecutor__factory + const upgradeExecutorLogic = await upgradeExecutorLogicFac.deploy() + const ethBridgeCreatorFac = (await ethers.getContractFactory( 'BridgeCreator' )) as BridgeCreator__factory @@ -178,6 +184,7 @@ const setup = async () => { challengeManagerTemplate.address, rollupAdminLogicTemplate.address, rollupUserLogicTemplate.address, + upgradeExecutorLogic.address, ethers.constants.AddressZero, ethers.constants.AddressZero ) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 9ae2b8db..dcec5b93 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -35,6 +35,8 @@ contract RollupCreatorTest is Test { BridgeCreator ethBridgeCreator = new BridgeCreator(); ERC20BridgeCreator erc20BridgeCreator = new ERC20BridgeCreator(); + UpgradeExecutor upgradeExecutorLogic = new UpgradeExecutor(); + ( IOneStepProofEntry ospEntry, IChallengeManager challengeManager, @@ -53,6 +55,7 @@ contract RollupCreatorTest is Test { challengeManager, _rollupAdmin, _rollupUser, + upgradeExecutorLogic, address(new ValidatorUtils()), address(new ValidatorWalletCreator()) ); @@ -64,12 +67,8 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -80,7 +79,7 @@ contract RollupCreatorTest is Test { loserStakeEscrow: address(200), chainId: 1337, chainConfig: "abc", - genesisBlockNum: 15000000, + genesisBlockNum: 15_000_000, sequencerInboxMaxTimeVariation: timeVars }); @@ -89,12 +88,8 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - address(0) - ); + address rollupAddress = + rollupCreator.createRollup(config, batchPoster, validators, address(0)); vm.stopPrank(); @@ -123,21 +118,59 @@ contract RollupCreatorTest is Test { ISequencerInbox(address(rollup.sequencerInbox())).isBatchPoster(batchPoster), "Invalid batch poster" ); + + // check proxy admin for non-rollup contracts + address proxyAdminExpectedAddress = computeCreateAddress(address(rollupCreator), 1); + + assertEq( + _getProxyAdmin(address(rollup.sequencerInbox())), + proxyAdminExpectedAddress, + "Invalid seqInbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.bridge())), + proxyAdminExpectedAddress, + "Invalid bridge's proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.inbox())), + proxyAdminExpectedAddress, + "Invalid inbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.rollupEventInbox())), + proxyAdminExpectedAddress, + "Invalid rollupEventInbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.challengeManager())), + proxyAdminExpectedAddress, + "Invalid challengeManager's proxyAdmin owner" + ); + + // check upgrade executor owns proxyAdmin + address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 2); + assertEq( + ProxyAdmin(_getProxyAdmin(address(rollup.sequencerInbox()))).owner(), + upgradeExecutorExpectedAddress, + "Invalid proxyAdmin's owner" + ); + + // check rollupOwner has executor role + UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); + assertTrue( + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" + ); } function test_createErc20Rollup() public { vm.startPrank(deployer); - address nativeToken = address( - new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) - ); + address nativeToken = + address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -148,7 +181,7 @@ contract RollupCreatorTest is Test { loserStakeEscrow: address(200), chainId: 1337, chainConfig: "abc", - genesisBlockNum: 15000000, + genesisBlockNum: 15_000_000, sequencerInboxMaxTimeVariation: timeVars }); @@ -157,12 +190,8 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - nativeToken - ); + address rollupAddress = + rollupCreator.createRollup(config, batchPoster, validators, nativeToken); vm.stopPrank(); @@ -194,9 +223,50 @@ contract RollupCreatorTest is Test { // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( - IERC20Bridge(address(bridge)).nativeToken(), - nativeToken, - "Invalid native token ref" + IERC20Bridge(address(bridge)).nativeToken(), nativeToken, "Invalid native token ref" + ); + + // check proxy admin for non-rollup contracts + address proxyAdminExpectedAddress = computeCreateAddress(address(rollupCreator), 1); + + assertEq( + _getProxyAdmin(address(rollup.sequencerInbox())), + proxyAdminExpectedAddress, + "Invalid seqInbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.bridge())), + proxyAdminExpectedAddress, + "Invalid bridge's proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.inbox())), + proxyAdminExpectedAddress, + "Invalid inbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.rollupEventInbox())), + proxyAdminExpectedAddress, + "Invalid rollupEventInbox' proxyAdmin owner" + ); + assertEq( + _getProxyAdmin(address(rollup.challengeManager())), + proxyAdminExpectedAddress, + "Invalid challengeManager's proxyAdmin owner" + ); + + // check upgrade executor owns proxyAdmin + address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 2); + assertEq( + ProxyAdmin(_getProxyAdmin(address(rollup.sequencerInbox()))).owner(), + upgradeExecutorExpectedAddress, + "Invalid proxyAdmin's owner" + ); + + // check rollupOwner has executor role + UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); + assertTrue( + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); } @@ -236,9 +306,8 @@ contract RollupCreatorTest is Test { } function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = bytes32( - uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 - ); + bytes32 secondarySlot = + bytes32(uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1); return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } From 884625ec080a5f62b971f99f6a7450e29be5efc2 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 3 Aug 2023 13:50:13 +0200 Subject: [PATCH 069/176] Test upgrading one of bridge contracts --- test/foundry/RollupCreator.t.sol | 65 ++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index dcec5b93..34ebf666 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -270,6 +270,56 @@ contract RollupCreatorTest is Test { ); } + function test_upgrade() public { + vm.startPrank(deployer); + + // deployment params + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + Config memory config = Config({ + confirmPeriodBlocks: 20, + extraChallengeTimeBlocks: 200, + stakeToken: address(0), + baseStake: 1000, + wasmModuleRoot: keccak256("wasm"), + owner: rollupOwner, + loserStakeEscrow: address(200), + chainId: 1337, + chainConfig: "abc", + genesisBlockNum: 15_000_000, + sequencerInboxMaxTimeVariation: timeVars + }); + + /// deploy rollup + address batchPoster = makeAddr("batch poster"); + address[] memory validators = new address[](2); + validators[0] = makeAddr("validator1"); + validators[1] = makeAddr("validator2"); + address rollupAddress = + rollupCreator.createRollup(config, batchPoster, validators, address(0)); + + vm.stopPrank(); + + //// upgrade inbox + RollupCore rollup = RollupCore(rollupAddress); + address inbox = address(rollup.inbox()); + address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); + UpgradeExecutor upgradeExecutor = + UpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); + + Dummy newLogicImpl = new Dummy(); + bytes memory data = abi.encodeWithSelector( + ProxyUpgradeAction.perform.selector, address(proxyAdmin), inbox, address(newLogicImpl) + ); + + address upgradeAction = address(new ProxyUpgradeAction()); + vm.prank(rollupOwner); + upgradeExecutor.execute(upgradeAction, data); + + // check upgrade was successful + assertEq(_getImpl(inbox), address(newLogicImpl)); + } + function _prepareRollupDeployment() internal returns ( @@ -300,6 +350,11 @@ contract RollupCreatorTest is Test { return address(uint160(uint256(vm.load(proxy, adminSlot)))); } + function _getImpl(address proxy) internal view returns (address) { + bytes32 implSlot = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); + return address(uint160(uint256(vm.load(proxy, implSlot)))); + } + function _getPrimary(address proxy) internal view returns (address) { bytes32 primarySlot = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); return address(uint160(uint256(vm.load(proxy, primarySlot)))); @@ -311,3 +366,13 @@ contract RollupCreatorTest is Test { return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } + +contract ProxyUpgradeAction { + function perform(address admin, address payable target, address newLogic) public payable { + ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic); + } +} + +contract Dummy { + function dummy() public {} +} From a7eae8447ad93fe1e8fce7ff4377b7093c191f55 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 3 Aug 2023 13:57:19 +0200 Subject: [PATCH 070/176] Check outbox owner --- test/foundry/RollupCreator.t.sol | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 34ebf666..ebb9cb75 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -137,6 +137,11 @@ contract RollupCreatorTest is Test { proxyAdminExpectedAddress, "Invalid inbox' proxyAdmin owner" ); + assertEq( + _getProxyAdmin(address(rollup.outbox())), + proxyAdminExpectedAddress, + "Invalid outbox' proxyAdmin owner" + ); assertEq( _getProxyAdmin(address(rollup.rollupEventInbox())), proxyAdminExpectedAddress, @@ -244,6 +249,11 @@ contract RollupCreatorTest is Test { proxyAdminExpectedAddress, "Invalid inbox' proxyAdmin owner" ); + assertEq( + _getProxyAdmin(address(rollup.outbox())), + proxyAdminExpectedAddress, + "Invalid outbox' proxyAdmin owner" + ); assertEq( _getProxyAdmin(address(rollup.rollupEventInbox())), proxyAdminExpectedAddress, From 768d0295fc1a33a79633e0a46e0200f5d5995bcb Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 3 Aug 2023 15:08:13 +0200 Subject: [PATCH 071/176] Rename to 'executors' Co-authored-by: gzeon --- src/rollup/RollupCreator.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 81a1ac76..ecf2da78 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -105,9 +105,9 @@ contract RollupCreator is Ownable { ) ) ); - address[] memory upgradeExecutors = new address[](1); - upgradeExecutors[0] = config.owner; - upgradeExecutor.initialize(address(upgradeExecutor), upgradeExecutors); + address[] memory executors = new address[](1); + executors[0] = config.owner; + upgradeExecutor.initialize(address(upgradeExecutor), executors); // Create the rollup proxy to figure out the address and initialize it later RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); From d219c942e04f11332f4f2e249cacfe6c2a76df3a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 3 Aug 2023 17:23:04 +0200 Subject: [PATCH 072/176] Add proxy admin getter to inbox Will be used from token bridge creator to set the same proxy admin for token bridge contracts --- src/bridge/AbsInbox.sol | 11 +++++++++++ src/bridge/IInbox.sol | 3 +++ src/mocks/InboxStub.sol | 4 ++++ test/foundry/AbsInbox.t.sol | 4 ++++ test/foundry/RollupCreator.t.sol | 2 +- 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bridge/AbsInbox.sol b/src/bridge/AbsInbox.sol index 45c5a6ce..93b082ac 100644 --- a/src/bridge/AbsInbox.sol +++ b/src/bridge/AbsInbox.sol @@ -30,6 +30,7 @@ import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol"; /** * @title Inbox for user and contract originated messages @@ -37,6 +38,11 @@ import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; * to await inclusion in the SequencerInbox */ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { + /// @dev Storage slot with the admin of the contract. + /// This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. + bytes32 internal constant _ADMIN_SLOT = + 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + /// @inheritdoc IInbox IBridge public bridge; /// @inheritdoc IInbox @@ -206,6 +212,11 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { ); } + /// @inheritdoc IInbox + function getProxyAdmin() external view returns (address) { + return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; + } + function _createRetryableTicket( address to, uint256 l2CallValue, diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index 2fc7df68..39883491 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -77,6 +77,9 @@ interface IInbox is IDelayedMessageProvider { /// @notice check if allowList is enabled function allowListEnabled() external view returns (bool); + /// @notice returns the current admin + function getProxyAdmin() external view returns (address); + // ---------- initializer ---------- function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index 3c4776d0..4b778716 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -202,4 +202,8 @@ contract InboxStub is IInbox, IEthInbox { function allowListEnabled() external pure returns (bool) { revert("NOT_IMPLEMENTED"); } + + function getProxyAdmin() external pure returns (address) { + revert("NOT_IMPLEMENTED"); + } } diff --git a/test/foundry/AbsInbox.t.sol b/test/foundry/AbsInbox.t.sol index 0854c0b1..cccda745 100644 --- a/test/foundry/AbsInbox.t.sol +++ b/test/foundry/AbsInbox.t.sol @@ -20,6 +20,10 @@ abstract contract AbsInboxTest is Test { address public seqInbox = address(1001); /* solhint-disable func-name-mixedcase */ + function test_getProxyAdmin() public { + assertNotEq(inbox.getProxyAdmin(), address(0), "Invalid proxy admin"); + } + function test_setAllowList() public { address[] memory users = new address[](2); users[0] = address(300); diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index ebb9cb75..cf3560d9 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -133,7 +133,7 @@ contract RollupCreatorTest is Test { "Invalid bridge's proxyAdmin owner" ); assertEq( - _getProxyAdmin(address(rollup.inbox())), + rollup.inbox().getProxyAdmin(), proxyAdminExpectedAddress, "Invalid inbox' proxyAdmin owner" ); From 9400c53d95654ac9d4d80797c89399d44189d967 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Thu, 3 Aug 2023 12:13:15 -0500 Subject: [PATCH 073/176] add comments --- src/precompiles/ArbGasInfo.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/precompiles/ArbGasInfo.sol b/src/precompiles/ArbGasInfo.sol index d9d1ed2f..a30772ed 100644 --- a/src/precompiles/ArbGasInfo.sol +++ b/src/precompiles/ArbGasInfo.sol @@ -96,9 +96,11 @@ interface ArbGasInfo { function getL1BaseFeeEstimateInertia() external view returns (uint64); /// @notice Get the L1 pricer reward rate, in wei per unit + /// Available in ArbOS version 11 function getL1RewardRate() external view returns (uint64); /// @notice Get the L1 pricer reward recipient + /// Available in ArbOS version 11 function getL1RewardRecipient() external view returns (address); /// @notice Deprecated -- Same as getL1BaseFeeEstimate() From 1f3fcda1c1695b28cd305995e426dba4f3899bed Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 4 Aug 2023 12:22:21 +0200 Subject: [PATCH 074/176] Rename Inbox interfaces to keep compatibility IEthInbox -> IInbox IInbox -> IInboxBase --- src/bridge/AbsInbox.sol | 28 ++-- src/bridge/ERC20Inbox.sol | 6 +- src/bridge/IERC20Inbox.sol | 4 +- src/bridge/IEthInbox.sol | 133 ---------------- src/bridge/IInbox.sol | 144 ++++++++++++------ src/bridge/IInboxBase.sol | 83 ++++++++++ src/bridge/Inbox.sol | 28 ++-- src/bridge/SequencerInbox.sol | 2 +- src/mocks/InboxStub.sol | 4 +- src/rollup/AbsBridgeCreator.sol | 12 +- src/rollup/BridgeCreator.sol | 2 +- src/rollup/Config.sol | 4 +- src/rollup/ERC20BridgeCreator.sol | 2 +- src/rollup/IBridgeCreator.sol | 6 +- src/rollup/IRollupCore.sol | 2 +- src/rollup/RollupAdminLogic.sol | 2 +- src/rollup/RollupCore.sol | 2 +- src/rollup/RollupCreator.sol | 2 +- src/rollup/RollupLib.sol | 2 +- .../InterfaceCompatibilityTester.sol | 2 +- test/foundry/AbsInbox.t.sol | 2 +- test/foundry/ERC20BridgeCreator.t.sol | 2 +- test/foundry/ERC20Inbox.t.sol | 2 +- test/foundry/Inbox.t.sol | 8 +- test/storage/RollupAdminLogic.dot | 2 +- test/storage/RollupCore.dot | 2 +- test/storage/RollupUserLogic.dot | 2 +- 27 files changed, 245 insertions(+), 245 deletions(-) delete mode 100644 src/bridge/IEthInbox.sol create mode 100644 src/bridge/IInboxBase.sol diff --git a/src/bridge/AbsInbox.sol b/src/bridge/AbsInbox.sol index 45c5a6ce..8db527c5 100644 --- a/src/bridge/AbsInbox.sol +++ b/src/bridge/AbsInbox.sol @@ -15,7 +15,7 @@ import { NotRollupOrOwner, RetryableData } from "../libraries/Error.sol"; -import "./IInbox.sol"; +import "./IInboxBase.sol"; import "./ISequencerInbox.sol"; import "./IBridge.sol"; import "../libraries/AddressAliasHelper.sol"; @@ -36,24 +36,24 @@ import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; * @notice Messages created via this inbox are enqueued in the delayed accumulator * to await inclusion in the SequencerInbox */ -abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { - /// @inheritdoc IInbox +abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInboxBase { + /// @inheritdoc IInboxBase IBridge public bridge; - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase ISequencerInbox public sequencerInbox; /// ------------------------------------ allow list start ------------------------------------ /// - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase bool public allowListEnabled; - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase mapping(address => bool) public isAllowed; event AllowListAddressSet(address indexed user, bool val); event AllowListEnabledUpdated(bool isEnabled); - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function setAllowList(address[] memory user, bool[] memory val) external onlyRollupOrOwner { require(user.length == val.length, "INVALID_INPUT"); @@ -63,7 +63,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { } } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function setAllowListEnabled(bool _allowListEnabled) external onlyRollupOrOwner { require(_allowListEnabled != allowListEnabled, "ALREADY_SET"); allowListEnabled = _allowListEnabled; @@ -99,12 +99,12 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { return deployTimeChainId != block.chainid; } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function pause() external onlyRollupOrOwner { _pause(); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function unpause() external onlyRollupOrOwner { _unpause(); } @@ -120,7 +120,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { __Pausable_init(); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function sendL2MessageFromOrigin(bytes calldata messageData) external whenNotPaused @@ -137,7 +137,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { return msgNum; } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function sendL2Message(bytes calldata messageData) external whenNotPaused @@ -148,7 +148,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { return _deliverMessage(L2_MSG, msg.sender, messageData, 0); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function sendUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -178,7 +178,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInbox { ); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function sendContractTransaction( uint256 gasLimit, uint256 maxFeePerGas, diff --git a/src/bridge/ERC20Inbox.sol b/src/bridge/ERC20Inbox.sol index 0a065988..8d364c78 100644 --- a/src/bridge/ERC20Inbox.sol +++ b/src/bridge/ERC20Inbox.sol @@ -21,7 +21,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract ERC20Inbox is AbsInbox, IERC20Inbox { using SafeERC20 for IERC20; - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external initializer @@ -105,11 +105,11 @@ contract ERC20Inbox is AbsInbox, IERC20Inbox { ); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function calculateRetryableSubmissionFee(uint256, uint256) public pure - override(AbsInbox, IInbox) + override(AbsInbox, IInboxBase) returns (uint256) { // retryable ticket's submission fee is not charged when ERC20 token is used to pay for fees diff --git a/src/bridge/IERC20Inbox.sol b/src/bridge/IERC20Inbox.sol index dd1b8390..53182553 100644 --- a/src/bridge/IERC20Inbox.sol +++ b/src/bridge/IERC20Inbox.sol @@ -5,9 +5,9 @@ // solhint-disable-next-line compiler-version pragma solidity >=0.6.9 <0.9.0; -import "./IInbox.sol"; +import "./IInboxBase.sol"; -interface IERC20Inbox is IInbox { +interface IERC20Inbox is IInboxBase { /** * @notice Deposit native token from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract * @dev This does not trigger the fallback function when receiving in the L2 side. diff --git a/src/bridge/IEthInbox.sol b/src/bridge/IEthInbox.sol deleted file mode 100644 index dd484903..00000000 --- a/src/bridge/IEthInbox.sol +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -// solhint-disable-next-line compiler-version -pragma solidity >=0.6.9 <0.9.0; - -import "./IBridge.sol"; -import "./IInbox.sol"; - -interface IEthInbox is IInbox { - function sendL1FundedUnsignedTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - bytes calldata data - ) external payable returns (uint256); - - function sendL1FundedContractTransaction( - uint256 gasLimit, - uint256 maxFeePerGas, - address to, - bytes calldata data - ) external payable returns (uint256); - - /** - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendL1FundedUnsignedTransactionToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - bytes calldata data - ) external payable returns (uint256); - - /** - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendUnsignedTransactionToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - address to, - uint256 value, - bytes calldata data - ) external returns (uint256); - - /** - * @notice Send a message to initiate L2 withdrawal - * @dev This method can only be called upon L1 fork and will not alias the caller - * This method will revert if not called from origin - */ - function sendWithdrawEthToFork( - uint256 gasLimit, - uint256 maxFeePerGas, - uint256 nonce, - uint256 value, - address withdrawTo - ) external returns (uint256); - - /** - * @notice Deposit eth from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract - * @dev This does not trigger the fallback function when receiving in the L2 side. - * Look into retryable tickets if you are interested in this functionality. - * @dev This function should not be called inside contract constructors - */ - function depositEth() external payable returns (uint256); - - /** - * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts - * @dev all msg.value will deposited to callValueRefundAddress on L2 - * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error - * @param to destination L2 contract address - * @param l2CallValue call value for retryable L2 message - * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee - * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance - * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled - * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param data ABI encoded data of L2 message - * @return unique message number of the retryable transaction - */ - function createRetryableTicket( - address to, - uint256 l2CallValue, - uint256 maxSubmissionCost, - address excessFeeRefundAddress, - address callValueRefundAddress, - uint256 gasLimit, - uint256 maxFeePerGas, - bytes calldata data - ) external payable returns (uint256); - - /** - * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts - * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds - * come from the deposit alone, rather than falling back on the user's L2 balance - * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). - * createRetryableTicket method is the recommended standard. - * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error - * @param to destination L2 contract address - * @param l2CallValue call value for retryable L2 message - * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee - * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance - * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled - * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) - * @param data ABI encoded data of L2 message - * @return unique message number of the retryable transaction - */ - function unsafeCreateRetryableTicket( - address to, - uint256 l2CallValue, - uint256 maxSubmissionCost, - address excessFeeRefundAddress, - address callValueRefundAddress, - uint256 gasLimit, - uint256 maxFeePerGas, - bytes calldata data - ) external payable returns (uint256); - - // ---------- initializer ---------- - - /** - * @dev function to be called one time during the inbox upgrade process - * this is used to fix the storage slots - */ - function postUpgradeInit(IBridge _bridge) external; -} diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index 2fc7df68..2c7672d7 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -1,34 +1,46 @@ // Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// For license information, see https://github.com/nitro/blob/master/LICENSE // SPDX-License-Identifier: BUSL-1.1 // solhint-disable-next-line compiler-version pragma solidity >=0.6.9 <0.9.0; import "./IBridge.sol"; -import "./IDelayedMessageProvider.sol"; -import "./ISequencerInbox.sol"; +import "./IInboxBase.sol"; -interface IInbox is IDelayedMessageProvider { - function bridge() external view returns (IBridge); +interface IInbox is IInboxBase { + function sendL1FundedUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + bytes calldata data + ) external payable returns (uint256); - function sequencerInbox() external view returns (ISequencerInbox); + function sendL1FundedContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + bytes calldata data + ) external payable returns (uint256); /** - * @notice Send a generic L2 message to the chain - * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input - * @param messageData Data of the message being sent + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin */ - function sendL2MessageFromOrigin(bytes calldata messageData) external returns (uint256); + function sendL1FundedUnsignedTransactionToFork( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + bytes calldata data + ) external payable returns (uint256); /** - * @notice Send a generic L2 message to the chain - * @dev This method can be used to send any type of message that doesn't require L1 validation - * @param messageData Data of the message being sent + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin */ - function sendL2Message(bytes calldata messageData) external returns (uint256); - - function sendUnsignedTransaction( + function sendUnsignedTransactionToFork( uint256 gasLimit, uint256 maxFeePerGas, uint256 nonce, @@ -37,47 +49,85 @@ interface IInbox is IDelayedMessageProvider { bytes calldata data ) external returns (uint256); - function sendContractTransaction( + /** + * @notice Send a message to initiate L2 withdrawal + * @dev This method can only be called upon L1 fork and will not alias the caller + * This method will revert if not called from origin + */ + function sendWithdrawEthToFork( uint256 gasLimit, uint256 maxFeePerGas, - address to, + uint256 nonce, uint256 value, - bytes calldata data + address withdrawTo ) external returns (uint256); /** - * @notice Get the L1 fee for submitting a retryable - * @dev This fee can be paid by funds already in the L2 aliased address or by the current message value - * @dev This formula may change in the future, to future proof your code query this method instead of inlining!! - * @param dataLength The length of the retryable's calldata, in bytes - * @param baseFee The block basefee when the retryable is included in the chain, if 0 current block.basefee will be used + * @notice Deposit eth from L1 to L2 to address of the sender if sender is an EOA, and to its aliased address if the sender is a contract + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + * @dev This function should not be called inside contract constructors */ - function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) - external - view - returns (uint256); + function depositEth() external payable returns (uint256); - // ---------- onlyRollupOrOwner functions ---------- - - /// @notice pauses all inbox functionality - function pause() external; - - /// @notice unpauses all inbox functionality - function unpause() external; - - /// @notice add or remove users from allowList - function setAllowList(address[] memory user, bool[] memory val) external; - - /// @notice enable or disable allowList - function setAllowListEnabled(bool _allowListEnabled) external; - - /// @notice check if user is in allowList - function isAllowed(address user) external view returns (bool); + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev all msg.value will deposited to callValueRefundAddress on L2 + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + bytes calldata data + ) external payable returns (uint256); - /// @notice check if allowList is enabled - function allowListEnabled() external view returns (bool); + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev Same as createRetryableTicket, but does not guarantee that submission will succeed by requiring the needed funds + * come from the deposit alone, rather than falling back on the user's L2 balance + * @dev Advanced usage only (does not rewrite aliases for excessFeeRefundAddress and callValueRefundAddress). + * createRetryableTicket method is the recommended standard. + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function unsafeCreateRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + bytes calldata data + ) external payable returns (uint256); // ---------- initializer ---------- - function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; + /** + * @dev function to be called one time during the inbox upgrade process + * this is used to fix the storage slots + */ + function postUpgradeInit(IBridge _bridge) external; } diff --git a/src/bridge/IInboxBase.sol b/src/bridge/IInboxBase.sol new file mode 100644 index 00000000..0b4c40c8 --- /dev/null +++ b/src/bridge/IInboxBase.sol @@ -0,0 +1,83 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +// solhint-disable-next-line compiler-version +pragma solidity >=0.6.9 <0.9.0; + +import "./IBridge.sol"; +import "./IDelayedMessageProvider.sol"; +import "./ISequencerInbox.sol"; + +interface IInboxBase is IDelayedMessageProvider { + function bridge() external view returns (IBridge); + + function sequencerInbox() external view returns (ISequencerInbox); + + /** + * @notice Send a generic L2 message to the chain + * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input + * @param messageData Data of the message being sent + */ + function sendL2MessageFromOrigin(bytes calldata messageData) external returns (uint256); + + /** + * @notice Send a generic L2 message to the chain + * @dev This method can be used to send any type of message that doesn't require L1 validation + * @param messageData Data of the message being sent + */ + function sendL2Message(bytes calldata messageData) external returns (uint256); + + function sendUnsignedTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 nonce, + address to, + uint256 value, + bytes calldata data + ) external returns (uint256); + + function sendContractTransaction( + uint256 gasLimit, + uint256 maxFeePerGas, + address to, + uint256 value, + bytes calldata data + ) external returns (uint256); + + /** + * @notice Get the L1 fee for submitting a retryable + * @dev This fee can be paid by funds already in the L2 aliased address or by the current message value + * @dev This formula may change in the future, to future proof your code query this method instead of inlining!! + * @param dataLength The length of the retryable's calldata, in bytes + * @param baseFee The block basefee when the retryable is included in the chain, if 0 current block.basefee will be used + */ + function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) + external + view + returns (uint256); + + // ---------- onlyRollupOrOwner functions ---------- + + /// @notice pauses all inbox functionality + function pause() external; + + /// @notice unpauses all inbox functionality + function unpause() external; + + /// @notice add or remove users from allowList + function setAllowList(address[] memory user, bool[] memory val) external; + + /// @notice enable or disable allowList + function setAllowListEnabled(bool _allowListEnabled) external; + + /// @notice check if user is in allowList + function isAllowed(address user) external view returns (bool); + + /// @notice check if allowList is enabled + function allowListEnabled() external view returns (bool); + + + + function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; +} diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index 847d109e..88e5b41b 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -15,7 +15,7 @@ import { GasLimitTooLarge } from "../libraries/Error.sol"; import "./AbsInbox.sol"; -import "./IEthInbox.sol"; +import "./IInbox.sol"; import "./IBridge.sol"; import "./IEthBridge.sol"; import "../libraries/AddressAliasHelper.sol"; @@ -37,8 +37,8 @@ import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; * @notice Messages created via this inbox are enqueued in the delayed accumulator * to await inclusion in the SequencerInbox */ -contract Inbox is AbsInbox, IEthInbox { - /// @inheritdoc IInbox +contract Inbox is AbsInbox, IInbox { + /// @inheritdoc IInboxBase function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external initializer @@ -47,10 +47,10 @@ contract Inbox is AbsInbox, IEthInbox { __AbsInbox_init(_bridge, _sequencerInbox); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function postUpgradeInit(IBridge) external onlyDelegated onlyProxyOwner {} - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function sendL1FundedUnsignedTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -79,7 +79,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function sendL1FundedContractTransaction( uint256 gasLimit, uint256 maxFeePerGas, @@ -106,7 +106,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function sendL1FundedUnsignedTransactionToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -139,7 +139,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function sendUnsignedTransactionToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -173,7 +173,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function sendWithdrawEthToFork( uint256 gasLimit, uint256 maxFeePerGas, @@ -206,7 +206,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function depositEth() public payable whenNotPaused onlyAllowed returns (uint256) { address dest = msg.sender; @@ -268,7 +268,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function createRetryableTicket( address to, uint256 l2CallValue, @@ -293,7 +293,7 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IEthInbox + /// @inheritdoc IInbox function unsafeCreateRetryableTicket( address to, uint256 l2CallValue, @@ -318,11 +318,11 @@ contract Inbox is AbsInbox, IEthInbox { ); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) public view - override(AbsInbox, IInbox) + override(AbsInbox, IInboxBase) returns (uint256) { // Use current block basefee if baseFee parameter is 0 diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 2ba25c16..1b2fb464 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -23,7 +23,7 @@ import { NotForked } from "../libraries/Error.sol"; import "./IBridge.sol"; -import "./IInbox.sol"; +import "./IInboxBase.sol"; import "./ISequencerInbox.sol"; import "../rollup/IRollupLogic.sol"; import "./Messages.sol"; diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index 3c4776d0..f526c01d 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.0; +import "../bridge/IInboxBase.sol"; import "../bridge/IInbox.sol"; -import "../bridge/IEthInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IEthBridge.sol"; @@ -19,7 +19,7 @@ import { L2MessageType_unsignedContractTx } from "../libraries/MessageTypes.sol"; -contract InboxStub is IInbox, IEthInbox { +contract InboxStub is IInboxBase, IInbox { IBridge public override bridge; ISequencerInbox public override sequencerInbox; diff --git a/src/rollup/AbsBridgeCreator.sol b/src/rollup/AbsBridgeCreator.sol index 4379c50a..8093d725 100644 --- a/src/rollup/AbsBridgeCreator.sol +++ b/src/rollup/AbsBridgeCreator.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.0; import "../bridge/IBridge.sol"; import "../bridge/SequencerInbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "../bridge/Outbox.sol"; import "../rollup/IBridgeCreator.sol"; import "./IRollupEventInbox.sol"; @@ -16,7 +16,7 @@ import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { IBridge public bridgeTemplate; SequencerInbox public sequencerInboxTemplate; - IInbox public inboxTemplate; + IInboxBase public inboxTemplate; IRollupEventInbox public rollupEventInboxTemplate; Outbox public outboxTemplate; @@ -36,7 +36,7 @@ abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { ) external onlyOwner { bridgeTemplate = IBridge(_bridgeTemplate); sequencerInboxTemplate = SequencerInbox(_sequencerInboxTemplate); - inboxTemplate = IInbox(_inboxTemplate); + inboxTemplate = IInboxBase(_inboxTemplate); rollupEventInboxTemplate = IRollupEventInbox(_rollupEventInboxTemplate); outboxTemplate = Outbox(_outboxTemplate); @@ -47,7 +47,7 @@ abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { ProxyAdmin admin; IBridge bridge; SequencerInbox sequencerInbox; - IInbox inbox; + IInboxBase inbox; IRollupEventInbox rollupEventInbox; Outbox outbox; } @@ -62,7 +62,7 @@ abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { returns ( IBridge, SequencerInbox, - IInbox, + IInboxBase, IRollupEventInbox, Outbox ) @@ -77,7 +77,7 @@ abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { new TransparentUpgradeableProxy(address(sequencerInboxTemplate), adminProxy, "") ) ); - frame.inbox = IInbox( + frame.inbox = IInboxBase( address(new TransparentUpgradeableProxy(address(inboxTemplate), adminProxy, "")) ); frame.rollupEventInbox = IRollupEventInbox( diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index 38947e74..a7d982ff 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -26,7 +26,7 @@ contract BridgeCreator is AbsBridgeCreator, IEthBridgeCreator { returns ( IBridge, SequencerInbox, - IInbox, + IInboxBase, IRollupEventInbox, Outbox ) diff --git a/src/rollup/Config.sol b/src/rollup/Config.sol index 269ecb5a..13ca82e2 100644 --- a/src/rollup/Config.sol +++ b/src/rollup/Config.sol @@ -9,7 +9,7 @@ import "../state/Machine.sol"; import "../bridge/ISequencerInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./IRollupEventInbox.sol"; import "./IRollupLogic.sol"; import "../challenge/IChallengeManager.sol"; @@ -31,7 +31,7 @@ struct Config { struct ContractDependencies { IBridge bridge; ISequencerInbox sequencerInbox; - IInbox inbox; + IInboxBase inbox; IOutbox outbox; IRollupEventInbox rollupEventInbox; IChallengeManager challengeManager; diff --git a/src/rollup/ERC20BridgeCreator.sol b/src/rollup/ERC20BridgeCreator.sol index 5d83e0b3..5c597c63 100644 --- a/src/rollup/ERC20BridgeCreator.sol +++ b/src/rollup/ERC20BridgeCreator.sol @@ -30,7 +30,7 @@ contract ERC20BridgeCreator is AbsBridgeCreator, IERC20BridgeCreator { returns ( IBridge, SequencerInbox, - IInbox, + IInboxBase, IRollupEventInbox, Outbox ) diff --git a/src/rollup/IBridgeCreator.sol b/src/rollup/IBridgeCreator.sol index f03e2a0e..fac167f1 100644 --- a/src/rollup/IBridgeCreator.sol +++ b/src/rollup/IBridgeCreator.sol @@ -23,7 +23,7 @@ interface IBridgeCreator { function sequencerInboxTemplate() external view returns (SequencerInbox); - function inboxTemplate() external view returns (IInbox); + function inboxTemplate() external view returns (IInboxBase); function rollupEventInboxTemplate() external view returns (IRollupEventInbox); @@ -40,7 +40,7 @@ interface IEthBridgeCreator is IBridgeCreator { returns ( IBridge, SequencerInbox, - IInbox, + IInboxBase, IRollupEventInbox, Outbox ); @@ -57,7 +57,7 @@ interface IERC20BridgeCreator is IBridgeCreator { returns ( IBridge, SequencerInbox, - IInbox, + IInboxBase, IRollupEventInbox, Outbox ); diff --git a/src/rollup/IRollupCore.sol b/src/rollup/IRollupCore.sol index e50f7a4a..341f723e 100644 --- a/src/rollup/IRollupCore.sol +++ b/src/rollup/IRollupCore.sol @@ -7,7 +7,7 @@ pragma solidity ^0.8.0; import "./Node.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./IRollupEventInbox.sol"; import "../challenge/IChallengeManager.sol"; diff --git a/src/rollup/RollupAdminLogic.sol b/src/rollup/RollupAdminLogic.sol index b6c3771f..f7f07b1f 100644 --- a/src/rollup/RollupAdminLogic.sol +++ b/src/rollup/RollupAdminLogic.sol @@ -336,7 +336,7 @@ contract RollupAdminLogic is RollupCore, IRollupAdmin, DoubleLogicUUPSUpgradeabl * @notice sets the rollup's inbox reference. Does not update the bridge's view. * @param newInbox new address of inbox */ - function setInbox(IInbox newInbox) external { + function setInbox(IInboxBase newInbox) external { inbox = newInbox; emit OwnerFunctionCalled(28); } diff --git a/src/rollup/RollupCore.sol b/src/rollup/RollupCore.sol index 1107f105..a62655ff 100644 --- a/src/rollup/RollupCore.sol +++ b/src/rollup/RollupCore.sol @@ -33,7 +33,7 @@ abstract contract RollupCore is IRollupCore, PausableUpgradeable { uint256 public baseStake; bytes32 public wasmModuleRoot; - IInbox public inbox; + IInboxBase public inbox; IBridge public bridge; IOutbox public outbox; ISequencerInbox public sequencerInbox; diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 0d257703..d34a409f 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -41,7 +41,7 @@ contract RollupCreator is Ownable { struct BridgeContracts { IBridge bridge; ISequencerInbox sequencerInbox; - IInbox inbox; + IInboxBase inbox; IRollupEventInbox rollupEventInbox; IOutbox outbox; } diff --git a/src/rollup/RollupLib.sol b/src/rollup/RollupLib.sol index 82b9571d..f5da2312 100644 --- a/src/rollup/RollupLib.sol +++ b/src/rollup/RollupLib.sol @@ -11,7 +11,7 @@ import "../bridge/ISequencerInbox.sol"; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "./Node.sol"; import "./IRollupEventInbox.sol"; diff --git a/src/test-helpers/InterfaceCompatibilityTester.sol b/src/test-helpers/InterfaceCompatibilityTester.sol index ba637705..4d3328fc 100644 --- a/src/test-helpers/InterfaceCompatibilityTester.sol +++ b/src/test-helpers/InterfaceCompatibilityTester.sol @@ -7,5 +7,5 @@ pragma solidity >=0.6.9 <0.9.0; import "../bridge/IBridge.sol"; import "../bridge/IOutbox.sol"; -import "../bridge/IInbox.sol"; +import "../bridge/IInboxBase.sol"; import "../bridge/ISequencerInbox.sol"; diff --git a/test/foundry/AbsInbox.t.sol b/test/foundry/AbsInbox.t.sol index 0854c0b1..c3465327 100644 --- a/test/foundry/AbsInbox.t.sol +++ b/test/foundry/AbsInbox.t.sol @@ -12,7 +12,7 @@ import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; abstract contract AbsInboxTest is Test { - IInbox public inbox; + IInboxBase public inbox; IBridge public bridge; address public user = address(100); diff --git a/test/foundry/ERC20BridgeCreator.t.sol b/test/foundry/ERC20BridgeCreator.t.sol index 98c44083..5dfa2461 100644 --- a/test/foundry/ERC20BridgeCreator.t.sol +++ b/test/foundry/ERC20BridgeCreator.t.sol @@ -68,7 +68,7 @@ contract ERC20BridgeCreatorTest is Test { ( IBridge bridge, SequencerInbox seqInbox, - IInbox inbox, + IInboxBase inbox, IRollupEventInbox eventInbox, Outbox outbox ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); diff --git a/test/foundry/ERC20Inbox.t.sol b/test/foundry/ERC20Inbox.t.sol index 98fd38a1..a528a6c6 100644 --- a/test/foundry/ERC20Inbox.t.sol +++ b/test/foundry/ERC20Inbox.t.sol @@ -18,7 +18,7 @@ contract ERC20InboxTest is AbsInboxTest { // deploy token, bridge and inbox nativeToken = new ERC20PresetMinterPauser("Appchain Token", "App"); bridge = IBridge(TestUtil.deployProxy(address(new ERC20Bridge()))); - inbox = IInbox(TestUtil.deployProxy(address(new ERC20Inbox()))); + inbox = IInboxBase(TestUtil.deployProxy(address(new ERC20Inbox()))); erc20Inbox = IERC20Inbox(address(inbox)); // init bridge and inbox diff --git a/test/foundry/Inbox.t.sol b/test/foundry/Inbox.t.sol index ef94f8ed..839538d0 100644 --- a/test/foundry/Inbox.t.sol +++ b/test/foundry/Inbox.t.sol @@ -4,19 +4,19 @@ pragma solidity ^0.8.4; import "./AbsInbox.t.sol"; import "./util/TestUtil.sol"; import "../../src/bridge/Inbox.sol"; -import "../../src/bridge/IEthInbox.sol"; +import "../../src/bridge/IInbox.sol"; import "../../src/bridge/Bridge.sol"; import "../../src/bridge/ISequencerInbox.sol"; import "../../src/libraries/AddressAliasHelper.sol"; contract InboxTest is AbsInboxTest { - IEthInbox public ethInbox; + IInbox public ethInbox; function setUp() public { // deploy token, bridge and inbox bridge = IBridge(TestUtil.deployProxy(address(new Bridge()))); - inbox = IInbox(TestUtil.deployProxy(address(new Inbox()))); - ethInbox = IEthInbox(address(inbox)); + inbox = IInboxBase(TestUtil.deployProxy(address(new Inbox()))); + ethInbox = IInbox(address(inbox)); // init bridge and inbox IEthBridge(address(bridge)).initialize(IOwnable(rollup)); diff --git a/test/storage/RollupAdminLogic.dot b/test/storage/RollupAdminLogic.dot index f998ff51..7dad73f2 100644 --- a/test/storage/RollupAdminLogic.dot +++ b/test/storage/RollupAdminLogic.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -8 [label="RollupAdminLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: RollupCore.extraChallengeTimeBlocks (8) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.chainId (32) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IInbox: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | ISequencerInbox: RollupCore.sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { uint64: RollupCore._lastStakeBlock (8) | uint64: RollupCore._latestNodeCreated (8) | uint64: RollupCore._firstUnresolvedNode (8) | uint64: RollupCore._latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): RollupCore._nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): RollupCore._nodeStakers (32) } | { <141> address[]: RollupCore._stakerList (32) } | { <147> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { <151> Zombie[]: RollupCore._zombies (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (31) | bool: RollupCore.validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): RollupCore._nodeCreatedAtArbSysBlock (32) }}}"] +8 [label="RollupAdminLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: RollupCore.extraChallengeTimeBlocks (8) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.chainId (32) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IInboxBase: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | ISequencerInbox: RollupCore.sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { uint64: RollupCore._lastStakeBlock (8) | uint64: RollupCore._latestNodeCreated (8) | uint64: RollupCore._firstUnresolvedNode (8) | uint64: RollupCore._latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): RollupCore._nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): RollupCore._nodeStakers (32) } | { <141> address[]: RollupCore._stakerList (32) } | { <147> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { <151> Zombie[]: RollupCore._zombies (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (31) | bool: RollupCore.validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): RollupCore._nodeCreatedAtArbSysBlock (32) }}}"] 1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] diff --git a/test/storage/RollupCore.dot b/test/storage/RollupCore.dot index f97adc58..2307dcc5 100644 --- a/test/storage/RollupCore.dot +++ b/test/storage/RollupCore.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -8 [label="RollupCore \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: extraChallengeTimeBlocks (8) | uint64: confirmPeriodBlocks (8) } | { uint256: chainId (32) } | { uint256: baseStake (32) } | { bytes32: wasmModuleRoot (32) } | { unallocated (12) | IInbox: inbox (20) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (12) | IOutbox: outbox (20) } | { unallocated (12) | ISequencerInbox: sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: challengeManager (20) } | { unallocated (12) | address: validatorUtils (20) } | { unallocated (12) | address: validatorWalletCreator (20) } | { unallocated (12) | address: loserStakeEscrow (20) } | { unallocated (12) | address: stakeToken (20) } | { uint256: minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): isValidator (32) } | { uint64: _lastStakeBlock (8) | uint64: _latestNodeCreated (8) | uint64: _firstUnresolvedNode (8) | uint64: _latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): _nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): _nodeStakers (32) } | { <141> address[]: _stakerList (32) } | { <147> mapping\(address=\>Staker\): _stakerMap (32) } | { <151> Zombie[]: _zombies (32) } | { mapping\(address=\>uint256\): _withdrawableFunds (32) } | { uint256: totalWithdrawableFunds (32) } | { uint256: rollupDeploymentBlock (32) } | { unallocated (31) | bool: validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): _nodeCreatedAtArbSysBlock (32) }}}"] +8 [label="RollupCore \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: extraChallengeTimeBlocks (8) | uint64: confirmPeriodBlocks (8) } | { uint256: chainId (32) } | { uint256: baseStake (32) } | { bytes32: wasmModuleRoot (32) } | { unallocated (12) | IInboxBase: inbox (20) } | { unallocated (12) | IBridge: bridge (20) } | { unallocated (12) | IOutbox: outbox (20) } | { unallocated (12) | ISequencerInbox: sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: challengeManager (20) } | { unallocated (12) | address: validatorUtils (20) } | { unallocated (12) | address: validatorWalletCreator (20) } | { unallocated (12) | address: loserStakeEscrow (20) } | { unallocated (12) | address: stakeToken (20) } | { uint256: minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): isValidator (32) } | { uint64: _lastStakeBlock (8) | uint64: _latestNodeCreated (8) | uint64: _firstUnresolvedNode (8) | uint64: _latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): _nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): _nodeStakers (32) } | { <141> address[]: _stakerList (32) } | { <147> mapping\(address=\>Staker\): _stakerMap (32) } | { <151> Zombie[]: _zombies (32) } | { mapping\(address=\>uint256\): _withdrawableFunds (32) } | { uint256: totalWithdrawableFunds (32) } | { uint256: rollupDeploymentBlock (32) } | { unallocated (31) | bool: validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): _nodeCreatedAtArbSysBlock (32) }}}"] 1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] diff --git a/test/storage/RollupUserLogic.dot b/test/storage/RollupUserLogic.dot index bed63789..bd7576a3 100644 --- a/test/storage/RollupUserLogic.dot +++ b/test/storage/RollupUserLogic.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -8 [label="RollupUserLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: RollupCore.extraChallengeTimeBlocks (8) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.chainId (32) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IInbox: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | ISequencerInbox: RollupCore.sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { uint64: RollupCore._lastStakeBlock (8) | uint64: RollupCore._latestNodeCreated (8) | uint64: RollupCore._firstUnresolvedNode (8) | uint64: RollupCore._latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): RollupCore._nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): RollupCore._nodeStakers (32) } | { <141> address[]: RollupCore._stakerList (32) } | { <147> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { <151> Zombie[]: RollupCore._zombies (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (31) | bool: RollupCore.validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): RollupCore._nodeCreatedAtArbSysBlock (32) }}}"] +8 [label="RollupUserLogic \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (16) | uint64: RollupCore.extraChallengeTimeBlocks (8) | uint64: RollupCore.confirmPeriodBlocks (8) } | { uint256: RollupCore.chainId (32) } | { uint256: RollupCore.baseStake (32) } | { bytes32: RollupCore.wasmModuleRoot (32) } | { unallocated (12) | IInboxBase: RollupCore.inbox (20) } | { unallocated (12) | IBridge: RollupCore.bridge (20) } | { unallocated (12) | IOutbox: RollupCore.outbox (20) } | { unallocated (12) | ISequencerInbox: RollupCore.sequencerInbox (20) } | { unallocated (12) | IRollupEventInbox: RollupCore.rollupEventInbox (20) } | { unallocated (12) | IChallengeManager: RollupCore.challengeManager (20) } | { unallocated (12) | address: RollupCore.validatorUtils (20) } | { unallocated (12) | address: RollupCore.validatorWalletCreator (20) } | { unallocated (12) | address: RollupCore.loserStakeEscrow (20) } | { unallocated (12) | address: RollupCore.stakeToken (20) } | { uint256: RollupCore.minimumAssertionPeriod (32) } | { mapping\(address=\>bool\): RollupCore.isValidator (32) } | { uint64: RollupCore._lastStakeBlock (8) | uint64: RollupCore._latestNodeCreated (8) | uint64: RollupCore._firstUnresolvedNode (8) | uint64: RollupCore._latestConfirmed (8) } | { <138> mapping\(uint64=\>Node\): RollupCore._nodes (32) } | { mapping\(uint64=\>mapping\(address=\>bool\)\): RollupCore._nodeStakers (32) } | { <141> address[]: RollupCore._stakerList (32) } | { <147> mapping\(address=\>Staker\): RollupCore._stakerMap (32) } | { <151> Zombie[]: RollupCore._zombies (32) } | { mapping\(address=\>uint256\): RollupCore._withdrawableFunds (32) } | { uint256: RollupCore.totalWithdrawableFunds (32) } | { uint256: RollupCore.rollupDeploymentBlock (32) } | { unallocated (31) | bool: RollupCore.validatorWhitelistDisabled (1) } | { mapping\(uint64=\>uint256\): RollupCore._nodeCreatedAtArbSysBlock (32) }}}"] 1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] From a182f842f13f437040dcadfcb6741f20ea929272 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 4 Aug 2023 12:28:01 +0200 Subject: [PATCH 075/176] Prettier --- src/bridge/IInboxBase.sol | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/bridge/IInboxBase.sol b/src/bridge/IInboxBase.sol index 0b4c40c8..6451375c 100644 --- a/src/bridge/IInboxBase.sol +++ b/src/bridge/IInboxBase.sol @@ -77,7 +77,5 @@ interface IInboxBase is IDelayedMessageProvider { /// @notice check if allowList is enabled function allowListEnabled() external view returns (bool); - - function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; } From 59e41f73b9c75e1d39df3ec1fe682570038d28fa Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 4 Aug 2023 12:45:33 +0200 Subject: [PATCH 076/176] Put getProxyAdmin to IInboxBase --- src/bridge/AbsInbox.sol | 2 +- src/bridge/IInbox.sol | 3 --- src/bridge/IInboxBase.sol | 3 +++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bridge/AbsInbox.sol b/src/bridge/AbsInbox.sol index 45aede37..95e89130 100644 --- a/src/bridge/AbsInbox.sol +++ b/src/bridge/AbsInbox.sol @@ -212,7 +212,7 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInboxBase ); } - /// @inheritdoc IInbox + /// @inheritdoc IInboxBase function getProxyAdmin() external view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index fc861155..2c7672d7 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -123,9 +123,6 @@ interface IInbox is IInboxBase { bytes calldata data ) external payable returns (uint256); - /// @notice returns the current admin - function getProxyAdmin() external view returns (address); - // ---------- initializer ---------- /** diff --git a/src/bridge/IInboxBase.sol b/src/bridge/IInboxBase.sol index 6451375c..5e38b2be 100644 --- a/src/bridge/IInboxBase.sol +++ b/src/bridge/IInboxBase.sol @@ -78,4 +78,7 @@ interface IInboxBase is IDelayedMessageProvider { function allowListEnabled() external view returns (bool); function initialize(IBridge _bridge, ISequencerInbox _sequencerInbox) external; + + /// @notice returns the current admin + function getProxyAdmin() external view returns (address); } From 97cfbe00ff0eea4d7f5f5f3afb01598c19ddabc4 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Fri, 4 Aug 2023 16:05:16 -0500 Subject: [PATCH 077/176] add comments --- src/precompiles/ArbOwnerPublic.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/precompiles/ArbOwnerPublic.sol b/src/precompiles/ArbOwnerPublic.sol index b4f68bde..1fbfdc03 100644 --- a/src/precompiles/ArbOwnerPublic.sol +++ b/src/precompiles/ArbOwnerPublic.sol @@ -12,7 +12,8 @@ interface ArbOwnerPublic { /** * @notice Rectify the list of chain owners - * If successful, emits ChainOwnerRectified event. + * If successful, emits ChainOwnerRectified event + * Available in ArbOS version 11 */ function rectifyChainOwner(address ownerToRectify) external; From 2032479c93c9e3bbf9cf2067e4c6e3d3ca5a788d Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 7 Aug 2023 09:28:58 +0200 Subject: [PATCH 078/176] Fix script --- scripts/deployment.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 437500b5..0caa9941 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -75,6 +75,7 @@ async function deployAllContracts( const challengeManager = await deployContract('ChallengeManager', signer) const rollupAdmin = await deployContract('RollupAdminLogic', signer) const rollupUser = await deployContract('RollupUserLogic', signer) + const upgradeExecutor = await deployContract('UpgradeExecutor', signer) const validatorUtils = await deployContract('ValidatorUtils', signer) const validatorWalletCreator = await deployContract( 'ValidatorWalletCreator', @@ -92,6 +93,7 @@ async function deployAllContracts( challengeManager, rollupAdmin, rollupUser, + upgradeExecutor, validatorUtils, validatorWalletCreator, rollupCreator, @@ -114,6 +116,7 @@ async function main() { contracts.challengeManager.address, contracts.rollupAdmin.address, contracts.rollupUser.address, + contracts.upgradeExecutor.address, contracts.validatorUtils.address, contracts.validatorWalletCreator.address ) From 5d0dfce19660de728478b5a5e10f9c226034d46a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 7 Aug 2023 12:05:20 +0200 Subject: [PATCH 079/176] Make L1 upgrade executor the rollup owner --- src/rollup/RollupCreator.sol | 7 +- test/contract/arbRollup.spec.ts | 157 ++++++++++++++++++++----------- test/foundry/RollupCreator.t.sol | 24 ++++- 3 files changed, 127 insertions(+), 61 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index a5aa1dc9..b289fef6 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -24,6 +24,7 @@ contract RollupCreator is Ownable { address adminProxy, address sequencerInbox, address bridge, + address upgradeExecutor, address validatorUtils, address validatorWalletCreator ); @@ -161,8 +162,7 @@ contract RollupCreator is Ownable { proxyAdmin.transferOwnership(address(upgradeExecutor)); // initialize the rollup with this contract as owner to set batch poster and validators - // it will transfer the ownership back to the actual owner later - address actualOwner = config.owner; + // it will transfer the ownership to the upgrade executor later config.owner = address(this); rollup.initializeProxy( config, @@ -194,7 +194,7 @@ contract RollupCreator is Ownable { IRollupAdmin(address(rollup)).setValidator(_validators, _vals); } - IRollupAdmin(address(rollup)).setOwner(actualOwner); + IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); emit RollupCreated( address(rollup), @@ -206,6 +206,7 @@ contract RollupCreator is Ownable { address(proxyAdmin), address(bridgeContracts.sequencerInbox), address(bridgeContracts.bridge), + address(upgradeExecutor), address(validatorUtils), address(validatorWalletCreator) ); diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 68ae8e1c..4a3a7bfe 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -15,7 +15,7 @@ */ /* eslint-env node, mocha */ -import { ethers, run } from 'hardhat' +import { ethers, network, run } from 'hardhat' import { Signer } from '@ethersproject/abstract-signer' import { BigNumberish, BigNumber } from '@ethersproject/bignumber' import { BytesLike } from '@ethersproject/bytes' @@ -79,6 +79,7 @@ let sequencerInbox: SequencerInbox let admin: Signer let sequencer: Signer let challengeManager: ChallengeManager +let upgradeExecutor: string async function getDefaultConfig( _confirmPeriodBlocks = confirmationPeriodBlocks @@ -239,6 +240,7 @@ const setup = async () => { delayedBridge: rollupCreatedEvent.bridge, delayedInbox: rollupCreatedEvent.inboxAddress, bridge: rollupCreatedEvent.bridge, + upgradeExecutorAddress: rollupCreatedEvent.upgradeExecutor, } } @@ -392,6 +394,21 @@ const getDoubleLogicUUPSTarget = async ( .toLowerCase()}` } +const impersonateAccount = (address: string) => + network.provider + .request({ + // Fund inboxMock to send transaction + method: 'hardhat_setBalance', + params: [address, '0xffffffffffffffffffff'], + }) + .then(() => + network.provider.request({ + method: 'hardhat_impersonateAccount', + params: [address], + }) + ) + .then(() => ethers.getSigner(address)) + describe('ArbRollup', () => { it('should deploy contracts', async function () { accounts = await initializeAccounts() @@ -405,28 +422,32 @@ describe('ArbRollup', () => { rollupUser: rollupUserContract, admin: adminI, validators: validatorsI, + upgradeExecutorAddress, } = await setup() rollupAdmin = rollupAdminContract rollupUser = rollupUserContract admin = adminI validators = validatorsI + upgradeExecutor = upgradeExecutorAddress rollup = new RollupContract(rollupUser.connect(validators[0])) }) it('should only initialize once', async function () { await expect( - rollupAdmin.initialize(await getDefaultConfig(), { - challengeManager: constants.AddressZero, - bridge: constants.AddressZero, - inbox: constants.AddressZero, - outbox: constants.AddressZero, - rollupAdminLogic: constants.AddressZero, - rollupEventInbox: constants.AddressZero, - rollupUserLogic: constants.AddressZero, - sequencerInbox: constants.AddressZero, - validatorUtils: constants.AddressZero, - validatorWalletCreator: constants.AddressZero, - }) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .initialize(await getDefaultConfig(), { + challengeManager: constants.AddressZero, + bridge: constants.AddressZero, + inbox: constants.AddressZero, + outbox: constants.AddressZero, + rollupAdminLogic: constants.AddressZero, + rollupEventInbox: constants.AddressZero, + rollupUserLogic: constants.AddressZero, + sequencerInbox: constants.AddressZero, + validatorUtils: constants.AddressZero, + validatorWalletCreator: constants.AddressZero, + }) ).to.be.revertedWith('Initializable: contract is already initialized') }) @@ -754,7 +775,7 @@ describe('ArbRollup', () => { const prevIsPaused = await rollup.rollup.paused() expect(prevIsPaused).to.equal(false) - await rollupAdmin.pause() + await rollupAdmin.connect(await impersonateAccount(upgradeExecutor)).pause() const postIsPaused = await rollup.rollup.paused() expect(postIsPaused).to.equal(true) @@ -765,7 +786,9 @@ describe('ArbRollup', () => { .addToDeposit(await validators[1].getAddress(), { value: 5 }) ).to.be.revertedWith('Pausable: paused') - await rollupAdmin.resume() + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .resume() }) it('should allow admin to alter rollup while paused', async function () { @@ -820,10 +843,12 @@ describe('ArbRollup', () => { ).to.eq(await validators[2].getAddress()) await expect( - rollupAdmin.forceResolveChallenge( - [await validators[0].getAddress()], - [await validators[2].getAddress()] - ), + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .forceResolveChallenge( + [await validators[0].getAddress()], + [await validators[2].getAddress()] + ), 'force resolve' ).to.be.revertedWith('Pausable: not paused') @@ -837,12 +862,14 @@ describe('ArbRollup', () => { 'create challenge' ).to.be.revertedWith('IN_CHAL') - await rollupAdmin.pause() + await rollupAdmin.connect(await impersonateAccount(upgradeExecutor)).pause() - await rollupAdmin.forceResolveChallenge( - [await validators[0].getAddress()], - [await validators[2].getAddress()] - ) + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .forceResolveChallenge( + [await validators[0].getAddress()], + [await validators[2].getAddress()] + ) // challenge should have been destroyed expect( @@ -860,14 +887,16 @@ describe('ArbRollup', () => { expect(challengeA).to.equal(ZERO_ADDR) expect(challengeB).to.equal(ZERO_ADDR) - await rollupAdmin.forceRefundStaker([ - await validators[0].getAddress(), - await validators[2].getAddress(), - ]) + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .forceRefundStaker([ + await validators[0].getAddress(), + await validators[2].getAddress(), + ]) const adminAssertion = newRandomAssertion(prevNode.assertion.afterState) const { node: forceCreatedNode1 } = await forceCreateNode( - rollupAdmin, + rollupAdmin.connect(await impersonateAccount(upgradeExecutor)), sequencerInbox, prevNode, adminAssertion, @@ -886,7 +915,7 @@ describe('ArbRollup', () => { const adminAssertion2 = newRandomAssertion(prevNode.assertion.afterState) const { node: forceCreatedNode2 } = await forceCreateNode( - rollupAdmin, + rollupAdmin.connect(await impersonateAccount(upgradeExecutor)), sequencerInbox, prevNode, adminAssertion2, @@ -895,17 +924,21 @@ describe('ArbRollup', () => { const postLatestCreated = await rollup.rollup.latestNodeCreated() - await rollupAdmin.forceConfirmNode( - adminNodeNum, - adminAssertion.afterState.globalState.bytes32Vals[0], - adminAssertion.afterState.globalState.bytes32Vals[1] - ) + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .forceConfirmNode( + adminNodeNum, + adminAssertion.afterState.globalState.bytes32Vals[0], + adminAssertion.afterState.globalState.bytes32Vals[1] + ) const postLatestConfirmed = await rollup.rollup.latestConfirmed() expect(postLatestCreated).to.equal(adminNodeNum.add(1)) expect(postLatestConfirmed).to.equal(adminNodeNum) - await rollupAdmin.resume() + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .resume() // should create node after resuming @@ -946,11 +979,13 @@ describe('ArbRollup', () => { rollupUser: rollupUserContract, admin: adminI, validators: validatorsI, + upgradeExecutorAddress, } = await setup() rollupAdmin = rollupAdminContract rollupUser = rollupUserContract admin = adminI validators = validatorsI + upgradeExecutor = upgradeExecutorAddress rollup = new RollupContract(rollupUser.connect(validators[0])) }) @@ -1012,10 +1047,11 @@ describe('ArbRollup', () => { await expect(rollupAdmin.connect(user).upgradeTo(newAdminLogicImpl.address)) .to.be.reverted // upgrade as admin - await expect(rollupAdmin.upgradeTo(newAdminLogicImpl.address)).to.emit( - rollupAdmin, - 'Upgraded' - ) + await expect( + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeTo(newAdminLogicImpl.address) + ).to.emit(rollupAdmin, 'Upgraded') // check the new implementation address is set const proxyPrimaryTarget = await getDoubleLogicUUPSTarget( @@ -1060,7 +1096,9 @@ describe('ArbRollup', () => { ).to.be.reverted // upgrade as admin await expect( - rollupAdmin.upgradeSecondaryTo(newUserLogicImpl.address) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeSecondaryTo(newUserLogicImpl.address) ).to.emit(rollupAdmin, 'UpgradedSecondary') // check the new implementation address is set @@ -1087,10 +1125,12 @@ describe('ArbRollup', () => { )) as RollupAdminLogic__factory const newAdminLogicImpl = await rollupAdminLogicFac.deploy() // first pause the contract so we can unpause after upgrade - await rollupAdmin.pause() + await rollupAdmin.connect(await impersonateAccount(upgradeExecutor)).pause() // 0x046f7da2 - resume() await expect( - rollupAdmin.upgradeToAndCall(newAdminLogicImpl.address, '0x046f7da2') + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeToAndCall(newAdminLogicImpl.address, '0x046f7da2') ).to.emit(rollupAdmin, 'Unpaused') }) @@ -1101,14 +1141,15 @@ describe('ArbRollup', () => { const newUserLogicImpl = await rollupUserLogicFac.deploy() // this call should revert since the user logic don't have a fallback await expect( - rollupAdmin.upgradeSecondaryToAndCall(newUserLogicImpl.address, '0x') + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeSecondaryToAndCall(newUserLogicImpl.address, '0x') ).to.revertedWith('Address: low-level delegate call failed') // 0x8da5cb5b - owner() (some random function that will not revert) await expect( - rollupAdmin.upgradeSecondaryToAndCall( - newUserLogicImpl.address, - '0x8da5cb5b' - ) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeSecondaryToAndCall(newUserLogicImpl.address, '0x8da5cb5b') ).to.emit(rollupAdmin, 'UpgradedSecondary') }) @@ -1118,7 +1159,9 @@ describe('ArbRollup', () => { )) as RollupUserLogic__factory const newUserLogicImpl = await rollupUserLogicFac.deploy() await expect( - rollupAdmin.upgradeTo(newUserLogicImpl.address) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeTo(newUserLogicImpl.address) ).to.revertedWith('ERC1967Upgrade: unsupported proxiableUUID') }) @@ -1128,19 +1171,25 @@ describe('ArbRollup', () => { )) as RollupAdminLogic__factory const newAdminLogicImpl = await rollupAdminLogicFac.deploy() await expect( - rollupAdmin.upgradeSecondaryTo(newAdminLogicImpl.address) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeSecondaryTo(newAdminLogicImpl.address) ).to.revertedWith('ERC1967Upgrade: unsupported secondary proxiableUUID') }) it('should fail upgrade to proxy primary logic', async function () { - await expect(rollupAdmin.upgradeTo(rollupAdmin.address)).to.revertedWith( - 'ERC1967Upgrade: new implementation is not UUPS' - ) + await expect( + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeTo(rollupAdmin.address) + ).to.revertedWith('ERC1967Upgrade: new implementation is not UUPS') }) it('should fail upgrade to proxy secondary logic', async function () { await expect( - rollupAdmin.upgradeSecondaryTo(rollupAdmin.address) + rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .upgradeSecondaryTo(rollupAdmin.address) ).to.revertedWith( 'ERC1967Upgrade: new secondary implementation is not UUPS' ) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index cf3560d9..b335d9ed 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -99,8 +99,6 @@ contract RollupCreatorTest is Test { assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); /// rollup proxy - assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); - assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); @@ -161,6 +159,16 @@ contract RollupCreatorTest is Test { "Invalid proxyAdmin's owner" ); + // upgrade executor owns rollup + assertEq( + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + ); + assertEq( + _getProxyAdmin(rollupAddress), + upgradeExecutorExpectedAddress, + "Invalid rollup's proxyAdmin owner" + ); + // check rollupOwner has executor role UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); assertTrue( @@ -206,8 +214,6 @@ contract RollupCreatorTest is Test { assertEq(IOwnable(address(rollupCreator)).owner(), deployer, "Invalid rollupCreator owner"); /// rollup proxy - assertEq(IOwnable(rollupAddress).owner(), rollupOwner, "Invalid rollup owner"); - assertEq(_getProxyAdmin(rollupAddress), rollupOwner, "Invalid rollup's proxyAdmin owner"); assertEq(_getPrimary(rollupAddress), address(rollupAdmin), "Invalid proxy primary impl"); assertEq(_getSecondary(rollupAddress), address(rollupUser), "Invalid proxy secondary impl"); @@ -273,6 +279,16 @@ contract RollupCreatorTest is Test { "Invalid proxyAdmin's owner" ); + // upgrade executor owns rollup + assertEq( + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + ); + assertEq( + _getProxyAdmin(rollupAddress), + upgradeExecutorExpectedAddress, + "Invalid rollup's proxyAdmin owner" + ); + // check rollupOwner has executor role UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); assertTrue( From 259901d927391dc535f31680ddacc4ff9d796473 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 7 Aug 2023 12:24:00 +0200 Subject: [PATCH 080/176] Update remappings --- remappings.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/remappings.txt b/remappings.txt index dd3f1ab0..f02afee2 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,4 +1,5 @@ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ -@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ \ No newline at end of file +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ \ No newline at end of file From 95243613facb95b49c8a63d5b040e0a532b3d66a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 7 Aug 2023 14:49:37 +0200 Subject: [PATCH 081/176] Check if provided fee token address is valid --- scripts/createERC20Rollup.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/createERC20Rollup.ts b/scripts/createERC20Rollup.ts index 000e8d64..842eb014 100644 --- a/scripts/createERC20Rollup.ts +++ b/scripts/createERC20Rollup.ts @@ -26,6 +26,11 @@ async function main() { ) customFeeTokenAddress = await deployERC20Token(deployer) } + if (!ethers.utils.isAddress(customFeeTokenAddress)) { + throw new Error( + 'Fee token address ' + customFeeTokenAddress + ' is not a valid address!' + ) + } console.log('Creating new rollup with', customFeeTokenAddress, 'as fee token') await createRollup(customFeeTokenAddress) From d0f6957c964e93e8a476c5bdd04dff5f3103a514 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 7 Aug 2023 14:56:16 +0200 Subject: [PATCH 082/176] Update remappings --- remappings.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/remappings.txt b/remappings.txt index dd3f1ab0..f02afee2 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,4 +1,5 @@ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ -@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ \ No newline at end of file +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ \ No newline at end of file From f7fa9e954eddb0e95a8959f24c09d2b79a80606d Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 14:16:16 +0100 Subject: [PATCH 083/176] chore: import upgrade-executor --- package.json | 1 + src/libraries/UpgradeExecutor.sol | 57 ------------------------------- src/rollup/RollupCreator.sol | 8 ++--- yarn.lock | 18 ++++++++++ 4 files changed, 23 insertions(+), 61 deletions(-) delete mode 100644 src/libraries/UpgradeExecutor.sol diff --git a/package.json b/package.json index f739b391..086824dc 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "dependencies": { "@arbitrum/sdk": "^3.1.3", "@ethersproject/providers": "^5.7.2", + "@offchainlabs/upgrade-executor": "^1.0.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "dotenv": "^16.3.1", diff --git a/src/libraries/UpgradeExecutor.sol b/src/libraries/UpgradeExecutor.sol deleted file mode 100644 index ada8c6de..00000000 --- a/src/libraries/UpgradeExecutor.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; - -/// @title A root contract from which it execute upgrades -/// @notice Does not contain upgrade logic itself, only the means to call upgrade contracts and execute them -/// @dev We use these upgrade contracts as they allow multiple actions to take place in an upgrade -/// and for these actions to interact. However because we are delegatecalling into these upgrade -/// contracts, it's important that these upgrade contract do not touch or modify contract state. -contract UpgradeExecutor is Initializable, AccessControlUpgradeable, ReentrancyGuard { - using Address for address; - - bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); - bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); - - /// @notice Emitted when an upgrade execution occurs - event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); - - /// @notice Initialise the upgrade executor - /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE - /// @param executors Can call the execute function - EXECUTOR_ROLE - function initialize(address admin, address[] memory executors) public initializer { - require(admin != address(0), "UpgradeExecutor: zero admin"); - - __AccessControl_init(); - - _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); - _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); - - _setupRole(ADMIN_ROLE, admin); - for (uint256 i = 0; i < executors.length; ++i) { - _setupRole(EXECUTOR_ROLE, executors[i]); - } - } - - /// @notice Execute an upgrade by delegate calling an upgrade contract - /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract - /// will have access to the state of this contract - including the roles. Only upgrade contracts - /// that do not touch local state should be used. - function execute(address upgrade, bytes memory upgradeCallData) - public - payable - onlyRole(EXECUTOR_ROLE) - nonReentrant - { - // OZ Address library check if the address is a contract and bubble up inner revert reason - address(upgrade).functionDelegateCall( - upgradeCallData, - "UpgradeExecutor: inner delegate call failed without reason" - ); - - emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); - } -} diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index b289fef6..a4e1aeea 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -8,7 +8,7 @@ import "./RollupProxy.sol"; import "./IRollupAdmin.sol"; import "./BridgeCreator.sol"; import "./ERC20BridgeCreator.sol"; -import "../libraries/UpgradeExecutor.sol"; +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; @@ -36,7 +36,7 @@ contract RollupCreator is Ownable { IChallengeManager public challengeManagerTemplate; IRollupAdmin public rollupAdminLogic; IRollupUser public rollupUserLogic; - UpgradeExecutor public upgradeExecutorLogic; + IUpgradeExecutor public upgradeExecutorLogic; address public validatorUtils; address public validatorWalletCreator; @@ -58,7 +58,7 @@ contract RollupCreator is Ownable { IChallengeManager _challengeManagerLogic, IRollupAdmin _rollupAdminLogic, IRollupUser _rollupUserLogic, - UpgradeExecutor _upgradeExecutorLogic, + IUpgradeExecutor _upgradeExecutorLogic, address _validatorUtils, address _validatorWalletCreator ) external onlyOwner { @@ -97,7 +97,7 @@ contract RollupCreator is Ownable { ProxyAdmin proxyAdmin = new ProxyAdmin(); // deploy and init upgrade executor - UpgradeExecutor upgradeExecutor = UpgradeExecutor( + IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( address( new TransparentUpgradeableProxy( address(upgradeExecutorLogic), diff --git a/yarn.lock b/yarn.lock index 6e0849cf..ef218942 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,16 +1202,34 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" +"@offchainlabs/upgrade-executor@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.0.0-beta.0.tgz#dbf1eddbe157f44a79740fdb65446415fa260eac" + integrity sha512-WappuSR9sjGxBLIYPpMLIj3lcTe3GsO3NukBoMmO+xxcjFZ3zMmnt7PpNfbxAEyWDXEfqI5W5F32gcWAnF60zA== + dependencies: + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + "@openzeppelin/contracts-upgradeable@4.5.2": version "4.5.2" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.5.2.tgz#90d9e47bacfd8693bfad0ac8a394645575528d05" integrity sha512-xgWZYaPlrEOQo3cBj97Ufiuv79SPd8Brh4GcFYhPgb6WvAq4ppz8dWKL6h+jLAK01rUqMRp/TS9AdXgAeNvCLA== +"@openzeppelin/contracts-upgradeable@4.7.3": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + "@openzeppelin/contracts@4.5.0": version "4.5.0" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.5.0.tgz#3fd75d57de172b3743cdfc1206883f56430409cc" integrity sha512-fdkzKPYMjrRiPK6K4y64e6GzULR7R7RwxSigHS8DDp7aWDeoReqsQI+cxHV1UuhAqX69L1lAaWDxenfP+xiqzA== +"@openzeppelin/contracts@4.7.3": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + "@resolver-engine/core@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" From ba6254f2e5f85d969be4010807d6f6355102261f Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 14:18:49 +0100 Subject: [PATCH 084/176] chore: use imported upgrade-executor factory --- test/contract/arbRollup.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 4a3a7bfe..bb28c6e4 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -37,8 +37,8 @@ import { RollupUserLogic__factory, SequencerInbox, SequencerInbox__factory, - UpgradeExecutor__factory, } from '../../build/types' +import { UpgradeExecutor__factory } from '@offchainlabs/upgrade-executor/build/types/factories/src' import { initializeAccounts } from './utils' import { From d6cb232698074810b7a09c25525d0b7b2d20ca79 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 21:47:49 +0100 Subject: [PATCH 085/176] chore: bump upgrade-executor --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 086824dc..69203f96 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "dependencies": { "@arbitrum/sdk": "^3.1.3", "@ethersproject/providers": "^5.7.2", - "@offchainlabs/upgrade-executor": "^1.0.0-beta.0", + "@offchainlabs/upgrade-executor": "^1.0.0-beta.2", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "dotenv": "^16.3.1", diff --git a/yarn.lock b/yarn.lock index ef218942..92c25107 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,10 +1202,10 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@offchainlabs/upgrade-executor@^1.0.0-beta.0": - version "1.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.0.0-beta.0.tgz#dbf1eddbe157f44a79740fdb65446415fa260eac" - integrity sha512-WappuSR9sjGxBLIYPpMLIj3lcTe3GsO3NukBoMmO+xxcjFZ3zMmnt7PpNfbxAEyWDXEfqI5W5F32gcWAnF60zA== +"@offchainlabs/upgrade-executor@^1.0.0-beta.2": + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.0.0-beta.2.tgz#b3f9e1ba2e58edf17019249b4663d88567961fec" + integrity sha512-aSjWctspD2QTGXUv0fRHudFrl5oR42nRB/88JUnC9O5tujPyRksM6Y8WyrDNl3eZuqV+L1V76Ui2Av4NrUkd+g== dependencies: "@openzeppelin/contracts" "4.7.3" "@openzeppelin/contracts-upgradeable" "4.7.3" From 18635bbd4267e7fea571e5ecd087e304bd1de413 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 21:48:03 +0100 Subject: [PATCH 086/176] test: UpgradeExecutorMock --- src/mocks/UpgradeExecutorMock.sol | 61 +++++++++++++++++++++++++++++++ test/foundry/RollupCreator.t.sol | 12 +++--- 2 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 src/mocks/UpgradeExecutorMock.sol diff --git a/src/mocks/UpgradeExecutorMock.sol b/src/mocks/UpgradeExecutorMock.sol new file mode 100644 index 00000000..822c364a --- /dev/null +++ b/src/mocks/UpgradeExecutorMock.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; + +import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; + +contract UpgradeExecutorMock is + Initializable, + AccessControlUpgradeable, + ReentrancyGuard, + IUpgradeExecutor +{ + using Address for address; + + bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); + bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); + + /// @notice Emitted when an upgrade execution occurs + event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); + + constructor() initializer { + } + + /// @notice Initialise the upgrade executor + /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE + /// @param executors Can call the execute function - EXECUTOR_ROLE + function initialize(address admin, address[] memory executors) public initializer { + require(admin != address(0), "UpgradeExecutor: zero admin"); + + __AccessControl_init(); + + _setRoleAdmin(ADMIN_ROLE, ADMIN_ROLE); + _setRoleAdmin(EXECUTOR_ROLE, ADMIN_ROLE); + + _setupRole(ADMIN_ROLE, admin); + for (uint256 i = 0; i < executors.length; ++i) { + _setupRole(EXECUTOR_ROLE, executors[i]); + } + } + + /// @notice Execute an upgrade by delegate calling an upgrade contract + /// @dev Only executor can call this. Since we're using a delegatecall here the Upgrade contract + /// will have access to the state of this contract - including the roles. Only upgrade contracts + /// that do not touch local state should be used. + function execute(address upgrade, bytes memory upgradeCallData) + public + payable + onlyRole(EXECUTOR_ROLE) + nonReentrant + { + // OZ Address library check if the address is a contract and bubble up inner revert reason + address(upgrade).functionDelegateCall( + upgradeCallData, "UpgradeExecutor: inner delegate call failed without reason" + ); + + emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); + } +} diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index b335d9ed..9c89b084 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -14,8 +14,10 @@ import "../../src/osp/OneStepProverMemory.sol"; import "../../src/osp/OneStepProverMath.sol"; import "../../src/osp/OneStepProverHostIo.sol"; import "../../src/osp/OneStepProofEntry.sol"; +import "../../src/mocks/UpgradeExecutorMock.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; contract RollupCreatorTest is Test { RollupCreator public rollupCreator; @@ -35,7 +37,7 @@ contract RollupCreatorTest is Test { BridgeCreator ethBridgeCreator = new BridgeCreator(); ERC20BridgeCreator erc20BridgeCreator = new ERC20BridgeCreator(); - UpgradeExecutor upgradeExecutorLogic = new UpgradeExecutor(); + IUpgradeExecutor upgradeExecutorLogic = new UpgradeExecutorMock(); ( IOneStepProofEntry ospEntry, @@ -170,7 +172,7 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); @@ -290,7 +292,7 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - UpgradeExecutor executor = UpgradeExecutor(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); @@ -330,8 +332,8 @@ contract RollupCreatorTest is Test { RollupCore rollup = RollupCore(rollupAddress); address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); - UpgradeExecutor upgradeExecutor = - UpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); + IUpgradeExecutor upgradeExecutor = + IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( From ca401d12769fe5a18e87ebe5d0c2f3b403be0c0e Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 21:48:28 +0100 Subject: [PATCH 087/176] test: use imported bytecode and abi to deploy --- test/contract/arbRollup.spec.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index bb28c6e4..71b722ae 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -38,7 +38,11 @@ import { SequencerInbox, SequencerInbox__factory, } from '../../build/types' -import { UpgradeExecutor__factory } from '@offchainlabs/upgrade-executor/build/types/factories/src' +import { + abi as UpgradeExecutorABI, + bytecode as UpgradeExecutorBytecode, +} from '@offchainlabs/upgrade-executor/build/contracts/src/UpgradeExecutor.sol/UpgradeExecutor.json' + import { initializeAccounts } from './utils' import { @@ -159,8 +163,8 @@ const setup = async () => { const rollupUserLogicTemplate = await rollupUserLogicFac.deploy() const upgradeExecutorLogicFac = (await ethers.getContractFactory( - 'UpgradeExecutor' - )) as UpgradeExecutor__factory + UpgradeExecutorABI, UpgradeExecutorBytecode) + ) const upgradeExecutorLogic = await upgradeExecutorLogicFac.deploy() const ethBridgeCreatorFac = (await ethers.getContractFactory( From c09490ff5e2e773e220758a6fd34002260083602 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 21:59:15 +0100 Subject: [PATCH 088/176] format: prettierignore --- .prettierignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.prettierignore b/.prettierignore index 44285698..725aff4a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,5 @@ coverage/** deployments/** src/lib/abi/** .nyc_output +out/** +lib/** \ No newline at end of file From 570e8180ade4e89b9a2e369afe4fa61f09d35fb6 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 8 Aug 2023 21:59:21 +0100 Subject: [PATCH 089/176] format: fix --- src/mocks/UpgradeExecutorMock.sol | 6 +- test/contract/arbRollup.spec.ts | 5 +- test/foundry/RollupCreator.t.sol | 100 ++++++++++++++++++++++-------- 3 files changed, 79 insertions(+), 32 deletions(-) diff --git a/src/mocks/UpgradeExecutorMock.sol b/src/mocks/UpgradeExecutorMock.sol index 822c364a..c036aaf0 100644 --- a/src/mocks/UpgradeExecutorMock.sol +++ b/src/mocks/UpgradeExecutorMock.sol @@ -21,8 +21,7 @@ contract UpgradeExecutorMock is /// @notice Emitted when an upgrade execution occurs event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); - constructor() initializer { - } + constructor() initializer {} /// @notice Initialise the upgrade executor /// @param admin The admin who can update other roles, and itself - ADMIN_ROLE @@ -53,7 +52,8 @@ contract UpgradeExecutorMock is { // OZ Address library check if the address is a contract and bubble up inner revert reason address(upgrade).functionDelegateCall( - upgradeCallData, "UpgradeExecutor: inner delegate call failed without reason" + upgradeCallData, + "UpgradeExecutor: inner delegate call failed without reason" ); emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 71b722ae..070dac27 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -162,8 +162,9 @@ const setup = async () => { )) as RollupUserLogic__factory const rollupUserLogicTemplate = await rollupUserLogicFac.deploy() - const upgradeExecutorLogicFac = (await ethers.getContractFactory( - UpgradeExecutorABI, UpgradeExecutorBytecode) + const upgradeExecutorLogicFac = await ethers.getContractFactory( + UpgradeExecutorABI, + UpgradeExecutorBytecode ) const upgradeExecutorLogic = await upgradeExecutorLogicFac.deploy() diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 9c89b084..1afca66d 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -69,8 +69,12 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -90,8 +94,12 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = - rollupCreator.createRollup(config, batchPoster, validators, address(0)); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + address(0) + ); vm.stopPrank(); @@ -163,7 +171,9 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + IOwnable(rollupAddress).owner(), + upgradeExecutorExpectedAddress, + "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -172,20 +182,28 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable( + upgradeExecutorExpectedAddress + ); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), + "Invalid executor role" ); } function test_createErc20Rollup() public { vm.startPrank(deployer); - address nativeToken = - address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -205,8 +223,12 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = - rollupCreator.createRollup(config, batchPoster, validators, nativeToken); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + nativeToken + ); vm.stopPrank(); @@ -236,7 +258,9 @@ contract RollupCreatorTest is Test { // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( - IERC20Bridge(address(bridge)).nativeToken(), nativeToken, "Invalid native token ref" + IERC20Bridge(address(bridge)).nativeToken(), + nativeToken, + "Invalid native token ref" ); // check proxy admin for non-rollup contracts @@ -283,7 +307,9 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + IOwnable(rollupAddress).owner(), + upgradeExecutorExpectedAddress, + "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -292,9 +318,12 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable( + upgradeExecutorExpectedAddress + ); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), + "Invalid executor role" ); } @@ -302,8 +331,12 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -323,8 +356,12 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = - rollupCreator.createRollup(config, batchPoster, validators, address(0)); + address rollupAddress = rollupCreator.createRollup( + config, + batchPoster, + validators, + address(0) + ); vm.stopPrank(); @@ -332,12 +369,16 @@ contract RollupCreatorTest is Test { RollupCore rollup = RollupCore(rollupAddress); address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); - IUpgradeExecutor upgradeExecutor = - IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); + IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( + computeCreateAddress(address(rollupCreator), 2) + ); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( - ProxyUpgradeAction.perform.selector, address(proxyAdmin), inbox, address(newLogicImpl) + ProxyUpgradeAction.perform.selector, + address(proxyAdmin), + inbox, + address(newLogicImpl) ); address upgradeAction = address(new ProxyUpgradeAction()); @@ -389,14 +430,19 @@ contract RollupCreatorTest is Test { } function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = - bytes32(uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1); + bytes32 secondarySlot = bytes32( + uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 + ); return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } contract ProxyUpgradeAction { - function perform(address admin, address payable target, address newLogic) public payable { + function perform( + address admin, + address payable target, + address newLogic + ) public payable { ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic); } } From 26e728ec552cd883490f396b452ac28d1d2cc9d2 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 21:58:53 +0800 Subject: [PATCH 090/176] chore: move some to devDependencies --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index f739b391..427f9dd8 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ }, "files": [ "src/", - "build/types" + "build/types", + "build/contracts" ], "bugs": { "url": "https://github.com/offchainlabs/nitro-contracts/issues" @@ -33,15 +34,14 @@ "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { - "@arbitrum/sdk": "^3.1.3", - "@ethersproject/providers": "^5.7.2", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", - "dotenv": "^16.3.1", "patch-package": "^6.4.7" }, "private": false, "devDependencies": { + "@arbitrum/sdk": "^3.1.3", + "@ethersproject/providers": "^5.7.2", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.1", @@ -54,6 +54,7 @@ "@typescript-eslint/eslint-plugin-tslint": "^5.27.1", "@typescript-eslint/parser": "^5.14.0", "chai": "^4.3.4", + "dotenv": "^16.3.1", "eslint": "^8.23.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-mocha": "^9.0.0", From 8d0bacb9abb6d936388921300e6c4fdd4f8a60d6 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 22:00:15 +0800 Subject: [PATCH 091/176] v1.1.0-alpha.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 427f9dd8..337a7883 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-alpha.3", + "version": "1.1.0-alpha.4", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From 32227a5e44623db988350e5ecc70942900b895e2 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 22:27:38 +0800 Subject: [PATCH 092/176] chore: ignore build/contracts/build-info --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b42d2ab9..30d66a10 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build/ +build/contracts/build-info cache/ node_modules/ deployments/ From d60e737220abe7b7c22e3509e676eddf9da5c6cd Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 22:34:10 +0800 Subject: [PATCH 093/176] v1.1.0-alpha.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 337a7883..f2115d27 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-alpha.4", + "version": "1.1.0-alpha.5", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From dde017c204f9316de58896809cdb0b7d01787ea0 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 22:57:05 +0800 Subject: [PATCH 094/176] chore: explictly release contract builds --- .gitignore | 1 - package.json | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 30d66a10..b42d2ab9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ build/ -build/contracts/build-info cache/ node_modules/ deployments/ diff --git a/package.json b/package.json index f2115d27..8ca977ee 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "files": [ "src/", "build/types", - "build/contracts" + "build/contracts/@openzeppelin", + "build/contracts/src" ], "bugs": { "url": "https://github.com/offchainlabs/nitro-contracts/issues" From cc66bb5c705ea5c62375afda176126d897f60231 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 14 Aug 2023 22:58:19 +0800 Subject: [PATCH 095/176] v1.1.0-alpha.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ca977ee..62dc3915 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-alpha.5", + "version": "1.1.0-alpha.7", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From 33dd360abf85b0ef8491d595cf9a28ee7ca37b8d Mon Sep 17 00:00:00 2001 From: Lee Bousfield Date: Wed, 16 Aug 2023 15:21:49 -0600 Subject: [PATCH 096/176] Add sha256 preimage support --- src/osp/OneStepProverHostIo.sol | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/osp/OneStepProverHostIo.sol b/src/osp/OneStepProverHostIo.sol index 260ab206..0206572f 100644 --- a/src/osp/OneStepProverHostIo.sol +++ b/src/osp/OneStepProverHostIo.sol @@ -105,7 +105,7 @@ contract OneStepProverHostIo is IOneStepProver { ExecutionContext calldata, Machine memory mach, Module memory mod, - Instruction calldata, + Instruction calldata inst, bytes calldata proof ) internal pure { uint256 preimageOffset = mach.valueStack.pop().assumeI32(); @@ -128,9 +128,30 @@ contract OneStepProverHostIo is IOneStepProver { bytes memory extracted; uint8 proofType = uint8(proof[proofOffset]); proofOffset++; - if (proofType == 0) { + // These values must be kept in sync with `arbitrator/arbutil/src/types.rs` + // and `arbutil/preimage_type.go` (both in the nitro repo). + if (inst.argumentData == 0) { + // The machine is asking for a keccak256 preimage + + if (proofType == 0) { + bytes calldata preimage = proof[proofOffset:]; + require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); + + uint256 preimageEnd = preimageOffset + 32; + if (preimageEnd > preimage.length) { + preimageEnd = preimage.length; + } + extracted = preimage[preimageOffset:preimageEnd]; + } else { + // TODO: support proving via an authenticated contract + revert("UNKNOWN_PREIMAGE_PROOF"); + } + } else if (inst.argumentData == 1) { + // The machine is asking for a sha2-256 preimage + + require(proofType == 0, "UNKNOWN_PREIMAGE_PROOF"); bytes calldata preimage = proof[proofOffset:]; - require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); + require(sha256(preimage) == leafContents, "BAD_PREIMAGE"); uint256 preimageEnd = preimageOffset + 32; if (preimageEnd > preimage.length) { @@ -138,8 +159,7 @@ contract OneStepProverHostIo is IOneStepProver { } extracted = preimage[preimageOffset:preimageEnd]; } else { - // TODO: support proving via an authenticated contract - revert("UNKNOWN_PREIMAGE_PROOF"); + revert("UNKNOWN_PREIMAGE_TYPE"); } for (uint256 i = 0; i < extracted.length; i++) { From fdcc259edc87a5143d359231d780d4970329c249 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 21 Aug 2023 15:01:28 +0200 Subject: [PATCH 097/176] Add back missing packages --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 62dc3915..eb973360 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,9 @@ "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { + "@arbitrum/sdk": "^3.1.3", + "@ethersproject/providers": "^5.7.2", + "@offchainlabs/upgrade-executor": "^1.0.0-beta.2", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "patch-package": "^6.4.7" From 5e0e4f1e819e1ec7c0f1bae581a39915e03748bf Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 13:11:53 +0200 Subject: [PATCH 098/176] Use single contract for BridgeCreator 'createBridge' entrypoint receives nativeToken param. Depending if it address(0) or not it will create ETH-based/ERC20-based bridge --- scripts/deployment.ts | 3 - src/rollup/AbsBridgeCreator.sol | 117 -------------- src/rollup/BridgeCreator.sol | 204 ++++++++++++++++++++++-- src/rollup/ERC20BridgeCreator.sol | 48 ------ src/rollup/RollupCreator.sol | 50 ++---- test/contract/arbRollup.spec.ts | 12 +- test/foundry/BridgeCreator.t.sol | 213 ++++++++++++++++++++++++++ test/foundry/ERC20BridgeCreator.t.sol | 113 -------------- test/foundry/RollupCreator.t.sol | 68 +++----- 9 files changed, 441 insertions(+), 387 deletions(-) delete mode 100644 src/rollup/AbsBridgeCreator.sol delete mode 100644 src/rollup/ERC20BridgeCreator.sol create mode 100644 test/foundry/BridgeCreator.t.sol delete mode 100644 test/foundry/ERC20BridgeCreator.t.sol diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 437500b5..9a5bf94f 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -61,7 +61,6 @@ async function deployAllContracts( signer: any ): Promise> { const bridgeCreator = await deployContract('BridgeCreator', signer) - const erc20BridgeCreator = await deployContract('ERC20BridgeCreator', signer) const prover0 = await deployContract('OneStepProver0', signer) const proverMem = await deployContract('OneStepProverMemory', signer) const proverMath = await deployContract('OneStepProverMath', signer) @@ -83,7 +82,6 @@ async function deployAllContracts( const rollupCreator = await deployContract('RollupCreator', signer) return { bridgeCreator, - erc20BridgeCreator, prover0, proverMem, proverMath, @@ -109,7 +107,6 @@ async function main() { console.log('Waiting for the Template to be set on the Rollup Creator') await contracts.rollupCreator.setTemplates( contracts.bridgeCreator.address, - contracts.erc20BridgeCreator.address, contracts.osp.address, contracts.challengeManager.address, contracts.rollupAdmin.address, diff --git a/src/rollup/AbsBridgeCreator.sol b/src/rollup/AbsBridgeCreator.sol deleted file mode 100644 index 8093d725..00000000 --- a/src/rollup/AbsBridgeCreator.sol +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "../bridge/IBridge.sol"; -import "../bridge/SequencerInbox.sol"; -import "../bridge/IInboxBase.sol"; -import "../bridge/Outbox.sol"; -import "../rollup/IBridgeCreator.sol"; -import "./IRollupEventInbox.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; - -abstract contract AbsBridgeCreator is Ownable, IBridgeCreator { - IBridge public bridgeTemplate; - SequencerInbox public sequencerInboxTemplate; - IInboxBase public inboxTemplate; - IRollupEventInbox public rollupEventInboxTemplate; - Outbox public outboxTemplate; - - event TemplatesUpdated(); - - constructor() Ownable() { - sequencerInboxTemplate = new SequencerInbox(); - outboxTemplate = new Outbox(); - } - - function updateTemplates( - address _bridgeTemplate, - address _sequencerInboxTemplate, - address _inboxTemplate, - address _rollupEventInboxTemplate, - address _outboxTemplate - ) external onlyOwner { - bridgeTemplate = IBridge(_bridgeTemplate); - sequencerInboxTemplate = SequencerInbox(_sequencerInboxTemplate); - inboxTemplate = IInboxBase(_inboxTemplate); - rollupEventInboxTemplate = IRollupEventInbox(_rollupEventInboxTemplate); - outboxTemplate = Outbox(_outboxTemplate); - - emit TemplatesUpdated(); - } - - struct CreateBridgeFrame { - ProxyAdmin admin; - IBridge bridge; - SequencerInbox sequencerInbox; - IInboxBase inbox; - IRollupEventInbox rollupEventInbox; - Outbox outbox; - } - - function _createBridge( - address adminProxy, - address rollup, - address nativeToken, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation - ) - internal - returns ( - IBridge, - SequencerInbox, - IInboxBase, - IRollupEventInbox, - Outbox - ) - { - CreateBridgeFrame memory frame; - { - frame.bridge = IBridge( - address(new TransparentUpgradeableProxy(address(bridgeTemplate), adminProxy, "")) - ); - frame.sequencerInbox = SequencerInbox( - address( - new TransparentUpgradeableProxy(address(sequencerInboxTemplate), adminProxy, "") - ) - ); - frame.inbox = IInboxBase( - address(new TransparentUpgradeableProxy(address(inboxTemplate), adminProxy, "")) - ); - frame.rollupEventInbox = IRollupEventInbox( - address( - new TransparentUpgradeableProxy( - address(rollupEventInboxTemplate), - adminProxy, - "" - ) - ) - ); - frame.outbox = Outbox( - address(new TransparentUpgradeableProxy(address(outboxTemplate), adminProxy, "")) - ); - } - - _initializeBridge(frame.bridge, IOwnable(rollup), nativeToken); - frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); - frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); - frame.rollupEventInbox.initialize(IBridge(frame.bridge)); - frame.outbox.initialize(IBridge(frame.bridge)); - - return ( - frame.bridge, - frame.sequencerInbox, - frame.inbox, - frame.rollupEventInbox, - frame.outbox - ); - } - - function _initializeBridge( - IBridge bridge, - IOwnable rollup, - address - ) internal virtual; -} diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index a7d982ff..d901a604 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -5,21 +5,85 @@ pragma solidity ^0.8.0; import "../bridge/Bridge.sol"; -import "../bridge/IEthBridge.sol"; +import "../bridge/SequencerInbox.sol"; +import "../bridge/ISequencerInbox.sol"; import "../bridge/Inbox.sol"; -import "../rollup/AbsBridgeCreator.sol"; -import "../rollup/RollupEventInbox.sol"; - -contract BridgeCreator is AbsBridgeCreator, IEthBridgeCreator { - constructor() AbsBridgeCreator() { - bridgeTemplate = new Bridge(); - inboxTemplate = new Inbox(); - rollupEventInboxTemplate = new RollupEventInbox(); +import "../bridge/Outbox.sol"; +import "./RollupEventInbox.sol"; +import "../bridge/ERC20Bridge.sol"; +import "../bridge/ERC20Inbox.sol"; +import "../rollup/ERC20RollupEventInbox.sol"; +import "../bridge/ERC20Outbox.sol"; + +import "../bridge/IBridge.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +contract BridgeCreator is Ownable { + ContractTemplates public ethBasedTemplates; + ContractERC20Templates public erc20BasedTemplates; + + event TemplatesUpdated(); + event ERC20TemplatesUpdated(); + + struct ContractTemplates { + Bridge bridge; + SequencerInbox sequencerInbox; + Inbox inbox; + RollupEventInbox rollupEventInbox; + Outbox outbox; + } + + struct ContractERC20Templates { + ERC20Bridge bridge; + SequencerInbox sequencerInbox; + ERC20Inbox inbox; + ERC20RollupEventInbox rollupEventInbox; + ERC20Outbox outbox; + } + + struct CreateBridgeFrame { + ProxyAdmin admin; + IBridge bridge; + SequencerInbox sequencerInbox; + IInboxBase inbox; + IRollupEventInbox rollupEventInbox; + Outbox outbox; + } + + constructor() Ownable() { + SequencerInbox seqInbox = new SequencerInbox(); + + ethBasedTemplates.bridge = new Bridge(); + ethBasedTemplates.sequencerInbox = seqInbox; + ethBasedTemplates.inbox = new Inbox(); + ethBasedTemplates.rollupEventInbox = new RollupEventInbox(); + ethBasedTemplates.outbox = new Outbox(); + + erc20BasedTemplates.bridge = new ERC20Bridge(); + erc20BasedTemplates.sequencerInbox = seqInbox; + erc20BasedTemplates.inbox = new ERC20Inbox(); + erc20BasedTemplates.rollupEventInbox = new ERC20RollupEventInbox(); + erc20BasedTemplates.outbox = new ERC20Outbox(); + } + + function updateTemplates(ContractTemplates calldata _newTemplates) external onlyOwner { + ethBasedTemplates = _newTemplates; + emit TemplatesUpdated(); + } + + function updateERC20Templates(ContractERC20Templates calldata _newTemplates) + external + onlyOwner + { + erc20BasedTemplates = _newTemplates; + emit ERC20TemplatesUpdated(); } function createBridge( address adminProxy, address rollup, + address nativeToken, ISequencerInbox.MaxTimeVariation memory maxTimeVariation ) external @@ -31,14 +95,120 @@ contract BridgeCreator is AbsBridgeCreator, IEthBridgeCreator { Outbox ) { - return _createBridge(adminProxy, rollup, address(0), maxTimeVariation); - } + CreateBridgeFrame memory frame; + + // create ETH-based bridge if address zero is provided for native token, otherwise create ERC20-based bridge + if (nativeToken == address(0)) { + frame.bridge = Bridge( + address( + new TransparentUpgradeableProxy( + address(ethBasedTemplates.bridge), + adminProxy, + "" + ) + ) + ); + frame.sequencerInbox = SequencerInbox( + address( + new TransparentUpgradeableProxy( + address(ethBasedTemplates.sequencerInbox), + adminProxy, + "" + ) + ) + ); + frame.inbox = Inbox( + address( + new TransparentUpgradeableProxy( + address(ethBasedTemplates.inbox), + adminProxy, + "" + ) + ) + ); + frame.rollupEventInbox = RollupEventInbox( + address( + new TransparentUpgradeableProxy( + address(ethBasedTemplates.rollupEventInbox), + adminProxy, + "" + ) + ) + ); + frame.outbox = Outbox( + address( + new TransparentUpgradeableProxy( + address(ethBasedTemplates.outbox), + adminProxy, + "" + ) + ) + ); + } else { + frame.bridge = Bridge( + address( + new TransparentUpgradeableProxy( + address(erc20BasedTemplates.bridge), + adminProxy, + "" + ) + ) + ); + frame.sequencerInbox = SequencerInbox( + address( + new TransparentUpgradeableProxy( + address(erc20BasedTemplates.sequencerInbox), + adminProxy, + "" + ) + ) + ); + frame.inbox = Inbox( + address( + new TransparentUpgradeableProxy( + address(erc20BasedTemplates.inbox), + adminProxy, + "" + ) + ) + ); + frame.rollupEventInbox = RollupEventInbox( + address( + new TransparentUpgradeableProxy( + address(erc20BasedTemplates.rollupEventInbox), + adminProxy, + "" + ) + ) + ); + frame.outbox = Outbox( + address( + new TransparentUpgradeableProxy( + address(erc20BasedTemplates.outbox), + adminProxy, + "" + ) + ) + ); + } + + // init contracts + if (nativeToken == address(0)) { + IEthBridge(address(frame.bridge)).initialize(IOwnable(rollup)); + } else { + IERC20Bridge(address(frame.bridge)).initialize(IOwnable(rollup), nativeToken); + } + frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); + frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); + frame.rollupEventInbox.initialize(IBridge(frame.bridge)); + frame.outbox.initialize(IBridge(frame.bridge)); - function _initializeBridge( - IBridge bridge, - IOwnable rollup, - address - ) internal override { - IEthBridge(address(bridge)).initialize(IOwnable(rollup)); + return ( + frame.bridge, + frame.sequencerInbox, + frame.inbox, + frame.rollupEventInbox, + frame.outbox + ); } } diff --git a/src/rollup/ERC20BridgeCreator.sol b/src/rollup/ERC20BridgeCreator.sol deleted file mode 100644 index 5c597c63..00000000 --- a/src/rollup/ERC20BridgeCreator.sol +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "../rollup/AbsBridgeCreator.sol"; -import "../bridge/ERC20Bridge.sol"; -import "../bridge/IERC20Bridge.sol"; -import "../bridge/ERC20Inbox.sol"; -import "../rollup/IBridgeCreator.sol"; -import "../rollup/ERC20RollupEventInbox.sol"; - -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; - -contract ERC20BridgeCreator is AbsBridgeCreator, IERC20BridgeCreator { - constructor() AbsBridgeCreator() { - bridgeTemplate = new ERC20Bridge(); - inboxTemplate = new ERC20Inbox(); - rollupEventInboxTemplate = new ERC20RollupEventInbox(); - } - - function createBridge( - address adminProxy, - address rollup, - address nativeToken, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation - ) - external - returns ( - IBridge, - SequencerInbox, - IInboxBase, - IRollupEventInbox, - Outbox - ) - { - return _createBridge(adminProxy, rollup, nativeToken, maxTimeVariation); - } - - function _initializeBridge( - IBridge bridge, - IOwnable rollup, - address nativeToken - ) internal override { - IERC20Bridge(address(bridge)).initialize(IOwnable(rollup), nativeToken); - } -} diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index d34a409f..5e9f28c9 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -7,7 +7,6 @@ pragma solidity ^0.8.0; import "./RollupProxy.sol"; import "./IRollupAdmin.sol"; import "./BridgeCreator.sol"; -import "./ERC20BridgeCreator.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; @@ -28,8 +27,7 @@ contract RollupCreator is Ownable { ); event TemplatesUpdated(); - BridgeCreator public ethBridgeCreator; - ERC20BridgeCreator public erc20BridgeCreator; + BridgeCreator public bridgeCreator; IOneStepProofEntry public osp; IChallengeManager public challengeManagerTemplate; IRollupAdmin public rollupAdminLogic; @@ -49,8 +47,7 @@ contract RollupCreator is Ownable { constructor() Ownable() {} function setTemplates( - BridgeCreator _ethBridgeCreator, - ERC20BridgeCreator _erc20BridgeCreator, + BridgeCreator _bridgeCreator, IOneStepProofEntry _osp, IChallengeManager _challengeManagerLogic, IRollupAdmin _rollupAdminLogic, @@ -58,8 +55,7 @@ contract RollupCreator is Ownable { address _validatorUtils, address _validatorWalletCreator ) external onlyOwner { - ethBridgeCreator = _ethBridgeCreator; - erc20BridgeCreator = _erc20BridgeCreator; + bridgeCreator = _bridgeCreator; osp = _osp; challengeManagerTemplate = _challengeManagerLogic; rollupAdminLogic = _rollupAdminLogic; @@ -95,34 +91,18 @@ contract RollupCreator is Ownable { RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); BridgeContracts memory bridgeContracts; - if (_nativeToken == address(0)) { - // create ETH-based rollup if address zero is provided for native token - ( - bridgeContracts.bridge, - bridgeContracts.sequencerInbox, - bridgeContracts.inbox, - bridgeContracts.rollupEventInbox, - bridgeContracts.outbox - ) = ethBridgeCreator.createBridge( - address(proxyAdmin), - address(rollup), - config.sequencerInboxMaxTimeVariation - ); - } else { - // otherwise create ERC20-based rollup with custom fee token - ( - bridgeContracts.bridge, - bridgeContracts.sequencerInbox, - bridgeContracts.inbox, - bridgeContracts.rollupEventInbox, - bridgeContracts.outbox - ) = erc20BridgeCreator.createBridge( - address(proxyAdmin), - address(rollup), - _nativeToken, - config.sequencerInboxMaxTimeVariation - ); - } + ( + bridgeContracts.bridge, + bridgeContracts.sequencerInbox, + bridgeContracts.inbox, + bridgeContracts.rollupEventInbox, + bridgeContracts.outbox + ) = bridgeCreator.createBridge( + address(proxyAdmin), + address(rollup), + _nativeToken, + config.sequencerInboxMaxTimeVariation + ); IChallengeManager challengeManager = IChallengeManager( address( diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 884da19d..0d20af8f 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -156,15 +156,10 @@ const setup = async () => { )) as RollupUserLogic__factory const rollupUserLogicTemplate = await rollupUserLogicFac.deploy() - const ethBridgeCreatorFac = (await ethers.getContractFactory( + const bridgeCreatorFac = (await ethers.getContractFactory( 'BridgeCreator' )) as BridgeCreator__factory - const ethBridgeCreator = await ethBridgeCreatorFac.deploy() - - const erc20BridgeCreatorFac = (await ethers.getContractFactory( - 'ERC20BridgeCreator' - )) as BridgeCreator__factory - const erc20BridgeCreator = await erc20BridgeCreatorFac.deploy() + const bridgeCreator = await bridgeCreatorFac.deploy() const rollupCreatorFac = (await ethers.getContractFactory( 'RollupCreator' @@ -172,8 +167,7 @@ const setup = async () => { const rollupCreator = await rollupCreatorFac.deploy() await rollupCreator.setTemplates( - ethBridgeCreator.address, - erc20BridgeCreator.address, + bridgeCreator.address, oneStepProofEntry.address, challengeManagerTemplate.address, rollupAdminLogicTemplate.address, diff --git a/test/foundry/BridgeCreator.t.sol b/test/foundry/BridgeCreator.t.sol new file mode 100644 index 00000000..7f2dfd3c --- /dev/null +++ b/test/foundry/BridgeCreator.t.sol @@ -0,0 +1,213 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.4; + +import "forge-std/Test.sol"; +import "./util/TestUtil.sol"; +import "../../src/rollup/BridgeCreator.sol"; +import "../../src/bridge/ISequencerInbox.sol"; +import "../../src/bridge/AbsInbox.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; + +contract BridgeCreatorTest is Test { + BridgeCreator public creator; + address public owner = address(100); + + function setUp() public { + vm.prank(owner); + creator = new BridgeCreator(); + } + + /* solhint-disable func-name-mixedcase */ + function test_constructor() public { + ( + Bridge bridgeTemplate, + SequencerInbox sequencerInboxTemplate, + Inbox inboxTemplate, + RollupEventInbox rollupEventInboxTemplate, + Outbox outboxTemplate + ) = creator.ethBasedTemplates(); + assertTrue(address(bridgeTemplate) != address(0), "Bridge not created"); + assertTrue(address(sequencerInboxTemplate) != address(0), "SeqInbox not created"); + assertTrue(address(inboxTemplate) != address(0), "Inbox not created"); + assertTrue(address(rollupEventInboxTemplate) != address(0), "Event inbox not created"); + assertTrue(address(outboxTemplate) != address(0), "Outbox not created"); + + ( + ERC20Bridge erc20BridgeTemplate, + SequencerInbox erc20SequencerInboxTemplate, + ERC20Inbox erc20InboxTemplate, + ERC20RollupEventInbox erc20RollupEventInboxTemplate, + ERC20Outbox erc20OutboxTemplate + ) = creator.erc20BasedTemplates(); + assertTrue(address(erc20BridgeTemplate) != address(0), "Bridge not created"); + assertTrue(address(erc20SequencerInboxTemplate) != address(0), "SeqInbox not created"); + assertTrue(address(erc20InboxTemplate) != address(0), "Inbox not created"); + assertTrue(address(erc20RollupEventInboxTemplate) != address(0), "Event inbox not created"); + assertTrue(address(erc20OutboxTemplate) != address(0), "Outbox not created"); + } + + function test_updateTemplates() public { + BridgeCreator.ContractTemplates memory templs = BridgeCreator.ContractTemplates({ + bridge: Bridge(address(200)), + sequencerInbox: SequencerInbox(address(201)), + inbox: Inbox(address(202)), + rollupEventInbox: RollupEventInbox(address(203)), + outbox: Outbox(address(204)) + }); + + vm.prank(owner); + creator.updateTemplates(templs); + + ( + Bridge bridgeTemplate, + SequencerInbox sequencerInboxTemplate, + Inbox inboxTemplate, + RollupEventInbox rollupEventInboxTemplate, + Outbox outboxTemplate + ) = creator.ethBasedTemplates(); + assertEq(address(bridgeTemplate), address(templs.bridge), "Invalid bridge"); + assertEq( + address(sequencerInboxTemplate), address(templs.sequencerInbox), "Invalid seqInbox" + ); + assertEq(address(inboxTemplate), address(templs.inbox), "Invalid inbox"); + assertEq( + address(rollupEventInboxTemplate), + address(templs.rollupEventInbox), + "Invalid rollup event inbox" + ); + assertEq(address(outboxTemplate), address(templs.outbox), "Invalid outbox"); + } + + function test_updateERC20Templates() public { + BridgeCreator.ContractERC20Templates memory templs = BridgeCreator.ContractERC20Templates({ + bridge: ERC20Bridge(address(400)), + sequencerInbox: SequencerInbox(address(401)), + inbox: ERC20Inbox(address(402)), + rollupEventInbox: ERC20RollupEventInbox(address(403)), + outbox: ERC20Outbox(address(404)) + }); + + vm.prank(owner); + creator.updateERC20Templates(templs); + + ( + ERC20Bridge bridgeTemplate, + SequencerInbox sequencerInboxTemplate, + ERC20Inbox inboxTemplate, + ERC20RollupEventInbox rollupEventInboxTemplate, + ERC20Outbox outboxTemplate + ) = creator.erc20BasedTemplates(); + assertEq(address(bridgeTemplate), address(templs.bridge), "Invalid bridge"); + assertEq( + address(sequencerInboxTemplate), address(templs.sequencerInbox), "Invalid seqInbox" + ); + assertEq(address(inboxTemplate), address(templs.inbox), "Invalid inbox"); + assertEq( + address(rollupEventInboxTemplate), + address(templs.rollupEventInbox), + "Invalid rollup event inbox" + ); + assertEq(address(outboxTemplate), address(templs.outbox), "Invalid outbox"); + } + + function test_createEthBridge() public { + address proxyAdmin = address(300); + address rollup = address(301); + address nativeToken = address(0); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(10, 20, 30, 40); + timeVars.delayBlocks; + + ( + IBridge bridge, + SequencerInbox seqInbox, + IInboxBase inbox, + IRollupEventInbox eventInbox, + Outbox outbox + ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); + + // bridge + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + + // seqInbox + assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); + (uint256 _delayBlocks, uint256 _futureBlocks, uint256 _delaySeconds, uint256 _futureSeconds) + = seqInbox.maxTimeVariation(); + assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); + assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); + assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); + assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); + + // inbox + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); + + // rollup event inbox + assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); + + // outbox + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + + // revert fetching native token + vm.expectRevert(); + IERC20Bridge(address(bridge)).nativeToken(); + } + + function test_createERC20Bridge() public { + address proxyAdmin = address(300); + address rollup = address(301); + address nativeToken = + address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(10, 20, 30, 40); + timeVars.delayBlocks; + + ( + IBridge bridge, + SequencerInbox seqInbox, + IInboxBase inbox, + IRollupEventInbox eventInbox, + Outbox outbox + ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); + + // bridge + assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); + assertEq( + address(IERC20Bridge(address(bridge)).nativeToken()), + nativeToken, + "Invalid nativeToken ref" + ); + assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); + + // seqInbox + assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); + (uint256 _delayBlocks, uint256 _futureBlocks, uint256 _delaySeconds, uint256 _futureSeconds) + = seqInbox.maxTimeVariation(); + assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); + assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); + assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); + assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); + + // inbox + assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); + assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); + assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); + + // rollup event inbox + assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); + + // outbox + assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); + assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); + } +} diff --git a/test/foundry/ERC20BridgeCreator.t.sol b/test/foundry/ERC20BridgeCreator.t.sol deleted file mode 100644 index 5dfa2461..00000000 --- a/test/foundry/ERC20BridgeCreator.t.sol +++ /dev/null @@ -1,113 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.4; - -import "forge-std/Test.sol"; -import "./util/TestUtil.sol"; -import "../../src/rollup/ERC20BridgeCreator.sol"; -import "../../src/bridge/ISequencerInbox.sol"; -import "../../src/bridge/AbsInbox.sol"; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; - -contract ERC20BridgeCreatorTest is Test { - ERC20BridgeCreator public creator; - address public owner = address(100); - - function setUp() public { - vm.prank(owner); - creator = new ERC20BridgeCreator(); - } - - /* solhint-disable func-name-mixedcase */ - function test_constructor() public { - assertTrue(address(creator.bridgeTemplate()) != address(0), "Bridge not created"); - assertTrue(address(creator.sequencerInboxTemplate()) != address(0), "SeqInbox not created"); - assertTrue(address(creator.inboxTemplate()) != address(0), "Inbox not created"); - assertTrue( - address(creator.rollupEventInboxTemplate()) != address(0), - "Event inbox not created" - ); - assertTrue(address(creator.outboxTemplate()) != address(0), "Outbox not created"); - } - - function test_updateTemplates() public { - address bridge = address(200); - address sequencerInbox = address(201); - address inbox = address(202); - address rollupEventInbox = address(203); - address outbox = address(204); - - vm.prank(owner); - creator.updateTemplates(bridge, sequencerInbox, inbox, rollupEventInbox, outbox); - - assertEq(address(creator.bridgeTemplate()), bridge, "Invalid bridge"); - assertEq(address(creator.sequencerInboxTemplate()), sequencerInbox, "Invalid seqInbox"); - assertEq(address(creator.inboxTemplate()), inbox, "Invalid inbox"); - assertEq( - address(creator.rollupEventInboxTemplate()), - rollupEventInbox, - "Invalid rollup event inbox" - ); - assertEq(address(creator.outboxTemplate()), outbox, "Invalid outbox"); - } - - function test_createBridge() public { - address proxyAdmin = address(300); - address rollup = address(301); - address nativeToken = address( - new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) - ); - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - 10, - 20, - 30, - 40 - ); - timeVars.delayBlocks; - - ( - IBridge bridge, - SequencerInbox seqInbox, - IInboxBase inbox, - IRollupEventInbox eventInbox, - Outbox outbox - ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); - - // bridge - assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); - assertEq( - address(IERC20Bridge(address(bridge)).nativeToken()), - nativeToken, - "Invalid nativeToken ref" - ); - assertEq(bridge.activeOutbox(), address(0), "Invalid activeOutbox ref"); - - // seqInbox - assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); - assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); - ( - uint256 _delayBlocks, - uint256 _futureBlocks, - uint256 _delaySeconds, - uint256 _futureSeconds - ) = seqInbox.maxTimeVariation(); - assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); - assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); - assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); - assertEq(_futureSeconds, timeVars.futureSeconds, "Invalid futureSeconds"); - - // inbox - assertEq(address(inbox.bridge()), address(bridge), "Invalid bridge ref"); - assertEq(address(inbox.sequencerInbox()), address(seqInbox), "Invalid seqInbox ref"); - assertEq(inbox.allowListEnabled(), false, "Invalid allowListEnabled"); - assertEq(AbsInbox(address(inbox)).paused(), false, "Invalid paused status"); - - // rollup event inbox - assertEq(address(eventInbox.bridge()), address(bridge), "Invalid bridge ref"); - assertEq(address(eventInbox.rollup()), rollup, "Invalid rollup ref"); - - // outbox - assertEq(address(outbox.bridge()), address(bridge), "Invalid bridge ref"); - assertEq(address(outbox.rollup()), rollup, "Invalid rollup ref"); - } -} diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 9ae2b8db..36dad1a8 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -14,8 +14,8 @@ import "../../src/osp/OneStepProverMemory.sol"; import "../../src/osp/OneStepProverMath.sol"; import "../../src/osp/OneStepProverHostIo.sol"; import "../../src/osp/OneStepProofEntry.sol"; - import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; contract RollupCreatorTest is Test { RollupCreator public rollupCreator; @@ -32,8 +32,7 @@ contract RollupCreatorTest is Test { rollupCreator = new RollupCreator(); // deploy BridgeCreators - BridgeCreator ethBridgeCreator = new BridgeCreator(); - ERC20BridgeCreator erc20BridgeCreator = new ERC20BridgeCreator(); + BridgeCreator bridgeCreator = new BridgeCreator(); ( IOneStepProofEntry ospEntry, @@ -47,8 +46,7 @@ contract RollupCreatorTest is Test { //// deploy creator and set logic rollupCreator.setTemplates( - ethBridgeCreator, - erc20BridgeCreator, + bridgeCreator, ospEntry, challengeManager, _rollupAdmin, @@ -64,12 +62,8 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -80,7 +74,7 @@ contract RollupCreatorTest is Test { loserStakeEscrow: address(200), chainId: 1337, chainConfig: "abc", - genesisBlockNum: 15000000, + genesisBlockNum: 15_000_000, sequencerInboxMaxTimeVariation: timeVars }); @@ -89,12 +83,8 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - address(0) - ); + address rollupAddress = + rollupCreator.createRollup(config, batchPoster, validators, address(0)); vm.stopPrank(); @@ -127,17 +117,12 @@ contract RollupCreatorTest is Test { function test_createErc20Rollup() public { vm.startPrank(deployer); - address nativeToken = address( - new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) - ); + address nativeToken = + address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -148,7 +133,7 @@ contract RollupCreatorTest is Test { loserStakeEscrow: address(200), chainId: 1337, chainConfig: "abc", - genesisBlockNum: 15000000, + genesisBlockNum: 15_000_000, sequencerInboxMaxTimeVariation: timeVars }); @@ -157,12 +142,8 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - nativeToken - ); + address rollupAddress = + rollupCreator.createRollup(config, batchPoster, validators, nativeToken); vm.stopPrank(); @@ -194,9 +175,7 @@ contract RollupCreatorTest is Test { // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( - IERC20Bridge(address(bridge)).nativeToken(), - nativeToken, - "Invalid native token ref" + IERC20Bridge(address(bridge)).nativeToken(), nativeToken, "Invalid native token ref" ); } @@ -211,11 +190,11 @@ contract RollupCreatorTest is Test { { //// deploy challenge stuff ospEntry = new OneStepProofEntry( - new OneStepProver0(), - new OneStepProverMemory(), - new OneStepProverMath(), - new OneStepProverHostIo() - ); + new OneStepProver0(), + new OneStepProverMemory(), + new OneStepProverMath(), + new OneStepProverHostIo() + ); challengeManager = new ChallengeManager(); //// deploy rollup logic @@ -236,9 +215,8 @@ contract RollupCreatorTest is Test { } function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = bytes32( - uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 - ); + bytes32 secondarySlot = + bytes32(uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1); return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } From 2b731ff3c0b69fcb8d50a5a31283e64f435284a3 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 14:19:28 +0200 Subject: [PATCH 099/176] Add more descriptive comments --- src/bridge/ERC20Bridge.sol | 2 ++ src/bridge/ERC20Outbox.sol | 3 +++ src/bridge/Outbox.sol | 4 ++++ test/foundry/ERC20Outbox.t.sol | 1 + test/foundry/Outbox.t.sol | 1 + 5 files changed, 11 insertions(+) diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol index 5c643562..9f94fb7d 100644 --- a/src/bridge/ERC20Bridge.sol +++ b/src/bridge/ERC20Bridge.sol @@ -50,6 +50,8 @@ contract ERC20Bridge is AbsBridge, IERC20Bridge { uint256 value, bytes memory data ) internal override returns (bool success, bytes memory returnData) { + // we don't allow outgoing calls to native token contract because it could + // result in loss of native tokens which are escrowed by ERC20Bridge if (to == nativeToken) { revert CallTargetNotAllowed(nativeToken); } diff --git a/src/bridge/ERC20Outbox.sol b/src/bridge/ERC20Outbox.sol index e5fe31c8..fcc08ef8 100644 --- a/src/bridge/ERC20Outbox.sol +++ b/src/bridge/ERC20Outbox.sol @@ -7,6 +7,7 @@ pragma solidity ^0.8.4; import "./AbsOutbox.sol"; contract ERC20Outbox is AbsOutbox { + // it is assumed that arb-os never assigns this value to a valid leaf to be redeemed uint256 private constant AMOUNT_DEFAULT_CONTEXT = type(uint256).max; function l2ToL1WithdrawalAmount() external view returns (uint256) { @@ -17,11 +18,13 @@ contract ERC20Outbox is AbsOutbox { /// @inheritdoc AbsOutbox function _defaultContextAmount() internal pure override returns (uint256) { + // we use type(uint256).max as representation of 0 native token withdrawal amount return AMOUNT_DEFAULT_CONTEXT; } /// @inheritdoc AbsOutbox function _amountToSetInContext(uint256 value) internal pure override returns (uint256) { + // native token withdrawal amount which can be fetched from context return value; } } diff --git a/src/bridge/Outbox.sol b/src/bridge/Outbox.sol index b5ad61b8..8ae873df 100644 --- a/src/bridge/Outbox.sol +++ b/src/bridge/Outbox.sol @@ -9,11 +9,15 @@ import "./AbsOutbox.sol"; contract Outbox is AbsOutbox { /// @inheritdoc AbsOutbox function _defaultContextAmount() internal pure override returns (uint256) { + // In ETH-based chains withdrawal amount can be read from msg.value. For that reason + // amount slot in context will never be accessed and it has 0 default value return 0; } /// @inheritdoc AbsOutbox function _amountToSetInContext(uint256) internal pure override returns (uint256) { + // In ETH-based chains withdrawal amount can be read from msg.value. For that reason + // amount slot in context will never be accessed, we keep it as 0 all the time return 0; } } diff --git a/test/foundry/ERC20Outbox.t.sol b/test/foundry/ERC20Outbox.t.sol index 076e516c..f97e96be 100644 --- a/test/foundry/ERC20Outbox.t.sol +++ b/test/foundry/ERC20Outbox.t.sol @@ -31,6 +31,7 @@ contract ERC20OutboxTest is AbsOutboxTest { nativeToken.transfer(user, 1_000); } + /* solhint-disable func-name-mixedcase */ function test_initialize_WithdrawalAmount() public { assertEq(erc20Outbox.l2ToL1WithdrawalAmount(), 0, "Invalid withdrawalAmount"); } diff --git a/test/foundry/Outbox.t.sol b/test/foundry/Outbox.t.sol index 39383117..3b7d9cd4 100644 --- a/test/foundry/Outbox.t.sol +++ b/test/foundry/Outbox.t.sol @@ -24,6 +24,7 @@ contract OutboxTest is AbsOutboxTest { bridge.setOutbox(address(outbox), true); } + /* solhint-disable func-name-mixedcase */ function test_executeTransaction() public { // fund bridge with some ether vm.deal(address(bridge), 100 ether); From d5d33c2b8d5615563b8c553ca2a1bb936c039924 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 14:38:53 +0200 Subject: [PATCH 100/176] One more comment --- src/bridge/ERC20Inbox.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bridge/ERC20Inbox.sol b/src/bridge/ERC20Inbox.sol index 8d364c78..ef04bf38 100644 --- a/src/bridge/ERC20Inbox.sol +++ b/src/bridge/ERC20Inbox.sol @@ -122,7 +122,8 @@ contract ERC20Inbox is AbsInbox, IERC20Inbox { bytes32 messageDataHash, uint256 tokenAmount ) internal override returns (uint256) { - // fetch native token from sender if inbox doesn't already hold enough tokens to pay for fees + // Fetch native token from sender if inbox doesn't already hold enough tokens to pay for fees. + // Inbox might have been pre-funded in prior call, ie. as part of token bridging flow. address nativeToken = IERC20Bridge(address(bridge)).nativeToken(); uint256 inboxNativeTokenBalance = IERC20(nativeToken).balanceOf(address(this)); if (inboxNativeTokenBalance < tokenAmount) { From 69a8c33370c77d4ec59f25f91a1a674691b227bd Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 14:59:51 +0200 Subject: [PATCH 101/176] Fix merge leftovers --- test/foundry/RollupCreator.t.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 18b4ffe5..e777d788 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -36,6 +36,8 @@ contract RollupCreatorTest is Test { // deploy BridgeCreators BridgeCreator bridgeCreator = new BridgeCreator(); + IUpgradeExecutor upgradeExecutorLogic = new UpgradeExecutorMock(); + ( IOneStepProofEntry ospEntry, IChallengeManager challengeManager, @@ -77,7 +79,7 @@ contract RollupCreatorTest is Test { loserStakeEscrow: address(200), chainId: 1337, chainConfig: "abc", - genesisBlockNum: 15__000__000, + genesisBlockNum: 15_000_000, sequencerInboxMaxTimeVariation: timeVars }); From 1eaf9311eb9b91e9cd3cdd123dcb7e1f8aa80dd6 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 15:08:12 +0200 Subject: [PATCH 102/176] Bump upgrade executor --- package.json | 2 +- src/mocks/UpgradeExecutorMock.sol | 21 +++++++++++++++++++++ yarn.lock | 8 ++++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index eb973360..457ab06c 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "dependencies": { "@arbitrum/sdk": "^3.1.3", "@ethersproject/providers": "^5.7.2", - "@offchainlabs/upgrade-executor": "^1.0.0-beta.2", + "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", "patch-package": "^6.4.7" diff --git a/src/mocks/UpgradeExecutorMock.sol b/src/mocks/UpgradeExecutorMock.sol index c036aaf0..6b7ca9db 100644 --- a/src/mocks/UpgradeExecutorMock.sol +++ b/src/mocks/UpgradeExecutorMock.sol @@ -21,6 +21,9 @@ contract UpgradeExecutorMock is /// @notice Emitted when an upgrade execution occurs event UpgradeExecuted(address indexed upgrade, uint256 value, bytes data); + /// @notice Emitted when target call occurs + event TargetCallExecuted(address indexed target, uint256 value, bytes data); + constructor() initializer {} /// @notice Initialise the upgrade executor @@ -58,4 +61,22 @@ contract UpgradeExecutorMock is emit UpgradeExecuted(upgrade, msg.value, upgradeCallData); } + + /// @notice Execute an upgrade by directly calling target contract + /// @dev Only executor can call this. + function executeCall(address target, bytes memory targetCallData) + public + payable + onlyRole(EXECUTOR_ROLE) + nonReentrant + { + // OZ Address library check if the address is a contract and bubble up inner revert reason + address(target).functionCallWithValue( + targetCallData, + msg.value, + "UpgradeExecutor: inner call failed without reason" + ); + + emit TargetCallExecuted(target, msg.value, targetCallData); + } } diff --git a/yarn.lock b/yarn.lock index 92c25107..aeaaadee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,10 +1202,10 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@offchainlabs/upgrade-executor@^1.0.0-beta.2": - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.0.0-beta.2.tgz#b3f9e1ba2e58edf17019249b4663d88567961fec" - integrity sha512-aSjWctspD2QTGXUv0fRHudFrl5oR42nRB/88JUnC9O5tujPyRksM6Y8WyrDNl3eZuqV+L1V76Ui2Av4NrUkd+g== +"@offchainlabs/upgrade-executor@1.1.0-beta.0": + version "1.1.0-beta.0" + resolved "https://registry.yarnpkg.com/@offchainlabs/upgrade-executor/-/upgrade-executor-1.1.0-beta.0.tgz#c4b1375176546a18aaef01a43956abfb58250e0a" + integrity sha512-mpn6PHjH/KDDjNX0pXHEKdyv8m6DVGQiI2nGzQn0JbM1nOSHJpWx6fvfjtH7YxHJ6zBZTcsKkqGkFKDtCfoSLw== dependencies: "@openzeppelin/contracts" "4.7.3" "@openzeppelin/contracts-upgradeable" "4.7.3" From 59a6b1a096b41ec60da4fb1de02fecc4215e99c5 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 25 Aug 2023 19:37:39 +0200 Subject: [PATCH 103/176] Update rollup creator deployment script --- scripts/deployment.ts | 92 +++++++++++++++++++++++++++++++++---------- scripts/testSetup.ts | 20 +++++----- 2 files changed, 83 insertions(+), 29 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index de2d3a9e..7097c15b 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -2,6 +2,10 @@ import { ethers } from 'hardhat' import { ContractFactory, Contract } from 'ethers' import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' +import { + abi as UpgradeExecutorABI, + bytecode as UpgradeExecutorBytecode, +} from '@offchainlabs/upgrade-executor/build/contracts/src/UpgradeExecutor.sol/UpgradeExecutor.json' // Define a verification function async function verifyContract( @@ -56,6 +60,16 @@ async function deployContract( return contract } +// Deploy upgrade executor from imported bytecode +async function deployUpgradeExecutor(): Promise { + const upgradeExecutorFac = await ethers.getContractFactory( + UpgradeExecutorABI, + UpgradeExecutorBytecode + ) + const upgradeExecutor = await upgradeExecutorFac.deploy() + return upgradeExecutor +} + // Function to handle all deployments of core contracts using deployContract function async function deployAllContracts( signer: any @@ -74,7 +88,7 @@ async function deployAllContracts( const challengeManager = await deployContract('ChallengeManager', signer) const rollupAdmin = await deployContract('RollupAdminLogic', signer) const rollupUser = await deployContract('RollupUserLogic', signer) - const upgradeExecutor = await deployContract('UpgradeExecutor', signer) + const upgradeExecutor = await deployUpgradeExecutor() const validatorUtils = await deployContract('ValidatorUtils', signer) const validatorWalletCreator = await deployContract( 'ValidatorWalletCreator', @@ -119,37 +133,75 @@ async function main() { ) console.log('Template is set on the Rollup Creator') - const bridgeAddress = await contracts.bridgeCreator.bridgeTemplate() - const sequencerInboxAddress = - await contracts.bridgeCreator.sequencerInboxTemplate() - const inboxAddress = await contracts.bridgeCreator.inboxTemplate() - const outboxAddress = await contracts.bridgeCreator.outboxTemplate() + // get and verify ETH-based bridge contracts + const { bridge, sequencerInbox, inbox, outbox } = + await contracts.bridgeCreator.ethBasedTemplates() + console.log(`"bridge implementation contract" created at address:`, bridge) + await verifyContract('Bridge', bridge, [], 'src/bridge/Bridge.sol:Bridge') console.log( - `"bridge implementation contract" created at address:`, - bridgeAddress + `"sequencerInbox implementation contract" created at address:`, + sequencerInbox ) await verifyContract( - 'Bridge', - bridgeAddress, + 'SequencerInbox', + sequencerInbox, [], - 'src/bridge/Bridge.sol:Bridge' + 'src/bridge/SequencerInbox.sol:SequencerInbox' ) + console.log(`"inbox implementation contract" created at address:`, inbox) + await verifyContract('Inbox', inbox, [], 'src/bridge/Inbox.sol:Inbox') + console.log(`"outbox implementation contract" created at address:`, outbox) + await verifyContract('Outbox', outbox, [], 'src/bridge/Outbox.sol:Outbox') + + // get and verify ERC20-based bridge contracts + const { + bridge: erc20Bridge, + sequencerInbox: erc20SeqInbox, + inbox: erc20Inbox, + outbox: erc20Outbox, + } = await contracts.bridgeCreator.erc20BasedTemplates() + console.log( - `"sequencerInbox implementation contract" created at address:`, - sequencerInboxAddress + `"erc20 bridge implementation contract" created at address:`, + bridge + ) + await verifyContract( + 'ERC20Bridge', + erc20Bridge, + [], + 'src/bridge/ERC20Bridge.sol:ERC20Bridge' ) - await verifyContract('SequencerInbox', sequencerInboxAddress, []) console.log( - `"inbox implementation contract" created at address:`, - inboxAddress + `"erc20 sequencerInbox implementation contract" created at address:`, + erc20SeqInbox + ) + await verifyContract( + 'SequencerInbox', + erc20SeqInbox, + [], + 'src/bridge/SequencerInbox.sol:SequencerInbox' + ) + console.log( + `"erc20 inbox implementation contract" created at address:`, + inbox + ) + await verifyContract( + 'ERC20Inbox', + erc20Inbox, + [], + 'src/bridge/ERC20Inbox.sol:ERC20Inbox' ) - await verifyContract('Inbox', inboxAddress, []) console.log( - `"outbox implementation contract" created at address:`, - outboxAddress + `"erc20 outbox implementation contract" created at address:`, + outbox + ) + await verifyContract( + 'ERC20Outbox', + erc20Outbox, + [], + 'src/bridge/ERC20Outbox.sol:ERC20Outbox' ) - await verifyContract('Outbox', outboxAddress, []) } catch (error) { console.error( 'Deployment failed:', diff --git a/scripts/testSetup.ts b/scripts/testSetup.ts index 54db9174..2c11e769 100644 --- a/scripts/testSetup.ts +++ b/scripts/testSetup.ts @@ -19,15 +19,17 @@ export const getCustomNetworks = async ( const l1Provider = new JsonRpcProvider(l1Url) const l2Provider = new JsonRpcProvider(l2Url) let deploymentData: string - try { - deploymentData = execSync( - 'docker exec nitro_sequencer_1 cat /config/deployment.json' - ).toString() - } catch (e) { - deploymentData = execSync( - 'docker exec nitro-sequencer-1 cat /config/deployment.json' - ).toString() - } + + let sequencerContainer = execSync( + 'docker ps --filter "name=sequencer" --format "{{.Names}}"' + ) + .toString() + .trim() + + deploymentData = execSync( + `docker exec ${sequencerContainer} cat /config/deployment.json` + ).toString() + const parsedDeploymentData = JSON.parse(deploymentData) as { bridge: string inbox: string From 91eb8e9d341266bc9cfffb35924464e91c8d1042 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 4 Sep 2023 14:00:57 +0200 Subject: [PATCH 104/176] Port DeployHelper.sol from 'deploy-helper' branch --- src/rollup/DeployHelper.sol | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/rollup/DeployHelper.sol diff --git a/src/rollup/DeployHelper.sol b/src/rollup/DeployHelper.sol new file mode 100644 index 00000000..d794b880 --- /dev/null +++ b/src/rollup/DeployHelper.sol @@ -0,0 +1,67 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import {IInbox} from "../bridge/IInbox.sol"; + +/// @notice Helper contract for deploying some keyless deployment to Arbitrum using delayed inbox +contract DeployHelper { + // All payload are padded with 0x04 (ArbOS L2MessageKind_SignedTx Type) + + // Nick's CREATE2 Deterministic Deployment Proxy + // https://github.com/Arachnid/deterministic-deployment-proxy + address public constant NICK_CREATE2_DEPLOYER = 0x3fAB184622Dc19b6109349B94811493BF2a45362; + bytes public constant NICK_CREATE2_PAYLOAD = + hex"04f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; + + // ERC-2470 Singleton Factory + // https://eips.ethereum.org/EIPS/eip-2470 + address public constant ERC2470_DEPLOYER = 0xBb6e024b9cFFACB947A71991E386681B1Cd1477D; + bytes public constant ERC2470_PAYLOAD = + hex"04f9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b83247000822470"; + + // Zoltu's CREATE2 Deterministic Deployment Proxy + // https://github.com/Zoltu/deterministic-deployment-proxy + address public constant ZOLTU_CREATE2_DEPLOYER = 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1; + bytes public constant ZOLTU_CREATE2_PAYLOAD = + hex"04f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; + + // ERC-1820: Pseudo-introspection Registry Contract + // https://eips.ethereum.org/EIPS/eip-1820 + address public constant ERC1820_DEPLOYER = 0xa990077c3205cbDf861e17Fa532eeB069cE9fF96; + bytes public constant ERC1820_PAYLOAD = + hex"04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820"; + + uint256 internal constant GASLIMIT = 100_000; + uint256 internal constant MAXFEEPERGAS = 1_000_000_000; + + function _fundAndDeploy(IInbox inbox, uint256 _value, address _l2Address, bytes memory payload) + internal + { + uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); + inbox.createRetryableTicket{value: _value + submissionCost + GASLIMIT * MAXFEEPERGAS}({ + to: _l2Address, + l2CallValue: _value, + maxSubmissionCost: submissionCost, + excessFeeRefundAddress: msg.sender, + callValueRefundAddress: msg.sender, + gasLimit: GASLIMIT, + maxFeePerGas: MAXFEEPERGAS, + data: "" + }); + inbox.sendL2Message(payload); + } + + function perform(address _inbox) external payable { + IInbox inbox = IInbox(_inbox); + + _fundAndDeploy(inbox, 0.01 ether, NICK_CREATE2_DEPLOYER, NICK_CREATE2_PAYLOAD); + _fundAndDeploy(inbox, 0.0247 ether, ERC2470_DEPLOYER, ERC2470_PAYLOAD); + _fundAndDeploy(inbox, 0.01 ether, ZOLTU_CREATE2_DEPLOYER, ZOLTU_CREATE2_PAYLOAD); + _fundAndDeploy(inbox, 0.08 ether, ERC1820_DEPLOYER, ERC1820_PAYLOAD); + + payable(msg.sender).transfer(address(this).balance); + } +} From 74d8ba9fa7a3c2c789e394d68e763da58b4bb2af Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 5 Sep 2023 10:25:11 +0200 Subject: [PATCH 105/176] Deploy L2 factories using retryable tickets as part of rollup creation --- src/rollup/DeployHelper.sol | 33 +++++++++--- src/rollup/RollupCreator.sol | 88 ++++++++++++++++++++++++++------ test/foundry/RollupCreator.t.sol | 81 ++++++++++++++--------------- 3 files changed, 137 insertions(+), 65 deletions(-) diff --git a/src/rollup/DeployHelper.sol b/src/rollup/DeployHelper.sol index d794b880..26256f11 100644 --- a/src/rollup/DeployHelper.sol +++ b/src/rollup/DeployHelper.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.0; import {IInbox} from "../bridge/IInbox.sol"; +import {IInboxBase} from "../bridge/IInboxBase.sol"; /// @notice Helper contract for deploying some keyless deployment to Arbitrum using delayed inbox contract DeployHelper { @@ -13,33 +14,40 @@ contract DeployHelper { // Nick's CREATE2 Deterministic Deployment Proxy // https://github.com/Arachnid/deterministic-deployment-proxy address public constant NICK_CREATE2_DEPLOYER = 0x3fAB184622Dc19b6109349B94811493BF2a45362; + uint256 public constant NICK_CREATE2_VALUE = 0.01 ether; bytes public constant NICK_CREATE2_PAYLOAD = hex"04f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; // ERC-2470 Singleton Factory // https://eips.ethereum.org/EIPS/eip-2470 address public constant ERC2470_DEPLOYER = 0xBb6e024b9cFFACB947A71991E386681B1Cd1477D; + uint256 public constant ERC2470_VALUE = 0.0247 ether; bytes public constant ERC2470_PAYLOAD = hex"04f9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b83247000822470"; // Zoltu's CREATE2 Deterministic Deployment Proxy // https://github.com/Zoltu/deterministic-deployment-proxy address public constant ZOLTU_CREATE2_DEPLOYER = 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1; + uint256 public constant ZOLTU_VALUE = 0.01 ether; bytes public constant ZOLTU_CREATE2_PAYLOAD = hex"04f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; // ERC-1820: Pseudo-introspection Registry Contract // https://eips.ethereum.org/EIPS/eip-1820 address public constant ERC1820_DEPLOYER = 0xa990077c3205cbDf861e17Fa532eeB069cE9fF96; + uint256 public constant ERC1820_VALUE = 0.08 ether; bytes public constant ERC1820_PAYLOAD = hex"04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820"; uint256 internal constant GASLIMIT = 100_000; uint256 internal constant MAXFEEPERGAS = 1_000_000_000; - function _fundAndDeploy(IInbox inbox, uint256 _value, address _l2Address, bytes memory payload) - internal - { + function _fundAndDeploy( + IInbox inbox, + uint256 _value, + address _l2Address, + bytes memory payload + ) internal { uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); inbox.createRetryableTicket{value: _value + submissionCost + GASLIMIT * MAXFEEPERGAS}({ to: _l2Address, @@ -57,11 +65,22 @@ contract DeployHelper { function perform(address _inbox) external payable { IInbox inbox = IInbox(_inbox); - _fundAndDeploy(inbox, 0.01 ether, NICK_CREATE2_DEPLOYER, NICK_CREATE2_PAYLOAD); - _fundAndDeploy(inbox, 0.0247 ether, ERC2470_DEPLOYER, ERC2470_PAYLOAD); - _fundAndDeploy(inbox, 0.01 ether, ZOLTU_CREATE2_DEPLOYER, ZOLTU_CREATE2_PAYLOAD); - _fundAndDeploy(inbox, 0.08 ether, ERC1820_DEPLOYER, ERC1820_PAYLOAD); + _fundAndDeploy(inbox, NICK_CREATE2_VALUE, NICK_CREATE2_DEPLOYER, NICK_CREATE2_PAYLOAD); + _fundAndDeploy(inbox, ERC2470_VALUE, ERC2470_DEPLOYER, ERC2470_PAYLOAD); + _fundAndDeploy(inbox, ZOLTU_VALUE, ZOLTU_CREATE2_DEPLOYER, ZOLTU_CREATE2_PAYLOAD); + _fundAndDeploy(inbox, ERC1820_VALUE, ERC1820_DEPLOYER, ERC1820_PAYLOAD); payable(msg.sender).transfer(address(this).balance); } + + function getDeploymentTotalCost(IInboxBase inbox) external view returns (uint256) { + uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); + return + NICK_CREATE2_VALUE + + ERC2470_VALUE + + ZOLTU_VALUE + + ERC1820_VALUE + + 4 * + (submissionCost + GASLIMIT * MAXFEEPERGAS); + } } diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 501581a7..fb6d00cc 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -11,6 +11,7 @@ import "@offchainlabs/upgrade-executor/src/IUpgradeExecutor.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; +import {DeployHelper} from "./DeployHelper.sol"; contract RollupCreator is Ownable { event RollupCreated( @@ -39,6 +40,8 @@ contract RollupCreator is Ownable { address public validatorUtils; address public validatorWalletCreator; + DeployHelper public l2FactoriesDeployer; + struct BridgeContracts { IBridge bridge; ISequencerInbox sequencerInbox; @@ -49,6 +52,9 @@ contract RollupCreator is Ownable { constructor() Ownable() {} + // creator receives back excess fees (for deploying L2 factories) so it can refund the caller + receive() external payable {} + function setTemplates( BridgeCreator _bridgeCreator, IOneStepProofEntry _osp, @@ -57,7 +63,8 @@ contract RollupCreator is Ownable { IRollupUser _rollupUserLogic, IUpgradeExecutor _upgradeExecutorLogic, address _validatorUtils, - address _validatorWalletCreator + address _validatorWalletCreator, + DeployHelper _l2FactoriesDeployer ) external onlyOwner { bridgeCreator = _bridgeCreator; osp = _osp; @@ -67,11 +74,12 @@ contract RollupCreator is Ownable { upgradeExecutorLogic = _upgradeExecutorLogic; validatorUtils = _validatorUtils; validatorWalletCreator = _validatorWalletCreator; + l2FactoriesDeployer = _l2FactoriesDeployer; emit TemplatesUpdated(); } /** - * @notice Create a new rollup + * @notice Create a new rollup and deploy L2 factories via retryable tickets * @dev After this setup: * @dev - Rollup should be the owner of bridge * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin @@ -89,22 +97,36 @@ contract RollupCreator is Ownable { address _batchPoster, address[] calldata _validators, address _nativeToken - ) external returns (address) { + ) external payable returns (address) { + return createRollup(config, _batchPoster, _validators, _nativeToken, true); + } + + /** + * @notice Create a new rollup + * @dev After this setup: + * @dev - Rollup should be the owner of bridge + * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin + * @dev - RollupOwner should be the owner of Rollup + * @dev - Bridge should have a single inbox and outbox + * @dev - Validators and batch poster should be set if provided + * @param config The configuration for the rollup + * @param _batchPoster The address of the batch poster, not used when set to zero address + * @param _validators The list of validator addresses, not used when set to empty list + * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided + * @param _deployL2Factories Wether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. + * @return The address of the newly created rollup + */ + function createRollup( + Config memory config, + address _batchPoster, + address[] calldata _validators, + address _nativeToken, + bool _deployL2Factories + ) public payable returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); // deploy and init upgrade executor - IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( - address( - new TransparentUpgradeableProxy( - address(upgradeExecutorLogic), - address(proxyAdmin), - bytes("") - ) - ) - ); - address[] memory executors = new address[](1); - executors[0] = config.owner; - upgradeExecutor.initialize(address(upgradeExecutor), executors); + address upgradeExecutor = _deployUpgradeExecutor(config.owner, proxyAdmin); // Create the rollup proxy to figure out the address and initialize it later RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); @@ -176,6 +198,10 @@ contract RollupCreator is Ownable { IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); + if (_deployL2Factories) { + _deployDeterministicFactoriesUsingEth(address(bridgeContracts.inbox)); + } + emit RollupCreated( address(rollup), _nativeToken, @@ -192,4 +218,36 @@ contract RollupCreator is Ownable { ); return address(rollup); } + + function _deployUpgradeExecutor(address rollupOwner, ProxyAdmin proxyAdmin) + internal + returns (address) + { + IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( + address( + new TransparentUpgradeableProxy( + address(upgradeExecutorLogic), + address(proxyAdmin), + bytes("") + ) + ) + ); + address[] memory executors = new address[](1); + executors[0] = rollupOwner; + upgradeExecutor.initialize(address(upgradeExecutor), executors); + + return address(upgradeExecutor); + } + + function _deployDeterministicFactoriesUsingEth(address inbox) internal { + // we need to fund 4 retryable tickets + uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost(IInbox(inbox)); + + // perform deployment + l2FactoriesDeployer.perform{value: cost}(inbox); + + // refund the caller + (bool sent, ) = msg.sender.call{value: address(this).balance}(""); + require(sent, "Refund failed"); + } } diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index e777d788..d12cd96b 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -15,6 +15,7 @@ import "../../src/osp/OneStepProverMath.sol"; import "../../src/osp/OneStepProverHostIo.sol"; import "../../src/osp/OneStepProofEntry.sol"; import "../../src/mocks/UpgradeExecutorMock.sol"; +import "../../src/rollup/DeployHelper.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -25,6 +26,7 @@ contract RollupCreatorTest is Test { address public deployer = makeAddr("deployer"); IRollupAdmin public rollupAdmin; IRollupUser public rollupUser; + DeployHelper public deployHelper; /* solhint-disable func-name-mixedcase */ @@ -32,6 +34,7 @@ contract RollupCreatorTest is Test { //// deploy rollup creator and set templates vm.startPrank(deployer); rollupCreator = new RollupCreator(); + deployHelper = new DeployHelper(); // deploy BridgeCreators BridgeCreator bridgeCreator = new BridgeCreator(); @@ -57,7 +60,8 @@ contract RollupCreatorTest is Test { _rollupUser, upgradeExecutorLogic, address(new ValidatorUtils()), - address(new ValidatorWalletCreator()) + address(new ValidatorWalletCreator()), + deployHelper ); vm.stopPrank(); @@ -83,13 +87,20 @@ contract RollupCreatorTest is Test { sequencerInboxMaxTimeVariation: timeVars }); + // prepare funds + uint256 factoryDeploymentFunds = 1 ether; + vm.deal(deployer, factoryDeploymentFunds); + uint256 balanceBefore = deployer.balance; + /// deploy rollup address batchPoster = makeAddr("batch poster"); address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = - rollupCreator.createRollup(config, batchPoster, validators, address(0)); + + address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( + config, batchPoster, validators, address(0) + ); vm.stopPrank(); @@ -161,9 +172,7 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), - upgradeExecutorExpectedAddress, - "Invalid rollup owner" + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -172,16 +181,18 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable( - upgradeExecutorExpectedAddress - ); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), - "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); + + // check funds are refunded + uint256 balanceAfter = deployer.balance; + uint256 factoryDeploymentCost = deployHelper.getDeploymentTotalCost(rollup.inbox()); + assertEq(balanceBefore - balanceAfter, factoryDeploymentCost, "Invalid balance"); } - function test_createErc20Rollup() public { + function test_createErc20Rollup() private { vm.startPrank(deployer); address nativeToken = address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); @@ -286,9 +297,7 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), - upgradeExecutorExpectedAddress, - "Invalid rollup owner" + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -297,12 +306,9 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable( - upgradeExecutorExpectedAddress - ); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), - "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); } @@ -310,12 +316,8 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -330,16 +332,17 @@ contract RollupCreatorTest is Test { sequencerInboxMaxTimeVariation: timeVars }); + // prepare funds + uint256 factoryDeploymentFunds = 0.13 ether; + vm.deal(deployer, factoryDeploymentFunds); + /// deploy rollup address batchPoster = makeAddr("batch poster"); address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, - batchPoster, - validators, - address(0) + address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( + config, batchPoster, validators, address(0) ); vm.stopPrank(); @@ -348,16 +351,12 @@ contract RollupCreatorTest is Test { RollupCore rollup = RollupCore(rollupAddress); address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); - IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( - computeCreateAddress(address(rollupCreator), 2) - ); + IUpgradeExecutor upgradeExecutor = + IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( - ProxyUpgradeAction.perform.selector, - address(proxyAdmin), - inbox, - address(newLogicImpl) + ProxyUpgradeAction.perform.selector, address(proxyAdmin), inbox, address(newLogicImpl) ); address upgradeAction = address(new ProxyUpgradeAction()); @@ -416,11 +415,7 @@ contract RollupCreatorTest is Test { } contract ProxyUpgradeAction { - function perform( - address admin, - address payable target, - address newLogic - ) public payable { + function perform(address admin, address payable target, address newLogic) public payable { ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic); } } From 45ce78d33ddc1855478ca7c46481d209705c45f7 Mon Sep 17 00:00:00 2001 From: gzeon Date: Wed, 6 Sep 2023 03:31:32 +0800 Subject: [PATCH 106/176] feat: configurable maxDataSize --- src/bridge/Bridge.sol | 6 +++++- src/bridge/IBridge.sol | 4 +++- src/bridge/Inbox.sol | 9 ++++----- src/bridge/SequencerInbox.sol | 4 ++-- src/libraries/Constants.sol | 3 --- src/mocks/BridgeStub.sol | 4 +++- src/rollup/BridgeCreator.sol | 5 +++-- src/rollup/Config.sol | 1 + src/rollup/RollupCreator.sol | 5 +++-- src/test-helpers/BridgeTester.sol | 5 ++++- test/contract/arbRollup.spec.ts | 1 + test/storage/Bridge.dot | 2 +- 12 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/bridge/Bridge.sol b/src/bridge/Bridge.sol index 31b41554..147aff04 100644 --- a/src/bridge/Bridge.sol +++ b/src/bridge/Bridge.sol @@ -56,11 +56,15 @@ contract Bridge is Initializable, DelegateCallAware, IBridge { uint256 public override sequencerReportedSubMessageCount; + // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving + uint256 public maxDataSize; + address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - function initialize(IOwnable rollup_) external initializer onlyDelegated { + function initialize(IOwnable rollup_, uint256 maxDataSize_) external initializer onlyDelegated { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; + maxDataSize = maxDataSize_; } modifier onlyRollupOrOwner() { diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index f1fff13c..5571b209 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -75,6 +75,8 @@ interface IBridge { function sequencerMessageCount() external view returns (uint256); + function maxDataSize() external view returns (uint256); + // ---------- onlySequencerInbox functions ---------- function enqueueSequencerMessage( @@ -111,5 +113,5 @@ interface IBridge { // ---------- initializer ---------- - function initialize(IOwnable rollup_) external; + function initialize(IOwnable rollup_, uint256 maxDataSize_) external; } diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index 9e718b66..30fee17c 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -35,7 +35,6 @@ import { L2MessageType_unsignedEOATx, L2MessageType_unsignedContractTx } from "../libraries/MessageTypes.sol"; -import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; import "../precompiles/ArbSys.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; @@ -136,8 +135,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { if (_chainIdChanged()) revert L1Forked(); // solhint-disable-next-line avoid-tx-origin if (msg.sender != tx.origin) revert NotOrigin(); - if (messageData.length > MAX_DATA_SIZE) - revert DataTooLarge(messageData.length, MAX_DATA_SIZE); + if (messageData.length > bridge.maxDataSize()) + revert DataTooLarge(messageData.length, bridge.maxDataSize()); uint256 msgNum = deliverToBridge(L2_MSG, msg.sender, keccak256(messageData)); emit InboxMessageDeliveredFromOrigin(msgNum); return msgNum; @@ -532,8 +531,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { address _sender, bytes memory _messageData ) internal returns (uint256) { - if (_messageData.length > MAX_DATA_SIZE) - revert DataTooLarge(_messageData.length, MAX_DATA_SIZE); + if (_messageData.length > bridge.maxDataSize()) + revert DataTooLarge(_messageData.length, bridge.maxDataSize()); uint256 msgNum = deliverToBridge(_kind, _sender, keccak256(_messageData)); emit InboxMessageDelivered(msgNum, _messageData); return msgNum; diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 2ba25c16..cb36f944 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -34,7 +34,6 @@ import {L1MessageType_batchPostingReport} from "../libraries/MessageTypes.sol"; import {GasRefundEnabled, IGasRefunder} from "../libraries/IGasRefunder.sol"; import "../libraries/DelegateCallAware.sol"; import "../libraries/ArbitrumChecker.sol"; -import {MAX_DATA_SIZE} from "../libraries/Constants.sol"; /** * @title Accepts batches from the sequencer and adds them to the rollup inbox. @@ -310,7 +309,8 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox modifier validateBatchData(bytes calldata data) { uint256 fullDataLen = HEADER_LENGTH + data.length; - if (fullDataLen > MAX_DATA_SIZE) revert DataTooLarge(fullDataLen, MAX_DATA_SIZE); + if (fullDataLen > bridge.maxDataSize()) + revert DataTooLarge(fullDataLen, bridge.maxDataSize()); if (data.length > 0 && (data[0] & DATA_AUTHENTICATED_FLAG) == DATA_AUTHENTICATED_FLAG) { revert DataNotAuthenticated(); } diff --git a/src/libraries/Constants.sol b/src/libraries/Constants.sol index d15bdf16..c06c6144 100644 --- a/src/libraries/Constants.sol +++ b/src/libraries/Constants.sol @@ -4,9 +4,6 @@ pragma solidity ^0.8.4; -// 90% of Geth's 128KB tx size limit, leaving ~13KB for proving -uint256 constant MAX_DATA_SIZE = 117964; - uint64 constant NO_CHAL_INDEX = 0; // Expected seconds per block in Ethereum PoS diff --git a/src/mocks/BridgeStub.sol b/src/mocks/BridgeStub.sol index d0f9e8cc..797c63a9 100644 --- a/src/mocks/BridgeStub.sol +++ b/src/mocks/BridgeStub.sol @@ -31,6 +31,8 @@ contract BridgeStub is IBridge { address public sequencerInbox; uint256 public override sequencerReportedSubMessageCount; + uint256 public maxDataSize; + function setSequencerInbox(address _sequencerInbox) external override { sequencerInbox = _sequencerInbox; emit SequencerInboxUpdated(_sequencerInbox); @@ -176,7 +178,7 @@ contract BridgeStub is IBridge { function acceptFundsFromOldBridge() external payable {} - function initialize(IOwnable) external pure { + function initialize(IOwnable, uint256) external pure { revert("NOT_IMPLEMENTED"); } } diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index 1c2b60cd..00c15aaa 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -60,7 +60,8 @@ contract BridgeCreator is Ownable { function createBridge( address adminProxy, address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ISequencerInbox.MaxTimeVariation memory maxTimeVariation, + uint256 maxDataSize ) external returns ( @@ -98,7 +99,7 @@ contract BridgeCreator is Ownable { ); } - frame.bridge.initialize(IOwnable(rollup)); + frame.bridge.initialize(IOwnable(rollup), maxDataSize); frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); frame.rollupEventInbox.initialize(IBridge(frame.bridge)); diff --git a/src/rollup/Config.sol b/src/rollup/Config.sol index 269ecb5a..6886e8a1 100644 --- a/src/rollup/Config.sol +++ b/src/rollup/Config.sol @@ -26,6 +26,7 @@ struct Config { string chainConfig; uint64 genesisBlockNum; ISequencerInbox.MaxTimeVariation sequencerInboxMaxTimeVariation; + uint256 maxDataSize; } struct ContractDependencies { diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 93cf0bb2..b8fd1d5b 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -74,7 +74,7 @@ contract RollupCreator is Ownable { function createRollup( Config memory config, address _batchPoster, - address[] calldata _validators + address[] memory _validators ) external returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); @@ -90,7 +90,8 @@ contract RollupCreator is Ownable { ) = bridgeCreator.createBridge( address(proxyAdmin), address(rollup), - config.sequencerInboxMaxTimeVariation + config.sequencerInboxMaxTimeVariation, + config.maxDataSize ); IChallengeManager challengeManager = IChallengeManager( diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index b355c51c..36e71937 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -45,6 +45,8 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { IOwnable public rollup; address public sequencerInbox; + uint256 public maxDataSize; + modifier onlyRollupOrOwner() { if (msg.sender != address(rollup)) { address rollupOwner = rollup.owner(); @@ -68,9 +70,10 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { address private constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - function initialize(IOwnable rollup_) external initializer { + function initialize(IOwnable rollup_, uint256 maxDataSize_) external initializer { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; + maxDataSize = maxDataSize_; } function activeOutbox() public view returns (address) { diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index ba417541..ee759c60 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -99,6 +99,7 @@ async function getDefaultConfig( wasmModuleRoot: wasmModuleRoot, loserStakeEscrow: ZERO_ADDR, genesisBlockNum: 0, + maxDataSize: 117964, } } diff --git a/test/storage/Bridge.dot b/test/storage/Bridge.dot index e35ab1d8..3ce6b210 100644 --- a/test/storage/Bridge.dot +++ b/test/storage/Bridge.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) }}}"] +7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) } | { uint256: maxDataSize (32) }}}"] 1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] From 6ebc4325ead4d8a05fff6ec37339caf7842ca662 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 6 Sep 2023 09:11:52 +0200 Subject: [PATCH 107/176] Support paying for L2 factories in fee token --- src/rollup/DeployHelper.sol | 83 +++++++++++++++++++++++--------- src/rollup/RollupCreator.sol | 36 +++++++++----- test/foundry/RollupCreator.t.sol | 10 ++-- 3 files changed, 92 insertions(+), 37 deletions(-) diff --git a/src/rollup/DeployHelper.sol b/src/rollup/DeployHelper.sol index 26256f11..dabbf1fd 100644 --- a/src/rollup/DeployHelper.sol +++ b/src/rollup/DeployHelper.sol @@ -6,6 +6,8 @@ pragma solidity ^0.8.0; import {IInbox} from "../bridge/IInbox.sol"; import {IInboxBase} from "../bridge/IInboxBase.sol"; +import {IERC20Bridge} from "../bridge/IERC20Bridge.sol"; +import {IERC20Inbox} from "../bridge/ERC20Inbox.sol"; /// @notice Helper contract for deploying some keyless deployment to Arbitrum using delayed inbox contract DeployHelper { @@ -43,37 +45,74 @@ contract DeployHelper { uint256 internal constant MAXFEEPERGAS = 1_000_000_000; function _fundAndDeploy( - IInbox inbox, + address inbox, uint256 _value, address _l2Address, - bytes memory payload + bytes memory payload, + bool _isUsingFeeToken ) internal { - uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); - inbox.createRetryableTicket{value: _value + submissionCost + GASLIMIT * MAXFEEPERGAS}({ - to: _l2Address, - l2CallValue: _value, - maxSubmissionCost: submissionCost, - excessFeeRefundAddress: msg.sender, - callValueRefundAddress: msg.sender, - gasLimit: GASLIMIT, - maxFeePerGas: MAXFEEPERGAS, - data: "" - }); - inbox.sendL2Message(payload); + uint256 submissionCost = IInboxBase(inbox).calculateRetryableSubmissionFee( + 0, + block.basefee + ); + uint256 feeAmount = _value + submissionCost + GASLIMIT * MAXFEEPERGAS; + + // fund the target L2 address + if (_isUsingFeeToken) { + IERC20Inbox(inbox).createRetryableTicket({ + to: _l2Address, + l2CallValue: _value, + maxSubmissionCost: submissionCost, + excessFeeRefundAddress: msg.sender, + callValueRefundAddress: msg.sender, + gasLimit: GASLIMIT, + maxFeePerGas: MAXFEEPERGAS, + tokenTotalFeeAmount: feeAmount, + data: "" + }); + } else { + IInbox(inbox).createRetryableTicket{value: feeAmount}({ + to: _l2Address, + l2CallValue: _value, + maxSubmissionCost: submissionCost, + excessFeeRefundAddress: msg.sender, + callValueRefundAddress: msg.sender, + gasLimit: GASLIMIT, + maxFeePerGas: MAXFEEPERGAS, + data: "" + }); + } + // send L2 msg to execute deployment transaction + IInboxBase(inbox).sendL2Message(payload); } - function perform(address _inbox) external payable { - IInbox inbox = IInbox(_inbox); + function perform(address _inbox, address _nativeToken) external payable { + bool isUsingFeeToken = _nativeToken != address(0); - _fundAndDeploy(inbox, NICK_CREATE2_VALUE, NICK_CREATE2_DEPLOYER, NICK_CREATE2_PAYLOAD); - _fundAndDeploy(inbox, ERC2470_VALUE, ERC2470_DEPLOYER, ERC2470_PAYLOAD); - _fundAndDeploy(inbox, ZOLTU_VALUE, ZOLTU_CREATE2_DEPLOYER, ZOLTU_CREATE2_PAYLOAD); - _fundAndDeploy(inbox, ERC1820_VALUE, ERC1820_DEPLOYER, ERC1820_PAYLOAD); + _fundAndDeploy( + _inbox, + NICK_CREATE2_VALUE, + NICK_CREATE2_DEPLOYER, + NICK_CREATE2_PAYLOAD, + isUsingFeeToken + ); + _fundAndDeploy(_inbox, ERC2470_VALUE, ERC2470_DEPLOYER, ERC2470_PAYLOAD, isUsingFeeToken); + _fundAndDeploy( + _inbox, + ZOLTU_VALUE, + ZOLTU_CREATE2_DEPLOYER, + ZOLTU_CREATE2_PAYLOAD, + isUsingFeeToken + ); + _fundAndDeploy(_inbox, ERC1820_VALUE, ERC1820_DEPLOYER, ERC1820_PAYLOAD, isUsingFeeToken); - payable(msg.sender).transfer(address(this).balance); + // if paying with ETH refund the caller + if (!isUsingFeeToken) { + payable(msg.sender).transfer(address(this).balance); + } } - function getDeploymentTotalCost(IInboxBase inbox) external view returns (uint256) { + function getDeploymentTotalCost(IInboxBase inbox) public view returns (uint256) { uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); return NICK_CREATE2_VALUE + diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index fb6d00cc..72736b9f 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -12,8 +12,11 @@ import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import {DeployHelper} from "./DeployHelper.sol"; +import {SafeERC20, IERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract RollupCreator is Ownable { + using SafeERC20 for IERC20; + event RollupCreated( address indexed rollupAddress, address indexed nativeToken, @@ -113,7 +116,7 @@ contract RollupCreator is Ownable { * @param _batchPoster The address of the batch poster, not used when set to zero address * @param _validators The list of validator addresses, not used when set to empty list * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided - * @param _deployL2Factories Wether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. + * @param _deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. * @return The address of the newly created rollup */ function createRollup( @@ -121,7 +124,7 @@ contract RollupCreator is Ownable { address _batchPoster, address[] calldata _validators, address _nativeToken, - bool _deployL2Factories + bool _deployFactoriesToL2 ) public payable returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); @@ -198,8 +201,8 @@ contract RollupCreator is Ownable { IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); - if (_deployL2Factories) { - _deployDeterministicFactoriesUsingEth(address(bridgeContracts.inbox)); + if (_deployFactoriesToL2) { + _deployFactories(address(bridgeContracts.inbox), _nativeToken); } emit RollupCreated( @@ -239,15 +242,24 @@ contract RollupCreator is Ownable { return address(upgradeExecutor); } - function _deployDeterministicFactoriesUsingEth(address inbox) internal { - // we need to fund 4 retryable tickets - uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost(IInbox(inbox)); + function _deployFactories(address _inbox, address _nativeToken) internal { + if (_nativeToken == address(0)) { + // we need to fund 4 retryable tickets + uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox)); + + // do it + l2FactoriesDeployer.perform{value: cost}(_inbox, _nativeToken); - // perform deployment - l2FactoriesDeployer.perform{value: cost}(inbox); + // refund the caller + (bool sent, ) = msg.sender.call{value: address(this).balance}(""); + require(sent, "Refund failed"); + } else { + // Transfer fee token amount needed to pay for retryable fees to the inbox. + uint256 totalFee = l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox)); + IERC20(_nativeToken).safeTransferFrom(msg.sender, _inbox, totalFee); - // refund the caller - (bool sent, ) = msg.sender.call{value: address(this).balance}(""); - require(sent, "Refund failed"); + // do it + l2FactoriesDeployer.perform(_inbox, _nativeToken); + } } } diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index d12cd96b..4c9ef582 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -192,10 +192,10 @@ contract RollupCreatorTest is Test { assertEq(balanceBefore - balanceAfter, factoryDeploymentCost, "Invalid balance"); } - function test_createErc20Rollup() private { + function test_createErc20Rollup() public { vm.startPrank(deployer); address nativeToken = - address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); + address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000 ether, deployer)); // deployment params ISequencerInbox.MaxTimeVariation memory timeVars = @@ -214,6 +214,10 @@ contract RollupCreatorTest is Test { sequencerInboxMaxTimeVariation: timeVars }); + // approve fee token to pay for deployment of L2 factories + uint256 expectedCost = 0.1247 ether + 4 * (100_000 * 1_000_000_000); + IERC20(nativeToken).approve(address(rollupCreator), expectedCost); + /// deploy rollup address batchPoster = makeAddr("batch poster"); address[] memory validators = new address[](2); @@ -333,7 +337,7 @@ contract RollupCreatorTest is Test { }); // prepare funds - uint256 factoryDeploymentFunds = 0.13 ether; + uint256 factoryDeploymentFunds = 0.2 ether; vm.deal(deployer, factoryDeploymentFunds); /// deploy rollup From 20f8873997a0507cd5b03a9e66062e3ed8df561d Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 6 Sep 2023 09:56:11 +0200 Subject: [PATCH 108/176] Fix hardhat test --- test/contract/arbRollup.spec.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 8d0ad375..8b2c7a35 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -25,6 +25,7 @@ import { BridgeCreator__factory, ChallengeManager, ChallengeManager__factory, + DeployHelper__factory, OneStepProofEntry__factory, OneStepProver0__factory, OneStepProverHostIo__factory, @@ -178,6 +179,11 @@ const setup = async () => { )) as RollupCreator__factory const rollupCreator = await rollupCreatorFac.deploy() + const deployHelperFac = (await ethers.getContractFactory( + 'DeployHelper' + )) as DeployHelper__factory + const deployHelper = await deployHelperFac.deploy() + await rollupCreator.setTemplates( bridgeCreator.address, oneStepProofEntry.address, @@ -186,14 +192,18 @@ const setup = async () => { rollupUserLogicTemplate.address, upgradeExecutorLogic.address, ethers.constants.AddressZero, - ethers.constants.AddressZero + ethers.constants.AddressZero, + deployHelper.address ) - const response = await rollupCreator.createRollup( + const response = await rollupCreator[ + 'createRollup((uint64,uint64,address,uint256,bytes32,address,address,uint256,string,uint64,(uint256,uint256,uint256,uint256)),address,address[],address)' + ]( await getDefaultConfig(), await sequencer.getAddress(), [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], - ethers.constants.AddressZero + ethers.constants.AddressZero, + { value: ethers.utils.parseEther('0.2') } ) const rec = await response.wait() From 45ecd6b10d8797b90504e125f6fbdeda52d2e04f Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Wed, 6 Sep 2023 11:27:27 +0200 Subject: [PATCH 109/176] Update deployment scripts --- scripts/createERC20Rollup.ts | 9 +++------ scripts/deployment.ts | 9 ++++++++- scripts/rollupCreation.ts | 32 ++++++++++++++++++++++++++------ src/test-helpers/TestToken.sol | 16 ++++++++++++++++ test/foundry/RollupCreator.t.sol | 2 +- 5 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/test-helpers/TestToken.sol diff --git a/scripts/createERC20Rollup.ts b/scripts/createERC20Rollup.ts index 842eb014..604fa17e 100644 --- a/scripts/createERC20Rollup.ts +++ b/scripts/createERC20Rollup.ts @@ -1,15 +1,12 @@ import { ethers } from 'hardhat' import '@nomiclabs/hardhat-ethers' import { Signer } from 'ethers' -import { ERC20PresetFixedSupply__factory } from '../build/types/factories/@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply__factory' import { createRollup } from './rollupCreation' +import { TestToken__factory } from '../build/types' async function deployERC20Token(deployer: Signer): Promise { - const factory = await new ERC20PresetFixedSupply__factory(deployer).deploy( - 'FeeToken', - 'FEE', - ethers.utils.parseEther('1000000000'), - await deployer.getAddress() + const factory = await new TestToken__factory(deployer).deploy( + ethers.utils.parseEther('1000000000') ) const feeToken = await factory.deployed() diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 7097c15b..bad8e0b5 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -6,6 +6,7 @@ import { abi as UpgradeExecutorABI, bytecode as UpgradeExecutorBytecode, } from '@offchainlabs/upgrade-executor/build/contracts/src/UpgradeExecutor.sol/UpgradeExecutor.json' +import { sleep } from './testSetup' // Define a verification function async function verifyContract( @@ -95,6 +96,7 @@ async function deployAllContracts( signer ) const rollupCreator = await deployContract('RollupCreator', signer) + const deployHelper = await deployContract('DeployHelper', signer) return { bridgeCreator, prover0, @@ -109,6 +111,7 @@ async function deployAllContracts( validatorUtils, validatorWalletCreator, rollupCreator, + deployHelper, } } @@ -129,7 +132,8 @@ async function main() { contracts.rollupUser.address, contracts.upgradeExecutor.address, contracts.validatorUtils.address, - contracts.validatorWalletCreator.address + contracts.validatorWalletCreator.address, + contracts.deployHelper.address ) console.log('Template is set on the Rollup Creator') @@ -137,6 +141,9 @@ async function main() { const { bridge, sequencerInbox, inbox, outbox } = await contracts.bridgeCreator.ethBasedTemplates() + console.log('Wait a minute before starting contract verification') + await sleep(60 * 1000) + console.log(`"bridge implementation contract" created at address:`, bridge) await verifyContract('Bridge', bridge, [], 'src/bridge/Bridge.sol:Bridge') console.log( diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 9eadb476..dab5b06a 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -3,6 +3,9 @@ import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' import { config } from './config' +import { BigNumber } from 'ethers' +import { IERC20__factory } from '../build/types' +import { sleep } from './testSetup' interface RollupCreatedEvent { event: string @@ -54,14 +57,29 @@ export async function createRollup(feeToken?: string) { for (let i = 0; i < config.validators.length; i++) { vals.push(true) } + + //// funds for deploying L2 factories + + // 0.13 ETH is enough to deploy L2 factories via retryables. Excess is refunded + let feeCost = ethers.utils.parseEther('0.13') + if (feeToken != ethers.constants.AddressZero) { + // in case fees are paid via fee token, then approve rollup cretor to spend required amount + await ( + await IERC20__factory.connect(feeToken, signer).approve( + rollupCreator.address, + feeCost + ) + ).wait() + feeCost = BigNumber.from(0) + } + // Call the createRollup function console.log('Calling createRollup to generate a new rollup ...') - const createRollupTx = await rollupCreator.createRollup( - config.rollupConfig, - config.batchPoster, - config.validators, - feeToken - ) + const createRollupTx = await rollupCreator[ + 'createRollup((uint64,uint64,address,uint256,bytes32,address,address,uint256,string,uint64,(uint256,uint256,uint256,uint256)),address,address[],address)' + ](config.rollupConfig, config.batchPoster, config.validators, feeToken, { + value: feeCost, + }) const createRollupReceipt = await createRollupTx.wait() const rollupCreatedEvent = createRollupReceipt.events?.find( @@ -86,6 +104,8 @@ export async function createRollup(feeToken?: string) { console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") console.log('RollupProxy Contract created at address:', rollupAddress) + console.log('Wait a minute before starting the contract verification') + await sleep(2 * 60 * 1000) console.log( `Attempting to verify Rollup contract at address ${rollupAddress}...` ) diff --git a/src/test-helpers/TestToken.sol b/src/test-helpers/TestToken.sol new file mode 100644 index 00000000..9a8cb39b --- /dev/null +++ b/src/test-helpers/TestToken.sol @@ -0,0 +1,16 @@ +// Copyright 2021-2022, Offchain Labs, Inc. +// For license information, see https://github.com/nitro/blob/master/LICENSE +// SPDX-License-Identifier: BUSL-1.1 + +pragma solidity ^0.8.0; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +/** + * Basic ERC20 token + */ +contract TestToken is ERC20 { + constructor(uint256 initialSupply) ERC20("TestToken", "TT") { + _mint(msg.sender, initialSupply); + } +} diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 4c9ef582..1cd4792e 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -215,7 +215,7 @@ contract RollupCreatorTest is Test { }); // approve fee token to pay for deployment of L2 factories - uint256 expectedCost = 0.1247 ether + 4 * (100_000 * 1_000_000_000); + uint256 expectedCost = 0.1247 ether + 4 * (1400 * 100_000_000_000 + 100_000 * 1_000_000_000); IERC20(nativeToken).approve(address(rollupCreator), expectedCost); /// deploy rollup From 07a0513e062eeb551298106520be1856b05d6508 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 7 Sep 2023 00:19:11 +0800 Subject: [PATCH 110/176] refactor: use immutable to store maxDataSize --- deploy/SequencerInbox.js | 2 +- deploy/SequencerInboxStubCreator.js | 2 +- scripts/config.ts.example | 4 ++++ scripts/deployment.ts | 5 ++++- scripts/rollupCreation.ts | 5 +++-- src/bridge/Bridge.sol | 6 +----- src/bridge/IBridge.sol | 4 +--- src/bridge/IInbox.sol | 2 ++ src/bridge/ISequencerInbox.sol | 2 ++ src/bridge/Inbox.sol | 13 +++++++++---- src/bridge/SequencerInbox.sol | 12 ++++++++---- src/mocks/BridgeStub.sol | 4 +--- src/mocks/InboxStub.sol | 5 +++++ src/mocks/SequencerInboxStub.sol | 5 +++-- src/rollup/BridgeCreator.sol | 11 +++++------ src/rollup/Config.sol | 1 - src/rollup/RollupCreator.sol | 16 +++++++++++++--- src/test-helpers/BridgeTester.sol | 5 +---- test/contract/arbRollup.spec.ts | 3 +-- test/storage/Bridge.dot | 2 +- 20 files changed, 66 insertions(+), 43 deletions(-) diff --git a/deploy/SequencerInbox.js b/deploy/SequencerInbox.js index 4c9ef912..b7cff199 100644 --- a/deploy/SequencerInbox.js +++ b/deploy/SequencerInbox.js @@ -3,7 +3,7 @@ module.exports = async hre => { const { deploy } = deployments const { deployer } = await getNamedAccounts() - await deploy('SequencerInbox', { from: deployer, args: [] }) + await deploy('SequencerInbox', { from: deployer, args: [117964] }) } module.exports.tags = ['SequencerInbox'] diff --git a/deploy/SequencerInboxStubCreator.js b/deploy/SequencerInboxStubCreator.js index 72ee8202..4748a924 100644 --- a/deploy/SequencerInboxStubCreator.js +++ b/deploy/SequencerInboxStubCreator.js @@ -12,7 +12,7 @@ module.exports = async hre => { } await deploy('SequencerInboxStub', { from: deployer, - args: [bridge.address, deployer, maxTime], + args: [bridge.address, deployer, maxTime, 117964], }) } diff --git a/scripts/config.ts.example b/scripts/config.ts.example index 7f911710..cf5d8704 100644 --- a/scripts/config.ts.example +++ b/scripts/config.ts.example @@ -1,5 +1,9 @@ import { ethers } from 'ethers' +// 90% of Geth's 128KB tx size limit, leaving ~13KB for proving +// This need to be adjusted for Orbit chains +export const maxDataSize = 117964 + export const config = { rollupConfig: { confirmPeriodBlocks: ethers.BigNumber.from('45818'), diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 9a5bf94f..a43499d7 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -2,6 +2,7 @@ import { ethers } from 'hardhat' import { ContractFactory, Contract } from 'ethers' import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' +import { maxDataSize } from './config' // Define a verification function async function verifyContract( @@ -60,7 +61,9 @@ async function deployContract( async function deployAllContracts( signer: any ): Promise> { - const bridgeCreator = await deployContract('BridgeCreator', signer) + const bridgeCreator = await deployContract('BridgeCreator', signer, [ + maxDataSize, + ]) const prover0 = await deployContract('OneStepProver0', signer) const proverMem = await deployContract('OneStepProverMemory', signer) const proverMath = await deployContract('OneStepProverMath', signer) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 2c9af885..62a148f7 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -2,7 +2,7 @@ import { ethers } from 'hardhat' import '@nomiclabs/hardhat-ethers' import { run } from 'hardhat' import { abi as rollupCreatorAbi } from '../build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json' -import { config } from './config' +import { config, maxDataSize } from './config' interface RollupCreatedEvent { event: string @@ -55,7 +55,8 @@ async function main() { const createRollupTx = await rollupCreator.createRollup( config.rollupConfig, config.batchPoster, - config.validators + config.validators, + maxDataSize ) const createRollupReceipt = await createRollupTx.wait() diff --git a/src/bridge/Bridge.sol b/src/bridge/Bridge.sol index 147aff04..31b41554 100644 --- a/src/bridge/Bridge.sol +++ b/src/bridge/Bridge.sol @@ -56,15 +56,11 @@ contract Bridge is Initializable, DelegateCallAware, IBridge { uint256 public override sequencerReportedSubMessageCount; - // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving - uint256 public maxDataSize; - address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - function initialize(IOwnable rollup_, uint256 maxDataSize_) external initializer onlyDelegated { + function initialize(IOwnable rollup_) external initializer onlyDelegated { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; - maxDataSize = maxDataSize_; } modifier onlyRollupOrOwner() { diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 5571b209..f1fff13c 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -75,8 +75,6 @@ interface IBridge { function sequencerMessageCount() external view returns (uint256); - function maxDataSize() external view returns (uint256); - // ---------- onlySequencerInbox functions ---------- function enqueueSequencerMessage( @@ -113,5 +111,5 @@ interface IBridge { // ---------- initializer ---------- - function initialize(IOwnable rollup_, uint256 maxDataSize_) external; + function initialize(IOwnable rollup_) external; } diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index 95c3128c..bc97f64e 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -14,6 +14,8 @@ interface IInbox is IDelayedMessageProvider { function sequencerInbox() external view returns (ISequencerInbox); + function maxDataSize() external view returns (uint256); + /** * @notice Send a generic L2 message to the chain * @dev This method is an optimization to avoid having to emit the entirety of the messageData in a log. Instead validators are expected to be able to parse the data from the transaction's input diff --git a/src/bridge/ISequencerInbox.sol b/src/bridge/ISequencerInbox.sol index 5f19471e..b4fadddb 100644 --- a/src/bridge/ISequencerInbox.sol +++ b/src/bridge/ISequencerInbox.sol @@ -71,6 +71,8 @@ interface ISequencerInbox is IDelayedMessageProvider { function isSequencer(address) external view returns (bool); + function maxDataSize() external view returns (uint256); + struct DasKeySetInfo { bool isValidKeyset; uint64 creationBlock; diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index 30fee17c..c4b84f64 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -95,8 +95,14 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { _; } + // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving + uint256 public immutable maxDataSize; uint256 internal immutable deployTimeChainId = block.chainid; + constructor(uint256 _maxDataSize) { + maxDataSize = _maxDataSize; + } + function _chainIdChanged() internal view returns (bool) { return deployTimeChainId != block.chainid; } @@ -135,8 +141,7 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { if (_chainIdChanged()) revert L1Forked(); // solhint-disable-next-line avoid-tx-origin if (msg.sender != tx.origin) revert NotOrigin(); - if (messageData.length > bridge.maxDataSize()) - revert DataTooLarge(messageData.length, bridge.maxDataSize()); + if (messageData.length > maxDataSize) revert DataTooLarge(messageData.length, maxDataSize); uint256 msgNum = deliverToBridge(L2_MSG, msg.sender, keccak256(messageData)); emit InboxMessageDeliveredFromOrigin(msgNum); return msgNum; @@ -531,8 +536,8 @@ contract Inbox is DelegateCallAware, PausableUpgradeable, IInbox { address _sender, bytes memory _messageData ) internal returns (uint256) { - if (_messageData.length > bridge.maxDataSize()) - revert DataTooLarge(_messageData.length, bridge.maxDataSize()); + if (_messageData.length > maxDataSize) + revert DataTooLarge(_messageData.length, maxDataSize); uint256 msgNum = deliverToBridge(_kind, _sender, keccak256(_messageData)); emit InboxMessageDelivered(msgNum, _messageData); return msgNum; diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index cb36f944..3fa44a94 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -64,13 +64,18 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox _; } - uint256 internal immutable deployTimeChainId = block.chainid; - mapping(address => bool) public isSequencer; + // On L1 this should be set to 117964: 90% of Geth's 128KB tx size limit, leaving ~13KB for proving + uint256 public immutable maxDataSize; + uint256 internal immutable deployTimeChainId = block.chainid; // If the chain this SequencerInbox is deployed on is an Arbitrum chain. bool internal immutable hostChainIsArbitrum = ArbitrumChecker.runningOnArbitrum(); + constructor(uint256 _maxDataSize) { + maxDataSize = _maxDataSize; + } + function _chainIdChanged() internal view returns (bool) { return deployTimeChainId != block.chainid; } @@ -309,8 +314,7 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox modifier validateBatchData(bytes calldata data) { uint256 fullDataLen = HEADER_LENGTH + data.length; - if (fullDataLen > bridge.maxDataSize()) - revert DataTooLarge(fullDataLen, bridge.maxDataSize()); + if (fullDataLen > maxDataSize) revert DataTooLarge(fullDataLen, maxDataSize); if (data.length > 0 && (data[0] & DATA_AUTHENTICATED_FLAG) == DATA_AUTHENTICATED_FLAG) { revert DataNotAuthenticated(); } diff --git a/src/mocks/BridgeStub.sol b/src/mocks/BridgeStub.sol index 797c63a9..d0f9e8cc 100644 --- a/src/mocks/BridgeStub.sol +++ b/src/mocks/BridgeStub.sol @@ -31,8 +31,6 @@ contract BridgeStub is IBridge { address public sequencerInbox; uint256 public override sequencerReportedSubMessageCount; - uint256 public maxDataSize; - function setSequencerInbox(address _sequencerInbox) external override { sequencerInbox = _sequencerInbox; emit SequencerInboxUpdated(_sequencerInbox); @@ -178,7 +176,7 @@ contract BridgeStub is IBridge { function acceptFundsFromOldBridge() external payable {} - function initialize(IOwnable, uint256) external pure { + function initialize(IOwnable) external pure { revert("NOT_IMPLEMENTED"); } } diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index a31f33ef..ab26c49e 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -22,6 +22,11 @@ contract InboxStub is IInbox { ISequencerInbox public override sequencerInbox; bool public paused; + uint256 public immutable maxDataSize; + + constructor() { + maxDataSize = 117964; + } function pause() external pure { revert("NOT IMPLEMENTED"); diff --git a/src/mocks/SequencerInboxStub.sol b/src/mocks/SequencerInboxStub.sol index c476043b..867064b9 100644 --- a/src/mocks/SequencerInboxStub.sol +++ b/src/mocks/SequencerInboxStub.sol @@ -11,8 +11,9 @@ contract SequencerInboxStub is SequencerInbox { constructor( IBridge bridge_, address sequencer_, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation_ - ) { + ISequencerInbox.MaxTimeVariation memory maxTimeVariation_, + uint256 maxDataSize_ + ) SequencerInbox(maxDataSize_) { bridge = bridge_; rollup = IOwnable(msg.sender); maxTimeVariation = maxTimeVariation_; diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index 00c15aaa..153bff2d 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -24,10 +24,10 @@ contract BridgeCreator is Ownable { event TemplatesUpdated(); - constructor() Ownable() { + constructor(uint256 maxDataSize) Ownable() { bridgeTemplate = new Bridge(); - sequencerInboxTemplate = new SequencerInbox(); - inboxTemplate = new Inbox(); + sequencerInboxTemplate = new SequencerInbox(maxDataSize); + inboxTemplate = new Inbox(maxDataSize); rollupEventInboxTemplate = new RollupEventInbox(); outboxTemplate = new Outbox(); } @@ -60,8 +60,7 @@ contract BridgeCreator is Ownable { function createBridge( address adminProxy, address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation, - uint256 maxDataSize + ISequencerInbox.MaxTimeVariation memory maxTimeVariation ) external returns ( @@ -99,7 +98,7 @@ contract BridgeCreator is Ownable { ); } - frame.bridge.initialize(IOwnable(rollup), maxDataSize); + frame.bridge.initialize(IOwnable(rollup)); frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); frame.rollupEventInbox.initialize(IBridge(frame.bridge)); diff --git a/src/rollup/Config.sol b/src/rollup/Config.sol index 6886e8a1..269ecb5a 100644 --- a/src/rollup/Config.sol +++ b/src/rollup/Config.sol @@ -26,7 +26,6 @@ struct Config { string chainConfig; uint64 genesisBlockNum; ISequencerInbox.MaxTimeVariation sequencerInboxMaxTimeVariation; - uint256 maxDataSize; } struct ContractDependencies { diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index b8fd1d5b..6895a6b5 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -74,8 +74,19 @@ contract RollupCreator is Ownable { function createRollup( Config memory config, address _batchPoster, - address[] memory _validators + address[] memory _validators, + uint256 maxDataSize ) external returns (address) { + // Make sure the immutable maxDataSize is as expected + require( + maxDataSize == bridgeCreator.sequencerInboxTemplate().maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require( + maxDataSize == bridgeCreator.inboxTemplate().maxDataSize(), + "I_MAX_DATA_SIZE_MISMATCH" + ); + ProxyAdmin proxyAdmin = new ProxyAdmin(); // Create the rollup proxy to figure out the address and initialize it later @@ -90,8 +101,7 @@ contract RollupCreator is Ownable { ) = bridgeCreator.createBridge( address(proxyAdmin), address(rollup), - config.sequencerInboxMaxTimeVariation, - config.maxDataSize + config.sequencerInboxMaxTimeVariation ); IChallengeManager challengeManager = IChallengeManager( diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index 36e71937..b355c51c 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -45,8 +45,6 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { IOwnable public rollup; address public sequencerInbox; - uint256 public maxDataSize; - modifier onlyRollupOrOwner() { if (msg.sender != address(rollup)) { address rollupOwner = rollup.owner(); @@ -70,10 +68,9 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge { address private constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - function initialize(IOwnable rollup_, uint256 maxDataSize_) external initializer { + function initialize(IOwnable rollup_) external initializer { _activeOutbox = EMPTY_ACTIVEOUTBOX; rollup = rollup_; - maxDataSize = maxDataSize_; } function activeOutbox() public view returns (address) { diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index ee759c60..6466305e 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -99,7 +99,6 @@ async function getDefaultConfig( wasmModuleRoot: wasmModuleRoot, loserStakeEscrow: ZERO_ADDR, genesisBlockNum: 0, - maxDataSize: 117964, } } @@ -160,7 +159,7 @@ const setup = async () => { const bridgeCreatorFac = (await ethers.getContractFactory( 'BridgeCreator' )) as BridgeCreator__factory - const bridgeCreator = await bridgeCreatorFac.deploy() + const bridgeCreator = await bridgeCreatorFac.deploy(117964) const rollupCreatorFac = (await ethers.getContractFactory( 'RollupCreator' diff --git a/test/storage/Bridge.dot b/test/storage/Bridge.dot index 3ce6b210..e35ab1d8 100644 --- a/test/storage/Bridge.dot +++ b/test/storage/Bridge.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) } | { uint256: maxDataSize (32) }}}"] +7 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): allowedOutboxesMap (32) } | { <10> address[]: allowedDelayedInboxList (32) } | { <12> address[]: allowedOutboxList (32) } | { unallocated (12) | address: _activeOutbox (20) } | { <15> bytes32[]: delayedInboxAccs (32) } | { <17> bytes32[]: sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: rollup (20) } | { unallocated (12) | address: sequencerInbox (20) } | { uint256: sequencerReportedSubMessageCount (32) }}}"] 1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] From a614c32783eb82ec782256a448211f832b692844 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 7 Sep 2023 00:21:43 +0800 Subject: [PATCH 111/176] fix: contract verification --- scripts/deployment.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index a43499d7..fccfd29f 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -139,12 +139,12 @@ async function main() { `"sequencerInbox implementation contract" created at address:`, sequencerInboxAddress ) - await verifyContract('SequencerInbox', sequencerInboxAddress, []) + await verifyContract('SequencerInbox', sequencerInboxAddress, [maxDataSize]) console.log( `"inbox implementation contract" created at address:`, inboxAddress ) - await verifyContract('Inbox', inboxAddress, []) + await verifyContract('Inbox', inboxAddress, [maxDataSize]) console.log( `"outbox implementation contract" created at address:`, outboxAddress From f618499ff0f6a52961cb8a543efd13f5c403d7bd Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 7 Sep 2023 01:43:03 +0800 Subject: [PATCH 112/176] fix: missing maxDataSize --- test/contract/arbRollup.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 6466305e..b54c78ec 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -179,7 +179,8 @@ const setup = async () => { const response = await rollupCreator.createRollup( await getDefaultConfig(), await sequencer.getAddress(), - [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()] + [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], + 117964 ) const rec = await response.wait() From e90a8228fa655e070af5e22c490c0a18173f8992 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 7 Sep 2023 01:43:50 +0800 Subject: [PATCH 113/176] chore: ignore lib format --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 44285698..ef523b61 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,4 @@ coverage/** deployments/** src/lib/abi/** .nyc_output +lib/** From 116d6515349f01736b67ba3870ac6535d08150fd Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 11 Sep 2023 09:39:51 +0200 Subject: [PATCH 114/176] Add comment about deploying factories to L2 --- src/rollup/RollupCreator.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 72736b9f..7692a200 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -117,6 +117,10 @@ contract RollupCreator is Ownable { * @param _validators The list of validator addresses, not used when set to empty list * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided * @param _deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. + * Deploying factories via retyrable tickets at rollup creation time is the most reliable method to do it since it + * doesn't require paying the L1 gas. If deployment is instead done directly via L2 TX, there is a risk of gas price + * spike which results in burned nonce 0. That would mean we permanently lost capability to deploy deterministic + * factory at expected canonical address. * @return The address of the newly created rollup */ function createRollup( From 03c98c03c954366dfeab61a21068e6764ad3588a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 11 Sep 2023 15:03:20 +0200 Subject: [PATCH 115/176] Provide maxFeePerGas as param --- scripts/rollupCreation.ts | 19 ++++++++--- src/rollup/DeployHelper.sol | 48 +++++++++++++++++++++------- src/rollup/RollupCreator.sol | 54 ++++++++++++-------------------- test/foundry/RollupCreator.t.sol | 21 ++++++++----- 4 files changed, 83 insertions(+), 59 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index dab5b06a..5b9f65f3 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -7,6 +7,9 @@ import { BigNumber } from 'ethers' import { IERC20__factory } from '../build/types' import { sleep } from './testSetup' +// 1 gwei +const MAX_FER_PER_GAS = BigNumber.from('1000000000') + interface RollupCreatedEvent { event: string address: string @@ -75,11 +78,17 @@ export async function createRollup(feeToken?: string) { // Call the createRollup function console.log('Calling createRollup to generate a new rollup ...') - const createRollupTx = await rollupCreator[ - 'createRollup((uint64,uint64,address,uint256,bytes32,address,address,uint256,string,uint64,(uint256,uint256,uint256,uint256)),address,address[],address)' - ](config.rollupConfig, config.batchPoster, config.validators, feeToken, { - value: feeCost, - }) + const createRollupTx = await rollupCreator.createRollup( + config.rollupConfig, + config.batchPoster, + config.validators, + feeToken, + true, + MAX_FER_PER_GAS, + { + value: feeCost, + } + ) const createRollupReceipt = await createRollupTx.wait() const rollupCreatedEvent = createRollupReceipt.events?.find( diff --git a/src/rollup/DeployHelper.sol b/src/rollup/DeployHelper.sol index dabbf1fd..eede8574 100644 --- a/src/rollup/DeployHelper.sol +++ b/src/rollup/DeployHelper.sol @@ -42,20 +42,20 @@ contract DeployHelper { hex"04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820"; uint256 internal constant GASLIMIT = 100_000; - uint256 internal constant MAXFEEPERGAS = 1_000_000_000; function _fundAndDeploy( address inbox, uint256 _value, address _l2Address, bytes memory payload, - bool _isUsingFeeToken + bool _isUsingFeeToken, + uint256 maxFeePerGas ) internal { uint256 submissionCost = IInboxBase(inbox).calculateRetryableSubmissionFee( 0, block.basefee ); - uint256 feeAmount = _value + submissionCost + GASLIMIT * MAXFEEPERGAS; + uint256 feeAmount = _value + submissionCost + GASLIMIT * maxFeePerGas; // fund the target L2 address if (_isUsingFeeToken) { @@ -66,7 +66,7 @@ contract DeployHelper { excessFeeRefundAddress: msg.sender, callValueRefundAddress: msg.sender, gasLimit: GASLIMIT, - maxFeePerGas: MAXFEEPERGAS, + maxFeePerGas: maxFeePerGas, tokenTotalFeeAmount: feeAmount, data: "" }); @@ -78,7 +78,7 @@ contract DeployHelper { excessFeeRefundAddress: msg.sender, callValueRefundAddress: msg.sender, gasLimit: GASLIMIT, - maxFeePerGas: MAXFEEPERGAS, + maxFeePerGas: maxFeePerGas, data: "" }); } @@ -86,7 +86,11 @@ contract DeployHelper { IInboxBase(inbox).sendL2Message(payload); } - function perform(address _inbox, address _nativeToken) external payable { + function perform( + address _inbox, + address _nativeToken, + uint256 _maxFeePerGas + ) external payable { bool isUsingFeeToken = _nativeToken != address(0); _fundAndDeploy( @@ -94,17 +98,33 @@ contract DeployHelper { NICK_CREATE2_VALUE, NICK_CREATE2_DEPLOYER, NICK_CREATE2_PAYLOAD, - isUsingFeeToken + isUsingFeeToken, + _maxFeePerGas + ); + _fundAndDeploy( + _inbox, + ERC2470_VALUE, + ERC2470_DEPLOYER, + ERC2470_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas ); - _fundAndDeploy(_inbox, ERC2470_VALUE, ERC2470_DEPLOYER, ERC2470_PAYLOAD, isUsingFeeToken); _fundAndDeploy( _inbox, ZOLTU_VALUE, ZOLTU_CREATE2_DEPLOYER, ZOLTU_CREATE2_PAYLOAD, - isUsingFeeToken + isUsingFeeToken, + _maxFeePerGas + ); + _fundAndDeploy( + _inbox, + ERC1820_VALUE, + ERC1820_DEPLOYER, + ERC1820_PAYLOAD, + isUsingFeeToken, + _maxFeePerGas ); - _fundAndDeploy(_inbox, ERC1820_VALUE, ERC1820_DEPLOYER, ERC1820_PAYLOAD, isUsingFeeToken); // if paying with ETH refund the caller if (!isUsingFeeToken) { @@ -112,7 +132,11 @@ contract DeployHelper { } } - function getDeploymentTotalCost(IInboxBase inbox) public view returns (uint256) { + function getDeploymentTotalCost(IInboxBase inbox, uint256 maxFeePerGas) + public + view + returns (uint256) + { uint256 submissionCost = inbox.calculateRetryableSubmissionFee(0, block.basefee); return NICK_CREATE2_VALUE + @@ -120,6 +144,6 @@ contract DeployHelper { ZOLTU_VALUE + ERC1820_VALUE + 4 * - (submissionCost + GASLIMIT * MAXFEEPERGAS); + (submissionCost + GASLIMIT * maxFeePerGas); } } diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 7692a200..646eb1c6 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -81,29 +81,6 @@ contract RollupCreator is Ownable { emit TemplatesUpdated(); } - /** - * @notice Create a new rollup and deploy L2 factories via retryable tickets - * @dev After this setup: - * @dev - Rollup should be the owner of bridge - * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin - * @dev - RollupOwner should be the owner of Rollup - * @dev - Bridge should have a single inbox and outbox - * @dev - Validators and batch poster should be set if provided - * @param config The configuration for the rollup - * @param _batchPoster The address of the batch poster, not used when set to zero address - * @param _validators The list of validator addresses, not used when set to empty list - * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided - * @return The address of the newly created rollup - */ - function createRollup( - Config memory config, - address _batchPoster, - address[] calldata _validators, - address _nativeToken - ) external payable returns (address) { - return createRollup(config, _batchPoster, _validators, _nativeToken, true); - } - /** * @notice Create a new rollup * @dev After this setup: @@ -121,6 +98,7 @@ contract RollupCreator is Ownable { * doesn't require paying the L1 gas. If deployment is instead done directly via L2 TX, there is a risk of gas price * spike which results in burned nonce 0. That would mean we permanently lost capability to deploy deterministic * factory at expected canonical address. + * @param _maxFeePerGasForRetryables price bid for L2 execution. * @return The address of the newly created rollup */ function createRollup( @@ -128,13 +106,11 @@ contract RollupCreator is Ownable { address _batchPoster, address[] calldata _validators, address _nativeToken, - bool _deployFactoriesToL2 + bool _deployFactoriesToL2, + uint256 _maxFeePerGasForRetryables ) public payable returns (address) { ProxyAdmin proxyAdmin = new ProxyAdmin(); - // deploy and init upgrade executor - address upgradeExecutor = _deployUpgradeExecutor(config.owner, proxyAdmin); - // Create the rollup proxy to figure out the address and initialize it later RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); @@ -168,6 +144,10 @@ contract RollupCreator is Ownable { osp ); + // deploy and init upgrade executor + address upgradeExecutor = _deployUpgradeExecutor(config.owner, proxyAdmin); + + // upgradeExecutor shall be proxyAdmin's owner proxyAdmin.transferOwnership(address(upgradeExecutor)); // initialize the rollup with this contract as owner to set batch poster and validators @@ -206,7 +186,9 @@ contract RollupCreator is Ownable { IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); if (_deployFactoriesToL2) { - _deployFactories(address(bridgeContracts.inbox), _nativeToken); + _deployFactories( + address(bridgeContracts.inbox), _nativeToken, _maxFeePerGasForRetryables + ); } emit RollupCreated( @@ -246,24 +228,28 @@ contract RollupCreator is Ownable { return address(upgradeExecutor); } - function _deployFactories(address _inbox, address _nativeToken) internal { + function _deployFactories(address _inbox, address _nativeToken, uint256 _maxFeePerGas) + internal + { if (_nativeToken == address(0)) { // we need to fund 4 retryable tickets - uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox)); + uint256 cost = + l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox), _maxFeePerGas); // do it - l2FactoriesDeployer.perform{value: cost}(_inbox, _nativeToken); + l2FactoriesDeployer.perform{value: cost}(_inbox, _nativeToken, _maxFeePerGas); // refund the caller - (bool sent, ) = msg.sender.call{value: address(this).balance}(""); + (bool sent,) = msg.sender.call{value: address(this).balance}(""); require(sent, "Refund failed"); } else { // Transfer fee token amount needed to pay for retryable fees to the inbox. - uint256 totalFee = l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox)); + uint256 totalFee = + l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox), _maxFeePerGas); IERC20(_nativeToken).safeTransferFrom(msg.sender, _inbox, totalFee); // do it - l2FactoriesDeployer.perform(_inbox, _nativeToken); + l2FactoriesDeployer.perform(_inbox, _nativeToken, _maxFeePerGas); } } } diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 1cd4792e..ec9373e6 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -28,6 +28,9 @@ contract RollupCreatorTest is Test { IRollupUser public rollupUser; DeployHelper public deployHelper; + // 1 gwei + uint256 MAX_FEE_PER_GAS = 1_000_000_000; + /* solhint-disable func-name-mixedcase */ function setUp() public { @@ -99,7 +102,7 @@ contract RollupCreatorTest is Test { validators[1] = makeAddr("validator2"); address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( - config, batchPoster, validators, address(0) + config, batchPoster, validators, address(0), true, MAX_FEE_PER_GAS ); vm.stopPrank(); @@ -163,7 +166,7 @@ contract RollupCreatorTest is Test { ); // check upgrade executor owns proxyAdmin - address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 2); + address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 4); assertEq( ProxyAdmin(_getProxyAdmin(address(rollup.sequencerInbox()))).owner(), upgradeExecutorExpectedAddress, @@ -188,7 +191,8 @@ contract RollupCreatorTest is Test { // check funds are refunded uint256 balanceAfter = deployer.balance; - uint256 factoryDeploymentCost = deployHelper.getDeploymentTotalCost(rollup.inbox()); + uint256 factoryDeploymentCost = + deployHelper.getDeploymentTotalCost(rollup.inbox(), MAX_FEE_PER_GAS); assertEq(balanceBefore - balanceAfter, factoryDeploymentCost, "Invalid balance"); } @@ -223,8 +227,9 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = - rollupCreator.createRollup(config, batchPoster, validators, nativeToken); + address rollupAddress = rollupCreator.createRollup( + config, batchPoster, validators, nativeToken, true, MAX_FEE_PER_GAS + ); vm.stopPrank(); @@ -292,7 +297,7 @@ contract RollupCreatorTest is Test { ); // check upgrade executor owns proxyAdmin - address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 2); + address upgradeExecutorExpectedAddress = computeCreateAddress(address(rollupCreator), 4); assertEq( ProxyAdmin(_getProxyAdmin(address(rollup.sequencerInbox()))).owner(), upgradeExecutorExpectedAddress, @@ -346,7 +351,7 @@ contract RollupCreatorTest is Test { validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( - config, batchPoster, validators, address(0) + config, batchPoster, validators, address(0), true, MAX_FEE_PER_GAS ); vm.stopPrank(); @@ -356,7 +361,7 @@ contract RollupCreatorTest is Test { address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); IUpgradeExecutor upgradeExecutor = - IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 2)); + IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 4)); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( From e918f0001b0a2989cc69829f2dcc53f464a706c4 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 11 Sep 2023 15:07:03 +0200 Subject: [PATCH 116/176] Prettier --- src/rollup/RollupCreator.sol | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 646eb1c6..b681c855 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -187,7 +187,9 @@ contract RollupCreator is Ownable { if (_deployFactoriesToL2) { _deployFactories( - address(bridgeContracts.inbox), _nativeToken, _maxFeePerGasForRetryables + address(bridgeContracts.inbox), + _nativeToken, + _maxFeePerGasForRetryables ); } @@ -228,24 +230,30 @@ contract RollupCreator is Ownable { return address(upgradeExecutor); } - function _deployFactories(address _inbox, address _nativeToken, uint256 _maxFeePerGas) - internal - { + function _deployFactories( + address _inbox, + address _nativeToken, + uint256 _maxFeePerGas + ) internal { if (_nativeToken == address(0)) { // we need to fund 4 retryable tickets - uint256 cost = - l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox), _maxFeePerGas); + uint256 cost = l2FactoriesDeployer.getDeploymentTotalCost( + IInboxBase(_inbox), + _maxFeePerGas + ); // do it l2FactoriesDeployer.perform{value: cost}(_inbox, _nativeToken, _maxFeePerGas); // refund the caller - (bool sent,) = msg.sender.call{value: address(this).balance}(""); + (bool sent, ) = msg.sender.call{value: address(this).balance}(""); require(sent, "Refund failed"); } else { // Transfer fee token amount needed to pay for retryable fees to the inbox. - uint256 totalFee = - l2FactoriesDeployer.getDeploymentTotalCost(IInboxBase(_inbox), _maxFeePerGas); + uint256 totalFee = l2FactoriesDeployer.getDeploymentTotalCost( + IInboxBase(_inbox), + _maxFeePerGas + ); IERC20(_nativeToken).safeTransferFrom(msg.sender, _inbox, totalFee); // do it From d72f523b87e5c443fec42fc572fecfa48858a3a3 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 11 Sep 2023 15:11:59 +0200 Subject: [PATCH 117/176] Fix hardhat test --- test/contract/arbRollup.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 8b2c7a35..3b6317c2 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -196,13 +196,14 @@ const setup = async () => { deployHelper.address ) - const response = await rollupCreator[ - 'createRollup((uint64,uint64,address,uint256,bytes32,address,address,uint256,string,uint64,(uint256,uint256,uint256,uint256)),address,address[],address)' - ]( + const maxFeePerGas = BigNumber.from('1000000000') + const response = await rollupCreator.createRollup( await getDefaultConfig(), await sequencer.getAddress(), [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], ethers.constants.AddressZero, + true, + maxFeePerGas, { value: ethers.utils.parseEther('0.2') } ) From f326c9fe5fe272327b6003ed3834a86a647b5a7d Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 10:06:59 +0200 Subject: [PATCH 118/176] Use 21000 gas limit for funding L2 addresses --- scripts/rollupCreation.ts | 2 +- src/rollup/DeployHelper.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 5b9f65f3..7db2f311 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -114,7 +114,7 @@ export async function createRollup(feeToken?: string) { console.log("Congratulations! 🎉🎉🎉 All DONE! Here's your addresses:") console.log('RollupProxy Contract created at address:', rollupAddress) console.log('Wait a minute before starting the contract verification') - await sleep(2 * 60 * 1000) + await sleep(1 * 60 * 1000) console.log( `Attempting to verify Rollup contract at address ${rollupAddress}...` ) diff --git a/src/rollup/DeployHelper.sol b/src/rollup/DeployHelper.sol index eede8574..1fdf7b0d 100644 --- a/src/rollup/DeployHelper.sol +++ b/src/rollup/DeployHelper.sol @@ -41,7 +41,7 @@ contract DeployHelper { bytes public constant ERC1820_PAYLOAD = hex"04f90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820"; - uint256 internal constant GASLIMIT = 100_000; + uint256 internal constant GASLIMIT = 21_000; function _fundAndDeploy( address inbox, From ad93bf5f56884ae048929b2b6464dcc10659cc3a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 10:27:41 +0200 Subject: [PATCH 119/176] Make natspec comment clearer --- src/rollup/RollupCreator.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index b681c855..0dfb7a82 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -95,9 +95,9 @@ contract RollupCreator is Ownable { * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided * @param _deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. * Deploying factories via retyrable tickets at rollup creation time is the most reliable method to do it since it - * doesn't require paying the L1 gas. If deployment is instead done directly via L2 TX, there is a risk of gas price - * spike which results in burned nonce 0. That would mean we permanently lost capability to deploy deterministic - * factory at expected canonical address. + * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that + * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct + * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. * @param _maxFeePerGasForRetryables price bid for L2 execution. * @return The address of the newly created rollup */ From 718c185e4c1c66c06eaf604483da225fd6b8c5de Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 10:34:06 +0200 Subject: [PATCH 120/176] Typo --- src/rollup/RollupCreator.sol | 2 +- test/foundry/Inbox.t.sol | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 0dfb7a82..98633541 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -94,7 +94,7 @@ contract RollupCreator is Ownable { * @param _validators The list of validator addresses, not used when set to empty list * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided * @param _deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. - * Deploying factories via retyrable tickets at rollup creation time is the most reliable method to do it since it + * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. diff --git a/test/foundry/Inbox.t.sol b/test/foundry/Inbox.t.sol index 839538d0..2734eb81 100644 --- a/test/foundry/Inbox.t.sol +++ b/test/foundry/Inbox.t.sol @@ -132,7 +132,7 @@ contract InboxTest is AbsInboxTest { uint256 ethToSend = 0.3 ether; - // retyrable params + // retryable params uint256 l2CallValue = 0.1 ether; uint256 maxSubmissionCost = 0.1 ether; uint256 gasLimit = 100_000; @@ -198,7 +198,7 @@ contract InboxTest is AbsInboxTest { uint256 ethToSend = 0.3 ether; - // retyrable params + // retryable params uint256 l2CallValue = 0.1 ether; uint256 maxSubmissionCost = 0.1 ether; uint256 gasLimit = 100_000; @@ -441,7 +441,7 @@ contract InboxTest is AbsInboxTest { uint256 ethToSend = 0.3 ether; - // retyrable params + // retryable params uint256 l2CallValue = 0.1 ether; uint256 maxSubmissionCost = 0.1 ether; uint256 gasLimit = 100_000; @@ -507,7 +507,7 @@ contract InboxTest is AbsInboxTest { uint256 ethToSend = 0.3 ether; - // retyrable params + // retryable params uint256 l2CallValue = 0.1 ether; uint256 maxSubmissionCost = 0.1 ether; uint256 gasLimit = 100_000; From a287c1bdc33552f434a09e1bcddf57a096431d34 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 15:28:41 +0200 Subject: [PATCH 121/176] Add missing contract verification --- scripts/deployment.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index bad8e0b5..12723b60 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -138,7 +138,7 @@ async function main() { console.log('Template is set on the Rollup Creator') // get and verify ETH-based bridge contracts - const { bridge, sequencerInbox, inbox, outbox } = + const { bridge, sequencerInbox, inbox, rollupEventInbox, outbox } = await contracts.bridgeCreator.ethBasedTemplates() console.log('Wait a minute before starting contract verification') @@ -158,6 +158,18 @@ async function main() { ) console.log(`"inbox implementation contract" created at address:`, inbox) await verifyContract('Inbox', inbox, [], 'src/bridge/Inbox.sol:Inbox') + + console.log( + `"rollupEventInbox implementation contract" created at address:`, + rollupEventInbox + ) + await verifyContract( + 'RollupEventInbox', + rollupEventInbox, + [], + 'src/bridge/RollupEventInbox.sol:RollupEventInbox' + ) + console.log(`"outbox implementation contract" created at address:`, outbox) await verifyContract('Outbox', outbox, [], 'src/bridge/Outbox.sol:Outbox') @@ -166,6 +178,7 @@ async function main() { bridge: erc20Bridge, sequencerInbox: erc20SeqInbox, inbox: erc20Inbox, + rollupEventInbox: erc20RollupEventInbox, outbox: erc20Outbox, } = await contracts.bridgeCreator.erc20BasedTemplates() @@ -199,6 +212,18 @@ async function main() { [], 'src/bridge/ERC20Inbox.sol:ERC20Inbox' ) + + console.log( + `"erc20 rollupEventInbox implementation contract" created at address:`, + erc20RollupEventInbox + ) + await verifyContract( + 'ERC20RollupEventInbox', + erc20RollupEventInbox, + [], + 'src/bridge/ERC20RollupEventInbox.sol:ERC20RollupEventInbox' + ) + console.log( `"erc20 outbox implementation contract" created at address:`, outbox From 1198cc3b5b13a05978be6dc0db27805701bc8d94 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 19:08:06 +0200 Subject: [PATCH 122/176] Set gap variables --- src/bridge/AbsBridge.sol | 2 +- src/bridge/AbsInbox.sol | 7 +++++++ src/bridge/AbsOutbox.sol | 7 +++++++ test/storage/Bridge.dot | 6 +++--- test/storage/Inbox.dot | 9 ++++++--- test/storage/Outbox.dot | 7 +++++-- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index 438c4341..88577d2d 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -298,5 +298,5 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[50] private __gap; + uint256[40] private __gap; } diff --git a/src/bridge/AbsInbox.sol b/src/bridge/AbsInbox.sol index 95e89130..c02e723d 100644 --- a/src/bridge/AbsInbox.sol +++ b/src/bridge/AbsInbox.sol @@ -343,4 +343,11 @@ abstract contract AbsInbox is DelegateCallAware, PausableUpgradeable, IInboxBase view virtual returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[47] private __gap; } diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol index 59eb4797..2b87c726 100644 --- a/src/bridge/AbsOutbox.sol +++ b/src/bridge/AbsOutbox.sol @@ -292,4 +292,11 @@ abstract contract AbsOutbox is DelegateCallAware, IOutbox { /// rollup this amount shall always be 0, because amount of ETH being withdrawn can be read from msg.value. /// @return amount of native token being withdrawn in case of ERC20-based rollup, or 0 in case of ETH-based rollup function _amountToSetInContext(uint256 value) internal pure virtual returns (uint256); + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[42] private __gap; } diff --git a/test/storage/Bridge.dot b/test/storage/Bridge.dot index a7fc3978..c98a5e8c 100644 --- a/test/storage/Bridge.dot +++ b/test/storage/Bridge.dot @@ -4,7 +4,7 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -8 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11-60 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) } | { <71> uint256[50]: AbsBridge.__gap (1600) }}}"] +8 [label="Bridge \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11-50 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <5> mapping\(address=\>InOutInfo\): AbsBridge.allowedDelayedInboxesMap (32) } | { <8> mapping\(address=\>InOutInfo\): AbsBridge.allowedOutboxesMap (32) } | { <10> address[]: AbsBridge.allowedDelayedInboxList (32) } | { <12> address[]: AbsBridge.allowedOutboxList (32) } | { unallocated (12) | address: AbsBridge._activeOutbox (20) } | { <15> bytes32[]: AbsBridge.delayedInboxAccs (32) } | { <17> bytes32[]: AbsBridge.sequencerInboxAccs (32) } | { unallocated (12) | IOwnable: AbsBridge.rollup (20) } | { unallocated (12) | address: AbsBridge.sequencerInbox (20) } | { uint256: AbsBridge.sequencerReportedSubMessageCount (32) } | { <61> uint256[40]: AbsBridge.__gap (1280) }}}"] 1 [label="InOutInfo \<\\>\n | {{ slot| 0 | 1 } | { type: variable (bytes) | { uint256: index (32) } | { unallocated (31) | bool: allowed (1) }}}"] @@ -18,7 +18,7 @@ node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] 6 [label="bytes32[]: sequencerInboxAccs \<\\>\n0x995663702627f3d8fc4237c51a46b303536bb17f3f65e07c08ad05fecbf4d88e | {{ slot| 0 } | { type: variable (bytes) | { bytes32 (32) }}}"] -7 [label="uint256[50]: __gap \<\\>\n | {{ slot| 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] +7 [label="uint256[40]: __gap \<\\>\n | {{ slot| 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] 8:5 -> 1 8:8 -> 2 @@ -26,5 +26,5 @@ node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] 8:12 -> 4 8:15 -> 5 8:17 -> 6 - 8:71 -> 7 + 8:61 -> 7 } \ No newline at end of file diff --git a/test/storage/Inbox.dot b/test/storage/Inbox.dot index 98c5cd42..cc97bcc9 100644 --- a/test/storage/Inbox.dot +++ b/test/storage/Inbox.dot @@ -4,12 +4,15 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -3 [label="Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: AbsInbox.bridge (20) } | { unallocated (11) | bool: AbsInbox.allowListEnabled (1) | ISequencerInbox: AbsInbox.sequencerInbox (20) } | { mapping\(address=\>bool\): AbsInbox.isAllowed (32) }}}"] +4 [label="Inbox \<\\>\n | {{ slot| 0 | 1-50 | 51 | 52-100 | 101 | 102 | 103 | 104-150 } | { type: \.variable (bytes) | { unallocated (30) | bool: Initializable._initializing (1) | bool: Initializable._initialized (1) } | { <53> uint256[50]: ContextUpgradeable.__gap (1600) } | { unallocated (31) | bool: PausableUpgradeable._paused (1) } | { <104> uint256[49]: PausableUpgradeable.__gap (1568) } | { unallocated (12) | IBridge: AbsInbox.bridge (20) } | { unallocated (11) | bool: AbsInbox.allowListEnabled (1) | ISequencerInbox: AbsInbox.sequencerInbox (20) } | { mapping\(address=\>bool\): AbsInbox.isAllowed (32) } | { <156> uint256[47]: AbsInbox.__gap (1504) }}}"] 1 [label="uint256[50]: __gap \<\\>\n | {{ slot| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] 2 [label="uint256[49]: __gap \<\\>\n | {{ slot| 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] - 3:53 -> 1 - 3:104 -> 2 +3 [label="uint256[47]: __gap \<\\>\n | {{ slot| 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] + + 4:53 -> 1 + 4:104 -> 2 + 4:156 -> 3 } \ No newline at end of file diff --git a/test/storage/Outbox.dot b/test/storage/Outbox.dot index de11992c..f2da1fcb 100644 --- a/test/storage/Outbox.dot +++ b/test/storage/Outbox.dot @@ -4,9 +4,12 @@ rankdir=LR color=black arrowhead=open node [shape=record, style=filled, fillcolor=gray95 fontname="Courier New"] -2 [label="Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 } | { type: \.variable (bytes) | { unallocated (12) | address: AbsOutbox.rollup (20) } | { unallocated (12) | IBridge: AbsOutbox.bridge (20) } | { mapping\(uint256=\>bytes32\): AbsOutbox.spent (32) } | { mapping\(bytes32=\>bytes32\): AbsOutbox.roots (32) } | { <11> L2ToL1Context: AbsOutbox.context (128) }}}"] +3 [label="Outbox \<\\>\n | {{ slot| 0 | 1 | 2 | 3 | 4-7 | 8-49 } | { type: \.variable (bytes) | { unallocated (12) | address: AbsOutbox.rollup (20) } | { unallocated (12) | IBridge: AbsOutbox.bridge (20) } | { mapping\(uint256=\>bytes32\): AbsOutbox.spent (32) } | { mapping\(bytes32=\>bytes32\): AbsOutbox.roots (32) } | { <11> L2ToL1Context: AbsOutbox.context (128) } | { <54> uint256[42]: AbsOutbox.__gap (1344) }}}"] 1 [label="L2ToL1Context \<\\>\n | {{ slot| 4 | 5 | 6 | 7 } | { type: variable (bytes) | { uint128: timestamp (16) | uint128: l2Block (16) } | { bytes32: outputId (32) } | { uint96: l1Block (12) | address: sender (20) } | { uint256: withdrawalAmount (32) }}}"] - 2:11 -> 1 +2 [label="uint256[42]: __gap \<\\>\n | {{ slot| 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 } | { type: variable (bytes) | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) } | { uint256 (32) }}}"] + + 3:11 -> 1 + 3:54 -> 2 } \ No newline at end of file From 60a1e5019e8a5c4d073f70f1714ab423969137ef Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 19:17:26 +0200 Subject: [PATCH 123/176] Remove uneccessary dependencies --- package.json | 2 - yarn.lock | 5666 +++++++++++++++++++++++--------------------------- 2 files changed, 2659 insertions(+), 3009 deletions(-) diff --git a/package.json b/package.json index 457ab06c..da87cd57 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,6 @@ "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { - "@arbitrum/sdk": "^3.1.3", - "@ethersproject/providers": "^5.7.2", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", diff --git a/yarn.lock b/yarn.lock index aeaaadee..23b7ba12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,20 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@aduh95/viz.js@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@aduh95/viz.js/-/viz.js-3.7.0.tgz#a20d86c5fc8f6abebdc39b96a4326e10375d77c0" integrity sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng== "@arbitrum/sdk@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.3.tgz#75236043717a450b569faaa087687c51d525b0c3" - integrity sha512-Dn1or7/Guc3dItuiiWaoYQ37aCDwiWTZGPIrg4yBJW27BgiDGbo0mjPDAhKTh4p5NDOWyE8bZ0vZai86COZIUA== + version "3.1.10" + resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.10.tgz#ea8148c843ee38b24d1478fa283c1c34ee9561d7" + integrity sha512-aOxkk1A4XBrKJTGpz9da1EyXIkJu4c+wm/9PpTscdjNT268ZKXLTextN7qCs9JwoL1icFOyuH1R1u9mnjUSXkg== dependencies: "@ethersproject/address" "^5.0.8" "@ethersproject/bignumber" "^5.1.1" @@ -18,37 +23,69 @@ ethers "^5.1.0" "@babel/code-frame@^7.0.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" js-tokens "^4.0.0" -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -66,21 +103,38 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" + espree "^9.6.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.49.0": + version "8.49.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" + integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== + "@ethereum-waffle/chai@^3.4.4": version "3.4.4" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.4.tgz#16c4cc877df31b035d6d92486dfdf983df9138ff" @@ -134,98 +188,51 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.2.tgz#63d1e26d0b7a7a3684fce920de6ebabec1e5b674" - integrity sha512-mOqYWwMlAZpYUEOEqt7EfMFuVL2eyLqWWIzcf4odn6QgXY8jBI2NhVuJncrMCKeMZrsJAe7/auaRRB6YcdH+Qw== - dependencies: - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/tx" "^3.5.1" - ethereumjs-util "^7.1.4" - merkle-patricia-tree "^4.2.4" - -"@ethereumjs/blockchain@^5.5.0", "@ethereumjs/blockchain@^5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.2.tgz#1848abd9dc1ee56acf8cec4c84304d7f4667d027" - integrity sha512-Jz26iJmmsQtngerW6r5BDFaew/f2mObLrRZo3rskLOx1lmtMZ8+TX/vJexmivrnWgmAsTdNWhlKUYY4thPhPig== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/ethash" "^1.1.0" - debug "^4.3.3" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - lru-cache "^5.1.1" - semaphore-async-await "^1.5.1" - -"@ethereumjs/common@^2.3.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== +"@ethereumjs/common@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" + integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.1.3" + ethereumjs-util "^7.1.1" -"@ethereumjs/common@^2.4.0": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df" - integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ== +"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" + ethereumjs-util "^7.1.5" -"@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.3": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" - integrity sha512-mQwPucDL7FDYIg9XQ8DL31CnIYZwGhU5hyOO5E+BMmT71G0+RHvIT5rIkLBirJEKxV6+Rcf9aEIY0kXInxUWpQ== +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" + integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.4" + "@ethereumjs/common" "^2.5.0" + ethereumjs-util "^7.1.2" -"@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== +"@ethereumjs/tx@^3.3.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== 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/common" "^2.6.4" + ethereumjs-util "^7.1.5" -"@ethereumjs/tx@^3.2.1": - 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/tx@^3.4.0", "@ethereumjs/tx@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.1.tgz#8d941b83a602b4a89949c879615f7ea9a90e6671" - integrity sha512-xzDrTiu4sqZXUcaBxJ4n4W5FrppwxLxZB4ZDGVLtxSQR4lVuOnFR6RcUHdg1mpUhAPVrmnzLJpxaeXnPxIyhWA== - dependencies: - "@ethereumjs/common" "^2.6.3" - ethereumjs-util "^7.1.4" - -"@ethereumjs/vm@^5.6.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.8.0.tgz#c9055f96afc13dd7b72893b57fa20027effea6fe" - integrity sha512-mn2G2SX79QY4ckVvZUfxlNUpzwT2AEIkvgJI8aHoQaNYEHhH8rmdVDIaVVgz6//PjK52BZsK23afz+WvSR0Qqw== - dependencies: - "@ethereumjs/block" "^3.6.2" - "@ethereumjs/blockchain" "^5.5.2" - "@ethereumjs/common" "^2.6.3" - "@ethereumjs/tx" "^3.5.1" - async-eventemitter "^0.2.4" - core-js-pure "^3.0.1" - debug "^4.3.3" - ethereumjs-util "^7.1.4" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.4" - rustbn.js "~0.2.0" +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" @@ -242,52 +249,7 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" -"@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/abi@5.6.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3" - integrity sha512-AhVByTwdXCc2YQ20v300w6KVHle9g2OFc28ZAFCPnJyEpkv1xKXjZcSTgWOlv1i+0dqlgF8RCF2Rn2KC1t+1Vg== - dependencies: - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - -"@ethersproject/abi@5.6.1", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.6.0": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.1.tgz#f7de888edeb56b0a657b672bdd1b3a1135cd14f7" - integrity sha512-0cqssYh6FXjlwKWBmLm3+zH2BNARoS5u/hxbz+LpQmcDB3w0W553h2btWui1/uZp2GBM/SI3KniTuMcYyHpA5w== - dependencies: - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -302,19 +264,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.6.0", "@ethersproject/abstract-provider@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" - integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/web" "^5.6.0" - "@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" @@ -328,17 +277,6 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" - integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ== - dependencies: - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" @@ -350,18 +288,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.6.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" - integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp" "^5.6.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -372,24 +299,6 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/address@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" - integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== - dependencies: - "@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/base64@5.6.0", "@ethersproject/base64@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" - integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" @@ -397,14 +306,6 @@ dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" - integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" @@ -413,16 +314,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.6.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26" - integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - bn.js "^4.11.9" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -431,74 +323,21 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bignumber@^5.0.7": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" - integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - bn.js "^4.11.9" - -"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.6.0": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" - integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/bytes@^5.0.4": - 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/logger" "^5.5.0" - -"@ethersproject/constants@5.6.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" - integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/constants@^5.0.4": - 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.5.0" - -"@ethersproject/contracts@5.6.0", "@ethersproject/contracts@^5.4.1": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067" - integrity sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw== - dependencies: - "@ethersproject/abi" "^5.6.0" - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - -"@ethersproject/contracts@5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -514,21 +353,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.6.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" - integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== - dependencies: - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.7.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -543,38 +368,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hash@^5.0.4": - 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.6.0", "@ethersproject/hdnode@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.0.tgz#9dcbe8d629bbbcf144f2cae476337fe92d320998" - integrity sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw== - dependencies: - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/basex" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/signing-key" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/wordlists" "^5.6.0" - "@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" @@ -593,25 +386,6 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.6.0", "@ethersproject/json-wallets@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz#4c2fc27f17e36c583e7a252fb938bc46f98891e5" - integrity sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ== - dependencies: - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/hdnode" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/pbkdf2" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - "@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" @@ -631,15 +405,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" - integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== - dependencies: - "@ethersproject/bytes" "^5.6.0" - js-sha3 "0.8.0" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -647,65 +413,18 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@^5.0.3": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" - integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== - dependencies: - "@ethersproject/bytes" "^5.5.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" - integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/logger@^5.0.5": - 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/networks@5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" - integrity sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/networks@5.6.2", "@ethersproject/networks@^5.6.0": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.2.tgz#2bacda62102c0b1fcee408315f2bed4f6fbdf336" - integrity sha512-9uEzaJY7j5wpYGTojGp8U89mSsgQLc40PCMJLMCnFXTs7nhBveZ0t7dbqWUNrepWTszDbFkYD6WlL8DKx5huHA== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/networks@5.7.1": +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" - integrity sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" @@ -714,104 +433,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" - integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== - dependencies: - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.7.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/properties@^5.0.3": - 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.6.2", "@ethersproject/providers@^5.4.4": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.2.tgz#b9807b1c8c6f59fa2ee4b3cf6519724d07a9f422" - integrity sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/basex" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.0" - "@ethersproject/rlp" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/web" "^5.6.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/providers@5.6.4": - version "5.6.4" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.4.tgz#1a49c211b57b0b2703c320819abbbfa35c83dff7" - integrity sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw== - dependencies: - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/basex" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.0" - "@ethersproject/rlp" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/web" "^5.6.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/providers@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -837,14 +466,6 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.6.0", "@ethersproject/random@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" - integrity sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" @@ -853,14 +474,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" - integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" @@ -869,15 +482,6 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" - integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - hash.js "1.1.7" - "@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" @@ -887,18 +491,6 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.6.0", "@ethersproject/signing-key@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.0.tgz#4f02e3fb09e22b71e2e1d6dc4bcb5dafa69ce042" - integrity sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - "@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" @@ -911,19 +503,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.6.0", "@ethersproject/solidity@^5.4.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" - integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - -"@ethersproject/solidity@5.7.0": +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -935,16 +515,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.6.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" - integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.7.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -953,31 +524,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/strings@^5.0.4": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" - integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/constants" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - -"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" - integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== - dependencies: - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/rlp" "^5.6.0" - "@ethersproject/signing-key" "^5.6.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -992,15 +539,6 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" -"@ethersproject/units@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c" - integrity sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw== - dependencies: - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" @@ -1010,28 +548,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.6.0", "@ethersproject/wallet@^5.4.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.0.tgz#33d11a806d783864208f348709a5a3badac8e22a" - integrity sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/hdnode" "^5.6.0" - "@ethersproject/json-wallets" "^5.6.0" - "@ethersproject/keccak256" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.0" - "@ethersproject/signing-key" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/wordlists" "^5.6.0" - -"@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -1052,29 +569,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.6.0", "@ethersproject/web@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" - integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== - dependencies: - "@ethersproject/base64" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - -"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/web@5.7.1": +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -1085,17 +580,6 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" - integrity sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q== - dependencies: - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" @@ -1107,19 +591,14 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" @@ -1131,10 +610,28 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@metamask/eth-sig-util@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6" - integrity sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: ethereumjs-abi "^0.6.8" ethereumjs-util "^6.2.1" @@ -1142,15 +639,32 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/hashes@1.0.0", "@noble/hashes@~1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" - integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + dependencies: + "@noble/hashes" "1.3.1" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== -"@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" - integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ== +"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1165,7 +679,7 @@ 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": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 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== @@ -1173,34 +687,231 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + "@nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers@^0.3.0-beta.13": version "0.3.0-beta.13" resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== "@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz#7137554862b3b1c914f1b1bf110f0529fd2dec53" - integrity sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA== + version "3.1.7" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" + integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^5.0.2" + cbor "^8.1.0" chalk "^2.4.2" debug "^4.1.1" fs-extra "^7.0.1" lodash "^4.17.11" semver "^6.3.0" table "^6.8.0" - undici "^5.4.0" + undici "^5.14.0" "@nomiclabs/hardhat-waffle@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" - integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== - dependencies: - "@types/sinon-chai" "^3.2.3" - "@types/web3" "1.0.19" + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz#d11cb063a5f61a77806053e54009c40ddee49a54" + integrity sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg== "@offchainlabs/upgrade-executor@1.1.0-beta.0": version "1.1.0-beta.0" @@ -1267,27 +978,44 @@ path-browserify "^1.0.0" url "^0.11.0" -"@scure/base@~1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" - integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== +"@scure/base@~1.1.0": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== -"@scure/bip32@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" - integrity sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: - "@noble/hashes" "~1.0.0" - "@noble/secp256k1" "~1.5.2" - "@scure/base" "~1.0.0" + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" -"@scure/bip39@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" - integrity sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w== +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== dependencies: - "@noble/hashes" "~1.0.0" - "@scure/base" "~1.0.0" + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" "@sentry/core@5.30.0": version "5.30.0" @@ -1362,17 +1090,22 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" - integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.3": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.14.3": - version "0.14.3" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" - integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== +"@solidity-parser/parser@^0.16.0": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -1383,53 +1116,68 @@ dependencies: defer-to-connect "^1.0.1" -"@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== +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" -"@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== +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@truffle/error@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.1.tgz#e52026ac8ca7180d83443dca73c03e07ace2a301" + integrity sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA== + +"@truffle/interface-adapter@^0.5.25": + version "0.5.37" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz#95d249c1912d2baaa63c54e8a138d3f476a1181a" + integrity sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw== dependencies: bn.js "^5.1.3" ethers "^4.0.32" - web3 "1.5.3" + web3 "1.10.0" "@truffle/provider@^0.2.24": - version "0.2.42" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.42.tgz#9da6a144b3c9188cdb587451dd7bd907b4c7164b" - integrity sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg== + version "0.2.64" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.64.tgz#7dd55117307fd019dcf81d08db5dc2bc5728f51c" + integrity sha512-ZwPsofw4EsCq/2h0t73SPnnFezu4YQWBmK4FxFaOUX0F+o8NsZuHKyfJzuZwyZbiktYmefM3yD9rM0Dj4BhNbw== dependencies: - "@truffle/error" "^0.0.14" - "@truffle/interface-adapter" "^0.5.8" - web3 "1.5.3" + "@truffle/error" "^0.1.1" + "@truffle/interface-adapter" "^0.5.25" + debug "^4.3.1" + web3 "1.7.4" "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@typechain/ethers-v5@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.0.0.tgz#1b6e292d2ed9afb0d2f7a4674cc199bb95bad714" - integrity sha512-Kot7fwAqnH96ZbI8xrRgj5Kpv9yCEdjo7mxRqrH7bYpEgijT5MmuOo8IVsdhOu7Uog4ONg7k/d5UdbAtTKUgsA== + version "10.2.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" + integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== dependencies: lodash "^4.17.15" ts-essentials "^7.0.1" @@ -1442,24 +1190,11 @@ ethers "^5.0.2" "@typechain/hardhat@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.0.0.tgz#5e305641de67276efbfaa8c37c78e38f22b22ef4" - integrity sha512-AnhwODKHxx3+st5uc1j2NQh79Lv2OuvDQe4dKn8ZxhqYsAsTPnHTLBeI8KPZ+mfdE7v13D2QYssRTIkkGhK35A== + version "6.1.6" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.1.6.tgz#1a749eb35e5054c80df531cf440819cb347c62ea" + integrity sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA== dependencies: fs-extra "^9.1.0" - lodash "^4.17.15" - -"@types/abstract-leveldown@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" - integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== - -"@types/bn.js@*", "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== - dependencies: - "@types/node" "*" "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" @@ -1468,15 +1203,27 @@ dependencies: "@types/node" "*" -"@types/chai@*": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" - integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" + integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" "@types/chai@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" - integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== "@types/concat-stream@^1.6.0": version "1.6.1" @@ -1488,7 +1235,7 @@ "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha1-yayFsqX9GENbjIXZ7LUObWyJP/g= + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== dependencies: "@types/node" "*" @@ -1500,23 +1247,21 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@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/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== -"@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== +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: - "@types/abstract-leveldown" "*" - "@types/level-errors" "*" "@types/node" "*" "@types/lru-cache@^5.1.0": @@ -1525,9 +1270,9 @@ integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -1537,22 +1282,22 @@ "@types/node" "*" "@types/mocha@^9.0.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" - integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node-fetch@^2.5.5": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" - integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== + version "2.6.4" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" + integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== dependencies: "@types/node" "*" form-data "^3.0.0" "@types/node@*": - version "17.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" - integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== + version "20.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" + integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== "@types/node@^10.0.3": version "10.17.60" @@ -1560,14 +1305,14 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": - version "12.20.47" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.47.tgz#ca9237d51f2a2557419688511dab1c8daf475188" - integrity sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg== + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^17.0.5": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.25.tgz#527051f3c2f77aa52e5dc74e45a3da5fb2301448" - integrity sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w== + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/node@^8.0.0": version "8.10.66" @@ -1582,14 +1327,22 @@ "@types/node" "*" "@types/prettier@^2.1.1": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" "@types/resolve@^0.0.8": version "0.0.8" @@ -1598,6 +1351,13 @@ dependencies: "@types/node" "*" +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1605,38 +1365,10 @@ dependencies: "@types/node" "*" -"@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon@*": - version "10.0.11" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.11.tgz#8245827b05d3fc57a6601bd35aee1f7ad330fc42" - integrity sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== - -"@types/underscore@*": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== - -"@types/web3@1.0.19": - version "1.0.19" - resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" - integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== - dependencies: - "@types/bn.js" "*" - "@types/underscore" "*" +"@types/semver@^7.3.12": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" + integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== "@types/yauzl@^2.9.1": version "2.10.0" @@ -1646,99 +1378,96 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin-tslint@^5.27.1": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.37.0.tgz#bb678cac00843db3ffbb9aca3fd83c9fc4cbf7ca" - integrity sha512-wMyqF+WqS5rioQCwihWZJpnpVB/Jg0hLPHr0kWw7HOQtWkWUS71yGxKqJuIP3k0nkdwBk7tt17bZjAB8MOqFBQ== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.62.0.tgz#220242dcd23711c400d4f5d5d876d5107cea4be0" + integrity sha512-qsYLld1+xed2lVwHbCxkCWdhRcByLNOjpccxK6HHlem724PbMcL1/dmH7jMQaqIpbfPAGkIypyyk3q5nUgtkhA== dependencies: - "@typescript-eslint/utils" "5.37.0" - lodash "^4.17.21" + "@typescript-eslint/utils" "5.62.0" "@typescript-eslint/eslint-plugin@^5.14.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz#5ccdd5d9004120f28fc6e717fb4b5c9bddcfbc04" - integrity sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og== - dependencies: - "@typescript-eslint/scope-manager" "5.37.0" - "@typescript-eslint/type-utils" "5.37.0" - "@typescript-eslint/utils" "5.37.0" + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" - functional-red-black-tree "^1.0.1" + graphemer "^1.4.0" ignore "^5.2.0" - regexpp "^3.2.0" + natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.14.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.37.0.tgz#c382077973f3a4ede7453fb14cadcad3970cbf3b" - integrity sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: - "@typescript-eslint/scope-manager" "5.37.0" - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/typescript-estree" "5.37.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz#044980e4f1516a774a418dafe701a483a6c9f9ca" - integrity sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/visitor-keys" "5.37.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz#43ed2f567ada49d7e33a6e4b6f9babd060445fe5" - integrity sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.37.0" - "@typescript-eslint/utils" "5.37.0" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.37.0.tgz#09e4870a5f3af7af3f84e08d792644a87d232261" - integrity sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz#956dcf5c98363bcb97bdd5463a0a86072ff79355" - integrity sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/visitor-keys" "5.37.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.37.0.tgz#7784cb8e91390c4f90ccaffd24a0cf9874df81b2" - integrity sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.37.0" - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/typescript-estree" "5.37.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.37.0": - version "5.37.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz#7b72dd343295ea11e89b624995abc7103c554eee" - integrity sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -1752,14 +1481,25 @@ abbrev@1: abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== +abortcontroller-polyfill@^1.7.3: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== dependencies: - event-target-shim "^5.0.0" + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" abstract-leveldown@3.0.0: version "3.0.0" @@ -1782,17 +1522,6 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: dependencies: xtend "~4.0.0" -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.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" @@ -1800,17 +1529,6 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" -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.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1819,7 +1537,7 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1829,25 +1547,15 @@ acorn-walk@^8.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -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@^8.4.1: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.4.1, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== adm-zip@^0.4.16: version "0.4.16" @@ -1857,7 +1565,7 @@ adm-zip@^0.4.16: aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== aes-js@^3.1.1: version "3.1.2" @@ -1879,7 +1587,7 @@ 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@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1890,9 +1598,9 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: uri-js "^4.2.2" ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1902,22 +1610,22 @@ ajv@^8.0.1: amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== -ansi-colors@4.1.1, ansi-colors@^4.1.1: +ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.3.0: version "4.3.2" @@ -1929,7 +1637,7 @@ ansi-escapes@^4.3.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= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^3.0.0: version "3.0.1" @@ -1949,7 +1657,7 @@ ansi-regex@^5.0.1: ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1965,10 +1673,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -antlr4@4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" - integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== +antlr4@^4.11.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" + integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" @@ -1976,9 +1684,9 @@ antlr4ts@^0.5.0-alpha.4: integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== 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== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2003,7 +1711,7 @@ argparse@^2.0.1: 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= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -2013,12 +1721,12 @@ arr-flatten@^1.1.0: 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= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-back@^1.0.3, array-back@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" - integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= + integrity sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw== dependencies: typical "^2.6.0" @@ -2034,15 +1742,23 @@ array-back@^3.0.1, array-back@^3.1.0: resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-back@^4.0.1: +array-back@^4.0.1, array-back@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" @@ -2052,17 +1768,41 @@ array-union@^2.1.0: 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= + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== 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= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.reduce@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" + integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1.js@^5.2.0: version "5.4.1" @@ -2084,7 +1824,7 @@ asn1@~0.2.3: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assertion-error@^1.1.0: version "1.1.0" @@ -2094,24 +1834,19 @@ assertion-error@^1.1.0: 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= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -ast-parents@0.0.1: +ast-parents@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha1-UI/Q8F0MSHddnszaLhdEIyYejdM= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== astral-regex@^2.0.0: version "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-eventemitter@^0.2.4: +async-eventemitter@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -2126,7 +1861,7 @@ async-limiter@~1.0.0: async@1.x, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== async@2.6.2: version "2.6.2" @@ -2136,16 +1871,16 @@ async@2.6.2: lodash "^4.17.11" async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -2165,12 +1900,12 @@ available-typed-arrays@^1.0.5: aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== axios@^0.21.1: version "0.21.4" @@ -2190,7 +1925,7 @@ axios@^0.27.2: babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -2238,7 +1973,7 @@ babel-generator@^6.26.0: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -2247,7 +1982,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2257,7 +1992,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -2267,7 +2002,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -2276,7 +2011,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -2287,7 +2022,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2295,7 +2030,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2303,7 +2038,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2311,7 +2046,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -2320,7 +2055,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2331,7 +2066,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -2343,7 +2078,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2351,36 +2086,36 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== dependencies: babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -2389,21 +2124,21 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -2414,7 +2149,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -2429,7 +2164,7 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2437,14 +2172,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2452,14 +2187,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2468,14 +2203,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -2494,7 +2229,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2503,7 +2238,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -2512,7 +2247,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -2520,7 +2255,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -2532,7 +2267,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2540,14 +2275,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0: babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2556,21 +2291,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2579,7 +2314,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-exponentiation-operator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -2588,14 +2323,14 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2639,7 +2374,7 @@ babel-preset-env@^1.7.0: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -2652,7 +2387,7 @@ babel-register@^6.26.0: babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -2660,7 +2395,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -2671,7 +2406,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -2686,7 +2421,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -2696,7 +2431,7 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: babelify@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" - integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + integrity sha512-vID8Fz6pPN5pJMdlUnNFSfrlcx5MUule4k9aKs/zbZPyXxMTcRrB0M4Tarw22L8afr8eYSWxDPYCob3TdrqtlA== dependencies: babel-core "^6.0.14" object-assign "^4.0.0" @@ -2709,7 +2444,7 @@ babylon@^6.18.0: backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== dependencies: precond "0.2" @@ -2746,7 +2481,7 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" @@ -2755,15 +2490,15 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== -bignumber.js@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: version "2.2.0" @@ -2803,54 +2538,51 @@ bluebird@^3.5.0, bluebird@^3.5.2: bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: 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.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== - -bn.js@^5.2.1: +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, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" type-is "~1.6.18" + unpipe "1.0.0" body-parser@^1.16.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" + qs "6.11.0" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -2890,7 +2622,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2900,7 +2632,17 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" browser-stdout@1.3.1: version "1.3.1" @@ -2972,7 +2714,7 @@ browserslist@^3.2.6: bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" @@ -2998,12 +2740,12 @@ buffer-from@^1.0.0: buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer-xor@^2.0.1: version "2.0.2" @@ -3020,10 +2762,18 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +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" + bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== dependencies: node-gyp-build "^4.3.0" @@ -3032,6 +2782,13 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -3040,14 +2797,14 @@ bytes@3.1.2: bytewise-core@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" - integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== dependencies: typewise-core "^1.2" bytewise@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" - integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== dependencies: bytewise-core "^1.2.2" typewise "^1.0.3" @@ -3067,6 +2824,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -3080,10 +2847,23 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + cachedown@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" - integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + integrity sha512-t+yVk82vQWCJF3PsWHMld+jhhjkkWjcAzz8NbFx1iULOXWl8Tm/FdM4smZNVw3MRr0X+lVTx9PKzvEn4Ng19RQ== dependencies: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" @@ -3096,25 +2876,6 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3123,7 +2884,7 @@ callsites@^3.0.0: 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= + integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== camelcase@^5.0.0: version "5.3.1" @@ -3136,31 +2897,40 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30000844: - version "1.0.30001325" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" - integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== + version "1.0.30001533" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001533.tgz#1180daeb2518b93c82f19b904d1fefcf82197707" + integrity sha512-9aY/b05NKU4Yl2sbcJhn4A7MsGwR1EPfW/nrqsnqVA0Oq50wpmPaGI+R1Z0UKlUl96oxUkGEOILWtOHck0eCWw== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -cbor@^5.0.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== +catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" + nofilter "^3.1.0" chai@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" @@ -3169,7 +2939,7 @@ chai@^4.3.4: chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -3177,7 +2947,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3194,25 +2964,20 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 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= + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== dependencies: functional-red-black-tree "^1.0.1" @@ -3315,18 +3080,22 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classic-level@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-table3@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -3337,15 +3106,10 @@ cli-table3@^0.5.0: optionalDependencies: colors "^1.1.2" -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@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -3370,26 +3134,26 @@ cliui@^7.0.2: wrap-ansi "^7.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" clone@2.1.2, clone@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== 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= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== 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= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3411,7 +3175,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -3455,34 +3219,34 @@ command-line-args@^5.1.1: typical "^4.0.0" command-line-usage@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.2.tgz#2b7ccd48a93fb19bd71ca8fe9900feab00e557b0" - integrity sha512-I+0XN613reAhpBQ6icsPOTwu9cvhc9NtLtUcY2fGYuwm9JZiWBzFDA8w0PHqQjru7Xth7fM/y9TJ13+VKdjh7Q== + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== dependencies: - array-back "^4.0.1" + array-back "^4.0.2" chalk "^2.4.2" - table-layout "^1.0.1" + table-layout "^1.0.2" typical "^5.2.0" -commander@2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" - integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== - commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.12.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^9.2.0, commander@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" - integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== component-emitter@^1.2.1: version "1.3.0" @@ -3492,7 +3256,7 @@ component-emitter@^1.2.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" @@ -3520,17 +3284,15 @@ content-hash@^2.5.2: multicodec "^0.5.5" multihashes "^0.4.15" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.5.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-svg-core@^0.6.4: version "0.6.4" @@ -3559,9 +3321,14 @@ convert-svg-to-png@^0.6.4: cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@0.4.2, cookie@^0.4.1: +cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== @@ -3574,12 +3341,12 @@ cookiejar@^2.1.1: 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= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-js-pure@^3.0.1: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" - integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.2.tgz#b7dbdac528625cf87eb0523b532eb61551b9a6d1" + integrity sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -3589,7 +3356,7 @@ core-js@^2.4.0, core-js@^2.5.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= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -3604,15 +3371,15 @@ cors@^2.8.1: object-assign "^4" vary "^1" -cosmiconfig@^5.0.7: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^8.0.0: + version "8.3.5" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.5.tgz#3b3897ddd042d022d5a207d4c8832e54f5301977" + integrity sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" crc-32@^1.2.0: version "1.2.2" @@ -3670,6 +3437,13 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "^2.6.7" whatwg-fetch "^2.0.4" +cross-fetch@^3.1.4: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3693,7 +3467,7 @@ cross-spawn@^7.0.2: "crypt@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== crypto-browserify@3.12.0: version "3.12.0" @@ -3739,16 +3513,16 @@ d@1, d@^1.0.1: dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" death@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3769,13 +3543,6 @@ debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, de dependencies: ms "2.1.2" -debug@4.3.3, debug@^4.0.1: - 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" - debug@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3786,7 +3553,7 @@ debug@^3.1.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= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decamelize@^4.0.0: version "4.0.0" @@ -3798,17 +3565,24 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.2.0, decompress-response@^3.3.0: +decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" @@ -3839,6 +3613,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + deferred-leveldown@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" @@ -3854,40 +3633,25 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" -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 "~6.2.1" - inherits "^2.0.3" - -define-properties@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - 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= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== 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= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -3899,30 +3663,25 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= +defined@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -3932,25 +3691,20 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== dependencies: repeating "^2.0.0" detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== dependencies: address "^1.0.1" - debug "^2.6.0" + debug "4" devtools-protocol@0.0.981744: version "0.0.981744" @@ -4014,7 +3768,7 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== @@ -4022,13 +3776,13 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" dotenv@^16.3.1: version "16.3.1" @@ -4043,14 +3797,14 @@ dotignore@~0.1.2: minimatch "^3.0.4" duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4058,12 +3812,12 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.3.47: - version "1.4.103" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz#abfe376a4d70fa1e1b4b353b95df5d6dfd05da3a" - integrity sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg== + version "1.4.515" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.515.tgz#f5fec9662106ac5752894af221606cf4db443e70" + integrity sha512-VTq6vjk3kCfG2qdzQRd/i9dIyVVm0dbtZIgFzrLgfB73mXDQT2HPKVRc1EoZcAVUv9XhXAu08DWqJuababdGGg== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" @@ -4078,11 +3832,6 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.0.0.tgz#96559e19f82231b436403e059571241d627c42b8" - integrity sha512-KmJa8l6uHi1HrBI34udwlzZY1jOEuID/ft4d8BSSEdRyap7PwBEt910453PJa5MuGvxkLqlt4Uvhu7tttFHViw== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -4101,7 +3850,7 @@ encode-utf8@^1.0.2: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding-down@5.0.4, encoding-down@~5.0.0: version "5.0.4" @@ -4112,17 +3861,7 @@ encoding-down@5.0.4, encoding-down@~5.0.0: inherits "^2.0.3" level-codec "^9.0.0" level-errors "^2.0.0" - xtend "^4.0.1" - -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 "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" + xtend "^4.0.1" encoding@^0.1.11: version "0.1.13" @@ -4139,16 +3878,17 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enquirer@^2.3.0, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== env-paths@^2.2.0: version "2.2.1" @@ -4169,57 +3909,64 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.5: - 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" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - 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.1" - -es-abstract@^1.19.1: - version "1.19.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" - integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== +es-abstract@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.0" + object-inspect "^1.12.3" 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.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -4231,9 +3978,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.59" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6" - integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw== + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" @@ -4242,12 +3989,17 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: 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= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + 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" @@ -4264,12 +4016,12 @@ escalade@^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" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -4279,7 +4031,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== dependencies: esprima "^2.7.1" estraverse "^1.9.1" @@ -4289,9 +4041,9 @@ escodegen@1.8.x: source-map "~0.2.0" eslint-config-prettier@^8.3.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-plugin-mocha@^9.0.0: version "9.0.0" @@ -4308,14 +4060,6 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - 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" @@ -4324,21 +4068,14 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -4346,144 +4083,86 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.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.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.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^5.6.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.23.1: - version "8.23.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc" - integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== - dependencies: - "@eslint/eslintrc" "^1.3.2" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + version "8.49.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" + integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.49.0" + "@humanwhocodes/config-array" "^0.11.11" "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-sdsl "^4.1.4" + is-path-inside "^3.0.3" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -4493,7 +4172,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== estraverse@^4.1.1: version "4.3.0" @@ -4513,7 +4192,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eth-block-tracker@^3.0.0: version "3.0.1" @@ -4531,12 +4210,12 @@ eth-block-tracker@^3.0.0: eth-ens-namehash@2.0.8, 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= + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== dependencies: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.24: +eth-gas-reporter@^0.2.25: version "0.2.25" resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== @@ -4610,7 +4289,7 @@ eth-lib@^0.1.26: eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== dependencies: json-rpc-random-id "^1.0.0" xtend "^4.0.1" @@ -4630,7 +4309,7 @@ eth-sig-util@3.0.0: eth-sig-util@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" - integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== dependencies: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" @@ -4676,9 +4355,9 @@ ethereum-common@0.2.0: ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== -ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4700,14 +4379,24 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz#b1f8f4e702434b2016248dbb2f9fdd60c54772d8" - integrity sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== dependencies: - "@noble/hashes" "1.0.0" - "@noble/secp256k1" "1.5.5" - "@scure/bip32" "1.0.1" - "@scure/bip39" "1.0.0" + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" ethereum-waffle@^3.4.0: version "3.4.4" @@ -4723,7 +4412,7 @@ ethereum-waffle@^3.4.0: ethereumjs-abi@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" - integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + integrity sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g== dependencies: bn.js "^4.10.0" ethereumjs-util "^4.3.0" @@ -4862,21 +4551,10 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10: - 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" - rlp "^2.2.4" - -ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" - integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" @@ -4952,43 +4630,7 @@ ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.1, ethers@^5.0.2: - version "5.6.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.2.tgz#e75bac7f038c5e0fdde667dba62fc223924143a2" - integrity sha512-EzGCbns24/Yluu7+ToWnMca3SXJ1Jk1BvWB7CCmVNxyOeM4LLvw2OLuIHhlkhQk1dtOcj9UMsdkxUh8RiG1dxQ== - dependencies: - "@ethersproject/abi" "5.6.0" - "@ethersproject/abstract-provider" "5.6.0" - "@ethersproject/abstract-signer" "5.6.0" - "@ethersproject/address" "5.6.0" - "@ethersproject/base64" "5.6.0" - "@ethersproject/basex" "5.6.0" - "@ethersproject/bignumber" "5.6.0" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.0" - "@ethersproject/contracts" "5.6.0" - "@ethersproject/hash" "5.6.0" - "@ethersproject/hdnode" "5.6.0" - "@ethersproject/json-wallets" "5.6.0" - "@ethersproject/keccak256" "5.6.0" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.1" - "@ethersproject/pbkdf2" "5.6.0" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.2" - "@ethersproject/random" "5.6.0" - "@ethersproject/rlp" "5.6.0" - "@ethersproject/sha2" "5.6.0" - "@ethersproject/signing-key" "5.6.0" - "@ethersproject/solidity" "5.6.0" - "@ethersproject/strings" "5.6.0" - "@ethersproject/transactions" "5.6.0" - "@ethersproject/units" "5.6.0" - "@ethersproject/wallet" "5.6.0" - "@ethersproject/web" "5.6.0" - "@ethersproject/wordlists" "5.6.0" - -ethers@^5.1.0: +ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.0, ethers@^5.5.2, ethers@^5.5.3, ethers@^5.6.9, ethers@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -5024,82 +4666,10 @@ ethers@^5.1.0: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -ethers@^5.5.2: - version "5.6.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.4.tgz#23629e9a7d4bc5802dfb53d4da420d738744b53c" - integrity sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ== - dependencies: - "@ethersproject/abi" "5.6.1" - "@ethersproject/abstract-provider" "5.6.0" - "@ethersproject/abstract-signer" "5.6.0" - "@ethersproject/address" "5.6.0" - "@ethersproject/base64" "5.6.0" - "@ethersproject/basex" "5.6.0" - "@ethersproject/bignumber" "5.6.0" - "@ethersproject/bytes" "5.6.1" - "@ethersproject/constants" "5.6.0" - "@ethersproject/contracts" "5.6.0" - "@ethersproject/hash" "5.6.0" - "@ethersproject/hdnode" "5.6.0" - "@ethersproject/json-wallets" "5.6.0" - "@ethersproject/keccak256" "5.6.0" - "@ethersproject/logger" "5.6.0" - "@ethersproject/networks" "5.6.2" - "@ethersproject/pbkdf2" "5.6.0" - "@ethersproject/properties" "5.6.0" - "@ethersproject/providers" "5.6.4" - "@ethersproject/random" "5.6.0" - "@ethersproject/rlp" "5.6.0" - "@ethersproject/sha2" "5.6.0" - "@ethersproject/signing-key" "5.6.0" - "@ethersproject/solidity" "5.6.0" - "@ethersproject/strings" "5.6.0" - "@ethersproject/transactions" "5.6.0" - "@ethersproject/units" "5.6.0" - "@ethersproject/wallet" "5.6.0" - "@ethersproject/web" "5.6.0" - "@ethersproject/wordlists" "5.6.0" - -ethers@^5.6.9: - version "5.7.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" - integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.0" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.0" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.0" - "@ethersproject/wordlists" "5.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== dependencies: bn.js "4.11.6" number-to-bn "1.7.0" @@ -5112,11 +4682,6 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -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@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -5138,7 +4703,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 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= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5149,59 +4714,60 @@ expand-brackets@^2.1.4: to-regex "^3.0.1" express@^4.14.0: - version "4.17.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.2" + body-parser "1.20.1" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.2" + cookie "0.5.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.9.7" + qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.17.2" - serve-static "1.14.2" + send "0.18.0" + serve-static "1.15.0" setprototypeof "1.2.0" - statuses "~1.5.0" + statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: - type "^2.5.0" + type "^2.7.2" 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= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== 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= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -5211,15 +4777,6 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - 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" @@ -5248,7 +4805,7 @@ extract-zip@2.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= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" @@ -5258,7 +4815,7 @@ extsprintf@^1.2.0: 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= + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== dependencies: checkpoint-store "^1.1.0" @@ -5267,26 +4824,15 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^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== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.3: - 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.2" - merge2 "^1.3.0" - micromatch "^4.0.4" +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5302,12 +4848,12 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" @@ -5321,24 +4867,10 @@ fd-slicer@~1.1.0: fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== dependencies: node-fetch "~1.7.1" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - 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" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5354,7 +4886,7 @@ file-url@^3.0.0: 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= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5368,23 +4900,23 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" - statuses "~1.5.0" + statuses "2.0.1" unpipe "~1.0.0" find-replace@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" - integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= + integrity sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA== dependencies: array-back "^1.0.4" test-value "^2.1.0" @@ -5414,7 +4946,7 @@ find-up@5.0.0, find-up@^5.0.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= + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -5422,7 +4954,7 @@ find-up@^1.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= + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" @@ -5449,21 +4981,13 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" flat@^4.1.0: @@ -5478,12 +5002,7 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flatted@^3.1.0: +flatted@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== @@ -5491,24 +5010,19 @@ flatted@^3.1.0: 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= + integrity sha512-rDjbZUKpN8OYhB0IE/vY/I8UWO/602IIJEU/76Tv4LvYnwHCk0BCsvz4eRr9n+FQcri7L5cyaXOo0+/Kh4HisA== fmix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== dependencies: imul "^1.0.0" -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== - -follow-redirects@^1.14.9: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" @@ -5520,17 +5034,17 @@ for-each@^0.3.3, for-each@~0.3.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" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== form-data@^2.2.0: version "2.5.1" @@ -5586,14 +5100,14 @@ fp-ts@^1.0.0: 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= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" @@ -5603,7 +5117,7 @@ fs-constants@^1.0.0: fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -5612,9 +5126,9 @@ fs-extra@^0.30.0: rimraf "^2.2.8" fs-extra@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" - integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5647,7 +5161,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5672,7 +5186,7 @@ fs-readdir-recursive@^1.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.1.1: version "2.1.3" @@ -5680,19 +5194,34 @@ fsevents@~2.1.1: integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 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== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== ganache-core@^2.13.2: version "2.13.2" @@ -5744,32 +5273,28 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -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== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-proto "^1.0.1" + has-symbols "^1.0.3" get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== get-stdin@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5784,6 +5309,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + 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" @@ -5795,12 +5325,12 @@ get-symbol-description@^1.0.0: 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= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -5819,7 +5349,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -5850,7 +5380,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@~7.2.0: +glob@7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5865,7 +5395,7 @@ glob@7.2.0, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@~7.2.0: glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== dependencies: inflight "^1.0.4" inherits "2" @@ -5873,7 +5403,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.1: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5885,10 +5415,10 @@ glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +glob@^8.0.1, glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5920,15 +5450,10 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" @@ -5937,6 +5462,13 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^10.0.1: version "10.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -5963,6 +5495,32 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -5980,35 +5538,32 @@ got@9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== growl@1.10.5: version "1.10.5" @@ -6016,12 +5571,12 @@ growl@1.10.5: integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -6030,7 +5585,7 @@ handlebars@^4.0.1: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -6041,59 +5596,65 @@ har-validator@~5.1.3: har-schema "^2.0.0" hardhat-deploy@^0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.4.tgz#39b06d3b0ad25195071cc1f2f71649b1f9f030d0" - integrity sha512-BNMwWqaxrwb8XKrYzmCwnUzOSKzicUBk+fwd28doUNoAGFFh8kpoypkcHMzKDVdLhnamAardcfqJet73zrZoTA== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.1" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.1" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/contracts" "^5.4.1" - "@ethersproject/providers" "^5.4.4" - "@ethersproject/solidity" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wallet" "^5.4.0" + version "0.11.37" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz#6a771b859c82ae25292321a6d510d7c0eda09d2b" + integrity sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" "@types/qs" "^6.9.7" axios "^0.21.1" chalk "^4.1.2" chokidar "^3.5.2" debug "^4.3.2" enquirer "^2.3.6" + ethers "^5.5.3" form-data "^4.0.0" fs-extra "^10.0.0" match-all "^1.2.6" murmur-128 "^0.2.1" qs "^6.9.4" + zksync-web3 "^0.14.3" hardhat-gas-reporter@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" - integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== + version "1.0.9" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== dependencies: array-uniq "1.0.3" - eth-gas-reporter "^0.2.24" + eth-gas-reporter "^0.2.25" sha1 "^1.1.1" hardhat@^2.6.6: - version "2.9.3" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.3.tgz#4759dc3c468c7d15f34334ca1be7d59b04e47b1e" - integrity sha512-7Vw99RbYbMZ15UzegOR/nqIYIqddZXvLwJGaX5sX4G5bydILnbjmDU6g3jMKJSiArEixS3vHAEaOs5CW1JQ3hg== - 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" + version "2.17.3" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.17.3.tgz#4cb15f2afdea5f108970ed72e5b81e6e53052cfb" + integrity sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA== + dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.14.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" @@ -6103,55 +5664,51 @@ hardhat@^2.6.6: debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" - ethereum-cryptography "^0.1.2" + ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "^7.1.3" + glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + keccak "^3.0.2" lodash "^4.17.11" - merkle-patricia-tree "^4.2.2" mnemonist "^0.38.0" - mocha "^9.2.0" + mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - slash "^3.0.0" solc "0.7.3" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" tsort "0.0.1" - undici "^4.14.1" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -6165,23 +5722,16 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - 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" @@ -6192,7 +5742,7 @@ has-tostringtag@^1.0.0: 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= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -6201,7 +5751,7 @@ has-value@^0.3.1: 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= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -6210,12 +5760,12 @@ has-value@^1.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= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== 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= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -6260,12 +5810,12 @@ he@1.2.0: heap@0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" - integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + integrity sha512-MzzWcnfB1e4EG2vHi3dXHoBupmuXNZzx6pY6HldVS55JKKBoq3xOyzfSaZRkJp37HIhEYC78knabHff3zc4dQQ== 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= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -6274,7 +5824,7 @@ hmac-drbg@^1.0.1: home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -6285,14 +5835,14 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" - domhandler "^5.0.2" + domhandler "^5.0.3" domutils "^3.0.1" - entities "^4.3.0" + entities "^4.4.0" http-basic@^8.1.1: version "8.1.3" @@ -6309,17 +5859,6 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -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@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6334,7 +5873,7 @@ http-errors@2.0.0: http-https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== http-response-object@^3.0.1: version "3.0.2" @@ -6346,13 +5885,29 @@ http-response-object@^3.0.1: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@5.0.1: +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6360,15 +5915,7 @@ https-proxy-agent@5.0.1: agent-base "6" debug "4" -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" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6389,20 +5936,15 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +ieee754@^1.1.13, 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== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immediate@^3.2.3: version "3.3.0" @@ -6412,22 +5954,14 @@ immediate@^3.2.3: immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== immutable@^4.0.0-rc.12: - 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" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -6438,12 +5972,12 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imul@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -6453,7 +5987,7 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -6468,31 +6002,12 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - 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== +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -6511,7 +6026,7 @@ invariant@^2.2.2: 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= + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== io-ts@1.10.4: version "1.10.4" @@ -6528,7 +6043,7 @@ ipaddr.js@1.9.1: 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= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -6547,10 +6062,19 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" @@ -6579,41 +6103,34 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@~2.0.3: +is-buffer@^2.0.5, 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.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-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0, is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" + ci-info "^2.0.0" -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== 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= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -6649,11 +6166,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: 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-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -6662,7 +6174,7 @@ is-docker@^2.0.0: 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= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -6674,7 +6186,7 @@ is-extendable@^1.0.1: 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= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.0: version "1.1.0" @@ -6684,19 +6196,19 @@ is-finite@^1.0.0: is-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== 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= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== 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" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6725,9 +6237,9 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== -is-negative-zero@^2.0.1, is-negative-zero@^2.0.2: +is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -6742,7 +6254,7 @@ is-number-object@^1.0.4: 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= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -6751,15 +6263,10 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^2.1.0: version "2.1.0" @@ -6781,22 +6288,17 @@ is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: 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: +is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" -is-stream@^1.0.0, is-stream@^1.0.1: +is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" @@ -6812,21 +6314,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -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== +is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.11" 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= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" @@ -6841,9 +6339,9 @@ is-url@^1.2.4: 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= + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -is-weakref@^1.0.1, is-weakref@^1.0.2: +is-weakref@^1.0.2: 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== @@ -6865,42 +6363,39 @@ is-wsl@^2.1.1: 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= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== 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= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 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= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== 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= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 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= - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== js-graph-algorithms@^1.0.18: version "1.0.18" @@ -6908,14 +6403,14 @@ js-graph-algorithms@^1.0.18: integrity sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA== js-sdsl@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" - integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== js-sha3@0.5.7, js-sha3@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" @@ -6930,7 +6425,7 @@ js-sha3@0.8.0, js-sha3@^0.8.0: js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-yaml@3.13.1: version "3.13.1" @@ -6940,7 +6435,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@3.x, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -6958,27 +6453,32 @@ js-yaml@4.1.0, js-yaml@^4.1.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== -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-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +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-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: version "3.8.0" @@ -6995,14 +6495,14 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" - integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + integrity sha512-EwUeWP+KgAZ/xqFpaP6YDAXMtCJi+o/QQpCQFIYyxr01AdADi2y413eM8hSqJcoQym9WMePAJWoaODEJufC4Ug== dependencies: inherits "^2.0.1" json-rpc-random-id@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== json-schema-traverse@^0.4.1: version "0.4.1" @@ -7022,36 +6522,36 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" + integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== dependencies: - jsonify "~0.0.0" + jsonify "^0.0.1" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -7064,15 +6564,15 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== jsonschema@^1.2.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== jsprim@^1.2.2: version "1.4.2" @@ -7092,10 +6592,10 @@ keccak@3.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -keccak@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" @@ -7108,17 +6608,24 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + 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= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== 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= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -7142,19 +6649,19 @@ klaw-sync@^6.0.0: klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: graceful-fs "^4.1.9" klaw@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-4.0.1.tgz#8dc6f5723f05894e8e931b516a8ff15c2976d368" - integrity sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-4.1.0.tgz#5df608067d8cb62bbfb24374f8e5d956323338f3" + integrity sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== dependencies: invert-kv "^1.0.0" @@ -7170,11 +6677,6 @@ level-codec@~7.0.0: resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== -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@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" @@ -7208,7 +6710,7 @@ level-iterator-stream@^2.0.3: 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= + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== dependencies: inherits "^2.0.1" level-errors "^1.0.3" @@ -7224,15 +6726,6 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" -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.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" @@ -7241,22 +6734,6 @@ level-mem@^3.0.1: level-packager "~4.0.0" memdown "~3.0.0" -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 "^5.0.3" - memdown "^5.0.0" - -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 "^6.3.0" - levelup "^4.3.2" - level-packager@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" @@ -7288,17 +6765,23 @@ level-sublevel@6.6.4: typewiselite "~1.0.0" xtend "~4.0.0" -level-supports@~1.0.0: +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: - xtend "^4.0.2" + buffer "^6.0.3" + module-error "^1.0.1" 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= + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== dependencies: readable-stream "~1.0.15" xtend "~2.1.1" @@ -7312,14 +6795,13 @@ level-ws@^1.0.0: readable-stream "^2.2.8" xtend "^4.0.1" -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== +level@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== dependencies: - inherits "^2.0.3" - readable-stream "^3.1.0" - xtend "^4.0.1" + browser-level "^1.0.1" + classic-level "^1.2.0" levelup@3.1.1, levelup@^3.0.0: version "3.1.1" @@ -7344,37 +6826,31 @@ levelup@^1.2.1: semver "~5.4.1" xtend "~4.0.0" -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== +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" + prelude-ls "^1.2.1" + type-check "~0.4.0" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 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= + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -7385,7 +6861,7 @@ load-json-file@^1.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -7415,12 +6891,12 @@ locate-path@^6.0.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= + integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.merge@^4.6.2: version "4.6.2" @@ -7447,7 +6923,7 @@ lodash@4.17.20: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7470,12 +6946,12 @@ log-symbols@4.1.0: looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" - integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + integrity sha512-6DzMHJcjbQX/UPHc1rRCBfKlLwDkvuGZ715cIR36wSdYqWXFT35uLXq5P/2orl3tz+t+VOVPxw4yPinQlUDGDQ== looper@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" - integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + integrity sha512-LJ9wplN/uSn72oJRsXTx+snxPet5c8XiZmOKCm906NVYu+ag6SB6vUcnJcWxgnl2NfbIyeobAn7Bwv6xRj2XJg== loose-envify@^1.0.0: version "1.4.0" @@ -7485,9 +6961,9 @@ loose-envify@^1.0.0: js-tokens "^3.0.0 || ^4.0.0" loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" @@ -7501,6 +6977,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@5.1.1, lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7511,7 +6992,7 @@ lru-cache@5.1.1, lru-cache@^5.1.1: lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + integrity sha512-91gyOKTc2k66UG6kHiH4h3S2eltcPwE1STVfMYC/NG+nZwf8IIuiamfmpGZjpbbxzSyEJaLC0tNSmhjlQUTJow== dependencies: pseudomap "^1.0.1" @@ -7525,17 +7006,17 @@ lru-cache@^6.0.0: lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== ltgt@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" - integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + integrity sha512-5VjHC5GsENtIi5rbJd+feEpDKhfr7j0odoUR2Uh978g+2p93nd5o34cTjQWohXsPsCZeqoDnIqEf88mPCe0Pfw== make-error@^1.1.1: version "1.3.6" @@ -7545,12 +7026,12 @@ make-error@^1.1.1: 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= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== 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= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -7581,12 +7062,12 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== dependencies: abstract-leveldown "~2.7.1" functional-red-black-tree "^1.0.1" @@ -7595,18 +7076,6 @@ memdown@^1.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" -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 "~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.2.0" - memdown@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" @@ -7619,15 +7088,24 @@ memdown@~3.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" @@ -7661,22 +7139,15 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" - integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.4" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - 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= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== micromatch@^3.1.4: version "3.1.10" @@ -7697,7 +7168,7 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7705,14 +7176,6 @@ micromatch@^4.0.2: braces "^3.0.2" picomatch "^2.3.1" -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.2.3" - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7738,20 +7201,20 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" @@ -7763,40 +7226,40 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^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= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"minimatch@2 || 3", minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" @@ -7829,29 +7292,34 @@ mkdirp-classic@^0.5.2: mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== -mkdirp@0.5.5, mkdirp@0.5.x: +mkdirp@0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -7859,6 +7327,33 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" +mocha@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + mocha@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" @@ -7889,45 +7384,20 @@ mocha@^7.1.1: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^9.2.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - mock-fs@^4.1.0: version "4.14.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.1: version "2.1.1" @@ -7993,20 +7463,15 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - 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= + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== nanomatch@^1.2.9: version "1.2.13" @@ -8025,17 +7490,27 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.0: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -8070,13 +7545,20 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -8086,19 +7568,19 @@ node-fetch@~1.7.1: is-stream "^1.0.1" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== -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@^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" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== dependencies: abbrev "1" @@ -8122,6 +7604,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -8132,12 +7619,12 @@ nth-check@^2.0.1: 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= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== 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" - integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== dependencies: bn.js "4.11.6" strip-hex-prefix "1.0.0" @@ -8150,21 +7637,21 @@ oauth-sign@~0.9.0: object-assign@^4, object-assign@^4.0.0, 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= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 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= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.12.3, object-inspect@^1.9.0, object-inspect@~1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1: version "1.1.5" @@ -8174,7 +7661,7 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.11, 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== @@ -8182,12 +7669,12 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 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= + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== 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= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" @@ -8201,48 +7688,50 @@ object.assign@4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.6: + version "2.1.7" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" + integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== dependencies: + array.prototype.reduce "^1.0.6" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.2.0" + es-abstract "^1.22.1" + safe-array-concat "^1.0.0" 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= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" obliterator@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.2.tgz#25f50dc92e1181371b9d8209d11890f1a3c2fc21" - integrity sha512-g0TrA7SbUggROhDPK8cEu/qpItwH2LSKcNl4tlfBNT54XY+nOsqrs0Q68h1V9b3HOSpIWv15jb1lax2hAggdIg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + integrity sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ== dependencies: http-https "^1.0.0" oboe@2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== dependencies: http-https "^1.0.0" @@ -8253,27 +7742,13 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -8282,7 +7757,7 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -8294,49 +7769,49 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== 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= + integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== dependencies: lcid "^1.0.0" os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-limit@^1.1.0: version "1.3.0" @@ -8362,7 +7837,7 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" @@ -8394,17 +7869,10 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" @@ -8432,7 +7900,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-cache-control@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha1-juqz5U+laSD+Fro493+iGqzC104= + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== parse-headers@^2.0.0: version "2.0.5" @@ -8442,17 +7910,19 @@ parse-headers@^2.0.0: 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= + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= +parse-json@^5.2.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-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" @@ -8463,9 +7933,9 @@ parse5-htmlparser2-tree-adapter@^7.0.0: parse5 "^7.0.0" parse5@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" @@ -8477,7 +7947,7 @@ parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== patch-package@6.2.2: version "6.2.2" @@ -8498,23 +7968,24 @@ patch-package@6.2.2: tmp "^0.0.33" patch-package@^6.2.2, patch-package@^6.4.7: - version "6.4.7" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" - integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + version "6.5.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" + integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== dependencies: "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" + chalk "^4.1.2" cross-spawn "^6.0.5" find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" + fs-extra "^9.0.0" is-ci "^2.0.0" klaw-sync "^6.0.0" - minimist "^1.2.0" + minimist "^1.2.6" open "^7.4.2" rimraf "^2.6.3" semver "^5.6.0" slash "^2.0.0" tmp "^0.0.33" + yaml "^1.10.2" path-browserify@^1.0.0: version "1.0.1" @@ -8524,14 +7995,14 @@ path-browserify@^1.0.0: 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= + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== 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" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8541,17 +8012,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.1.0: version "3.1.1" @@ -8566,12 +8032,12 @@ path-parse@^1.0.6, path-parse@^1.0.7: 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= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 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= + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -8606,9 +8072,9 @@ pend@~1.2.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8616,7 +8082,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: version "4.0.1" @@ -8626,14 +8092,14 @@ pify@^4.0.1: 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= + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: 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= + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pkg-dir@4.2.0: version "4.2.0" @@ -8642,6 +8108,11 @@ pkg-dir@4.2.0: dependencies: find-up "^4.0.0" +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + pollock@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/pollock/-/pollock-0.2.1.tgz#01273ae3542511492d07f1c10fa53f149b37c6ad" @@ -8650,7 +8121,7 @@ pollock@^0.2.0: 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= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postinstall-postinstall@^2.1.0: version "2.1.0" @@ -8660,7 +8131,7 @@ postinstall-postinstall@^2.1.0: precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== prelude-ls@^1.2.1: version "1.2.1" @@ -8670,17 +8141,12 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -8690,31 +8156,18 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier-plugin-solidity@^1.0.0-beta.19: - version "1.0.0-beta.19" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz#7c3607fc4028f5e6a425259ff03e45eedf733df3" - integrity sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g== + version "1.1.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== dependencies: - "@solidity-parser/parser" "^0.14.0" - emoji-regex "^10.0.0" - escape-string-regexp "^4.0.0" - semver "^7.3.5" + "@solidity-parser/parser" "^0.16.0" + semver "^7.3.8" solidity-comments-extractor "^0.0.7" - string-width "^4.2.3" -prettier@^1.14.3: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -prettier@^2.1.2, prettier@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== - -prettier@^2.5.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^2.1.2, prettier@^2.3.1, prettier@^2.5.1, prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== private@^0.1.6, private@^0.1.8: version "0.1.8" @@ -8729,9 +8182,9 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@2.0.3, progress@^2.0.0: +progress@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -8739,15 +8192,15 @@ progress@2.0.3, progress@^2.0.0: promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== dependencies: is-fn "^1.0.0" set-immediate-shim "^1.0.1" promise@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -8767,17 +8220,17 @@ proxy-from-env@1.1.0: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -8794,7 +8247,7 @@ public-encrypt@^4.0.0: pull-cat@^1.1.9: version "1.1.11" resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" - integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + integrity sha512-i3w+xZ3DCtTVz8S62hBOuNLRHqVDsHMNZmgrZsjPnsxXUgbWtXEee84lo1XswE7W2a3WHyqsNuDJTjVLAQR8xg== pull-defer@^0.2.2: version "0.2.3" @@ -8817,7 +8270,7 @@ pull-level@^2.0.3: pull-live@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" - integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + integrity sha512-tkNz1QT5gId8aPhV5+dmwoIiA1nmfDOzJDlOOUpU5DNusj6neNd3EePybJ5+sITr2FwyCs/FVpx74YMCfc8YeA== dependencies: pull-cat "^1.1.9" pull-stream "^3.4.0" @@ -8825,17 +8278,17 @@ pull-live@^1.0.1: pull-pushable@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" - integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + integrity sha512-M7dp95enQ2kaHvfCt2+DJfyzgCSpWVR2h2kWYnVsW6ZpxQBx5wOu0QWOvQPVoPnBLUZYitYP2y7HyHkLQNeGXg== pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: - version "3.6.14" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" - integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + version "3.7.0" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.7.0.tgz#85de0e44ff38a4d2ad08cc43fc458e1922f9bf0b" + integrity sha512-Eco+/R004UaCK2qEDE8vGklcTG2OeZSVm1kTUQNrykEjDwcFXDZhygFDsW49DbXyJMEhHeRL3z5cRVqPAhXlIw== pull-window@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" - integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + integrity sha512-cbDzN76BMlcGG46OImrgpkMf/VkCnupj8JhsrpBw3aWBM9ye345aYnqitmZCgauBkc0HbbRRn9hCnsa3k2FNUg== dependencies: looper "^2.0.0" @@ -8847,20 +8300,20 @@ 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= + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== 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== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== puppeteer@^13.7.0: version "13.7.0" @@ -8880,17 +8333,19 @@ puppeteer@^13.7.0: unbzip2-stream "1.4.3" ws "8.5.0" -qs@6.10.3, qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" -qs@6.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== +qs@^6.11.2, qs@^6.4.0, qs@^6.9.4: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" qs@~6.5.2: version "6.5.3" @@ -8906,16 +8361,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -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: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + ramda@^0.27.1: version "0.27.2" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" @@ -8941,20 +8396,20 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" - http-errors "1.8.1" + http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.1, raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2, raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -8964,7 +8419,7 @@ raw-body@2.5.1, raw-body@^2.4.1: 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= + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -8972,7 +8427,7 @@ read-pkg-up@^1.0.1: 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= + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -8981,7 +8436,7 @@ read-pkg@^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= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8989,9 +8444,9 @@ readable-stream@^1.0.33: string_decoder "~0.10.x" readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.6, 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== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9001,10 +8456,10 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, 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== +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -9013,7 +8468,7 @@ readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, readable 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= + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -9037,16 +8492,16 @@ readdirp@~3.6.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== dependencies: - minimatch "3.0.4" + minimatch "^3.0.5" reduce-flatten@^2.0.0: version "2.0.0" @@ -9080,28 +8535,19 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - -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.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + define-properties "^1.2.0" + functions-have-names "^1.2.3" regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -9110,12 +8556,12 @@ regexpu-core@^2.0.0: regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== dependencies: jsesc "~0.5.0" @@ -9127,26 +8573,26 @@ repeat-element@^1.1.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= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== dependencies: is-finite "^1.0.0" req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha1-1AgrTURZgDZkD7c93qAe1T20nrw= + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== dependencies: req-from "^2.0.0" req-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA= + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== dependencies: resolve-from "^3.0.0" @@ -9195,12 +8641,12 @@ request@^2.79.0, request@^2.85.0, request@^2.88.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 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= + integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" @@ -9210,17 +8656,22 @@ require-from-string@^2.0.0, require-from-string@^2.0.2: 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= + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== 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" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -9230,12 +8681,12 @@ resolve-from@^4.0.0: 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= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== resolve@1.17.0: version "1.17.0" @@ -9244,51 +8695,33 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.8.1, resolve@~1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1, resolve@~1.22.1: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.3.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" + lowercase-keys "^2.0.0" resumer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== dependencies: through "~2.3.4" @@ -9302,13 +8735,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -9338,10 +8764,12 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" run-parallel@^1.1.9: version "1.2.0" @@ -9355,12 +8783,15 @@ 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: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== +safe-array-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: - tslib "^1.9.0" + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" safe-buffer@5.2.1, 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" @@ -9379,10 +8810,19 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + 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= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -9424,7 +8864,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" - integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= + integrity sha512-aldIRgMozSJ/Gl6K6qmJZysRP82lz83Wb42vl4PWN8SaLFHIaOzLPc9nUUW2jQN88CuGm5q5HefJ9jZ3nWSmTw== dependencies: pbkdf2 "^3.0.3" @@ -9442,37 +8882,25 @@ seedrandom@3.0.1: resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== -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= - semaphore@>=1.0.1, semaphore@^1.0.3, 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@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== +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@^7.3.4, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -9481,24 +8909,24 @@ semver@~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.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "1.8.1" + http-errors "2.0.0" mime "1.6.0" ms "2.1.3" - on-finished "~2.3.0" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "2.0.1" serialize-javascript@6.0.0: version "6.0.0" @@ -9507,15 +8935,15 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.2" + send "0.18.0" servify@^0.1.12: version "0.1.12" @@ -9531,12 +8959,12 @@ servify@^0.1.12: set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -9551,12 +8979,12 @@ set-value@^2.0.0, set-value@^2.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= + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" @@ -9574,7 +9002,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: sha1@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== dependencies: charenc ">= 0.0.1" crypt ">= 0.0.1" @@ -9582,7 +9010,7 @@ sha1@^1.1.1: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -9596,7 +9024,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -9621,11 +9049,6 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -9643,7 +9066,7 @@ simple-get@^2.7.0: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== slash@^2.0.0: version "2.0.0" @@ -9655,15 +9078,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -9766,26 +9180,29 @@ solhint-plugin-prettier@^0.0.5: prettier-linter-helpers "^1.0.0" solhint@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" - integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== - dependencies: - "@solidity-parser/parser" "^0.14.1" - ajv "^6.6.1" - antlr4 "4.7.1" - ast-parents "0.0.1" - chalk "^2.4.2" - commander "2.18.0" - cosmiconfig "^5.0.7" - eslint "^5.6.0" - fast-diff "^1.1.2" - glob "^7.1.3" - ignore "^4.0.6" - js-yaml "^3.12.0" - lodash "^4.17.11" - semver "^6.3.0" + version "3.6.2" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.6.2.tgz#2b2acbec8fdc37b2c68206a71ba89c7f519943fe" + integrity sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ== + dependencies: + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" optionalDependencies: - prettier "^1.14.3" + prettier "^2.8.3" solidity-comments-extractor@^0.0.7: version "0.0.7" @@ -9793,9 +9210,9 @@ solidity-comments-extractor@^0.0.7: integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== solidity-coverage@^0.7.20: - version "0.7.20" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.20.tgz#246e9b0dd62f698bb8ddeecdcc46cab26c48b637" - integrity sha512-edOXTugUYdqxrtEnIn4vgrGjLPxdexcL0WD8LzAvVA3d1dwgcfRO3k8xQR02ZQnOnWMBi8Cqs0F+kAQQp3JW8g== + version "0.7.22" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.22.tgz#168f414be4c0f5303addcf3ab9714cf64f72c080" + integrity sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw== dependencies: "@solidity-parser/parser" "^0.14.0" "@truffle/provider" "^0.2.24" @@ -9858,7 +9275,7 @@ source-map-url@^0.4.0: source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" @@ -9868,14 +9285,14 @@ source-map@^0.6.0, source-map@^0.6.1: source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== 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== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -9894,9 +9311,9 @@ spdx-expression-parse@^3.0.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== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9908,7 +9325,7 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: version "1.17.0" @@ -9935,7 +9352,7 @@ stacktrace-parser@^0.1.10: 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= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9945,15 +9362,10 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"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" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== stream-to-pull-stream@^1.7.1: version "1.7.3" @@ -9963,10 +9375,15 @@ stream-to-pull-stream@^1.7.1: looper "^3.0.0" pull-stream "^3.2.3" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + 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= + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-format@^2.0.0: version "2.0.0" @@ -9976,13 +9393,13 @@ string-format@^2.0.0: 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= + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== 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.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", 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== @@ -10008,30 +9425,32 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@~1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" - integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== +string.prototype.trim@^1.2.7, string.prototype.trim@~1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -10043,7 +9462,7 @@ string_decoder@^1.1.1: 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= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -10055,14 +9474,14 @@ string_decoder@~1.1.1: 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= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" @@ -10083,23 +9502,23 @@ strip-ansi@^6.0.0, strip-ansi@^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= + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1, strip-json-comments@^2.0.1: +strip-json-comments@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -10121,12 +9540,12 @@ supports-color@8.1.1: supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== dependencies: has-flag "^1.0.0" @@ -10150,15 +9569,15 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swarm-js@^0.1.40: - version "0.1.40" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" - integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== dependencies: bluebird "^3.5.0" buffer "^5.0.5" eth-lib "^0.1.26" fs-extra "^4.0.2" - got "^7.1.0" + got "^11.8.5" mime-types "^2.1.16" mkdirp-promise "^5.0.1" mock-fs "^4.1.0" @@ -10182,7 +9601,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -table-layout@^1.0.1: +table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== @@ -10192,20 +9611,10 @@ table-layout@^1.0.1: typical "^5.2.0" wordwrapjs "^4.0.0" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== +table@^6.8.0, table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -10214,24 +9623,24 @@ table@^6.8.0: strip-ansi "^6.0.1" tape@^4.6.3: - version "4.15.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.0.tgz#1b8a9563b4bc7e51302216c137732fb2ce6d1a99" - integrity sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ== + version "4.16.2" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.16.2.tgz#7565e6af20426565557266e9dda7215869b297b6" + integrity sha512-TUChV+q0GxBBCEbfCYkGLkv8hDJYjMdSWdE0/Lr331sB389dsvFUHNV9ph5iQqKzt8Ss9drzcda/YeexclBFqg== dependencies: call-bind "~1.0.2" deep-equal "~1.1.1" - defined "~1.0.0" + defined "~1.0.1" dotignore "~0.1.2" for-each "~0.3.3" - glob "~7.2.0" + glob "~7.2.3" has "~1.0.3" inherits "~2.0.4" is-regex "~1.1.4" - minimist "~1.2.5" - object-inspect "~1.12.0" - resolve "~1.22.0" + minimist "~1.2.7" + object-inspect "~1.12.3" + resolve "~1.22.1" resumer "~0.0.0" - string.prototype.trim "~1.2.5" + string.prototype.trim "~1.2.7" through "~2.3.8" tar-fs@2.1.1: @@ -10271,7 +9680,7 @@ tar@^4.0.2: test-value@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" - integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= + integrity sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w== dependencies: array-back "^1.0.3" typical "^2.6.0" @@ -10284,7 +9693,7 @@ testrpc@0.0.1: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== then-request@^6.0.0: version "6.0.2" @@ -10311,15 +9720,15 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8: +through@^2.3.8, through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== tmp@0.0.33, tmp@^0.0.33: version "0.0.33" @@ -10345,12 +9754,12 @@ tmp@^0.2.1: to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== 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= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" @@ -10362,7 +9771,7 @@ to-readable-stream@^1.0.0: 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= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10400,22 +9809,17 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -"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" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== ts-command-line-args@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz#fd6913e542099012c0ffb2496126a8f38305c7d6" - integrity sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ== + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: chalk "^4.1.0" command-line-args "^5.1.1" @@ -10453,11 +9857,11 @@ ts-generator@^0.1.1: ts-essentials "^1.0.0" ts-node@^10.4.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -10468,10 +9872,10 @@ ts-node@^10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -10498,7 +9902,7 @@ tslint@^6.1.3: 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= + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== tsutils@^2.29.0: version "2.29.0" @@ -10517,7 +9921,7 @@ tsutils@^3.21.0: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" @@ -10529,7 +9933,7 @@ tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== tweetnacl@^1.0.0, tweetnacl@^1.0.3: version "1.0.3" @@ -10546,7 +9950,7 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -10583,10 +9987,10 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typechain@^3.0.0: version "3.0.0" @@ -10602,9 +10006,9 @@ typechain@^3.0.0: ts-generator "^0.1.1" typechain@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.0.0.tgz#a5dbe754717a7e16247df52b5285903de600e8ff" - integrity sha512-rqDfDYc9voVAhmfVfAwzg3VYFvhvs5ck1X9T/iWkX745Cul4t+V/smjnyqrbDzWDbzD93xfld1epg7Y/uFAesQ== + version "8.3.1" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.1.tgz#dccbc839b94877997536c356380eff7325395cfb" + integrity sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ== dependencies: "@types/prettier" "^2.1.1" debug "^4.3.1" @@ -10617,6 +10021,45 @@ typechain@^8.0.0: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10627,34 +10070,34 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.5.4: - version "4.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" - integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" - integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== typewise@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" - integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== dependencies: typewise-core "^1.2.0" typewiselite@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" - integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + integrity sha512-J9alhjVHupW3Wfz6qFRGgQw0N3gr8hOkw6zm7FZ6UR1Cse/oD9/JVok7DNE9TT9IbciDHX2Ex9+ksE6cRmtymw== typical@^2.6.0, typical@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" - integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + integrity sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg== typical@^4.0.0: version "4.0.0" @@ -10667,23 +10110,23 @@ typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.14.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.5.tgz#cdabb7d4954231d80cb4a927654c4655e51f4859" - integrity sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ== + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== 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.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" unbzip2-stream@1.4.3: @@ -10699,15 +10142,12 @@ underscore@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== -undici@^4.14.1: - version "4.16.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff" - integrity sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw== - -undici@^5.4.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.10.0.tgz#dd9391087a90ccfbd007568db458674232ebf014" - integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== +undici@^5.14.0: + version "5.24.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.24.0.tgz#6133630372894cfeb3c3dab13b4c23866bd344b5" + integrity sha512-OKlckxBjFl0oXxcj9FU6oB8fDAaiRUq+D8jrFWGmOfI/gIyjk/IeS75LMzgYKUaeHzLUcYvf9bbJGSrUwTfwwQ== + dependencies: + busboy "^1.6.0" union-value@^1.0.0: version "1.0.1" @@ -10737,12 +10177,12 @@ unorm@^1.3.3: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 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= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10757,39 +10197,27 @@ uri-js@^4.2.2: 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-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + version "0.11.2" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.2.tgz#02f250a6e0d992b781828cd456d44f49bf2e19dd" + integrity sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg== dependencies: - punycode "1.3.2" - querystring "0.2.0" + punycode "^1.4.1" + qs "^6.11.2" use@^3.1.0: version "3.1.1" @@ -10797,9 +10225,9 @@ use@^3.1.0: integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf-8-validate@^5.0.2: - version "5.0.9" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" - integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: node-gyp-build "^4.3.0" @@ -10811,40 +10239,41 @@ utf8@3.0.0, utf8@^3.0.0: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 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== + version "1.1.2" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" + integrity sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" + call-bind "^1.0.2" + define-properties "^1.2.0" for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" + has-proto "^1.0.1" + has-symbols "^1.0.3" + object.getownpropertydescriptors "^2.1.6" + safe-array-concat "^1.0.0" -util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== +util@^0.12.0, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" is-generator-function "^1.0.7" is-typed-array "^1.1.3" - safe-buffer "^5.1.2" which-typed-array "^1.1.2" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== uuid@3.3.2: version "3.3.2" @@ -10861,10 +10290,15 @@ uuid@^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-lib@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" - integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -10882,17 +10316,26 @@ varint@^5.0.0: vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" +web3-bzz@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.0.tgz#ac74bc71cdf294c7080a79091079192f05c5baed" + integrity sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + web3-bzz@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" @@ -10903,15 +10346,23 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -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== +web3-bzz@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.4.tgz#9419e606e38a9777443d4ce40506ebd796e06075" + integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" +web3-core-helpers@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz#1016534c51a5df77ed4f94d1fcce31de4af37fad" + integrity sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g== + dependencies: + web3-eth-iban "1.10.0" + web3-utils "1.10.0" + web3-core-helpers@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" @@ -10921,13 +10372,24 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -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== +web3-core-helpers@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" + integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== + dependencies: + web3-eth-iban "1.7.4" + web3-utils "1.7.4" + +web3-core-method@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.0.tgz#82668197fa086e8cc8066742e35a9d72535e3412" + integrity sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA== dependencies: - web3-eth-iban "1.5.3" - web3-utils "1.5.3" + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.10.0" + web3-core-promievent "1.10.0" + web3-core-subscriptions "1.10.0" + web3-utils "1.10.0" web3-core-method@1.2.11: version "1.2.11" @@ -10941,17 +10403,23 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -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== +web3-core-method@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.4.tgz#3873c6405e1a0a8a1efc1d7b28de8b7550b00c15" + integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-utils "1.5.3" + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-utils "1.7.4" + +web3-core-promievent@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz#cbb5b3a76b888df45ed3a8d4d8d4f54ccb66a37b" + integrity sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg== + dependencies: + eventemitter3 "4.0.4" web3-core-promievent@1.2.11: version "1.2.11" @@ -10960,13 +10428,24 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -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== +web3-core-promievent@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz#80a75633fdfe21fbaae2f1e38950edb2f134868c" + integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== dependencies: eventemitter3 "4.0.4" +web3-core-requestmanager@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz#4b34f6e05837e67c70ff6f6993652afc0d54c340" + integrity sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ== + dependencies: + util "^0.12.5" + web3-core-helpers "1.10.0" + web3-providers-http "1.10.0" + web3-providers-ipc "1.10.0" + web3-providers-ws "1.10.0" + web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -10978,16 +10457,24 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -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== +web3-core-requestmanager@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz#2dc8a526dab8183dca3fef54658621801b1d0469" + integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== dependencies: util "^0.12.0" - 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-helpers "1.7.4" + web3-providers-http "1.7.4" + web3-providers-ipc "1.7.4" + web3-providers-ws "1.7.4" + +web3-core-subscriptions@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz#b534592ee1611788fc0cb0b95963b9b9b6eacb7c" + integrity sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.0" web3-core-subscriptions@1.2.11: version "1.2.11" @@ -10998,13 +10485,26 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -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== +web3-core-subscriptions@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz#cfbd3fa71081a8c8c6f1a64577a1a80c5bd9826f" + integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" + web3-core-helpers "1.7.4" + +web3-core@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.0.tgz#9aa07c5deb478cf356c5d3b5b35afafa5fa8e633" + integrity sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-requestmanager "1.10.0" + web3-utils "1.10.0" web3-core@1.2.11: version "1.2.11" @@ -11019,18 +10519,26 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -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== +web3-core@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" + integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== dependencies: - "@types/bn.js" "^4.11.5" + "@types/bn.js" "^5.1.0" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - 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-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-requestmanager "1.7.4" + web3-utils "1.7.4" + +web3-eth-abi@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz#53a7a2c95a571e205e27fd9e664df4919483cce1" + integrity sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.10.0" web3-eth-abi@1.2.11: version "1.2.11" @@ -11041,13 +10549,29 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -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== +web3-eth-abi@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz#3fee967bafd67f06b99ceaddc47ab0970f2a614a" + integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.7.4" + +web3-eth-accounts@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" + integrity sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q== dependencies: - "@ethersproject/abi" "5.0.7" - web3-utils "1.5.3" + "@ethereumjs/common" "2.5.0" + "@ethereumjs/tx" "3.3.2" + eth-lib "0.2.8" + ethereumjs-util "^7.1.5" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-utils "1.10.0" web3-eth-accounts@1.2.11: version "1.2.11" @@ -11066,22 +10590,36 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -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== +web3-eth-accounts@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz#7a24a4dfe947f7e9d1bae678529e591aa146167a" + integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== dependencies: - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/tx" "^3.2.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" crypto-browserify "3.12.0" eth-lib "0.2.8" ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" + +web3-eth-contract@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz#8e68c7654576773ec3c91903f08e49d0242c503a" + integrity sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w== + dependencies: + "@types/bn.js" "^5.1.1" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-promievent "1.10.0" + web3-core-subscriptions "1.10.0" + web3-eth-abi "1.10.0" + web3-utils "1.10.0" web3-eth-contract@1.2.11: version "1.2.11" @@ -11098,19 +10636,33 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -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== +web3-eth-contract@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz#e5761cfb43d453f57be4777b2e5e7e1082078ff7" + integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== dependencies: - "@types/bn.js" "^4.11.5" - 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" + "@types/bn.js" "^5.1.0" + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-promievent "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-utils "1.7.4" + +web3-eth-ens@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz#96a676524e0b580c87913f557a13ed810cf91cd9" + integrity sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-promievent "1.10.0" + web3-eth-abi "1.10.0" + web3-eth-contract "1.10.0" + web3-utils "1.10.0" web3-eth-ens@1.2.11: version "1.2.11" @@ -11127,19 +10679,27 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -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== +web3-eth-ens@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz#346720305379c0a539e226141a9602f1da7bc0c8" + integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - 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-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-promievent "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-contract "1.7.4" + web3-utils "1.7.4" + +web3-eth-iban@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" + integrity sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg== + dependencies: + bn.js "^5.2.1" + web3-utils "1.10.0" web3-eth-iban@1.2.11: version "1.2.11" @@ -11149,13 +10709,25 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -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== +web3-eth-iban@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" + integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== dependencies: - bn.js "^4.11.9" - web3-utils "1.5.3" + bn.js "^5.2.1" + web3-utils "1.7.4" + +web3-eth-personal@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz#94d525f7a29050a0c2a12032df150ac5ea633071" + integrity sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-net "1.10.0" + web3-utils "1.10.0" web3-eth-personal@1.2.11: version "1.2.11" @@ -11169,17 +10741,35 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -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== +web3-eth-personal@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz#22c399794cb828a75703df8bb4b3c1331b471546" + integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== dependencies: "@types/node" "^12.12.6" - 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-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" + +web3-eth@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.0.tgz#38b905e2759697c9624ab080cfcf4e6c60b3a6cf" + integrity sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA== + dependencies: + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-subscriptions "1.10.0" + web3-eth-abi "1.10.0" + web3-eth-accounts "1.10.0" + web3-eth-contract "1.10.0" + web3-eth-ens "1.10.0" + web3-eth-iban "1.10.0" + web3-eth-personal "1.10.0" + web3-net "1.10.0" + web3-utils "1.10.0" web3-eth@1.2.11: version "1.2.11" @@ -11200,23 +10790,32 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -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.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.4.tgz#a7c1d3ccdbba4de4a82df7e3c4db716e4a944bf2" + integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== + dependencies: + web3-core "1.7.4" + web3-core-helpers "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-eth-abi "1.7.4" + web3-eth-accounts "1.7.4" + web3-eth-contract "1.7.4" + web3-eth-ens "1.7.4" + web3-eth-iban "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-utils "1.7.4" + +web3-net@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.0.tgz#be53e7f5dafd55e7c9013d49c505448b92c9c97b" + integrity sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA== + dependencies: + web3-core "1.10.0" + web3-core-method "1.10.0" + web3-utils "1.10.0" web3-net@1.2.11: version "1.2.11" @@ -11227,14 +10826,14 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -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== +web3-net@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.4.tgz#3153dfd3423262dd6fbec7aae5467202c4cad431" + integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-utils "1.7.4" web3-provider-engine@14.2.1: version "14.2.1" @@ -11262,6 +10861,16 @@ web3-provider-engine@14.2.1: xhr "^2.2.0" xtend "^4.0.1" +web3-providers-http@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" + integrity sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.10.0" + web3-providers-http@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" @@ -11270,14 +10879,22 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -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== +web3-providers-http@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" + integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== dependencies: - web3-core-helpers "1.5.3" + web3-core-helpers "1.7.4" xhr2-cookies "1.1.0" +web3-providers-ipc@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" + integrity sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.10.0" + web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -11287,13 +10904,22 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -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== +web3-providers-ipc@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz#02e85e99e48f432c9d34cee7d786c3685ec9fcfa" + integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== dependencies: oboe "2.1.5" - web3-core-helpers "1.5.3" + web3-core-helpers "1.7.4" + +web3-providers-ws@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" + integrity sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.0" + websocket "^1.0.32" web3-providers-ws@1.2.11: version "1.2.11" @@ -11305,15 +10931,25 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -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== +web3-providers-ws@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz#6e60bcefb456f569a3e766e386d7807a96f90595" + integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" + web3-core-helpers "1.7.4" websocket "^1.0.32" +web3-shh@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.0.tgz#c2979b87e0f67a7fef2ce9ee853bd7bfbe9b79a8" + integrity sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg== + dependencies: + web3-core "1.10.0" + web3-core-method "1.10.0" + web3-core-subscriptions "1.10.0" + web3-net "1.10.0" + web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -11324,34 +10960,33 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -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== +web3-shh@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.4.tgz#bee91cce2737c529fd347274010b548b6ea060f1" + integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-net "1.5.3" + web3-core "1.7.4" + web3-core-method "1.7.4" + web3-core-subscriptions "1.7.4" + web3-net "1.7.4" -web3-utils@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" - integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== +web3-utils@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" + integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" + bn.js "^5.2.1" 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" - underscore "1.9.1" utf8 "3.0.0" -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== +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -11359,14 +10994,15 @@ web3-utils@1.5.3: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" + underscore "1.9.1" utf8 "3.0.0" -web3-utils@^1.0.0-beta.31: - version "1.7.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.1.tgz#77d8bacaf426c66027d8aa4864d77f0ed211aacd" - integrity sha512-fef0EsqMGJUgiHPdX+KN9okVWshbIumyJPmR+btnD1HgvoXijKEkuKBv0OmUqjbeqmLKP2/N9EiXKJel5+E1Dw== +web3-utils@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" + integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== dependencies: - bn.js "^4.11.9" + bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" ethereumjs-util "^7.1.0" ethjs-unit "0.1.6" @@ -11374,19 +11010,33 @@ web3-utils@^1.0.0-beta.31: randombytes "^2.1.0" utf8 "3.0.0" -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== +web3-utils@^1.0.0-beta.31, web3-utils@^1.3.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" + integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== dependencies: - bn.js "^4.11.9" + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" + ethereum-cryptography "^2.1.2" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" utf8 "3.0.0" +web3@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" + integrity sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng== + dependencies: + web3-bzz "1.10.0" + web3-core "1.10.0" + web3-eth "1.10.0" + web3-eth-personal "1.10.0" + web3-net "1.10.0" + web3-shh "1.10.0" + web3-utils "1.10.0" + web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -11400,23 +11050,23 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" - integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== +web3@1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.4.tgz#00c9aef8e13ade92fd773d845fff250535828e93" + integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== 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-bzz "1.7.4" + web3-core "1.7.4" + web3-eth "1.7.4" + web3-eth-personal "1.7.4" + web3-net "1.7.4" + web3-shh "1.7.4" + web3-utils "1.7.4" 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= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== websocket@1.0.32: version "1.0.32" @@ -11450,7 +11100,7 @@ whatwg-fetch@^2.0.4: 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= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -11469,24 +11119,23 @@ which-boxed-primitive@^1.0.2: 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= + integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== 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= + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" - integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== +which-typed-array@^1.1.10, which-typed-array@^1.1.11, which-typed-array@^1.1.2: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" + for-each "^0.3.3" + gopd "^1.0.1" 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" @@ -11495,7 +11144,7 @@ which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@2.0.2, which@^2.0.1: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -11512,17 +11161,17 @@ wide-align@1.1.3: 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= + integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== -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== +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== wordwrapjs@^4.0.0: version "4.0.1" @@ -11532,15 +11181,15 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 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= + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -11566,14 +11215,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@7.4.6: version "7.4.6" @@ -11602,9 +11244,9 @@ ws@^5.1.1: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xhr-request-promise@^0.1.2: version "0.1.3" @@ -11629,7 +11271,7 @@ xhr-request@^1.0.1, xhr-request@^1.1.0: xhr2-cookies@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== dependencies: cookiejar "^2.1.1" @@ -11646,9 +11288,9 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -11656,7 +11298,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== dependencies: object-keys "~0.4.0" @@ -11678,7 +11320,7 @@ y18n@^5.0.5: yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" @@ -11690,6 +11332,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +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== + yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -11706,7 +11353,7 @@ yargs-parser@20.2.4: 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= + integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== dependencies: camelcase "^3.0.0" lodash.assign "^4.0.6" @@ -11767,7 +11414,7 @@ yargs@16.2.0: yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== dependencies: cliui "^3.2.0" decamelize "^1.1.1" @@ -11801,3 +11448,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" + integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== From e35a62a84ec848de37cade17c84dd0bd3d525f23 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 19:25:13 +0200 Subject: [PATCH 124/176] Remove outdated patch --- .../@nomiclabs+hardhat-etherscan+3.1.0.patch | 263 ------------------ 1 file changed, 263 deletions(-) delete mode 100644 patches/@nomiclabs+hardhat-etherscan+3.1.0.patch diff --git a/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch b/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch deleted file mode 100644 index 9156511d..00000000 --- a/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch +++ /dev/null @@ -1,263 +0,0 @@ -diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts -index 02997fe..ea8a589 100644 ---- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts -+++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts -@@ -1,6 +1,7 @@ - export declare const pluginName = "@nomiclabs/hardhat-etherscan"; - export declare const TASK_VERIFY = "verify"; - export declare const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; -+export declare const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; - export declare const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; - export declare const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; - export declare const TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; -diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js -index 3c39b90..3ea23f9 100644 ---- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js -+++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js -@@ -1,9 +1,10 @@ - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); --exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; -+exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_FULL_BUILD = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; - exports.pluginName = "@nomiclabs/hardhat-etherscan"; - exports.TASK_VERIFY = "verify"; - exports.TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; -+exports.TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; - exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; - exports.TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; - exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; -diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js -index 0f8a4d5..3502c2c 100644 ---- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js -+++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js -@@ -140,9 +140,18 @@ Possible causes are: - const solcFullVersion = deployedBytecode.isOvmInferred() - ? contractInformation.solcVersion - : await (0, version_1.getLongVersion)(contractInformation.solcVersion); -- const minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { -- sourceName: contractInformation.sourceName, -- }); -+ let minimumBuild; -+ try { -+ minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { -+ sourceName: contractInformation.sourceName, -+ }); -+ } -+ catch (error) { -+ console.warn('Unable to produce minimum build, proceeding to use full build...'); -+ minimumBuild = await run(constants_1.TASK_VERIFY_GET_FULL_BUILD, { -+ sourceName: contractInformation.sourceName, -+ }); -+ } - const success = await run(constants_1.TASK_VERIFY_VERIFY_MINIMUM_BUILD, { - minimumBuild, - contractInformation, -@@ -276,6 +285,44 @@ const getMinimumBuild = async function ({ sourceName }, { run }) { - }); - return build; - }; -+const getFullBuild = async function ({ sourceName }, { run }) { -+ const sourcePaths = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); -+ const sourceNames = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, { -+ sourcePaths, -+ }); -+ const dependencyGraph = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, { sourceNames }); -+ const resolvedFiles = dependencyGraph -+ .getResolvedFiles() -+ .filter((resolvedFile) => { -+ return resolvedFile.sourceName === sourceName; -+ }); -+ assertHardhatPluginInvariant(resolvedFiles.length === 1, `The plugin found an unexpected number of files for this contract.`); -+ const compilationJobsCreationResult = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { -+ dependencyGraph, -+ }); -+ await run(task_names_1.TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { -+ compilationJobsCreationErrors: compilationJobsCreationResult.errors, -+ }); -+ const compilationJobs = compilationJobsCreationResult.jobs; -+ // const filteredCompilationJobs: CompilationJob[] = await run( -+ // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, -+ // { compilationJobs, force: false } -+ // ); -+ const mergedCompilationJobs = await run(task_names_1.TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, { compilationJobs: compilationJobs }); -+ const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { -+ return (cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > -+ 0); -+ }); -+ const compilationJob = targetCompilationJobs[0]; -+ const build = await run(task_names_1.TASK_COMPILE_SOLIDITY_COMPILE_JOB, { -+ compilationJob, -+ compilationJobs: [compilationJob], -+ compilationJobIndex: 0, -+ emitsArtifacts: false, -+ quiet: true, -+ }); -+ return build; -+}; - async function inferContract(artifacts, network, matchingCompilerVersions, deployedBytecode) { - const contractMatches = await (0, bytecode_1.lookupMatchingBytecode)(artifacts, matchingCompilerVersions, deployedBytecode); - if (contractMatches.length === 0) { -@@ -429,6 +476,9 @@ This means that unrelated contracts may be displayed on Etherscan... - (0, config_1.subtask)(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD) - .addParam("sourceName", undefined, undefined, config_1.types.string) - .setAction(getMinimumBuild); -+(0, config_1.subtask)(constants_1.TASK_VERIFY_GET_FULL_BUILD) -+ .addParam("sourceName", undefined, undefined, config_1.types.string) -+ .setAction(getFullBuild); - (0, config_1.task)(constants_1.TASK_VERIFY, "Verifies contract on Etherscan") - .addOptionalPositionalParam("address", "Address of the smart contract to verify") - .addOptionalParam("constructorArgs", "File path to a javascript module that exports the list of arguments.", undefined, config_1.types.inputFile) -diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts -index cb029e2..0e5341d 100644 ---- a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts -+++ b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts -@@ -1,6 +1,7 @@ - export const pluginName = "@nomiclabs/hardhat-etherscan"; - export const TASK_VERIFY = "verify"; - export const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; -+export const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; - export const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = - "verify:get-constructor-arguments"; - export const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; -diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts -index e55c99b..5661415 100644 ---- a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts -+++ b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts -@@ -1,8 +1,14 @@ - import { - TASK_COMPILE, - TASK_COMPILE_SOLIDITY_COMPILE_JOB, -+ TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, -+ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, - TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, - TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, -+ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, -+ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, -+ TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, -+ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, - } from "hardhat/builtin-tasks/task-names"; - import { extendConfig, subtask, task, types } from "hardhat/config"; - import { NomicLabsHardhatPluginError } from "hardhat/plugins"; -@@ -10,6 +16,7 @@ import { - ActionType, - Artifacts, - CompilationJob, -+ CompilationJobsCreationResult, - CompilerInput, - CompilerOutput, - DependencyGraph, -@@ -33,6 +40,7 @@ import { - TASK_VERIFY_GET_ETHERSCAN_ENDPOINT, - TASK_VERIFY_GET_LIBRARIES, - TASK_VERIFY_GET_MINIMUM_BUILD, -+ TASK_VERIFY_GET_FULL_BUILD, - TASK_VERIFY_VERIFY, - TASK_VERIFY_VERIFY_MINIMUM_BUILD, - } from "./constants"; -@@ -292,9 +300,17 @@ Possible causes are: - ? contractInformation.solcVersion - : await getLongVersion(contractInformation.solcVersion); - -- const minimumBuild: Build = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { -- sourceName: contractInformation.sourceName, -- }); -+ let minimumBuild: Build; -+ try { -+ minimumBuild = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { -+ sourceName: contractInformation.sourceName, -+ }); -+ } catch (error) { -+ console.warn('Unable to produce minimum build, proceeding to use full build...') -+ minimumBuild = await run(TASK_VERIFY_GET_FULL_BUILD, { -+ sourceName: contractInformation.sourceName, -+ }); -+ } - - const success: boolean = await run(TASK_VERIFY_VERIFY_MINIMUM_BUILD, { - minimumBuild, -@@ -531,7 +547,74 @@ const getMinimumBuild: ActionType = async function ( - emitsArtifacts: false, - quiet: true, - }); -+ return build; -+}; -+ -+const getFullBuild: ActionType = async function ( -+ { sourceName }, -+ { run } -+): Promise { -+ const sourcePaths: string[] = await run( -+ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS -+ ); -+ -+ const sourceNames: string[] = await run( -+ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, -+ { -+ sourcePaths, -+ } -+ ); -+ -+ const dependencyGraph: DependencyGraph = await run( -+ TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, -+ { sourceNames } -+ ); -+ -+ const resolvedFiles = dependencyGraph -+ .getResolvedFiles() -+ .filter((resolvedFile) => { -+ return resolvedFile.sourceName === sourceName; -+ }); -+ assertHardhatPluginInvariant( -+ resolvedFiles.length === 1, -+ `The plugin found an unexpected number of files for this contract.` -+ ); -+ -+ const compilationJobsCreationResult: CompilationJobsCreationResult = -+ await run(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { -+ dependencyGraph, -+ }); -+ await run(TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { -+ compilationJobsCreationErrors: compilationJobsCreationResult.errors, -+ }); -+ -+ const compilationJobs = compilationJobsCreationResult.jobs; -+ -+ // const filteredCompilationJobs: CompilationJob[] = await run( -+ // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, -+ // { compilationJobs, force: false } -+ // ); -+ -+ const mergedCompilationJobs: CompilationJob[] = await run( -+ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, -+ { compilationJobs: compilationJobs } -+ ); - -+ const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { -+ return ( -+ cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > -+ 0 -+ ); -+ }); -+ const compilationJob = targetCompilationJobs[0]; -+ -+ const build: Build = await run(TASK_COMPILE_SOLIDITY_COMPILE_JOB, { -+ compilationJob, -+ compilationJobs: [compilationJob], -+ compilationJobIndex: 0, -+ emitsArtifacts: false, -+ quiet: true, -+ }); - return build; - }; - -@@ -807,6 +890,10 @@ subtask(TASK_VERIFY_GET_MINIMUM_BUILD) - .addParam("sourceName", undefined, undefined, types.string) - .setAction(getMinimumBuild); - -+subtask(TASK_VERIFY_GET_FULL_BUILD) -+ .addParam("sourceName", undefined, undefined, types.string) -+ .setAction(getFullBuild); -+ - task(TASK_VERIFY, "Verifies contract on Etherscan") - .addOptionalPositionalParam( - "address", From 8198a177b3d006ef250c531b75152938a017896b Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 20:08:36 +0200 Subject: [PATCH 125/176] Revert "Remove outdated patch" This reverts commit e35a62a84ec848de37cade17c84dd0bd3d525f23. --- .../@nomiclabs+hardhat-etherscan+3.1.0.patch | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 patches/@nomiclabs+hardhat-etherscan+3.1.0.patch diff --git a/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch b/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch new file mode 100644 index 00000000..9156511d --- /dev/null +++ b/patches/@nomiclabs+hardhat-etherscan+3.1.0.patch @@ -0,0 +1,263 @@ +diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts +index 02997fe..ea8a589 100644 +--- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts ++++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.d.ts +@@ -1,6 +1,7 @@ + export declare const pluginName = "@nomiclabs/hardhat-etherscan"; + export declare const TASK_VERIFY = "verify"; + export declare const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; ++export declare const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; + export declare const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; + export declare const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; + export declare const TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; +diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js +index 3c39b90..3ea23f9 100644 +--- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js ++++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/constants.js +@@ -1,9 +1,10 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); +-exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; ++exports.TASK_VERIFY_GET_LIBRARIES = exports.TASK_VERIFY_VERIFY = exports.TASK_VERIFY_VERIFY_MINIMUM_BUILD = exports.TASK_VERIFY_GET_CONTRACT_INFORMATION = exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = exports.TASK_VERIFY_GET_COMPILER_VERSIONS = exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = exports.TASK_VERIFY_GET_FULL_BUILD = exports.TASK_VERIFY_GET_MINIMUM_BUILD = exports.TASK_VERIFY = exports.pluginName = void 0; + exports.pluginName = "@nomiclabs/hardhat-etherscan"; + exports.TASK_VERIFY = "verify"; + exports.TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; ++exports.TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; + exports.TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = "verify:get-constructor-arguments"; + exports.TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; + exports.TASK_VERIFY_GET_ETHERSCAN_ENDPOINT = "verify:get-etherscan-endpoint"; +diff --git a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js +index 0f8a4d5..3502c2c 100644 +--- a/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js ++++ b/node_modules/@nomiclabs/hardhat-etherscan/dist/src/index.js +@@ -140,9 +140,18 @@ Possible causes are: + const solcFullVersion = deployedBytecode.isOvmInferred() + ? contractInformation.solcVersion + : await (0, version_1.getLongVersion)(contractInformation.solcVersion); +- const minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { +- sourceName: contractInformation.sourceName, +- }); ++ let minimumBuild; ++ try { ++ minimumBuild = await run(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD, { ++ sourceName: contractInformation.sourceName, ++ }); ++ } ++ catch (error) { ++ console.warn('Unable to produce minimum build, proceeding to use full build...'); ++ minimumBuild = await run(constants_1.TASK_VERIFY_GET_FULL_BUILD, { ++ sourceName: contractInformation.sourceName, ++ }); ++ } + const success = await run(constants_1.TASK_VERIFY_VERIFY_MINIMUM_BUILD, { + minimumBuild, + contractInformation, +@@ -276,6 +285,44 @@ const getMinimumBuild = async function ({ sourceName }, { run }) { + }); + return build; + }; ++const getFullBuild = async function ({ sourceName }, { run }) { ++ const sourcePaths = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); ++ const sourceNames = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, { ++ sourcePaths, ++ }); ++ const dependencyGraph = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, { sourceNames }); ++ const resolvedFiles = dependencyGraph ++ .getResolvedFiles() ++ .filter((resolvedFile) => { ++ return resolvedFile.sourceName === sourceName; ++ }); ++ assertHardhatPluginInvariant(resolvedFiles.length === 1, `The plugin found an unexpected number of files for this contract.`); ++ const compilationJobsCreationResult = await run(task_names_1.TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { ++ dependencyGraph, ++ }); ++ await run(task_names_1.TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { ++ compilationJobsCreationErrors: compilationJobsCreationResult.errors, ++ }); ++ const compilationJobs = compilationJobsCreationResult.jobs; ++ // const filteredCompilationJobs: CompilationJob[] = await run( ++ // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, ++ // { compilationJobs, force: false } ++ // ); ++ const mergedCompilationJobs = await run(task_names_1.TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, { compilationJobs: compilationJobs }); ++ const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { ++ return (cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > ++ 0); ++ }); ++ const compilationJob = targetCompilationJobs[0]; ++ const build = await run(task_names_1.TASK_COMPILE_SOLIDITY_COMPILE_JOB, { ++ compilationJob, ++ compilationJobs: [compilationJob], ++ compilationJobIndex: 0, ++ emitsArtifacts: false, ++ quiet: true, ++ }); ++ return build; ++}; + async function inferContract(artifacts, network, matchingCompilerVersions, deployedBytecode) { + const contractMatches = await (0, bytecode_1.lookupMatchingBytecode)(artifacts, matchingCompilerVersions, deployedBytecode); + if (contractMatches.length === 0) { +@@ -429,6 +476,9 @@ This means that unrelated contracts may be displayed on Etherscan... + (0, config_1.subtask)(constants_1.TASK_VERIFY_GET_MINIMUM_BUILD) + .addParam("sourceName", undefined, undefined, config_1.types.string) + .setAction(getMinimumBuild); ++(0, config_1.subtask)(constants_1.TASK_VERIFY_GET_FULL_BUILD) ++ .addParam("sourceName", undefined, undefined, config_1.types.string) ++ .setAction(getFullBuild); + (0, config_1.task)(constants_1.TASK_VERIFY, "Verifies contract on Etherscan") + .addOptionalPositionalParam("address", "Address of the smart contract to verify") + .addOptionalParam("constructorArgs", "File path to a javascript module that exports the list of arguments.", undefined, config_1.types.inputFile) +diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts +index cb029e2..0e5341d 100644 +--- a/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts ++++ b/node_modules/@nomiclabs/hardhat-etherscan/src/constants.ts +@@ -1,6 +1,7 @@ + export const pluginName = "@nomiclabs/hardhat-etherscan"; + export const TASK_VERIFY = "verify"; + export const TASK_VERIFY_GET_MINIMUM_BUILD = "verify:get-minimum-build"; ++export const TASK_VERIFY_GET_FULL_BUILD = "verify:get-full-build"; + export const TASK_VERIFY_GET_CONSTRUCTOR_ARGUMENTS = + "verify:get-constructor-arguments"; + export const TASK_VERIFY_GET_COMPILER_VERSIONS = "verify:get-compiler-versions"; +diff --git a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts +index e55c99b..5661415 100644 +--- a/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts ++++ b/node_modules/@nomiclabs/hardhat-etherscan/src/index.ts +@@ -1,8 +1,14 @@ + import { + TASK_COMPILE, + TASK_COMPILE_SOLIDITY_COMPILE_JOB, ++ TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, ++ TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, ++ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, ++ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, ++ TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, ++ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, + } from "hardhat/builtin-tasks/task-names"; + import { extendConfig, subtask, task, types } from "hardhat/config"; + import { NomicLabsHardhatPluginError } from "hardhat/plugins"; +@@ -10,6 +16,7 @@ import { + ActionType, + Artifacts, + CompilationJob, ++ CompilationJobsCreationResult, + CompilerInput, + CompilerOutput, + DependencyGraph, +@@ -33,6 +40,7 @@ import { + TASK_VERIFY_GET_ETHERSCAN_ENDPOINT, + TASK_VERIFY_GET_LIBRARIES, + TASK_VERIFY_GET_MINIMUM_BUILD, ++ TASK_VERIFY_GET_FULL_BUILD, + TASK_VERIFY_VERIFY, + TASK_VERIFY_VERIFY_MINIMUM_BUILD, + } from "./constants"; +@@ -292,9 +300,17 @@ Possible causes are: + ? contractInformation.solcVersion + : await getLongVersion(contractInformation.solcVersion); + +- const minimumBuild: Build = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { +- sourceName: contractInformation.sourceName, +- }); ++ let minimumBuild: Build; ++ try { ++ minimumBuild = await run(TASK_VERIFY_GET_MINIMUM_BUILD, { ++ sourceName: contractInformation.sourceName, ++ }); ++ } catch (error) { ++ console.warn('Unable to produce minimum build, proceeding to use full build...') ++ minimumBuild = await run(TASK_VERIFY_GET_FULL_BUILD, { ++ sourceName: contractInformation.sourceName, ++ }); ++ } + + const success: boolean = await run(TASK_VERIFY_VERIFY_MINIMUM_BUILD, { + minimumBuild, +@@ -531,7 +547,74 @@ const getMinimumBuild: ActionType = async function ( + emitsArtifacts: false, + quiet: true, + }); ++ return build; ++}; ++ ++const getFullBuild: ActionType = async function ( ++ { sourceName }, ++ { run } ++): Promise { ++ const sourcePaths: string[] = await run( ++ TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS ++ ); ++ ++ const sourceNames: string[] = await run( ++ TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, ++ { ++ sourcePaths, ++ } ++ ); ++ ++ const dependencyGraph: DependencyGraph = await run( ++ TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, ++ { sourceNames } ++ ); ++ ++ const resolvedFiles = dependencyGraph ++ .getResolvedFiles() ++ .filter((resolvedFile) => { ++ return resolvedFile.sourceName === sourceName; ++ }); ++ assertHardhatPluginInvariant( ++ resolvedFiles.length === 1, ++ `The plugin found an unexpected number of files for this contract.` ++ ); ++ ++ const compilationJobsCreationResult: CompilationJobsCreationResult = ++ await run(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS, { ++ dependencyGraph, ++ }); ++ await run(TASK_COMPILE_SOLIDITY_HANDLE_COMPILATION_JOBS_FAILURES, { ++ compilationJobsCreationErrors: compilationJobsCreationResult.errors, ++ }); ++ ++ const compilationJobs = compilationJobsCreationResult.jobs; ++ ++ // const filteredCompilationJobs: CompilationJob[] = await run( ++ // TASK_COMPILE_SOLIDITY_FILTER_COMPILATION_JOBS, ++ // { compilationJobs, force: false } ++ // ); ++ ++ const mergedCompilationJobs: CompilationJob[] = await run( ++ TASK_COMPILE_SOLIDITY_MERGE_COMPILATION_JOBS, ++ { compilationJobs: compilationJobs } ++ ); + ++ const targetCompilationJobs = mergedCompilationJobs.filter((cj) => { ++ return ( ++ cj.getResolvedFiles().filter((f) => f.sourceName === sourceName).length > ++ 0 ++ ); ++ }); ++ const compilationJob = targetCompilationJobs[0]; ++ ++ const build: Build = await run(TASK_COMPILE_SOLIDITY_COMPILE_JOB, { ++ compilationJob, ++ compilationJobs: [compilationJob], ++ compilationJobIndex: 0, ++ emitsArtifacts: false, ++ quiet: true, ++ }); + return build; + }; + +@@ -807,6 +890,10 @@ subtask(TASK_VERIFY_GET_MINIMUM_BUILD) + .addParam("sourceName", undefined, undefined, types.string) + .setAction(getMinimumBuild); + ++subtask(TASK_VERIFY_GET_FULL_BUILD) ++ .addParam("sourceName", undefined, undefined, types.string) ++ .setAction(getFullBuild); ++ + task(TASK_VERIFY, "Verifies contract on Etherscan") + .addOptionalPositionalParam( + "address", From c3511104e487b6885f9508f0ce0267fb737e98c2 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 20:13:48 +0200 Subject: [PATCH 126/176] Revert "Remove uneccessary dependencies" This reverts commit 60a1e5019e8a5c4d073f70f1714ab423969137ef. --- package.json | 2 + yarn.lock | 5666 +++++++++++++++++++++++++++----------------------- 2 files changed, 3009 insertions(+), 2659 deletions(-) diff --git a/package.json b/package.json index da87cd57..457ab06c 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,8 @@ "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { + "@arbitrum/sdk": "^3.1.3", + "@ethersproject/providers": "^5.7.2", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", diff --git a/yarn.lock b/yarn.lock index 23b7ba12..aeaaadee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,20 +2,15 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@aduh95/viz.js@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@aduh95/viz.js/-/viz.js-3.7.0.tgz#a20d86c5fc8f6abebdc39b96a4326e10375d77c0" integrity sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng== "@arbitrum/sdk@^3.1.3": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.10.tgz#ea8148c843ee38b24d1478fa283c1c34ee9561d7" - integrity sha512-aOxkk1A4XBrKJTGpz9da1EyXIkJu4c+wm/9PpTscdjNT268ZKXLTextN7qCs9JwoL1icFOyuH1R1u9mnjUSXkg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/@arbitrum/sdk/-/sdk-3.1.3.tgz#75236043717a450b569faaa087687c51d525b0c3" + integrity sha512-Dn1or7/Guc3dItuiiWaoYQ37aCDwiWTZGPIrg4yBJW27BgiDGbo0mjPDAhKTh4p5NDOWyE8bZ0vZai86COZIUA== dependencies: "@ethersproject/address" "^5.0.8" "@ethersproject/bignumber" "^5.1.1" @@ -23,69 +18,37 @@ ethers "^5.1.0" "@babel/code-frame@^7.0.0": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" + "@babel/highlight" "^7.16.7" -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/highlight@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" - integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" js-tokens "^4.0.0" -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== dependencies: - "@jridgewell/trace-mapping" "0.3.9" + "@cspotcode/source-map-consumer" "0.8.0" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -103,38 +66,21 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^9.4.0" + globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" - integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== - "@ethereum-waffle/chai@^3.4.4": version "3.4.4" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.4.tgz#16c4cc877df31b035d6d92486dfdf983df9138ff" @@ -188,51 +134,98 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/common@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.2": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.2.tgz#63d1e26d0b7a7a3684fce920de6ebabec1e5b674" + integrity sha512-mOqYWwMlAZpYUEOEqt7EfMFuVL2eyLqWWIzcf4odn6QgXY8jBI2NhVuJncrMCKeMZrsJAe7/auaRRB6YcdH+Qw== + dependencies: + "@ethereumjs/common" "^2.6.3" + "@ethereumjs/tx" "^3.5.1" + ethereumjs-util "^7.1.4" + merkle-patricia-tree "^4.2.4" + +"@ethereumjs/blockchain@^5.5.0", "@ethereumjs/blockchain@^5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.2.tgz#1848abd9dc1ee56acf8cec4c84304d7f4667d027" + integrity sha512-Jz26iJmmsQtngerW6r5BDFaew/f2mObLrRZo3rskLOx1lmtMZ8+TX/vJexmivrnWgmAsTdNWhlKUYY4thPhPig== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/common" "^2.6.3" + "@ethereumjs/ethash" "^1.1.0" + debug "^4.3.3" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + lru-cache "^5.1.1" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.3.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.1" + ethereumjs-util "^7.1.3" -"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== +"@ethereumjs/common@^2.4.0": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df" + integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + ethereumjs-util "^7.1.4" -"@ethereumjs/tx@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" - integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== +"@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" + integrity sha512-mQwPucDL7FDYIg9XQ8DL31CnIYZwGhU5hyOO5E+BMmT71G0+RHvIT5rIkLBirJEKxV6+Rcf9aEIY0kXInxUWpQ== dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.2" + crc-32 "^1.2.0" + ethereumjs-util "^7.1.4" -"@ethereumjs/tx@^3.3.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== +"@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/common" "^2.6.4" - ethereumjs-util "^7.1.5" + "@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/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" +"@ethereumjs/tx@^3.2.1": + 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/tx@^3.4.0", "@ethereumjs/tx@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.1.tgz#8d941b83a602b4a89949c879615f7ea9a90e6671" + integrity sha512-xzDrTiu4sqZXUcaBxJ4n4W5FrppwxLxZB4ZDGVLtxSQR4lVuOnFR6RcUHdg1mpUhAPVrmnzLJpxaeXnPxIyhWA== + dependencies: + "@ethereumjs/common" "^2.6.3" + ethereumjs-util "^7.1.4" + +"@ethereumjs/vm@^5.6.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.8.0.tgz#c9055f96afc13dd7b72893b57fa20027effea6fe" + integrity sha512-mn2G2SX79QY4ckVvZUfxlNUpzwT2AEIkvgJI8aHoQaNYEHhH8rmdVDIaVVgz6//PjK52BZsK23afz+WvSR0Qqw== + dependencies: + "@ethereumjs/block" "^3.6.2" + "@ethereumjs/blockchain" "^5.5.2" + "@ethereumjs/common" "^2.6.3" + "@ethereumjs/tx" "^3.5.1" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^4.3.3" + ethereumjs-util "^7.1.4" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.4" + rustbn.js "~0.2.0" "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" @@ -249,7 +242,52 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abi@5.6.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.0.tgz#ea07cbc1eec2374d32485679c12408005895e9f3" + integrity sha512-AhVByTwdXCc2YQ20v300w6KVHle9g2OFc28ZAFCPnJyEpkv1xKXjZcSTgWOlv1i+0dqlgF8RCF2Rn2KC1t+1Vg== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/abi@5.6.1", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.1.tgz#f7de888edeb56b0a657b672bdd1b3a1135cd14f7" + integrity sha512-0cqssYh6FXjlwKWBmLm3+zH2BNARoS5u/hxbz+LpQmcDB3w0W553h2btWui1/uZp2GBM/SI3KniTuMcYyHpA5w== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -264,6 +302,19 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/abstract-provider@5.6.0", "@ethersproject/abstract-provider@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" + integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + "@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" @@ -277,6 +328,17 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" +"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" + integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" @@ -288,7 +350,18 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.6.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" + integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.8", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -299,6 +372,24 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" +"@ethersproject/address@^5.0.4": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@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/base64@5.6.0", "@ethersproject/base64@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" + integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" @@ -306,6 +397,14 @@ dependencies: "@ethersproject/bytes" "^5.7.0" +"@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" + integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" @@ -314,7 +413,16 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.6.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26" + integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + bn.js "^4.11.9" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -323,21 +431,74 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bignumber@^5.0.7": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.8", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.7.0": +"@ethersproject/bytes@^5.0.4": + 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/logger" "^5.5.0" + +"@ethersproject/constants@5.6.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" + integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": +"@ethersproject/constants@^5.0.4": + 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.5.0" + +"@ethersproject/contracts@5.6.0", "@ethersproject/contracts@^5.4.1": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067" + integrity sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw== + dependencies: + "@ethersproject/abi" "^5.6.0" + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + +"@ethersproject/contracts@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -353,7 +514,21 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.6.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" + integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -368,6 +543,38 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/hash@^5.0.4": + 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.6.0", "@ethersproject/hdnode@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.0.tgz#9dcbe8d629bbbcf144f2cae476337fe92d320998" + integrity sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/basex" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/wordlists" "^5.6.0" + "@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" @@ -386,6 +593,25 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" +"@ethersproject/json-wallets@5.6.0", "@ethersproject/json-wallets@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz#4c2fc27f17e36c583e7a252fb938bc46f98891e5" + integrity sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hdnode" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" @@ -405,7 +631,15 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" + integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== + dependencies: + "@ethersproject/bytes" "^5.6.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -413,18 +647,65 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.7.0": +"@ethersproject/keccak256@^5.0.3": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.6.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/logger@^5.0.5": + 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/networks@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" + integrity sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/networks@5.6.2", "@ethersproject/networks@^5.6.0": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.2.tgz#2bacda62102c0b1fcee408315f2bed4f6fbdf336" + integrity sha512-9uEzaJY7j5wpYGTojGp8U89mSsgQLc40PCMJLMCnFXTs7nhBveZ0t7dbqWUNrepWTszDbFkYD6WlL8DKx5huHA== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" + integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/networks@5.7.1": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" +"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" + integrity sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" @@ -433,14 +714,104 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.6.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/properties@^5.0.3": + 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.6.2", "@ethersproject/providers@^5.4.4": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.2.tgz#b9807b1c8c6f59fa2ee4b3cf6519724d07a9f422" + integrity sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/basex" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.6.4": + version "5.6.4" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.4.tgz#1a49c211b57b0b2703c320819abbbfa35c83dff7" + integrity sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/basex" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" + integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -466,6 +837,14 @@ bech32 "1.1.4" ws "7.4.6" +"@ethersproject/random@5.6.0", "@ethersproject/random@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" + integrity sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" @@ -474,6 +853,14 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" +"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" + integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" @@ -482,6 +869,15 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" +"@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" + integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + "@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" @@ -491,6 +887,18 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" +"@ethersproject/signing-key@5.6.0", "@ethersproject/signing-key@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.0.tgz#4f02e3fb09e22b71e2e1d6dc4bcb5dafa69ce042" + integrity sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" @@ -503,7 +911,19 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": +"@ethersproject/solidity@5.6.0", "@ethersproject/solidity@^5.4.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" + integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/solidity@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -515,7 +935,16 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.6.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" + integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -524,7 +953,31 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": +"@ethersproject/strings@^5.0.4": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0", "@ethersproject/transactions@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" + integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -539,6 +992,15 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" +"@ethersproject/units@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c" + integrity sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" @@ -548,7 +1010,28 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": +"@ethersproject/wallet@5.6.0", "@ethersproject/wallet@^5.4.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.0.tgz#33d11a806d783864208f348709a5a3badac8e22a" + integrity sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/hdnode" "^5.6.0" + "@ethersproject/json-wallets" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/wordlists" "^5.6.0" + +"@ethersproject/wallet@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -569,7 +1052,29 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@5.6.0", "@ethersproject/web@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" + integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== + dependencies: + "@ethersproject/base64" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" + integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/web@5.7.1": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -580,6 +1085,17 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" + integrity sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" @@ -591,14 +1107,19 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.5" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" @@ -610,28 +1131,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + version "4.0.0" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6" + integrity sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA== dependencies: ethereumjs-abi "^0.6.8" ethereumjs-util "^6.2.1" @@ -639,32 +1142,15 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/curves@1.1.0", "@noble/curves@~1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== - dependencies: - "@noble/hashes" "1.3.1" - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== - -"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@1.0.0", "@noble/hashes@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.0.0.tgz#d5e38bfbdaba174805a4e649f13be9a9ed3351ae" + integrity sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg== -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== +"@noble/secp256k1@1.5.5", "@noble/secp256k1@~1.5.2": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.5.5.tgz#315ab5745509d1a8c8e90d0bdf59823ccf9bcfc3" + integrity sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -679,7 +1165,7 @@ 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", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": 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== @@ -687,231 +1173,34 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== - -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" - -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== - dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - "@nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers@^0.3.0-beta.13": version "0.3.0-beta.13" resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz#b96086ff768ddf69928984d5eb0a8d78cfca9366" integrity sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw== "@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" - integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz#7137554862b3b1c914f1b1bf110f0529fd2dec53" + integrity sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" + cbor "^5.0.2" chalk "^2.4.2" debug "^4.1.1" fs-extra "^7.0.1" lodash "^4.17.11" semver "^6.3.0" table "^6.8.0" - undici "^5.14.0" + undici "^5.4.0" "@nomiclabs/hardhat-waffle@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz#d11cb063a5f61a77806053e54009c40ddee49a54" - integrity sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" + integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" "@offchainlabs/upgrade-executor@1.1.0-beta.0": version "1.1.0-beta.0" @@ -978,44 +1267,27 @@ path-browserify "^1.0.0" url "^0.11.0" -"@scure/base@~1.1.0": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" - integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip32@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" - integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== - dependencies: - "@noble/curves" "~1.1.0" - "@noble/hashes" "~1.3.1" - "@scure/base" "~1.1.0" +"@scure/base@~1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.0.0.tgz#109fb595021de285f05a7db6806f2f48296fcee7" + integrity sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA== -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== +"@scure/bip32@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.0.1.tgz#1409bdf9f07f0aec99006bb0d5827693418d3aa5" + integrity sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA== dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" + "@noble/hashes" "~1.0.0" + "@noble/secp256k1" "~1.5.2" + "@scure/base" "~1.0.0" -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== +"@scure/bip39@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.0.0.tgz#47504e58de9a56a4bbed95159d2d6829fa491bb0" + integrity sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w== dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" + "@noble/hashes" "~1.0.0" + "@scure/base" "~1.0.0" "@sentry/core@5.30.0": version "5.30.0" @@ -1090,22 +1362,17 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.3": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" + integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.16.0": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" - integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== +"@solidity-parser/parser@^0.14.3": + version "0.14.3" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.3.tgz#0d627427b35a40d8521aaa933cc3df7d07bfa36f" + integrity sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -1116,68 +1383,53 @@ dependencies: defer-to-connect "^1.0.1" -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" +"@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== -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@truffle/error@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.1.tgz#e52026ac8ca7180d83443dca73c03e07ace2a301" - integrity sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA== - -"@truffle/interface-adapter@^0.5.25": - version "0.5.37" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz#95d249c1912d2baaa63c54e8a138d3f476a1181a" - integrity sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw== +"@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.10.0" + web3 "1.5.3" "@truffle/provider@^0.2.24": - version "0.2.64" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.64.tgz#7dd55117307fd019dcf81d08db5dc2bc5728f51c" - integrity sha512-ZwPsofw4EsCq/2h0t73SPnnFezu4YQWBmK4FxFaOUX0F+o8NsZuHKyfJzuZwyZbiktYmefM3yD9rM0Dj4BhNbw== + 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.1.1" - "@truffle/interface-adapter" "^0.5.25" - debug "^4.3.1" - web3 "1.7.4" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" + web3 "1.5.3" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== "@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== "@typechain/ethers-v5@^10.0.0": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" - integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== + version "10.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.0.0.tgz#1b6e292d2ed9afb0d2f7a4674cc199bb95bad714" + integrity sha512-Kot7fwAqnH96ZbI8xrRgj5Kpv9yCEdjo7mxRqrH7bYpEgijT5MmuOo8IVsdhOu7Uog4ONg7k/d5UdbAtTKUgsA== dependencies: lodash "^4.17.15" ts-essentials "^7.0.1" @@ -1190,11 +1442,24 @@ ethers "^5.0.2" "@typechain/hardhat@^6.0.0": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.1.6.tgz#1a749eb35e5054c80df531cf440819cb347c62ea" - integrity sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA== + version "6.0.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.0.0.tgz#5e305641de67276efbfaa8c37c78e38f22b22ef4" + integrity sha512-AnhwODKHxx3+st5uc1j2NQh79Lv2OuvDQe4dKn8ZxhqYsAsTPnHTLBeI8KPZ+mfdE7v13D2QYssRTIkkGhK35A== dependencies: fs-extra "^9.1.0" + lodash "^4.17.15" + +"@types/abstract-leveldown@*": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#f055979a99f7654e84d6b8e6267419e9c4cfff87" + integrity sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ== + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" @@ -1203,27 +1468,15 @@ dependencies: "@types/node" "*" -"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" +"@types/chai@*": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== "@types/chai@^4.3.0": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== "@types/concat-stream@^1.6.0": version "1.6.1" @@ -1235,7 +1488,7 @@ "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + integrity sha1-yayFsqX9GENbjIXZ7LUObWyJP/g= dependencies: "@types/node" "*" @@ -1247,21 +1500,23 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@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/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== +"@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": @@ -1270,9 +1525,9 @@ integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -1282,22 +1537,22 @@ "@types/node" "*" "@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + version "9.1.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" + integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== "@types/node-fetch@^2.5.5": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + version "2.6.1" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" + integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== dependencies: "@types/node" "*" form-data "^3.0.0" "@types/node@*": - version "20.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" - integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== + version "17.0.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" + integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== "@types/node@^10.0.3": version "10.17.60" @@ -1305,14 +1560,14 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + version "12.20.47" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.47.tgz#ca9237d51f2a2557419688511dab1c8daf475188" + integrity sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg== "@types/node@^17.0.5": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + version "17.0.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.25.tgz#527051f3c2f77aa52e5dc74e45a3da5fb2301448" + integrity sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w== "@types/node@^8.0.0": version "8.10.66" @@ -1327,22 +1582,14 @@ "@types/node" "*" "@types/prettier@^2.1.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== "@types/qs@^6.2.31", "@types/qs@^6.9.7": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== - -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" + 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/resolve@^0.0.8": version "0.0.8" @@ -1351,13 +1598,6 @@ dependencies: "@types/node" "*" -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1365,10 +1605,38 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== +"@types/sinon-chai@^3.2.3": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" + integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.11" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.11.tgz#8245827b05d3fc57a6601bd35aee1f7ad330fc42" + integrity sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g== + dependencies: + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== + +"@types/underscore@*": + version "1.11.4" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" + integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" "@types/yauzl@^2.9.1": version "2.10.0" @@ -1378,96 +1646,99 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin-tslint@^5.27.1": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.62.0.tgz#220242dcd23711c400d4f5d5d876d5107cea4be0" - integrity sha512-qsYLld1+xed2lVwHbCxkCWdhRcByLNOjpccxK6HHlem724PbMcL1/dmH7jMQaqIpbfPAGkIypyyk3q5nUgtkhA== + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.37.0.tgz#bb678cac00843db3ffbb9aca3fd83c9fc4cbf7ca" + integrity sha512-wMyqF+WqS5rioQCwihWZJpnpVB/Jg0hLPHr0kWw7HOQtWkWUS71yGxKqJuIP3k0nkdwBk7tt17bZjAB8MOqFBQ== dependencies: - "@typescript-eslint/utils" "5.62.0" + "@typescript-eslint/utils" "5.37.0" + lodash "^4.17.21" "@typescript-eslint/eslint-plugin@^5.14.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz#5ccdd5d9004120f28fc6e717fb4b5c9bddcfbc04" + integrity sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og== + dependencies: + "@typescript-eslint/scope-manager" "5.37.0" + "@typescript-eslint/type-utils" "5.37.0" + "@typescript-eslint/utils" "5.37.0" debug "^4.3.4" - graphemer "^1.4.0" + functional-red-black-tree "^1.0.1" ignore "^5.2.0" - natural-compare-lite "^1.4.0" + regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.14.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.37.0.tgz#c382077973f3a4ede7453fb14cadcad3970cbf3b" + integrity sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw== dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/scope-manager" "5.37.0" + "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/typescript-estree" "5.37.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== +"@typescript-eslint/scope-manager@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz#044980e4f1516a774a418dafe701a483a6c9f9ca" + integrity sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/visitor-keys" "5.37.0" -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== +"@typescript-eslint/type-utils@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz#43ed2f567ada49d7e33a6e4b6f9babd060445fe5" + integrity sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ== dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + "@typescript-eslint/typescript-estree" "5.37.0" + "@typescript-eslint/utils" "5.37.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.37.0.tgz#09e4870a5f3af7af3f84e08d792644a87d232261" + integrity sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== +"@typescript-eslint/typescript-estree@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz#956dcf5c98363bcb97bdd5463a0a86072ff79355" + integrity sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/visitor-keys" "5.37.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/utils@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.37.0.tgz#7784cb8e91390c4f90ccaffd24a0cf9874df81b2" + integrity sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/scope-manager" "5.37.0" + "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/typescript-estree" "5.37.0" eslint-scope "^5.1.1" - semver "^7.3.7" + eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== +"@typescript-eslint/visitor-keys@5.37.0": + version "5.37.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz#7b72dd343295ea11e89b624995abc7103c554eee" + integrity sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA== dependencies: - "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/types" "5.37.0" eslint-visitor-keys "^3.3.0" +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -1481,25 +1752,14 @@ abbrev@1: abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= -abortcontroller-polyfill@^1.7.3: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" + event-target-shim "^5.0.0" abstract-leveldown@3.0.0: version "3.0.0" @@ -1522,6 +1782,17 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: dependencies: xtend "~4.0.0" +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.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" @@ -1529,6 +1800,17 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" +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.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1537,7 +1819,7 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-jsx@^5.3.2: +acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1547,15 +1829,25 @@ acorn-walk@^8.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +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@^8.4.1: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== address@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== adm-zip@^0.4.16: version "0.4.16" @@ -1565,7 +1857,7 @@ adm-zip@^0.4.16: aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= aes-js@^3.1.1: version "3.1.2" @@ -1587,7 +1879,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: +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== @@ -1598,9 +1890,9 @@ ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: uri-js "^4.2.2" ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1610,22 +1902,22 @@ ajv@^8.0.1: amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== -ansi-colors@4.1.1: +ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.3.0: version "4.3.2" @@ -1637,7 +1929,7 @@ ansi-escapes@^4.3.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 sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.1" @@ -1657,7 +1949,7 @@ ansi-regex@^5.0.1: ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1673,10 +1965,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -antlr4@^4.11.0: - version "4.13.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" - integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== +antlr4@4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" + integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" @@ -1684,9 +1976,9 @@ antlr4ts@^0.5.0-alpha.4: integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + 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" @@ -1711,7 +2003,7 @@ argparse@^2.0.1: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" @@ -1721,12 +2013,12 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-back@^1.0.3, array-back@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" - integrity sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw== + integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= dependencies: typical "^2.6.0" @@ -1742,23 +2034,15 @@ array-back@^3.0.1, array-back@^3.1.0: resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-back@^4.0.1, array-back@^4.0.2: +array-back@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-union@^2.1.0: version "2.1.0" @@ -1768,41 +2052,17 @@ array-union@^2.1.0: array-uniq@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + 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 sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^5.2.0: version "5.4.1" @@ -1824,7 +2084,7 @@ asn1@~0.2.3: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assertion-error@^1.1.0: version "1.1.0" @@ -1834,19 +2094,24 @@ assertion-error@^1.1.0: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-parents@^0.0.1: +ast-parents@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== + integrity sha1-UI/Q8F0MSHddnszaLhdEIyYejdM= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== astral-regex@^2.0.0: version "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-eventemitter@^0.2.2, 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== @@ -1861,7 +2126,7 @@ async-limiter@~1.0.0: async@1.x, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= async@2.6.2: version "2.6.2" @@ -1871,16 +2136,16 @@ async@2.6.2: lodash "^4.17.11" async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= at-least-node@^1.0.0: version "1.0.0" @@ -1900,12 +2165,12 @@ available-typed-arrays@^1.0.5: aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios@^0.21.1: version "0.21.4" @@ -1925,7 +2190,7 @@ axios@^0.27.2: babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -1973,7 +2238,7 @@ babel-generator@^6.26.0: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -1982,7 +2247,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -1992,7 +2257,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -2002,7 +2267,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -2011,7 +2276,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -2022,7 +2287,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2030,7 +2295,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2038,7 +2303,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2046,7 +2311,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -2055,7 +2320,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2066,7 +2331,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -2078,7 +2343,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2086,36 +2351,36 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= dependencies: babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -2124,21 +2389,21 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -2149,7 +2414,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -2164,7 +2429,7 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2172,14 +2437,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2187,14 +2452,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2203,14 +2468,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -2229,7 +2494,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2238,7 +2503,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -2247,7 +2512,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -2255,7 +2520,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -2267,7 +2532,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2275,14 +2540,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0: babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2291,21 +2556,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2314,7 +2579,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-exponentiation-operator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -2323,14 +2588,14 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2374,7 +2639,7 @@ babel-preset-env@^1.7.0: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -2387,7 +2652,7 @@ babel-register@^6.26.0: babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -2395,7 +2660,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -2406,7 +2671,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -2421,7 +2686,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -2431,7 +2696,7 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: babelify@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" - integrity sha512-vID8Fz6pPN5pJMdlUnNFSfrlcx5MUule4k9aKs/zbZPyXxMTcRrB0M4Tarw22L8afr8eYSWxDPYCob3TdrqtlA== + integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= dependencies: babel-core "^6.0.14" object-assign "^4.0.0" @@ -2444,7 +2709,7 @@ babylon@^6.18.0: backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== + integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= dependencies: precond "0.2" @@ -2481,7 +2746,7 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" @@ -2490,15 +2755,15 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bigint-crypto-utils@^3.0.23: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - bignumber.js@^9.0.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + +bignumber.js@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== binary-extensions@^2.0.0: version "2.2.0" @@ -2538,51 +2803,54 @@ bluebird@^3.5.0, bluebird@^3.5.2: bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: 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.2.0, bn.js@^5.2.1: +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== + +bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" + integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== dependencies: bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" + depd "~1.1.2" + http-errors "1.8.1" iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" + on-finished "~2.3.0" + qs "6.9.7" + raw-body "2.4.3" type-is "~1.6.18" - unpipe "1.0.0" body-parser@^1.16.0: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: bytes "3.1.2" - content-type "~1.0.5" + content-type "~1.0.4" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" + qs "6.10.3" + raw-body "2.5.1" type-is "~1.6.18" unpipe "1.0.0" @@ -2622,7 +2890,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2632,17 +2900,7 @@ braces@^3.0.2, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-stdout@1.3.1: version "1.3.1" @@ -2714,7 +2972,7 @@ browserslist@^3.2.6: bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= dependencies: base-x "^3.0.2" @@ -2740,12 +2998,12 @@ buffer-from@^1.0.0: buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer-xor@^2.0.1: version "2.0.2" @@ -2762,18 +3020,10 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -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" - bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.6" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" + integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== dependencies: node-gyp-build "^4.3.0" @@ -2782,13 +3032,6 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -2797,14 +3040,14 @@ bytes@3.1.2: bytewise-core@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" - integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== + integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= dependencies: typewise-core "^1.2" bytewise@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" - integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== + integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= dependencies: bytewise-core "^1.2.2" typewise "^1.0.3" @@ -2824,16 +3067,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -2847,23 +3080,10 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - cachedown@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" - integrity sha512-t+yVk82vQWCJF3PsWHMld+jhhjkkWjcAzz8NbFx1iULOXWl8Tm/FdM4smZNVw3MRr0X+lVTx9PKzvEn4Ng19RQ== + integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= dependencies: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" @@ -2876,6 +3096,25 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2884,7 +3123,7 @@ callsites@^3.0.0: camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= camelcase@^5.0.0: version "5.3.1" @@ -2897,40 +3136,31 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30000844: - version "1.0.30001533" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001533.tgz#1180daeb2518b93c82f19b904d1fefcf82197707" - integrity sha512-9aY/b05NKU4Yl2sbcJhn4A7MsGwR1EPfW/nrqsnqVA0Oq50wpmPaGI+R1Z0UKlUl96oxUkGEOILWtOHck0eCWw== - -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + version "1.0.30001325" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" + integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== +cbor@^5.0.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== dependencies: - nofilter "^3.1.0" + bignumber.js "^9.0.1" + nofilter "^1.0.4" chai@^4.3.4: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^4.1.2" + deep-eql "^3.0.1" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" @@ -2939,7 +3169,7 @@ chai@^4.3.4: chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -2947,7 +3177,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2964,20 +3194,25 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + 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 sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== + integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= dependencies: functional-red-black-tree "^1.0.1" @@ -3080,22 +3315,18 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classic-level@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" - integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + cli-table3@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -3106,10 +3337,15 @@ cli-table3@^0.5.0: optionalDependencies: colors "^1.1.2" +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@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -3134,26 +3370,26 @@ cliui@^7.0.2: wrap-ansi "^7.0.0" clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone@2.1.2, clone@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= 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 sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + 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 sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3175,7 +3411,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" @@ -3219,34 +3455,34 @@ command-line-args@^5.1.1: typical "^4.0.0" command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + version "6.1.2" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.2.tgz#2b7ccd48a93fb19bd71ca8fe9900feab00e557b0" + integrity sha512-I+0XN613reAhpBQ6icsPOTwu9cvhc9NtLtUcY2fGYuwm9JZiWBzFDA8w0PHqQjru7Xth7fM/y9TJ13+VKdjh7Q== dependencies: - array-back "^4.0.2" + array-back "^4.0.1" chalk "^2.4.2" - table-layout "^1.0.2" + table-layout "^1.0.1" typical "^5.2.0" +commander@2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== + commander@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - commander@^2.12.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^9.2.0, commander@^9.4.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== component-emitter@^1.2.1: version "1.3.0" @@ -3256,7 +3492,7 @@ component-emitter@^1.2.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" @@ -3284,15 +3520,17 @@ content-hash@^2.5.2: multicodec "^0.5.5" multihashes "^0.4.15" -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.5.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" convert-svg-core@^0.6.4: version "0.6.4" @@ -3321,14 +3559,9 @@ convert-svg-to-png@^0.6.4: cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@^0.4.1: +cookie@0.4.2, cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== @@ -3341,12 +3574,12 @@ cookiejar@^2.1.1: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.1: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.2.tgz#b7dbdac528625cf87eb0523b532eb61551b9a6d1" - integrity sha512-Y2rxThOuNywTjnX/PgA5vWM6CZ9QB9sz9oGeCixV8MqXZO70z/5SHzf9EeBrEBK0PN36DnEBBu9O/aGWzKuMZQ== + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" + integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -3356,7 +3589,7 @@ core-js@^2.4.0, core-js@^2.5.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 sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= core-util-is@~1.0.0: version "1.0.3" @@ -3371,15 +3604,15 @@ cors@^2.8.1: object-assign "^4" vary "^1" -cosmiconfig@^8.0.0: - version "8.3.5" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.5.tgz#3b3897ddd042d022d5a207d4c8832e54f5301977" - integrity sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw== +cosmiconfig@^5.0.7: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" crc-32@^1.2.0: version "1.2.2" @@ -3437,13 +3670,6 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "^2.6.7" whatwg-fetch "^2.0.4" -cross-fetch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3467,7 +3693,7 @@ cross-spawn@^7.0.2: "crypt@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= crypto-browserify@3.12.0: version "3.12.0" @@ -3513,16 +3739,16 @@ d@1, d@^1.0.1: dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" death@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3543,6 +3769,13 @@ debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, de dependencies: ms "2.1.2" +debug@4.3.3, debug@^4.0.1: + 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" + debug@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3553,7 +3786,7 @@ debug@^3.1.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 sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decamelize@^4.0.0: version "4.0.0" @@ -3565,24 +3798,17 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.3.0: +decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== dependencies: type-detect "^4.0.0" @@ -3613,11 +3839,6 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - deferred-leveldown@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" @@ -3633,25 +3854,40 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +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 "~6.2.1" + inherits "^2.0.3" + +define-properties@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + 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 sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + 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 sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" @@ -3663,25 +3899,30 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + des.js@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -3691,20 +3932,25 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= dependencies: repeating "^2.0.0" detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== dependencies: address "^1.0.1" - debug "4" + debug "^2.6.0" devtools-protocol@0.0.981744: version "0.0.981744" @@ -3768,7 +4014,7 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== @@ -3776,13 +4022,13 @@ domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.3" + domhandler "^5.0.1" dotenv@^16.3.1: version "16.3.1" @@ -3797,14 +4043,14 @@ dotignore@~0.1.2: minimatch "^3.0.4" duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -3812,12 +4058,12 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.4.515" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.515.tgz#f5fec9662106ac5752894af221606cf4db443e70" - integrity sha512-VTq6vjk3kCfG2qdzQRd/i9dIyVVm0dbtZIgFzrLgfB73mXDQT2HPKVRc1EoZcAVUv9XhXAu08DWqJuababdGGg== + version "1.4.103" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz#abfe376a4d70fa1e1b4b353b95df5d6dfd05da3a" + integrity sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg== elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" @@ -3832,6 +4078,11 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emoji-regex@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.0.0.tgz#96559e19f82231b436403e059571241d627c42b8" + integrity sha512-KmJa8l6uHi1HrBI34udwlzZY1jOEuID/ft4d8BSSEdRyap7PwBEt910453PJa5MuGvxkLqlt4Uvhu7tttFHViw== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -3850,18 +4101,28 @@ encode-utf8@^1.0.2: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding-down@5.0.4, 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== dependencies: - abstract-leveldown "^5.0.0" + abstract-leveldown "^5.0.0" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + xtend "^4.0.1" + +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 "^6.2.1" inherits "^2.0.3" level-codec "^9.0.0" level-errors "^2.0.0" - xtend "^4.0.1" encoding@^0.1.11: version "0.1.13" @@ -3878,17 +4139,16 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enquirer@^2.3.0, enquirer@^2.3.6: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" - strip-ansi "^6.0.1" -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== env-paths@^2.2.0: version "2.2.1" @@ -3909,64 +4169,57 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-abstract@^1.18.5: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.1" is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== +es-abstract@^1.19.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== dependencies: - get-intrinsic "^1.1.3" + 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-tostringtag "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.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.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -3978,9 +4231,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + version "0.10.59" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6" + integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" @@ -3989,17 +4242,12 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= dependencies: d "1" es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - 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" @@ -4016,12 +4264,12 @@ escalade@^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" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -4031,7 +4279,7 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= dependencies: esprima "^2.7.1" estraverse "^1.9.1" @@ -4041,9 +4289,9 @@ escodegen@1.8.x: source-map "~0.2.0" eslint-config-prettier@^8.3.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-mocha@^9.0.0: version "9.0.0" @@ -4060,6 +4308,14 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + 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" @@ -4068,14 +4324,21 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -4083,86 +4346,144 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.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.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.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^5.6.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" eslint@^8.23.1: - version "8.49.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" - integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.49.0" - "@humanwhocodes/config-array" "^0.11.11" + version "8.23.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.1.tgz#cfd7b3f7fdd07db8d16b4ac0516a29c8d8dca5dc" + integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== + dependencies: + "@eslint/eslintrc" "^1.3.2" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" + ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" + import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.3" + optionator "^0.9.1" + regexpp "^3.2.0" strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== dependencies: - acorn "^8.9.0" + acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^3.3.0" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== +esquery@^1.0.1, esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" -esrecurse@^4.3.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -4172,7 +4493,7 @@ esrecurse@^4.3.0: estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= estraverse@^4.1.1: version "4.3.0" @@ -4192,7 +4513,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= eth-block-tracker@^3.0.0: version "3.0.1" @@ -4210,12 +4531,12 @@ eth-block-tracker@^3.0.0: eth-ens-namehash@2.0.8, 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 sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= dependencies: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.25: +eth-gas-reporter@^0.2.24: version "0.2.25" resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== @@ -4289,7 +4610,7 @@ eth-lib@^0.1.26: eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= dependencies: json-rpc-random-id "^1.0.0" xtend "^4.0.1" @@ -4309,7 +4630,7 @@ eth-sig-util@3.0.0: eth-sig-util@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" - integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== + integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= dependencies: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" @@ -4355,9 +4676,9 @@ ethereum-common@0.2.0: ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== + integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: +ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4379,24 +4700,14 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" - integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + version "1.0.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz#b1f8f4e702434b2016248dbb2f9fdd60c54772d8" + integrity sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ== dependencies: - "@noble/curves" "1.1.0" - "@noble/hashes" "1.3.1" - "@scure/bip32" "1.3.1" - "@scure/bip39" "1.2.1" + "@noble/hashes" "1.0.0" + "@noble/secp256k1" "1.5.5" + "@scure/bip32" "1.0.1" + "@scure/bip39" "1.0.0" ethereum-waffle@^3.4.0: version "3.4.4" @@ -4412,7 +4723,7 @@ ethereum-waffle@^3.4.0: ethereumjs-abi@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" - integrity sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g== + integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= dependencies: bn.js "^4.10.0" ethereumjs-util "^4.3.0" @@ -4551,10 +4862,21 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== +ethereumjs-util@^7.0.10: + 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" + rlp "^2.2.4" + +ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" + integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" @@ -4630,7 +4952,43 @@ ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.0, ethers@^5.5.2, ethers@^5.5.3, ethers@^5.6.9, ethers@^5.7.1: +ethers@^5.0.1, ethers@^5.0.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.2.tgz#e75bac7f038c5e0fdde667dba62fc223924143a2" + integrity sha512-EzGCbns24/Yluu7+ToWnMca3SXJ1Jk1BvWB7CCmVNxyOeM4LLvw2OLuIHhlkhQk1dtOcj9UMsdkxUh8RiG1dxQ== + dependencies: + "@ethersproject/abi" "5.6.0" + "@ethersproject/abstract-provider" "5.6.0" + "@ethersproject/abstract-signer" "5.6.0" + "@ethersproject/address" "5.6.0" + "@ethersproject/base64" "5.6.0" + "@ethersproject/basex" "5.6.0" + "@ethersproject/bignumber" "5.6.0" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.0" + "@ethersproject/contracts" "5.6.0" + "@ethersproject/hash" "5.6.0" + "@ethersproject/hdnode" "5.6.0" + "@ethersproject/json-wallets" "5.6.0" + "@ethersproject/keccak256" "5.6.0" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.1" + "@ethersproject/pbkdf2" "5.6.0" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.2" + "@ethersproject/random" "5.6.0" + "@ethersproject/rlp" "5.6.0" + "@ethersproject/sha2" "5.6.0" + "@ethersproject/signing-key" "5.6.0" + "@ethersproject/solidity" "5.6.0" + "@ethersproject/strings" "5.6.0" + "@ethersproject/transactions" "5.6.0" + "@ethersproject/units" "5.6.0" + "@ethersproject/wallet" "5.6.0" + "@ethersproject/web" "5.6.0" + "@ethersproject/wordlists" "5.6.0" + +ethers@^5.1.0: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -4666,10 +5024,82 @@ ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.0, ethers@^5.5.2, ethers@^5.5.3, ether "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@^5.5.2: + version "5.6.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.4.tgz#23629e9a7d4bc5802dfb53d4da420d738744b53c" + integrity sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ== + dependencies: + "@ethersproject/abi" "5.6.1" + "@ethersproject/abstract-provider" "5.6.0" + "@ethersproject/abstract-signer" "5.6.0" + "@ethersproject/address" "5.6.0" + "@ethersproject/base64" "5.6.0" + "@ethersproject/basex" "5.6.0" + "@ethersproject/bignumber" "5.6.0" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.0" + "@ethersproject/contracts" "5.6.0" + "@ethersproject/hash" "5.6.0" + "@ethersproject/hdnode" "5.6.0" + "@ethersproject/json-wallets" "5.6.0" + "@ethersproject/keccak256" "5.6.0" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.2" + "@ethersproject/pbkdf2" "5.6.0" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.4" + "@ethersproject/random" "5.6.0" + "@ethersproject/rlp" "5.6.0" + "@ethersproject/sha2" "5.6.0" + "@ethersproject/signing-key" "5.6.0" + "@ethersproject/solidity" "5.6.0" + "@ethersproject/strings" "5.6.0" + "@ethersproject/transactions" "5.6.0" + "@ethersproject/units" "5.6.0" + "@ethersproject/wallet" "5.6.0" + "@ethersproject/web" "5.6.0" + "@ethersproject/wordlists" "5.6.0" + +ethers@^5.6.9: + version "5.7.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" + integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.0" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.0" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.0" + "@ethersproject/wordlists" "5.7.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= dependencies: bn.js "4.11.6" number-to-bn "1.7.0" @@ -4682,6 +5112,11 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +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@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -4703,7 +5138,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -4714,60 +5149,59 @@ expand-brackets@^2.1.4: to-regex "^3.0.1" express@^4.14.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.17.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" + integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.19.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.4.2" cookie-signature "1.0.6" debug "2.6.9" - depd "2.0.0" + depd "~1.1.2" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "~1.1.2" fresh "0.5.2" - http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.11.0" + qs "6.9.7" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.17.2" + serve-static "1.14.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + 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.7.2" + 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 sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + 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 sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -4777,6 +5211,15 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + 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" @@ -4805,7 +5248,7 @@ extract-zip@2.0.1: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.1" @@ -4815,7 +5258,7 @@ extsprintf@^1.2.0: 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 sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== + integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= dependencies: checkpoint-store "^1.1.0" @@ -4824,15 +5267,26 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^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== -fast-diff@^1.1.2, fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.0.3, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.0.3: + 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.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4848,12 +5302,12 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + 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" @@ -4867,10 +5321,24 @@ fd-slicer@~1.1.0: fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== + integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= dependencies: node-fetch "~1.7.1" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + 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" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4886,7 +5354,7 @@ file-url@^3.0.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -4900,23 +5368,23 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.3.0" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~1.5.0" unpipe "~1.0.0" find-replace@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" - integrity sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA== + integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= dependencies: array-back "^1.0.4" test-value "^2.1.0" @@ -4946,7 +5414,7 @@ find-up@5.0.0, find-up@^5.0.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 sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -4954,7 +5422,7 @@ find-up@^1.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 sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" @@ -4981,13 +5449,21 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^3.2.7" - keyv "^4.5.3" + flatted "^3.1.0" rimraf "^3.0.2" flat@^4.1.0: @@ -5002,7 +5478,12 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.2.7: +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== @@ -5010,19 +5491,24 @@ flatted@^3.2.7: flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" - integrity sha512-rDjbZUKpN8OYhB0IE/vY/I8UWO/602IIJEU/76Tv4LvYnwHCk0BCsvz4eRr9n+FQcri7L5cyaXOo0+/Kh4HisA== + integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= fmix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= dependencies: imul "^1.0.0" -follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.12.1, follow-redirects@^1.14.0: + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== + +follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" @@ -5034,17 +5520,17 @@ for-each@^0.3.3, for-each@~0.3.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 sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^2.2.0: version "2.5.1" @@ -5100,14 +5586,14 @@ fp-ts@^1.0.0: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs-constants@^1.0.0: version "1.0.0" @@ -5117,7 +5603,7 @@ fs-constants@^1.0.0: fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -5126,9 +5612,9 @@ fs-extra@^0.30.0: rimraf "^2.2.8" fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + version "10.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" + integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5161,7 +5647,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.1.0: +fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5186,7 +5672,7 @@ fs-readdir-recursive@^1.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.1.1: version "2.1.3" @@ -5194,34 +5680,19 @@ fsevents@~2.1.1: integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= ganache-core@^2.13.2: version "2.13.2" @@ -5273,28 +5744,32 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +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== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" + has-symbols "^1.0.1" get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= get-stdin@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5309,11 +5784,6 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.1: - 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" @@ -5325,12 +5795,12 @@ get-symbol-description@^1.0.0: 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 sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" @@ -5349,7 +5819,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.2: +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== @@ -5380,7 +5850,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0: +glob@7.2.0, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@~7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5395,7 +5865,7 @@ glob@7.2.0: glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" @@ -5403,7 +5873,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.2.3: +glob@^7.1.1: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5415,10 +5885,10 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.2.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1, glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5450,10 +5920,15 @@ global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== +globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" @@ -5462,13 +5937,6 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^10.0.1: version "10.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -5495,32 +5963,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -5538,32 +5980,35 @@ got@9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== growl@1.10.5: version "1.10.5" @@ -5571,12 +6016,12 @@ growl@1.10.5: integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== handlebars@^4.0.1: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" - neo-async "^2.6.2" + neo-async "^2.6.0" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -5585,7 +6030,7 @@ handlebars@^4.0.1: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.5" @@ -5596,65 +6041,59 @@ har-validator@~5.1.3: har-schema "^2.0.0" hardhat-deploy@^0.11.4: - version "0.11.37" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.37.tgz#6a771b859c82ae25292321a6d510d7c0eda09d2b" - integrity sha512-pohPSEEo/X9Yfv0Fc0kXBQW6JO0LNOILBGCP69Ci1COJvLht1hLjAtXt/hccyvD9qY/uwJAM75fmsf41Y9N7lg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@ethersproject/providers" "^5.7.2" - "@ethersproject/solidity" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wallet" "^5.7.0" + version "0.11.4" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.4.tgz#39b06d3b0ad25195071cc1f2f71649b1f9f030d0" + integrity sha512-BNMwWqaxrwb8XKrYzmCwnUzOSKzicUBk+fwd28doUNoAGFFh8kpoypkcHMzKDVdLhnamAardcfqJet73zrZoTA== + dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.1" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.1" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/contracts" "^5.4.1" + "@ethersproject/providers" "^5.4.4" + "@ethersproject/solidity" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wallet" "^5.4.0" "@types/qs" "^6.9.7" axios "^0.21.1" chalk "^4.1.2" chokidar "^3.5.2" debug "^4.3.2" enquirer "^2.3.6" - ethers "^5.5.3" form-data "^4.0.0" fs-extra "^10.0.0" match-all "^1.2.6" murmur-128 "^0.2.1" qs "^6.9.4" - zksync-web3 "^0.14.3" hardhat-gas-reporter@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" - integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== + version "1.0.8" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" + integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== dependencies: array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" + eth-gas-reporter "^0.2.24" sha1 "^1.1.1" hardhat@^2.6.6: - version "2.17.3" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.17.3.tgz#4cb15f2afdea5f108970ed72e5b81e6e53052cfb" - integrity sha512-SFZoYVXW1bWJZrIIKXOA+IgcctfuKXDwENywiYNT2dM3YQc4fXNaTbuk/vpPzHIF50upByx4zW5EqczKYQubsA== - dependencies: + version "2.9.3" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.3.tgz#4759dc3c468c7d15f34334ca1be7d59b04e47b1e" + integrity sha512-7Vw99RbYbMZ15UzegOR/nqIYIqddZXvLwJGaX5sX4G5bydILnbjmDU6g3jMKJSiArEixS3vHAEaOs5CW1JQ3hg== + 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" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" - "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.14.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" @@ -5664,51 +6103,55 @@ hardhat@^2.6.6: debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" + ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "7.2.0" + glob "^7.1.3" immutable "^4.0.0-rc.12" io-ts "1.10.4" - keccak "^3.0.2" lodash "^4.17.11" + merkle-patricia-tree "^4.2.2" mnemonist "^0.38.0" - mocha "^10.0.0" + mocha "^9.2.0" p-map "^4.0.0" + qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" + slash "^3.0.0" solc "0.7.3" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" tsort "0.0.1" - undici "^5.14.0" + undici "^4.14.1" uuid "^8.3.2" ws "^7.4.6" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" @@ -5722,16 +6165,23 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + 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" @@ -5742,7 +6192,7 @@ has-tostringtag@^1.0.0: has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -5751,7 +6201,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -5760,12 +6210,12 @@ has-value@^1.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 sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + 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 sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -5810,12 +6260,12 @@ he@1.2.0: heap@0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" - integrity sha512-MzzWcnfB1e4EG2vHi3dXHoBupmuXNZzx6pY6HldVS55JKKBoq3xOyzfSaZRkJp37HIhEYC78knabHff3zc4dQQ== + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -5824,7 +6274,7 @@ hmac-drbg@^1.0.1: home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -5835,14 +6285,14 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== dependencies: domelementtype "^2.3.0" - domhandler "^5.0.3" + domhandler "^5.0.2" domutils "^3.0.1" - entities "^4.4.0" + entities "^4.3.0" http-basic@^8.1.1: version "8.1.3" @@ -5859,6 +6309,17 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +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@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -5873,7 +6334,7 @@ http-errors@2.0.0: http-https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= http-response-object@^3.0.1: version "3.0.2" @@ -5885,29 +6346,13 @@ http-response-object@^3.0.1: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: +https-proxy-agent@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -5915,7 +6360,15 @@ https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: agent-base "6" debug "4" -iconv-lite@0.4.24: +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" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5936,15 +6389,20 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== immediate@^3.2.3: version "3.3.0" @@ -5954,14 +6412,22 @@ immediate@^3.2.3: immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= immutable@^4.0.0-rc.12: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + 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" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" -import-fresh@^3.2.1, import-fresh@^3.3.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5972,12 +6438,12 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: imul@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" @@ -5987,7 +6453,7 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -6002,12 +6468,31 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + 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.2.0" + get-intrinsic "^1.1.0" has "^1.0.3" side-channel "^1.0.4" @@ -6026,7 +6511,7 @@ invariant@^2.2.2: invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= io-ts@1.10.4: version "1.10.4" @@ -6043,7 +6528,7 @@ ipaddr.js@1.9.1: 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 sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" @@ -6062,19 +6547,10 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: version "1.0.4" @@ -6103,15 +6579,15 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.5, is-buffer@~2.0.3: +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.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-callable@^1.1.3, 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-ci@^2.0.0: version "2.0.0" @@ -6120,17 +6596,24 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.2.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== 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 sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" @@ -6166,6 +6649,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: 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-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -6174,7 +6662,7 @@ is-docker@^2.0.0: 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 sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" @@ -6186,7 +6674,7 @@ is-extendable@^1.0.1: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.1.0" @@ -6196,19 +6684,19 @@ is-finite@^1.0.0: is-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== + integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= 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 sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + 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" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6237,9 +6725,9 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.1, is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -6254,7 +6742,7 @@ is-number-object@^1.0.4: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" @@ -6263,10 +6751,15 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-obj@^2.1.0: version "2.1.0" @@ -6288,17 +6781,22 @@ is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: +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.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" -is-stream@^1.0.1: +is-stream@^1.0.0, is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" @@ -6314,17 +6812,21 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +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: - which-typed-array "^1.1.11" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + 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 sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-unicode-supported@^0.1.0: version "0.1.0" @@ -6339,9 +6841,9 @@ is-url@^1.2.4: is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-weakref@^1.0.2: +is-weakref@^1.0.1, is-weakref@^1.0.2: 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== @@ -6363,39 +6865,42 @@ is-wsl@^2.1.1: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 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 sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + 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 sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" js-graph-algorithms@^1.0.18: version "1.0.18" @@ -6403,14 +6908,14 @@ js-graph-algorithms@^1.0.18: integrity sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA== js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + version "4.1.4" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" + integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== js-sha3@0.5.7, js-sha3@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" @@ -6425,7 +6930,7 @@ js-sha3@0.8.0, js-sha3@^0.8.0: js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@3.13.1: version "3.13.1" @@ -6435,7 +6940,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.13.1: +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -6453,32 +6958,27 @@ js-yaml@4.1.0, js-yaml@^4.1.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -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-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-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: version "3.8.0" @@ -6495,14 +6995,14 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" - integrity sha512-EwUeWP+KgAZ/xqFpaP6YDAXMtCJi+o/QQpCQFIYyxr01AdADi2y413eM8hSqJcoQym9WMePAJWoaODEJufC4Ug== + integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= dependencies: inherits "^2.0.1" json-rpc-random-id@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= json-schema-traverse@^0.4.1: version "0.4.1" @@ -6522,36 +7022,36 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stable-stringify@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" - integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: - jsonify "^0.0.1" + jsonify "~0.0.0" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" @@ -6564,15 +7064,15 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: version "1.4.2" @@ -6592,10 +7092,10 @@ keccak@3.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== +keccak@^3.0.0: + 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" @@ -6608,24 +7108,17 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== - dependencies: - json-buffer "3.0.1" - 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 sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + 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 sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" @@ -6649,19 +7142,19 @@ klaw-sync@^6.0.0: klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= optionalDependencies: graceful-fs "^4.1.9" klaw@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-4.1.0.tgz#5df608067d8cb62bbfb24374f8e5d956323338f3" - integrity sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-4.0.1.tgz#8dc6f5723f05894e8e931b516a8ff15c2976d368" + integrity sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" @@ -6677,6 +7170,11 @@ level-codec@~7.0.0: resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== +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@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" @@ -6710,7 +7208,7 @@ level-iterator-stream@^2.0.3: 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 sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== + integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= dependencies: inherits "^2.0.1" level-errors "^1.0.3" @@ -6726,6 +7224,15 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" +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.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" @@ -6734,6 +7241,22 @@ level-mem@^3.0.1: level-packager "~4.0.0" memdown "~3.0.0" +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 "^5.0.3" + memdown "^5.0.0" + +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 "^6.3.0" + levelup "^4.3.2" + level-packager@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" @@ -6765,23 +7288,17 @@ level-sublevel@6.6.4: typewiselite "~1.0.0" xtend "~4.0.0" -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: +level-supports@~1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== dependencies: - buffer "^6.0.3" - module-error "^1.0.1" + xtend "^4.0.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 sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== + integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= dependencies: readable-stream "~1.0.15" xtend "~2.1.1" @@ -6795,13 +7312,14 @@ level-ws@^1.0.0: readable-stream "^2.2.8" xtend "^4.0.1" -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== +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: - browser-level "^1.0.1" - classic-level "^1.2.0" + inherits "^2.0.3" + readable-stream "^3.1.0" + xtend "^4.0.1" levelup@3.1.1, levelup@^3.0.0: version "3.1.1" @@ -6826,31 +7344,37 @@ levelup@^1.2.1: semver "~5.4.1" xtend "~4.0.0" -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== +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: - prelude-ls "^1.2.1" - type-check "~0.4.0" + deferred-leveldown "~5.3.0" + level-errors "~2.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, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.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 sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -6861,7 +7385,7 @@ load-json-file@^1.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -6891,12 +7415,12 @@ locate-path@^6.0.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 sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= lodash.merge@^4.6.2: version "4.6.2" @@ -6923,7 +7447,7 @@ lodash@4.17.20: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6946,12 +7470,12 @@ log-symbols@4.1.0: looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" - integrity sha512-6DzMHJcjbQX/UPHc1rRCBfKlLwDkvuGZ715cIR36wSdYqWXFT35uLXq5P/2orl3tz+t+VOVPxw4yPinQlUDGDQ== + integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= looper@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" - integrity sha512-LJ9wplN/uSn72oJRsXTx+snxPet5c8XiZmOKCm906NVYu+ag6SB6vUcnJcWxgnl2NfbIyeobAn7Bwv6xRj2XJg== + integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= loose-envify@^1.0.0: version "1.4.0" @@ -6961,9 +7485,9 @@ loose-envify@^1.0.0: js-tokens "^3.0.0 || ^4.0.0" loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== dependencies: get-func-name "^2.0.0" @@ -6977,11 +7501,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - lru-cache@5.1.1, lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6992,7 +7511,7 @@ lru-cache@5.1.1, lru-cache@^5.1.1: lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - integrity sha512-91gyOKTc2k66UG6kHiH4h3S2eltcPwE1STVfMYC/NG+nZwf8IIuiamfmpGZjpbbxzSyEJaLC0tNSmhjlQUTJow== + integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= dependencies: pseudomap "^1.0.1" @@ -7006,17 +7525,17 @@ lru-cache@^6.0.0: lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= ltgt@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" - integrity sha512-5VjHC5GsENtIi5rbJd+feEpDKhfr7j0odoUR2Uh978g+2p93nd5o34cTjQWohXsPsCZeqoDnIqEf88mPCe0Pfw== + integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= make-error@^1.1.1: version "1.3.6" @@ -7026,12 +7545,12 @@ make-error@^1.1.1: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + 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 sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" @@ -7062,12 +7581,12 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= dependencies: abstract-leveldown "~2.7.1" functional-red-black-tree "^1.0.1" @@ -7076,6 +7595,18 @@ memdown@^1.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" +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 "~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.2.0" + memdown@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" @@ -7088,24 +7619,15 @@ memdown@~3.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" @@ -7139,15 +7661,22 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" +merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz#ff988d045e2bf3dfa2239f7fabe2d59618d57413" + integrity sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.4" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + 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 sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= micromatch@^3.1.4: version "3.1.10" @@ -7168,7 +7697,7 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -7176,6 +7705,14 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +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.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7201,20 +7738,20 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= dependencies: dom-walk "^0.1.0" @@ -7226,40 +7763,40 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^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 sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4: +"minimatch@2 || 3", minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" @@ -7292,34 +7829,29 @@ mkdirp-classic@^0.5.2: mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= dependencies: mkdirp "*" -mkdirp@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== +mkdirp@*, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.5: +mkdirp@0.5.5, mkdirp@0.5.x: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -7327,33 +7859,6 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - mocha@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" @@ -7384,20 +7889,45 @@ mocha@^7.1.1: yargs-parser "13.1.2" yargs-unparser "1.6.0" +mocha@^9.2.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + mock-fs@^4.1.0: version "4.14.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.1: version "2.1.1" @@ -7463,15 +7993,20 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + 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 sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== nanomatch@^1.2.9: version "1.2.13" @@ -7490,27 +8025,17 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.2: +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== @@ -7545,20 +8070,13 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -7568,19 +8086,19 @@ node-fetch@~1.7.1: is-stream "^1.0.1" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" - integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== +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== nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" @@ -7604,11 +8122,6 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -7619,12 +8132,12 @@ nth-check@^2.0.1: 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 sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + 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" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= dependencies: bn.js "4.11.6" strip-hex-prefix "1.0.0" @@ -7637,21 +8150,21 @@ oauth-sign@~0.9.0: object-assign@^4, object-assign@^4.0.0, 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 sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.3, object-inspect@^1.9.0, object-inspect@~1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.11.0, object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-is@^1.0.1: version "1.1.5" @@ -7661,7 +8174,7 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys@^1.0.11, object-keys@^1.1.1: +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== @@ -7669,12 +8182,12 @@ object-keys@^1.0.11, object-keys@^1.1.1: object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + 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 sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" @@ -7688,50 +8201,48 @@ object.assign@4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.6: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: - array.prototype.reduce "^1.0.6" call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.19.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.2.tgz#25f50dc92e1181371b9d8209d11890f1a3c2fc21" + integrity sha512-g0TrA7SbUggROhDPK8cEu/qpItwH2LSKcNl4tlfBNT54XY+nOsqrs0Q68h1V9b3HOSpIWv15jb1lax2hAggdIg== oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ== + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= dependencies: http-https "^1.0.0" oboe@2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= dependencies: http-https "^1.0.0" @@ -7742,13 +8253,27 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -7757,7 +8282,7 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -7769,49 +8294,49 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.3" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= dependencies: lcid "^1.0.0" os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^1.1.0: version "1.3.0" @@ -7837,7 +8362,7 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" @@ -7869,10 +8394,17 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.2.0" @@ -7900,7 +8432,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-cache-control@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + integrity sha1-juqz5U+laSD+Fro493+iGqzC104= parse-headers@^2.0.0: version "2.0.5" @@ -7910,19 +8442,17 @@ parse-headers@^2.0.0: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" -parse-json@^5.2.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== +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 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" + json-parse-better-errors "^1.0.1" parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" @@ -7933,9 +8463,9 @@ parse5-htmlparser2-tree-adapter@^7.0.0: parse5 "^7.0.0" parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + version "7.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" + integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== dependencies: entities "^4.4.0" @@ -7947,7 +8477,7 @@ parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= patch-package@6.2.2: version "6.2.2" @@ -7968,24 +8498,23 @@ patch-package@6.2.2: tmp "^0.0.33" patch-package@^6.2.2, patch-package@^6.4.7: - version "6.5.1" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" - integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== + version "6.4.7" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== dependencies: "@yarnpkg/lockfile" "^1.1.0" - chalk "^4.1.2" + chalk "^2.4.2" cross-spawn "^6.0.5" find-yarn-workspace-root "^2.0.0" - fs-extra "^9.0.0" + fs-extra "^7.0.1" is-ci "^2.0.0" klaw-sync "^6.0.0" - minimist "^1.2.6" + minimist "^1.2.0" open "^7.4.2" rimraf "^2.6.3" semver "^5.6.0" slash "^2.0.0" tmp "^0.0.33" - yaml "^1.10.2" path-browserify@^1.0.0: version "1.0.1" @@ -7995,14 +8524,14 @@ path-browserify@^1.0.0: path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + 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" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" @@ -8012,12 +8541,17 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.1.0: version "3.1.1" @@ -8032,12 +8566,12 @@ path-parse@^1.0.6, path-parse@^1.0.7: 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 sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + 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 sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -8072,9 +8606,9 @@ pend@~1.2.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8082,7 +8616,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^4.0.1: version "4.0.1" @@ -8092,14 +8626,14 @@ pify@^4.0.1: pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: 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 sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@4.2.0: version "4.2.0" @@ -8108,11 +8642,6 @@ pkg-dir@4.2.0: dependencies: find-up "^4.0.0" -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - pollock@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/pollock/-/pollock-0.2.1.tgz#01273ae3542511492d07f1c10fa53f149b37c6ad" @@ -8121,7 +8650,7 @@ pollock@^0.2.0: 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 sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postinstall-postinstall@^2.1.0: version "2.1.0" @@ -8131,7 +8660,7 @@ postinstall-postinstall@^2.1.0: precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== + integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= prelude-ls@^1.2.1: version "1.2.1" @@ -8141,12 +8670,17 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -8156,18 +8690,31 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier-plugin-solidity@^1.0.0-beta.19: - version "1.1.3" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" - integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== + version "1.0.0-beta.19" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz#7c3607fc4028f5e6a425259ff03e45eedf733df3" + integrity sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g== dependencies: - "@solidity-parser/parser" "^0.16.0" - semver "^7.3.8" + "@solidity-parser/parser" "^0.14.0" + emoji-regex "^10.0.0" + escape-string-regexp "^4.0.0" + semver "^7.3.5" solidity-comments-extractor "^0.0.7" + string-width "^4.2.3" -prettier@^2.1.2, prettier@^2.3.1, prettier@^2.5.1, prettier@^2.8.3: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^1.14.3: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +prettier@^2.1.2, prettier@^2.3.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" + integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== + +prettier@^2.5.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== private@^0.1.6, private@^0.1.8: version "0.1.8" @@ -8182,9 +8729,9 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@2.0.3: +progress@2.0.3, progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -8192,15 +8739,15 @@ progress@2.0.3: promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== + integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= dependencies: is-fn "^1.0.0" set-immediate-shim "^1.0.1" promise@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" - integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== dependencies: asap "~2.0.6" @@ -8220,17 +8767,17 @@ proxy-from-env@1.1.0: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== public-encrypt@^4.0.0: version "4.0.3" @@ -8247,7 +8794,7 @@ public-encrypt@^4.0.0: pull-cat@^1.1.9: version "1.1.11" resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" - integrity sha512-i3w+xZ3DCtTVz8S62hBOuNLRHqVDsHMNZmgrZsjPnsxXUgbWtXEee84lo1XswE7W2a3WHyqsNuDJTjVLAQR8xg== + integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= pull-defer@^0.2.2: version "0.2.3" @@ -8270,7 +8817,7 @@ pull-level@^2.0.3: pull-live@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" - integrity sha512-tkNz1QT5gId8aPhV5+dmwoIiA1nmfDOzJDlOOUpU5DNusj6neNd3EePybJ5+sITr2FwyCs/FVpx74YMCfc8YeA== + integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= dependencies: pull-cat "^1.1.9" pull-stream "^3.4.0" @@ -8278,17 +8825,17 @@ pull-live@^1.0.1: pull-pushable@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" - integrity sha512-M7dp95enQ2kaHvfCt2+DJfyzgCSpWVR2h2kWYnVsW6ZpxQBx5wOu0QWOvQPVoPnBLUZYitYP2y7HyHkLQNeGXg== + integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: - version "3.7.0" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.7.0.tgz#85de0e44ff38a4d2ad08cc43fc458e1922f9bf0b" - integrity sha512-Eco+/R004UaCK2qEDE8vGklcTG2OeZSVm1kTUQNrykEjDwcFXDZhygFDsW49DbXyJMEhHeRL3z5cRVqPAhXlIw== + version "3.6.14" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" + integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== pull-window@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" - integrity sha512-cbDzN76BMlcGG46OImrgpkMf/VkCnupj8JhsrpBw3aWBM9ye345aYnqitmZCgauBkc0HbbRRn9hCnsa3k2FNUg== + integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= dependencies: looper "^2.0.0" @@ -8300,20 +8847,20 @@ 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 sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== puppeteer@^13.7.0: version "13.7.0" @@ -8333,19 +8880,17 @@ puppeteer@^13.7.0: unbzip2-stream "1.4.3" ws "8.5.0" -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@6.10.3, qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== dependencies: side-channel "^1.0.4" -qs@^6.11.2, qs@^6.4.0, qs@^6.9.4: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" +qs@6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== qs@~6.5.2: version "6.5.3" @@ -8361,16 +8906,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -queue-microtask@^1.2.2, queue-microtask@^1.2.3: +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" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - ramda@^0.27.1: version "0.27.2" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" @@ -8396,20 +8941,20 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" + integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== dependencies: bytes "3.1.2" - http-errors "2.0.0" + http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.2, raw-body@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@2.5.1, raw-body@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -8419,7 +8964,7 @@ raw-body@2.5.2, raw-body@^2.4.1: 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 sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -8427,7 +8972,7 @@ read-pkg-up@^1.0.1: read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -8436,7 +8981,7 @@ read-pkg@^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 sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8444,9 +8989,9 @@ readable-stream@^1.0.33: string_decoder "~0.10.x" readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8456,10 +9001,10 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== +readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, 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== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -8468,7 +9013,7 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable readable-stream@~1.0.15: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8492,16 +9037,16 @@ readdirp@~3.6.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" recursive-readdir@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== dependencies: - minimatch "^3.0.5" + minimatch "3.0.4" reduce-flatten@^2.0.0: version "2.0.0" @@ -8535,19 +9080,28 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== dependencies: call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" + define-properties "^1.1.3" + +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.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -8556,12 +9110,12 @@ regexpu-core@^2.0.0: regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= dependencies: jsesc "~0.5.0" @@ -8573,26 +9127,26 @@ repeat-element@^1.1.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 sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + integrity sha1-1AgrTURZgDZkD7c93qAe1T20nrw= dependencies: req-from "^2.0.0" req-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + integrity sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA= dependencies: resolve-from "^3.0.0" @@ -8641,12 +9195,12 @@ request@^2.79.0, request@^2.85.0, request@^2.88.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 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 sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" @@ -8656,22 +9210,17 @@ require-from-string@^2.0.0, require-from-string@^2.0.2: 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 sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== + 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" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" @@ -8681,12 +9230,12 @@ resolve-from@^4.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + 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" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@1.17.0: version "1.17.0" @@ -8695,33 +9244,51 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1, resolve@~1.22.1: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.8.1, resolve@~1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.3.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: - lowercase-keys "^2.0.0" + onetime "^2.0.0" + signal-exit "^3.0.2" resumer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= dependencies: through "~2.3.4" @@ -8735,6 +9302,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -8764,12 +9338,10 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^5.2.0" -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" +run-async@^2.2.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" @@ -8783,15 +9355,12 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -safe-array-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +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: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" + tslib "^1.9.0" safe-buffer@5.2.1, 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" @@ -8810,19 +9379,10 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" @@ -8864,7 +9424,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" - integrity sha512-aldIRgMozSJ/Gl6K6qmJZysRP82lz83Wb42vl4PWN8SaLFHIaOzLPc9nUUW2jQN88CuGm5q5HefJ9jZ3nWSmTw== + integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= dependencies: pbkdf2 "^3.0.3" @@ -8882,25 +9442,37 @@ seedrandom@3.0.1: resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== +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= + semaphore@>=1.0.1, semaphore@^1.0.3, 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@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +"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== semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" -semver@^7.3.4, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -8909,24 +9481,24 @@ semver@~5.4.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" + depd "~1.1.2" + destroy "~1.0.4" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "2.0.0" + http-errors "1.8.1" mime "1.6.0" ms "2.1.3" - on-finished "2.4.1" + on-finished "~2.3.0" range-parser "~1.2.1" - statuses "2.0.1" + statuses "~1.5.0" serialize-javascript@6.0.0: version "6.0.0" @@ -8935,15 +9507,15 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.17.2" servify@^0.1.12: version "0.1.12" @@ -8959,12 +9531,12 @@ servify@^0.1.12: set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -8979,12 +9551,12 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.2.0: version "1.2.0" @@ -9002,7 +9574,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: sha1@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= dependencies: charenc ">= 0.0.1" crypt ">= 0.0.1" @@ -9010,7 +9582,7 @@ sha1@^1.1.1: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" @@ -9024,7 +9596,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" @@ -9049,6 +9621,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -9066,7 +9643,7 @@ simple-get@^2.7.0: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slash@^2.0.0: version "2.0.0" @@ -9078,6 +9655,15 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -9180,29 +9766,26 @@ solhint-plugin-prettier@^0.0.5: prettier-linter-helpers "^1.0.0" solhint@^3.3.7: - version "3.6.2" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.6.2.tgz#2b2acbec8fdc37b2c68206a71ba89c7f519943fe" - integrity sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ== - dependencies: - "@solidity-parser/parser" "^0.16.0" - ajv "^6.12.6" - antlr4 "^4.11.0" - ast-parents "^0.0.1" - chalk "^4.1.2" - commander "^10.0.0" - cosmiconfig "^8.0.0" - fast-diff "^1.2.0" - glob "^8.0.3" - ignore "^5.2.4" - js-yaml "^4.1.0" - lodash "^4.17.21" - pluralize "^8.0.0" - semver "^7.5.2" - strip-ansi "^6.0.1" - table "^6.8.1" - text-table "^0.2.0" + version "3.3.7" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" + integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== + dependencies: + "@solidity-parser/parser" "^0.14.1" + ajv "^6.6.1" + antlr4 "4.7.1" + ast-parents "0.0.1" + chalk "^2.4.2" + commander "2.18.0" + cosmiconfig "^5.0.7" + eslint "^5.6.0" + fast-diff "^1.1.2" + glob "^7.1.3" + ignore "^4.0.6" + js-yaml "^3.12.0" + lodash "^4.17.11" + semver "^6.3.0" optionalDependencies: - prettier "^2.8.3" + prettier "^1.14.3" solidity-comments-extractor@^0.0.7: version "0.0.7" @@ -9210,9 +9793,9 @@ solidity-comments-extractor@^0.0.7: integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== solidity-coverage@^0.7.20: - version "0.7.22" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.22.tgz#168f414be4c0f5303addcf3ab9714cf64f72c080" - integrity sha512-I6Zd5tsFY+gmj1FDIp6w7OrUePx6ZpMgKQZg7dWgPaQHePLi3Jk+iJ8lwZxsWEoNy2Lcv91rMxATWHqRaFdQpw== + version "0.7.20" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.20.tgz#246e9b0dd62f698bb8ddeecdcc46cab26c48b637" + integrity sha512-edOXTugUYdqxrtEnIn4vgrGjLPxdexcL0WD8LzAvVA3d1dwgcfRO3k8xQR02ZQnOnWMBi8Cqs0F+kAQQp3JW8g== dependencies: "@solidity-parser/parser" "^0.14.0" "@truffle/provider" "^0.2.24" @@ -9275,7 +9858,7 @@ source-map-url@^0.4.0: source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" @@ -9285,14 +9868,14 @@ source-map@^0.6.0, source-map@^0.6.1: source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= dependencies: amdefine ">=0.0.4" spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + 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" @@ -9311,9 +9894,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== + 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" @@ -9325,7 +9908,7 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.17.0" @@ -9352,7 +9935,7 @@ stacktrace-parser@^0.1.10: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9362,10 +9945,15 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"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" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-to-pull-stream@^1.7.1: version "1.7.3" @@ -9375,15 +9963,10 @@ stream-to-pull-stream@^1.7.1: looper "^3.0.0" pull-stream "^3.2.3" -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - 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 sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-format@^2.0.0: version "2.0.0" @@ -9393,13 +9976,13 @@ string-format@^2.0.0: string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + 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.1.1: +"string-width@^1.0.2 || 2", 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== @@ -9425,32 +10008,30 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.7, string.prototype.trim@~1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" + integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== dependencies: call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.1.3" + es-abstract "^1.19.1" -string.prototype.trimend@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.1.3" -string.prototype.trimstart@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.1.3" string_decoder@^1.1.1: version "1.3.0" @@ -9462,7 +10043,7 @@ string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@~1.1.1: version "1.1.1" @@ -9474,14 +10055,14 @@ string_decoder@~1.1.1: 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 sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" @@ -9502,23 +10083,23 @@ strip-ansi@^6.0.0, strip-ansi@^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 sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1: +strip-json-comments@2.0.1, strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -9540,12 +10121,12 @@ supports-color@8.1.1: supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" @@ -9569,15 +10150,15 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== dependencies: bluebird "^3.5.0" buffer "^5.0.5" eth-lib "^0.1.26" fs-extra "^4.0.2" - got "^11.8.5" + got "^7.1.0" mime-types "^2.1.16" mkdirp-promise "^5.0.1" mock-fs "^4.1.0" @@ -9601,7 +10182,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -table-layout@^1.0.2: +table-layout@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== @@ -9611,10 +10192,20 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" -table@^6.8.0, table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -9623,24 +10214,24 @@ table@^6.8.0, table@^6.8.1: strip-ansi "^6.0.1" tape@^4.6.3: - version "4.16.2" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.16.2.tgz#7565e6af20426565557266e9dda7215869b297b6" - integrity sha512-TUChV+q0GxBBCEbfCYkGLkv8hDJYjMdSWdE0/Lr331sB389dsvFUHNV9ph5iQqKzt8Ss9drzcda/YeexclBFqg== + version "4.15.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.0.tgz#1b8a9563b4bc7e51302216c137732fb2ce6d1a99" + integrity sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ== dependencies: call-bind "~1.0.2" deep-equal "~1.1.1" - defined "~1.0.1" + defined "~1.0.0" dotignore "~0.1.2" for-each "~0.3.3" - glob "~7.2.3" + glob "~7.2.0" has "~1.0.3" inherits "~2.0.4" is-regex "~1.1.4" - minimist "~1.2.7" - object-inspect "~1.12.3" - resolve "~1.22.1" + minimist "~1.2.5" + object-inspect "~1.12.0" + resolve "~1.22.0" resumer "~0.0.0" - string.prototype.trim "~1.2.7" + string.prototype.trim "~1.2.5" through "~2.3.8" tar-fs@2.1.1: @@ -9680,7 +10271,7 @@ tar@^4.0.2: test-value@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" - integrity sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w== + integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= dependencies: array-back "^1.0.3" typical "^2.6.0" @@ -9693,7 +10284,7 @@ testrpc@0.0.1: text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= then-request@^6.0.0: version "6.0.2" @@ -9720,15 +10311,15 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8, through@~2.3.4, through@~2.3.8: +through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -timed-out@^4.0.1: +timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= tmp@0.0.33, tmp@^0.0.33: version "0.0.33" @@ -9754,12 +10345,12 @@ tmp@^0.2.1: to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= 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 sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" @@ -9771,7 +10362,7 @@ to-readable-stream@^1.0.0: 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 sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -9809,17 +10400,22 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"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" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== ts-command-line-args@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" - integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz#fd6913e542099012c0ffb2496126a8f38305c7d6" + integrity sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ== dependencies: chalk "^4.1.0" command-line-args "^5.1.1" @@ -9857,11 +10453,11 @@ ts-generator@^0.1.1: ts-essentials "^1.0.0" ts-node@^10.4.0: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + version "10.7.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" + integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== dependencies: - "@cspotcode/source-map-support" "^0.8.0" + "@cspotcode/source-map-support" "0.7.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -9872,10 +10468,10 @@ ts-node@^10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" + v8-compile-cache-lib "^3.0.0" yn "3.1.1" -tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.3: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -9902,7 +10498,7 @@ tslint@^6.1.3: tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= tsutils@^2.29.0: version "2.29.0" @@ -9921,7 +10517,7 @@ tsutils@^3.21.0: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" @@ -9933,7 +10529,7 @@ tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= tweetnacl@^1.0.0, tweetnacl@^1.0.3: version "1.0.3" @@ -9950,7 +10546,7 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" @@ -9987,10 +10583,10 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== +type@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" + integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== typechain@^3.0.0: version "3.0.0" @@ -10006,9 +10602,9 @@ typechain@^3.0.0: ts-generator "^0.1.1" typechain@^8.0.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.1.tgz#dccbc839b94877997536c356380eff7325395cfb" - integrity sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ== + version "8.0.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.0.0.tgz#a5dbe754717a7e16247df52b5285903de600e8ff" + integrity sha512-rqDfDYc9voVAhmfVfAwzg3VYFvhvs5ck1X9T/iWkX745Cul4t+V/smjnyqrbDzWDbzD93xfld1epg7Y/uFAesQ== dependencies: "@types/prettier" "^2.1.1" debug "^4.3.1" @@ -10021,45 +10617,6 @@ typechain@^8.0.0: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10070,34 +10627,34 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.5.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + version "4.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" + integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" - integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== + integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= typewise@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" - integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== + integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= dependencies: typewise-core "^1.2.0" typewiselite@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" - integrity sha512-J9alhjVHupW3Wfz6qFRGgQw0N3gr8hOkw6zm7FZ6UR1Cse/oD9/JVok7DNE9TT9IbciDHX2Ex9+ksE6cRmtymw== + integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= typical@^2.6.0, typical@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" - integrity sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg== + integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= typical@^4.0.0: version "4.0.0" @@ -10110,23 +10667,23 @@ typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + version "3.14.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.5.tgz#cdabb7d4954231d80cb4a927654c4655e51f4859" + integrity sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ== 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.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +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== dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" unbzip2-stream@1.4.3: @@ -10142,12 +10699,15 @@ underscore@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== -undici@^5.14.0: - version "5.24.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.24.0.tgz#6133630372894cfeb3c3dab13b4c23866bd344b5" - integrity sha512-OKlckxBjFl0oXxcj9FU6oB8fDAaiRUq+D8jrFWGmOfI/gIyjk/IeS75LMzgYKUaeHzLUcYvf9bbJGSrUwTfwwQ== - dependencies: - busboy "^1.6.0" +undici@^4.14.1: + version "4.16.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-4.16.0.tgz#469bb87b3b918818d3d7843d91a1d08da357d5ff" + integrity sha512-tkZSECUYi+/T1i4u+4+lwZmQgLXd4BLGlrc7KZPcLIW7Jpq99+Xpc30ONv7nS6F5UNOxp/HBZSSL9MafUrvJbw== + +undici@^5.4.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.10.0.tgz#dd9391087a90ccfbd007568db458674232ebf014" + integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== union-value@^1.0.0: version "1.0.1" @@ -10177,12 +10737,12 @@ unorm@^1.3.3: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + 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 sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10197,27 +10757,39 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "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.2" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.2.tgz#02f250a6e0d992b781828cd456d44f49bf2e19dd" - integrity sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg== + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: - punycode "^1.4.1" - qs "^6.11.2" + punycode "1.3.2" + querystring "0.2.0" use@^3.1.0: version "3.1.1" @@ -10225,9 +10797,9 @@ use@^3.1.0: integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + version "5.0.9" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" + integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== dependencies: node-gyp-build "^4.3.0" @@ -10239,41 +10811,40 @@ utf8@3.0.0, utf8@^3.0.0: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" - integrity sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" + call-bind "^1.0.0" + define-properties "^1.1.3" for-each "^0.3.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - object.getownpropertydescriptors "^2.1.6" - safe-array-concat "^1.0.0" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" -util@^0.12.0, util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== +util@^0.12.0: + 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" is-generator-function "^1.0.7" is-typed-array "^1.1.3" + safe-buffer "^5.1.2" which-typed-array "^1.1.2" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= uuid@3.3.2: version "3.3.2" @@ -10290,15 +10861,10 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-compile-cache-lib@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" + integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -10316,26 +10882,17 @@ varint@^5.0.0: vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -web3-bzz@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.0.tgz#ac74bc71cdf294c7080a79091079192f05c5baed" - integrity sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA== - dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" - web3-bzz@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" @@ -10346,23 +10903,15 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.7.4.tgz#9419e606e38a9777443d4ce40506ebd796e06075" - integrity sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q== +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" -web3-core-helpers@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz#1016534c51a5df77ed4f94d1fcce31de4af37fad" - integrity sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g== - dependencies: - web3-eth-iban "1.10.0" - web3-utils "1.10.0" - web3-core-helpers@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" @@ -10372,24 +10921,13 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz#f8f808928560d3e64e0c8d7bdd163aa4766bcf40" - integrity sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg== - dependencies: - web3-eth-iban "1.7.4" - web3-utils "1.7.4" - -web3-core-method@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.0.tgz#82668197fa086e8cc8066742e35a9d72535e3412" - integrity sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA== +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: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-core-subscriptions "1.10.0" - web3-utils "1.10.0" + web3-eth-iban "1.5.3" + web3-utils "1.5.3" web3-core-method@1.2.11: version "1.2.11" @@ -10403,23 +10941,17 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.7.4.tgz#3873c6405e1a0a8a1efc1d7b28de8b7550b00c15" - integrity sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-utils "1.7.4" - -web3-core-promievent@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz#cbb5b3a76b888df45ed3a8d4d8d4f54ccb66a37b" - integrity sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg== +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: - eventemitter3 "4.0.4" + "@ethereumjs/common" "^2.4.0" + "@ethersproject/transactions" "^5.0.0-beta.135" + 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-promievent@1.2.11: version "1.2.11" @@ -10428,24 +10960,13 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz#80a75633fdfe21fbaae2f1e38950edb2f134868c" - integrity sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA== +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-requestmanager@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz#4b34f6e05837e67c70ff6f6993652afc0d54c340" - integrity sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ== - dependencies: - util "^0.12.5" - web3-core-helpers "1.10.0" - web3-providers-http "1.10.0" - web3-providers-ipc "1.10.0" - web3-providers-ws "1.10.0" - web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -10457,24 +10978,16 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz#2dc8a526dab8183dca3fef54658621801b1d0469" - integrity sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA== +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: util "^0.12.0" - web3-core-helpers "1.7.4" - web3-providers-http "1.7.4" - web3-providers-ipc "1.7.4" - web3-providers-ws "1.7.4" - -web3-core-subscriptions@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz#b534592ee1611788fc0cb0b95963b9b9b6eacb7c" - integrity sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" + 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-subscriptions@1.2.11: version "1.2.11" @@ -10485,26 +10998,13 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz#cfbd3fa71081a8c8c6f1a64577a1a80c5bd9826f" - integrity sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g== +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" - web3-core-helpers "1.7.4" - -web3-core@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.0.tgz#9aa07c5deb478cf356c5d3b5b35afafa5fa8e633" - integrity sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-requestmanager "1.10.0" - web3-utils "1.10.0" + web3-core-helpers "1.5.3" web3-core@1.2.11: version "1.2.11" @@ -10519,26 +11019,18 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.7.4.tgz#943fff99134baedafa7c65b4a0bbd424748429ff" - integrity sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q== +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" "^5.1.0" + "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-requestmanager "1.7.4" - web3-utils "1.7.4" - -web3-eth-abi@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz#53a7a2c95a571e205e27fd9e664df4919483cce1" - integrity sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.0" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" web3-eth-abi@1.2.11: version "1.2.11" @@ -10549,29 +11041,13 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz#3fee967bafd67f06b99ceaddc47ab0970f2a614a" - integrity sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.7.4" - -web3-eth-accounts@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" - integrity sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q== +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: - "@ethereumjs/common" "2.5.0" - "@ethereumjs/tx" "3.3.2" - eth-lib "0.2.8" - ethereumjs-util "^7.1.5" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-utils "1.10.0" + "@ethersproject/abi" "5.0.7" + web3-utils "1.5.3" web3-eth-accounts@1.2.11: version "1.2.11" @@ -10590,36 +11066,22 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz#7a24a4dfe947f7e9d1bae678529e591aa146167a" - integrity sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw== +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.5.0" - "@ethereumjs/tx" "^3.3.2" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" crypto-browserify "3.12.0" eth-lib "0.2.8" ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" - -web3-eth-contract@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz#8e68c7654576773ec3c91903f08e49d0242c503a" - integrity sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w== - dependencies: - "@types/bn.js" "^5.1.1" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-promievent "1.10.0" - web3-core-subscriptions "1.10.0" - web3-eth-abi "1.10.0" - web3-utils "1.10.0" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-eth-contract@1.2.11: version "1.2.11" @@ -10636,33 +11098,19 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz#e5761cfb43d453f57be4777b2e5e7e1082078ff7" - integrity sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ== - dependencies: - "@types/bn.js" "^5.1.0" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-promievent "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-utils "1.7.4" - -web3-eth-ens@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz#96a676524e0b580c87913f557a13ed810cf91cd9" - integrity sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g== +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: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-eth-abi "1.10.0" - web3-eth-contract "1.10.0" - web3-utils "1.10.0" + "@types/bn.js" "^4.11.5" + 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-ens@1.2.11: version "1.2.11" @@ -10679,27 +11127,19 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz#346720305379c0a539e226141a9602f1da7bc0c8" - integrity sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA== +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" - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-promievent "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-contract "1.7.4" - web3-utils "1.7.4" - -web3-eth-iban@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" - integrity sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.10.0" + 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-iban@1.2.11: version "1.2.11" @@ -10709,25 +11149,13 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz#711fb2547fdf0f988060027331b2b6c430505753" - integrity sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w== - dependencies: - bn.js "^5.2.1" - web3-utils "1.7.4" - -web3-eth-personal@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz#94d525f7a29050a0c2a12032df150ac5ea633071" - integrity sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg== +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: - "@types/node" "^12.12.6" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-net "1.10.0" - web3-utils "1.10.0" + bn.js "^4.11.9" + web3-utils "1.5.3" web3-eth-personal@1.2.11: version "1.2.11" @@ -10741,35 +11169,17 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz#22c399794cb828a75703df8bb4b3c1331b471546" - integrity sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g== +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.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-eth@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.0.tgz#38b905e2759697c9624ab080cfcf4e6c60b3a6cf" - integrity sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA== - dependencies: - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-subscriptions "1.10.0" - web3-eth-abi "1.10.0" - web3-eth-accounts "1.10.0" - web3-eth-contract "1.10.0" - web3-eth-ens "1.10.0" - web3-eth-iban "1.10.0" - web3-eth-personal "1.10.0" - web3-net "1.10.0" - web3-utils "1.10.0" + 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.11: version "1.2.11" @@ -10790,32 +11200,23 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.7.4.tgz#a7c1d3ccdbba4de4a82df7e3c4db716e4a944bf2" - integrity sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug== - dependencies: - web3-core "1.7.4" - web3-core-helpers "1.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-eth-abi "1.7.4" - web3-eth-accounts "1.7.4" - web3-eth-contract "1.7.4" - web3-eth-ens "1.7.4" - web3-eth-iban "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-utils "1.7.4" - -web3-net@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.0.tgz#be53e7f5dafd55e7c9013d49c505448b92c9c97b" - integrity sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA== - dependencies: - web3-core "1.10.0" - web3-core-method "1.10.0" - web3-utils "1.10.0" +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-net@1.2.11: version "1.2.11" @@ -10826,14 +11227,14 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.7.4.tgz#3153dfd3423262dd6fbec7aae5467202c4cad431" - integrity sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg== +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.7.4" - web3-core-method "1.7.4" - web3-utils "1.7.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-provider-engine@14.2.1: version "14.2.1" @@ -10861,16 +11262,6 @@ web3-provider-engine@14.2.1: xhr "^2.2.0" xtend "^4.0.1" -web3-providers-http@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" - integrity sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.10.0" - web3-providers-http@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" @@ -10879,22 +11270,14 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.7.4.tgz#8209cdcb115db5ccae1f550d1c4e3005e7538d02" - integrity sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA== +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.7.4" + web3-core-helpers "1.5.3" xhr2-cookies "1.1.0" -web3-providers-ipc@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" - integrity sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.10.0" - web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -10904,22 +11287,13 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz#02e85e99e48f432c9d34cee7d786c3685ec9fcfa" - integrity sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw== +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" - web3-core-helpers "1.7.4" - -web3-providers-ws@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" - integrity sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" - websocket "^1.0.32" + web3-core-helpers "1.5.3" web3-providers-ws@1.2.11: version "1.2.11" @@ -10931,25 +11305,15 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz#6e60bcefb456f569a3e766e386d7807a96f90595" - integrity sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ== +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" - web3-core-helpers "1.7.4" + web3-core-helpers "1.5.3" websocket "^1.0.32" -web3-shh@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.0.tgz#c2979b87e0f67a7fef2ce9ee853bd7bfbe9b79a8" - integrity sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg== - dependencies: - web3-core "1.10.0" - web3-core-method "1.10.0" - web3-core-subscriptions "1.10.0" - web3-net "1.10.0" - web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -10960,33 +11324,34 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.7.4.tgz#bee91cce2737c529fd347274010b548b6ea060f1" - integrity sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A== +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.7.4" - web3-core-method "1.7.4" - web3-core-subscriptions "1.7.4" - web3-net "1.7.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" -web3-utils@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" - integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== dependencies: - bn.js "^5.2.1" + bn.js "^4.11.9" + eth-lib "0.2.8" 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" + underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" - integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== +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" @@ -10994,15 +11359,14 @@ web3-utils@1.2.11: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.4.tgz#eb6fa3706b058602747228234453811bbee017f5" - integrity sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA== +web3-utils@^1.0.0-beta.31: + version "1.7.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.1.tgz#77d8bacaf426c66027d8aa4864d77f0ed211aacd" + integrity sha512-fef0EsqMGJUgiHPdX+KN9okVWshbIumyJPmR+btnD1HgvoXijKEkuKBv0OmUqjbeqmLKP2/N9EiXKJel5+E1Dw== dependencies: - bn.js "^5.2.1" + bn.js "^4.11.9" ethereum-bloom-filters "^1.0.6" ethereumjs-util "^7.1.0" ethjs-unit "0.1.6" @@ -11010,33 +11374,19 @@ web3-utils@1.7.4: randombytes "^2.1.0" utf8 "3.0.0" -web3-utils@^1.0.0-beta.31, web3-utils@^1.3.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.2.tgz#361103d28a94d5e2a87ba15d776a62c33303eb44" - integrity sha512-TdApdzdse5YR+5GCX/b/vQnhhbj1KSAtfrDtRW7YS0kcWp1gkJsN62gw6GzCaNTeXookB7UrLtmDUuMv65qgow== +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: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" + bn.js "^4.11.9" ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" + 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.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" - integrity sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng== - dependencies: - web3-bzz "1.10.0" - web3-core "1.10.0" - web3-eth "1.10.0" - web3-eth-personal "1.10.0" - web3-net "1.10.0" - web3-shh "1.10.0" - web3-utils "1.10.0" - web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -11050,23 +11400,23 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.7.4.tgz#00c9aef8e13ade92fd773d845fff250535828e93" - integrity sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A== +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.7.4" - web3-core "1.7.4" - web3-eth "1.7.4" - web3-eth-personal "1.7.4" - web3-net "1.7.4" - web3-shh "1.7.4" - web3-utils "1.7.4" + 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" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= websocket@1.0.32: version "1.0.32" @@ -11100,7 +11450,7 @@ whatwg-fetch@^2.0.4: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -11119,23 +11469,24 @@ which-boxed-primitive@^1.0.2: which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + 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.10, which-typed-array@^1.1.11, which-typed-array@^1.1.2: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.2: + 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.5" call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" + es-abstract "^1.18.5" + foreach "^2.0.5" 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" @@ -11144,7 +11495,7 @@ which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1: +which@2.0.2, which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -11161,17 +11512,17 @@ wide-align@1.1.3: window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +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@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wordwrapjs@^4.0.0: version "4.0.1" @@ -11181,15 +11532,15 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -11215,7 +11566,14 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" ws@7.4.6: version "7.4.6" @@ -11244,9 +11602,9 @@ ws@^5.1.1: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== xhr-request-promise@^0.1.2: version "0.1.3" @@ -11271,7 +11629,7 @@ xhr-request@^1.0.1, xhr-request@^1.1.0: xhr2-cookies@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= dependencies: cookiejar "^2.1.1" @@ -11288,9 +11646,9 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: xmlhttprequest@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -11298,7 +11656,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= dependencies: object-keys "~0.4.0" @@ -11320,7 +11678,7 @@ y18n@^5.0.5: yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" @@ -11332,11 +11690,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -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== - yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -11353,7 +11706,7 @@ yargs-parser@20.2.4: yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= dependencies: camelcase "^3.0.0" lodash.assign "^4.0.6" @@ -11414,7 +11767,7 @@ yargs@16.2.0: yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= dependencies: cliui "^3.2.0" decamelize "^1.1.1" @@ -11448,8 +11801,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zksync-web3@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" - integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ== From 0daab532874ee41b2baac3bc9189ffc851e42b87 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 12 Sep 2023 20:17:12 +0200 Subject: [PATCH 127/176] Remove from dependencies --- package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/package.json b/package.json index 457ab06c..da87cd57 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,6 @@ "deploy-erc20-rollup": "hardhat run scripts/createERC20Rollup.ts" }, "dependencies": { - "@arbitrum/sdk": "^3.1.3", - "@ethersproject/providers": "^5.7.2", "@offchainlabs/upgrade-executor": "1.1.0-beta.0", "@openzeppelin/contracts": "4.5.0", "@openzeppelin/contracts-upgradeable": "4.5.2", From accdcee45798af5025836a04ee5bdcb0669cb476 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Wed, 13 Sep 2023 09:38:49 -0500 Subject: [PATCH 128/176] add getL2BlockRangeForL1 function to NodeInterface --- src/node-interface/NodeInterface.sol | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/node-interface/NodeInterface.sol b/src/node-interface/NodeInterface.sol index 9f3ec1d2..f768bf89 100644 --- a/src/node-interface/NodeInterface.sol +++ b/src/node-interface/NodeInterface.sol @@ -155,4 +155,14 @@ interface NodeInterface { // @dev returns 0 for chains like Nova that don't contain classic blocks // @return number the block number function nitroGenesisBlock() external pure returns (uint256 number); + + /** + * @notice Finds the L2 block number range that have the given L1 block number + * @param blockNum The L1 block number to search for the range + * @return blockRange The range containing the first and last L2 block numbers + */ + function getL2BlockRangeForL1(uint64 blockNum) + external + view + returns (uint64[] memory blockRange); } From 7dc1aa43829d9f4afe7251ad28d96a5d0e1d48c7 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 14 Sep 2023 11:23:14 +0200 Subject: [PATCH 129/176] Update natspec for rollup creation --- src/rollup/RollupCreator.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 98633541..390213bb 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -84,9 +84,9 @@ contract RollupCreator is Ownable { /** * @notice Create a new rollup * @dev After this setup: - * @dev - Rollup should be the owner of bridge - * @dev - RollupOwner should be the owner of Rollup's ProxyAdmin - * @dev - RollupOwner should be the owner of Rollup + * @dev - UpgradeExecutor should be the owner of rollup + * @dev - UpgradeExecutor should be the owner of proxyAdmin which manages bridge contracts + * @dev - config.rollupOwner should have executor role on upgradeExecutor * @dev - Bridge should have a single inbox and outbox * @dev - Validators and batch poster should be set if provided * @param config The configuration for the rollup From 55d096e219f352344bb7ba87ad66228f708d0a7a Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Fri, 15 Sep 2023 13:03:27 -0500 Subject: [PATCH 130/176] add set and get functions for Brotli compression level function to ArbOwner and ArbOwnerPublic interface --- src/precompiles/ArbOwner.sol | 6 ++++++ src/precompiles/ArbOwnerPublic.sol | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/precompiles/ArbOwner.sol b/src/precompiles/ArbOwner.sol index 46ac63c5..71b603f4 100644 --- a/src/precompiles/ArbOwner.sol +++ b/src/precompiles/ArbOwner.sol @@ -78,6 +78,12 @@ interface ArbOwner { /// @notice Sets the base charge (in L1 gas) attributed to each data batch in the calldata pricer function setPerBatchGasCharge(int64 cost) external; + /** + * @notice Sets the Brotli compression level used for fast compression + * Available in ArbOS version 12 + */ + function setBrotliCompressionLevel(uint64 level) external; + /// @notice Sets the cost amortization cap in basis points function setAmortizedCostCapBips(uint64 cap) external; diff --git a/src/precompiles/ArbOwnerPublic.sol b/src/precompiles/ArbOwnerPublic.sol index 1fbfdc03..ee9e2347 100644 --- a/src/precompiles/ArbOwnerPublic.sol +++ b/src/precompiles/ArbOwnerPublic.sol @@ -26,5 +26,8 @@ interface ArbOwnerPublic { /// @notice Get the infrastructure fee collector function getInfraFeeAccount() external view returns (address); + /// @notice Get the Brotli compression level used for fast compression + function getBrotliCompressionLevel() external view returns (uint64); + event ChainOwnerRectified(address rectifiedOwner); } From bb2ca53132116a59386b5f5010e711f485162c13 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Fri, 15 Sep 2023 14:24:43 -0500 Subject: [PATCH 131/176] fix comment --- src/precompiles/ArbOwner.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/precompiles/ArbOwner.sol b/src/precompiles/ArbOwner.sol index 71b603f4..3ff424f7 100644 --- a/src/precompiles/ArbOwner.sol +++ b/src/precompiles/ArbOwner.sol @@ -80,7 +80,7 @@ interface ArbOwner { /** * @notice Sets the Brotli compression level used for fast compression - * Available in ArbOS version 12 + * Available in ArbOS version 12 with default level as 1 */ function setBrotliCompressionLevel(uint64 level) external; From 436e1cf82c5696eb918d842256328ba86fbe5019 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Mon, 18 Sep 2023 15:57:34 -0500 Subject: [PATCH 132/176] change return values --- src/node-interface/NodeInterface.sol | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/node-interface/NodeInterface.sol b/src/node-interface/NodeInterface.sol index f768bf89..b47c9997 100644 --- a/src/node-interface/NodeInterface.sol +++ b/src/node-interface/NodeInterface.sol @@ -157,12 +157,14 @@ interface NodeInterface { function nitroGenesisBlock() external pure returns (uint256 number); /** - * @notice Finds the L2 block number range that have the given L1 block number + * @notice Finds the L2 block number range that has the given L1 block number * @param blockNum The L1 block number to search for the range - * @return blockRange The range containing the first and last L2 block numbers + * Throws if no L2 block exist with the given L1 block number + * @return firstBlock The first L2 block number with the given L1 block number + * @return lastBlock The last L2 block number with the given L1 block number */ - function getL2BlockRangeForL1(uint64 blockNum) + function l2BlockRangeForL1(uint64 blockNum) external view - returns (uint64[] memory blockRange); + returns (uint64 firstBlock, uint64 lastBlock); } From 9edc1b943ed0255f050f91f265d96bc1ad9de1a2 Mon Sep 17 00:00:00 2001 From: ganeshvanahalli Date: Wed, 20 Sep 2023 10:55:53 -0500 Subject: [PATCH 133/176] add new function to fetch L1 block number of the L2 block --- src/node-interface/NodeInterface.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/node-interface/NodeInterface.sol b/src/node-interface/NodeInterface.sol index b47c9997..bba06e52 100644 --- a/src/node-interface/NodeInterface.sol +++ b/src/node-interface/NodeInterface.sol @@ -156,6 +156,10 @@ interface NodeInterface { // @return number the block number function nitroGenesisBlock() external pure returns (uint256 number); + // @notice Returns the L1 block number of the L2 block + // @return l1BlockNum The L1 block number + function blockL1Num(uint64 l2BlockNum) external view returns (uint64 l1BlockNum); + /** * @notice Finds the L2 block number range that has the given L1 block number * @param blockNum The L1 block number to search for the range From f8d5dd48a92cd1e9f561d9450a83cdf62e898938 Mon Sep 17 00:00:00 2001 From: Nodar Ambroladze Date: Wed, 27 Sep 2023 18:28:48 +0200 Subject: [PATCH 134/176] Add gas refunder contract to nitro contracts --- src/bridge/GasRefunder.sol | 255 +++++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 src/bridge/GasRefunder.sol diff --git a/src/bridge/GasRefunder.sol b/src/bridge/GasRefunder.sol new file mode 100644 index 00000000..0515ef3d --- /dev/null +++ b/src/bridge/GasRefunder.sol @@ -0,0 +1,255 @@ +// SPDX-License-Identifier: Apache-2.0 + +/* + * Copyright 2021, Offchain Labs, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +pragma solidity ^0.8.7; + +import "../libraries/IGasRefunder.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + * @notice DEPRECATED - only for classic version, see new repo (https://github.com/OffchainLabs/nitro/tree/master/contracts) + * for new updates + */ +contract GasRefunder is IGasRefunder, Ownable { + mapping(address => bool) public allowedContracts; + mapping(address => bool) public allowedRefundees; + address public disallower; + + struct CommonParameters { + uint128 maxRefundeeBalance; + uint32 extraGasMargin; + uint8 calldataCost; + uint64 maxGasTip; + uint64 maxGasCost; + uint32 maxSingleGasUsage; + } + + CommonParameters public commonParams; + + enum CommonParameterKey { + MAX_REFUNDEE_BALANCE, + EXTRA_GAS_MARGIN, + CALLDATA_COST, + MAX_GAS_TIP, + MAX_GAS_COST, + MAX_SINGLE_GAS_USAGE + } + + enum RefundDenyReason { + CONTRACT_NOT_ALLOWED, + REFUNDEE_NOT_ALLOWED, + REFUNDEE_ABOVE_MAX_BALANCE, + OUT_OF_FUNDS + } + + event RefundedGasCosts( + address indexed refundee, + address indexed contractAddress, + bool indexed success, + uint256 gas, + uint256 gasPrice, + uint256 amountPaid + ); + event RefundGasCostsDenied( + address indexed refundee, + address indexed contractAddress, + RefundDenyReason indexed reason, + uint256 gas + ); + event Deposited(address sender, uint256 amount); + event Withdrawn(address initiator, address destination, uint256 amount); + event ContractAllowedSet(address indexed addr, bool indexed allowed); + event RefundeeAllowedSet(address indexed addr, bool indexed allowed); + event DisallowerSet(address indexed addr); + event CommonParameterSet(CommonParameterKey indexed parameter, uint256 value); + + constructor() Ownable() { + commonParams = CommonParameters({ + maxRefundeeBalance: 0, // no limit + extraGasMargin: 4000, // 4k gas + calldataCost: 12, // Between 4 for zero bytes and 16 for non-zero bytes + maxGasTip: 2 gwei, + maxGasCost: 120 gwei, + maxSingleGasUsage: 2e6 // 2 million gas + }); + } + + function setDisallower(address addr) external onlyOwner { + disallower = addr; + emit DisallowerSet(addr); + } + + function allowContracts(address[] calldata addresses) external onlyOwner { + setContractsAllowedImpl(addresses, true); + } + + function disallowContracts(address[] calldata addresses) external { + require(msg.sender == owner() || msg.sender == disallower, "NOT_AUTHORIZED"); + setContractsAllowedImpl(addresses, false); + } + + function setContractsAllowedImpl(address[] calldata addresses, bool allow) internal { + for (uint256 i = 0; i < addresses.length; i++) { + address addr = addresses[i]; + allowedContracts[addr] = allow; + emit ContractAllowedSet(addr, allow); + } + } + + function allowRefundees(address[] calldata addresses) external onlyOwner { + setRefundeesAllowedImpl(addresses, true); + } + + function disallowRefundees(address[] calldata addresses) external { + require(msg.sender == owner() || msg.sender == disallower, "NOT_AUTHORIZED"); + setRefundeesAllowedImpl(addresses, false); + } + + function setRefundeesAllowedImpl(address[] calldata addresses, bool allow) internal { + for (uint256 i = 0; i < addresses.length; i++) { + address addr = addresses[i]; + allowedRefundees[addr] = allow; + emit RefundeeAllowedSet(addr, allow); + } + } + + function setMaxRefundeeBalance(uint128 newValue) external onlyOwner { + commonParams.maxRefundeeBalance = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_REFUNDEE_BALANCE, newValue); + } + + function setExtraGasMargin(uint32 newValue) external onlyOwner { + commonParams.extraGasMargin = newValue; + emit CommonParameterSet(CommonParameterKey.EXTRA_GAS_MARGIN, newValue); + } + + function setCalldataCost(uint8 newValue) external onlyOwner { + commonParams.calldataCost = newValue; + emit CommonParameterSet(CommonParameterKey.CALLDATA_COST, newValue); + } + + function setMaxGasTip(uint64 newValue) external onlyOwner { + commonParams.maxGasTip = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_GAS_TIP, newValue); + } + + function setMaxGasCost(uint64 newValue) external onlyOwner { + commonParams.maxGasCost = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_GAS_COST, newValue); + } + + function setMaxSingleGasUsage(uint32 newValue) external onlyOwner { + commonParams.maxSingleGasUsage = newValue; + emit CommonParameterSet(CommonParameterKey.MAX_SINGLE_GAS_USAGE, newValue); + } + + receive() external payable { + emit Deposited(msg.sender, msg.value); + } + + function withdraw(address payable destination, uint256 amount) external onlyOwner { + // It's expected that destination is an EOA + (bool success, ) = destination.call{value: amount}(""); + require(success, "WITHDRAW_FAILED"); + emit Withdrawn(msg.sender, destination, amount); + } + + function onGasSpent( + address payable refundee, + uint256 gasUsed, + uint256 calldataSize + ) external override returns (bool success) { + uint256 startGasLeft = gasleft(); + + uint256 ownBalance = address(this).balance; + + if (ownBalance == 0) { + emit RefundGasCostsDenied(refundee, msg.sender, RefundDenyReason.OUT_OF_FUNDS, gasUsed); + return false; + } + + if (!allowedContracts[msg.sender]) { + emit RefundGasCostsDenied( + refundee, + msg.sender, + RefundDenyReason.CONTRACT_NOT_ALLOWED, + gasUsed + ); + return false; + } + if (!allowedRefundees[refundee]) { + emit RefundGasCostsDenied( + refundee, + msg.sender, + RefundDenyReason.REFUNDEE_NOT_ALLOWED, + gasUsed + ); + return false; + } + + uint256 estGasPrice = block.basefee + commonParams.maxGasTip; + if (tx.gasprice < estGasPrice) { + estGasPrice = tx.gasprice; + } + if (commonParams.maxGasCost != 0 && estGasPrice > commonParams.maxGasCost) { + estGasPrice = commonParams.maxGasCost; + } + + // Retrieve these variables before measuring gasleft() + uint256 refundeeBalance = refundee.balance; + uint256 maxRefundeeBalance = commonParams.maxRefundeeBalance; + uint256 maxSingleGasUsage = commonParams.maxSingleGasUsage; + + // Add in a bit of a buffer for the tx costs not measured with gasleft + gasUsed += + startGasLeft + + commonParams.extraGasMargin + + (calldataSize * commonParams.calldataCost); + // Split this up into two statements so that gasleft() comes after the storage loads + gasUsed -= gasleft(); + + if (maxSingleGasUsage != 0 && gasUsed > maxSingleGasUsage) { + gasUsed = maxSingleGasUsage; + } + + uint256 refundAmount = estGasPrice * gasUsed; + if (maxRefundeeBalance != 0 && refundeeBalance + refundAmount > maxRefundeeBalance) { + if (refundeeBalance > maxRefundeeBalance) { + // The refundee is already above their max balance + // emit RefundGasCostsDenied( + // refundee, + // msg.sender, + // RefundDenyReason.REFUNDEE_ABOVE_MAX_BALANCE, + // gasUsed + // ); + return false; + } else { + refundAmount = maxRefundeeBalance - refundeeBalance; + } + } + + if (refundAmount > ownBalance) { + refundAmount = ownBalance; + } + + // It's expected that refundee is an EOA + (success, ) = refundee.call{value: refundAmount}(""); + emit RefundedGasCosts(refundee, msg.sender, success, gasUsed, estGasPrice, refundAmount); + } +} \ No newline at end of file From f5da19efe8a477129c33ba49b11f96ab60e3b1f6 Mon Sep 17 00:00:00 2001 From: Nodar Ambroladze Date: Wed, 27 Sep 2023 18:38:07 +0200 Subject: [PATCH 135/176] Add endline at the end --- src/bridge/GasRefunder.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridge/GasRefunder.sol b/src/bridge/GasRefunder.sol index 0515ef3d..82666a3c 100644 --- a/src/bridge/GasRefunder.sol +++ b/src/bridge/GasRefunder.sol @@ -252,4 +252,4 @@ contract GasRefunder is IGasRefunder, Ownable { (success, ) = refundee.call{value: refundAmount}(""); emit RefundedGasCosts(refundee, msg.sender, success, gasUsed, estGasPrice, refundAmount); } -} \ No newline at end of file +} From 5396cfaeb6125af4fec2f0a8bbdd3900ae68f0fa Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 3 Oct 2023 23:01:20 +0900 Subject: [PATCH 136/176] test: fix --- test/contract/sequencerInboxForceInclude.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/contract/sequencerInboxForceInclude.spec.ts b/test/contract/sequencerInboxForceInclude.spec.ts index 8d4d2ac5..43634737 100644 --- a/test/contract/sequencerInboxForceInclude.spec.ts +++ b/test/contract/sequencerInboxForceInclude.spec.ts @@ -224,11 +224,11 @@ describe('SequencerInboxForceInclude', async () => { const sequencerInboxFac = (await ethers.getContractFactory( 'SequencerInbox' )) as SequencerInbox__factory - const seqInboxTemplate = await sequencerInboxFac.deploy() + const seqInboxTemplate = await sequencerInboxFac.deploy(117964) const inboxFac = (await ethers.getContractFactory( 'Inbox' )) as Inbox__factory - const inboxTemplate = await inboxFac.deploy() + const inboxTemplate = await inboxFac.deploy(117964) const bridgeFac = (await ethers.getContractFactory( 'Bridge' )) as Bridge__factory From ce8de89e11084bcc0d004467ed1d518f2f166b94 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 5 Oct 2023 00:32:48 +0800 Subject: [PATCH 137/176] Revert "Add sha256 preimage support" --- src/osp/OneStepProverHostIo.sol | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/osp/OneStepProverHostIo.sol b/src/osp/OneStepProverHostIo.sol index 0206572f..260ab206 100644 --- a/src/osp/OneStepProverHostIo.sol +++ b/src/osp/OneStepProverHostIo.sol @@ -105,7 +105,7 @@ contract OneStepProverHostIo is IOneStepProver { ExecutionContext calldata, Machine memory mach, Module memory mod, - Instruction calldata inst, + Instruction calldata, bytes calldata proof ) internal pure { uint256 preimageOffset = mach.valueStack.pop().assumeI32(); @@ -128,30 +128,9 @@ contract OneStepProverHostIo is IOneStepProver { bytes memory extracted; uint8 proofType = uint8(proof[proofOffset]); proofOffset++; - // These values must be kept in sync with `arbitrator/arbutil/src/types.rs` - // and `arbutil/preimage_type.go` (both in the nitro repo). - if (inst.argumentData == 0) { - // The machine is asking for a keccak256 preimage - - if (proofType == 0) { - bytes calldata preimage = proof[proofOffset:]; - require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); - - uint256 preimageEnd = preimageOffset + 32; - if (preimageEnd > preimage.length) { - preimageEnd = preimage.length; - } - extracted = preimage[preimageOffset:preimageEnd]; - } else { - // TODO: support proving via an authenticated contract - revert("UNKNOWN_PREIMAGE_PROOF"); - } - } else if (inst.argumentData == 1) { - // The machine is asking for a sha2-256 preimage - - require(proofType == 0, "UNKNOWN_PREIMAGE_PROOF"); + if (proofType == 0) { bytes calldata preimage = proof[proofOffset:]; - require(sha256(preimage) == leafContents, "BAD_PREIMAGE"); + require(keccak256(preimage) == leafContents, "BAD_PREIMAGE"); uint256 preimageEnd = preimageOffset + 32; if (preimageEnd > preimage.length) { @@ -159,7 +138,8 @@ contract OneStepProverHostIo is IOneStepProver { } extracted = preimage[preimageOffset:preimageEnd]; } else { - revert("UNKNOWN_PREIMAGE_TYPE"); + // TODO: support proving via an authenticated contract + revert("UNKNOWN_PREIMAGE_PROOF"); } for (uint256 i = 0; i < extracted.length; i++) { From 8fbf593b73d184714d89267e5953f33438040cee Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 5 Oct 2023 01:52:01 +0900 Subject: [PATCH 138/176] fix: additional params to rollup creator salt --- src/rollup/RollupCreator.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 6895a6b5..3ace2ce2 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -90,7 +90,9 @@ contract RollupCreator is Ownable { ProxyAdmin proxyAdmin = new ProxyAdmin(); // Create the rollup proxy to figure out the address and initialize it later - RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(config))}(); + RollupProxy rollup = new RollupProxy{ + salt: keccak256(abi.encode(config, _batchPoster, _validators, maxDataSize)) + }(); ( IBridge bridge, From 532be633cba042f45f1cf2c2ee16f93b59caefb1 Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 5 Oct 2023 02:07:08 +0900 Subject: [PATCH 139/176] chore: release config --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ae9ddd4..7f8c3632 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,15 @@ "url": "git+https://github.com/offchainlabs/nitro-contracts.git" }, "files": [ - "src/" + "src/", + "build/contracts/src", + "build/contracts/@openzeppelin" ], "bugs": { "url": "https://github.com/offchainlabs/nitro-contracts/issues" }, "scripts": { + "prepublishOnly": "hardhat clean && hardhat compile", "build": "hardhat compile", "lint:test": "eslint ./test", "solhint": "solhint -f table src/**/*.sol", From 9adb2545fdb6a99750d2e46741a2282c21cb32a4 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 5 Oct 2023 13:27:24 +0200 Subject: [PATCH 140/176] When withdraw-and-call is used in ERC20 based chains, it is important to make sure that extra call cannot be used move escrowed native token in any way. We enforce it by doing native token balance check for bridge before/after the extra call is executed. --- src/bridge/ERC20Bridge.sol | 20 +++++++++++---- src/libraries/Error.sol | 3 +++ test/foundry/ERC20Bridge.t.sol | 46 ++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol index 9f94fb7d..8ebde1d8 100644 --- a/src/bridge/ERC20Bridge.sol +++ b/src/bridge/ERC20Bridge.sol @@ -7,7 +7,7 @@ pragma solidity ^0.8.4; import "./AbsBridge.sol"; import "./IERC20Bridge.sol"; import "../libraries/AddressAliasHelper.sol"; -import {InvalidTokenSet, CallTargetNotAllowed} from "../libraries/Error.sol"; +import {InvalidTokenSet, CallTargetNotAllowed, CallNotAllowed} from "../libraries/Error.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -50,20 +50,30 @@ contract ERC20Bridge is AbsBridge, IERC20Bridge { uint256 value, bytes memory data ) internal override returns (bool success, bytes memory returnData) { + address _nativeToken = nativeToken; + // we don't allow outgoing calls to native token contract because it could // result in loss of native tokens which are escrowed by ERC20Bridge - if (to == nativeToken) { - revert CallTargetNotAllowed(nativeToken); + if (to == _nativeToken) { + revert CallTargetNotAllowed(_nativeToken); } // first release native token - IERC20(nativeToken).safeTransfer(to, value); + IERC20(_nativeToken).safeTransfer(to, value); success = true; - // if there's data do additional contract call + // if there's data do additional contract call. Make sure that call is not used to + // change bridge contract's balance of the native token if (data.length > 0) { + uint256 bridgeBalanceBefore = IERC20(_nativeToken).balanceOf(address(this)); + // solhint-disable-next-line avoid-low-level-calls (success, returnData) = to.call(data); + + uint256 bridgeBalanceAfter = IERC20(_nativeToken).balanceOf(address(this)); + if (bridgeBalanceAfter != bridgeBalanceBefore) { + revert CallNotAllowed(); + } } } diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index e4590e2f..beb0afc8 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -69,6 +69,9 @@ error InvalidTokenSet(address token); /// @param target address of the call receiver error CallTargetNotAllowed(address target); +/// @dev Call that changes the balance of ERC20Bridge is not allowed +error CallNotAllowed(); + // Inbox Errors /// @dev The contract is paused, so cannot be paused diff --git a/test/foundry/ERC20Bridge.t.sol b/test/foundry/ERC20Bridge.t.sol index 415dc810..71b815ab 100644 --- a/test/foundry/ERC20Bridge.t.sol +++ b/test/foundry/ERC20Bridge.t.sol @@ -340,4 +340,50 @@ contract ERC20BridgeTest is AbsBridgeTest { vm.prank(outbox); bridge.executeCall({to: to, value: 10, data: "some data"}); } + + function test_executeCall_revert_CallNotAllowed() public { + // deploy and initi bridge contracts + address _rollup = makeAddr("rollup"); + address _outbox = makeAddr("outbox"); + address _gateway = address(new MockGateway()); + address _nativeToken = address(new MockBridgedToken(_gateway)); + IERC20Bridge _bridge = IERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); + _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); + + // allow outbox + vm.prank(_rollup); + _bridge.setOutbox(_outbox, true); + + // fund bridge + MockBridgedToken(_nativeToken).transfer(address(_bridge), 100 ether); + + // executeCall shall revert when call changes balance of the bridge + address to = _gateway; + uint256 withdrawAmount = 25 ether; + bytes memory data = abi.encodeWithSelector( + MockGateway.withdraw.selector, MockBridgedToken(_nativeToken), withdrawAmount + ); + vm.expectRevert(abi.encodeWithSelector(CallNotAllowed.selector)); + vm.prank(_outbox); + _bridge.executeCall({to: to, value: 10, data: data}); + } +} + +contract MockBridgedToken is ERC20 { + address public gateway; + + constructor(address _gateway) ERC20("MockBridgedToken", "TT") { + gateway = _gateway; + _mint(msg.sender, 1_000_000 ether); + } + function bridgeBurn(address account, uint256 amount) external { + require(msg.sender == gateway, "ONLY_GATEWAY"); + _burn(account, amount); + } +} + +contract MockGateway { + function withdraw(MockBridgedToken token, uint256 amount) external { + token.bridgeBurn(msg.sender, amount); + } } From 7bbb10cab01f9794502391d5cfc3aabfa0a6a61b Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 5 Oct 2023 19:36:30 +0200 Subject: [PATCH 141/176] Add native token restrictions to natspec --- src/bridge/ERC20Bridge.sol | 5 +++++ src/bridge/IERC20Bridge.sol | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol index 8ebde1d8..c0d034f8 100644 --- a/src/bridge/ERC20Bridge.sol +++ b/src/bridge/ERC20Bridge.sol @@ -15,6 +15,11 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; * @title Staging ground for incoming and outgoing messages * @notice Unlike the standard Eth bridge, native token bridge escrows the custom ERC20 token which is * used as native currency on L2. + * @dev Fees are paid in this token. There are certain restrictions on the native token: + * - The token can't be rebasing or have a transfer fee + * - The token must only be transferrable via a call to the token address itself + * - The token must only be able to set allowance via a call to the token address itself + * - The token must not have a callback on transfer, and more generally a user must not be able to make a transfer to themselves revert */ contract ERC20Bridge is AbsBridge, IERC20Bridge { using SafeERC20 for IERC20; diff --git a/src/bridge/IERC20Bridge.sol b/src/bridge/IERC20Bridge.sol index b54a28c4..b2b4551d 100644 --- a/src/bridge/IERC20Bridge.sol +++ b/src/bridge/IERC20Bridge.sol @@ -11,9 +11,11 @@ import "./IBridge.sol"; interface IERC20Bridge is IBridge { /** * @dev token that is escrowed in bridge on L1 side and minted on L2 as native currency. - * Also fees are paid in this token. ERC777, fee on transfer tokens and rebasing tokens - * are not supported to be used as chain's native token, as they can break collateralization - * invariants. + * Fees are paid in this token. There are certain restrictions on the native token: + * - The token can't be rebasing or have a transfer fee + * - The token must only be transferrable via a call to the token address itself + * - The token must only be able to set allowance via a call to the token address itself + * - The token must not have a callback on transfer, and more generally a user must not be able to make a transfer to themselves revert */ function nativeToken() external view returns (address); From 976d40feb5b8167d30e407b1df50ab2882f23fd4 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 5 Oct 2023 19:39:04 +0200 Subject: [PATCH 142/176] Revert if balance decreases --- src/bridge/ERC20Bridge.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bridge/ERC20Bridge.sol b/src/bridge/ERC20Bridge.sol index c0d034f8..c67e1ba0 100644 --- a/src/bridge/ERC20Bridge.sol +++ b/src/bridge/ERC20Bridge.sol @@ -68,7 +68,7 @@ contract ERC20Bridge is AbsBridge, IERC20Bridge { success = true; // if there's data do additional contract call. Make sure that call is not used to - // change bridge contract's balance of the native token + // decrease bridge contract's balance of the native token if (data.length > 0) { uint256 bridgeBalanceBefore = IERC20(_nativeToken).balanceOf(address(this)); @@ -76,7 +76,7 @@ contract ERC20Bridge is AbsBridge, IERC20Bridge { (success, returnData) = to.call(data); uint256 bridgeBalanceAfter = IERC20(_nativeToken).balanceOf(address(this)); - if (bridgeBalanceAfter != bridgeBalanceBefore) { + if (bridgeBalanceAfter < bridgeBalanceBefore) { revert CallNotAllowed(); } } From 633a3f0313dc76b2bcb0ff8036361766d61c9aef Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 6 Oct 2023 12:44:24 +0200 Subject: [PATCH 143/176] Add ArbSepolia config --- hardhat.config.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/hardhat.config.ts b/hardhat.config.ts index da6220a8..56aa9163 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -116,6 +116,12 @@ module.exports = { ? [process.env['DEVNET_PRIVKEY']] : [], }, + arbSepolia: { + url: 'https://sepolia-rollup.arbitrum.io/rpc', + accounts: process.env['DEVNET_PRIVKEY'] + ? [process.env['DEVNET_PRIVKEY']] + : [], + }, arb1: { url: 'https://arb1.arbitrum.io/rpc', accounts: process.env['MAINNET_PRIVKEY'] @@ -142,6 +148,7 @@ module.exports = { arbitrumTestnet: process.env['ARBISCAN_API_KEY'], nova: process.env['NOVA_ARBISCAN_API_KEY'], arbGoerliRollup: process.env['ARBISCAN_API_KEY'], + arbSepolia: process.env['ARBISCAN_API_KEY'], }, customChains: [ { @@ -160,6 +167,14 @@ module.exports = { browserURL: 'https://goerli.arbiscan.io/', }, }, + { + network: 'arbSepolia', + chainId: 421614, + urls: { + apiURL: 'https://sepolia-explorer.arbitrum.io/api', + browserURL: 'https://sepolia-explorer.arbitrum.io/', + }, + }, ], }, mocha: { From 5a04009f28551a6bf3a0c8fd9797f01ac52f9e49 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Fri, 6 Oct 2023 12:44:46 +0200 Subject: [PATCH 144/176] Bump Solidity version to 0.8.16 --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 56aa9163..6e20ae6f 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -13,7 +13,7 @@ dotenv.config() const solidity = { compilers: [ { - version: '0.8.9', + version: '0.8.16', settings: { optimizer: { enabled: true, From d86ee9dded13fd1718dccd3ef1f62e38dfa8c89f Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 9 Oct 2023 12:48:20 +0200 Subject: [PATCH 145/176] Keep compiler version as was --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 6e20ae6f..56aa9163 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -13,7 +13,7 @@ dotenv.config() const solidity = { compilers: [ { - version: '0.8.16', + version: '0.8.9', settings: { optimizer: { enabled: true, From 8ad18a681676e73cdea67b67fbb40731366557fa Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 1 Oct 2023 06:14:48 +0000 Subject: [PATCH 146/176] Fix the BridgeCreator.sol contract Clean up the code and reduce deployment gas cost by moving contract creation outside of the contructor. Move the sequencer inbox maxTimeVariation from memory to calldata. Index the sender for MessageDelivered events - this allows bridges to efficiently query the deposit history for an address without requiring an external indexer. Add DISABLE_VERIFICATION environment variable to disable contract verification. --- scripts/deployment.ts | 30 ++++- src/bridge/IBridge.sol | 2 +- src/bridge/IOutbox.sol | 2 + src/rollup/BridgeCreator.sol | 201 +++++++++++----------------------- src/rollup/IBridgeCreator.sol | 64 ----------- 5 files changed, 93 insertions(+), 206 deletions(-) delete mode 100644 src/rollup/IBridgeCreator.sol diff --git a/scripts/deployment.ts b/scripts/deployment.ts index cc9c095a..ba9b97e1 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -17,6 +17,8 @@ async function verifyContract( contractPathAndName?: string // optional ): Promise { try { + if (process.env.DISABLE_VERIFICATION) + return // Define the verification options with possible 'contract' property const verificationOptions: { contract?: string @@ -49,7 +51,8 @@ async function verifyContract( async function deployContract( contractName: string, signer: any, - constructorArgs: any[] = [] + constructorArgs: any[] = [], + verify: boolean = true ): Promise { const factory: ContractFactory = await ethers.getContractFactory(contractName) const connectedFactory: ContractFactory = factory.connect(signer) @@ -57,7 +60,8 @@ async function deployContract( await contract.deployTransaction.wait() console.log(`New ${contractName} created at address:`, contract.address) - await verifyContract(contractName, contract.address, constructorArgs) + if (verify) + await verifyContract(contractName, contract.address, constructorArgs) return contract } @@ -76,8 +80,21 @@ async function deployUpgradeExecutor(): Promise { async function deployAllContracts( signer: any ): Promise> { + const ethBridge = await deployContract('Bridge', signer, [], false) + const ethSequencerInbox = await deployContract('SequencerInbox', signer, [maxDataSize], false) + const ethInbox = await deployContract('Inbox', signer, [maxDataSize], false) + const ethRollupEventInbox = await deployContract('RollupEventInbox', signer, [], false) + const ethOutbox = await deployContract('Outbox', signer, [], false) + + const erc20Bridge = await deployContract('ERC20Bridge', signer, [], false) + const erc20SequencerInbox = ethSequencerInbox + const erc20Inbox = await deployContract('ERC20Inbox', signer, [maxDataSize], false) + const erc20RollupEventInbox = await deployContract('ERC20RollupEventInbox', signer, [], false) + const erc20Outbox = await deployContract('ERC20Outbox', signer, [], false) + const bridgeCreator = await deployContract('BridgeCreator', signer, [ - maxDataSize, + [ethBridge.address, ethSequencerInbox.address, ethInbox.address, ethRollupEventInbox.address, ethOutbox.address], + [erc20Bridge.address, erc20SequencerInbox.address, erc20Inbox.address, erc20RollupEventInbox.address, erc20Outbox.address] ]) const prover0 = await deployContract('OneStepProver0', signer) const proverMem = await deployContract('OneStepProverMemory', signer) @@ -144,6 +161,9 @@ async function main() { const { bridge, sequencerInbox, inbox, rollupEventInbox, outbox } = await contracts.bridgeCreator.ethBasedTemplates() + if (process.env.DISABLE_VERIFICATION) + return + console.log('Wait a minute before starting contract verification') await sleep(60 * 1000) @@ -175,7 +195,7 @@ async function main() { 'RollupEventInbox', rollupEventInbox, [], - 'src/bridge/RollupEventInbox.sol:RollupEventInbox' + 'src/rollup/RollupEventInbox.sol:RollupEventInbox' ) console.log(`"outbox implementation contract" created at address:`, outbox) @@ -229,7 +249,7 @@ async function main() { 'ERC20RollupEventInbox', erc20RollupEventInbox, [], - 'src/bridge/ERC20RollupEventInbox.sol:ERC20RollupEventInbox' + 'src/rollup/ERC20RollupEventInbox.sol:ERC20RollupEventInbox' ) console.log( diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 49c3c13f..488822c7 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -13,7 +13,7 @@ interface IBridge { bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, - address sender, + address indexed sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp diff --git a/src/bridge/IOutbox.sol b/src/bridge/IOutbox.sol index 3a551ce6..06358170 100644 --- a/src/bridge/IOutbox.sol +++ b/src/bridge/IOutbox.sol @@ -16,6 +16,8 @@ interface IOutbox { uint256 transactionIndex ); + function initialize(IBridge _bridge) external; + function rollup() external view returns (address); // the rollup contract function bridge() external view returns (IBridge); // the bridge contract diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index 7b61c193..bc7c920e 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -19,59 +19,31 @@ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; contract BridgeCreator is Ownable { - ContractTemplates public ethBasedTemplates; - ContractERC20Templates public erc20BasedTemplates; + BridgeContracts public ethBasedTemplates; + BridgeContracts public erc20BasedTemplates; event TemplatesUpdated(); event ERC20TemplatesUpdated(); - struct ContractTemplates { - Bridge bridge; - ISequencerInbox sequencerInbox; - IInboxBase inbox; - RollupEventInbox rollupEventInbox; - Outbox outbox; - } - - struct ContractERC20Templates { - ERC20Bridge bridge; - ISequencerInbox sequencerInbox; - IInboxBase inbox; - ERC20RollupEventInbox rollupEventInbox; - ERC20Outbox outbox; - } - - struct CreateBridgeFrame { - ProxyAdmin admin; + struct BridgeContracts { IBridge bridge; - SequencerInbox sequencerInbox; + ISequencerInbox sequencerInbox; IInboxBase inbox; IRollupEventInbox rollupEventInbox; - Outbox outbox; + IOutbox outbox; } - constructor(uint256 maxDataSize) Ownable() { - SequencerInbox seqInbox = new SequencerInbox(maxDataSize); - - ethBasedTemplates.bridge = new Bridge(); - ethBasedTemplates.sequencerInbox = seqInbox; - ethBasedTemplates.inbox = new Inbox(maxDataSize); - ethBasedTemplates.rollupEventInbox = new RollupEventInbox(); - ethBasedTemplates.outbox = new Outbox(); - - erc20BasedTemplates.bridge = new ERC20Bridge(); - erc20BasedTemplates.sequencerInbox = seqInbox; - erc20BasedTemplates.inbox = new ERC20Inbox(maxDataSize); - erc20BasedTemplates.rollupEventInbox = new ERC20RollupEventInbox(); - erc20BasedTemplates.outbox = new ERC20Outbox(); + constructor(BridgeContracts memory _ethBasedTemplates, BridgeContracts memory _erc20BasedTemplates) Ownable() { + ethBasedTemplates = _ethBasedTemplates; + erc20BasedTemplates = _erc20BasedTemplates; } - function updateTemplates(ContractTemplates calldata _newTemplates) external onlyOwner { + function updateTemplates(BridgeContracts calldata _newTemplates) external onlyOwner { ethBasedTemplates = _newTemplates; emit TemplatesUpdated(); } - function updateERC20Templates(ContractERC20Templates calldata _newTemplates) + function updateERC20Templates(BridgeContracts calldata _newTemplates) external onlyOwner { @@ -79,117 +51,74 @@ contract BridgeCreator is Ownable { emit ERC20TemplatesUpdated(); } + function _createBridge(address adminProxy, BridgeContracts storage templates) internal returns (BridgeContracts memory) + { + BridgeContracts memory frame; + frame.bridge = IBridge( + address( + new TransparentUpgradeableProxy( + address(templates.bridge), + adminProxy, + "" + ) + ) + ); + frame.sequencerInbox = ISequencerInbox( + address( + new TransparentUpgradeableProxy( + address(templates.sequencerInbox), + adminProxy, + "" + ) + ) + ); + frame.inbox = IInboxBase( + address( + new TransparentUpgradeableProxy( + address(templates.inbox), + adminProxy, + "" + ) + ) + ); + frame.rollupEventInbox = IRollupEventInbox( + address( + new TransparentUpgradeableProxy( + address(templates.rollupEventInbox), + adminProxy, + "" + ) + ) + ); + frame.outbox = IOutbox( + address( + new TransparentUpgradeableProxy( + address(templates.outbox), + adminProxy, + "" + ) + ) + ); + return frame; + } + function createBridge( address adminProxy, address rollup, address nativeToken, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation + ISequencerInbox.MaxTimeVariation calldata maxTimeVariation ) external returns ( IBridge, - SequencerInbox, + ISequencerInbox, IInboxBase, IRollupEventInbox, - Outbox + IOutbox ) { - CreateBridgeFrame memory frame; - // create ETH-based bridge if address zero is provided for native token, otherwise create ERC20-based bridge - if (nativeToken == address(0)) { - frame.bridge = Bridge( - address( - new TransparentUpgradeableProxy( - address(ethBasedTemplates.bridge), - adminProxy, - "" - ) - ) - ); - frame.sequencerInbox = SequencerInbox( - address( - new TransparentUpgradeableProxy( - address(ethBasedTemplates.sequencerInbox), - adminProxy, - "" - ) - ) - ); - frame.inbox = Inbox( - address( - new TransparentUpgradeableProxy( - address(ethBasedTemplates.inbox), - adminProxy, - "" - ) - ) - ); - frame.rollupEventInbox = RollupEventInbox( - address( - new TransparentUpgradeableProxy( - address(ethBasedTemplates.rollupEventInbox), - adminProxy, - "" - ) - ) - ); - frame.outbox = Outbox( - address( - new TransparentUpgradeableProxy( - address(ethBasedTemplates.outbox), - adminProxy, - "" - ) - ) - ); - } else { - frame.bridge = Bridge( - address( - new TransparentUpgradeableProxy( - address(erc20BasedTemplates.bridge), - adminProxy, - "" - ) - ) - ); - frame.sequencerInbox = SequencerInbox( - address( - new TransparentUpgradeableProxy( - address(erc20BasedTemplates.sequencerInbox), - adminProxy, - "" - ) - ) - ); - frame.inbox = Inbox( - address( - new TransparentUpgradeableProxy( - address(erc20BasedTemplates.inbox), - adminProxy, - "" - ) - ) - ); - frame.rollupEventInbox = RollupEventInbox( - address( - new TransparentUpgradeableProxy( - address(erc20BasedTemplates.rollupEventInbox), - adminProxy, - "" - ) - ) - ); - frame.outbox = Outbox( - address( - new TransparentUpgradeableProxy( - address(erc20BasedTemplates.outbox), - adminProxy, - "" - ) - ) - ); - } + BridgeContracts memory frame = _createBridge(adminProxy, nativeToken == address(0) ? ethBasedTemplates : erc20BasedTemplates); // init contracts if (nativeToken == address(0)) { diff --git a/src/rollup/IBridgeCreator.sol b/src/rollup/IBridgeCreator.sol deleted file mode 100644 index fac167f1..00000000 --- a/src/rollup/IBridgeCreator.sol +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2021-2022, Offchain Labs, Inc. -// For license information, see https://github.com/nitro/blob/master/LICENSE -// SPDX-License-Identifier: BUSL-1.1 - -pragma solidity ^0.8.0; - -import "./RollupLib.sol"; -import "./IRollupCore.sol"; -import "../bridge/SequencerInbox.sol"; -import "../bridge/Outbox.sol"; -import "../rollup/RollupEventInbox.sol"; - -interface IBridgeCreator { - function updateTemplates( - address _bridgeTemplate, - address _sequencerInboxTemplate, - address _inboxTemplate, - address _rollupEventInboxTemplate, - address _outboxTemplate - ) external; - - function bridgeTemplate() external view returns (IBridge); - - function sequencerInboxTemplate() external view returns (SequencerInbox); - - function inboxTemplate() external view returns (IInboxBase); - - function rollupEventInboxTemplate() external view returns (IRollupEventInbox); - - function outboxTemplate() external view returns (Outbox); -} - -interface IEthBridgeCreator is IBridgeCreator { - function createBridge( - address adminProxy, - address rollup, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation - ) - external - returns ( - IBridge, - SequencerInbox, - IInboxBase, - IRollupEventInbox, - Outbox - ); -} - -interface IERC20BridgeCreator is IBridgeCreator { - function createBridge( - address adminProxy, - address rollup, - address nativeToken, - ISequencerInbox.MaxTimeVariation memory maxTimeVariation - ) - external - returns ( - IBridge, - SequencerInbox, - IInboxBase, - IRollupEventInbox, - Outbox - ); -} From 9bc6358044505c2d23673703f8f630e7171c0ba8 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 3 Oct 2023 22:16:41 +0000 Subject: [PATCH 147/176] revisions remove indexed variable change - this can be done in a separate pr as it breaks the abi remove RollupCreator.BridgeContracts - use the BridgeCreator.BridgeContracts struct instead make BridgeCreator.createBridge() return a BridgeContracts struct instead of a tuple fix unit tests run "yarn format" to clean up the code --- scripts/deployment.ts | 36 ++++-- src/bridge/IBridge.sol | 2 +- src/rollup/BridgeCreator.sol | 82 ++++--------- src/rollup/RollupCreator.sol | 17 +-- test/foundry/BridgeCreator.t.sol | 195 ++++++++++++++++++------------- test/foundry/RollupCreator.t.sol | 132 ++++++++++++++++----- 6 files changed, 272 insertions(+), 192 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index ba9b97e1..2fd62009 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -17,8 +17,7 @@ async function verifyContract( contractPathAndName?: string // optional ): Promise { try { - if (process.env.DISABLE_VERIFICATION) - return + if (process.env.DISABLE_VERIFICATION) return // Define the verification options with possible 'contract' property const verificationOptions: { contract?: string @@ -81,9 +80,19 @@ async function deployAllContracts( signer: any ): Promise> { const ethBridge = await deployContract('Bridge', signer, [], false) - const ethSequencerInbox = await deployContract('SequencerInbox', signer, [maxDataSize], false) + const ethSequencerInbox = await deployContract( + 'SequencerInbox', + signer, + [maxDataSize], + false + ) const ethInbox = await deployContract('Inbox', signer, [maxDataSize], false) - const ethRollupEventInbox = await deployContract('RollupEventInbox', signer, [], false) + const ethRollupEventInbox = await deployContract( + 'RollupEventInbox', + signer, + [], + false + ) const ethOutbox = await deployContract('Outbox', signer, [], false) const erc20Bridge = await deployContract('ERC20Bridge', signer, [], false) @@ -93,8 +102,20 @@ async function deployAllContracts( const erc20Outbox = await deployContract('ERC20Outbox', signer, [], false) const bridgeCreator = await deployContract('BridgeCreator', signer, [ - [ethBridge.address, ethSequencerInbox.address, ethInbox.address, ethRollupEventInbox.address, ethOutbox.address], - [erc20Bridge.address, erc20SequencerInbox.address, erc20Inbox.address, erc20RollupEventInbox.address, erc20Outbox.address] + [ + ethBridge.address, + ethSequencerInbox.address, + ethInbox.address, + ethRollupEventInbox.address, + ethOutbox.address, + ], + [ + erc20Bridge.address, + erc20SequencerInbox.address, + erc20Inbox.address, + erc20RollupEventInbox.address, + erc20Outbox.address, + ], ]) const prover0 = await deployContract('OneStepProver0', signer) const proverMem = await deployContract('OneStepProverMemory', signer) @@ -161,8 +182,7 @@ async function main() { const { bridge, sequencerInbox, inbox, rollupEventInbox, outbox } = await contracts.bridgeCreator.ethBasedTemplates() - if (process.env.DISABLE_VERIFICATION) - return + if (process.env.DISABLE_VERIFICATION) return console.log('Wait a minute before starting contract verification') await sleep(60 * 1000) diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 488822c7..49c3c13f 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -13,7 +13,7 @@ interface IBridge { bytes32 indexed beforeInboxAcc, address inbox, uint8 kind, - address indexed sender, + address sender, bytes32 messageDataHash, uint256 baseFeeL1, uint64 timestamp diff --git a/src/rollup/BridgeCreator.sol b/src/rollup/BridgeCreator.sol index bc7c920e..01df1c04 100644 --- a/src/rollup/BridgeCreator.sol +++ b/src/rollup/BridgeCreator.sol @@ -33,7 +33,10 @@ contract BridgeCreator is Ownable { IOutbox outbox; } - constructor(BridgeContracts memory _ethBasedTemplates, BridgeContracts memory _erc20BasedTemplates) Ownable() { + constructor( + BridgeContracts memory _ethBasedTemplates, + BridgeContracts memory _erc20BasedTemplates + ) Ownable() { ethBasedTemplates = _ethBasedTemplates; erc20BasedTemplates = _erc20BasedTemplates; } @@ -43,61 +46,34 @@ contract BridgeCreator is Ownable { emit TemplatesUpdated(); } - function updateERC20Templates(BridgeContracts calldata _newTemplates) - external - onlyOwner - { + function updateERC20Templates(BridgeContracts calldata _newTemplates) external onlyOwner { erc20BasedTemplates = _newTemplates; emit ERC20TemplatesUpdated(); } - function _createBridge(address adminProxy, BridgeContracts storage templates) internal returns (BridgeContracts memory) + function _createBridge(address adminProxy, BridgeContracts storage templates) + internal + returns (BridgeContracts memory) { BridgeContracts memory frame; frame.bridge = IBridge( - address( - new TransparentUpgradeableProxy( - address(templates.bridge), - adminProxy, - "" - ) - ) + address(new TransparentUpgradeableProxy(address(templates.bridge), adminProxy, "")) ); frame.sequencerInbox = ISequencerInbox( address( - new TransparentUpgradeableProxy( - address(templates.sequencerInbox), - adminProxy, - "" - ) + new TransparentUpgradeableProxy(address(templates.sequencerInbox), adminProxy, "") ) ); frame.inbox = IInboxBase( - address( - new TransparentUpgradeableProxy( - address(templates.inbox), - adminProxy, - "" - ) - ) + address(new TransparentUpgradeableProxy(address(templates.inbox), adminProxy, "")) ); frame.rollupEventInbox = IRollupEventInbox( address( - new TransparentUpgradeableProxy( - address(templates.rollupEventInbox), - adminProxy, - "" - ) + new TransparentUpgradeableProxy(address(templates.rollupEventInbox), adminProxy, "") ) ); frame.outbox = IOutbox( - address( - new TransparentUpgradeableProxy( - address(templates.outbox), - adminProxy, - "" - ) - ) + address(new TransparentUpgradeableProxy(address(templates.outbox), adminProxy, "")) ); return frame; } @@ -107,18 +83,12 @@ contract BridgeCreator is Ownable { address rollup, address nativeToken, ISequencerInbox.MaxTimeVariation calldata maxTimeVariation - ) - external - returns ( - IBridge, - ISequencerInbox, - IInboxBase, - IRollupEventInbox, - IOutbox - ) - { + ) external returns (BridgeContracts memory) { // create ETH-based bridge if address zero is provided for native token, otherwise create ERC20-based bridge - BridgeContracts memory frame = _createBridge(adminProxy, nativeToken == address(0) ? ethBasedTemplates : erc20BasedTemplates); + BridgeContracts memory frame = _createBridge( + adminProxy, + nativeToken == address(0) ? ethBasedTemplates : erc20BasedTemplates + ); // init contracts if (nativeToken == address(0)) { @@ -126,17 +96,11 @@ contract BridgeCreator is Ownable { } else { IERC20Bridge(address(frame.bridge)).initialize(IOwnable(rollup), nativeToken); } - frame.sequencerInbox.initialize(IBridge(frame.bridge), maxTimeVariation); - frame.inbox.initialize(IBridge(frame.bridge), ISequencerInbox(frame.sequencerInbox)); - frame.rollupEventInbox.initialize(IBridge(frame.bridge)); - frame.outbox.initialize(IBridge(frame.bridge)); + frame.sequencerInbox.initialize(frame.bridge, maxTimeVariation); + frame.inbox.initialize(frame.bridge, frame.sequencerInbox); + frame.rollupEventInbox.initialize(frame.bridge); + frame.outbox.initialize(frame.bridge); - return ( - frame.bridge, - frame.sequencerInbox, - frame.inbox, - frame.rollupEventInbox, - frame.outbox - ); + return frame; } } diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 1a13c25a..3216bba5 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -45,14 +45,6 @@ contract RollupCreator is Ownable { DeployHelper public l2FactoriesDeployer; - struct BridgeContracts { - IBridge bridge; - ISequencerInbox sequencerInbox; - IInboxBase inbox; - IRollupEventInbox rollupEventInbox; - IOutbox outbox; - } - constructor() Ownable() {} // creator receives back excess fees (for deploying L2 factories) so it can refund the caller @@ -131,14 +123,7 @@ contract RollupCreator is Ownable { salt: keccak256(abi.encode(config, _batchPoster, _validators, _maxDataSize)) }(); - BridgeContracts memory bridgeContracts; - ( - bridgeContracts.bridge, - bridgeContracts.sequencerInbox, - bridgeContracts.inbox, - bridgeContracts.rollupEventInbox, - bridgeContracts.outbox - ) = bridgeCreator.createBridge( + BridgeCreator.BridgeContracts memory bridgeContracts = bridgeCreator.createBridge( address(proxyAdmin), address(rollup), _nativeToken, diff --git a/test/foundry/BridgeCreator.t.sol b/test/foundry/BridgeCreator.t.sol index a0e3c3f8..16099869 100644 --- a/test/foundry/BridgeCreator.t.sol +++ b/test/foundry/BridgeCreator.t.sol @@ -12,45 +12,77 @@ import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol"; contract BridgeCreatorTest is Test { BridgeCreator public creator; address public owner = address(100); - uint256 public constant MAX_DATA_SIZE = 117_964; + BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: ethBasedTemplates.sequencerInbox, + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + function setUp() public { vm.prank(owner); - creator = new BridgeCreator(MAX_DATA_SIZE); + creator = new BridgeCreator(ethBasedTemplates, erc20BasedTemplates); } - /* solhint-disable func-name-mixedcase */ - function test_constructor() public { + function getEthBasedTemplates() internal returns (BridgeCreator.BridgeContracts memory) { + BridgeCreator.BridgeContracts memory templates; ( - Bridge bridgeTemplate, - ISequencerInbox sequencerInboxTemplate, - IInboxBase inboxTemplate, - RollupEventInbox rollupEventInboxTemplate, - Outbox outboxTemplate + templates.bridge, + templates.sequencerInbox, + templates.inbox, + templates.rollupEventInbox, + templates.outbox ) = creator.ethBasedTemplates(); - assertTrue(address(bridgeTemplate) != address(0), "Bridge not created"); - assertTrue(address(sequencerInboxTemplate) != address(0), "SeqInbox not created"); - assertTrue(address(inboxTemplate) != address(0), "Inbox not created"); - assertTrue(address(rollupEventInboxTemplate) != address(0), "Event inbox not created"); - assertTrue(address(outboxTemplate) != address(0), "Outbox not created"); + return templates; + } + function getErc20BasedTemplates() internal returns (BridgeCreator.BridgeContracts memory) { + BridgeCreator.BridgeContracts memory templates; ( - ERC20Bridge erc20BridgeTemplate, - ISequencerInbox erc20SequencerInboxTemplate, - IInboxBase erc20InboxTemplate, - ERC20RollupEventInbox erc20RollupEventInboxTemplate, - ERC20Outbox erc20OutboxTemplate + templates.bridge, + templates.sequencerInbox, + templates.inbox, + templates.rollupEventInbox, + templates.outbox ) = creator.erc20BasedTemplates(); - assertTrue(address(erc20BridgeTemplate) != address(0), "Bridge not created"); - assertTrue(address(erc20SequencerInboxTemplate) != address(0), "SeqInbox not created"); - assertTrue(address(erc20InboxTemplate) != address(0), "Inbox not created"); - assertTrue(address(erc20RollupEventInboxTemplate) != address(0), "Event inbox not created"); - assertTrue(address(erc20OutboxTemplate) != address(0), "Outbox not created"); + return templates; + } + + function assertEq( + BridgeCreator.BridgeContracts memory a, + BridgeCreator.BridgeContracts memory b + ) internal { + assertEq(address(a.bridge), address(b.bridge), "Invalid bridge"); + assertEq(address(a.sequencerInbox), address(b.sequencerInbox), "Invalid seqInbox"); + assertEq(address(a.inbox), address(b.inbox), "Invalid inbox"); + assertEq( + address(a.rollupEventInbox), + address(b.rollupEventInbox), + "Invalid rollup event inbox" + ); + assertEq(address(a.outbox), address(b.outbox), "Invalid outbox"); + } + + /* solhint-disable func-name-mixedcase */ + function test_constructor() public { + assertEq(getEthBasedTemplates(), ethBasedTemplates); + assertEq(getErc20BasedTemplates(), erc20BasedTemplates); } function test_updateTemplates() public { - BridgeCreator.ContractTemplates memory templs = BridgeCreator.ContractTemplates({ + BridgeCreator.BridgeContracts memory templs = BridgeCreator.BridgeContracts({ bridge: Bridge(address(200)), sequencerInbox: SequencerInbox(address(201)), inbox: Inbox(address(202)), @@ -61,28 +93,11 @@ contract BridgeCreatorTest is Test { vm.prank(owner); creator.updateTemplates(templs); - ( - Bridge bridgeTemplate, - ISequencerInbox sequencerInboxTemplate, - IInboxBase inboxTemplate, - RollupEventInbox rollupEventInboxTemplate, - Outbox outboxTemplate - ) = creator.ethBasedTemplates(); - assertEq(address(bridgeTemplate), address(templs.bridge), "Invalid bridge"); - assertEq( - address(sequencerInboxTemplate), address(templs.sequencerInbox), "Invalid seqInbox" - ); - assertEq(address(inboxTemplate), address(templs.inbox), "Invalid inbox"); - assertEq( - address(rollupEventInboxTemplate), - address(templs.rollupEventInbox), - "Invalid rollup event inbox" - ); - assertEq(address(outboxTemplate), address(templs.outbox), "Invalid outbox"); + assertEq(getEthBasedTemplates(), templs); } function test_updateERC20Templates() public { - BridgeCreator.ContractERC20Templates memory templs = BridgeCreator.ContractERC20Templates({ + BridgeCreator.BridgeContracts memory templs = BridgeCreator.BridgeContracts({ bridge: ERC20Bridge(address(400)), sequencerInbox: SequencerInbox(address(401)), inbox: ERC20Inbox(address(402)), @@ -93,41 +108,40 @@ contract BridgeCreatorTest is Test { vm.prank(owner); creator.updateERC20Templates(templs); - ( - ERC20Bridge bridgeTemplate, - ISequencerInbox sequencerInboxTemplate, - IInboxBase inboxTemplate, - ERC20RollupEventInbox rollupEventInboxTemplate, - ERC20Outbox outboxTemplate - ) = creator.erc20BasedTemplates(); - assertEq(address(bridgeTemplate), address(templs.bridge), "Invalid bridge"); - assertEq( - address(sequencerInboxTemplate), address(templs.sequencerInbox), "Invalid seqInbox" - ); - assertEq(address(inboxTemplate), address(templs.inbox), "Invalid inbox"); - assertEq( - address(rollupEventInboxTemplate), - address(templs.rollupEventInbox), - "Invalid rollup event inbox" - ); - assertEq(address(outboxTemplate), address(templs.outbox), "Invalid outbox"); + assertEq(getErc20BasedTemplates(), templs); } function test_createEthBridge() public { address proxyAdmin = address(300); address rollup = address(301); address nativeToken = address(0); - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(10, 20, 30, 40); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + 10, + 20, + 30, + 40 + ); timeVars.delayBlocks; + BridgeCreator.BridgeContracts memory contracts = creator.createBridge( + proxyAdmin, + rollup, + nativeToken, + timeVars + ); ( IBridge bridge, - SequencerInbox seqInbox, + ISequencerInbox seqInbox, IInboxBase inbox, IRollupEventInbox eventInbox, - Outbox outbox - ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); + IOutbox outbox + ) = ( + contracts.bridge, + contracts.sequencerInbox, + contracts.inbox, + contracts.rollupEventInbox, + contracts.outbox + ); // bridge assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); @@ -136,8 +150,12 @@ contract BridgeCreatorTest is Test { // seqInbox assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); - (uint256 _delayBlocks, uint256 _futureBlocks, uint256 _delaySeconds, uint256 _futureSeconds) - = seqInbox.maxTimeVariation(); + ( + uint256 _delayBlocks, + uint256 _futureBlocks, + uint256 _delaySeconds, + uint256 _futureSeconds + ) = seqInbox.maxTimeVariation(); assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); @@ -165,19 +183,36 @@ contract BridgeCreatorTest is Test { function test_createERC20Bridge() public { address proxyAdmin = address(300); address rollup = address(301); - address nativeToken = - address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this))); - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(10, 20, 30, 40); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000, address(this)) + ); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + 10, + 20, + 30, + 40 + ); timeVars.delayBlocks; + BridgeCreator.BridgeContracts memory contracts = creator.createBridge( + proxyAdmin, + rollup, + nativeToken, + timeVars + ); ( IBridge bridge, - SequencerInbox seqInbox, + ISequencerInbox seqInbox, IInboxBase inbox, IRollupEventInbox eventInbox, - Outbox outbox - ) = creator.createBridge(proxyAdmin, rollup, nativeToken, timeVars); + IOutbox outbox + ) = ( + contracts.bridge, + contracts.sequencerInbox, + contracts.inbox, + contracts.rollupEventInbox, + contracts.outbox + ); // bridge assertEq(address(bridge.rollup()), rollup, "Invalid rollup ref"); @@ -191,8 +226,12 @@ contract BridgeCreatorTest is Test { // seqInbox assertEq(address(seqInbox.bridge()), address(bridge), "Invalid bridge ref"); assertEq(address(seqInbox.rollup()), rollup, "Invalid rollup ref"); - (uint256 _delayBlocks, uint256 _futureBlocks, uint256 _delaySeconds, uint256 _futureSeconds) - = seqInbox.maxTimeVariation(); + ( + uint256 _delayBlocks, + uint256 _futureBlocks, + uint256 _delaySeconds, + uint256 _futureSeconds + ) = seqInbox.maxTimeVariation(); assertEq(_delayBlocks, timeVars.delayBlocks, "Invalid delayBlocks"); assertEq(_futureBlocks, timeVars.futureBlocks, "Invalid futureBlocks"); assertEq(_delaySeconds, timeVars.delaySeconds, "Invalid delaySeconds"); diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index 46680b99..bdf1d4a6 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -32,6 +32,40 @@ contract RollupCreatorTest is Test { uint256 public constant MAX_FEE_PER_GAS = 1_000_000_000; uint256 public constant MAX_DATA_SIZE = 117_964; + BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: ethBasedTemplates.sequencerInbox, + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + + BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(), + inbox: new Inbox(), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: ethBasedTemplates.sequencerInbox, + inbox: new ERC20Inbox(), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); + /* solhint-disable func-name-mixedcase */ function setUp() public { @@ -41,7 +75,7 @@ contract RollupCreatorTest is Test { deployHelper = new DeployHelper(); // deploy BridgeCreators - BridgeCreator bridgeCreator = new BridgeCreator(MAX_DATA_SIZE); + BridgeCreator bridgeCreator = new BridgeCreator(ethBasedTemplates, erc20BasedTemplates); IUpgradeExecutor upgradeExecutorLogic = new UpgradeExecutorMock(); @@ -75,8 +109,12 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -176,7 +214,9 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + IOwnable(rollupAddress).owner(), + upgradeExecutorExpectedAddress, + "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -185,26 +225,36 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable( + upgradeExecutorExpectedAddress + ); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), + "Invalid executor role" ); // check funds are refunded uint256 balanceAfter = deployer.balance; - uint256 factoryDeploymentCost = - deployHelper.getDeploymentTotalCost(rollup.inbox(), MAX_FEE_PER_GAS); + uint256 factoryDeploymentCost = deployHelper.getDeploymentTotalCost( + rollup.inbox(), + MAX_FEE_PER_GAS + ); assertEq(balanceBefore - balanceAfter, factoryDeploymentCost, "Invalid balance"); } function test_createErc20Rollup() public { vm.startPrank(deployer); - address nativeToken = - address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000 ether, deployer)); + address nativeToken = address( + new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000 ether, deployer) + ); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -220,7 +270,9 @@ contract RollupCreatorTest is Test { }); // approve fee token to pay for deployment of L2 factories - uint256 expectedCost = 0.1247 ether + 4 * (1400 * 100_000_000_000 + 100_000 * 1_000_000_000); + uint256 expectedCost = 0.1247 ether + + 4 * + (1400 * 100_000_000_000 + 100_000 * 1_000_000_000); IERC20(nativeToken).approve(address(rollupCreator), expectedCost); /// deploy rollup @@ -260,7 +312,9 @@ contract RollupCreatorTest is Test { // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( - IERC20Bridge(address(bridge)).nativeToken(), nativeToken, "Invalid native token ref" + IERC20Bridge(address(bridge)).nativeToken(), + nativeToken, + "Invalid native token ref" ); // check proxy admin for non-rollup contracts @@ -307,7 +361,9 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" + IOwnable(rollupAddress).owner(), + upgradeExecutorExpectedAddress, + "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -316,9 +372,12 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); + AccessControlUpgradeable executor = AccessControlUpgradeable( + upgradeExecutorExpectedAddress + ); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), + "Invalid executor role" ); } @@ -326,8 +385,12 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = - ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); + ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( + ((60 * 60 * 24) / 15), + 12, + 60 * 60 * 24, + 60 * 60 + ); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -361,12 +424,16 @@ contract RollupCreatorTest is Test { RollupCore rollup = RollupCore(rollupAddress); address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); - IUpgradeExecutor upgradeExecutor = - IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 4)); + IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( + computeCreateAddress(address(rollupCreator), 4) + ); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( - ProxyUpgradeAction.perform.selector, address(proxyAdmin), inbox, address(newLogicImpl) + ProxyUpgradeAction.perform.selector, + address(proxyAdmin), + inbox, + address(newLogicImpl) ); address upgradeAction = address(new ProxyUpgradeAction()); @@ -388,11 +455,11 @@ contract RollupCreatorTest is Test { { //// deploy challenge stuff ospEntry = new OneStepProofEntry( - new OneStepProver0(), - new OneStepProverMemory(), - new OneStepProverMath(), - new OneStepProverHostIo() - ); + new OneStepProver0(), + new OneStepProverMemory(), + new OneStepProverMath(), + new OneStepProverHostIo() + ); challengeManager = new ChallengeManager(); //// deploy rollup logic @@ -418,14 +485,19 @@ contract RollupCreatorTest is Test { } function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = - bytes32(uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1); + bytes32 secondarySlot = bytes32( + uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 + ); return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } contract ProxyUpgradeAction { - function perform(address admin, address payable target, address newLogic) public payable { + function perform( + address admin, + address payable target, + address newLogic + ) public payable { ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic); } } From f56f60168e40edf3b95f8ef1bf61fc3717343a50 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 3 Oct 2023 23:19:08 +0000 Subject: [PATCH 148/176] fix hardhat tests --- test/contract/arbRollup.spec.ts | 72 ++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 98c9615e..330d3258 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -22,6 +22,14 @@ import { BytesLike } from '@ethersproject/bytes' import { ContractTransaction } from '@ethersproject/contracts' import { assert, expect } from 'chai' import { + Bridge__factory, + Inbox__factory, + RollupEventInbox__factory, + Outbox__factory, + ERC20Bridge__factory, + ERC20Inbox__factory, + ERC20RollupEventInbox__factory, + ERC20Outbox__factory, BridgeCreator__factory, ChallengeManager, ChallengeManager__factory, @@ -169,10 +177,72 @@ const setup = async () => { ) const upgradeExecutorLogic = await upgradeExecutorLogicFac.deploy() + const ethBridgeFac = (await ethers.getContractFactory( + 'Bridge' + )) as Bridge__factory + const ethBridge = await ethBridgeFac.deploy() + + const ethSequencerInboxFac = (await ethers.getContractFactory( + 'SequencerInbox' + )) as SequencerInbox__factory + const ethSequencerInbox = await ethSequencerInboxFac.deploy(117964) + + const ethInboxFac = (await ethers.getContractFactory( + 'Inbox' + )) as Inbox__factory + const ethInbox = await ethInboxFac.deploy(117964) + + const ethRollupEventInboxFac = (await ethers.getContractFactory( + 'RollupEventInbox' + )) as RollupEventInbox__factory + const ethRollupEventInbox = await ethRollupEventInboxFac.deploy() + + const ethOutboxFac = (await ethers.getContractFactory( + 'Outbox' + )) as Outbox__factory + const ethOutbox = await ethOutboxFac.deploy() + + const erc20BridgeFac = (await ethers.getContractFactory( + 'ERC20Bridge' + )) as ERC20Bridge__factory + const erc20Bridge = await erc20BridgeFac.deploy() + + const erc20SequencerInbox = ethSequencerInbox + + const erc20InboxFac = (await ethers.getContractFactory( + 'ERC20Inbox' + )) as ERC20Inbox__factory + const erc20Inbox = await erc20InboxFac.deploy(117964) + + const erc20RollupEventInboxFac = (await ethers.getContractFactory( + 'ERC20RollupEventInbox' + )) as ERC20RollupEventInbox__factory + const erc20RollupEventInbox = await erc20RollupEventInboxFac.deploy() + + const erc20OutboxFac = (await ethers.getContractFactory( + 'ERC20Outbox' + )) as ERC20Outbox__factory + const erc20Outbox = await erc20OutboxFac.deploy() + const bridgeCreatorFac = (await ethers.getContractFactory( 'BridgeCreator' )) as BridgeCreator__factory - const bridgeCreator = await bridgeCreatorFac.deploy(117964) + const bridgeCreator = await bridgeCreatorFac.deploy( + { + bridge: ethBridge.address, + sequencerInbox: ethSequencerInbox.address, + inbox: ethInbox.address, + rollupEventInbox: ethRollupEventInbox.address, + outbox: ethOutbox.address, + }, + { + bridge: erc20Bridge.address, + sequencerInbox: erc20SequencerInbox.address, + inbox: erc20Inbox.address, + rollupEventInbox: erc20RollupEventInbox.address, + outbox: erc20Outbox.address, + } + ) const rollupCreatorFac = (await ethers.getContractFactory( 'RollupCreator' From d4f4387946e5c889c729d88ca108373085e3c8b5 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Mon, 9 Oct 2023 13:47:08 +0200 Subject: [PATCH 149/176] Fix conflict leftover --- test/foundry/RollupCreator.t.sol | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index bdf1d4a6..d38f6d7e 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -32,7 +32,7 @@ contract RollupCreatorTest is Test { uint256 public constant MAX_FEE_PER_GAS = 1_000_000_000; uint256 public constant MAX_DATA_SIZE = 117_964; - BridgeCreator.BridgeContracts ethBasedTemplates = + BridgeCreator.BridgeContracts public ethBasedTemplates = BridgeCreator.BridgeContracts({ bridge: new Bridge(), sequencerInbox: new SequencerInbox(MAX_DATA_SIZE), @@ -40,7 +40,7 @@ contract RollupCreatorTest is Test { rollupEventInbox: new RollupEventInbox(), outbox: new Outbox() }); - BridgeCreator.BridgeContracts erc20BasedTemplates = + BridgeCreator.BridgeContracts public erc20BasedTemplates = BridgeCreator.BridgeContracts({ bridge: new ERC20Bridge(), sequencerInbox: ethBasedTemplates.sequencerInbox, @@ -49,25 +49,8 @@ contract RollupCreatorTest is Test { outbox: new ERC20Outbox() }); - BridgeCreator.BridgeContracts ethBasedTemplates = - BridgeCreator.BridgeContracts({ - bridge: new Bridge(), - sequencerInbox: new SequencerInbox(), - inbox: new Inbox(), - rollupEventInbox: new RollupEventInbox(), - outbox: new Outbox() - }); - BridgeCreator.BridgeContracts erc20BasedTemplates = - BridgeCreator.BridgeContracts({ - bridge: new ERC20Bridge(), - sequencerInbox: ethBasedTemplates.sequencerInbox, - inbox: new ERC20Inbox(), - rollupEventInbox: new ERC20RollupEventInbox(), - outbox: new ERC20Outbox() - }); /* solhint-disable func-name-mixedcase */ - function setUp() public { //// deploy rollup creator and set templates vm.startPrank(deployer); From f3a5dfa4d60327f3a357c8f498f11d0776bb877c Mon Sep 17 00:00:00 2001 From: gzeon Date: Thu, 12 Oct 2023 00:32:59 +0900 Subject: [PATCH 150/176] v1.1.0-beta.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1fb05d8..34e13281 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-alpha.7", + "version": "1.1.0-beta.0", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From 7c9b93fe7696ec1695b66a46a7453d2e514df596 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Thu, 12 Oct 2023 15:09:46 +0200 Subject: [PATCH 151/176] Sort out contract verification upon deployment --- scripts/deployment.ts | 136 +++++------------------------------------- 1 file changed, 15 insertions(+), 121 deletions(-) diff --git a/scripts/deployment.ts b/scripts/deployment.ts index 2fd62009..93c09114 100644 --- a/scripts/deployment.ts +++ b/scripts/deployment.ts @@ -6,7 +6,6 @@ import { abi as UpgradeExecutorABI, bytecode as UpgradeExecutorBytecode, } from '@offchainlabs/upgrade-executor/build/contracts/src/UpgradeExecutor.sol/UpgradeExecutor.json' -import { sleep } from './testSetup' import { maxDataSize } from './config' // Define a verification function @@ -79,27 +78,27 @@ async function deployUpgradeExecutor(): Promise { async function deployAllContracts( signer: any ): Promise> { - const ethBridge = await deployContract('Bridge', signer, [], false) - const ethSequencerInbox = await deployContract( - 'SequencerInbox', - signer, - [maxDataSize], - false - ) - const ethInbox = await deployContract('Inbox', signer, [maxDataSize], false) + const ethBridge = await deployContract('Bridge', signer, []) + const ethSequencerInbox = await deployContract('SequencerInbox', signer, [ + maxDataSize, + ]) + const ethInbox = await deployContract('Inbox', signer, [maxDataSize]) const ethRollupEventInbox = await deployContract( 'RollupEventInbox', signer, - [], - false + [] ) - const ethOutbox = await deployContract('Outbox', signer, [], false) + const ethOutbox = await deployContract('Outbox', signer, []) - const erc20Bridge = await deployContract('ERC20Bridge', signer, [], false) + const erc20Bridge = await deployContract('ERC20Bridge', signer, []) const erc20SequencerInbox = ethSequencerInbox - const erc20Inbox = await deployContract('ERC20Inbox', signer, [maxDataSize], false) - const erc20RollupEventInbox = await deployContract('ERC20RollupEventInbox', signer, [], false) - const erc20Outbox = await deployContract('ERC20Outbox', signer, [], false) + const erc20Inbox = await deployContract('ERC20Inbox', signer, [maxDataSize]) + const erc20RollupEventInbox = await deployContract( + 'ERC20RollupEventInbox', + signer, + [] + ) + const erc20Outbox = await deployContract('ERC20Outbox', signer, []) const bridgeCreator = await deployContract('BridgeCreator', signer, [ [ @@ -177,111 +176,6 @@ async function main() { contracts.deployHelper.address ) console.log('Template is set on the Rollup Creator') - - // get and verify ETH-based bridge contracts - const { bridge, sequencerInbox, inbox, rollupEventInbox, outbox } = - await contracts.bridgeCreator.ethBasedTemplates() - - if (process.env.DISABLE_VERIFICATION) return - - console.log('Wait a minute before starting contract verification') - await sleep(60 * 1000) - - console.log(`"bridge implementation contract" created at address:`, bridge) - await verifyContract('Bridge', bridge, [], 'src/bridge/Bridge.sol:Bridge') - console.log( - `"sequencerInbox implementation contract" created at address:`, - sequencerInbox - ) - await verifyContract( - 'SequencerInbox', - sequencerInbox, - [maxDataSize], - 'src/bridge/SequencerInbox.sol:SequencerInbox' - ) - console.log(`"inbox implementation contract" created at address:`, inbox) - await verifyContract( - 'Inbox', - inbox, - [maxDataSize], - 'src/bridge/Inbox.sol:Inbox' - ) - - console.log( - `"rollupEventInbox implementation contract" created at address:`, - rollupEventInbox - ) - await verifyContract( - 'RollupEventInbox', - rollupEventInbox, - [], - 'src/rollup/RollupEventInbox.sol:RollupEventInbox' - ) - - console.log(`"outbox implementation contract" created at address:`, outbox) - await verifyContract('Outbox', outbox, [], 'src/bridge/Outbox.sol:Outbox') - - // get and verify ERC20-based bridge contracts - const { - bridge: erc20Bridge, - sequencerInbox: erc20SeqInbox, - inbox: erc20Inbox, - rollupEventInbox: erc20RollupEventInbox, - outbox: erc20Outbox, - } = await contracts.bridgeCreator.erc20BasedTemplates() - - console.log( - `"erc20 bridge implementation contract" created at address:`, - bridge - ) - await verifyContract( - 'ERC20Bridge', - erc20Bridge, - [], - 'src/bridge/ERC20Bridge.sol:ERC20Bridge' - ) - console.log( - `"erc20 sequencerInbox implementation contract" created at address:`, - erc20SeqInbox - ) - await verifyContract( - 'SequencerInbox', - erc20SeqInbox, - [], - 'src/bridge/SequencerInbox.sol:SequencerInbox' - ) - console.log( - `"erc20 inbox implementation contract" created at address:`, - inbox - ) - await verifyContract( - 'ERC20Inbox', - erc20Inbox, - [], - 'src/bridge/ERC20Inbox.sol:ERC20Inbox' - ) - - console.log( - `"erc20 rollupEventInbox implementation contract" created at address:`, - erc20RollupEventInbox - ) - await verifyContract( - 'ERC20RollupEventInbox', - erc20RollupEventInbox, - [], - 'src/rollup/ERC20RollupEventInbox.sol:ERC20RollupEventInbox' - ) - - console.log( - `"erc20 outbox implementation contract" created at address:`, - outbox - ) - await verifyContract( - 'ERC20Outbox', - erc20Outbox, - [], - 'src/bridge/ERC20Outbox.sol:ERC20Outbox' - ) } catch (error) { console.error( 'Deployment failed:', From dc154b014eaf47ff536d914a434507d6037e26db Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 17 Oct 2023 14:02:19 +0200 Subject: [PATCH 152/176] All the input parameters for 'createRollup' entrypoint should be included in rollup's salt. To make this more convenient input parameters are packed into 'RollupDeploymentParams' struct which looks like this: struct RollupDeploymentParams { Config config; address batchPoster; address[] validators; uint256 maxDataSize; address nativeToken; bool deployFactoriesToL2; uint256 maxFeePerGasForRetryables; } --- src/rollup/RollupCreator.sol | 96 ++++++++++-------- test/contract/arbRollup.spec.ts | 19 ++-- test/foundry/RollupCreator.t.sol | 164 ++++++++++++++----------------- 3 files changed, 143 insertions(+), 136 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 3216bba5..cadb354f 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -33,6 +33,16 @@ contract RollupCreator is Ownable { ); event TemplatesUpdated(); + struct RollupDeploymentParams { + Config config; + address batchPoster; + address[] validators; + uint256 maxDataSize; + address nativeToken; + bool deployFactoriesToL2; + uint256 maxFeePerGasForRetryables; + } + BridgeCreator public bridgeCreator; IOneStepProofEntry public osp; IChallengeManager public challengeManagerTemplate; @@ -81,53 +91,57 @@ contract RollupCreator is Ownable { * @dev - config.rollupOwner should have executor role on upgradeExecutor * @dev - Bridge should have a single inbox and outbox * @dev - Validators and batch poster should be set if provided - * @param config The configuration for the rollup - * @param _batchPoster The address of the batch poster, not used when set to zero address - * @param _validators The list of validator addresses, not used when set to empty list - * @param _nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided - * @param _deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. - * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it - * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that - * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct - * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. - * @param _maxFeePerGasForRetryables price bid for L2 execution. + * @param deployParams The parameters for the rollup deployment. It consists of: + * - config The configuration for the rollup + * - batchPoster The address of the batch poster, not used when set to zero address + * - validators The list of validator addresses, not used when set to empty list + * - nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided + * - deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. + * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it + * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that + * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct + * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. + * - maxFeePerGasForRetryables price bid for L2 execution. * @return The address of the newly created rollup */ - function createRollup( - Config memory config, - address _batchPoster, - address[] memory _validators, - uint256 _maxDataSize, - address _nativeToken, - bool _deployFactoriesToL2, - uint256 _maxFeePerGasForRetryables - ) public payable returns (address) { + function createRollup(RollupDeploymentParams memory deployParams) + public + payable + returns (address) + { { // Make sure the immutable maxDataSize is as expected (, ISequencerInbox ethSequencerInbox, IInboxBase ethInbox, , ) = bridgeCreator .ethBasedTemplates(); - require(_maxDataSize == ethSequencerInbox.maxDataSize(), "SI_MAX_DATA_SIZE_MISMATCH"); - require(_maxDataSize == ethInbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); + require( + deployParams.maxDataSize == ethSequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require(deployParams.maxDataSize == ethInbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); (, ISequencerInbox erc20SequencerInbox, IInboxBase erc20Inbox, , ) = bridgeCreator .erc20BasedTemplates(); - require(_maxDataSize == erc20SequencerInbox.maxDataSize(), "SI_MAX_DATA_SIZE_MISMATCH"); - require(_maxDataSize == erc20Inbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); + require( + deployParams.maxDataSize == erc20SequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require( + deployParams.maxDataSize == erc20Inbox.maxDataSize(), + "I_MAX_DATA_SIZE_MISMATCH" + ); } // create proxy admin which will manage bridge contracts ProxyAdmin proxyAdmin = new ProxyAdmin(); // Create the rollup proxy to figure out the address and initialize it later - RollupProxy rollup = new RollupProxy{ - salt: keccak256(abi.encode(config, _batchPoster, _validators, _maxDataSize)) - }(); + RollupProxy rollup = new RollupProxy{salt: keccak256(abi.encode(deployParams))}(); BridgeCreator.BridgeContracts memory bridgeContracts = bridgeCreator.createBridge( address(proxyAdmin), address(rollup), - _nativeToken, - config.sequencerInboxMaxTimeVariation + deployParams.nativeToken, + deployParams.config.sequencerInboxMaxTimeVariation ); IChallengeManager challengeManager = IChallengeManager( @@ -147,16 +161,16 @@ contract RollupCreator is Ownable { ); // deploy and init upgrade executor - address upgradeExecutor = _deployUpgradeExecutor(config.owner, proxyAdmin); + address upgradeExecutor = _deployUpgradeExecutor(deployParams.config.owner, proxyAdmin); // upgradeExecutor shall be proxyAdmin's owner proxyAdmin.transferOwnership(address(upgradeExecutor)); // initialize the rollup with this contract as owner to set batch poster and validators // it will transfer the ownership to the upgrade executor later - config.owner = address(this); + deployParams.config.owner = address(this); rollup.initializeProxy( - config, + deployParams.config, ContractDependencies({ bridge: bridgeContracts.bridge, sequencerInbox: bridgeContracts.sequencerInbox, @@ -172,32 +186,32 @@ contract RollupCreator is Ownable { ); // setting batch poster, if the address provided is not zero address - if (_batchPoster != address(0)) { - bridgeContracts.sequencerInbox.setIsBatchPoster(_batchPoster, true); + if (deployParams.batchPoster != address(0)) { + bridgeContracts.sequencerInbox.setIsBatchPoster(deployParams.batchPoster, true); } // Call setValidator on the newly created rollup contract just if validator set is not empty - if (_validators.length != 0) { - bool[] memory _vals = new bool[](_validators.length); - for (uint256 i = 0; i < _validators.length; i++) { + if (deployParams.validators.length != 0) { + bool[] memory _vals = new bool[](deployParams.validators.length); + for (uint256 i = 0; i < deployParams.validators.length; i++) { _vals[i] = true; } - IRollupAdmin(address(rollup)).setValidator(_validators, _vals); + IRollupAdmin(address(rollup)).setValidator(deployParams.validators, _vals); } IRollupAdmin(address(rollup)).setOwner(address(upgradeExecutor)); - if (_deployFactoriesToL2) { + if (deployParams.deployFactoriesToL2) { _deployFactories( address(bridgeContracts.inbox), - _nativeToken, - _maxFeePerGasForRetryables + deployParams.nativeToken, + deployParams.maxFeePerGasForRetryables ); } emit RollupCreated( address(rollup), - _nativeToken, + deployParams.nativeToken, address(bridgeContracts.inbox), address(bridgeContracts.outbox), address(bridgeContracts.rollupEventInbox), diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 330d3258..d73bdad3 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -267,14 +267,19 @@ const setup = async () => { ) const maxFeePerGas = BigNumber.from('1000000000') + + const deployParams = { + config: await getDefaultConfig(), + batchPoster: await sequencer.getAddress(), + validators: [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], + maxDataSize: 117964, + nativeToken: ethers.constants.AddressZero, + deployFactoriesToL2: true, + maxFeePerGasForRetryables: maxFeePerGas, + } + const response = await rollupCreator.createRollup( - await getDefaultConfig(), - await sequencer.getAddress(), - [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], - 117964, - ethers.constants.AddressZero, - true, - maxFeePerGas, + deployParams, { value: ethers.utils.parseEther('0.2') } ) diff --git a/test/foundry/RollupCreator.t.sol b/test/foundry/RollupCreator.t.sol index d38f6d7e..6eb50065 100644 --- a/test/foundry/RollupCreator.t.sol +++ b/test/foundry/RollupCreator.t.sol @@ -32,23 +32,20 @@ contract RollupCreatorTest is Test { uint256 public constant MAX_FEE_PER_GAS = 1_000_000_000; uint256 public constant MAX_DATA_SIZE = 117_964; - BridgeCreator.BridgeContracts public ethBasedTemplates = - BridgeCreator.BridgeContracts({ - bridge: new Bridge(), - sequencerInbox: new SequencerInbox(MAX_DATA_SIZE), - inbox: new Inbox(MAX_DATA_SIZE), - rollupEventInbox: new RollupEventInbox(), - outbox: new Outbox() - }); - BridgeCreator.BridgeContracts public erc20BasedTemplates = - BridgeCreator.BridgeContracts({ - bridge: new ERC20Bridge(), - sequencerInbox: ethBasedTemplates.sequencerInbox, - inbox: new ERC20Inbox(MAX_DATA_SIZE), - rollupEventInbox: new ERC20RollupEventInbox(), - outbox: new ERC20Outbox() - }); - + BridgeCreator.BridgeContracts public ethBasedTemplates = BridgeCreator.BridgeContracts({ + bridge: new Bridge(), + sequencerInbox: new SequencerInbox(MAX_DATA_SIZE), + inbox: new Inbox(MAX_DATA_SIZE), + rollupEventInbox: new RollupEventInbox(), + outbox: new Outbox() + }); + BridgeCreator.BridgeContracts public erc20BasedTemplates = BridgeCreator.BridgeContracts({ + bridge: new ERC20Bridge(), + sequencerInbox: ethBasedTemplates.sequencerInbox, + inbox: new ERC20Inbox(MAX_DATA_SIZE), + rollupEventInbox: new ERC20RollupEventInbox(), + outbox: new ERC20Outbox() + }); /* solhint-disable func-name-mixedcase */ function setUp() public { @@ -92,12 +89,8 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -123,9 +116,18 @@ contract RollupCreatorTest is Test { validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( - config, batchPoster, validators, MAX_DATA_SIZE, address(0), true, MAX_FEE_PER_GAS - ); + RollupCreator.RollupDeploymentParams memory deployParams = RollupCreator + .RollupDeploymentParams({ + config: config, + batchPoster: batchPoster, + validators: validators, + maxDataSize: MAX_DATA_SIZE, + nativeToken: address(0), + deployFactoriesToL2: true, + maxFeePerGasForRetryables: MAX_FEE_PER_GAS + }); + address rollupAddress = + rollupCreator.createRollup{value: factoryDeploymentFunds}(deployParams); vm.stopPrank(); @@ -197,9 +199,7 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), - upgradeExecutorExpectedAddress, - "Invalid rollup owner" + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -208,36 +208,26 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable( - upgradeExecutorExpectedAddress - ); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), - "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); // check funds are refunded uint256 balanceAfter = deployer.balance; - uint256 factoryDeploymentCost = deployHelper.getDeploymentTotalCost( - rollup.inbox(), - MAX_FEE_PER_GAS - ); + uint256 factoryDeploymentCost = + deployHelper.getDeploymentTotalCost(rollup.inbox(), MAX_FEE_PER_GAS); assertEq(balanceBefore - balanceAfter, factoryDeploymentCost, "Invalid balance"); } function test_createErc20Rollup() public { vm.startPrank(deployer); - address nativeToken = address( - new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000 ether, deployer) - ); + address nativeToken = + address(new ERC20PresetFixedSupply("Appchain Token", "App", 1_000_000 ether, deployer)); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -253,9 +243,7 @@ contract RollupCreatorTest is Test { }); // approve fee token to pay for deployment of L2 factories - uint256 expectedCost = 0.1247 ether + - 4 * - (1400 * 100_000_000_000 + 100_000 * 1_000_000_000); + uint256 expectedCost = 0.1247 ether + 4 * (1400 * 100_000_000_000 + 100_000 * 1_000_000_000); IERC20(nativeToken).approve(address(rollupCreator), expectedCost); /// deploy rollup @@ -263,9 +251,19 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup( - config, batchPoster, validators, MAX_DATA_SIZE, nativeToken, true, MAX_FEE_PER_GAS - ); + + RollupCreator.RollupDeploymentParams memory deployParams = RollupCreator + .RollupDeploymentParams({ + config: config, + batchPoster: batchPoster, + validators: validators, + maxDataSize: MAX_DATA_SIZE, + nativeToken: nativeToken, + deployFactoriesToL2: true, + maxFeePerGasForRetryables: MAX_FEE_PER_GAS + }); + + address rollupAddress = rollupCreator.createRollup(deployParams); vm.stopPrank(); @@ -295,9 +293,7 @@ contract RollupCreatorTest is Test { // native token check IBridge bridge = RollupCore(address(rollupAddress)).bridge(); assertEq( - IERC20Bridge(address(bridge)).nativeToken(), - nativeToken, - "Invalid native token ref" + IERC20Bridge(address(bridge)).nativeToken(), nativeToken, "Invalid native token ref" ); // check proxy admin for non-rollup contracts @@ -344,9 +340,7 @@ contract RollupCreatorTest is Test { // upgrade executor owns rollup assertEq( - IOwnable(rollupAddress).owner(), - upgradeExecutorExpectedAddress, - "Invalid rollup owner" + IOwnable(rollupAddress).owner(), upgradeExecutorExpectedAddress, "Invalid rollup owner" ); assertEq( _getProxyAdmin(rollupAddress), @@ -355,12 +349,9 @@ contract RollupCreatorTest is Test { ); // check rollupOwner has executor role - AccessControlUpgradeable executor = AccessControlUpgradeable( - upgradeExecutorExpectedAddress - ); + AccessControlUpgradeable executor = AccessControlUpgradeable(upgradeExecutorExpectedAddress); assertTrue( - executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), - "Invalid executor role" + executor.hasRole(keccak256("EXECUTOR_ROLE"), rollupOwner), "Invalid executor role" ); } @@ -368,12 +359,8 @@ contract RollupCreatorTest is Test { vm.startPrank(deployer); // deployment params - ISequencerInbox.MaxTimeVariation memory timeVars = ISequencerInbox.MaxTimeVariation( - ((60 * 60 * 24) / 15), - 12, - 60 * 60 * 24, - 60 * 60 - ); + ISequencerInbox.MaxTimeVariation memory timeVars = + ISequencerInbox.MaxTimeVariation(((60 * 60 * 24) / 15), 12, 60 * 60 * 24, 60 * 60); Config memory config = Config({ confirmPeriodBlocks: 20, extraChallengeTimeBlocks: 200, @@ -397,9 +384,19 @@ contract RollupCreatorTest is Test { address[] memory validators = new address[](2); validators[0] = makeAddr("validator1"); validators[1] = makeAddr("validator2"); - address rollupAddress = rollupCreator.createRollup{value: factoryDeploymentFunds}( - config, batchPoster, validators, MAX_DATA_SIZE, address(0), true, MAX_FEE_PER_GAS - ); + + RollupCreator.RollupDeploymentParams memory deployParams = RollupCreator + .RollupDeploymentParams({ + config: config, + batchPoster: batchPoster, + validators: validators, + maxDataSize: MAX_DATA_SIZE, + nativeToken: address(0), + deployFactoriesToL2: true, + maxFeePerGasForRetryables: MAX_FEE_PER_GAS + }); + address rollupAddress = + rollupCreator.createRollup{value: factoryDeploymentFunds}(deployParams); vm.stopPrank(); @@ -407,16 +404,12 @@ contract RollupCreatorTest is Test { RollupCore rollup = RollupCore(rollupAddress); address inbox = address(rollup.inbox()); address proxyAdmin = computeCreateAddress(address(rollupCreator), 1); - IUpgradeExecutor upgradeExecutor = IUpgradeExecutor( - computeCreateAddress(address(rollupCreator), 4) - ); + IUpgradeExecutor upgradeExecutor = + IUpgradeExecutor(computeCreateAddress(address(rollupCreator), 4)); Dummy newLogicImpl = new Dummy(); bytes memory data = abi.encodeWithSelector( - ProxyUpgradeAction.perform.selector, - address(proxyAdmin), - inbox, - address(newLogicImpl) + ProxyUpgradeAction.perform.selector, address(proxyAdmin), inbox, address(newLogicImpl) ); address upgradeAction = address(new ProxyUpgradeAction()); @@ -468,19 +461,14 @@ contract RollupCreatorTest is Test { } function _getSecondary(address proxy) internal view returns (address) { - bytes32 secondarySlot = bytes32( - uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1 - ); + bytes32 secondarySlot = + bytes32(uint256(keccak256("eip1967.proxy.implementation.secondary")) - 1); return address(uint160(uint256(vm.load(proxy, secondarySlot)))); } } contract ProxyUpgradeAction { - function perform( - address admin, - address payable target, - address newLogic - ) public payable { + function perform(address admin, address payable target, address newLogic) public payable { ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic); } } From c304812cfbea1e4ce1dd16420f2b004667d5b054 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 17 Oct 2023 14:13:35 +0200 Subject: [PATCH 153/176] Update deployment script --- scripts/rollupCreation.ts | 17 ++++++++++------- src/rollup/RollupCreator.sol | 8 ++++---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/scripts/rollupCreation.ts b/scripts/rollupCreation.ts index 73606df5..26d060f8 100644 --- a/scripts/rollupCreation.ts +++ b/scripts/rollupCreation.ts @@ -78,14 +78,17 @@ export async function createRollup(feeToken?: string) { // Call the createRollup function console.log('Calling createRollup to generate a new rollup ...') + const deployParams = { + config: config.rollupConfig, + batchPoster: config.batchPoster, + validators: config.validators, + maxDataSize: maxDataSize, + nativeToken: feeToken, + deployFactoriesToL2: true, + maxFeePerGasForRetryables: MAX_FER_PER_GAS + } const createRollupTx = await rollupCreator.createRollup( - config.rollupConfig, - config.batchPoster, - config.validators, - maxDataSize, - feeToken, - true, - MAX_FER_PER_GAS, + deployParams, { value: feeCost, } diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index cadb354f..32c05826 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -97,10 +97,10 @@ contract RollupCreator is Ownable { * - validators The list of validator addresses, not used when set to empty list * - nativeToken Address of the custom fee token used by rollup. If rollup is ETH-based address(0) should be provided * - deployFactoriesToL2 Whether to deploy L2 factories using retryable tickets. If true, retryables need to be paid for in native currency. - * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it - * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that - * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct - * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. + * Deploying factories via retryable tickets at rollup creation time is the most reliable method to do it since it + * doesn't require paying the L1 gas. If deployment is not done as part of rollup creation TX, there is a risk that + * anyone can try to deploy factories and potentially burn the nonce 0 (ie. due to gas price spike when doing direct + * L2 TX). That would mean we permanently lost capability to deploy deterministic factory at expected address. * - maxFeePerGasForRetryables price bid for L2 execution. * @return The address of the newly created rollup */ From aabfa3c6eb4d481819f6fa1d5761661564adaec2 Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 17 Oct 2023 14:26:01 +0200 Subject: [PATCH 154/176] Format --- test/contract/arbRollup.spec.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index d73bdad3..fca5eb97 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -271,17 +271,20 @@ const setup = async () => { const deployParams = { config: await getDefaultConfig(), batchPoster: await sequencer.getAddress(), - validators: [await val1.getAddress(), await val2.getAddress(), await val3.getAddress()], + validators: [ + await val1.getAddress(), + await val2.getAddress(), + await val3.getAddress(), + ], maxDataSize: 117964, nativeToken: ethers.constants.AddressZero, deployFactoriesToL2: true, maxFeePerGasForRetryables: maxFeePerGas, } - const response = await rollupCreator.createRollup( - deployParams, - { value: ethers.utils.parseEther('0.2') } - ) + const response = await rollupCreator.createRollup(deployParams, { + value: ethers.utils.parseEther('0.2'), + }) const rec = await response.wait() From 6ac483461d0a71de6d847e9ca99cf0125b736a1a Mon Sep 17 00:00:00 2001 From: Goran Vladika Date: Tue, 17 Oct 2023 15:25:33 +0200 Subject: [PATCH 155/176] remove unnecessary block scope --- src/rollup/RollupCreator.sol | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/rollup/RollupCreator.sol b/src/rollup/RollupCreator.sol index 32c05826..ac9621b3 100644 --- a/src/rollup/RollupCreator.sol +++ b/src/rollup/RollupCreator.sol @@ -109,27 +109,22 @@ contract RollupCreator is Ownable { payable returns (address) { - { - // Make sure the immutable maxDataSize is as expected - (, ISequencerInbox ethSequencerInbox, IInboxBase ethInbox, , ) = bridgeCreator - .ethBasedTemplates(); - require( - deployParams.maxDataSize == ethSequencerInbox.maxDataSize(), - "SI_MAX_DATA_SIZE_MISMATCH" - ); - require(deployParams.maxDataSize == ethInbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); + // Make sure the immutable maxDataSize is as expected + (, ISequencerInbox ethSequencerInbox, IInboxBase ethInbox, , ) = bridgeCreator + .ethBasedTemplates(); + require( + deployParams.maxDataSize == ethSequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require(deployParams.maxDataSize == ethInbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); - (, ISequencerInbox erc20SequencerInbox, IInboxBase erc20Inbox, , ) = bridgeCreator - .erc20BasedTemplates(); - require( - deployParams.maxDataSize == erc20SequencerInbox.maxDataSize(), - "SI_MAX_DATA_SIZE_MISMATCH" - ); - require( - deployParams.maxDataSize == erc20Inbox.maxDataSize(), - "I_MAX_DATA_SIZE_MISMATCH" - ); - } + (, ISequencerInbox erc20SequencerInbox, IInboxBase erc20Inbox, , ) = bridgeCreator + .erc20BasedTemplates(); + require( + deployParams.maxDataSize == erc20SequencerInbox.maxDataSize(), + "SI_MAX_DATA_SIZE_MISMATCH" + ); + require(deployParams.maxDataSize == erc20Inbox.maxDataSize(), "I_MAX_DATA_SIZE_MISMATCH"); // create proxy admin which will manage bridge contracts ProxyAdmin proxyAdmin = new ProxyAdmin(); From d5ee56d8370e8dcf43e438d7e15ac787acd2a007 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 17 Oct 2023 22:07:12 +0800 Subject: [PATCH 156/176] v1.1.0-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34e13281..5cb6a4d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-beta.0", + "version": "1.1.0-beta.1", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From e9cb9fab03cb18f7be5f00e92b0adc509960298c Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 18:12:25 +0800 Subject: [PATCH 157/176] feat: outbox postUpgradeInit --- src/bridge/AbsOutbox.sol | 16 +++++++++++++++- src/bridge/IOutbox.sol | 6 ++++++ src/libraries/Error.sol | 5 ++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol index 2b87c726..2678f1fb 100644 --- a/src/bridge/AbsOutbox.sol +++ b/src/bridge/AbsOutbox.sol @@ -12,7 +12,8 @@ import { UnknownRoot, AlreadySpent, BridgeCallFailed, - HadZeroInit + HadZeroInit, + BadPostUpgradeInit } from "../libraries/Error.sol"; import "./IBridge.sol"; import "./IOutbox.sol"; @@ -76,6 +77,19 @@ abstract contract AbsOutbox is DelegateCallAware, IOutbox { rollup = address(_bridge.rollup()); } + function postUpgradeInit() external onlyDelegated onlyProxyOwner { + // prevent postUpgradeInit within a withdrawal + if (context.l2Block != L2BLOCK_DEFAULT_CONTEXT) revert BadPostUpgradeInit(); + context = L2ToL1Context({ + l2Block: L2BLOCK_DEFAULT_CONTEXT, + l1Block: L1BLOCK_DEFAULT_CONTEXT, + timestamp: TIMESTAMP_DEFAULT_CONTEXT, + outputId: OUTPUTID_DEFAULT_CONTEXT, + sender: SENDER_DEFAULT_CONTEXT, + withdrawalAmount: _defaultContextAmount() + }); + } + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); roots[root] = l2BlockHash; diff --git a/src/bridge/IOutbox.sol b/src/bridge/IOutbox.sol index 06358170..be888634 100644 --- a/src/bridge/IOutbox.sol +++ b/src/bridge/IOutbox.sol @@ -119,4 +119,10 @@ interface IOutbox { uint256 path, bytes32 item ) external pure returns (bytes32); + + /** + * @dev function to be called one time during the outbox upgrade process + * this is used to fix the storage slots + */ + function postUpgradeInit() external; } diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index beb0afc8..e4776d80 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -7,9 +7,12 @@ pragma solidity ^0.8.4; /// @dev Init was already called error AlreadyInit(); -/// Init was called with param set to zero that must be nonzero +/// @dev Init was called with param set to zero that must be nonzero error HadZeroInit(); +/// @dev Thrown when post upgrade init validation fails +error BadPostUpgradeInit(); + /// @dev Thrown when non owner tries to access an only-owner function /// @param sender The msg.sender who is not the owner /// @param owner The owner address From b8b711e347a93b960e0c2c9d54e8b7d2bf1eb849 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Wed, 2 Aug 2023 14:06:58 +0200 Subject: [PATCH 158/176] Removed whenNotPaused from deposit withdrawal --- src/rollup/RollupUserLogic.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rollup/RollupUserLogic.sol b/src/rollup/RollupUserLogic.sol index bd16ad5e..0617f363 100644 --- a/src/rollup/RollupUserLogic.sol +++ b/src/rollup/RollupUserLogic.sol @@ -234,7 +234,7 @@ abstract contract AbsRollupUserLogic is * and move it to the desired node. * @param stakerAddress Address of the staker whose stake is refunded */ - function returnOldDeposit(address stakerAddress) external override onlyValidator whenNotPaused { + function returnOldDeposit(address stakerAddress) external override onlyValidator { require(latestStakedNode(stakerAddress) <= latestConfirmed(), "TOO_RECENT"); requireUnchallengedStaker(stakerAddress); withdrawStaker(stakerAddress); @@ -258,7 +258,7 @@ abstract contract AbsRollupUserLogic is * @notice Reduce the amount staked for the sender (difference between initial amount staked and target is creditted back to the sender). * @param target Target amount of stake for the staker. If this is below the current minimum, it will be set to minimum instead */ - function reduceDeposit(uint256 target) external onlyValidator whenNotPaused { + function reduceDeposit(uint256 target) external onlyValidator { requireUnchallengedStaker(msg.sender); uint256 currentRequired = currentRequiredStake(); if (target < currentRequired) { @@ -659,7 +659,7 @@ contract RollupUserLogic is AbsRollupUserLogic, IRollupUser { /** * @notice Withdraw uncommitted funds owned by sender from the rollup chain */ - function withdrawStakerFunds() external override onlyValidator whenNotPaused returns (uint256) { + function withdrawStakerFunds() external override onlyValidator returns (uint256) { uint256 amount = withdrawFunds(msg.sender); // This is safe because it occurs after all checks and effects // solhint-disable-next-line avoid-low-level-calls @@ -731,7 +731,7 @@ contract ERC20RollupUserLogic is AbsRollupUserLogic, IRollupUserERC20 { /** * @notice Withdraw uncommitted funds owned by sender from the rollup chain */ - function withdrawStakerFunds() external override onlyValidator whenNotPaused returns (uint256) { + function withdrawStakerFunds() external override onlyValidator returns (uint256) { uint256 amount = withdrawFunds(msg.sender); // This is safe because it occurs after all checks and effects require(IERC20Upgradeable(stakeToken).transfer(msg.sender, amount), "TRANSFER_FAILED"); From 0139283b2db6c1f85eb1cfff8277875c3eb1dda6 Mon Sep 17 00:00:00 2001 From: gzeon Date: Mon, 7 Aug 2023 12:38:20 +0100 Subject: [PATCH 159/176] test: withdraw on pause --- test/contract/arbRollup.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index fca5eb97..5740b92a 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -823,6 +823,7 @@ describe('ArbRollup', () => { .connect(validators[1]) .addToDeposit(await validators[1].getAddress(), { value: 5 }) + await rollupAdmin.pause() await rollup.connect(validators[1]).reduceDeposit(5) const prevBalance = await validators[1].getBalance() @@ -849,6 +850,7 @@ describe('ArbRollup', () => { .connect(validators[1]) .returnOldDeposit(await validators[1].getAddress()) // all stake is now removed + await rollupAdmin.resume() }) it('should allow removing zombies', async function () { From 36c568b38ecdd631db79148150d9eb06fc0c1149 Mon Sep 17 00:00:00 2001 From: Chris Buckland Date: Fri, 22 Sep 2023 16:10:08 +0200 Subject: [PATCH 160/176] Added test for force refunding staker --- test/contract/arbRollup.spec.ts | 112 ++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 5740b92a..24132b29 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -789,69 +789,85 @@ describe('ArbRollup', () => { await rollup.confirmNextNode(challengerNode) }) - it('should add and remove stakes correctly', async function () { - /* - RollupUser functions that alter stake and their respective Core logic + it('allow force refund staker with pending node', async function () { + await (await rollupAdmin.pause()).wait(); + await (await rollupAdmin.forceRefundStaker([await validators[1].getAddress()])).wait() + await (await rollup.rollup.connect(validators[1]).withdrawStakerFunds()).wait() + await (await rollupAdmin.resume()).wait(); - user: newStake - core: createNewStake + const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( + await validators[1].getAddress() + ) + expect(postWithdrawablefunds, "withdrawable funds").to.equal(0) + const stake = await rollup.rollup.amountStaked( + await validators[1].getAddress() + ) + expect(stake, "amount staked").to.equal(0) + }) - user: addToDeposit - core: increaseStakeBy + // it('should add and remove stakes correctly', async function () { + // /* + // RollupUser functions that alter stake and their respective Core logic - user: reduceDeposit - core: reduceStakeTo + // user: newStake + // core: createNewStake - user: returnOldDeposit - core: withdrawStaker + // user: addToDeposit + // core: increaseStakeBy - user: withdrawStakerFunds - core: withdrawFunds - */ + // user: reduceDeposit + // core: reduceStakeTo - const initialStake = await rollup.rollup.amountStaked( - await validators[1].getAddress() - ) + // user: returnOldDeposit + // core: withdrawStaker - await rollup.connect(validators[1]).reduceDeposit(initialStake) + // user: withdrawStakerFunds + // core: withdrawFunds + // */ - await expect( - rollup.connect(validators[1]).reduceDeposit(initialStake.add(1)) - ).to.be.revertedWith('TOO_LITTLE_STAKE') + // const initialStake = await rollup.rollup.amountStaked( + // await validators[1].getAddress() + // ) - await rollup - .connect(validators[1]) - .addToDeposit(await validators[1].getAddress(), { value: 5 }) + // await rollup.connect(validators[1]).reduceDeposit(initialStake) - await rollupAdmin.pause() - await rollup.connect(validators[1]).reduceDeposit(5) + // await expect( + // rollup.connect(validators[1]).reduceDeposit(initialStake.add(1)) + // ).to.be.revertedWith('TOO_LITTLE_STAKE') - const prevBalance = await validators[1].getBalance() - const prevWithdrawablefunds = await rollup.rollup.withdrawableFunds( - await validators[1].getAddress() - ) + // await rollup + // .connect(validators[1]) + // .addToDeposit(await validators[1].getAddress(), { value: 5 }) - const tx = await rollup.rollup.connect(validators[1]).withdrawStakerFunds() - const receipt = await tx.wait() - const gasPaid = receipt.gasUsed.mul(receipt.effectiveGasPrice) + // await rollupAdmin.pause() + // await rollup.connect(validators[1]).reduceDeposit(5) - const postBalance = await validators[1].getBalance() - const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( - await validators[1].getAddress() - ) + // const prevBalance = await validators[1].getBalance() + // const prevWithdrawablefunds = await rollup.rollup.withdrawableFunds( + // await validators[1].getAddress() + // ) - expect(postWithdrawablefunds).to.equal(0) - expect(postBalance.add(gasPaid)).to.equal( - prevBalance.add(prevWithdrawablefunds) - ) + // const tx = await rollup.rollup.connect(validators[1]).withdrawStakerFunds() + // const receipt = await tx.wait() + // const gasPaid = receipt.gasUsed.mul(receipt.effectiveGasPrice) - // this gets deposit and removes staker - await rollup.rollup - .connect(validators[1]) - .returnOldDeposit(await validators[1].getAddress()) - // all stake is now removed - await rollupAdmin.resume() - }) + // const postBalance = await validators[1].getBalance() + // const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( + // await validators[1].getAddress() + // ) + + // expect(postWithdrawablefunds).to.equal(0) + // expect(postBalance.add(gasPaid)).to.equal( + // prevBalance.add(prevWithdrawablefunds) + // ) + + // // this gets deposit and removes staker + // await rollup.rollup + // .connect(validators[1]) + // .returnOldDeposit(await validators[1].getAddress()) + // // all stake is now removed + // await rollupAdmin.resume() + // }) it('should allow removing zombies', async function () { const zombieCount = ( From 010c37fcbefd4fc044d37ea29fd25e15f8afec8c Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 19:47:52 +0800 Subject: [PATCH 161/176] feat: whenNotPausedOrDeprecated --- src/rollup/RollupUserLogic.sol | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/rollup/RollupUserLogic.sol b/src/rollup/RollupUserLogic.sol index 0617f363..c3653ede 100644 --- a/src/rollup/RollupUserLogic.sol +++ b/src/rollup/RollupUserLogic.sol @@ -227,6 +227,11 @@ abstract contract AbsRollupUserLogic is stakeOnNode(msg.sender, latestNodeCreated()); } + modifier whenNotPausedOrDeprecated() { + require(!paused() || address(bridge.rollup()) != address(this), "PAUSED_OR_NOT_DEPRECATED"); + _; + } + /** * @notice Refund a staker that is currently staked on or before the latest confirmed node * @dev Since a staker is initially placed in the latest confirmed node, if they don't move it @@ -234,7 +239,12 @@ abstract contract AbsRollupUserLogic is * and move it to the desired node. * @param stakerAddress Address of the staker whose stake is refunded */ - function returnOldDeposit(address stakerAddress) external override onlyValidator { + function returnOldDeposit(address stakerAddress) + external + override + onlyValidator + whenNotPausedOrDeprecated + { require(latestStakedNode(stakerAddress) <= latestConfirmed(), "TOO_RECENT"); requireUnchallengedStaker(stakerAddress); withdrawStaker(stakerAddress); @@ -258,7 +268,7 @@ abstract contract AbsRollupUserLogic is * @notice Reduce the amount staked for the sender (difference between initial amount staked and target is creditted back to the sender). * @param target Target amount of stake for the staker. If this is below the current minimum, it will be set to minimum instead */ - function reduceDeposit(uint256 target) external onlyValidator { + function reduceDeposit(uint256 target) external onlyValidator whenNotPausedOrDeprecated { requireUnchallengedStaker(msg.sender); uint256 currentRequired = currentRequiredStake(); if (target < currentRequired) { @@ -659,7 +669,13 @@ contract RollupUserLogic is AbsRollupUserLogic, IRollupUser { /** * @notice Withdraw uncommitted funds owned by sender from the rollup chain */ - function withdrawStakerFunds() external override onlyValidator returns (uint256) { + function withdrawStakerFunds() + external + override + onlyValidator + whenNotPausedOrDeprecated + returns (uint256) + { uint256 amount = withdrawFunds(msg.sender); // This is safe because it occurs after all checks and effects // solhint-disable-next-line avoid-low-level-calls @@ -731,7 +747,13 @@ contract ERC20RollupUserLogic is AbsRollupUserLogic, IRollupUserERC20 { /** * @notice Withdraw uncommitted funds owned by sender from the rollup chain */ - function withdrawStakerFunds() external override onlyValidator returns (uint256) { + function withdrawStakerFunds() + external + override + onlyValidator + whenNotPausedOrDeprecated + returns (uint256) + { uint256 amount = withdrawFunds(msg.sender); // This is safe because it occurs after all checks and effects require(IERC20Upgradeable(stakeToken).transfer(msg.sender, amount), "TRANSFER_FAILED"); From 01152be1da813fb60010f0d5dceed0d27fa2d4d7 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 19:57:22 +0800 Subject: [PATCH 162/176] feat: allow updating rollup address in bridge --- src/bridge/AbsBridge.sol | 5 +++++ src/bridge/IBridge.sol | 2 ++ src/mocks/BridgeStub.sol | 4 ++++ src/test-helpers/BridgeTester.sol | 4 ++++ 4 files changed, 15 insertions(+) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index 88577d2d..29cf6a84 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -57,6 +57,11 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); + /// @notice Allows the proxy owner to set the rollup address + function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { + rollup = _rollup; + } + modifier onlyRollupOrOwner() { if (msg.sender != address(rollup)) { address rollupOwner = rollup.owner(); diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 49c3c13f..7804f289 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -97,4 +97,6 @@ interface IBridge { function setDelayedInbox(address inbox, bool enabled) external; function setOutbox(address inbox, bool enabled) external; + + function updateRollupAddress(IOwnable _rollup) external; } diff --git a/src/mocks/BridgeStub.sol b/src/mocks/BridgeStub.sol index 37c994e4..2e2dee05 100644 --- a/src/mocks/BridgeStub.sol +++ b/src/mocks/BridgeStub.sol @@ -45,6 +45,10 @@ contract BridgeStub is IBridge, IEthBridge { revert("NOT_IMPLEMENTED"); } + function updateRollupAddress(IOwnable) external pure { + revert("NOT_IMPLEMENTED"); + } + function enqueueDelayedMessage( uint8 kind, address sender, diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index bd1fc7da..a739957f 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -74,6 +74,10 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge, IEthBridge { rollup = rollup_; } + function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { + rollup = _rollup; + } + function activeOutbox() public view returns (address) { if (_activeOutbox == EMPTY_ACTIVEOUTBOX) return address(uint160(0)); return _activeOutbox; From 674b0e557f7844a676d2a43124d5b8275b9dbd6c Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 20:03:16 +0800 Subject: [PATCH 163/176] feat: allow updating rollup address --- src/bridge/AbsOutbox.sol | 5 +++++ src/bridge/IOutbox.sol | 2 ++ src/bridge/ISequencerInbox.sol | 2 ++ src/bridge/SequencerInbox.sol | 5 +++++ src/rollup/AbsRollupEventInbox.sol | 5 +++++ src/rollup/IRollupEventInbox.sol | 2 ++ src/test-helpers/OutboxWithoutOptTester.sol | 4 ++++ 7 files changed, 25 insertions(+) diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol index 2b87c726..c9dd3eba 100644 --- a/src/bridge/AbsOutbox.sol +++ b/src/bridge/AbsOutbox.sol @@ -76,6 +76,11 @@ abstract contract AbsOutbox is DelegateCallAware, IOutbox { rollup = address(_bridge.rollup()); } + /// @notice Allows the proxy owner to set the rollup address + function updateRollupAddress() external onlyDelegated onlyProxyOwner { + rollup = address(bridge.rollup()); + } + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); roots[root] = l2BlockHash; diff --git a/src/bridge/IOutbox.sol b/src/bridge/IOutbox.sol index 06358170..21bf02f8 100644 --- a/src/bridge/IOutbox.sol +++ b/src/bridge/IOutbox.sol @@ -31,6 +31,8 @@ interface IOutbox { function updateSendRoot(bytes32 sendRoot, bytes32 l2BlockHash) external; + function updateRollupAddress() external; + /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account /// When the return value is zero, that means this is a system message /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies diff --git a/src/bridge/ISequencerInbox.sol b/src/bridge/ISequencerInbox.sol index b4fadddb..7d66befc 100644 --- a/src/bridge/ISequencerInbox.sol +++ b/src/bridge/ISequencerInbox.sol @@ -177,4 +177,6 @@ interface ISequencerInbox is IDelayedMessageProvider { // ---------- initializer ---------- function initialize(IBridge bridge_, MaxTimeVariation calldata maxTimeVariation_) external; + + function updateRollupAddress() external; } diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index c1cb745f..4f63d716 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -91,6 +91,11 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox maxTimeVariation = maxTimeVariation_; } + /// @notice Allows the proxy owner to set the rollup address + function updateRollupAddress() external onlyDelegated onlyProxyOwner { + rollup = bridge.rollup(); + } + function getTimeBounds() internal view virtual returns (TimeBounds memory) { TimeBounds memory bounds; if (block.timestamp > maxTimeVariation.delaySeconds) { diff --git a/src/rollup/AbsRollupEventInbox.sol b/src/rollup/AbsRollupEventInbox.sol index b2f89fcd..80f905e6 100644 --- a/src/rollup/AbsRollupEventInbox.sol +++ b/src/rollup/AbsRollupEventInbox.sol @@ -37,6 +37,11 @@ abstract contract AbsRollupEventInbox is rollup = address(_bridge.rollup()); } + /// @notice Allows the proxy owner to set the rollup address + function updateRollupAddress() external onlyDelegated onlyProxyOwner { + rollup = address(bridge.rollup()); + } + function rollupInitialized(uint256 chainId, string calldata chainConfig) external override diff --git a/src/rollup/IRollupEventInbox.sol b/src/rollup/IRollupEventInbox.sol index beb1b4ed..2e79f7e6 100644 --- a/src/rollup/IRollupEventInbox.sol +++ b/src/rollup/IRollupEventInbox.sol @@ -13,5 +13,7 @@ interface IRollupEventInbox { function rollup() external view returns (address); + function updateRollupAddress() external; + function rollupInitialized(uint256 chainId, string calldata chainConfig) external; } diff --git a/src/test-helpers/OutboxWithoutOptTester.sol b/src/test-helpers/OutboxWithoutOptTester.sol index 50f378ac..957e7d84 100644 --- a/src/test-helpers/OutboxWithoutOptTester.sol +++ b/src/test-helpers/OutboxWithoutOptTester.sol @@ -54,6 +54,10 @@ contract OutboxWithoutOptTester is DelegateCallAware, IOutbox { emit SendRootUpdated(root, l2BlockHash); } + function updateRollupAddress() external onlyDelegated onlyProxyOwner { + rollup = address(bridge.rollup()); + } + /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account /// When the return value is zero, that means this is a system message /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies From 6247b41dde3f18342a2f717ec86c4d7c425893fa Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 20:04:53 +0800 Subject: [PATCH 164/176] format: fix --- test/contract/arbRollup.spec.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 24132b29..b7bcb0b2 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -790,19 +790,23 @@ describe('ArbRollup', () => { }) it('allow force refund staker with pending node', async function () { - await (await rollupAdmin.pause()).wait(); - await (await rollupAdmin.forceRefundStaker([await validators[1].getAddress()])).wait() - await (await rollup.rollup.connect(validators[1]).withdrawStakerFunds()).wait() - await (await rollupAdmin.resume()).wait(); + await (await rollupAdmin.pause()).wait() + await ( + await rollupAdmin.forceRefundStaker([await validators[1].getAddress()]) + ).wait() + await ( + await rollup.rollup.connect(validators[1]).withdrawStakerFunds() + ).wait() + await (await rollupAdmin.resume()).wait() const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( await validators[1].getAddress() ) - expect(postWithdrawablefunds, "withdrawable funds").to.equal(0) + expect(postWithdrawablefunds, 'withdrawable funds').to.equal(0) const stake = await rollup.rollup.amountStaked( await validators[1].getAddress() ) - expect(stake, "amount staked").to.equal(0) + expect(stake, 'amount staked').to.equal(0) }) // it('should add and remove stakes correctly', async function () { From ceed8da1900cea02e518755b2011c024e4cf4041 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:06:01 +0800 Subject: [PATCH 165/176] fix: allow rollup admin instead --- src/bridge/AbsBridge.sol | 11 ++++++----- src/bridge/AbsOutbox.sol | 6 ++++-- src/bridge/SequencerInbox.sol | 6 ++++-- src/libraries/Error.sol | 3 +++ src/rollup/AbsRollupEventInbox.sol | 6 ++++-- src/test-helpers/BridgeTester.sol | 2 +- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index 29cf6a84..51de0dbd 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -14,6 +14,7 @@ import { NotSequencerInbox, NotOutbox, InvalidOutboxSet, + InvalidRollupSet, BadSequencerMessageNumber } from "../libraries/Error.sol"; import "./IBridge.sol"; @@ -57,11 +58,6 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { address internal constant EMPTY_ACTIVEOUTBOX = address(type(uint160).max); - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { - rollup = _rollup; - } - modifier onlyRollupOrOwner() { if (msg.sender != address(rollup)) { address rollupOwner = rollup.owner(); @@ -72,6 +68,11 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { _; } + /// @notice Allows the rollup owner to set another rollup address + function updateRollupAddress(IOwnable _rollup) external onlyRollupOrOwner { + rollup = _rollup; + } + /// @dev returns the address of current active Outbox, or zero if no outbox is active function activeOutbox() public view returns (address) { address outbox = _activeOutbox; diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol index c9dd3eba..f49e092b 100644 --- a/src/bridge/AbsOutbox.sol +++ b/src/bridge/AbsOutbox.sol @@ -76,8 +76,10 @@ abstract contract AbsOutbox is DelegateCallAware, IOutbox { rollup = address(_bridge.rollup()); } - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); rollup = address(bridge.rollup()); } diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 4f63d716..921122f3 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -91,8 +91,10 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox maxTimeVariation = maxTimeVariation_; } - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); rollup = bridge.rollup(); } diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index beb0afc8..d70f92d4 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -172,3 +172,6 @@ error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset error NoSuchKeyset(bytes32); + +/// @dev Invalid rollup address is set +error InvalidRollupSet(address); diff --git a/src/rollup/AbsRollupEventInbox.sol b/src/rollup/AbsRollupEventInbox.sol index 80f905e6..6fa42ea3 100644 --- a/src/rollup/AbsRollupEventInbox.sol +++ b/src/rollup/AbsRollupEventInbox.sol @@ -37,8 +37,10 @@ abstract contract AbsRollupEventInbox is rollup = address(_bridge.rollup()); } - /// @notice Allows the proxy owner to set the rollup address - function updateRollupAddress() external onlyDelegated onlyProxyOwner { + /// @notice Allows the rollup owner to sync the rollup address + function updateRollupAddress() external { + if (msg.sender != IOwnable(rollup).owner()) + revert NotOwner(msg.sender, IOwnable(rollup).owner()); rollup = address(bridge.rollup()); } diff --git a/src/test-helpers/BridgeTester.sol b/src/test-helpers/BridgeTester.sol index a739957f..0bcbe00f 100644 --- a/src/test-helpers/BridgeTester.sol +++ b/src/test-helpers/BridgeTester.sol @@ -74,7 +74,7 @@ contract BridgeTester is Initializable, DelegateCallAware, IBridge, IEthBridge { rollup = rollup_; } - function updateRollupAddress(IOwnable _rollup) external onlyDelegated onlyProxyOwner { + function updateRollupAddress(IOwnable _rollup) external { rollup = _rollup; } From baade430eda5cd8a08ddc32534049dd1ea7dfa4d Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:06:10 +0800 Subject: [PATCH 166/176] test: fixes --- test/contract/arbRollup.spec.ts | 133 +++++++++++++++++++------------- 1 file changed, 78 insertions(+), 55 deletions(-) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index b7bcb0b2..0dcf03d8 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -46,6 +46,7 @@ import { RollupUserLogic__factory, SequencerInbox, SequencerInbox__factory, + Bridge, } from '../../build/types' import { abi as UpgradeExecutorABI, @@ -86,6 +87,7 @@ const wasmModuleRoot = let rollup: RollupContract let rollupUser: RollupUserLogic let rollupAdmin: RollupAdminLogic +let bridge: Bridge let accounts: Signer[] let validators: Signer[] let sequencerInbox: SequencerInbox @@ -93,6 +95,7 @@ let admin: Signer let sequencer: Signer let challengeManager: ChallengeManager let upgradeExecutor: string +let adminproxy: string async function getDefaultConfig( _confirmPeriodBlocks = confirmationPeriodBlocks @@ -275,6 +278,7 @@ const setup = async () => { await val1.getAddress(), await val2.getAddress(), await val3.getAddress(), + await val4.getAddress(), ], maxDataSize: 117964, nativeToken: ethers.constants.AddressZero, @@ -298,6 +302,7 @@ const setup = async () => { const rollupUser = rollupUserLogicFac .attach(rollupCreatedEvent.rollupAddress) .connect(user) + const bridge = ethBridgeFac.attach(rollupCreatedEvent.bridge).connect(user) sequencerInbox = ( (await ethers.getContractFactory( @@ -328,8 +333,9 @@ const setup = async () => { sequencerInbox: rollupCreatedEvent.sequencerInbox, delayedBridge: rollupCreatedEvent.bridge, delayedInbox: rollupCreatedEvent.inboxAddress, - bridge: rollupCreatedEvent.bridge, + bridge, upgradeExecutorAddress: rollupCreatedEvent.upgradeExecutor, + adminproxy: rollupCreatedEvent.adminProxy, } } @@ -509,15 +515,19 @@ describe('ArbRollup', () => { const { rollupAdmin: rollupAdminContract, rollupUser: rollupUserContract, + bridge: bridgeContract, admin: adminI, validators: validatorsI, upgradeExecutorAddress, + adminproxy: adminproxyAddress, } = await setup() rollupAdmin = rollupAdminContract rollupUser = rollupUserContract + bridge = bridgeContract admin = adminI validators = validatorsI upgradeExecutor = upgradeExecutorAddress + adminproxy = adminproxyAddress rollup = new RollupContract(rollupUser.connect(validators[0])) }) @@ -580,6 +590,9 @@ describe('ArbRollup', () => { await rollupUser .connect(validators[2]) .newStakeOnExistingNode(1, prevNode.nodeHash, { value: stake }) + await rollupUser + .connect(validators[3]) + .newStakeOnExistingNode(1, prevNode.nodeHash, { value: stake }) }) it('should move stake to a new node', async function () { @@ -790,88 +803,98 @@ describe('ArbRollup', () => { }) it('allow force refund staker with pending node', async function () { - await (await rollupAdmin.pause()).wait() + await rollupAdmin.connect(await impersonateAccount(upgradeExecutor)).pause() await ( - await rollupAdmin.forceRefundStaker([await validators[1].getAddress()]) + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .forceRefundStaker([await validators[3].getAddress()]) ).wait() + // staker can only withdraw if rollup address changed when paused + await bridge + .connect(await impersonateAccount(rollup.rollup.address)) + .updateRollupAddress(ethers.constants.AddressZero) await ( - await rollup.rollup.connect(validators[1]).withdrawStakerFunds() + await rollup.rollup.connect(validators[3]).withdrawStakerFunds() ).wait() - await (await rollupAdmin.resume()).wait() + await rollupAdmin + .connect(await impersonateAccount(upgradeExecutor)) + .resume() + // restore rollup address + await bridge + .connect(await impersonateAccount(ethers.constants.AddressZero)) + .updateRollupAddress(rollupUser.address) const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( - await validators[1].getAddress() + await validators[3].getAddress() ) expect(postWithdrawablefunds, 'withdrawable funds').to.equal(0) const stake = await rollup.rollup.amountStaked( - await validators[1].getAddress() + await validators[3].getAddress() ) expect(stake, 'amount staked').to.equal(0) }) - // it('should add and remove stakes correctly', async function () { - // /* - // RollupUser functions that alter stake and their respective Core logic + it('should add and remove stakes correctly', async function () { + /* + RollupUser functions that alter stake and their respective Core logic - // user: newStake - // core: createNewStake + user: newStake + core: createNewStake - // user: addToDeposit - // core: increaseStakeBy + user: addToDeposit + core: increaseStakeBy - // user: reduceDeposit - // core: reduceStakeTo + user: reduceDeposit + core: reduceStakeTo - // user: returnOldDeposit - // core: withdrawStaker + user: returnOldDeposit + core: withdrawStaker - // user: withdrawStakerFunds - // core: withdrawFunds - // */ + user: withdrawStakerFunds + core: withdrawFunds + */ - // const initialStake = await rollup.rollup.amountStaked( - // await validators[1].getAddress() - // ) + const initialStake = await rollup.rollup.amountStaked( + await validators[1].getAddress() + ) - // await rollup.connect(validators[1]).reduceDeposit(initialStake) + await rollup.connect(validators[1]).reduceDeposit(initialStake) - // await expect( - // rollup.connect(validators[1]).reduceDeposit(initialStake.add(1)) - // ).to.be.revertedWith('TOO_LITTLE_STAKE') + await expect( + rollup.connect(validators[1]).reduceDeposit(initialStake.add(1)) + ).to.be.revertedWith('TOO_LITTLE_STAKE') - // await rollup - // .connect(validators[1]) - // .addToDeposit(await validators[1].getAddress(), { value: 5 }) + await rollup + .connect(validators[1]) + .addToDeposit(await validators[1].getAddress(), { value: 5 }) - // await rollupAdmin.pause() - // await rollup.connect(validators[1]).reduceDeposit(5) + await rollup.connect(validators[1]).reduceDeposit(5) - // const prevBalance = await validators[1].getBalance() - // const prevWithdrawablefunds = await rollup.rollup.withdrawableFunds( - // await validators[1].getAddress() - // ) + const prevBalance = await validators[1].getBalance() + const prevWithdrawablefunds = await rollup.rollup.withdrawableFunds( + await validators[1].getAddress() + ) - // const tx = await rollup.rollup.connect(validators[1]).withdrawStakerFunds() - // const receipt = await tx.wait() - // const gasPaid = receipt.gasUsed.mul(receipt.effectiveGasPrice) + const tx = await rollup.rollup.connect(validators[1]).withdrawStakerFunds() + const receipt = await tx.wait() + const gasPaid = receipt.gasUsed.mul(receipt.effectiveGasPrice) - // const postBalance = await validators[1].getBalance() - // const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( - // await validators[1].getAddress() - // ) + const postBalance = await validators[1].getBalance() + const postWithdrawablefunds = await rollup.rollup.withdrawableFunds( + await validators[1].getAddress() + ) - // expect(postWithdrawablefunds).to.equal(0) - // expect(postBalance.add(gasPaid)).to.equal( - // prevBalance.add(prevWithdrawablefunds) - // ) + expect(postWithdrawablefunds).to.equal(0) + expect(postBalance.add(gasPaid)).to.equal( + prevBalance.add(prevWithdrawablefunds) + ) - // // this gets deposit and removes staker - // await rollup.rollup - // .connect(validators[1]) - // .returnOldDeposit(await validators[1].getAddress()) - // // all stake is now removed - // await rollupAdmin.resume() - // }) + // this gets deposit and removes staker + await rollup.rollup + .connect(validators[1]) + .returnOldDeposit(await validators[1].getAddress()) + // all stake is now removed + }) it('should allow removing zombies', async function () { const zombieCount = ( From 0c1b1fceb39ddd4fcc5080ce3da6815c38fd1c28 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:09:31 +0800 Subject: [PATCH 167/176] fix: test contract --- src/test-helpers/OutboxWithoutOptTester.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test-helpers/OutboxWithoutOptTester.sol b/src/test-helpers/OutboxWithoutOptTester.sol index 50f378ac..0036e3c1 100644 --- a/src/test-helpers/OutboxWithoutOptTester.sol +++ b/src/test-helpers/OutboxWithoutOptTester.sol @@ -48,6 +48,8 @@ contract OutboxWithoutOptTester is DelegateCallAware, IOutbox { rollup = address(_bridge.rollup()); } + function postUpgradeInit() external {} + function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external override { //if (msg.sender != rollup) revert NotRollup(msg.sender, rollup); //test only!!! roots[root] = l2BlockHash; From 5c723cb89af79fc9ffeb5ae4388d64418a0753fa Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:23:09 +0800 Subject: [PATCH 168/176] chore: remove unused error --- src/bridge/AbsBridge.sol | 1 - src/libraries/Error.sol | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index 51de0dbd..e4e0ae57 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -14,7 +14,6 @@ import { NotSequencerInbox, NotOutbox, InvalidOutboxSet, - InvalidRollupSet, BadSequencerMessageNumber } from "../libraries/Error.sol"; import "./IBridge.sol"; diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index d70f92d4..e4776d80 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -7,9 +7,12 @@ pragma solidity ^0.8.4; /// @dev Init was already called error AlreadyInit(); -/// Init was called with param set to zero that must be nonzero +/// @dev Init was called with param set to zero that must be nonzero error HadZeroInit(); +/// @dev Thrown when post upgrade init validation fails +error BadPostUpgradeInit(); + /// @dev Thrown when non owner tries to access an only-owner function /// @param sender The msg.sender who is not the owner /// @param owner The owner address @@ -172,6 +175,3 @@ error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset error NoSuchKeyset(bytes32); - -/// @dev Invalid rollup address is set -error InvalidRollupSet(address); From fa10996cc89fc0b0aad80c915283f515e296db5e Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:25:39 +0800 Subject: [PATCH 169/176] docs: improve revert string --- src/rollup/RollupUserLogic.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rollup/RollupUserLogic.sol b/src/rollup/RollupUserLogic.sol index c3653ede..4f565f21 100644 --- a/src/rollup/RollupUserLogic.sol +++ b/src/rollup/RollupUserLogic.sol @@ -228,7 +228,7 @@ abstract contract AbsRollupUserLogic is } modifier whenNotPausedOrDeprecated() { - require(!paused() || address(bridge.rollup()) != address(this), "PAUSED_OR_NOT_DEPRECATED"); + require(!paused() || address(bridge.rollup()) != address(this), "PAUSED_AND_ACTIVE"); _; } From 4d2e1de0d7a04dc56cd24da87139e26ff09979bd Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:28:08 +0800 Subject: [PATCH 170/176] test: PAUSED_AND_ACTIVE --- test/contract/arbRollup.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/contract/arbRollup.spec.ts b/test/contract/arbRollup.spec.ts index 0dcf03d8..ac836d1d 100644 --- a/test/contract/arbRollup.spec.ts +++ b/test/contract/arbRollup.spec.ts @@ -809,16 +809,22 @@ describe('ArbRollup', () => { .connect(await impersonateAccount(upgradeExecutor)) .forceRefundStaker([await validators[3].getAddress()]) ).wait() + + await expect( + rollup.rollup.connect(validators[3]).withdrawStakerFunds() + ).to.be.revertedWith('PAUSED_AND_ACTIVE') // staker can only withdraw if rollup address changed when paused await bridge .connect(await impersonateAccount(rollup.rollup.address)) .updateRollupAddress(ethers.constants.AddressZero) + await ( await rollup.rollup.connect(validators[3]).withdrawStakerFunds() ).wait() await rollupAdmin .connect(await impersonateAccount(upgradeExecutor)) .resume() + // restore rollup address await bridge .connect(await impersonateAccount(ethers.constants.AddressZero)) From 1075cc82692849b603d3d172f2a92bb98fece766 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 22:49:08 +0800 Subject: [PATCH 171/176] chore: remove unrelated error --- src/libraries/Error.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index e4776d80..2d2461b3 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -10,9 +10,6 @@ error AlreadyInit(); /// @dev Init was called with param set to zero that must be nonzero error HadZeroInit(); -/// @dev Thrown when post upgrade init validation fails -error BadPostUpgradeInit(); - /// @dev Thrown when non owner tries to access an only-owner function /// @param sender The msg.sender who is not the owner /// @param owner The owner address From ca6e8ef21d451b12b2d150dd9c00cc92ca6475cb Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 23:30:51 +0800 Subject: [PATCH 172/176] feat: add RollupUpdated event --- src/bridge/AbsBridge.sol | 1 + src/bridge/IBridge.sol | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/bridge/AbsBridge.sol b/src/bridge/AbsBridge.sol index e4e0ae57..bafd56f9 100644 --- a/src/bridge/AbsBridge.sol +++ b/src/bridge/AbsBridge.sol @@ -70,6 +70,7 @@ abstract contract AbsBridge is Initializable, DelegateCallAware, IBridge { /// @notice Allows the rollup owner to set another rollup address function updateRollupAddress(IOwnable _rollup) external onlyRollupOrOwner { rollup = _rollup; + emit RollupUpdated(address(_rollup)); } /// @dev returns the address of current active Outbox, or zero if no outbox is active diff --git a/src/bridge/IBridge.sol b/src/bridge/IBridge.sol index 7804f289..22388b4b 100644 --- a/src/bridge/IBridge.sol +++ b/src/bridge/IBridge.sol @@ -32,6 +32,8 @@ interface IBridge { event SequencerInboxUpdated(address newSequencerInbox); + event RollupUpdated(address rollup); + function allowedDelayedInboxList(uint256) external returns (address); function allowedOutboxList(uint256) external returns (address); From e8aac68c2fb19a8806a8c3dc398fdba5a39dfcca Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 23:36:17 +0800 Subject: [PATCH 173/176] feat: throw RollupNotChanged --- src/bridge/AbsOutbox.sol | 7 +++++-- src/bridge/SequencerInbox.sol | 7 +++++-- src/libraries/Error.sol | 3 +++ src/rollup/AbsRollupEventInbox.sol | 6 ++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/bridge/AbsOutbox.sol b/src/bridge/AbsOutbox.sol index 126f6062..4dabf9ff 100644 --- a/src/bridge/AbsOutbox.sol +++ b/src/bridge/AbsOutbox.sol @@ -13,7 +13,8 @@ import { AlreadySpent, BridgeCallFailed, HadZeroInit, - BadPostUpgradeInit + BadPostUpgradeInit, + RollupNotChanged } from "../libraries/Error.sol"; import "./IBridge.sol"; import "./IOutbox.sol"; @@ -94,7 +95,9 @@ abstract contract AbsOutbox is DelegateCallAware, IOutbox { function updateRollupAddress() external { if (msg.sender != IOwnable(rollup).owner()) revert NotOwner(msg.sender, IOwnable(rollup).owner()); - rollup = address(bridge.rollup()); + address newRollup = address(bridge.rollup()); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; } function updateSendRoot(bytes32 root, bytes32 l2BlockHash) external { diff --git a/src/bridge/SequencerInbox.sol b/src/bridge/SequencerInbox.sol index 921122f3..51d511e2 100644 --- a/src/bridge/SequencerInbox.sol +++ b/src/bridge/SequencerInbox.sol @@ -20,7 +20,8 @@ import { DataNotAuthenticated, AlreadyValidDASKeyset, NoSuchKeyset, - NotForked + NotForked, + RollupNotChanged } from "../libraries/Error.sol"; import "./IBridge.sol"; import "./IInboxBase.sol"; @@ -95,7 +96,9 @@ contract SequencerInbox is DelegateCallAware, GasRefundEnabled, ISequencerInbox function updateRollupAddress() external { if (msg.sender != IOwnable(rollup).owner()) revert NotOwner(msg.sender, IOwnable(rollup).owner()); - rollup = bridge.rollup(); + IOwnable newRollup = bridge.rollup(); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; } function getTimeBounds() internal view virtual returns (TimeBounds memory) { diff --git a/src/libraries/Error.sol b/src/libraries/Error.sol index e4776d80..fd6f3255 100644 --- a/src/libraries/Error.sol +++ b/src/libraries/Error.sol @@ -175,3 +175,6 @@ error AlreadyValidDASKeyset(bytes32); /// @dev Tried to use or invalidate an already invalid Data Availability Service keyset error NoSuchKeyset(bytes32); + +/// @dev Thrown when rollup is not updated with updateRollupAddress +error RollupNotChanged(); diff --git a/src/rollup/AbsRollupEventInbox.sol b/src/rollup/AbsRollupEventInbox.sol index 6fa42ea3..c0866d9e 100644 --- a/src/rollup/AbsRollupEventInbox.sol +++ b/src/rollup/AbsRollupEventInbox.sol @@ -12,7 +12,7 @@ import "../libraries/ArbitrumChecker.sol"; import "../bridge/IDelayedMessageProvider.sol"; import "../libraries/DelegateCallAware.sol"; import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol"; -import {AlreadyInit, HadZeroInit} from "../libraries/Error.sol"; +import {AlreadyInit, HadZeroInit, RollupNotChanged} from "../libraries/Error.sol"; /** * @title The inbox for rollup protocol events @@ -41,7 +41,9 @@ abstract contract AbsRollupEventInbox is function updateRollupAddress() external { if (msg.sender != IOwnable(rollup).owner()) revert NotOwner(msg.sender, IOwnable(rollup).owner()); - rollup = address(bridge.rollup()); + address newRollup = address(bridge.rollup()); + if (rollup == newRollup) revert RollupNotChanged(); + rollup = newRollup; } function rollupInitialized(uint256 chainId, string calldata chainConfig) From 0c248ffe7994f4ba8c2167fed31536571b96fdf5 Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 23:37:59 +0800 Subject: [PATCH 174/176] format: move modifier to top --- src/rollup/RollupUserLogic.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/rollup/RollupUserLogic.sol b/src/rollup/RollupUserLogic.sol index 4f565f21..9807f201 100644 --- a/src/rollup/RollupUserLogic.sol +++ b/src/rollup/RollupUserLogic.sol @@ -27,6 +27,11 @@ abstract contract AbsRollupUserLogic is _; } + modifier whenNotPausedOrDeprecated() { + require(!paused() || address(bridge.rollup()) != address(this), "PAUSED_AND_ACTIVE"); + _; + } + uint256 internal immutable deployTimeChainId = block.chainid; function _chainIdChanged() internal view returns (bool) { @@ -227,11 +232,6 @@ abstract contract AbsRollupUserLogic is stakeOnNode(msg.sender, latestNodeCreated()); } - modifier whenNotPausedOrDeprecated() { - require(!paused() || address(bridge.rollup()) != address(this), "PAUSED_AND_ACTIVE"); - _; - } - /** * @notice Refund a staker that is currently staked on or before the latest confirmed node * @dev Since a staker is initially placed in the latest confirmed node, if they don't move it From f4410ae75903de861e82b1c462bbce8cb702763f Mon Sep 17 00:00:00 2001 From: gzeon Date: Tue, 24 Oct 2023 23:47:04 +0800 Subject: [PATCH 175/176] v1.1.0-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5cb6a4d6..cff51c12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-beta.1", + "version": "1.1.0-beta.2", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1", From 1a94dabd805673e4c85e4071662814a142b20893 Mon Sep 17 00:00:00 2001 From: gzeon Date: Fri, 27 Oct 2023 00:28:59 +0800 Subject: [PATCH 176/176] chore: version bump 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cff51c12..211ec1ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@arbitrum/nitro-contracts", - "version": "1.1.0-beta.2", + "version": "1.1.0", "description": "Layer 2 precompiles and rollup for Arbitrum Nitro", "author": "Offchain Labs, Inc.", "license": "BUSL-1.1",