Skip to content

Commit

Permalink
Merge branch 'lints-fix'
Browse files Browse the repository at this point in the history
  • Loading branch information
= committed Jan 9, 2024
2 parents 9610e56 + eb2280b commit 7b2d6dc
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 55 deletions.
20 changes: 16 additions & 4 deletions docs/articles/advanced/using-iprpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ In order to provide decentralized, reliable and public RPC to all developers in

Lava ipRPC aggregates RPC providers and provides a unified endpoint for Evmos's entire ecosystem. Regardless of whether you're using `gRPC`, `REST`, `JSON-RPC`, `TendermintRPC`, or `Web-gRPC`, you can query Evmos or post transactions. You can also use websockets to establish a continuous connection instead of conducting a discrete handshake for each relay.


## Endpoints 🔗

A complete list of endpoints available are available [here](https://docs.evmos.org/develop/api/networks). For ipRPC, please attend only to addresses on the list which have `Lava Network` as a maintainer. A list is provided below for your convenience, as well!
Expand Down Expand Up @@ -40,16 +39,19 @@ A complete list of endpoints available are available [here](https://docs.evmos.o
You can set your `evmosd` installation to use ipRPC for all calls and requests. To do so, you need to configure your default node to use the Tendermint-RPC URL for your respective network.

For `mainnet` use:

```bash
./evmosd config node https://tm.evmos.lava.build:443
```

For `testnet` use:

```bash
./evmosd config node https://tm.evmos-testnet.lava.build:443
```

To ensure that your `evmosd` is correctly setup run the following:

```bash
./evmosd status
```
Expand All @@ -62,53 +64,63 @@ If you get a readout like the following, you're properly configured!

Now, all `evmosd` commands which communicate with the blockchain will be carried out securely and efficiently over Lava ipRPC.


## Test Commands 🖥️

You can send requests to each endpoint directly from the command line without intervention from `evmosd`. This can be done with the use of different tools such as `curl` for HTTP-responsive protocols, `wscat` for web sockets, and `grpcurl` for gRPC. You can also use any of the endpoints programmatically. Some examples are below:


### 🟢 REST

Send get requests to the appropriate cosmos endpoints!

```bash
curl -X GET -H "Content-Type: application/json" https://rest.evmos.lava.build/cosmos/base/tendermint/v1beta1/blocks/latest
curl -X GET -H "Content-Type: application/json" https://rest.evmos-testnet.lava.build/cosmos/base/tendermint/v1beta1/blocks/latest
```

### 🟢 Tendermint

Send post requests to the Tendermint-RPC endpoint!

```bash
curl -X POST -H "Content-Type: application/json" https://tm.evmos.lava.build --data '{"jsonrpc": "2.0", "id": 1, "method": "status", "params": []}'
curl -X POST -H "Content-Type: application/json" https://tm.evmos-testnet.lava.build --data '{"jsonrpc": "2.0", "id": 1, "method": "status", "params": []}'
```

### 🟢 Tendermint/Websocket

Connect using websockets over Tendermint-RPC.

```bash
wscat -c wss://tm.evmos.lava.build/websocket -x '{"jsonrpc": "2.0", "id": 1, "method": "status", "params": []}'
wscat -c wss://tm.evmos-testnet.lava.build/websocket -x '{"jsonrpc": "2.0", "id": 1, "method": "status", "params": []}'
```

### 🟢 JSON-RPC

Send EVM-style request to JSON-RPC endpoints!

```bash
curl -X POST -H "Content-Type: application/json" https://evmos.lava.build --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
curl -X POST -H "Content-Type: application/json" https://evmos-testnet.lava.build --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
```

### 🟢 JSON-RPC/Websocket

Connect using websockets over JSON-RPC.

```bash
wscat -c wss://evmos.lava.build/websocket -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}'
wscat -c wss://evmos-testnet.lava.build/websocket -x '{"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}'
```

### 🟢 gRPC

Use gRPC calls directly with the Cosmos API.

```bash
grpcurl grpc.evmos.lava.build:443 cosmos.base.tendermint.v1beta1.Service/GetLatestBlock
grpcurl grpc.evmos-testnet.lava.build:443 cosmos.base.tendermint.v1beta1.Service/GetLatestBlock

```

✅ The rest is up to you! The possibilities are literally endless!
✅ The rest is up to you! The possibilities are literally endless!
41 changes: 20 additions & 21 deletions docs/articles/beginner/Learn/react.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ In this tutorial, we will build a React Web App to interact with the previously

This is an advanced tutorial, and it is expected that you have a fundamental understanding of the following dApp development components:

- web3 npm library: https://www.npmjs.com/package/web3
- React Web-App Development
- HTML and JavaScript
- JavaScript functions, asynchronous functions (async and await)
- React states, and hooks (useEffect)
- MetaMask Wallet.
- Node.js (ensure it is installed on your computer)
- web3 npm library: https://www.npmjs.com/package/web3
- React Web-App Development
- HTML and JavaScript
- JavaScript functions, asynchronous functions (async and await)
- React states, and hooks (useEffect)
- MetaMask Wallet.
- Node.js (ensure it is installed on your computer)

Let’s begin!

Expand Down Expand Up @@ -43,7 +43,7 @@ This library helps us instantiate the contract and interact with it using functi

In this step, we will start building the React component and input fields for interaction.

Let us create a new file `ContractInteraction.js` in the src folder and paste the provided code snippets for the `ContractInteraction ` component.
Let us create a new file `ContractInteraction.js` in the src folder and paste the provided code snippets for the `ContractInteraction` component.

### Step 4: Configure Contract Information

Expand Down Expand Up @@ -77,7 +77,7 @@ import contractInfo from '../assets/contract.json';
import Web3 from 'web3';
```

We import the useEffect and useState hooks from React.
We import the useEffect and useState hooks from React.

The contract information (deployed contract address, and the ABI) will be imported from contract.json

Expand Down Expand Up @@ -187,10 +187,10 @@ const handleAddContractValue = async () => {

Explanation:

- const account = accounts[0];: It extracts the first account from the array of accounts connected with Metamask, and the first account is often the one connected with the dApp.
- await contract.methods.addContractValue().send({ ... });: This line sends a transaction to the addContractValue function of the smart contract using the send method. The from field specifies the account sending the transaction, and the value field specifies the amount of Evmos to send along with the transaction.
- const value = await contract.methods.seeContractValue().call();: After successfully sending the transaction, it retrieves the updated value of the contract by calling the seeContractValue method.
- setEvmosValue(Number(value.toString()));: It updates the React state variable evmosValue with the new value fetched from the contract.
- const account = accounts[0];: It extracts the first account from the array of accounts connected with Metamask, and the first account is often the one connected with the dApp.
- await contract.methods.addContractValue().send({ ... });: This line sends a transaction to the addContractValue function of the smart contract using the send method. The from field specifies the account sending the transaction, and the value field specifies the amount of Evmos to send along with the transaction.
- const value = await contract.methods.seeContractValue().call();: After successfully sending the transaction, it retrieves the updated value of the contract by calling the seeContractValue method.
- setEvmosValue(Number(value.toString()));: It updates the React state variable evmosValue with the new value fetched from the contract.

Set User Salary

Expand All @@ -215,7 +215,7 @@ const setSalaryOfUser = async () => {

Explanation:

- await contract.methods.setSalary(salaryAddress, salaryValue).send({ ... });: This line sends a transaction to the setSalary function of the smart contract using the send method. The from field specifies the account sending the transaction, and the function arguments salaryAddress and salaryValue are passed to the setSalary function.
- await contract.methods.setSalary(salaryAddress, salaryValue).send({ ... });: This line sends a transaction to the setSalary function of the smart contract using the send method. The from field specifies the account sending the transaction, and the function arguments salaryAddress and salaryValue are passed to the setSalary function.

The salaryAddress and salaryValue are set by the administrator in an HTML form that we will create later.

Expand All @@ -240,8 +240,8 @@ const handleViewSalary = async () => {

Explanation:

- const salary = await contract.methods.salaries(viewSalaryAddress).call();: This line calls the salaries mapping getter function of the smart contract using the call method. It retrieves the salary associated with the provided viewSalaryAddress.
- setViewSalaryValue(web3.utils.fromWei(salary, 'ether'));: This updates the state variable viewSalaryValue by converting the retrieved salary from wei to ether using the web3.utils.fromWei method. This assumes that the salary is stored in wei in the smart contract.
- const salary = await contract.methods.salaries(viewSalaryAddress).call();: This line calls the salaries mapping getter function of the smart contract using the call method. It retrieves the salary associated with the provided viewSalaryAddress.
- setViewSalaryValue(web3.utils.fromWei(salary, 'ether'));: This updates the state variable viewSalaryValue by converting the retrieved salary from wei to ether using the web3.utils.fromWei method. This assumes that the salary is stored in wei in the smart contract.

### Step 5: Create HTML input elements

Expand Down Expand Up @@ -310,15 +310,15 @@ Start your React app:

`npm start`

This launches your app in development mode. Open http://localhost:3000 in your browser to see your app.
This launches your app in development mode. Open Localhost 3000 in your browser to see your app.

### Step 8: Interact with the Smart Contract

Now our app is running, and we can try and interact with it via our front-end!

- Connect your MetaMask wallet to the Evmos network.
- Ensure your smart contract is deployed to the specified address in contract.json.
- Use the provided buttons to interact with the smart contract: view contract value, add contract value, set salary, view salary, and withdraw salary.
- Connect your MetaMask wallet to the Evmos network.
- Ensure your smart contract is deployed to the specified address in contract.json.
- Use the provided buttons to interact with the smart contract: view contract value, add contract value, set salary, view salary, and withdraw salary.

![React-App](/img/articles/React-3.png)
<p>Image: React App Interface</p>
Expand All @@ -338,5 +338,4 @@ Now our app is running, and we can try and interact with it via our front-end!

<p>Image: View Salary of Employee</p>


Congratulations! You've successfully created a React app that interacts with a smart contract deployed on the Evmos network. This tutorial assumes you have a basic understanding of React and the Evmos blockchain. If you encounter any issues, make sure to check the console for error messages and consult the documentation for the libraries used.
3 changes: 1 addition & 2 deletions docs/articles/beginner/Learn/stride.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ Stride contributes significantly to the Evmos and Cosmos ecosystem with the foll
</ul>

### Tutorials on Stride

https://docs.stride.zone/docs/getting-started-liquid-stake

https://docs.stride.zone/docs/providing-liquidity
Expand All @@ -79,5 +80,3 @@ https://docs.stride.zone/docs/unstaking
Github: https://github.com/Stride-Labs

Twitter: https://twitter.com/stride_zone


2 changes: 1 addition & 1 deletion docs/articles/beginner/Learn/tashi.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,4 @@ YouTube: https://www.youtube.com/watch?v=1HBaw5tNQ2c

LinkedIn: https://www.linkedin.com/company/tashi-finance/about/

Medium: https://medium.com/@tashi_finance
Medium: https://medium.com/@tashi_finance
34 changes: 14 additions & 20 deletions docs/articles/beginner/Learn/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ constructor() payable {
evmosValue = 0;
}
```

Purpose: This is the constructor function, executed only once during contract deployment. It initializes the contract's state variables.
In the above code, the state variables are values that are stored in the contract storage. These variables can be modified during contract execution provided there is a relevant function.

Expand Down Expand Up @@ -89,7 +90,6 @@ function addContractValue() public payable onlyOwner {
}
```


Purpose: Allows the owner to add tEVMOS to the contract.

Details:
Expand Down Expand Up @@ -156,21 +156,21 @@ We use Remix IDE to develop our payroll smart contract. The web-based IDE can be
Here are some key functionalities of Remix IDE:

- **Smart Contract Development:**
- *Solidity Editor:* Remix provides a dedicated Solidity code editor with syntax highlighting, autocompletion, and error checking to facilitate the development of smart contracts.
- *Solidity Editor:* Remix provides a dedicated Solidity code editor with syntax highlighting, autocompletion, and error checking to facilitate the development of smart contracts.

- **Deployment and Interaction:**
- *Deploy Contracts:* Remix allows developers to deploy smart contracts directly from the IDE to various networks, including Evmos, including the mainnet and testnets.
- *Interact with Contracts:* Developers can interact with deployed contracts, execute functions, and view contract state using Remix's user-friendly interface.
- *Deploy Contracts:* Remix allows developers to deploy smart contracts directly from the IDE to various networks, including Evmos, including the mainnet and testnets.
- *Interact with Contracts:* Developers can interact with deployed contracts, execute functions, and view contract state using Remix's user-friendly interface.

- **Code Analysis and Compilation:**
- *Static Analysis:* Remix performs static analysis on smart contract code, highlighting potential issues and vulnerabilities before deployment.
- *Compilation:* The IDE compiles Solidity code into bytecode, which is necessary for deploying contracts to the blockchain.
- *Static Analysis:* Remix performs static analysis on smart contract code, highlighting potential issues and vulnerabilities before deployment.
- *Compilation:* The IDE compiles Solidity code into bytecode, which is necessary for deploying contracts to the blockchain.

- **Debugging:**
- *Debugging Tools:* Remix provides debugging tools to help developers identify and fix issues in their smart contracts. This includes breakpoints, step-by-step execution, and variable inspection.
- *Debugging Tools:* Remix provides debugging tools to help developers identify and fix issues in their smart contracts. This includes breakpoints, step-by-step execution, and variable inspection.

- **Testing:**
- *Unit Testing:* Developers can create and run unit tests for their smart contracts using Remix, ensuring that the code functions as expected.
- *Unit Testing:* Developers can create and run unit tests for their smart contracts using Remix, ensuring that the code functions as expected.

Open the Remix IDE in your web browser.

Expand Down Expand Up @@ -218,14 +218,14 @@ Our MetaMask wallet is now set up to deploy and interact with the contracts on E

Since the default network for Remix IDE is a local Ethereum testnet, we must configure Remix IDE to deploy the contract on Evmos testnet. To do this:

- Switch to the "Deploy & Run Transactions" tab.
- Set Environment to Injected Provider - MetaMask
- Switch to the "Deploy & Run Transactions" tab.
- Set Environment to Injected Provider - MetaMask

![Provider](/img/articles/Tutorial-7.png)

At this point, you might observe MetaMask popping up to select accounts to connect with Remix IDE. Choose the accounts you wish to use and click on connect.

Select an account you wish to use to deploy the contract from the “ACCOUNT” tab above, and click the "Deploy" button.
Select an account you wish to use to deploy the contract from the “ACCOUNT” tab above, and click the "Deploy" button.

You will observe another MetaMask popup to review the transaction and submit it. Click on ‘Confirm’ to deploy the contract.

Expand All @@ -243,9 +243,9 @@ Additionally, you can also observe and interact with the contract in Remix IDE:

Now that the contract is deployed, you can interact with it:

- Use the addContractValue function to add funds to the contract.
- Use the setSalary function to set salaries for employees.
- Use the paySalary function to withdraw your salary.
- Use the addContractValue function to add funds to the contract.
- Use the setSalary function to set salaries for employees.
- Use the paySalary function to withdraw your salary.

Each of these functions require you to confirm MetaMask transactions before they are executed. It is important to confirm the transaction metadata before approving the transaction.

Expand All @@ -254,9 +254,3 @@ Each of these functions require you to confirm MetaMask transactions before they
Congratulations! You've successfully created a simple payroll smart contract. This is a basic example, and real-world payroll systems would require additional features and security considerations.

Feel free to explore more advanced features and integrate this contract into a larger decentralized application (dApp). Happy coding!






4 changes: 3 additions & 1 deletion docs/articles/governance/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ text proposals, changing [chain parameters](./chain-parameters),
and spending [funds from the community pool](./community-pool).

## On- and off-chain Governance Structure

:::tip
**Note:** Working on a governance proposal? Make sure to look at the [best practices](./best-practices).
:::

### Communication Methods

Governance practices and decisions are communicated through different types of documents and design artifacts:
Expand Down Expand Up @@ -51,4 +53,4 @@ involvement from members in the extended community occurs organically.
- **[Telegram (@EvmosOrg)](https://t.me/EvmosOrg)**
- General Evmos Telegram group
- **[Twitter (@EvmosOrg)](https://twitter.com/EvmosOrg)**
- Official Evmos Twitter
- Official Evmos Twitter
2 changes: 1 addition & 1 deletion docs/articles/governance/voting.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ Though a simple majority `Yes` vote (ie. 50% of participating voting power) is r

### How is quorum determined?

Voting power, whether backing a vote of `Yes`, `Abstain`, `No`, or `NoWithVeto`, counts toward quorum. Quorum is required for the outcome of a governance proposal vote to be considered valid and for deposit contributors to recover their deposit amounts. If the proposal vote does not reach quorum (ie. less than 33.4% of the network's voting power is participating) within 5 days, any deposit amounts will be burned and the proposal outcome will not be considered to be valid.
Voting power, whether backing a vote of `Yes`, `Abstain`, `No`, or `NoWithVeto`, counts toward quorum. Quorum is required for the outcome of a governance proposal vote to be considered valid and for deposit contributors to recover their deposit amounts. If the proposal vote does not reach quorum (ie. less than 33.4% of the network's voting power is participating) within 5 days, any deposit amounts will be burned and the proposal outcome will not be considered to be valid.
10 changes: 5 additions & 5 deletions docs/videos/connect_to_metamask.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ This video is created as part of EvmosNation grant project (organized by Encode

In this video, we will learn the following:

- Creating a React app
- Integrating Web3.js library to the React app
- Using Web3.js library to connect to Metamask wallet
- Load addresses from Metamask wallet
- Switch accounts in Metamask wallet
- Creating a React app
- Integrating Web3.js library to the React app
- Using Web3.js library to connect to Metamask wallet
- Load addresses from Metamask wallet
- Switch accounts in Metamask wallet

0 comments on commit 7b2d6dc

Please sign in to comment.