Skip to content

SDK

The VSC SDK is a library that abstract away various functionalities that are useful in the context of writing a VSC smart contract.

The Go contract SDK implements the necessary runtime and SDK functions for the VSC smart contract environment.

package main
import (
"contract-template/sdk"
)
//go:wasmexport entrypoint
func Entrypoint(a *string) *string {
sdk.Log(*a)
sdk.Log("Entrypoint logged")
return a
}

The below methods are within the sdk namespace. All parameters and return types are *string.

Log a string to the node console for debugging purposes.

//go:wasmexport entrypoint
func Entrypoint(a *string) *string {
// ...
sdk.Log(*a)
// ...
}

Set the value of a key in the contract database.

//go:wasmexport setString
func SetString(a *string) *string {
// ...
sdk.StateSetObject("myString", *a)
// ...
}

Retrieve the value of a key from the contract database.

//go:wasmexport getString
func GetString(a *string) *string {
// ...
value := sdk.StateGetObject("myString")
// ...
}

Delete the value of a key in the contract database.

//go:wasmexport clearString
func ClearString(a *string) *string {
// ...
sdk.StateDeleteObject("myString")
// ...
}

Retrieve the current runtime environment variables. List of variable names are listed below.

//go:wasmexport dumpEnv
func DumpEnv(a *string) *string {
// ...
envs := sdk.GetEnv()
// ...
}

Retrieve an environment variable by key. List of variable names are listed below.

//go:wasmexport dumpEnvKey
func DumpEnvKey(a *string) *string {
// ...
contract_id := sdk.GetEnvKey("contract.id")
// ...
}

Retrieve the balance of any VSC account or contract.

//go:wasmexport getBalance
func GetBalance(a *string) *string {
// ...
bal := sdk.GetBalance("hive:vaultec.vsc", sdk.AssetHive) // result in terms of mHIVE/mHBD
// ...
}

Transfer assets from caller account to the contract up to the limit specified in intents. The transaction must be signed using active authority for Hive accounts.

//go:wasmexport drawBalance
func DrawBalance(a *string) *string {
// ...
sdk.HiveDraw(1000, sdk.AssetHive) // Draw 1 HIVE from caller
// ...
}

Transfer assets from the contract to another account.

//go:wasmexport transferBalance
func TransferBalance(a *string) *string {
// ...
sdk.HiveTransfer("hive:vaultec.vsc", 1000, sdk.AssetHive) // Transfer 1 HIVE from contract
// ...
}

Unmap assets from the contract to a specified Hive account.

//go:wasmexport unmapBalance
func UnmapBalance(a *string) *string {
// ...
sdk.HiveWithdraw("hive:vaultec.vsc", 1000, sdk.AssetHive) // Withdraw 1 HIVE from contract
// ...
}

The below methods are within the env namespace.

Abort contract execution and revert transaction.

import "contract-template/env"
//go:wasmexport abortMe
func AbortMe(a *string) *string {
// ...
err := "some error here"
fname := "abort.go"
env.Abort(&err, &fname, 1, 1)
// ...
}
  • contract.id: ID of the current contract
  • tx.id: ID of the transaction
  • tx.index: Transaction position in block
  • tx.op_index: Operation position in transaction
  • block.id: L1 block ID in which the transaction is included in. For offchain transactions, this refers to the L1 block ID of the VSC block in which the transaction was included in.
  • block.height: L1 block number in which the transaction is included in. For offchain transactions, this refers to the L1 block number of the VSC block in which the transaction was included in.
  • block.timestamp: Timestamp of when the transaction was included in (i.e. 2025-07-26T14:10:42).
  • msg.sender: Address of the transaction sender. This must be a user address. If there are multiple, the first account specified in required_auths or required_posting_auths is returned.
  • msg.required_auths: The required_auths field of the transaction.
  • msg.required_posting_auths: The required_posting_auths field of the transaction.
  • caller: The address that is calling the contract. It can be a contract ID or user address.