Comment on page

Deploying your first contract

This tutorial will take you through the entire process of writing a contract and deploying it on a local instance of ORBS in just a few minutes.

1. Write a simple contract

Let's write a simple example that implements a counter. Create a file named counter.go and type in the following content
package main
import (
var PUBLIC = sdk.Export(add, get)
var SYSTEM = sdk.Export(_init)
var COUNTER_KEY = []byte("count")
func _init() {
state.WriteUint64(COUNTER_KEY, 0)
func add(amount uint64) {
count := state.ReadUint64(COUNTER_KEY)
count += amount
state.WriteUint64(COUNTER_KEY, count)
func get() uint64 {
return state.ReadUint64(COUNTER_KEY)
Don't worry if you don't fully understand the code at this point.

2. Start Gamma server

We'll test our contract on Gamma server. Start it from terminal
gamma-cli start-local
You can keep an eye on Prism (http://localhost:3000/) to see new blocks and transactions apear as you continue with the deployment in the next steps.

3. Deploy the contract

To deploy the counter contract, run in terminal
gamma-cli deploy counter.go -name MyCounter
If the deploy is successful, you'll see a response similar to this
"RequestStatus": "COMPLETED",
"TxId": "7Y4urVmKvunYsxh7kKhUoQ72XjSJcdkBxxzBcauC9icC9gzMy8mPDcg",
"ExecutionResult": "SUCCESS",
"OutputArguments": [],
"TransactionStatus": "COMMITTED",
"BlockHeight": "1869",
"BlockTimestamp": "2018-12-05T13:05:51.347Z"

4. Send a transaction to increment the counter

Write the transaction details in a JSON file named add-25.json
"ContractName": "MyCounter",
"MethodName": "add",
"Arguments": [
"Type": "uint64",
"Value": "25"
More Information about sending transactions and the Gamma-cli json files structures can be found at the gamma in depth chapter of this documentation
To increment the counter by 75, let's send this transaction 3 times from terminal
gamma-cli send-tx add-25.json -signer user1
gamma-cli send-tx add-25.json -signer user1
gamma-cli send-tx add-25.json -signer user1
Note that the transaction will be signed by user1, an example account found in orbs-test-keys.json

5. Read the counter value

Write the query details in a JSON file named get.json
"ContractName": "MyCounter",
"MethodName": "get",
"Arguments": []
This query will read the counter value from the contract's state. Send it from terminal
gamma-cli run-query get.json
Note that transactions that change state require consensus by several nodes. Reading state with queries is a simpler action that doesn't require consensus.

6. Stop Gamma server

Since we're done testing, the server is no longer needed. Let's stop it from terminal
gamma-cli stop-local