Categorygithub.com/irisnet/irishub-sdk-go
modulepackage
0.1.0
Repository: https://github.com/irisnet/irishub-sdk-go.git
Documentation: pkg.go.dev

# README

IRISHUB Chain Go SDK

Irishub Chain GO SDK makes a simple package of API provided by Irishub, which provides great convenience for users to quickly develop applications based on irishub chain.

install

Requirement

Go version above 1.13.5

Use Go Mod

require (
    github.com/irisnet/irishub-sdk-go latest
)
replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1

Usage

Init Client

The initialization SDK code is as follows:

options := []types.Option{
types.KeyDAOOption(store.NewMemory(nil)),
types.TimeoutOption(10),
}
cfg, err := types.NewClientConfig(nodeURI, chainID, options...)
if err != nil {
panic(err)
}
client := sdk.NewIRISHUBClient(cfg)

The ClientConfig component mainly contains the parameters used in the SDK, the specific meaning is shown in the table below

ItermTypeDescription
NodeURIstringThe RPC address of the irishub node connected to the SDK, for example: localhost: 26657
GRPCAddrstringThe GRPC address of the irishub node connected to the SDK, for example: localhost: 9090
Networkenumirishub network type, value: Testnet,Mainnet
ChainIDstringChainID of irishub, for example: irishub
Gasuint64The maximum gas to be paid for the transaction, for example: 20000
FeeDecCoinsTransaction fees to be paid for transactions
KeyDAOKeyDAOPrivate key management interface, If the user does not provide it, the default LevelDB will be used
ModeenumTransaction broadcast mode, value: Sync,Async, Commit
StoreTypeenumPrivate key storage method, value: Keystore,PrivKey
Timeouttime.DurationTransaction timeout, for example: 5s
LevelstringLog output level, for example: info

If you want to use SDK to send a transfer transaction, the example is as follows:

There is more example of query and send tx

coins, err := types.ParseDecCoins("0.1iris")
to := "iaa1hp29kuh22vpjjlnctmyml5s75evsnsd8r4x0mm"
baseTx := types.BaseTx{
    From:     "username",
    Gas:      20000,
    Memo:     "test",
    Mode:     types.Commit,
    Password: "password",
}

result, err := client.Bank.Send(to, coins, baseTx)

query Latest Block info

block, err := client.BaseClient.Block(context.Background(),nil)

query Tx from specify TxHash

txHash := "D9280C9217B5626107DF9BC97A44C42357537806343175F869F0D8A5A0D94ADD"
txResult, err := client.BaseClient.QueryTx(txHash)

get TxHash before sending transactions

baseTx := types.BaseTx{
    From:     "username",
    Gas:      20000,
    Memo:     "test",
    Mode:     types.Commit,
    Password: "password",
}

amt, err := types.ParseCoins("10iris")

from := "iaa12py6r8hhzpwdhat93cde4p3rfl6w4qnmwcqfhn"
to := "iaa1hp29kuh22vpjjlnctmyml5s75evsnsd8r4x0mm"
msg := &bank.MsgSend{
	FromAddress: addr,
	ToAddress:   to,
	Amount:      amt,
}
txhash, err := s.BuildTxHash([]sdk.Msg{msg}, baseTx)

Note: If you use the relevant API for sending transactions, you should implement the KeyDAO interface. Use the NewKeyDaoWithAES method to initialize a KeyDAO instance, which will use the AES encryption method by default.

KeyDAO

The interface definition is as follows:

type KeyDAO interface {
    AccountAccess
    Crypto
}

type AccountAccess interface {
    Write(name string, store Store) error
    Read(name string) (Store,error)
    Delete(name string) error
}
type Crypto interface {
    Encrypt(data string, password string) (string, error)
    Decrypt(data string, password string) (string, error)
}

Among them, Store includes two storage methods, one is based on the private key, which is defined as follows:

type KeyInfo struct {
    PrivKey string `json:"priv_key"`
    Address string `json:"address"`
}

The other is based on the keystore, defined as follows:

type KeystoreInfo struct {
    Keystore string `json:"keystore"`
}

You can flexibly choose any of the private key management methods. The Encrypt and Decrypt interfaces are used to encrypt and decrypt the key. If the user does not implement it, the default is to use AES. Examples are as follows:

KeyDao implements the AccountAccess interface:

// Use memory as storage, use with caution in build environment
type MemoryDB struct {
    store map[string]Store
    AES
}

func NewMemoryDB() MemoryDB {
    return MemoryDB{
        store: make(map[string]Store),
    }
}
func (m MemoryDB) Write(name string, store Store) error {
    m.store[name] = store
    return nil
}

func (m MemoryDB) Read(name string) (Store, error) {
    return m.store[name], nil
}

func (m MemoryDB) Delete(name string) error {
    delete(m.store, name)
    return nil
}

func (m MemoryDB) Has(name string) bool {
    _, ok := m.store[name]
    return ok
}

If your keystore generated before irishub V0.16, you can see package keystore to convert

For more API usage documentation, please check documentation

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Package modules is to warpped the API provided by each module of IRIS-Hub .
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author
RegisterInterfaces registers the sdk message type.
RegisterLegacyAminoCodec registers the sdk message type.

# Structs

No description provided by the author