stacks-go-sdk

module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 15, 2024 License: MIT

README

codecov

Unofficial Stacks Blockchain SDK for Go

Send tokens and call Clarity smart contracts on the Stacks blockchain with Golang.

Features

  • Transaction signing for standard authorization and single-signature spending conditions
  • Supports Token Transfer transactions (Type-0) and Contract Call transactions (Type-2)
  • Clarity value encoding and decoding
  • Stacks address handling and conversion

Installation

To use this SDK in your Go project, run:

go get github.com/icon-project/stacks-go-sdk

Usage

Here are some basic usage examples:

Creating and Broadcasting a Token Transfer Transaction
import (
    "github.com/icon-project/stacks-go-sdk/stacks"
    "math/big"
)

func main() {
    network := stacks.NewStacksMainnet()

    recipient := "SP2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKNRV9EJ7"
    amount := big.NewInt(1000000) // amount in microSTX
    memo := "Transfer memo"
    senderAddress := "SP1P72Z3704VMT3DMHPP2CB8TGQWGDBHD3RPR9GZS"
    senderKey := []byte{...}  // sender's private key

    // Create and sign the transaction
    tx, err := stacks.MakeSTXTokenTransfer(
        recipient,
        *amount,
        memo,
        *network,
        senderAddress,
        senderKey,
        nil,  // Let the function estimate the fee
        nil,  // Let the function fetch the nonce
    )
    if err != nil {
        // Handle error
    }

    // Broadcast the transaction
    txID, err := stacks.BroadcastTransaction(tx, network)
    if err != nil {
        // Handle error
    }

    println("Transaction broadcast successfully. Transaction ID:", txID)
}
Creating and Broadcasting a Token Transfer Transaction
import (
    "github.com/icon-project/stacks-go-sdk/stacks"
    "github.com/icon-project/stacks-go-sdk/clarity"
)

func main() {
    network := stacks.NewStacksMainnet()

    contractAddress := "SP466FNC0P7JWTNM2R9T199QRZN1MYEDTAR0KP27"
    contractName := "contract-name"
    functionName := "function-name"
    senderAddress := "SP1P72Z3704VMT3DMHPP2CB8TGQWGDBHD3RPR9GZS"
    senderKey := []byte{...}  // sender's private key

    // Prepare function arguments
    arg1, _ := clarity.NewInt(123)
    arg2 := clarity.NewStringType("example")
    functionArgs := []clarity.ClarityValue{arg1, arg2}

    // Create and sign the transaction
    tx, err := stacks.MakeContractCall(
        contractAddress,
        contractName,
        functionName,
        functionArgs,
        *network,
        senderAddress,
        senderKey,
        nil,  // Let the function estimate the fee
        nil,  // Let the function fetch the nonce
    )
    if err != nil {
        // Handle error
    }

    // Broadcast the transaction
    txID, err := stacks.BroadcastTransaction(tx, network)
    if err != nil {
        // Handle error
    }

    println("Contract call transaction broadcast successfully. Transaction ID:", txID)
}
Working with Clarity Values
import (
    "github.com/icon-project/stacks-go-sdk/clarity"
)

func main() {
    // Create a Clarity integer
    intValue, err := clarity.NewInt(12345)
    if err != nil {
        // Handle error
    }

    // Serialize the Clarity value
    serialized, err := intValue.Serialize()
    if err != nil {
        // Handle error
    }

    // Deserialize a Clarity value
    deserialized, err := clarity.DeserializeClarityValue(serialized)
    if err != nil {
        // Handle error
    }
}

Stacks RPC Client

The rpc_client package is automatically generated from the Stacks RPC OpenAPI specification. Some modifications are made after generation.

Stacks Blockchain API Client

The stacks_blockchain_api_client package is automatically generated from the Stacks Blockchain API OpenAPI specification. The script to build the specification and generate the Go client is in scripts/generate_stacks_blockchain_api.sh.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Disclaimer

This is an unofficial SDK and is not affiliated with or endorsed by the Stacks Foundation or Hiro PBC. Use at your own risk.

License

This project is licensed under the MIT License.

Directories

Path Synopsis
internal
pkg
abi
c32

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL