Files
sui-go-sdk/models/read_transaction.go

356 lines
11 KiB
Go

package models
import (
"encoding/json"
"github.com/tidwall/gjson"
)
type GetTransactionMetaData struct {
GatewayTxSeqNumber uint64 `json:"gatewayTxSeqNumber"`
TransactionDigest string `json:"transactionDigest"`
}
type SuiTransactionBlockOptions struct {
ShowInput bool `json:"showInput,omitempty"`
ShowRawInput bool `json:"showRawInput,omitempty"`
ShowEffects bool `json:"showEffects,omitempty"`
ShowEvents bool `json:"showEvents,omitempty"`
ShowObjectChanges bool `json:"showObjectChanges,omitempty"`
ShowBalanceChanges bool `json:"showBalanceChanges,omitempty"`
}
type SuiGetTransactionBlockRequest struct {
Digest string `json:"digest"`
Options SuiTransactionBlockOptions `json:"options"`
}
type SuiArgument map[string]interface{}
type SuiCallArg map[string]interface{}
type SuiTransactionBlockKind struct {
Kind string `json:"kind"`
Inputs []SuiCallArg `json:"inputs"`
Transactions []any `json:"transactions"`
}
func MoveCall(data any) *MoveCallSuiTransaction {
bs, _ := json.Marshal(data)
res := gjson.GetBytes(bs, "MoveCall").Raw
if res != "" {
var data *MoveCallSuiTransaction
_ = json.Unmarshal([]byte(res), &data)
return data
}
return nil
}
type SuiTransactionEnum struct {
MakeMoveVec []interface{} `json:"MakeMoveVec,omitempty"`
MergeCoins []interface{} `json:"MergeCoins,omitempty"`
SplitCoins []interface{} `json:"SplitCoins,omitempty"`
TransferObjects []interface{} `json:"TransferObjects,omitempty"`
Publish []interface{} `json:"Publish,omitempty"`
Upgrade []interface{} `json:"Upgrade,omitempty"`
MoveCall *MoveCallSuiTransaction `json:"MoveCall,omitempty"`
}
type ProgrammableTransaction struct {
Transactions []any `json:"transactions"`
Inputs []SuiCallArg `json:"inputs"`
}
type MoveCallSuiTransaction struct {
Package string `json:"package"`
Module string `json:"module"`
Function string `json:"function"`
TypeArguments []string `json:"type_arguments"`
Arguments []interface{} `json:"arguments"`
}
type SuiTransactionBlockData struct {
MessageVersion string `json:"messageVersion"`
Transaction SuiTransactionBlockKind `json:"transaction"`
Sender string `json:"sender"`
GasData SuiGasData `json:"gasData"`
}
type SuiTransactionBlock struct {
Data SuiTransactionBlockData `json:"data"`
TxSignatures []string `json:"txSignatures"`
}
type SuiObjectRef struct {
ObjectId string `json:"objectId"`
Version int `json:"version"`
Digest string `json:"digest"`
}
type SuiGasData struct {
Payment []SuiObjectRef `json:"payment"`
// the owner's Sui address
Owner string `json:"owner"`
Price string `json:"price"`
Budget string `json:"budget"`
}
type SuiObjectChangePublished struct {
Type string `json:"type"`
PackageId string `json:"packageId"`
Version int `json:"version"`
Digest string `json:"digest"`
Modules []string `json:"modules"`
}
type SuiObjectChangeTransferred struct {
Type string `json:"type"`
Sender string `json:"sender"`
Recipient ObjectOwner `json:"recipient"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
Version int `json:"version"`
Digest string `json:"digest"`
}
type SuiObjectChangeMutated struct {
Type string `json:"type"`
Sender string `json:"sender"`
Owner ObjectOwner `json:"owner"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
Version int `json:"version"`
PreviousVersion int `json:"previousVersion"`
Digest string `json:"digest"`
}
type SuiObjectChangeDeleted struct {
Type string `json:"type"`
Sender string `json:"sender"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
Version int `json:"version"`
}
type SuiObjectChangeWrapped struct {
Type string `json:"type"`
Sender string `json:"sender"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
Version int `json:"version"`
}
type SuiObjectChangeCreated struct {
Type string `json:"type"`
Sender string `json:"sender"`
Owner ObjectOwner `json:"owner"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
Version int `json:"version"`
Digest string `json:"digest"`
}
type OwnedObjectRef struct {
Owner interface{} `json:"owner"`
Reference SuiObjectRef `json:"reference"`
}
type SuiEffects struct {
MessageVersion string `json:"messageVersion"`
Status ExecutionStatus `json:"status"`
ExecutedEpoch string `json:"executedEpoch"`
GasUsed GasCostSummary `json:"gasUsed"`
ModifiedAtVersions []ModifiedAtVersions `json:"modifiedAtVersions"`
SharedObjects []SuiObjectRef `json:"sharedObjects"`
TransactionDigest string `json:"transactionDigest"`
Created []OwnedObjectRef `json:"created"`
Mutated []OwnedObjectRef `json:"mutated"`
Deleted []SuiObjectRef `json:"deleted"`
GasObject OwnedObjectRef `json:"gasObject"`
EventsDigest string `json:"eventsDigest"`
Dependencies []string `json:"dependencies"`
}
type ExecutionStatus struct {
Status string `json:"status"`
Error string `json:"error,omitempty"`
}
type GasCostSummary struct {
ComputationCost string `json:"computationCost"`
StorageCost string `json:"storageCost"`
StorageRebate string `json:"storageRebate"`
NonRefundableStorageFee string `json:"nonRefundableStorageFee"`
}
type ModifiedAtVersions struct {
ObjectId string `json:"objectId"`
SequenceNumber string `json:"sequenceNumber"`
}
type SuiTransactionBlockResponse struct {
Digest string `json:"digest"`
Transaction SuiTransactionBlock `json:"transaction,omitempty"`
RawTransaction string `json:"rawTransaction,omitempty"`
Effects SuiEffects `json:"effects,omitempty"`
Events []SuiEventResponse `json:"events,omitempty"`
ObjectChanges []ObjectChange `json:"objectChanges,omitempty"`
BalanceChanges []BalanceChanges `json:"balanceChanges,omitempty"`
TimestampMs string `json:"timestampMs,omitempty"`
Checkpoint string `json:"checkpoint,omitempty"`
ConfirmedLocalExecution bool `json:"confirmedLocalExecution,omitempty"`
}
func (o ObjectChange) GetObjectChangeAddressOwner() string {
b, err := json.Marshal(o.Owner)
if err != nil {
return ""
}
if gjson.ParseBytes(b).IsObject() {
var owner ObjectOwner
err = json.Unmarshal(b, &owner)
if err == nil {
return owner.AddressOwner
}
}
return ""
}
func (o ObjectChange) GetObjectChangeObjectOwner() string {
b, err := json.Marshal(o.Owner)
if err != nil {
return ""
}
if gjson.ParseBytes(b).IsObject() {
var owner ObjectOwner
err = json.Unmarshal(b, &owner)
if err == nil {
return owner.ObjectOwner
}
}
return ""
}
func (o ObjectChange) GetObjectOwnerShare() ObjectShare {
var share ObjectShare
b, err := json.Marshal(o.Owner)
if err != nil {
return share
}
if gjson.ParseBytes(b).IsObject() {
var owner ObjectOwner
err = json.Unmarshal(b, &owner)
if err == nil {
return owner.Shared
}
}
return share
}
type ObjectChange struct {
Type string `json:"type"`
Sender string `json:"sender"`
Owner interface{} `json:"owner"`
ObjectType string `json:"objectType"`
ObjectId string `json:"objectId"`
PackageId string `json:"packageId"`
Modules []string `json:"modules"`
Version string `json:"version"`
PreviousVersion string `json:"previousVersion,omitempty"`
Digest string `json:"digest"`
}
type BalanceChanges struct {
Owner ObjectOwner `json:"owner"`
CoinType string `json:"coinType"`
Amount string `json:"amount"`
}
type SuiMultiGetTransactionBlocksRequest struct {
Digests []string `json:"digests"`
Options SuiTransactionBlockOptions `json:"options"`
}
type SuiMultiGetTransactionBlocksResponse []*SuiTransactionBlockResponse
type SuiTransactionBlockResponseQuery struct {
TransactionFilter TransactionFilter `json:"filter"`
Options SuiTransactionBlockOptions `json:"options"`
}
type TransactionFilter map[string]interface{}
// TransactionFilterByFromAddress is a filter for from address
type TransactionFilterByFromAddress struct {
FromAddress string `json:"FromAddress"`
}
// TransactionFilterByToAddress is a filter for to address
type TransactionFilterByToAddress struct {
ToAddress string `json:"ToAddress"`
}
// TransactionFilterByInputObject is a filter for input objects
type TransactionFilterByInputObject struct {
// InputObject is the id of the object
InputObject string `json:"InputObject"`
}
// TransactionFilterByChangedObjectFilter is a filter for changed objects
type TransactionFilterByChangedObjectFilter struct {
// ChangedObject is a filter for changed objects
ChangedObject string `json:"ChangedObject"`
}
// TransactionFilterByMoveFunction is a filter for move functions
type TransactionFilterByMoveFunction struct {
MoveFunction MoveFunction `json:"MoveFunction"`
}
type MoveFunction struct {
Package string `json:"package"`
Module *string `json:"module"`
Function *string `json:"function"`
}
type SuiXSubscribeTransactionsRequest struct {
// the transaction query criteria.
TransactionFilter interface{} `json:"filter"`
}
type SuiXQueryTransactionBlocksRequest struct {
SuiTransactionBlockResponseQuery SuiTransactionBlockResponseQuery
// optional paging cursor
Cursor interface{} `json:"cursor"`
// maximum number of items per page
Limit uint64 `json:"limit" validate:"lte=50"`
// query result ordering, default to false (ascending order), oldest record first
DescendingOrder bool `json:"descendingOrder"`
}
type SuiXQueryTransactionBlocksResponse struct {
Data []SuiTransactionBlockResponse `json:"data"`
NextCursor string `json:"nextCursor"`
HasNextPage bool `json:"hasNextPage"`
}
type SuiDryRunTransactionBlockRequest struct {
TxBytes string `json:"txBytes"`
}
type SuiDevInspectTransactionBlockRequest struct {
// the transaction signer's Sui address
Sender string `json:"sender"`
// BCS encoded TransactionKind(as opposed to TransactionData, which include gasBudget and gasPrice)
TxBytes string `json:"txBytes"`
// Gas is not charged, but gas usage is still calculated. Default to use reference gas price
GasPrice string `json:"gasPrice"`
// The epoch to perform the call. Will be set from the system state object if not provided
Epoch string `json:"epoch"`
}
type SuiXSubscribeEventsRequest struct {
// the event query criteria.
SuiEventFilter interface{} `json:"suiEventFilter"`
}