v2 Contract SDK
  • Orbs Contract SDK
  • Getting Started
    • About smart contracts
    • Becoming a Go developer
    • Installing Gamma - local blockchain
    • Deploying your first contract
    • The Orbs Starter Kit
    • Downloading the Contract SDK
  • Orbs Contracts
    • Smart contracts
    • Layout of a contract file
    • Data types (Exported Functions)
    • State
    • Address
    • Events
    • Error handling
    • Calling other contracts
    • Calling Ethereum contract
    • API Reference
    • Limitations of Orbs Contracts
    • Creating a new contract
  • Gamma in Depth
    • Starting and stopping the server
    • Test keys and accounts
    • Deploying smart contracts
    • Sending transactions and queries
    • Checking sent transaction status
    • Reading Logs from Contracts
    • Working with multiple environments
    • Upgrading to latest versions
    • Gamma server under the hood
    • Deploying Gamma in the Cloud
      • Amazon Web Services
      • Google Cloud Platform
      • Azure
Powered by GitBook
On this page
  • 1. Write a simple contract
  • 2. Start Gamma server
  • 3. Deploy the contract
  • 4. Send a transaction to increment the counter
  • 5. Read the counter value
  • 6. Stop Gamma server
  1. Getting Started

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

counter.go
package main

import (
    "github.com/orbs-network/orbs-contract-sdk/go/sdk/v1"
    "github.com/orbs-network/orbs-contract-sdk/go/sdk/v1/state"
)

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

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

add-25.json
{
  "ContractName": "MyCounter",
  "MethodName": "add", 
  "Arguments": [
    {
      "Type": "uint64",
      "Value": "25"
    }
  ]
}

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

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
PreviousInstalling Gamma - local blockchainNextThe Orbs Starter Kit

Last updated 5 years ago

You can keep an eye on Prism () to see new blocks and transactions apear as you continue with the deployment in the next steps.

More Information about sending transactions and the Gamma-cli json files structures can be found at the of this documentation

http://localhost:3000/
gamma in depth chapter