var img = document.createElement('img'); img.src = "https://terradocs.matomo.cloud//piwik.php?idsite=1&rec=1&url=https://docs.terra.money" + location.pathname; img.style = "border:0"; img.alt = "tracker"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(img,s);
Skip to main content

Use Terrain with the testnet

The Pisco testnet is used for testing transactions on the Terra network.

Prerequisites

Create a test wallet

Open the Station browser extension and create a new wallet for testing purposes. It is recommended that you name this wallet "Pisco" or "testnet" so that it's easy to remember.

After creating a test wallet and storing the seed phrase, request funds from the testnet faucet in order to have tokens to carry out transactions on testnet.

☢️caution

Make sure you have your seed phrase available as you will need it to complete this tutorial.

Counter tutorial

After creating a test wallet, you are ready to use Terrain. This short tutorial walks you through setting up your project and creating a simple counter that increments upon request.

1. Scaffold your dApp

Scaffold your new application.


_3
terrain new my_terra_dapp
_3
cd my_terra_dapp
_3
npm install

Project structure

Your scaffolded project will have the following structure.


_10
.
_10
├── contracts # The contracts' source code.
_10
│ ├── my_terra_dapp
_10
│ └── ... # Add more contracts here.
_10
├── frontend # The front-end application.
_10
├── lib # Predefined functions for task and console.
_10
├── tasks # Predefined tasks.
_10
├── keys.terrain.js # Keys for signing transactions.
_10
├── config.terrain.json # Config for connections and contract deployments.
_10
└── refs.terrain.json # Deployed code and contract references.

2. Configure the testnet

Before deploying, you will need to supply your test wallet's mnemonic to Terrain so that it can use the wallet to carry out transactions. To do this, you'll need to modify keys.terrain.js in the generated project.

Modify the configuration and provide your seed phrase.


_6
module.exports = {
_6
pisco: {
_6
mnemonic:
_6
"PLACE_YOUR_PISCO_SEED_PHRASE_HERE",
_6
},
_6
};

3. Deploy

To deploy the application, you can run the following command in your terminal.


_1
terrain deploy my_terra_dapp --signer <your-test-wallet-name> --network testnet

The deploy command performs the following steps automatically.

  • Builds the smart contract.
  • Optimizes the smart contract.
  • Uploads the smart contract to testnet.
  • Instantiates the deployed smart contract.
☢️Warning

If you get the following error, wait a few seconds and then try running the deploy command again.


_1
CLIError: account sequence mismatch, expected 1, got 0: incorrect account sequence

3. Generate TypeScript client

Terrain 0.5.x and above includes the ability to automatically generate a TypeScript client based on your smart contract schema.

You can generate a client by running the following command in your terminal.


_1
terrain contract:generateClient my_terra_dapp

The client will be generated in ./lib/clients and copied into the frontend directory.

4. Interact with the deployed contract

The template dApp comes with several predefined helpers in lib/index.js. You can use these to start interacting with your smart contract.

  1. Start the Terrain console.

_1
terrain console --network testnet --signer <your-test-wallet-name>

  1. In the Terrain console, you can increment the counter by running the following command.

_1
await lib.increment();

You can also get the current count.


_1
await lib.getCountQuery();

  1. After incrementing once, await lib.getCountQuery() should return a count of 1.

_1
{ "count": 1 }

5. Front end scaffolding

When you scaffold a template app with Terrain, it will contain a simple front end.

  1. In the Station Chrome extension, switch the network to testnet.

  2. To use the front end, run the following commands.


_2
cd frontend
_2
npm start

  1. With testnet selected in Station you can now increment and reset the counter from the front end.

Demo

Advanced usage

For more advanced use cases such as deploying to testnet or mainnet, read Terrain's readme.