# Develop

## prerequsites

- Go >= 1.16
- Starport: `curl https://get.starport.network/starport@v0.19.5! | sudo bash
- nodejs >= 16

## Building the blockchain

Run

```shell
make
```

This command creates a `build` directory and in particular, the
`build/wormchaind` binary, which can be used to run and interact with the
blockchain.

You can start a local development instance by running

```shell
make run
```

Or equivalently

```shell
./build/wormchaind --home build
```

If you want to reset the blockchain, just run

```shell
make clean
```

Then you can `make run` again.

## Running tests

Golang tests

    make test

Client tests, run against the chain. Wormchain must be running via `starport chain serve`, `make run` or `tilt up`

    cd ./ts-sdk
    npm ci
    npm run build
    cd ../testing/js
    npm ci
    npm run test

## Interacting with the blockchain

You can interact with the blockchain by using the go binary:

```shell
./build/wormchaind tx --from tiltGuardian --home build
```

Note the flags `--from tiltGuardian --home build`. These have to be passed
in each time you make a transaction (the `tiltGuardian` account is created in
`config.yml`). Queries don't need the `--from` flag.

## Scaffolding stuff with starport

TODO: expand explanation here

```shell
starport scaffold type guardian-key key:string --module wormhole --no-message
```

modify `proto/wormhole/guardian_key.proto` (string -> bytes)

```shell
starport scaffold message register-account-as-guardian guardian-pubkey:GuardianKey address-bech32:string signature:string --desc "Register a guardian public key with a wormhole chain address." --module wormhole --signer signer
```

Scaffold a query:

```shell
starport scaffold query latest_guardian_set_index --response LatestGuardianSetIndex --module wormhole
```

(then modify "wormchain/x/wormhole/types/query.pb.go" to change the response type)
