From f7bcc8d12e3c958ef701c96b048675d93be03257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Kunze=20K=C3=BCllmer?= <31522760+fedekunze@users.noreply.github.com> Date: Tue, 3 Aug 2021 13:35:31 -0400 Subject: [PATCH] docs: first update (#188) * docs: update * update + * txs * update docs * more docs * spec update * doc fixes --- docs/basics/README.md | 3 +- docs/basics/accounts.md | 6 +- docs/basics/gas.md | 37 +- docs/basics/hard_spoon.md | 17 - docs/basics/photon.md | 33 -- docs/basics/tokens.md | 40 +++ docs/basics/transactions.md | 30 +- docs/core/README.md | 1 + docs/core/encoding.md | 39 ++- docs/guides/cloud_testnet.md | 5 +- docs/guides/join_network.md | 50 +-- docs/guides/metamask.md | 4 +- docs/guides/remix.md | 2 +- docs/guides/truffle.md | 10 +- docs/intro/architecture.md | 16 +- docs/intro/overview.md | 7 +- docs/intro/use_cases.md | 12 +- docs/quickstart/README.md | 4 +- docs/quickstart/clients.md | 42 +-- docs/quickstart/events.md | 14 +- docs/quickstart/installation.md | 6 +- docs/quickstart/run_node.md | 24 +- docs/quickstart/testnet.md | 30 +- docs/quickstart/validator-setup.md | 8 +- docs/yarn.lock | 542 +++++++++++------------------ x/evm/spec/01_concepts.md | 8 - x/evm/spec/02_state.md | 26 -- x/evm/spec/06_events.md | 17 +- 28 files changed, 402 insertions(+), 631 deletions(-) delete mode 100644 docs/basics/hard_spoon.md delete mode 100644 docs/basics/photon.md create mode 100644 docs/basics/tokens.md diff --git a/docs/basics/README.md b/docs/basics/README.md index 1d49ee83..9554530b 100644 --- a/docs/basics/README.md +++ b/docs/basics/README.md @@ -11,8 +11,7 @@ This repository contains reference documentation on the basic concepts of Etherm 1. [Accounts](./accounts.md) 2. [Gas and Fees](./gas.md) 3. [Lifecycle of a transaction](./transactions.md) -4. [Photon](./photon.md) +4. [Tokens](./tokens.md) 5. [JSON-RPC Server](./json_rpc.md) -6. [Hard Spoon](./hard_spoon.md) After reading the basics, head on to the [Core Reference](../core/README.md) for more advanced material. diff --git a/docs/basics/accounts.md b/docs/basics/accounts.md index 01c0edbb..fed6de26 100644 --- a/docs/basics/accounts.md +++ b/docs/basics/accounts.md @@ -17,7 +17,7 @@ Ethermint defines its own custom `Account` type that uses Ethereum's ECDSA secp2 satisfies the [EIP84](https://github.com/ethereum/EIPs/issues/84) for full [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) paths. The root HD path for Ethermint-based accounts is `m/44'/60'/0'/0`. -+++ https://github.com/tharsis/ethermint/blob/v0.1.0/types/account.go#L31-L36 ++++ https://github.com/tharsis/ethermint/blob/main/types/account.pb.go#L28-L33 ## Addresses and Public Keys @@ -49,7 +49,7 @@ You can query an account address using the Cosmos CLI or REST clients: ```bash # NOTE: the --output (-o) flag will define the output format in JSON or YAML (text) -ethermintcli q auth account $(ethermintcli keys show -a) -o text +ethermintd q auth account $(ethermintd keys show -a) -o text | address: eth1f8rqrfwut7ngkxwth0gt99h0lxnxsp09ngvzwl eth_address: 0x49c601A5DC5FA68b19CBbbd0b296eFF9a66805e5 @@ -70,7 +70,7 @@ curl -X GET "/auth/accounts/eth1f8rqrfwut7ngkxwth0gt99h0lxnxsp09ngvzwl" ``` ::: tip -The Cosmos SDK Keyring output (i.e `ethermintcli keys`) only supports addresses and public keys in Bech32 format. +The Cosmos SDK Keyring output (i.e `ethermintd keys`) only supports addresses and public keys in Bech32 format. ::: To retrieve the Ethereum hex address using Web3, use the JSON-RPC [`eth_accounts`](./json_rpc.md#eth-accounts) endpoint: diff --git a/docs/basics/gas.md b/docs/basics/gas.md index 0a1775e4..7bf5f07d 100644 --- a/docs/basics/gas.md +++ b/docs/basics/gas.md @@ -36,7 +36,7 @@ computational power to complete and as a way to deter bad-acting users from spam In the Cosmos SDK, gas is tracked in the main `GasMeter` and the `BlockGasMeter`: -- `GasMeter`: keeps track of the gas consumed during executions that lead to state transitions. It is reset on every transaction execution. +- `GasMeter`: keeps track of the gas consumed during executions that lead to state transitions. It is reset on every transaction execution. - `BlockGasMeter`: keeps track of the gas consumed in a block and enforces that the gas does not go over a predefined limit. This limit is defined in the Tendermint consensus parameters and can be changed via governance parameter change proposals. More information regarding gas in Cosmos SDK can be found [here](https://docs.cosmos.network/master/basics/gas-fees.html). @@ -44,14 +44,13 @@ More information regarding gas in Cosmos SDK can be found [here](https://docs.co ## Matching EVM Gas consumption Ethermint is an EVM-compatible chain that supports Ethereum Web3 tooling. For this reason, gas -consumption must be equitable in order to accurately calculate the state transition hashes and exact -the behaviour that would be seen on the main Ethereum network (main net). +consumption must be equitable with other EVMs, most importantly Ethereum. -In Cosmos, there are types of operations that are not triggered by transactions that can also result in state transitions. Concrete examples are the `BeginBlock` and `EndBlock` operations and the `AnteHandler` checks, which might also read and write to the store before running the state transition from a transaction. +The main difference between EVM and Cosmos state transitions, is that the EVM uses a [gas table](https://github.com/ethereum/go-ethereum/blob/master/params/protocol_params.go) for each OPCODE, whereas Cosmos uses a `GasConfig` that charges gas for each CRUD operation by setting a flat and per-byte cost for accessing the database. -### `BeginBlock` and `EndBlock` ++++ https://github.com/cosmos/cosmos-sdk/blob/3fd376bd5659f076a4dc79b644573299fd1ec1bf/store/types/gas.go#L187-L196 -These operations are defined by the Tendermint Core's Application Blockchain Interface (ABCI) and are defined by each Cosmos SDK module. As their name suggest, they are executed at the beginning and at the end of each block processing respectively (i.e pre and post transaction execution). Since these operations are not reflected on Ethereum, to match the the gas consumption we reset the main `GasMeter` to 0 on Ethermint's EVM module. +In order to match the the gas consumed by the EVM, the gas consumption logic from the SDK is ignored, and instead the gas consumed is calculated by subtracting the state transition leftover gas from the gas limit defined on the message. ### `AnteHandler` @@ -59,36 +58,28 @@ The Cosmos SDK [`AnteHandler`](https://docs.cosmos.network/master/basics/gas-fee performs basic checks prior to transaction execution. These checks are usually signature verification, transaction field validation, transaction fees, etc. -Because the gas calculated in Ethermint is done by the `IntrinsicGas` method from go-ethereum, a -special `AnteHandler` that is customized for EVM transaction fee verification is required. This -allows Ethermint to generate the expected gas costs for operations done in the network and scale the -gas costs as it would in the Ethereum network. +Regarding gas consumption and fees, the `AnteHandler` checks that the user has enough balance to +cover for the tx cost (amount plus fees) as well as checking that the gas limit defined in the +message is greater or equal than the computed intrinsic gas for the message. ## Gas Refunds -In Ethereum, gas can be specified prior to execution and the remaining gas will be refunded back to -the user if any gas is left over - should fail with out of gas if not enough gas was provided. In -Ethermint, the concept of gas refunds does not exist and the fees paid is not refunded in part back -to the user. The fees exacted on a transaction will be collected by the validator and no refunds are -issued. Thus, it is extremely important to use the correct gas. - -To prevent overspending on fees, providing the `--gas-adjustment` flag for a cosmos transactions -will determine the fees automatically. Also the `eth_estimateGas` rpc call can be used to manually -get the correct gas costs for a transaction. +In The EVM, gas can be specified prior to execution and the remaining gas will be refunded back to +the user if any gas is left over. The same logic applies to Ethermint, where the gas refunded will be capped to a fraction of the used gas depending on the fork/version being used. ## 0 Fee Transactions In Cosmos, a minimum gas price is not enforced by the `AnteHandler` as the `min-gas-prices` is checked against the local node/validator. In other words, the minimum fees accepted are determined -by the validators of the network, and each validator can specify a different value for their fees. +by the validators of the network, and each validator can specify a different minimum value for their fees. This potentially allows end users to submit 0 fee transactions if there is at least one single validator that is willing to include transactions with `0` gas price in their blocks proposed. For this same reason, in Ethermint it is possible to send transactions with `0` fees for transaction types other than the ones defined by the `evm` module. EVM module transactions cannot have `0` fees -as gas is required inherently by Ethereum. This check is done by the evm transactions -`ValidateBasic` function as well as on the custom `AnteHandler` defined by Ethermint. +as gas is required inherently by the EVM. This check is done by the EVM transactions stateless validation +(i.e `ValidateBasic`) function as well as on the custom `AnteHandler` defined by Ethermint. ## Next {hide} -Learn about the [Photon](./photon.md) token {hide} +Learn about the different types of [tokens](./tokens.md) available {hide} diff --git a/docs/basics/hard_spoon.md b/docs/basics/hard_spoon.md deleted file mode 100644 index 376eb1fd..00000000 --- a/docs/basics/hard_spoon.md +++ /dev/null @@ -1,17 +0,0 @@ - - -# Hard Spoon - -Learn about Ethermint's Hard Spoon functionality. {synopsis} - -## Hard Spoon on Ethermint - -A [hard spoon](https://blog.cosmos.network/introducing-the-hard-spoon-4a9288d3f0df) is the migration of the snapshot of a target blockchain's state into a new chain. The state of a network can be imported (or "scooped") onto a separate chain to accurately replicate the account balances and other information from the state. - -Ethermint's Hard Spoon tool (currently under specification) is targeted to import the state of the Ethereum mainnet to replicate the state for the given accounts. This will allow anyone on the Ethereum network to import their contracts into Ethermint. - -## Next {hide} - -Learn about the [encoding](./../core/encoding.md) formats used on Ethermint {hide} diff --git a/docs/basics/photon.md b/docs/basics/photon.md deleted file mode 100644 index 0ecbe5d1..00000000 --- a/docs/basics/photon.md +++ /dev/null @@ -1,33 +0,0 @@ - - -# Photon - -Learn about the Photon, Ethermint's staking token. {synopsis} - -## Introduction - -::: tip -The photon's initial distribution and supply is still TBD and will be announced in the future. -::: - -The photon is the staking token used in Ethermint. - -## Base Denomination - -Ethermint uses [Atto](https://en.wikipedia.org/wiki/Atto-) Photon as the base denomination to maintain parity with Ethereum. - -``` -1 photon = 1×10⁻¹⁸ aphoton -``` - -This matches Ethereum denomination of: - -``` -1 ETH = 1x10⁻¹⁸ wei -``` - -## Next {hide} - -Learn about the supported [JSON-RPC](./json_rpc.md) methods on Ethermint {hide} diff --git a/docs/basics/tokens.md b/docs/basics/tokens.md new file mode 100644 index 00000000..ffd0e36a --- /dev/null +++ b/docs/basics/tokens.md @@ -0,0 +1,40 @@ + + +# Tokens + +Learn about the the different types of tokens available in Ethermint. {synopsis} + +## Introduction + +Ethermint is a Cosmos SDK-based chain with full EVM support. Because of this architecture, tokens and assets in the network may come from different independent sources: the `bank` module and the `evm` module. + +## Cosmos Coins + +Accounts can own SDK coins in their balance, which are used for operations with other Cosmos modules and transactions. Examples of these are using the coins for staking, IBC transfers, governance deposits and EVM + +### Photon + +The denomination used for staking, governance and gas consumption on the EVM is the Photon. The Photon provides the utility of: securing the Proof-of-Stake chain, token used for governance proposals, fee distribution and as a mean of gas for running smart contracts on the EVM. + +Ethermint uses [Atto](https://en.wikipedia.org/wiki/Atto-) Photon as the base denomination to maintain parity with Ethereum. + +``` +1 photon = 1×10⁻¹⁸ aphoton +``` + +This matches Ethereum denomination of: + +``` +1 ETH = 1x10⁻¹⁸ wei +``` + +### EVM Tokens + +Ethermint is compatible with ERC20 tokens and other non-fungible token standards (EIP721, EIP1155) +that are natively supported by the EVM. One important remark is that these tokens don't interact with the Cosmos modules and other Cosmos SDK coins. + +## Next {hide} + +Learn about the supported [JSON-RPC](./json_rpc.md) methods on Ethermint {hide} diff --git a/docs/basics/transactions.md b/docs/basics/transactions.md index 7af04cfc..3c5439db 100644 --- a/docs/basics/transactions.md +++ b/docs/basics/transactions.md @@ -7,12 +7,11 @@ order: 2 ## Routing Ethermint needs to parse and handle transactions routed for both the EVM and for the Cosmos hub. We -attempt to achieve this by mimicking [Geth's](https://github.com/ethereum/go-ethereum) `Transaction` +attempt to achieve this by mimicking [geth's](https://github.com/ethereum/go-ethereum) `Transaction` structure and treat it as a unique Cosmos SDK message type. An Ethereum transaction is a single -[`sdk.Msg`](https://godoc.org/github.com/cosmos/cosmos-sdk/types#Msg) contained in an -[`auth.StdTx`](https://godoc.org/github.com/cosmos/cosmos-sdk/x/auth#StdTx). All relevant Ethereum +[`sdk.Msg`](https://godoc.org/github.com/cosmos/cosmos-sdk/types#Msg). All relevant Ethereum transaction information is contained in this message. This includes the signature, gas, payload, -etc. +amount, etc. Being that Ethermint implements the Tendermint ABCI application interface, as transactions are consumed, they are passed through a series of handlers. Once such handler, the `AnteHandler`, is @@ -20,25 +19,18 @@ responsible for performing preliminary message execution business logic such as signature verification, etc. This is particular to Cosmos SDK routed transactions. Ethereum routed transactions will bypass this as the EVM handles the same business logic. -Ethereum routed transactions coming from a Web3 source are expected to be [RLP](./../core/encoding.md#rlp) encoded, however all -internal interaction between Ethermint and Tendermint will utilize one of the supported encoding -formats: [Protobuf](./../core/encoding.md#protocol-buffers) and [Amino](./../core/encoding.md#amino). +All EVM transactions are [RLP](./../core/encoding.md#rlp) encoded using a custom tx encoder. -## Transaction formats +## Signers - +The signature processing and verification in Ethereum is performed by the `Signer` interface. The +protocol supports different signer types based on the chain configuration params and the block number. -- Cosmos transactions -- Ethereum transaction ++++ https://github.com/ethereum/go-ethereum/blob/v1.10.3/core/types/transaction_signing.go#L145-L166 -## Signatures - -Ethermint supports [EIP-155](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md) -signatures. A `Transaction` is expected to have a single signature for Ethereum routed transactions. -However, just as in Cosmos, Ethermint will support multiple signers for non-Ethereum transactions. -Signatures over the `Transaction` type are identical to Ethereum and the signatures will not be -duplicated in the embedding -[`auth.StdTx`](https://godoc.org/github.com/cosmos/cosmos-sdk/x/auth#StdTx). +Ethermint supports all Ethereum `Signer`s up to the latest go-ethereum version (London, Berlin, +EIP155, Homestead and Frontier). The chain will generate the latest `Signer` type depending on the +`ChainConfig`. ## Next {hide} diff --git a/docs/core/README.md b/docs/core/README.md index 48a74488..1ba49437 100644 --- a/docs/core/README.md +++ b/docs/core/README.md @@ -10,5 +10,6 @@ This repository contains reference documentation on the core concepts of Ethermi 1. [Encoding](./encoding.md) 2. [Pending State](./pending_state.md) +3. [Protobuf Docs](./proto-docs.md) After reading the core concepts, head on to the [guides](../guides/README.md) to learn how to use Ethereum tooling with Ethermint. diff --git a/docs/core/encoding.md b/docs/core/encoding.md index 1c2c03f5..bf1aaa69 100644 --- a/docs/core/encoding.md +++ b/docs/core/encoding.md @@ -17,14 +17,14 @@ Learn about the encoding formats used on Ethermint. {synopsis} The Cosmos [Stargate](https://stargate.cosmos.network/) release introduces [protobuf](https://developers.google.com/protocol-buffers) as the main encoding format for both -client and state serialization. All the EVM module structs that are used for state and clients +client and state serialization. All the EVM module types that are used for state and clients (transaction messages, genesis, query services, etc) will be implemented as protocol buffer messages. ### Amino The Cosmos SDK also supports the legacy Amino encoding format for backwards compatibility with -previous versions, specially for client encoding. Ethermint will not support Amino in the EVM module -once the migration to SDK `v0.40` is finalized. +previous versions, specially for client encoding and signing with Ledger devices. Ethermint does not +support Amino in the EVM module, but it is supported for all other Cosmos SDK modules that enable it. ### RLP @@ -33,9 +33,36 @@ allows for quick reconstruction of encoded data. Ethermint uses RLP to encode/de messages for JSON-RPC handling to conform messages to the proper Ethereum format. This allows messages to be encoded and decoded in the exact format as Ethereum's. -Each message type defined on the EVM module define the `EncodeRLP` and `DecodeRLP` methods which -implement the `rlp.Encoder` and `rlp.Decoder` interfaces respectively. The RLP encode method is used -to sign bytes and transactions in `RLPSignBytes` and `Sign`. +The `x/evm` transactions (`MsgEthereumTx`) encoding is performed by casting the message to a go-ethereum's `Transaction` and then marshaling the transaction data using RLP: + +```go +// TxEncoder overwrites sdk.TxEncoder to support MsgEthereumTx +func (g txConfig) TxEncoder() sdk.TxEncoder { + return func(tx sdk.Tx) ([]byte, error) { + msg, ok := tx.(*evmtypes.MsgEthereumTx) + if ok { + return msg.AsTransaction().MarshalBinary() + } + return g.TxConfig.TxEncoder()(tx) + } +} + +// TxDecoder overwrites sdk.TxDecoder to support MsgEthereumTx +func (g txConfig) TxDecoder() sdk.TxDecoder { + return func(txBytes []byte) (sdk.Tx, error) { + tx := ðtypes.Transaction{} + + err := tx.UnmarshalBinary(txBytes) + if err == nil { + msg := &evmtypes.MsgEthereumTx{} + msg.FromEthereumTx(tx) + return msg, nil + } + + return g.TxConfig.TxDecoder()(txBytes) + } +} +``` ## Next {hide} diff --git a/docs/guides/cloud_testnet.md b/docs/guides/cloud_testnet.md index 67cc5d39..739cc388 100644 --- a/docs/guides/cloud_testnet.md +++ b/docs/guides/cloud_testnet.md @@ -60,11 +60,10 @@ Clone and build Ethermint in the droplet using `git`: go install https://github.com/tharsis/ethermint.git ``` -Check that the binaries have been successfuly installed: +Check that the binaries have been successfully installed: ```bash ethermintd -h -ethermintcli -h ``` ### Copy the Genesis File @@ -85,4 +84,4 @@ Once the genesis file is copied over run `ethermind start` inside the node dropl ## Next {hide} -Follow [Deploy node to public testnet](./deploy_node_on_public_testnet.md) \ No newline at end of file +Follow [Deploy node to public testnet](./deploy_node_on_public_testnet.md) diff --git a/docs/guides/join_network.md b/docs/guides/join_network.md index 794a60c9..6e82b3d5 100644 --- a/docs/guides/join_network.md +++ b/docs/guides/join_network.md @@ -2,25 +2,22 @@ order: 5 --> -# JoiningTestnet +# Joining a Testnet -This document outlines the steps to join the public testnet +This document outlines the steps to join an existing testnet ## Steps -1. Install the Ethermint binaries (ethermintd & ethermint cli) +1. Install the Ethermint binary ethermintd ```bash - git clone https://github.com/tharsis/ethermint - cd ethermint - git checkout v0.4.1 - make install + go install https://github.com/tharsis/ethermint ``` 2. Create an Ethermint account ```bash - ethermintcli keys add + ethermintd keys add ``` 3. Copy genesis file @@ -42,40 +39,3 @@ This document outlines the steps to join the public testnet ethermintd start --pruning=nothing --rpc.unsafe --log_level "main:info,state:info,mempool:info" --trace ``` - - (we recommend running the command in the background for convenience) - -6. Start the RPC server - - ```bash - ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key $KEY --chain-id etherminttestnet-777 --trace --rpc-api "web3,eth,net" - ``` - - where `$KEY` is the key name that was used in step 2. - (we recommend running the command in the background for convenience) - -7. Request funds from the faucet - - You will need to know the Ethereum hex address, and it can be found with the following command: - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545 - ``` - - Using the output of the above command, you will then send the command with your valid Ethereum address - - ```bash - curl --header "Content-Type: application/json" --request POST --data '{"address":"0xYourEthereumHexAddress"}' 3.95.21.91:3000 - ``` - -## Public Testnet Node RPC Endpoints - -- **Node0**: `54.210.246.165:8545` -- **Node1**: `3.86.104.251:8545` -- **Node2**: `18.204.206.179:8545` - -example: - -```bash -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' -H "Content-Type: application/json" 54.210.246.165:8545 -``` diff --git a/docs/guides/metamask.md b/docs/guides/metamask.md index 6ef0ab18..f7c7a0c9 100644 --- a/docs/guides/metamask.md +++ b/docs/guides/metamask.md @@ -21,7 +21,7 @@ You can also start a node from scratch by running `./init.sh` from the Ethermint In another tab start the REST server. Here replace `mykey` with the name of the key that you want to use and set the `chain-id` the chain identifier of your application. ```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key mykey --chain-id 1 +ethermintd rest-server --laddr "tcp://localhost:8545" --unlock-key mykey --chain-id 1 ``` ## Adding a custom Network for Ethermint @@ -44,7 +44,7 @@ Now you can export your private key from the terminal using the following comman to replace `mykey` with the name of the key that you want to export: ```bash -ethermintcli keys unsafe-export-eth-key mykey +ethermintd keys unsafe-export-eth-key mykey ``` Go back to the browser and select the `Private Key` option. Then paste the private key exported from diff --git a/docs/guides/remix.md b/docs/guides/remix.md index 5377d65e..52e7db69 100644 --- a/docs/guides/remix.md +++ b/docs/guides/remix.md @@ -20,7 +20,7 @@ First, follow the steps in the [Metamask guide](./metamask.md) to import your Et Once that is complete, go to [Remix](http://remix.ethereum.org/). There are some contracts in the File Explorer. Select any of these contracts. In this example, we use `Counter.sol` from the [Truffle](./truffle.md) guide. On the left-most bar, select the Solidity Compiler and compile the contract. -Next, select the `Deploy and Run` option. Select `injected web3` as the environment. This will open a metamask popup for you to confirm connecting your Metamask to Remix. Hit confirm. +Next, select the `Deploy and Run` option. Select `injected web3` as the environment. This will open a metamask popup for you to confirm connecting your Metamask to Remix. Hit confirm. You should see your account show up in the left-hand panel. diff --git a/docs/guides/truffle.md b/docs/guides/truffle.md index 9c087809..4713c89c 100644 --- a/docs/guides/truffle.md +++ b/docs/guides/truffle.md @@ -103,7 +103,7 @@ Open `truffle-config.js` and uncomment the `development` section in `networks`: This will allow your contract to connect to your Ethermint local node. -## Start Node and REST server +## Start Node Start your local node using the following command on the Terminal @@ -116,12 +116,6 @@ init.sh For further information on how to run a node, please refer to [this](./../quickstart/run_node.md) quickstart document. ::: -In another Terminal wintdow/tab, start the [REST and JSON-RPC server](./../quickstart/clients.md#rest-and-tendermint-rpc.md): - -```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key mykey--chain-id 8 --trace -``` - ## Deploy contract Back in the Truffle terminal, migrate the contract using @@ -130,7 +124,7 @@ Back in the Truffle terminal, migrate the contract using truffle migrate --network development ``` -You should see incoming deployment logs in the Ethermint daemon Terminal tab for each transaction (one to deploy `Migrations.sol` and the oether to deploy `Counter.sol`). +You should see incoming deployment logs in the Ethermint daemon Terminal tab for each transaction (one to deploy `Migrations.sol` and the other to deploy `Counter.sol`). ```bash I[2020-07-15|17:35:59.934] Added good transaction module=mempool tx=22245B935689918D332F58E82690F02073F0453D54D5944B6D64AAF1F21974E2 res="&{CheckTx:log:\"[]\" gas_wanted:6721975 }" height=3 total=1 diff --git a/docs/intro/architecture.md b/docs/intro/architecture.md index 37798cfb..79aaea87 100644 --- a/docs/intro/architecture.md +++ b/docs/intro/architecture.md @@ -6,17 +6,16 @@ order: 2 Learn how Ethermint's architecture leverages the Cosmos SDK Proof-of-Stake functionality, EVM compatibility and fast-finality from Tendermint Core's BFT consensus. {synopsis} -## Cosmos-SDK +## Cosmos SDK - +Ethermint enables the full composability and modularity of the [Cosmos SDK](https://docs.cosmos.network/) ## Tendermint Core & the Application Blockchain Interface (ABCI) Tendermint consists of two chief technical components: a blockchain consensus engine and a generic application interface. The consensus engine, called -Tendermint Core, ensures that the same transactions are recorded on every machine -in the same order. The application interface, called the Application Blockchain -Interface (ABCI), enables the transactions to be processed in any programming +[Tendermint Core](https://docs.tendermint.com/), ensures that the same transactions are recorded on every machine +in the same order. The application interface, called the [Application Blockchain Interface (ABCI)](https://docs.tendermint.com/master/spec/abci/), enables the transactions to be processed in any programming language. Tendermint has evolved to be a general purpose blockchain consensus engine that @@ -31,7 +30,12 @@ simple API (ie. the ABCI) between the application process and consensus process. ## EVM module - +Ethermint enables EVM compatibility by implementing various components that together support all the EVM state transitions while ensuring the same developer experience as Ethereum: + +- Ethereum transaction format as a Cosmos SDK `Tx` and `Msg` interface +- Ethereum's `secp256k1` curve for the Cosmos Keyring +- `StateDB` interface for state updates and queries +- JSON-RPC client for interacting with the EVM ## Next {hide} diff --git a/docs/intro/overview.md b/docs/intro/overview.md index 8209decd..64cb16ac 100644 --- a/docs/intro/overview.md +++ b/docs/intro/overview.md @@ -9,9 +9,7 @@ Learn about Ethermint and its primary features. {synopsis} ## What is Ethermint Ethermint is a scalable, high-throughput Proof-of-Stake blockchain that is fully compatible and -interoperable with Ethereum. It's built using the [Cosmos -SDK](https://github.com/cosmos/cosmos-sdk/) which runs on top of [Tendermint -Core](https://github.com/tendermint/tendermint) consensus engine. +interoperable with Ethereum. It's built using the [Cosmos SDK](https://github.com/cosmos/cosmos-sdk/) which runs on top of [Tendermint Core](https://github.com/tendermint/tendermint) consensus engine. Ethermint allows for running vanilla Ethereum as a [Cosmos](https://cosmos.network/) application-specific blockchain. This allows developers to have all the desired features of @@ -23,11 +21,10 @@ Ecosystem through the Inter Blockchain Communication Protocol (IBC). Here’s a glance at some of the key features of Ethermint: -* Web3 compatibility +* Web3 and EVM compatibility * High throughput via [Tendermint Core](https://github.com/tendermint/tendermint) * Horizontal scalability via [IBC](https://cosmos.network/ibc) * Fast transaction finality -* [Hard Spoon](./../basics/hard_spoon.md) Ethermint enables these key features by: diff --git a/docs/intro/use_cases.md b/docs/intro/use_cases.md index 3ec90368..bc67a797 100644 --- a/docs/intro/use_cases.md +++ b/docs/intro/use_cases.md @@ -13,13 +13,11 @@ Ethermint EVM and get the benefits of a fast-finality Proof-of-Stake (PoS) chain also benefit from highly-reliable clients from testnets can be used to test and deploy their contracts. -Ethermint will also offer built-in interoperability functionalities with other Cosmos and BFT chains by using [IBC](https://cosmos.network/ibc). Developers can also benefit from using a bridge network (like -[Chainbridge](https://github.com/ChainSafe/ChainBridge), or a [Peg -Zone](https://github.com/cosmos/peggy)) to enable interoperability between mainnet Ethereum and Ethermint. +Ethermint will also offer built-in interoperability functionalities with other Cosmos and BFT chains by using [IBC](https://cosmos.network/ibc). Developers can also benefit from using a bridge network to enable interoperability between mainnet Ethereum and Ethermint. ## EVM module dependency -The EVM module ([x/evm](https://github.com/tharsis/ethermint/tree/main/x/evm)) packaged inside +The EVM module (aka [x/evm](https://github.com/tharsis/ethermint/tree/main/x/evm)) packaged inside Ethermint can be used separately as its own standalone module. This can be added as a dependency to any Cosmos chain, which will allow for smart contract support. @@ -45,6 +43,12 @@ network. Utilizing the Ethermint client will defer the chain maintenance to the and allow for the participation in a more mature blockchain. The Ethermint client will also offer (in the near future) IBC compatibility which allows for interoperability between different network. +| | Ethermint Chain | x/evm dependency | +|-----------------------------------------|-----------------|------------------| +| Maintenance | Lower | Higher | +| Sovereignty (validator, config, params) | Lower | Higher | +| Storage requirements | Lower | Higher | + ## Next {hide} Read the available Ethermint [resources](./resources.md) {hide} diff --git a/docs/quickstart/README.md b/docs/quickstart/README.md index 7078c506..f10e7e54 100644 --- a/docs/quickstart/README.md +++ b/docs/quickstart/README.md @@ -6,7 +6,7 @@ parent: # Quick Start -This repository contains reference documentation on how to install and run an Etheremint full node. +This repository contains reference documentation on how to install and run an Ethermint full node. 1. [Installation](./installation.md) 2. [Run a Node](./run_node.md) @@ -20,4 +20,4 @@ After going throught the Quick Start contents, head over to the [basics](./../ba ## Next {hide} -Learn how to [install](./../quickstart/intallation.md) Ethermint {hide} +Learn how to [install](./../quickstart/installation.md) Ethermint {hide} diff --git a/docs/quickstart/clients.md b/docs/quickstart/clients.md index 44eafbdf..d8a83dd2 100644 --- a/docs/quickstart/clients.md +++ b/docs/quickstart/clients.md @@ -9,42 +9,16 @@ Learn how to connect a client to a running node. {synopsis} ## Pre-requisite Readings - [Run a Node](./run_node.md) {prereq} - -## Client Integrations - -### Command Line Interface - -Ethermint is integrated with a CLI client that can be used to send transactions and query the state from each module. - -```bash -# available query commands -ethermintcli query -h - -# available transaction commands -ethermintcli tx -h -``` +- [Interacting with the Node](https://docs.cosmos.network/v0.43/run-node/interact-node.html) {prereq} ### Client Servers -The Ethermint client supports both [REST endpoints](https://cosmos.network/rpc) from the SDK and Ethereum's [JSON-RPC](https://eth.wiki/json-rpc/API). +The Ethermint client supports both [gRPC endpoints](https://cosmos.network/rpc) from the SDK and Ethereum's [JSON-RPC](https://eth.wiki/json-rpc/API). -#### REST and Tendermint RPC +#### Cosmos gRPC and Tendermint RPC -Ethermint exposes REST endpoints for all the integrated Cosmos-SDK modules. This makes it easier for wallets and block explorers to interact with the proof-of-stake logic. - -To run the REST Server, you need to run the Ethermint daemon (`ethermintd`) and then execute (in another -process): - -```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key $KEY --chain-id $CHAINID --trace -``` - -You should see the logs from the REST and the RPC server. - -```bash -I[2020-07-17|16:54:35.037] Starting application REST service (chain-id: "8")... module=rest-server -I[2020-07-17|16:54:35.037] Starting RPC HTTP server on 127.0.0.1:8545 module=rest-server -``` +Ethermint exposes gRPC endpoints (and REST) for all the integrated Cosmos-SDK modules. This makes it easier for +wallets and block explorers to interact with the proof-of-stake logic and native Cosmos transactions and queries: #### Ethereum JSON-RPC server @@ -52,12 +26,10 @@ Ethermint also supports most of the standard web3 [JSON-RPC APIs](https://eth.wiki/json-rpc/API) to connect with existing web3 tooling. ::: tip -Some of the JSON-RPC API [namespaces](https://geth.ethereum.org/docs/rpc/server) are currently under development. +See the list of supported JSON-RPC API [namespaces](https://geth.ethereum.org/docs/rpc/server) and endpoints. ::: -To connect to the JSON-PRC server, use the `rest-server` command as shown on the section above. Then, you can point any Ethereum development tooling to `http://localhost:8545` or whatever port you choose with the listen address flag (`--laddr`). - -For further information JSON-RPC calls, please refer to [this](../basics/json_rpc.md) document. +To connect to the JSON-PRC server, use the `rest-server` command as shown on the section above. Then, you can point any Ethereum development tooling to `http://localhost:8545` or whatever port you choose with the listen address flag (`--evm-rpc.address`). ## Next {hide} diff --git a/docs/quickstart/events.md b/docs/quickstart/events.md index fef3f29a..ae276e66 100644 --- a/docs/quickstart/events.md +++ b/docs/quickstart/events.md @@ -86,17 +86,17 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":[ ### Tendermint Websocket -To start a connection with the Tendermint websocket you need to define the address with the `--node` -flag when initializing the REST server (default `tcp://localhost:26657`): +To start a connection with the Tendermint websocket you need to define the address with the `--rpc.laddr` +flag when starting the node (default `tcp://127.0.0.1:26657`): ```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --node "tcp://localhost:8080" --unlock-key --chain-id +ethermintd start --rpc.laddr="tcp://127.0.0.1:26657" ``` Then, start a websocket subscription with [ws](https://github.com/hashrocket/ws) ```bash -# connect to tendermint websocet at port 8080 as defined above +# connect to tendermint websocket at port 8080 as defined above ws ws://localhost:8080/websocket # subscribe to new Tendermint block headers @@ -111,11 +111,11 @@ compatibility for websockets of the [Ethereum's PubSubAPI](https://geth.ethereum.org/docs/rpc/pubsub), Ethermint needs to cast the Tendermint responses retreived into the Ethereum types. -You can start a connection with the Ethereum websocket using the `--wsport` flag when initializing -the REST server (default `8546`): +You can start a connection with the Ethereum websocket using the `--evm-rpc.ws-address` flag when starting +the node (default `"0.0.0.0:8546"`): ```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --wsport 8546 --unlock-key --chain-id +ethermintd start --evm-rpc.address"0.0.0.0:8545" --evm-rpc.ws-address="0.0.0.0:8546" --evm.rpc.api="eth,web3,net,txpool,debug" --evm-rpc.enable ``` Then, start a websocket subscription with [ws](https://github.com/hashrocket/ws) diff --git a/docs/quickstart/installation.md b/docs/quickstart/installation.md index ca23a987..a9d15a00 100644 --- a/docs/quickstart/installation.md +++ b/docs/quickstart/installation.md @@ -14,11 +14,10 @@ cd ethermint make install ``` -Check that the binaries have been successfuly installed: +Check that the binaries have been successfully installed: ```bash ethermintd -h -ethermintcli -h ``` ## Docker @@ -30,11 +29,10 @@ make docker-build ``` This will install the binaries on the `./build` directory. Now, check that the binaries have been -successfuly installed: +successfully installed: ```bash ethermintd -h -ethermintcli -h ``` ## Releases diff --git a/docs/quickstart/run_node.md b/docs/quickstart/run_node.md index ca928498..aa687511 100644 --- a/docs/quickstart/run_node.md +++ b/docs/quickstart/run_node.md @@ -23,12 +23,6 @@ to keep your binaries and configuration files. ./init.sh ``` -In another terminal window or tab, run the Ethereum JSON-RPC server as well as the SDK REST server: - -```bash -ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key mykey --chain-id 8 -``` - ## Manual deployment The instructions for setting up a brand new full node from scratch are the the same as running a @@ -39,15 +33,15 @@ The instructions for setting up a brand new full node from scratch are the the s To start your node, just type: ```bash -ethermintd start +ethermintd start --evm-rpc.enable=true --evm-rpc.api="eth,web3,net,txpool,debug" ``` ## Key Management -To run a node with the same key every time: replace `ethermintcli keys add $KEY` in `./init.sh` with: +To run a node with the same key every time: replace `ethermintd keys add $KEY` in `./init.sh` with: ```bash -echo "your mnemonic here" | ethermintcli keys add $KEY --recover +echo "your mnemonic here" | ethermintd keys add $KEY --recover ``` ::: tip @@ -57,19 +51,19 @@ Ethermint currently only supports 24 word mnemonics. You can generate a new key/mnemonic with: ```bash -ethermintcli keys add $KEY +ethermintd keys add $KEY ``` To export your ethermint key as an ethereum private key (for use with Metamask for example): ```bash -ethermintcli keys unsafe-export-eth-key $KEY +ethermintd keys unsafe-export-eth-key $KEY ``` For more about the available key commands, use the `--help` flag ```bash -ethermintcli keys -h +ethermintd keys -h ``` ### Keyring backend options @@ -82,7 +76,7 @@ relevant command and the password prompt will occur through the command line. Th as a CLI config option with: ```bash -ethermintcli config keyring-backend file +ethermintd config keyring-backend file ``` ## Clearing data from chain @@ -110,10 +104,10 @@ Your node is now in a pristine state while keeping the original `priv_validator. ### Delete Data -Data for the Daemon and CLI binaries should be stored at `~/.ethermintd` and `~/.ethermintcli`, respectively by default. To **delete** the existing binaries and configuration, run: +Data for the Daemon and CLI binaries should be stored at `~/.ethermintd`, respectively by default. To **delete** the existing binaries and configuration, run: ```bash -rm -rf ~/.emint* +rm -rf ~/.ethermintd ``` To clear all data except key storage (if keyring backend chosen) and then you can rerun the full node installation commands from above to start the node again. diff --git a/docs/quickstart/testnet.md b/docs/quickstart/testnet.md index 45978682..630e8038 100644 --- a/docs/quickstart/testnet.md +++ b/docs/quickstart/testnet.md @@ -58,12 +58,12 @@ minimum-gas-prices = "" ```bash # Create a key to hold your account -ethermintcli keys add $KEY +ethermintd keys add $KEY # Add that key into the genesis.app_state.accounts array in the genesis file # NOTE: this command lets you set the number of coins. Make sure this account has some coins # with the genesis.app_state.staking.params.bond_denom denom, the default is staking -ethermintd add-genesis-account $(ethermintcli keys show validator -a) 1000000000stake,10000000000aphoton +ethermintd add-genesis-account $(ethermintd keys show validator -a) 1000000000stake,10000000000aphoton # Generate the transaction that creates your validator ethermintd gentx --name $KEY @@ -141,7 +141,7 @@ calling the `ethermintd testnet` command. This outputs a handful of files in the tree -L 3 build/ build/ -├── ethermintcli +├── ethermintd ├── ethermintd ├── gentxs │   ├── node0.json @@ -149,7 +149,7 @@ build/ │   ├── node2.json │   └── node3.json ├── node0 -│   ├── ethermintcli +│   ├── ethermintd │   │   ├── key_seed.json │   │   └── keyring-test-cosmos │   └── ethermintd @@ -157,7 +157,7 @@ build/ │   ├── data │   └── ethermintd.log ├── node1 -│   ├── ethermintcli +│   ├── ethermintd │   │   ├── key_seed.json │   │   └── keyring-test-cosmos │   └── ethermintd @@ -165,7 +165,7 @@ build/ │   ├── data │   └── ethermintd.log ├── node2 -│   ├── ethermintcli +│   ├── ethermintd │   │   ├── key_seed.json │   │   └── keyring-test-cosmos │   └── ethermintd @@ -173,7 +173,7 @@ build/ │   ├── data │   └── ethermintd.log └── node3 - ├── ethermintcli + ├── ethermintd │   ├── key_seed.json │   └── keyring-test-cosmos └── ethermintd @@ -193,7 +193,7 @@ In order to see the logs of a particular node you can use the following command: docker exec ethermintdnode0 tail ethermintd.log # node 0: REST & RPC logs -docker exec ethermintdnode0 tail ethermintcli.log +docker exec ethermintdnode0 tail ethermintd.log ``` The logs for the daemon will look like: @@ -240,9 +240,9 @@ docker logs -f ethermintdnode0 To interact with the testnet via WebSockets or RPC/API, you will send your request to the corresponding ports: -| Eth JSON-RPC | Eth WS | -|--------------|--------| -| `8545` | `8546` | +| EVM JSON-RPC | Eth Websocket | +|--------------|---------------| +| `8545` | `8546` | You can send a curl command such as: @@ -258,18 +258,18 @@ Additional instructions on how to interact with the WebSocket can be found on th ### Keys & Accounts -To interact with `ethermintcli` and start querying state or creating txs, you use the -`ethermintcli` directory of any given node as your `home`, for example: +To interact with `ethermintd` and start querying state or creating txs, you use the +`ethermintd` directory of any given node as your `home`, for example: ```bash -ethermintcli keys list --home ./build/node0/ethermintcli +ethermintd keys list --home ./build/node0/ethermintd ``` Now that accounts exists, you may create new accounts and send those accounts funds! ::: tip -**Note**: Each node's seed is located at `./build/nodeN/ethermintcli/key_seed.json` and can be restored to the CLI using the `ethermintcli keys add --restore` command +**Note**: Each node's seed is located at `./build/nodeN/ethermintd/key_seed.json` and can be restored to the CLI using the `ethermintd keys add --restore` command ::: ### Special Binaries diff --git a/docs/quickstart/validator-setup.md b/docs/quickstart/validator-setup.md index 5aef4fd3..fc41fe64 100644 --- a/docs/quickstart/validator-setup.md +++ b/docs/quickstart/validator-setup.md @@ -32,7 +32,7 @@ ethermintd tendermint show-validator To create your validator, just use the following command: ```bash -ethermintcli tx staking create-validator \ +ethermintd tx staking create-validator \ --amount=1000000aphoton \ --pubkey=$(ethermintd tendermint show-validator) \ --moniker= \ @@ -51,7 +51,7 @@ When specifying commission parameters, the `commission-max-change-rate` is used ::: ::: tip -`Min-self-delegation` is a stritly positive integer that represents the minimum amount of self-delegated voting power your validator must always have. A `min-self-delegation` of 1 means your validator will never have a self-delegation lower than `1000000aphoton` +`Min-self-delegation` is a strictly positive integer that represents the minimum amount of self-delegated voting power your validator must always have. A `min-self-delegation` of 1 means your validator will never have a self-delegation lower than `1000000aphoton` ::: You can confirm that you are in the validator set by using a third party explorer. @@ -69,7 +69,7 @@ A `gentx` does three things: If you want to participate in genesis as a validator, you need to justify that you have some stake at genesis, create one (or multiple) transactions to bond this stake to your validator address, and include this transaction in the genesis file. -Your `cosmosvalconspub`, as shown on the section above, can be used to create a validator transaction on genesis as well. +Your `ethvalconspub`, as shown on the section above, can be used to create a validator transaction on genesis as well. Next, craft your `ethermintd gentx` command: @@ -96,7 +96,7 @@ For more on `gentx`, use the help flag: `ethermintd gentx -h` Your validator is active if the following command returns anything: ```bash -ethermintcli query tendermint-validator-set | grep "$(ethermintd tendermint show-validator)" +ethermintd query tendermint-validator-set | grep "$(ethermintd tendermint show-validator)" ``` You should now see your validator in one of the block explorers. You are looking for the `bech32` diff --git a/docs/yarn.lock b/docs/yarn.lock index 28ced3f1..64a99e09 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2,109 +2,109 @@ # yarn lockfile v1 -"@algolia/cache-browser-local-storage@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.9.2.tgz#c618c8bc8330610649ae5860a18542f82fc58c57" - integrity sha512-R54LWoPgwvmBR7itDKdq/ZJKv5pbtu6cVHovPU9l1QrtvZM0XcSh2c2MY8beELo+uMuTDQ007sTM8dsQ4C7Www== +"@algolia/cache-browser-local-storage@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.2.tgz#9925c7c0ce94257564b8948b60fc427c4a98124c" + integrity sha512-B3NInwobEAim4J4Y0mgZermoi0DCXdTT/Q+4ehLamqUqxLw8To5zc9izjg7B8JaFSQsqflRdCeRmYEv2gYDY7g== dependencies: - "@algolia/cache-common" "4.9.2" + "@algolia/cache-common" "4.10.2" -"@algolia/cache-common@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.9.2.tgz#00eddf800d42c03b339465fdcdb7fbe49a3054aa" - integrity sha512-50EffDYcFi08CpSvYAgRUplqj3/xaAqP4S5wuHG7Gr1ZLQpKBP7GxmPuFyjZgj7thOhsUS5DH8efVR/IpIrSBw== +"@algolia/cache-common@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.10.2.tgz#0113419518419895118d132bed4115345a865ce3" + integrity sha512-xcGbV0+6gLu2C7XoJdD+Pp6wWjROle6PNDsa6O21vS7fw1a03xb2bEnFdl1U31bs69P1z8IRy3h+8RVBouvhhw== -"@algolia/cache-in-memory@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.9.2.tgz#9181de93e300a58722ee6c29bc33261c411f9b03" - integrity sha512-RF4Z6XFOfS5G/PwtUddBoLEwTBy1HsimoXRpglnGftJH24alL9X2jCuCz9t12ND2o5eDDlbNVAqLfu8T0UQRQg== +"@algolia/cache-in-memory@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.10.2.tgz#2d34d4155425b385d19ff197a8943a4b5084c790" + integrity sha512-zPIcxHQEJXy+M35A+v9Y5u5BAQOKR2aFK0kYpAdW/OrgxYcrFHtVCxwIWB/ZhGbkDtzCW8/8tJeddcD5YsHX9Q== dependencies: - "@algolia/cache-common" "4.9.2" + "@algolia/cache-common" "4.10.2" -"@algolia/client-account@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.9.2.tgz#a9ac94f951b231760f1615e5ac9409d1f7c7b89a" - integrity sha512-E67xDSaHed38fIdVT/Jrnr/HzohVoRfNGhTAKJG4sTy6K5AkrqzM/7ZRJp56bU38ZG4frvdQfxC/oGCFkn6bEA== +"@algolia/client-account@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.10.2.tgz#c53d18d4f57ab5343c21e0ed795421964ba0cbb9" + integrity sha512-iuIU+xUtjgR9p4Hpujlr8mePDPSrVIk3peg+RAUhxniLBDaI+OhgHyhP6Lmh9flWk+JfRg91Rhk46xuxMLqwfA== dependencies: - "@algolia/client-common" "4.9.2" - "@algolia/client-search" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/client-common" "4.10.2" + "@algolia/client-search" "4.10.2" + "@algolia/transporter" "4.10.2" -"@algolia/client-analytics@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.9.2.tgz#d854defbfd5e1640d2b0abf4bb6d2dcd7afc09e1" - integrity sha512-zexfopj1zDgNfXHgl3e4S4ERlulKUTdnFgDvGBhsqyW/bDyqZ410HZhOuzVZE5SxJdy0qa0hCadmwVNgu1ND6A== +"@algolia/client-analytics@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.10.2.tgz#93c881cfb9e5df389725d821327fa801f1baa2c6" + integrity sha512-u47J65NHs0fMryDrMeuLMGjXDOKt/muF9WlfbMslT2Cvdd7PZwl9KYnT7xMhnmBB8TDiDMmEQkDykhnCOnwVNw== dependencies: - "@algolia/client-common" "4.9.2" - "@algolia/client-search" "4.9.2" - "@algolia/requester-common" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/client-common" "4.10.2" + "@algolia/client-search" "4.10.2" + "@algolia/requester-common" "4.10.2" + "@algolia/transporter" "4.10.2" -"@algolia/client-common@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.9.2.tgz#c75adccdc945ea21c484bd102354c0dd5166f795" - integrity sha512-++2h3FiHiRApAkD+Dxk+iW6wpvHjGZ5gSkDCYz4xVPsQdiGhZgTN34i+gjq6DeR3okax5HJ7hlfJw10aCuiB8g== +"@algolia/client-common@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.10.2.tgz#a715e8feb2a2b6ea38765f53e8ae6ffc4ed80aba" + integrity sha512-sfgZCv9ha9aHbe3ErAYb1blg2qx4XTLvQqP1jq8asU75rrH9XBTtSzQQO43GlArwhtwCHLgcWquN3WgPlLzkiQ== dependencies: - "@algolia/requester-common" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/requester-common" "4.10.2" + "@algolia/transporter" "4.10.2" -"@algolia/client-recommendation@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/client-recommendation/-/client-recommendation-4.9.2.tgz#b7de178e1d8146da5255afe3ccbd0ff69bd687d7" - integrity sha512-BbcC+7XiPoAwPferoPgskMUIvioTd7+XoNT4n3sQsoe8YqNJ3u/ngrAxKmpcrEf13BpFT7XBhPm2FQAhlZpvug== +"@algolia/client-personalization@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.10.2.tgz#89d761bcf60ce13b8565c2ae8ab644c3a3d114c8" + integrity sha512-2UhUNo/czfA/keOC3+vFyMnFGV/E1Zkm+ek9Fsk/9miS39UMhx2CmH5vKSIJ7jxLSin7zBaCwKt65phfYty1pg== dependencies: - "@algolia/client-common" "4.9.2" - "@algolia/requester-common" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/client-common" "4.10.2" + "@algolia/requester-common" "4.10.2" + "@algolia/transporter" "4.10.2" -"@algolia/client-search@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.9.2.tgz#2253ddacb75e768919ec3a6c969a409f2dbda2aa" - integrity sha512-z+wBEcMCFBzn+7s0lhk4miFR0fm5X4QXlutPVhSXACHD+uznRoRbmu31k7ZB6CgqqjT8E8Lsjif6rWX+wwtgyA== +"@algolia/client-search@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.10.2.tgz#ad281b04ec4e6eaff68fb5be330f0bdf965ce011" + integrity sha512-ZdOh6XS6Y9bcekfG4y0VhdoIYfsTounsgXX4Bt3X2RCcmY3uotgaq2EVY58E6q6nvfgBfPHW18+AZCHKTWHAAw== dependencies: - "@algolia/client-common" "4.9.2" - "@algolia/requester-common" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/client-common" "4.10.2" + "@algolia/requester-common" "4.10.2" + "@algolia/transporter" "4.10.2" -"@algolia/logger-common@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.9.2.tgz#8a5d7c060bf7d514bbf186fbc5bae16a59acb8f1" - integrity sha512-D9wxMCLRLZtz0BZ8yecDDGSDkiq6M2KImdckZ2TPcSqQPGsypInSvFSKVa4os//IkmE9NFVC2o1kFYedZmzhZg== +"@algolia/logger-common@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.10.2.tgz#f28e966a6b878af2917ed2e1518f46650a6fb8ad" + integrity sha512-UJaU6arzmW+FT5fCv5NIbxNMtEoGcf+UENmZxxu7k7UWPARR2XL4ljJ45Jv14Z5dlz32LXWtR1PRmNfkDMk22Q== -"@algolia/logger-console@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.9.2.tgz#da382309350e1c114e2a0c8fc92b3a10c408c189" - integrity sha512-HM5PQ1cvUbMFuAo493f1CpYNFteVHrUtM/sGOcS8zndML2ix72Qvyih7hEGGawHy2E2hYSNYcSHfL/gahTKiCg== +"@algolia/logger-console@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.10.2.tgz#9d3dcbb077242db92f0f0a1795ec95c3bc839599" + integrity sha512-JrCrZ7CGs/TsyNR2AWe9Vdd6rsuxfvfcpqbu+CY7LBUYEnV8GERkf7FnDNaKVNsFJqClILCGh3U8CzQ1G5L+kA== dependencies: - "@algolia/logger-common" "4.9.2" + "@algolia/logger-common" "4.10.2" -"@algolia/requester-browser-xhr@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.9.2.tgz#227e530c2c20a6a1db3ca68bf76ec43001d0decd" - integrity sha512-gOeI5ZmPt/rayRYf1Sgn3/Yp3MKuVEypibp1CyBpie/q0CHA08O4RoiY93qnG83dfy9tkfmYqKCdXlBednGVbg== +"@algolia/requester-browser-xhr@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.2.tgz#2286e2f10fff3651f719b8d7d3defc8c032fcce0" + integrity sha512-LveaAp7/oCBotv1aZ4VHz8fCcJA7v/28ayh+Ljlm+hYXsxgs6NAYKz7iBpxGN7q5MV8GM+MThRYNFoT0cHTMxQ== dependencies: - "@algolia/requester-common" "4.9.2" + "@algolia/requester-common" "4.10.2" -"@algolia/requester-common@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.9.2.tgz#f28edf021ce1f02c6fad7f205d86d7458ff0620a" - integrity sha512-B1cb69f5zbDgUQifx/ZDqFK9dpOSsg24Mq/5YlqkP3EyAVPVBooeDLUDSrgBLq2j1clUQ9H3yPwX8uRTzR/eYw== +"@algolia/requester-common@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.10.2.tgz#8b62f0848454ec5b07bd3599f5fb2b87ec7c4de8" + integrity sha512-3J2W0fAaURLGK0lEGeNb8eWJnQcsu+oIcfJTCIYkYT5T9w21M65kUUyD9QSf/K137qQts3tzGniUR3LxfovlXA== -"@algolia/requester-node-http@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.9.2.tgz#3ad600d653ff4c4342e4710303ef467269166c45" - integrity sha512-YBm4R4gUmlXFnPAxQAZEWOSq6xkWKN7mAJWvM8V+2W9a4qlJnxXj+fi7EJytAR8qc3vDXRWcmzYnsS246WhJ8g== +"@algolia/requester-node-http@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.10.2.tgz#edb691e34e18aacc15107193319e1a712e024649" + integrity sha512-IBqsalCGgn0CrOP1PKRB5rufEOvHlrSQUFEGXZ8mxmE/zU8CLX2LKqdHbEFeNDLFl+l+8HW5BGVDGD2rvG+hSg== dependencies: - "@algolia/requester-common" "4.9.2" + "@algolia/requester-common" "4.10.2" -"@algolia/transporter@4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.9.2.tgz#e3016b211c6fddf32d510cae8e383ba378ecceb0" - integrity sha512-YvQKRU76HR850X1DK1OgcrjvvCyp/8FaYc74LHOAAuc9awcNuJY4NZjxHMU/Mm8TT4UKKX9cjGTrP/WJpu5VxA== +"@algolia/transporter@4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.10.2.tgz#ae0fa7c99b9bf8efa5ac83843558be1074e7c045" + integrity sha512-I3QDRSookQtPSUEnxT2XCShhipCT4beJBpWhteNwMrWQF/SqTsveqSR6bX0G49lDh9MOmYrOlCegteuKuT/tEw== dependencies: - "@algolia/cache-common" "4.9.2" - "@algolia/logger-common" "4.9.2" - "@algolia/requester-common" "4.9.2" + "@algolia/cache-common" "4.10.2" + "@algolia/logger-common" "4.10.2" + "@algolia/requester-common" "4.10.2" "@babel/code-frame@^7.14.5": version "7.14.5" @@ -113,22 +113,22 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" - integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== "@babel/core@^7.11.0", "@babel/core@^7.8.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.5.tgz#d281f46a9905f07d1b3bf71ead54d9c7d89cb1e3" - integrity sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" + integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== dependencies: "@babel/code-frame" "^7.14.5" "@babel/generator" "^7.14.5" "@babel/helper-compilation-targets" "^7.14.5" "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.5" - "@babel/parser" "^7.14.5" + "@babel/helpers" "^7.14.6" + "@babel/parser" "^7.14.6" "@babel/template" "^7.14.5" "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" @@ -174,9 +174,9 @@ semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef" - integrity sha512-Uq9z2e7ZtcnDMirRqAGLRaLwJn+Lrh388v5ETrR3pALJnElVh2zqQmdbz4W2RUJYohAPh2mtyPUgyMHMzXMncQ== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" + integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" @@ -238,9 +238,9 @@ "@babel/types" "^7.14.5" "@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" - integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== dependencies: "@babel/types" "^7.14.5" @@ -337,10 +337,10 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.5.tgz#4870f8d9a6fdbbd65e5674a3558b4ff7fef0d9b2" - integrity sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q== +"@babel/helpers@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" + integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== dependencies: "@babel/template" "^7.14.5" "@babel/traverse" "^7.14.5" @@ -355,10 +355,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.14.5", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829" - integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg== +"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" + integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" @@ -369,10 +369,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" - integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== +"@babel/plugin-proposal-async-generator-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" + integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" @@ -452,12 +452,12 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" - integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== +"@babel/plugin-proposal-object-rest-spread@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.14.7" "@babel/helper-compilation-targets" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" @@ -668,10 +668,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" - integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -765,10 +765,10 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" - integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" + integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" @@ -834,10 +834,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.5.tgz#bd269fb4119754d2ce7f4cc39a96b4f71baae356" - integrity sha512-/3iqoQdiWergnShZYl0xACb4ADeYCJ7X/RgmwtXshn6cIvautRPAFzhd58frQlokLO6Jb4/3JXvmm6WNTPtiTw== +"@babel/plugin-transform-spread@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" @@ -879,16 +879,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@^7.11.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997" - integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" + integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.14.7" "@babel/helper-compilation-targets" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.7" "@babel/plugin-proposal-class-properties" "^7.14.5" "@babel/plugin-proposal-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import" "^7.14.5" @@ -897,7 +897,7 @@ "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" "@babel/plugin-proposal-private-methods" "^7.14.5" @@ -923,7 +923,7 @@ "@babel/plugin-transform-block-scoping" "^7.14.5" "@babel/plugin-transform-classes" "^7.14.5" "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" "@babel/plugin-transform-dotall-regex" "^7.14.5" "@babel/plugin-transform-duplicate-keys" "^7.14.5" "@babel/plugin-transform-exponentiation-operator" "^7.14.5" @@ -935,7 +935,7 @@ "@babel/plugin-transform-modules-commonjs" "^7.14.5" "@babel/plugin-transform-modules-systemjs" "^7.14.5" "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" "@babel/plugin-transform-new-target" "^7.14.5" "@babel/plugin-transform-object-super" "^7.14.5" "@babel/plugin-transform-parameters" "^7.14.5" @@ -943,7 +943,7 @@ "@babel/plugin-transform-regenerator" "^7.14.5" "@babel/plugin-transform-reserved-words" "^7.14.5" "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" "@babel/plugin-transform-sticky-regex" "^7.14.5" "@babel/plugin-transform-template-literals" "^7.14.5" "@babel/plugin-transform-typeof-symbol" "^7.14.5" @@ -954,7 +954,7 @@ babel-plugin-polyfill-corejs2 "^0.2.2" babel-plugin-polyfill-corejs3 "^0.2.2" babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.14.0" + core-js-compat "^3.15.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": @@ -969,9 +969,9 @@ esutils "^2.0.2" "@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.5.tgz#665450911c6031af38f81db530f387ec04cd9a98" - integrity sha512-121rumjddw9c3NCQ55KGkyE1h/nzWhU/owjhw0l4mQrkzz4x9SGS1X8gFLraHwX7td3Yo4QTL+qj0NcIzN87BA== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" @@ -985,16 +985,16 @@ "@babel/types" "^7.14.5" "@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" - integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg== + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" + integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== dependencies: "@babel/code-frame" "^7.14.5" "@babel/generator" "^7.14.5" "@babel/helper-function-name" "^7.14.5" "@babel/helper-hoist-variables" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.5" + "@babel/parser" "^7.14.7" "@babel/types" "^7.14.5" debug "^4.1.0" globals "^11.1.0" @@ -1025,31 +1025,6 @@ tiny-cookie "^2.3.1" vue "^2.6.10" -"@jsdevtools/ez-spawn@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@jsdevtools/ez-spawn/-/ez-spawn-3.0.4.tgz#5641eb26fee6d31ec29f6788eba849470c52c7ff" - integrity sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA== - dependencies: - call-me-maybe "^1.0.1" - cross-spawn "^7.0.3" - string-argv "^0.3.1" - type-detect "^4.0.8" - -"@jsdevtools/npm-publish@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/npm-publish/-/npm-publish-1.4.3.tgz#47074543fa6b97c4abcd8135c89d3706fb8d2040" - integrity sha512-EdmrDPCtVZIDeTmLhQFmuwiEXtRZfQh6KwM7uZ//Zpi4FAXPCKLgOxBggbYDpsmobpGOVlWDhhUE5HMhoYJgmQ== - dependencies: - "@jsdevtools/ez-spawn" "^3.0.4" - "@jsdevtools/ono" "^7.1.3" - command-line-args "^5.1.1" - semver "^7.3.4" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1094,9 +1069,9 @@ integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== "@types/node@*": - version "15.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" - integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== + version "15.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" + integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== "@types/q@^1.5.1": version "1.5.4" @@ -1226,14 +1201,15 @@ camelcase "^5.0.0" "@vue/component-compiler-utils@^3.1.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.1.tgz#c3e3cb85ea80cc157eeaffe128a25dfe77e2f326" - integrity sha512-Mci9WJYLRjyJEBkGHMPxZ1ihJ9l6gOy2Gr6hpYZUNpQoe5+nbpeb3w00aP+PSHJygCF+fxJsqp7Af1zGDITzuw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz#2f7ed5feed82ff7f0284acc11d525ee7eff22460" + integrity sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg== dependencies: consolidate "^0.15.1" hash-sum "^1.0.2" lru-cache "^4.1.2" merge-source-map "^1.1.0" + postcss "^7.0.36" postcss-selector-parser "^6.0.2" source-map "~0.6.1" vue-template-es2015-compiler "^1.9.0" @@ -1599,24 +1575,24 @@ algoliasearch@^3.24.5: tunnel-agent "^0.6.0" algoliasearch@^4.1.0, algoliasearch@^4.2.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.9.2.tgz#4aa1810736ff67b0e3b2e7e447fc84d8519bf877" - integrity sha512-Njdx8Bg8q73qnzKj00BxVbFFVvI+WSxirWKmSz2nmJ0xiMTizLxpSxQO2ODtCHWSDsFMqb04sB2tzoSrJPlpUg== + version "4.10.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.10.2.tgz#23e88c71cb381d5b59430baa5d417186cc8ff683" + integrity sha512-BAYCe97XRfO15irJKBRjBnrp9tSqN0jppklLIXKdtUcXlibcPQtuAeGUP2cPiz6bJd3ISuoYzLFNt4/fQYtLMw== dependencies: - "@algolia/cache-browser-local-storage" "4.9.2" - "@algolia/cache-common" "4.9.2" - "@algolia/cache-in-memory" "4.9.2" - "@algolia/client-account" "4.9.2" - "@algolia/client-analytics" "4.9.2" - "@algolia/client-common" "4.9.2" - "@algolia/client-recommendation" "4.9.2" - "@algolia/client-search" "4.9.2" - "@algolia/logger-common" "4.9.2" - "@algolia/logger-console" "4.9.2" - "@algolia/requester-browser-xhr" "4.9.2" - "@algolia/requester-common" "4.9.2" - "@algolia/requester-node-http" "4.9.2" - "@algolia/transporter" "4.9.2" + "@algolia/cache-browser-local-storage" "4.10.2" + "@algolia/cache-common" "4.10.2" + "@algolia/cache-in-memory" "4.10.2" + "@algolia/client-account" "4.10.2" + "@algolia/client-analytics" "4.10.2" + "@algolia/client-common" "4.10.2" + "@algolia/client-personalization" "4.10.2" + "@algolia/client-search" "4.10.2" + "@algolia/logger-common" "4.10.2" + "@algolia/logger-console" "4.10.2" + "@algolia/requester-browser-xhr" "4.10.2" + "@algolia/requester-common" "4.10.2" + "@algolia/requester-node-http" "4.10.2" + "@algolia/transporter" "4.10.2" alphanum-sort@^1.0.0: version "1.0.2" @@ -1689,7 +1665,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: +anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -1729,11 +1705,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-back@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1904,12 +1875,12 @@ babel-plugin-polyfill-corejs2@^0.2.2: semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" - integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" + integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.9.1" + core-js-compat "^3.14.0" babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" @@ -2328,9 +2299,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001236" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" - integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== + version "1.0.30001239" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz#66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8" + integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ== caseless@~0.12.0: version "0.12.0" @@ -2416,19 +2387,19 @@ chokidar@^2.0.3, chokidar@^2.1.8: fsevents "^1.2.7" chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" @@ -2579,16 +2550,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -command-line-args@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a" - integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg== - dependencies: - array-back "^3.0.1" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -2709,9 +2670,9 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + 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" @@ -2760,18 +2721,18 @@ copy-webpack-plugin@^5.0.2: serialize-javascript "^4.0.0" webpack-log "^2.0.0" -core-js-compat@^3.14.0, core-js-compat@^3.6.5, core-js-compat@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" - integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== +core-js-compat@^3.14.0, core-js-compat@^3.15.0, core-js-compat@^3.6.5: + version "3.15.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.1.tgz#1afe233716d37ee021956ef097594071b2b585a7" + integrity sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww== dependencies: browserslist "^4.16.6" semver "7.0.0" core-js@^3.6.4, core-js@^3.6.5: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c" - integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA== + version "3.15.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a" + integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2830,15 +2791,6 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -3370,9 +3322,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.723: - version "1.3.752" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" - integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== + version "1.3.758" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.758.tgz#0baeb8f0a89d1850cc65f92da5f669343e4f6241" + integrity sha512-StYtiDbgZdjcck3OLwsVVVif7QDuD5m5v2gF+XpETp5lHa7X0y3129YBlYaHRPyj1fep1oAaC6i//gAdp+rhbw== elliptic@^6.5.3: version "6.5.4" @@ -3819,13 +3771,6 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3942,7 +3887,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -4010,7 +3955,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4273,11 +4218,9 @@ hotkeys-js@3.8.1: integrity sha512-YlhVQtyG9f1b7GhtzdhR0Pl+cImD1ZrKI6zYUa7QLd0zuThiL7RzZ+ANJyy7z+kmcCpNYBf5PjBa3CjiQ5PFpw== hotkeys-js@^3.7.3: - version "3.8.6" - resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.8.6.tgz#1ae0924f1ed1107c0aa59edd6f1dd0080649daaf" - integrity sha512-aShX/2vwElAzJTBWSm3WkBPtaBk7El2TRVVjetM5cvgAaP71EwCIk2PnKDCXltdM1nwKaZb4N/52mi7lOgGisA== - dependencies: - "@jsdevtools/npm-publish" "^1.4.3" + version "3.8.7" + resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.8.7.tgz#c16cab978b53d7242f860ca3932e976b92399981" + integrity sha512-ckAx3EkUr5XjDwjEHDorHxRO2Kb7z6Z2Sxul4MbBkN8Nho7XDslQsgMJT+CiJ5Z4TgRxxvKHEpuLE3imzqy4Lg== hpack.js@^2.1.6: version "2.1.6" @@ -5167,11 +5110,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -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= - lodash.chunk@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" @@ -5267,13 +5205,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -5885,9 +5816,9 @@ opn@^5.5.0: is-wsl "^1.1.0" optimize-css-assets-webpack-plugin@^5.0.1: - version "5.0.6" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.6.tgz#abad0c6c11a632201794f75ddba3ce13e32ae80e" - integrity sha512-JAYw7WrIAIuHWoKeSBB3lJ6ZG9PSDK3JJduv/FMpIY060wvbA8Lqn/TCtxNGICNlg0X5AGshLzIhpYrkltdq+A== + version "5.0.8" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" + integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== dependencies: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" @@ -6059,11 +5990,6 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - path-parse@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -6487,7 +6413,7 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: version "7.0.36" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== @@ -6855,10 +6781,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -7185,13 +7111,6 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: - 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" - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -7286,23 +7205,11 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.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= -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -7573,11 +7480,6 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -7911,9 +7813,9 @@ tr46@^1.0.1: punycode "^2.1.0" tslib@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== tty-browserify@0.0.0: version "0.0.0" @@ -7932,11 +7834,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -7967,11 +7864,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -8263,9 +8155,9 @@ vue-loader@^15.7.1: vue-style-loader "^4.1.0" vue-router@^3.4.5: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.1.tgz#edf3cf4907952d1e0583e079237220c5ff6eb6c9" - integrity sha512-RRQNLT8Mzr8z7eL4p7BtKvRaTSGdCbTy2+Mm5HTJvLGYSSeG9gDzNasJPP/yOYKLy+/cLG/ftrqq5fvkFwBJEw== + version "3.5.2" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.2.tgz#5f55e3f251970e36c3e8d88a7cd2d67a350ade5c" + integrity sha512-807gn82hTnjCYGrnF3eNmIw/dk7/GE4B5h69BlyCK9KHASwSloD1Sjcn06zg9fVG4fYH2DrsNBZkpLtb25WtaQ== vue-server-renderer@^2.6.10: version "2.6.14" @@ -8601,13 +8493,6 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -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== - dependencies: - isexe "^2.0.0" - widest-line@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" @@ -8693,11 +8578,6 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" diff --git a/x/evm/spec/01_concepts.md b/x/evm/spec/01_concepts.md index 2ad46bdd..99c5db11 100644 --- a/x/evm/spec/01_concepts.md +++ b/x/evm/spec/01_concepts.md @@ -15,14 +15,6 @@ The `StateDB` interface from geth represents an EVM database for full state quer contracts and accounts. The concrete type that fulfills this interface on Ethermint is the `CommitStateDB`. -## State Object - -A `stateObject` represents an Ethereum account which is being modified. -The usage pattern is as follows: - -* First you need to obtain a state object. -* Account values can be accessed and modified through the object. - ## Genesis State The `x/evm` module `GenesisState` defines the state necessary for initializing the chain from a previous exported height. diff --git a/x/evm/spec/02_state.md b/x/evm/spec/02_state.md index 973ad1e8..583e35ee 100644 --- a/x/evm/spec/02_state.md +++ b/x/evm/spec/02_state.md @@ -53,29 +53,3 @@ The functionalities provided by the Ethermint `StateDB` are: * Auxiliary functions * Copy state * Reset state - -## State Objects - -State objects are used by the VM which is unable to deal with database-level errors. Any error that occurs during a database read is memoized here and will eventually be returned by `StateDB.Commit`. - -The Ethermint `stateObject` is a concrete type that mimics the functionality from the `go-ethereum` -private `stateObject` type. It keeps track of the interim values for the contract bytecode, storage -state and balance of an `EthAccount`. - -The storage entries (original and "dirty") for each state object are represented as slices instead -of maps since latter can cause non-deterministic block app hashes, which result in the chain -halting. - -When a `stateObject` is committed during `EndBlock`. It sets sets the account contract code to store, as well as the dirty storage state. The account's nonce and the account balance are updated by calling the `auth` and `bank` module setter functions, respectively. - -+++ https://github.com/tharsis/ethermint/blob/v0.3.1/x/evm/types/state_object.go#L49-L81 - -The functionalities provided by the Ethermint `stateObject` are: - -* Storage state getter and setter (temporary) -* Contract bytecode getter and setter (temporary) -* Balance getter and setter (temporary) -* Balance accounting (temporary) -* Account nonce and address getter and setter (temporary) -* Auxiliary functions: copy, RLP encoding, empty -* Commit state object (final) diff --git a/x/evm/spec/06_events.md b/x/evm/spec/06_events.md index 7fbb807c..284b0df9 100644 --- a/x/evm/spec/06_events.md +++ b/x/evm/spec/06_events.md @@ -11,10 +11,13 @@ interface). ## MsgEthereumTx -| Type | Attribute Key | Attribute Value | -|----------|---------------|-----------------| -| ethereum | `"amount"` | `{amount}` | -| ethereum | `"recipient"` | `{eth_address}` | -| message | `"sender"` | `{eth_address}` | -| message | `"action"` | `"ethereum"` | -| message | `"module"` | `"evm"` | +| Type | Attribute Key | Attribute Value | +|-------------|--------------------|-------------------------| +| ethereum_tx | `"amount"` | `{amount}` | +| ethereum_tx | `"recipient"` | `{hex_address}` | +| ethereum_tx | `"contract"` | `{hex_address}` | +| ethereum_tx | `"txHash"` | `{tendermint_hex_hash}` | +| ethereum_tx | `"ethereumTxHash"` | `{hex_hash}` | +| message | `"sender"` | `{eth_address}` | +| message | `"action"` | `"ethereum"` | +| message | `"module"` | `"evm"` |