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
- You have installed Rust. Verify the installation with this command:
rustup --version
. Restart the shell if needed. - 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
.
- 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
. - You have download Git.
Steps
Install Cargo Casper with this command:
cargo install cargo-casper
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 opensslOn 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 oropenssl-devel
on Fedora.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
Set up a Casper Account.
Clone a simple counter contract or download it from GitHub:
git clone https://github.com/casper-ecosystem/counter
Navigate to the folder and prepare the dependencies to build the contract:
cd counter
make prepare
- Build the contract and tests:
make test
- Install the contract on Testnet using the
casper-client
'sput-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
- Check the deploy status given the deploy hash from the previous command:
casper-client get-deploy --node-address [NODE_ADDRESS] [DEPLOY_HASH]
- Get the latest state root hash:
casper-client get-state-root-hash --node-address [NODE_ADDRESS]
- 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]
- 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
}
}
}
}
- 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"
- 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]
- 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.