An autonomous agent that operates on behalf of the issuer to recognize and enforce some or all the terms and conditions of the specified contract. At a minimum, the Smart Contract operates within the bounds of the Tokenized Protocol on the Bitcoin SV (BSV) network. The Smart Contract is written in Go and is intended to offer all the basic functionality required to issue, manage and exchange tokens, but it can also be used as the basis for much more complex smart contracts.
This is a Beta release, with more changes likely before the final version. Do not use this in production.
If you're only ever going to run the binary and are not interested in working with the source code.
go get github.com/tokenized/smart-contract/cmd/...
Build from Source
To build the project from source, clone the GitHub repo and in a command line terminal.
mkdir -p $GOPATH/src/github.com/tokenized cd $GOPATH/src/github.com/tokenized git clone firstname.lastname@example.org:tokenized/smart-contract cd smart-contract
Navigate to the root directory and run:
cmd/smartcontract- Command line interface
cmd/smartcontractd- Smart Contract node daemon
pkg/protocol- Tokenized protocol message definitions.
pkg/spvnode- Connects to a trusted node as a peer via the public interface.
pkg/rpcnode- Connects to a trusted node via the RPC interface.
platform/inspector- Looks at transaction objects, converts them to a special transaction type (inspector.Transaction / itx) used throughout the app.
pkg/txbuilder- Generic BCH library for performing bitcoin related tasks, mainly around tx building.
pkg/storage- Storage engine, supporting S3 and local filesystem.
pkg/txscript- Bitcoin signature library.
pkg/wire- Bitcoin protocol message definitions.
Configuration is supplied via environment variables. See the example file that would export environment variables on Linux and macOS.
Make a copy the example file, and edit the values to suit. The file can be placed anywhere if you prefer.
cp conf/dev.env.example ~/.contract/acme.env
The following configuration values are needed:
OPERATOR_NAMEthe name of the operator of the smart contract. Eg: ACME Corporation
FEE_ADDRESSpublic address to earn fees upon every action
FEE_VALUEthe cost in satoshis to perform an action (<2000 at this stage)
NODE_ADDRESShostname or IP address for a public node
NODE_USER_AGENTthe user agent to provide when connecting to the public node
RPC_HOSThostname or IP address for a private node (RPC)
RPC_USERNAMEusername for RPC authentication
RPC_PASSWORDpassword for RPC authentication
PRIV_KEYprivate key (WIF) used by the smart contract
CONTRACT_STORAGE_REGIONS3 region for data storage
CONTRACT_STORAGE_ACCESS_KEYS3 access key for data storage
CONTRACT_STORAGE_SECRETS3 secret for data storage
CONTRACT_STORAGE_BUCKETbucket for data storage, use standalone for local filesystem
CONTRACT_STORAGE_ROOTroot directory for storage
NODE_STORAGE_REGIONS3 region for data storage
NODE_STORAGE_ACCESS_KEYS3 access key for data storage
NODE_STORAGE_SECRETS3 secret for data storage
NODE_STORAGE_BUCKETbucket for data storage, use standalone for local filesystem
NODE_STORAGE_ROOTroot directory for storage
This example shows the config file containing the environment variables
source ./conf/dev.env.example && make run
The Smart Contract requires RPC access to a full bitcoin node, such as Bitcoin SV. Once installed and syncronised with the BSV network, ensure that RPC is enabled by modifying the
# bitcoin.conf server=1 rpuser=someUserName rpcpassword=somePassword rpcport=8332
Running unit tests
To perform unit tests run:
See the deploy directory for information on how to deploy the smart contract.
Copyright 2018 nChain Holdings Limited.