mixin

package module
v1.1.8 Latest Latest
Warning

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

Go to latest
Published: Nov 2, 2020 License: MIT Imports: 42 Imported by: 130

README

mixin-sdk-go

Golang sdk for Mixin Network & Mixin Messenger

Install

go get -u github.com/fox-one/mixin-sdk-go

Features

  • Comprehensive most of the Mixin Network & Mixin Messenger api supported
  • Security verify Response X-Request-ID & signature automatically
  • Flexible initialize Client from keystore, ed25519_oauth_token or access_token

Examples

See _examples/ for a variety of examples.

Quick Start

package main

import (
	"context"
	"log"

	"github.com/fox-one/mixin-sdk-go"
)

func main() {
	ctx := context.Background()
	s := &mixin.Keystore{
		ClientID:   "",
		SessionID:  "",
		PrivateKey: "",
		PinToken: "",
	}

	client, err := mixin.NewFromKeystore(s)
	if err != nil {
		log.Panicln(err)
	}

	user, err := client.UserMe(ctx)
	if err != nil {
		log.Printf("UserMe: %v", err)
		return
	}

	log.Println("user id", user.UserID)
}

Error handling?

check error code by mixin.IsErrorCodes

if _, err := client.UserMe(ctx); err != nil {
    switch {
    case mixin.IsErrorCodes(err,mixin.Unauthorized,mixin.EndpointNotFound):
    	// handle unauthorized error
    case mixin.IsErrorCodes(err,mixin.InsufficientBalance):
        // handle insufficient balance error
    default:
    }
}

Documentation

Index

Constants

View Source
const (
	ScopeProfileRead   = "PROFILE:READ"
	ScopePhoneRead     = "PHONE:READ"
	ScopeContactRead   = "CONTACTS:READ"
	ScopeAssetsRead    = "ASSETS:READ"
	ScopeSnapshotsRead = "SNAPSHOTS:READ"

	ScopeFull = "FULL"
)
View Source
const (
	CreateMessageAction      = "CREATE_MESSAGE"
	AcknowledgeReceiptAction = "ACKNOWLEDGE_MESSAGE_RECEIPT"
)
View Source
const (
	ConversationCategoryContact = "CONTACT"
	ConversationCategoryGroup   = "GROUP"

	ParticipantActionAdd    = "ADD"
	ParticipantActionRemove = "REMOVE"
	ParticipantActionJoin   = "JOIN"
	ParticipantActionExit   = "EXIT"
	ParticipantActionRole   = "ROLE"

	ParticipantRoleAdmin  = "ADMIN"
	ParticipantRoleMember = ""
)
View Source
const (
	DefaultApiHost      = "https://api.mixin.one"
	DefaultBlazeHost    = "blaze.mixin.one"
	DefaultMixinNetHost = "http://node-42.f1ex.io:8239"

	ZeromeshApiHost   = "https://mixin-api.zeromesh.net"
	ZeromeshBlazeHost = "mixin-blaze.zeromesh.net"

	EchoApiHost = "https://echo.yiplee.com"
)
View Source
const (
	Unauthorized        = 401
	EndpointNotFound    = 404
	InsufficientBalance = 20117
	PinIncorrect        = 20119
	InsufficientFee     = 20124
	InvalidTraceID      = 20125
	InvalidReceivers    = 20150

	InvalidOutputKey = 2000001
	InputLocked      = 2000002
	InvalidSignature = 2000003
)

mixin error codes https://developers.mixin.one/api/alpha-mixin-network/errors/

View Source
const (
	MessageCategoryPlainText             = "PLAIN_TEXT"
	MessageCategoryPlainPost             = "PLAIN_POST"
	MessageCategoryPlainImage            = "PLAIN_IMAGE"
	MessageCategoryPlainData             = "PLAIN_DATA"
	MessageCategoryPlainSticker          = "PLAIN_STICKER"
	MessageCategoryPlainLive             = "PLAIN_LIVE"
	MessageCategoryPlainVideo            = "PLAIN_VIDEO"
	MessageCategoryPlainContact          = "PLAIN_CONTACT"
	MessageCategoryAppCard               = "APP_CARD"
	MessageCategoryAppButtonGroup        = "APP_BUTTON_GROUP"
	MessageCategoryMessageRecall         = "MESSAGE_RECALL"
	MessageCategorySystemConversation    = "SYSTEM_CONVERSATION"
	MessageCategorySystemAccountSnapshot = "SYSTEM_ACCOUNT_SNAPSHOT"

	MessageStatusSent = "SENT"
	MessageStatusRead = "READ"
)
View Source
const (
	Operator0   = 0x00
	Operator64  = 0x40
	OperatorSum = 0xfe
	OperatorCmp = 0xff
)
View Source
const (
	UTXOStateUnspent = "unspent"
	UTXOStateSigned  = "signed"
	UTXOStateSpent   = "spent"
)
View Source
const (
	MultisigActionSign   = "sign"
	MultisigActionUnlock = "unlock"
)
View Source
const (
	MultisigStateInitial = "initial"
	MultisigStateSigned  = "signed"
)
View Source
const (
	PaymentStatusPending = "pending"
	PaymentStatusPaid    = "paid"
)
View Source
const Precision = 8
View Source
const Scheme = "mixin"
View Source
const (
	TxVersion = 0x01
)

Variables

View Source
var (
	ErrResponseVerifyFailed = errors.New("response verify failed")
)
View Source
var URL urlScheme

Functions

func AuthorizeToken

func AuthorizeToken(ctx context.Context, clientID, clientSecret string, code string, verifier string) (string, string, error)

func DecodeMixinNetResponse added in v1.0.12

func DecodeMixinNetResponse(resp *resty.Response) ([]byte, error)

func DecodeResponse

func DecodeResponse(resp *resty.Response) ([]byte, error)

func GenerateEd25519Key

func GenerateEd25519Key() ed25519.PrivateKey

func GetClient added in v1.0.8

func GetClient() *http.Client

func HashMembers added in v1.1.6

func HashMembers(ids []string) string

func IsErrorCodes

func IsErrorCodes(err error, codes ...int) bool

func RandomPin

func RandomPin() string

func RandomTraceID

func RandomTraceID() string

func Request

func Request(ctx context.Context) *resty.Request

func RequestIdFromContext

func RequestIdFromContext(ctx context.Context) string

func SignRaw

func SignRaw(method, uri string, body []byte) string

func SignRequest

func SignRequest(r *http.Request) string

func SignResponse

func SignResponse(r *resty.Response) string

func UniqueConversationID

func UniqueConversationID(userID, recipientID string) string

func UnmarshalMixinNetResponse added in v1.0.12

func UnmarshalMixinNetResponse(resp *resty.Response, v interface{}) error

func UnmarshalResponse

func UnmarshalResponse(resp *resty.Response, v interface{}) error

func UploadAttachment

func UploadAttachment(ctx context.Context, attachment *Attachment, file []byte) error

func UploadAttachmentTo added in v1.0.4

func UploadAttachmentTo(ctx context.Context, uploadURL string, file []byte) error

func UseApiHost

func UseApiHost(host string)

func UseBlazeHost

func UseBlazeHost(host string)

func UseMixinNetHost added in v1.0.12

func UseMixinNetHost(host string)

func ValidatePinPattern added in v1.0.5

func ValidatePinPattern(pin string) error

ValidatePinPattern validate the pin with pinRegex

func WithRequestID

func WithRequestID(ctx context.Context, requestID string) context.Context

WithRequestID bind request id to context request id must be uuid

func WithSigner

func WithSigner(ctx context.Context, s Signer) context.Context

func WithVerifier

func WithVerifier(ctx context.Context, v Verifier) context.Context

Types

type AcknowledgementRequest

type AcknowledgementRequest struct {
	MessageID string `json:"message_id,omitempty"`
	Status    string `json:"status,omitempty"`
}

type Address

type Address struct {
	AddressID   string          `json:"address_id,omitempty"`
	AssetID     string          `json:"asset_id"`
	Label       string          `json:"label,omitempty"`
	Destination string          `json:"destination,omitempty"`
	Tag         string          `json:"tag,omitempty"`
	Fee         decimal.Decimal `json:"fee,omitempty"`
	Dust        decimal.Decimal `json:"dust,omitempty"`
}

func ReadAddress

func ReadAddress(ctx context.Context, accessToken, addressID string) (*Address, error)

func ReadAddresses

func ReadAddresses(ctx context.Context, accessToken, assetID string) ([]*Address, error)

type App

type App struct {
	UpdatedAt        time.Time `json:"updated_at,omitempty"`
	AppID            string    `json:"app_id,omitempty"`
	AppNumber        string    `json:"app_number,omitempty"`
	RedirectURL      string    `json:"redirect_url,omitempty"`
	HomeURL          string    `json:"home_url,omitempty"`
	Name             string    `json:"name,omitempty"`
	IconURL          string    `json:"icon_url,omitempty"`
	Description      string    `json:"description,omitempty"`
	Capabilities     []string  `json:"capabilities,omitempty"`
	ResourcePatterns []string  `json:"resource_patterns,omitempty"`
	Category         string    `json:"category,omitempty"`
	CreatorID        string    `json:"creator_id,omitempty"`
	AppSecret        string    `json:"app_secret,omitempty"`
}

type AppButtonGroupMessage

type AppButtonGroupMessage []AppButtonMessage

type AppButtonMessage

type AppButtonMessage struct {
	Label  string `json:"label,omitempty"`
	Action string `json:"action,omitempty"`
	Color  string `json:"color,omitempty"`
}

type AppCardMessage

type AppCardMessage struct {
	IconURL     string `json:"icon_url,omitempty"`
	Title       string `json:"title,omitempty"`
	Description string `json:"description,omitempty"`
	Action      string `json:"action,omitempty"`
}

type Asset

type Asset struct {
	AssetID        string          `json:"asset_id"`
	ChainID        string          `json:"chain_id"`
	AssetKey       string          `json:"asset_key,omitempty"`
	MixinID        string          `json:"mixin_id,omitempty"`
	Symbol         string          `json:"symbol,omitempty"`
	Name           string          `json:"name,omitempty"`
	IconURL        string          `json:"icon_url,omitempty"`
	PriceBTC       decimal.Decimal `json:"price_btc,omitempty"`
	ChangeBTC      decimal.Decimal `json:"change_btc,omitempty"`
	PriceUSD       decimal.Decimal `json:"price_usd,omitempty"`
	ChangeUsd      decimal.Decimal `json:"change_usd,omitempty"`
	Balance        decimal.Decimal `json:"balance,omitempty"`
	Destination    string          `json:"destination,omitempty"`
	Tag            string          `json:"tag,omitempty"`
	Confirmations  int             `json:"confirmations,omitempty"`
	Capitalization float64         `json:"capitalization,omitempty"`
}

func ReadAsset

func ReadAsset(ctx context.Context, accessToken, assetID string) (*Asset, error)

func ReadAssets

func ReadAssets(ctx context.Context, accessToken string) ([]*Asset, error)

func ReadTopNetworkAssets

func ReadTopNetworkAssets(ctx context.Context) ([]*Asset, error)

type Attachment

type Attachment struct {
	AttachmentID string `json:"attachment_id"`
	UploadURL    string `json:"upload_url"`
	ViewURL      string `json:"view_url"`
}

type AudioMessage

type AudioMessage struct {
	AttachmentID string `json:"attachment_id,omitempty"`
	MimeType     string `json:"mime_type,omitempty"`
	WaveForm     string `json:"wave_form,omitempty"`
	Size         int    `json:"size,omitempty"`
	Duration     int    `json:"duration,omitempty"`
}

type BlazeListenFunc

type BlazeListenFunc func(ctx context.Context, msg *MessageView, userID string) error

func (BlazeListenFunc) OnAckReceipt

func (f BlazeListenFunc) OnAckReceipt(ctx context.Context, msg *MessageView, userID string) error

func (BlazeListenFunc) OnMessage

func (f BlazeListenFunc) OnMessage(ctx context.Context, msg *MessageView, userID string) error

type BlazeListener

type BlazeListener interface {
	OnAckReceipt(ctx context.Context, msg *MessageView, userID string) error
	OnMessage(ctx context.Context, msg *MessageView, userID string) error
}

type BlazeMessage

type BlazeMessage struct {
	Id     string                 `json:"id"`
	Action string                 `json:"action"`
	Params map[string]interface{} `json:"params,omitempty"`
	Data   json.RawMessage        `json:"data,omitempty"`
	Error  *Error                 `json:"error,omitempty"`
}

type Client

type Client struct {
	Signer
	Verifier

	ClientID string
}

func NewFromAccessToken

func NewFromAccessToken(accessToken string) *Client

func NewFromKeystore

func NewFromKeystore(keystore *Keystore) (*Client, error)

func NewFromOauthKeystore

func NewFromOauthKeystore(keystore *OauthKeystore) (*Client, error)

func (*Client) AddParticipants

func (c *Client) AddParticipants(ctx context.Context, conversationID string, users ...string) (*Conversation, error)

func (*Client) AdminParticipants

func (c *Client) AdminParticipants(ctx context.Context, conversationID string, users ...string) (*Conversation, error)

func (*Client) CancelMultisig added in v1.0.12

func (c *Client) CancelMultisig(ctx context.Context, reqID string) error

CancelMultisig cancel a multisig request

func (*Client) CreateAddress

func (c *Client) CreateAddress(ctx context.Context, input CreateAddressInput, pin string) (*Address, error)

func (*Client) CreateAttachment

func (c *Client) CreateAttachment(ctx context.Context) (*Attachment, error)

func (*Client) CreateContactConversation

func (c *Client) CreateContactConversation(ctx context.Context, userID string) (*Conversation, error)

CreateContactConversation create a conversation with a mixin messenger user

func (*Client) CreateConversation

func (c *Client) CreateConversation(ctx context.Context, input *CreateConversationInput) (*Conversation, error)

CreateConversation crate conversation

func (*Client) CreateGroupConversation

func (c *Client) CreateGroupConversation(ctx context.Context, conversationID, name string, participants []*Participant) (*Conversation, error)

CreateGroupConversation create a group in mixin messenger with given participants

func (*Client) CreateMultisig added in v1.0.12

func (c *Client) CreateMultisig(ctx context.Context, action, raw string) (*MultisigRequest, error)

CreateMultisig create a multisig request

func (*Client) CreateUser

func (c *Client) CreateUser(ctx context.Context, key crypto.Signer, fullname string) (*User, *Keystore, error)

func (*Client) DeleteAddress

func (c *Client) DeleteAddress(ctx context.Context, addressID, pin string) error

func (*Client) FavoriteApp added in v1.0.3

func (c *Client) FavoriteApp(ctx context.Context, appID string) (*FavoriteApp, error)

func (*Client) Get

func (c *Client) Get(ctx context.Context, uri string, params map[string]string, resp interface{}) error

func (*Client) LoopBlaze

func (c *Client) LoopBlaze(ctx context.Context, listener BlazeListener) error

func (*Client) MakeMultisigTransaction added in v1.1.1

func (c *Client) MakeMultisigTransaction(ctx context.Context, input *TransactionInput) (*Transaction, error)

func (*Client) ManageConversation

func (c *Client) ManageConversation(ctx context.Context, conversationID, action string, participants []*Participant) (*Conversation, error)

func (*Client) ModifyPin

func (c *Client) ModifyPin(ctx context.Context, pin, newPin string) error

func (*Client) ModifyProfile

func (c *Client) ModifyProfile(ctx context.Context, fullname, avatarBase64 string) (*User, error)

func (*Client) Post

func (c *Client) Post(ctx context.Context, uri string, body interface{}, resp interface{}) error

func (*Client) ReadAddress

func (c *Client) ReadAddress(ctx context.Context, addressID string) (*Address, error)

func (*Client) ReadAddresses

func (c *Client) ReadAddresses(ctx context.Context, assetID string) ([]*Address, error)

func (*Client) ReadApp

func (c *Client) ReadApp(ctx context.Context, appID string) (*App, error)

func (*Client) ReadAsset

func (c *Client) ReadAsset(ctx context.Context, assetID string) (*Asset, error)

func (*Client) ReadAssetFee

func (c *Client) ReadAssetFee(ctx context.Context, assetID string) (decimal.Decimal, error)

func (*Client) ReadAssets

func (c *Client) ReadAssets(ctx context.Context) ([]*Asset, error)

func (*Client) ReadConversation

func (c *Client) ReadConversation(ctx context.Context, conversationID string) (*Conversation, error)

ReadConversation read conversation

func (*Client) ReadExchangeRates

func (c *Client) ReadExchangeRates(ctx context.Context) ([]ExchangeRate, error)

func (*Client) ReadFavoriteApps

func (c *Client) ReadFavoriteApps(ctx context.Context, userID string) ([]*FavoriteApp, error)

func (*Client) ReadFriends

func (c *Client) ReadFriends(ctx context.Context) ([]*User, error)

func (*Client) ReadGhostKeys added in v1.0.12

func (c *Client) ReadGhostKeys(ctx context.Context, receivers []string, index int) (*GhostKeys, error)

func (*Client) ReadMultisigOutputs added in v1.0.12

func (c *Client) ReadMultisigOutputs(ctx context.Context, members []string, threshold uint8, offset time.Time, limit int) ([]*MultisigUTXO, error)

ReadMultisigOutputs return a list of multisig outputs, including unspent, signed, spent utxos

func (*Client) ReadMultisigs added in v1.0.12

func (c *Client) ReadMultisigs(ctx context.Context, offset time.Time, limit int) ([]*MultisigUTXO, error)

ReadMultisigs return a list of multisig utxos

func (*Client) ReadNetworkSnapshot

func (c *Client) ReadNetworkSnapshot(ctx context.Context, snapshotID string) (*Snapshot, error)

func (*Client) ReadNetworkSnapshots

func (c *Client) ReadNetworkSnapshots(ctx context.Context, assetID string, offset time.Time, order string, limit int) ([]*Snapshot, error)

func (*Client) ReadSnapshot

func (c *Client) ReadSnapshot(ctx context.Context, snapshotID string) (*Snapshot, error)

func (*Client) ReadSnapshots

func (c *Client) ReadSnapshots(ctx context.Context, assetID string, offset time.Time, order string, limit int) ([]*Snapshot, error)

ReadSnapshots return a list of snapshots order must be `ASC` or `DESC`

func (*Client) ReadTransfer

func (c *Client) ReadTransfer(ctx context.Context, traceID string) (*Snapshot, error)

func (*Client) ReadTurnServers

func (c *Client) ReadTurnServers(ctx context.Context) ([]*Turn, error)

func (*Client) ReadUser

func (c *Client) ReadUser(ctx context.Context, userIdOrIdentityNumber string) (*User, error)

func (*Client) ReadUsers

func (c *Client) ReadUsers(ctx context.Context, ids ...string) ([]*User, error)

func (*Client) RemoveParticipants

func (c *Client) RemoveParticipants(ctx context.Context, conversationID string, users ...string) (*Conversation, error)

func (*Client) Request

func (c *Client) Request(ctx context.Context) *resty.Request

func (*Client) RotateConversation

func (c *Client) RotateConversation(ctx context.Context, conversationID string) (*Conversation, error)

func (*Client) SearchUser

func (c *Client) SearchUser(ctx context.Context, identityNumber string) (*User, error)

deprecated. Use ReadUser() instead

func (*Client) SendAcknowledgement

func (c *Client) SendAcknowledgement(ctx context.Context, request *AcknowledgementRequest) error

func (*Client) SendAcknowledgements

func (c *Client) SendAcknowledgements(ctx context.Context, requests []*AcknowledgementRequest) error

func (*Client) SendMessage

func (c *Client) SendMessage(ctx context.Context, message *MessageRequest) error

func (*Client) SendMessages

func (c *Client) SendMessages(ctx context.Context, messages []*MessageRequest) error

func (*Client) SendRawMessages

func (c *Client) SendRawMessages(ctx context.Context, messages []json.RawMessage) error

func (*Client) ShowAttachment

func (c *Client) ShowAttachment(ctx context.Context, id string) (*Attachment, error)

func (*Client) SignMultisig added in v1.0.12

func (c *Client) SignMultisig(ctx context.Context, reqID, pin string) (*MultisigRequest, error)

SignMultisig sign a multisig request

func (*Client) Transaction

func (c *Client) Transaction(ctx context.Context, in *TransferInput, pin string) (*RawTransaction, error)

func (*Client) Transfer

func (c *Client) Transfer(ctx context.Context, input *TransferInput, pin string) (*Snapshot, error)

func (*Client) UnlockMultisig added in v1.0.12

func (c *Client) UnlockMultisig(ctx context.Context, reqID, pin string) error

UnlockMultisig unlock a multisig request

func (*Client) UpdateApp added in v1.0.9

func (c *Client) UpdateApp(ctx context.Context, appID string, req UpdateAppRequest) (*App, error)

func (*Client) UserMe

func (c *Client) UserMe(ctx context.Context) (*User, error)

func (*Client) VerifyPayment

func (c *Client) VerifyPayment(ctx context.Context, input TransferInput) (*Payment, error)

func (*Client) VerifyPin

func (c *Client) VerifyPin(ctx context.Context, pin string) error

func (*Client) Withdraw

func (c *Client) Withdraw(ctx context.Context, input WithdrawInput, pin string) (*Snapshot, error)

type ContactMessage

type ContactMessage struct {
	UserID string `json:"user_id,omitempty"`
}

type Conversation

type Conversation struct {
	ConversationID string `json:"conversation_id,omitempty"`
	CreatorID      string `json:"creator_id,omitempty"`
	Category       string `json:"category,omitempty"`
	Name           string `json:"name,omitempty"`
	IconURL        string `json:"icon_url,omitempty"`
	Announcement   string `json:"announcement,omitempty"`
	CreatedAt      string `json:"created_at,omitempty"`
	CodeID         string `json:"code_id,omitempty"`
	CodeURL        string `json:"code_url,omitempty"`

	Participants []*Participant `json:"participants,omitempty"`
}

Conversation conversation

type CreateAddressInput

type CreateAddressInput struct {
	AssetID     string `json:"asset_id"`
	Destination string `json:"destination,omitempty"`
	Tag         string `json:"tag,omitempty"`
	Label       string `json:"label,omitempty"`
}

type CreateConversationInput

type CreateConversationInput struct {
	Category       string         `json:"category,omitempty"`
	ConversationID string         `json:"conversation_id,omitempty"`
	Name           string         `json:"name,omitempty"`
	Participants   []*Participant `json:"participants,omitempty"`
}

type DataMessage

type DataMessage struct {
	AttachmentID string `json:"attachment_id,omitempty"`
	MimeType     string `json:"mime_type,omitempty"`
	Size         int    `json:"size,omitempty"`
	Name         string `json:"name,omitempty"`
}

type DepositData added in v1.1.5

type DepositData struct {
	Chain           Hash    `json:"chain"`
	AssetKey        string  `json:"asset"`
	TransactionHash string  `json:"transaction"`
	OutputIndex     uint64  `json:"index"`
	Amount          Integer `json:"amount"`
}

type EdDSASigningMethod

type EdDSASigningMethod struct{}
var Ed25519SigningMethod *EdDSASigningMethod

func (*EdDSASigningMethod) Alg

func (sm *EdDSASigningMethod) Alg() string

func (*EdDSASigningMethod) Sign

func (sm *EdDSASigningMethod) Sign(signingString string, key interface{}) (string, error)

func (*EdDSASigningMethod) Verify

func (sm *EdDSASigningMethod) Verify(signingString, signature string, key interface{}) error

type Error

type Error struct {
	Status      int                    `json:"status"`
	Code        int                    `json:"code"`
	Description string                 `json:"description"`
	Extra       map[string]interface{} `json:"extra,omitempty"`
}

func (*Error) Error

func (e *Error) Error() string

type ExchangeRate

type ExchangeRate struct {
	Code string          `json:"code,omitempty"`
	Rate decimal.Decimal `json:"rate,omitempty"`
}

type ExternalTransaction

type ExternalTransaction struct {
	TransactionID   string          `json:"transaction_id"`
	CreatedAt       time.Time       `json:"created_at"`
	TransactionHash string          `json:"transaction_hash"`
	Sender          string          `json:"sender"`
	ChainId         string          `json:"chain_id"`
	AssetId         string          `json:"asset_id"`
	Amount          decimal.Decimal `json:"amount"`
	Destination     string          `json:"destination"`
	Tag             string          `json:"tag"`
	Confirmations   int64           `json:"confirmations"`
	Threshold       int64           `json:"threshold"`
}

func ReadExternalTransactions

func ReadExternalTransactions(ctx context.Context, assetID, destination, tag string) ([]*ExternalTransaction, error)

type FavoriteApp

type FavoriteApp struct {
	UserID    string    `json:"user_id,omitempty"`
	AppID     string    `json:"app_id,omitempty"`
	CreatedAt time.Time `json:"created_at,omitempty"`
}

type GhostKeys added in v1.0.12

type GhostKeys struct {
	Mask Key   `json:"mask"`
	Keys []Key `json:"keys"`
}

GhostKeys transaction ghost keys

func (GhostKeys) DumpOutput added in v1.1.1

func (g GhostKeys) DumpOutput(threshold uint8, amount decimal.Decimal) *Output

type Hash added in v1.1.5

type Hash [32]byte

func HashFromString added in v1.1.5

func HashFromString(src string) (Hash, error)

func NewHash added in v1.1.5

func NewHash(data []byte) Hash

func (Hash) MarshalJSON added in v1.1.5

func (h Hash) MarshalJSON() ([]byte, error)

func (Hash) String added in v1.1.5

func (h Hash) String() string

func (*Hash) UnmarshalJSON added in v1.1.5

func (h *Hash) UnmarshalJSON(b []byte) error

type ImageMessage

type ImageMessage struct {
	AttachmentID string `json:"attachment_id,omitempty"`
	MimeType     string `json:"mime_type,omitempty"`
	Width        int    `json:"width,omitempty"`
	Height       int    `json:"height,omitempty"`
	Size         int    `json:"size,omitempty"`
	Thumbnail    []byte `json:"thumbnail,omitempty"`
}

type Input added in v1.0.12

type Input struct {
	Hash    *Hash        `json:"hash,omitempty"`
	Index   int          `json:"index,omitempty"`
	Genesis []byte       `json:"genesis,omitempty"`
	Deposit *DepositData `json:"deposit,omitempty"`
	Mint    *MintData    `json:"mint,omitempty"`
}

type Integer added in v1.1.5

type Integer struct {
	// contains filtered or unexported fields
}

func NewIntegerFromDecimal added in v1.1.5

func NewIntegerFromDecimal(d decimal.Decimal) (v Integer)

func NewIntegerFromString added in v1.1.5

func NewIntegerFromString(x string) (v Integer)

func (Integer) MarshalJSON added in v1.1.5

func (x Integer) MarshalJSON() ([]byte, error)

func (Integer) MarshalMsgpack added in v1.1.5

func (x Integer) MarshalMsgpack() ([]byte, error)

func (Integer) String added in v1.1.5

func (x Integer) String() string

func (*Integer) UnmarshalJSON added in v1.1.5

func (x *Integer) UnmarshalJSON(b []byte) error

func (*Integer) UnmarshalMsgpack added in v1.1.5

func (x *Integer) UnmarshalMsgpack(data []byte) error

type Key added in v1.1.5

type Key [32]byte

func KeyFromString added in v1.1.5

func KeyFromString(s string) (Key, error)

func (Key) MarshalJSON added in v1.1.5

func (k Key) MarshalJSON() ([]byte, error)

func (Key) String added in v1.1.5

func (k Key) String() string

func (*Key) UnmarshalJSON added in v1.1.5

func (k *Key) UnmarshalJSON(b []byte) error

type Keystore

type Keystore struct {
	ClientID   string `json:"client_id"`
	SessionID  string `json:"session_id"`
	PrivateKey string `json:"private_key"`
	PinToken   string `json:"pin_token"`
	Scope      string `json:"scope"`
	// contains filtered or unexported fields
}

type KeystoreAuth

type KeystoreAuth struct {
	*Keystore
	// contains filtered or unexported fields
}

func AuthEd25519FromKeystore added in v1.1.7

func AuthEd25519FromKeystore(store *Keystore) (*KeystoreAuth, error)

AuthEd25519FromKeystore produces a signer using a ed25519 keystore.

func AuthFromKeystore

func AuthFromKeystore(store *Keystore) (*KeystoreAuth, error)

func (*KeystoreAuth) EncryptPin

func (k *KeystoreAuth) EncryptPin(pin string) string

func (*KeystoreAuth) SignToken

func (k *KeystoreAuth) SignToken(signature, requestID string, exp time.Duration) string

type LiveMessage

type LiveMessage struct {
	Width    int    `json:"width"`
	Height   int    `json:"height"`
	ThumbUrl string `json:"thumb_url"`
	URL      string `json:"url"`
}

type LocationMessage

type LocationMessage struct {
	Name      string  `json:"name,omitempty"`
	Address   string  `json:"address,omitempty"`
	Longitude float64 `json:"longitude,omitempty"`
	Latitude  float64 `json:"latitude,omitempty"`
}

type MessageRequest

type MessageRequest struct {
	ConversationID   string `json:"conversation_id"`
	RecipientID      string `json:"recipient_id"`
	MessageID        string `json:"message_id"`
	Category         string `json:"category"`
	Data             string `json:"data"`
	RepresentativeID string `json:"representative_id,omitempty"`
	QuoteMessageID   string `json:"quote_message_id,omitempty"`
}

type MessageView

type MessageView struct {
	ConversationID   string    `json:"conversation_id"`
	UserID           string    `json:"user_id"`
	MessageID        string    `json:"message_id"`
	Category         string    `json:"category"`
	Data             string    `json:"data"`
	RepresentativeID string    `json:"representative_id"`
	QuoteMessageID   string    `json:"quote_message_id"`
	Status           string    `json:"status"`
	Source           string    `json:"source"`
	CreatedAt        time.Time `json:"created_at"`
	UpdatedAt        time.Time `json:"updated_at"`
	// contains filtered or unexported fields
}

func (*MessageView) Ack

func (m *MessageView) Ack()

Ack mark messageView as acked otherwise sdk will ack this message

type MintData added in v1.1.5

type MintData struct {
	Group  string  `json:"group"`
	Batch  uint64  `json:"batch"`
	Amount Integer `json:"amount"`
}

type MultisigRequest added in v1.0.12

type MultisigRequest struct {
	Type            string          `json:"type"`
	RequestID       string          `json:"request_id"`
	UserID          string          `json:"user_id"`
	AssetID         string          `json:"asset_id"`
	Amount          decimal.Decimal `json:"amount"`
	Threshold       uint8           `json:"threshold"`
	Senders         []string        `json:"senders"`
	Receivers       []string        `json:"receivers"`
	Signers         []string        `json:"signers"`
	Memo            string          `json:"memo"`
	Action          string          `json:"action"`
	State           string          `json:"state"`
	TransactionHash Hash            `json:"transaction_hash"`
	RawTransaction  string          `json:"raw_transaction"`
	CreatedAt       time.Time       `json:"created_at"`
	UpdatedAt       time.Time       `json:"updated_at"`
	CodeID          string          `json:"code_id"`
}

type MultisigUTXO added in v1.0.12

type MultisigUTXO struct {
	Type            string          `json:"type"`
	UserID          string          `json:"user_id"`
	UTXOID          string          `json:"utxo_id"`
	AssetID         string          `json:"asset_id"`
	TransactionHash Hash            `json:"transaction_hash"`
	OutputIndex     int             `json:"output_index"`
	Amount          decimal.Decimal `json:"amount"`
	Threshold       uint8           `json:"threshold"`
	Members         []string        `json:"members"`
	Memo            string          `json:"memo"`
	State           string          `json:"state"`
	CreatedAt       time.Time       `json:"created_at"`
	UpdatedAt       time.Time       `json:"updated_at"`
	SignedBy        string          `json:"signed_by"`
	SignedTx        string          `json:"signed_tx"`
}

func (MultisigUTXO) Asset added in v1.1.5

func (utxo MultisigUTXO) Asset() Hash

type NetworkAsset

type NetworkAsset struct {
	Amount  decimal.Decimal `json:"amount"`
	AssetID string          `json:"asset_id"`
	IconURL string          `json:"icon_url"`
	Symbol  string          `json:"symbol"`

	// populated only at ReadNetworkAsset
	ChainID       string `json:"chain_id,omitempty"`
	MixinID       string `json:"mixin_id,omitempty"`
	Name          string `json:"name,omitempty"`
	SnapshotCount int64  `json:"snapshot_count,omitempty"`
}

func ReadNetworkAsset

func ReadNetworkAsset(ctx context.Context, assetID string) (*NetworkAsset, error)

type NetworkChain

type NetworkChain struct {
	ChainID              string          `json:"chain_id"`
	IconURL              string          `json:"icon_url"`
	Name                 string          `json:"name"`
	Type                 string          `json:"type"`
	WithdrawFee          decimal.Decimal `json:"withdrawal_fee"`
	WithdrawTimestamp    time.Time       `json:"withdrawal_timestamp"`
	WithdrawPendingCount int64           `json:"withdrawal_pending_count"`
	DepositBlockHeight   int64           `json:"deposit_block_height"`
	ExternalBlockHeight  int64           `json:"external_block_height"`
	ManagedBlockHeight   int64           `json:"managed_block_height"`
	IsSynchronized       bool            `json:"is_synchronized"`
}

type NetworkInfo

type NetworkInfo struct {
	Assets         []*NetworkAsset `json:"assets"`
	Chains         []*NetworkChain `json:"chains"`
	AssetsCount    decimal.Decimal `json:"assets_count"`
	PeakThroughput decimal.Decimal `json:"peak_throughput"`
	SnapshotsCount decimal.Decimal `json:"snapshots_count"`
	Type           string          `json:"type"`
}

NetworkInfo mixin network info

func ReadNetworkInfo

func ReadNetworkInfo(ctx context.Context) (*NetworkInfo, error)

ReadNetworkInfo read mixin network

type OauthKeystore

type OauthKeystore struct {
	ClientID   string `json:"client_id,omitempty"`
	AuthID     string `json:"authorization_id,omitempty"`
	Scope      string `json:"scope,omitempty"`
	PrivateKey string `json:"private_key,omitempty"`
	VerifyKey  string `json:"ed25519,omitempty"`
}

func AuthorizeEd25519

func AuthorizeEd25519(ctx context.Context, clientID, clientSecret string, code string, verifier string, privateKey ed25519.PrivateKey) (*OauthKeystore, error)

type OauthKeystoreAuth

type OauthKeystoreAuth struct {
	*OauthKeystore
	// contains filtered or unexported fields
}

func AuthFromOauthKeystore

func AuthFromOauthKeystore(store *OauthKeystore) (*OauthKeystoreAuth, error)

func (*OauthKeystoreAuth) EncryptPin

func (o *OauthKeystoreAuth) EncryptPin(pin string) string

func (*OauthKeystoreAuth) SignToken

func (o *OauthKeystoreAuth) SignToken(signature, requestID string, exp time.Duration) string

func (*OauthKeystoreAuth) Verify

func (o *OauthKeystoreAuth) Verify(resp *resty.Response) error

type Output added in v1.0.12

type Output struct {
	Type   uint8   `json:"type"`
	Amount Integer `json:"amount"`
	Keys   []Key   `json:"keys,omitempty"`
	Script Script  `json:"script"`
	Mask   Key     `json:"mask,omitempty"`
}

type Participant

type Participant struct {
	Action    string    `json:"action,omitempty"`
	Type      string    `json:"type,omitempty"`
	UserID    string    `json:"user_id,omitempty"`
	Role      string    `json:"role,omitempty"`
	CreatedAt time.Time `json:"created_at,omitempty"`
}

Participant conversation participant

type Payment

type Payment struct {
	Recipient *User    `json:"recipient,omitempty"`
	Asset     *Asset   `json:"asset,omitempty"`
	AssetID   string   `json:"asset_id,omitempty"`
	Amount    string   `json:"amount,omitempty"`
	TraceID   string   `json:"trace_id,omitempty"`
	Status    string   `json:"status,omitempty"`
	Memo      string   `json:"memo,omitempty"`
	Receivers []string `json:"receivers,omitempty"`
	Threshold uint8    `json:"threshold,omitempty"`
	CodeID    string   `json:"code_id,omitempty"`
}

type RawTransaction

type RawTransaction struct {
	Type            string    `json:"type"`
	SnapshotID      string    `json:"snapshot"`
	OpponentKey     string    `json:"opponent_key"`
	AssetID         string    `json:"asset_id"`
	Amount          string    `json:"amount"`
	TraceID         string    `json:"trace_id"`
	Memo            string    `json:"memo"`
	State           string    `json:"state"`
	CreatedAt       time.Time `json:"created_at"`
	TransactionHash string    `json:"transaction_hash,omitempty"`
	SnapshotHash    string    `json:"snapshot_hash,omitempty"`
	SnapshotAt      time.Time `json:"snapshot_at"`
}

RawTransaction raw transaction

type RecallMessage

type RecallMessage struct {
	MessageID string `json:"message_id"`
}

type Script added in v1.1.5

type Script []uint8

func NewThresholdScript added in v1.1.5

func NewThresholdScript(threshold uint8) Script

func (Script) MarshalJSON added in v1.1.5

func (s Script) MarshalJSON() ([]byte, error)

func (Script) String added in v1.1.5

func (s Script) String() string

func (*Script) UnmarshalJSON added in v1.1.5

func (s *Script) UnmarshalJSON(b []byte) error

func (Script) Validate added in v1.1.5

func (s Script) Validate(sum int) error

func (Script) VerifyFormat added in v1.1.5

func (s Script) VerifyFormat() error

type Signature added in v1.1.5

type Signature [64]byte

func (Signature) MarshalJSON added in v1.1.5

func (s Signature) MarshalJSON() ([]byte, error)

func (Signature) String added in v1.1.5

func (s Signature) String() string

func (*Signature) UnmarshalJSON added in v1.1.5

func (s *Signature) UnmarshalJSON(b []byte) error

type Signer

type Signer interface {
	SignToken(signature, requestID string, exp time.Duration) string
	EncryptPin(pin string) string
}

type Snapshot

type Snapshot struct {
	SnapshotID      string          `json:"snapshot_id"`
	CreatedAt       time.Time       `json:"created_at,omitempty"`
	TraceID         string          `json:"trace_id,omitempty"`
	UserID          string          `json:"user_id,omitempty"`
	AssetID         string          `json:"asset_id,omitempty"`
	ChainID         string          `json:"chain_id,omitempty"`
	OpponentID      string          `json:"opponent_id,omitempty"`
	Source          string          `json:"source,omitempty"`
	Amount          decimal.Decimal `json:"amount,omitempty"`
	OpeningBalance  decimal.Decimal `json:"opening_balance,omitempty"`
	ClosingBalance  decimal.Decimal `json:"closing_balance,omitempty"`
	Memo            string          `json:"memo,omitempty"`
	Type            string          `json:"type,omitempty"`
	Sender          string          `json:"sender,omitempty"`
	Receiver        string          `json:"receiver,omitempty"`
	TransactionHash string          `json:"transaction_hash,omitempty"`

	Asset *Asset `json:"asset,omitempty"`
}

func ReadSnapshot

func ReadSnapshot(ctx context.Context, accessToken, snapshotID string) (*Snapshot, error)

ReadSnapshot by accessToken, scope SNAPSHOTS:READ required

func ReadSnapshots

func ReadSnapshots(ctx context.Context, accessToken string, assetID string, offset time.Time, order string, limit int) ([]*Snapshot, error)

ReadSnapshots by accessToken, scope SNAPSHOTS:READ required

func (*Snapshot) UnmarshalJSON

func (s *Snapshot) UnmarshalJSON(b []byte) error

type StickerMessage

type StickerMessage struct {
	Name    string `json:"name,omitempty"`
	AlbumID string `json:"album_id,omitempty"`
}

type SystemConversationPayload

type SystemConversationPayload struct {
	Action        string `json:"action"`
	ParticipantID string `json:"participant_id"`
	UserID        string `json:"user_id,omitempty"`
	Role          string `json:"role,omitempty"`
}

type Transaction added in v1.0.12

type Transaction struct {
	Hash       *Hash         `json:"hash,omitempty" msgpack:"-"`
	Version    uint8         `json:"version"`
	Asset      Hash          `json:"asset"`
	Inputs     []*Input      `json:"inputs"`
	Outputs    []*Output     `json:"outputs"`
	Extra      []byte        `json:"extra,omitempty"`
	Signatures [][]Signature `json:"signatures,omitempty" msgpack:",omitempty"`
	Snapshot   *Hash         `json:"snapshot,omitempty" msgpack:"-"`
}

func GetTransaction added in v1.0.12

func GetTransaction(ctx context.Context, hash string) (*Transaction, error)

func SendRawTransaction added in v1.0.12

func SendRawTransaction(ctx context.Context, raw string) (*Transaction, error)

func TransactionFromRaw added in v1.1.1

func TransactionFromRaw(raw string) (*Transaction, error)

func (*Transaction) DumpTransaction added in v1.1.1

func (t *Transaction) DumpTransaction() (string, error)

func (*Transaction) DumpTransactionPayload added in v1.1.5

func (t *Transaction) DumpTransactionPayload() (string, error)

func (*Transaction) TransactionHash added in v1.1.5

func (t *Transaction) TransactionHash() (Hash, error)

type TransactionInput added in v1.1.1

type TransactionInput struct {
	Memo    string
	Inputs  []*MultisigUTXO
	Outputs []struct {
		Receivers []string
		Threshold uint8
		Amount    decimal.Decimal
	}
}

func (*TransactionInput) AppendOutput added in v1.1.3

func (i *TransactionInput) AppendOutput(receivers []string, threshold uint8, amount decimal.Decimal)

func (*TransactionInput) AppendUTXO added in v1.1.3

func (i *TransactionInput) AppendUTXO(utxo *MultisigUTXO)

func (*TransactionInput) Asset added in v1.1.1

func (i *TransactionInput) Asset() Hash

func (*TransactionInput) TotalInputAmount added in v1.1.1

func (i *TransactionInput) TotalInputAmount() decimal.Decimal

func (*TransactionInput) Validate added in v1.1.1

func (i *TransactionInput) Validate() error

type TransferInput

type TransferInput struct {
	AssetID    string          `json:"asset_id,omitempty"`
	OpponentID string          `json:"opponent_id,omitempty"`
	Amount     decimal.Decimal `json:"amount,omitempty"`
	TraceID    string          `json:"trace_id,omitempty"`
	Memo       string          `json:"memo,omitempty"`

	// OpponentKey used for raw transaction
	OpponentKey string `json:"opponent_key,omitempty"`

	OpponentMultisig struct {
		Receivers []string `json:"receivers,omitempty"`
		Threshold uint8    `json:"threshold,omitempty"`
	} `json:"opponent_multisig,omitempty"`
}

TransferInput input for transfer/verify payment request

type TransferView

type TransferView struct {
	Type          string    `json:"type"`
	SnapshotID    string    `json:"snapshot_id"`
	CounterUserID string    `json:"counter_user_id"`
	AssetID       string    `json:"asset_id"`
	Amount        string    `json:"amount"`
	TraceID       string    `json:"trace_id"`
	Memo          string    `json:"memo"`
	CreatedAt     time.Time `json:"created_at"`
}

type Turn

type Turn struct {
	URL        string `json:"url"`
	Username   string `json:"username"`
	Credential string `json:"credential"`
}

type UpdateAppRequest added in v1.0.9

type UpdateAppRequest struct {
	RedirectURI      string   `json:"redirect_uri,omitempty"`
	HomeURI          string   `json:"home_uri,omitempty"`
	Name             string   `json:"name,omitempty"`
	Description      string   `json:"description,omitempty"`
	IconBase64       string   `json:"icon_base64,omitempty"`
	SessionSecret    string   `json:"session_secret,omitempty"`
	Category         string   `json:"category,omitempty"`
	Capabilities     []string `json:"capabilities,omitempty"`
	ResourcePatterns []string `json:"resource_patterns,omitempty"`
}

type User

type User struct {
	UserID         string    `json:"user_id,omitempty"`
	IdentityNumber string    `json:"identity_number,omitempty"`
	Phone          string    `json:"phone,omitempty"`
	FullName       string    `json:"full_name,omitempty"`
	Biography      string    `json:"biography,omitempty"`
	AvatarURL      string    `json:"avatar_url,omitempty"`
	Relationship   string    `json:"relationship,omitempty"`
	MuteUntil      time.Time `json:"mute_until,omitempty"`
	CreatedAt      time.Time `json:"created_at,omitempty"`
	IsVerified     bool      `json:"is_verified,omitempty"`
	SessionID      string    `json:"session_id,omitempty"`
	PinToken       string    `json:"pin_token,omitempty"`
	CodeID         string    `json:"code_id,omitempty"`
	CodeURL        string    `json:"code_url,omitempty"`
	HasPin         bool      `json:"has_pin,omitempty"`

	App *App `json:"app,omitempty"`
}

func UserMe

func UserMe(ctx context.Context, accessToken string) (*User, error)

type Verifier

type Verifier interface {
	Verify(resp *resty.Response) error
}

func NopVerifier

func NopVerifier() Verifier

type VideoMessage

type VideoMessage struct {
	AttachmentID string `json:"attachment_id,omitempty"`
	MimeType     string `json:"mime_type,omitempty"`
	WaveForm     string `json:"wave_form,omitempty"`
	Width        int    `json:"width,omitempty"`
	Height       int    `json:"height,omitempty"`
	Size         int    `json:"size,omitempty"`
	Duration     int    `json:"duration,omitempty"`
	Thumbnail    []byte `json:"thumbnail,omitempty"`
}

type WithdrawInput

type WithdrawInput struct {
	AddressID string          `json:"address_id,omitempty"`
	Amount    decimal.Decimal `json:"amount,omitempty"`
	TraceID   string          `json:"trace_id,omitempty"`
	Memo      string          `json:"memo,omitempty"`
}

Directories

Path Synopsis
_examples

Jump to

Keyboard shortcuts

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