Skip to main content

Quickstart

Here is a list of commands for developers who already meet the prerequisites and want to quickly send a sample contract to the Testnet. Consult the complete documentation for context and additional help.

Prerequisites

  1. You have installed Rust. Verify the installation with this command: rustup --version. Restart the shell if needed.
  2. You have installed cmake. Verify the installation with this command: cmake --version.
    • On Ubuntu, you can follow this guide.
    • On MacOS, use this command: brew install cmake.
  3. You have an integrated development environment (IDE). On Windows, you will need to download the C++ build developer tools, without which you cannot install cargo-casper.
  4. You have download Git.

Steps

  1. Install Cargo Casper with this command:

    cargo install cargo-casper

  2. Install the Casper client:

    cargo install casper-client

    If you have issues installing the casper-client, you may need additional libraries.

    • On MacOS:

      brew install pkg-config
      brew install openssl
    • On Ubuntu:

      sudo apt-get install pkg-config
      sudo apt-get install openssl
      sudo apt-get install libssl-dev

    Note: Make sure you also have the development packages of openssl installed. For example, libssl-dev on Ubuntu or openssl-devel on Fedora.

  3. Test the casper-client by querying a node on the network and getting the latest state root hash.

    casper-client get-state-root-hash --node-address http://65.21.235.219:7777
  4. Set up a Casper Account.

  5. Clone a simple counter contract or download it from GitHub:

    git clone https://github.com/casper-ecosystem/counter

  6. Navigate to the folder and prepare the dependencies to build the contract:

cd counter
make prepare
  1. Build the contract and tests:

make test

  1. Install the contract on Testnet using the casper-client's put-deploy command. Replace the secret key with your path. Record the deploy hash from the output. This example uses 30 CSPR to pay for contract installation on chain. You may need to adjust this value based on the latest Testnet chainspec.
casper-client put-deploy \
--node-address [NODE_ADDRESS] \
--chain-name casper-test \
--secret-key [YOUR_PATH_TO_SECRET_KEY_FILE] \
--payment-amount 30000000000 \
--session-path contracts/counter-v1/target/wasm32-unknown-unknown/release/counter-v1.wasm
  1. Check the deploy status given the deploy hash from the previous command:
casper-client get-deploy --node-address [NODE_ADDRESS] [DEPLOY_HASH]
  1. Get the latest state root hash:
casper-client get-state-root-hash --node-address [NODE_ADDRESS]
  1. Open the deploy tab of the account on the Testnet to see the deploy details.
  • As an alternative to step 15, check your account using the command line:
casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [PATH_TO_PUBLIC_KEY]
  • As another alternative, use the account hash for the --key argument. To get the account hash, look at the account details on the block explorer, or run this command:
casper-client account-address --public-key [PATH_TO_PUBLIC_KEY]

Then, query the blockchain using the account hash:

casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH]
  1. Now, you can play with the smart contract and increment the value it manages from 0 to 1. First, let's make sure the value is 0. Look at the "parsed" value returned in the output. An expected example output is shown below.
casper-client query-global-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH] \
-q "counter/count"

Example output:

{
"id": 8523290678829319485,
"jsonrpc": "2.0",
"result": {
"api_version": "1.4.6",
"block_header": null,
"merkle_proof": "[85716 hex chars]",
"stored_value": {
"CLValue": {
"bytes": "01000000",
"cl_type": "I32",
"parsed": 0
}
}
}
}
  1. Now increment the count value by calling the entry point counter_inc.
casper-client put-deploy \
--node-address [NODE_ADDRESS] \
--chain-name [CHAIN_NAME] \
--secret-key [PATH_TO_YOUR_KEY] \
--payment-amount 100000000 \
--session-name "counter" \
--session-entry-point "counter_inc"
  1. Get the NEW state root hash, to get the latest snapshot of the blockchain state – this is EXTREMELY IMPORTANT!
casper-client get-state-root-hash --node-address [NODE_ADDRESS]
  1. Query the state of the network.
casper-client query-state \
--node-address [NODE_ADDRESS] \
--state-root-hash [STATE_ROOT_HASH] \
--key [ACCOUNT_HASH] \
-q "counter/count"

If everything went according to plan, the value should be 1. Look at the "parsed" value below.

{
"id": 8523290678829319485,
"jsonrpc": "2.0",
"result": {
"api_version": "1.4.6",
"block_header": null,
"merkle_proof": "[85716 hex chars]",
"stored_value": {
"CLValue": {
"bytes": "01000000",
"cl_type": "I32",
"parsed": 1
}
}
}
}

You have successfully invoked a contract on the Casper Testnet to increment a value from 0 to 1. Now you have all the infrastructure required to work with more meaningful contracts.