README ¶
VIZ-Blockchain/viz-go-lib
Golang RPC client library for Viz.
Usage
import "github.com/VIZ-Blockchain/viz-go-lib"
Example
This is just a code snippet. Please check the examples
directory
for more complete and ready to use examples.
cls,_ := client.NewClient("wss://testnet.viz.world")
defer cls.Close()
// Get config.
log.Println("---> GetConfig()")
config, err := cls.Database.GetConfig()
if err != nil {
return err
}
// Use the last irreversible block number as the initial last block number.
props, err := cls.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
lastBlock := props.LastIrreversibleBlockNum
// Keep processing incoming blocks forever.
log.Printf("---> Entering the block processing loop (last block = %v)\n", lastBlock)
for {
// Get current properties.
props, err := cls.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
// Process new blocks.
for props.LastIrreversibleBlockNum-lastBlock > 0 {
block, err := cls.Database.GetBlock(lastBlock)
if err != nil {
return err
}
// Process the transactions.
for _, tx := range block.Transactions {
for _, operation := range tx.Operations {
switch op := operation.Data().(type) {
case *types.VoteOperation:
log.Printf("@%v voted for @%v/%v\n", op.Voter, op.Author, op.Permlink)
// You can add more cases here, it depends on
// what operations you actually need to process.
}
}
}
lastBlock++
}
// Sleep for CHAIN_BLOCK_INTERVAL seconds before the next iteration.
time.Sleep(time.Duration(config.BlockInterval) * time.Second)
}
Package Organisation
You need to create a Client
object to be able to do anything.
Then you just need to call NewClient()
.
Once you create a Client
object, you can start calling the methods exported
via vizd
's RPC endpoint by invoking associated methods on the client object.
There are multiple APIs that can be exported, e.g. database
and network_broadcast
,
so the methods on the Client object are also namespaced accoding to these APIs.
For example, to call get_block
from database
, you need to use
Client.Database.GetBlock
method.
When looking for a method to call, all you need is to turn the method name into
CamelCase, e.g. get_config
becomes Client.Database.GetConfig
.
Status
This package is still under rapid development and it is by no means complete.
For now there is no promise considering API stability. Some response objects
maybe be typed incorrectly. The package is already usable, though. See the
examples
directory.
To check the API coverate, please check the README files in the relevat API
package in the apis
subdirectory.
License
MIT, see the LICENSE
file.
Documentation ¶
Index ¶
- Variables
- func GenerateProposalOperation(ops []operations.Operation) operations.ProposalObjects
- func JSONOpString(v []operations.Operation) (string, error)
- func JSONTrxString(v *transactions.SignedTransaction) (string, error)
- func SetAsset(amount float64, symbol string) *types.Asset
- type Client
- func (client *Client) Close() error
- func (client *Client) GetTrx(strx []operations.Operation) (*operations.Transaction, error)
- func (client *Client) SendTrx(username string, strx []operations.Operation) (*types.OperationResponse, error)
- func (client *Client) SetAsyncProtocol(value bool)
- func (client *Client) SetKeys(keys *Keys)
- func (client *Client) SigningKeys(trx operations.Operation) ([][]byte, error)
- type Keys
Constants ¶
This section is empty.
Variables ¶
var (
ErrInitializeTransport = errors.New("Failed to initialize transport.")
)
var ( //OpTypeKey include a description of the operation and the key needed to sign it OpTypeKey = make(map[operations.OpType][]string) )
Functions ¶
func GenerateProposalOperation ¶
func GenerateProposalOperation(ops []operations.Operation) operations.ProposalObjects
GenerateProposalOperation generate []Operation to ProposalOperations
func JSONOpString ¶
func JSONOpString(v []operations.Operation) (string, error)
JSONOpString generate Operations to String
func JSONTrxString ¶
func JSONTrxString(v *transactions.SignedTransaction) (string, error)
JSONTrxString generate Trx to String
Types ¶
type Client ¶
type Client struct { API *api.API Config api.Config // Current keys for operations CurrentKeys *Keys // contains filtered or unexported fields }
Client can be used to access GOLOS remote APIs. There is a function for every available GOLOS API, for example, Client.API.GetDatabaseInfo() corresponds to database_api -> get_database_info.
func NewClient ¶
NewClient creates a new RPC client that use the given CallCloser internally. Initialize only server present API. Absent API initialized as nil value.
func (*Client) Close ¶
Close should be used to close the client when no longer needed. It simply calls Close() on the underlying CallCloser.
func (*Client) GetTrx ¶
func (client *Client) GetTrx(strx []operations.Operation) (*operations.Transaction, error)
func (*Client) SendTrx ¶
func (client *Client) SendTrx(username string, strx []operations.Operation) (*types.OperationResponse, error)
SendTrx generates and sends an array of transactions to VIZ.
func (*Client) SetAsyncProtocol ¶
SetAsyncProtocol enables or disables the asynchronous operation protocol
func (*Client) SigningKeys ¶
func (client *Client) SigningKeys(trx operations.Operation) ([][]byte, error)
SigningKeys returns the key from the CurrentKeys