Skip to content

Commit

Permalink
Major updates to the Archwayd page (#507)
Browse files Browse the repository at this point in the history
  • Loading branch information
emperorjm authored Jul 28, 2024
1 parent 61115ec commit 66bade3
Show file tree
Hide file tree
Showing 3 changed files with 306 additions and 555 deletions.
304 changes: 304 additions & 0 deletions content/2.developers/2.developer-tools/3.archwayd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
---
objectID: developers_developer-tools_daemon
title: Archway daemon
description: Provides information on the Archwayd CLI daemon
parentSection: Developers
parentSectionPath: /developers
---

# Archwayd daemon

The `archwayd` tool can operate as a background process (daemon), as indicated by the `d` at the end of its name, and is essential for running a [node](/validators/running-a-node/prerequisites) on the Archway network. However, it is not limited to this function as it is the ultimate tool for allowing anyone to interact with the Archway blockchain.

## Installation

The following section of the [Installation](/developers/getting-started/install#archwayd) documentation provides detailed instructions on how to install `archwayd` for your specific environment.

## Commands overview

You can view the full range of `archwayd` commands by using the command `archwayd --help`.

::highlight-card

```bash
archwayd --help


# Outputs:
Archway Daemon (server)

Usage:
archwayd [command]

Available Commands:
config Create or query an application CLI configuration file
debug Tool for helping with debugging your application
ensure-binary ensures the binary is correctly built
export Export state to JSON
genesis Application's genesis-related subcommands
help Help about any command
init Initialize private validator, p2p, genesis, and application configuration files
keys Manage your application's keys
query Querying subcommands
rollback rollback cosmos-sdk and tendermint state by one height
rosetta spin up a rosetta server
start Run the full node
status Query remote node for status
tendermint Tendermint subcommands
tx Transactions subcommands
version Print the application binary version information

Flags:
-h, --help help for archwayd
--home string directory for config and data (default "/Users/adrianthompson/.archway")
--log_format string The logging format (json|plain) (default "plain")
--log_level string The logging level (trace|debug|info|warn|error|fatal|panic) (default "info")
--log_no_color Disable colored logs
--trace print out full stack trace on errors

Use "archwayd [command] --help" for more information about a command.
```

::

## Using archwayd: common commands

::youtubeEmbed{src="https://www.youtube.com/embed/QKFtEIvBjQg" tailwindClasses="w-full lg:w-3/4 h-96"}
::

This section will guide you through using archwayd by providing examples of some common commands.

### Create an Account

Let's start with the basics, as an `account` is required for executing transactions on-chain. By executing `archwayd keys --help`, you can see the list of commands related to account management. To create a new account, run the following command in your terminal, substituting `[name]` with the actual name of the account:

```bash
archwayd keys add [name]
```

The following is an example of the output, minus the mnemonic which would be shown at the end:

```
- address: archway17ekmaazxl8gmwu6myde26u3qm4r8cvf2x7ntfg
name: joe
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AhwfHUglLSKU4dAEYnOlfBMbVXYDigWv3WplyFkax3Bb"}'
type: local
**Important**: Write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
[24-word mnemonic will be shown here]
```

As mentioned in the message, the mnemonic is very important as it acts like a password to load your account in any wallet supporting the Archway network. Therefore, anyone who has the `mnemonic` has access to the account and its assets. It is extremely important not to share your mnemonic with anyone and to store it safely to ensure you can recover your account.

If you already have an account and want to load it into `archwayd`, you can use the `--recover` flag:

```bash
archwayd keys add [name] --recover
```

You will then be prompted to enter the mnemonic of the account you want to recover.

### Query account balance

All **query** actions are performed using the primary `query` command. To query an account's bank balance, you need to access the `bank` module via the `bank` sub-command. The following is an example, substituting `[account-address]` with an actual account address:


::tab-card{noOfTabs=2}
#title0
mainnet

#desc0
::highlight-card

```bash
archwayd query bank balances [account-address] --node "https://rpc.mainnet.archway.io:443" --chain-id archway-1
```


::

#title1
testnet

#desc1
::highlight-card

```bash
archwayd query bank balances [account-address] --node "https://rpc.constantine.archway.io:443" --chain-id constantine-3
```
::
::

The following is an example of the output:

```
balances:
- amount: "24244744650168365034"
denom: aarch
pagination:
next_key: null
total: "0"
```

### Deploy a contract

To execute a transaction, you would use the `tx` command. This example will focus on deploying a contract. Make sure to change `[path_to_wasm_file]` to the location of the WASM file and `[my-wallet]` to the wallet that will execute the transaction:

::tab-card{noOfTabs=2}
#title0
mainnet

#desc0
::highlight-card

```bash
archwayd tx wasm store [path_to_wasm_file] --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.mainnet.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.4 --from [my-wallet] --chain-id archway-1 --node https://rpc.mainnet.archway.io:443 --broadcast-mode sync --output json -y
```


::

#title1
testnet

#desc1
::highlight-card

```bash
archwayd tx wasm store [path_to_wasm_file] --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.constantine.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.4 --from [my-wallet] --chain-id constantine-3 --node https://rpc.constantine.archway.io:443 --broadcast-mode sync --output json -y
```
::

::


The response from storing wasm will give you the `Code ID` required for instantiating the contract.

### Interact with a smart contract

The same `wasm` sub-command of the `tx` command is used for interacting with a smart contract. The following example will illustrate how to do this, but first, let's explain the placeholders that need to be substituted:

- `[CONTRACT-ADDRESS]`: This should be the contract address of the contract you want to interact with.
- `[CONTRACT-PARAMETERS]`: These are parameters that can be submitted to the contract. For example, in the `Increment` contract that you can create via the [Archway Developer CLI](developers/developer-tools/developer-cli), you would use `'{"increment": {}}'` where `increment` is the action to be executed but in this case no parameters are required based on the empty `{}` object.
- `[my-wallet]`: The account that will be used to execute the transaction.

::tab-card{noOfTabs=2}
#title0
mainnet
#desc0
::highlight-card


```bash
archwayd tx wasm execute --chain-id archway-1 [CONTRACT-ADDRESS] [CONTRACT-PARAMETERS] --from [my-wallet] --node https://rpc.mainnet.archway.io:443 --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.mainnet.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.3
```

::

#title1
testnet

#desc1
::highlight-card

```bash
archwayd tx wasm execute --chain-id constantine-3 [CONTRACT-ADDRESS] [CONTRACT-PARAMETERS] --from [my-wallet] --node https://rpc.constantine.archway.io:443 --gas auto --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.constantine.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') --gas-adjustment 1.3
```

::

::


An example of the output could be:

::highlight-card
```bash
✔ Enter the name or address of the account that will send the transaction … mywallet
Executing contract increment2
Chain: constantine-3
Signer: mywallet

✅ Executed contract increment2-0.1.0
Transaction: CEFC1B9F6AE482249C3F6F3ED1C723F25FA8C129F53F5169544931207769311A
```
::

### Querying a contract

The `query` command in `archwayd` provides the ability to fetch and examine various pieces of data from a smart contract deployed on the Archway blockchain. To query the state of a smart contract, you typically need the contract address and the specific parameters or messages that the contract's query endpoints expect.

### Common query commands

1. **Query contract state**:

- This command retrieves the state of the contract.
- Example:

```bash
archwayd query wasm contract-state smart [CONTRACT-ADDRESS] [QUERY-MESSAGE]
```

2. **Query contract info**:

- This command fetches basic information about the contract, such as its code ID and creator.
- Example:

```bash
archwayd query wasm contract [CONTRACT-ADDRESS]
```

3. **Query all contracts by code**:

- This command lists all contracts instantiated from a specific code ID.

- Example:
```bash
archwayd query wasm list-contract-by-code [CODE-ID]
```

### Example Placeholders

- `[CONTRACT-ADDRESS]`: The unique address of the smart contract you want to query.
- `[QUERY-MESSAGE]`: The specific query message that the contract understands. For instance, in a counter contract, a query message could be `'{"get_count":{}}'` to get the current count.
- `[CODE-ID]`: The identifier of the smart contract code, used to list all contracts instantiated from it.

### Practical example

Suppose you have deployed a smart contract that maintains a simple counter. To query the current count, you would use the following command:

::tab-card{noOfTabs=2}
#title0
mainnet
#desc0
::highlight-card


```bash
archwayd query wasm contract-state smart [CONTRACT-ADDRESS] '{"get_count": {}}' --node https://rpc.mainnet.archway.io:443 --chain-id archway-1
```

::

#title1
testnet

#desc1
::highlight-card

```bash
archwayd query wasm contract-state smart [CONTRACT-ADDRESS] '{"get_count": {}}' --node https://rpc.constantine.archway.io:443 --chain-id constantine-3
```

::

::

An example of the output would be:

```
data:
count: 1
```
Loading

0 comments on commit 66bade3

Please sign in to comment.