Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
140 lines (104 sloc) 2.97 KB
This tutorial will take you through the entire process of writing and deploying a contract from start to finish in just a few minutes.

Deploying your first contract

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

{% code-tabs %} {% code-tabs-item title="counter.go" %}

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)

{% endcode-tabs-item %} {% endcode-tabs %}

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

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

{% code-tabs %} {% code-tabs-item title="add-25.json" %}

  "ContractName": "MyCounter",
  "MethodName": "add", 
  "Arguments": [
      "Type": "uint64",
      "Value": "25"

{% endcode-tabs-item %} {% endcode-tabs %}

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

{% code-tabs %} {% code-tabs-item title="get.json" %}

  "ContractName": "MyCounter",
  "MethodName": "get",
  "Arguments": []

{% endcode-tabs-item %} {% endcode-tabs %}

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
You can’t perform that action at this time.