# Getting Started

This is a demo of Gno smart contract programming.  This document was
constructed by Gno onto a smart contract hosted on the data Realm
name ["gno.land/r/boards"](https://gno.land/r/boards/)
([github](https://github.com/gnolang/gno/tree/master/examples/gno.land/r/boards)).



## Build `gnokey`, create your account, and interact with Gno.

NOTE: Where you see `--remote test2.gno.land:36657` here, that flag can be replaced
with `--remote localhost:26657` for local testnets.

### Build `gnokey`.

```bash
git clone git@github.com:gnolang/gno.git
cd ./gno
make
```

### Generate a seed/mnemonic code.

```bash
./build/gnokey generate
```

NOTE: You can generate 24 words with any good bip39 generator.

### Create a new account using your mnemonic.

```bash
./build/gnokey add KEYNAME --recover
```

NOTE: `KEYNAME` is your key identifier, and should be changed.

### Verify that you can see your account locally.

```bash
./build/gnokey list
```

## Interact with the blockchain:

### Get your current balance, account number, and sequence number.

```bash
./build/gnokey query auth/accounts/ACCOUNT_ADDR --remote test2.gno.land:36657
```

NOTE: you can retrieve your `ACCOUNT_ADDR` with `./build/gnokey list`.

### Acquire testnet tokens using the official faucet.

Go to https://gno.land/faucet

### Create a board with a smart contract call.

NOTE: `BOARDNAME` will be the slug of the board, and should be changed.

```bash
./build/gnokey maketx call KEYNAME --pkgpath "gno.land/r/boards" --func "CreateBoard" --args "BOARDNAME" --gas-fee "1000000ugnot" --gas-wanted "2000000" --broadcast true --chainid test2 --remote test2.gno.land:36657
```

Interactive documentation: https://gno.land/r/boards?help&__func=CreateBoard

Next, query for the permanent board ID by querying (you need this to create a new post):

```bash
./build/gnokey query "vm/qeval" --data "gno.land/r/boards
GetBoardIDFromName(\"BOARDNAME\")" --remote test2.gno.land:36657
```

### Create a post of a board with a smart contract call.

NOTE: If a board was created successfully, your SEQUENCE_NUMBER would have increased.

```bash
./build/gnokey maketx call KEYNAME --pkgpath "gno.land/r/boards" --func "CreateThread" --args BOARD_ID --args "Hello gno.land" --args\#file "./examples/gno.land/r/boards/example_post.md" --gas-fee 1000000ugnot --gas-wanted 2000000 --broadcast true --chainid test2 --remote test2.gno.land:36657
```

Interactive documentation: https://gno.land/r/boards?help&__func=CreateThread

### Create a comment to a post.

```bash
./build/gnokey maketx call KEYNAME --pkgpath "gno.land/r/boards" --func "CreateReply" --args "BOARD_ID" --args "1" --args "1" --args "Nice to meet you too." --gas-fee 1000000ugnot --gas-wanted 2000000 --broadcast true --chainid test2 --remote test2.gno.land:36657
```

Interactive documentation: https://gno.land/r/boards?help&__func=CreateReply

```bash
./build/gnokey query "vm/qrender" --data "gno.land/r/boards
BOARDNAME/1" --remote test2.gno.land:36657
```

### Render page with optional path expression.

The contents of `https://gno.land/r/boards:` and `https://gno.land/r/boards:gnolang` are rendered by calling
the `Render(path string)` function like so:

```bash
./build/gnokey query "vm/qrender" --data "gno.land/r/boards
gnolang"
```

## Starting a local `gnoland` node:

### Add test account.

```bash
./build/gnokey add test1 --recover
```

Use this mneonic:
> source bonus chronic canvas draft south burst lottery vacant surface solve popular case indicate oppose farm nothing bullet exhibit title speed wink action roast

### Start `gnoland` node.

```bash
./build/gnoland
```

NOTE: This can be reset with `make reset`

### Publish the "gno.land/p/avl" package.

```bash
./build/gnokey maketx addpkg test1 --pkgpath "gno.land/p/avl" --pkgdir "examples/gno.land/p/avl" --deposit 100000000ugnot --gas-fee 1000000ugnot --gas-wanted 2000000 --broadcast true --chainid test2 --remote localhost:26657
```

### Publish the "gno.land/r/boards" realm package.

```bash
./build/gnokey maketx addpkg test1 --pkgpath "gno.land/r/boards" --pkgdir "examples/gno.land/r/boards" --deposit 100000000ugnot --gas-fee 1000000ugnot --gas-wanted 300000000 --broadcast true --chainid test2 --remote localhost:26657
```

\- [@manfred](/r/users:manfred), [2022-07-13 5:22am (UTC)](/r/boards:testboard/5) \[[reply](/r/boards?help&__func=CreateReply&bid=1&threadid=5&postid=5&body.type=textarea)] \[[x](/r/boards?help&__func=DeletePost&bid=1&threadid=5&postid=5)]