bind

package
v0.0.0-...-11c4200 Latest Latest
Warning

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

Go to latest
Published: Feb 17, 2026 License: MIT Imports: 29 Imported by: 23

Documentation

Index

Constants

View Source
const (
	AddressType = "address"

	// BCS data length constants
	U8Len      = 1
	U16Len     = 2
	U32Len     = 4
	U64Len     = 8
	U128Len    = 16
	U256Len    = 32
	AddressLen = 32
)
View Source
const (
	HashingIntentScopeChildObjectID = 0xf0
	SuiFrameworkAddress             = "0x2"
)
View Source
const (
	MaxUint8Value     = 255
	MaxUint16Value    = 65535
	U128ByteSize      = 16
	U256ByteSize      = 32
	DecimalBase       = 10
	HexCharPairLength = 2
)

Constants for magic numbers

View Source
const (
	// DefaultGasBudget is the default gas budget for transactions
	DefaultGasBudget uint64 = 10_000_000_000
)

Variables

This section is empty.

Functions

func ClearTestModifier

func ClearTestModifier()

ClearTestModifier removes the test modifier

func ComputeDigestForModulesAndDeps

func ComputeDigestForModulesAndDeps(modules [][]byte, objectIDs [][]byte) [32]byte

func ConvertToCallArg

func ConvertToCallArg(typeName string, value any) (*transaction.CallArg, error)

ConvertToCallArg converts a Go value to a CallArg for use in PTB

func DecodeDevInspectResults

func DecodeDevInspectResults(rawResults json.RawMessage, returnTypes []string, resolver *TypeResolver) ([]any, error)

func DecodeU128Value

func DecodeU128Value(bcsBytes [16]byte) (*big.Int, error)

DecodeU128Value decodes a 16-byte array to *big.Int for u128 values

func DecodeU256Value

func DecodeU256Value(bcsBytes [32]byte) (*big.Int, error)

DecodeU256Value decodes a 32-byte array to *big.Int for u256 values

func DeriveObjectIDWithVectorU8Key

func DeriveObjectIDWithVectorU8Key(parentAddress string, keyBytes []byte) (string, error)

DeriveObjectIDWithVectorU8Key constructs the BCS bytes for DerivedObjectKey<vector<u8>> TypeTag. keyBytes should be the raw vector<u8> value - this function will BCS-serialize it.

func DeserializeBCS

func DeserializeBCS(data []byte, moveTypes []string) ([]any, error)

DeserializeBCS consumes a slice of bytes containing multiple BCS-encoded values and decodes them according to the provided Move types. TODO: this function should also serve extractBCSBytes, but currently getElementType handles objects as their ID (32-byte address)

func DevInspectPTB

func DevInspectPTB(ctx context.Context, signerAddress string, client sui.ISuiAPI, ptb *transaction.Transaction) (*models.SuiTransactionBlockResponse, error)

DevInspectPTB executes a PTB using DevInspect

func DevInspectTx

func DevInspectTx(ctx context.Context, signerAddress string, client sui.ISuiAPI, txBytes []byte) (*models.SuiTransactionBlockResponse, error)

func FetchDefaultGasCoinRef

func FetchDefaultGasCoinRef(ctx context.Context, client sui.ISuiAPI, address string) (*models.SuiObjectRef, error)

Fetches every coin owned by the address. Looks for a SUI object, returns the first it finds

func FindCoinObjectIdFromTx

func FindCoinObjectIdFromTx(tx models.SuiTransactionBlockResponse, coinType string) (string, error)

FindCoinObjectIdFromTx finds a coin object ID from a transaction response by looking for created objects of type Coin<T>

func FindObjectIdFromPublishTx

func FindObjectIdFromPublishTx(tx models.SuiTransactionBlockResponse, module, object string) (string, error)

func FindPackageIdFromPublishTx

func FindPackageIdFromPublishTx(tx models.SuiTransactionBlockResponse) (string, error)

func GetCustomValueFromObjectData

func GetCustomValueFromObjectData[T any](resp *models.SuiObjectResponse, target *T) error

Decodes "value" field into a user provided pointer of any type.

func GetFailedTxError

func GetFailedTxError(tx *models.SuiTransactionBlockResponse) error

func GetObjectRef

func GetObjectRef(ctx context.Context, client sui.ISuiAPI, objectID string) (*models.SuiObjectRef, error)

func IsGenericType

func IsGenericType(moveType string) bool

IsGenericType checks if a type contains generic parameters

func IsSuiAddress

func IsSuiAddress(addr string) bool

IsSuiAddress returns true if addr is a valid Sui address/ObjectID. It is an improvement over the sui-go-sdk's IsValidSuiAddress function.

func ReadObject

func ReadObject(ctx context.Context, objectId string, client sui.ISuiAPI) (*models.SuiObjectResponse, error)

func RegisterStructDecoder

func RegisterStructDecoder(moveType string, decoder StructDecoder)

func SetTestModifier

func SetTestModifier(modifier SourceModifier)

SetTestModifier sets a source modifier for the next compilation (test only)

func SignAndSendTx

func SignAndSendTx(ctx context.Context, signer bindutils.SuiSigner, client sui.ISuiAPI, txBytes []byte, waitForExecution bool) (*models.SuiTransactionBlockResponse, error)

func ToSuiAddress

func ToSuiAddress(address string) (string, error)

ToSuiAddress normalizes and validates a Sui address

func ToSuiObjectRef

func ToSuiObjectRef(ctx context.Context, client sui.ISuiAPI, objectId string, address string) (*models.SuiObjectRef, error)

Types

type ArgumentRef

type ArgumentRef struct {
	Result *uint16 `json:"Result,omitempty"`
	Input  *uint16 `json:"Input,omitempty"`
}

ArgumentRef — small helper for fields like {"Result": 0}

type BoundContract

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

func NewBoundContract

func NewBoundContract(packageID string, packageName, moduleName string, client sui.ISuiAPI) (*BoundContract, error)

func (*BoundContract) AppendPTB

func (c *BoundContract) AppendPTB(ctx context.Context, opts *CallOpts, ptb *transaction.Transaction, encoded *EncodedCall) (*transaction.Argument, error)

AppendPTB adds an EncodedCall to an existing PTB and returns the result argument

func (*BoundContract) Call

func (c *BoundContract) Call(ctx context.Context, opts *CallOpts, encoded *EncodedCall) ([]any, error)

TODO: dedupe transaction argument generation code from ExecuteTransaction

func (*BoundContract) EncodeCallArgs

func (c *BoundContract) EncodeCallArgs(function string, typeArgs []string, paramTypes []string, paramValues []any) (*EncodedCall, error)

EncodeCallArgs encodes function parameters to CallArgs for use in PTB

func (*BoundContract) EncodeCallArgsWithGenerics

func (c *BoundContract) EncodeCallArgsWithGenerics(function string, typeArgs []string, typeParams []string, paramTypes []string, paramValues []any, returnTypes []string) (*EncodedCall, error)

EncodeCallArgsWithGenerics encodes function parameters with full generic type information

func (*BoundContract) EncodeCallArgsWithReturnTypes

func (c *BoundContract) EncodeCallArgsWithReturnTypes(function string, typeArgs []string, paramTypes []string, paramValues []any, returnTypes []string) (*EncodedCall, error)

EncodeCallArgsWithReturnTypes encodes function parameters to CallArgs for use in PTB with return type information

func (*BoundContract) ExecuteTransaction

func (c *BoundContract) ExecuteTransaction(ctx context.Context, opts *CallOpts, encoded *EncodedCall) (*models.SuiTransactionBlockResponse, error)

func (*BoundContract) GetModuleName

func (c *BoundContract) GetModuleName() string

func (*BoundContract) GetPackageID

func (c *BoundContract) GetPackageID() string

func (*BoundContract) GetPackageName

func (c *BoundContract) GetPackageName() string

type BuildInfo

type BuildInfo struct {
	CompiledPackageInfo struct {
		PackageName string `yaml:"package_name"`
	} `yaml:"compiled_package_info"`
}

type CallArg

type CallArg struct {
	Pure []byte `json:"Pure,omitempty"`
}

CallArg — mimics SDK CallArg but matches CLI JSON

type CallArgManager

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

func NewCallArgManager

func NewCallArgManager() *CallArgManager

func NewCallArgManagerWithExisting

func NewCallArgManagerWithExisting(existingInputs []*transaction.CallArg) *CallArgManager

func (*CallArgManager) AddCallArg

func (*CallArgManager) ConvertCallArgsToArguments

func (m *CallArgManager) ConvertCallArgsToArguments(callArgs []*transaction.CallArg) ([]*transaction.Argument, error)

func (*CallArgManager) ConvertEncodedCallArgsToArguments

func (m *CallArgManager) ConvertEncodedCallArgsToArguments(encodedArgs []*EncodedCallArgument) ([]*transaction.Argument, error)

func (*CallArgManager) GetInputs

func (m *CallArgManager) GetInputs() []*transaction.CallArg

type CallOpts

type CallOpts struct {
	Signer           bindutils.SuiSigner
	GasObject        string
	GasBudget        *uint64
	GasPrice         *uint64
	WaitForExecution bool

	ObjectResolver *ObjectResolver
}

type Command

type Command struct {
	MoveCall *ProgrammableMoveCall `json:"MoveCall,omitempty"`
	Publish  [][]interface{}       `json:"Publish,omitempty"`
	Upgrade  []interface{}         `json:"Upgrade,omitempty"`
}

Command — mimics SDK Command but matches CLI JSON

type DevInspectResult

type DevInspectResult struct {
	ReturnValues [][]any `json:"returnValues"`
}

type EncodedCall

type EncodedCall struct {
	Module      ModuleInformation
	Function    string
	TypeArgs    []*transaction.TypeTag
	CallArgs    []*EncodedCallArgument
	ReturnTypes []string
	TypeParams  []string
}

EncodedCall represents an encoded Move function call

func (*EncodedCall) String

func (e *EncodedCall) String() string

func (*EncodedCall) ValidateCallArgs

func (e *EncodedCall) ValidateCallArgs() error

ValidateCallArgs ensures all CallArgs are valid (Pure or Object) and returns an error if an unresolved SDK variant is detected

type EncodedCallArgument

type EncodedCallArgument struct {
	// Only one of these should be set:
	CallArg  *transaction.CallArg  // For regular values (Pure, Object)
	Argument *transaction.Argument // For PTB results (Result, NestedResult, GasCoin)

	// TypeName stores the original Move type string (e.g., "&mut 0x2::clock::Clock", "&OwnerCap")
	// This is used to preserve type information (including mutability) through the encoding process
	TypeName string
}

EncodedCallArgument represents an argument in an encoded Move function call.

func NewEncodedCallArgFromArgument

func NewEncodedCallArgFromArgument(arg *transaction.Argument) *EncodedCallArgument

func NewEncodedCallArgFromArgumentWithType

func NewEncodedCallArgFromArgumentWithType(arg *transaction.Argument, typeName string) *EncodedCallArgument

func NewEncodedCallArgFromCallArg

func NewEncodedCallArgFromCallArg(callArg *transaction.CallArg) *EncodedCallArgument

func NewEncodedCallArgFromCallArgWithType

func NewEncodedCallArgFromCallArgWithType(callArg *transaction.CallArg, typeName string) *EncodedCallArgument

func (*EncodedCallArgument) IsArgument

func (e *EncodedCallArgument) IsArgument() bool

IsArgument returns true if this is a transaction.Argument (PTB result)

func (*EncodedCallArgument) IsCallArg

func (e *EncodedCallArgument) IsCallArg() bool

IsCallArg returns true if this is a regular CallArg

func (*EncodedCallArgument) Validate

func (e *EncodedCallArgument) Validate() error

Validate ensures that exactly one field is set

type GasData

type GasData struct {
	Payment [][]interface{} `json:"payment"`
	Owner   string          `json:"owner"`
	Price   uint64          `json:"price"`
	Budget  uint64          `json:"budget"`
}

GasData

type GenericTypeResolver

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

GenericTypeResolver resolves generic type parameters to concrete types

func NewGenericTypeResolver

func NewGenericTypeResolver(typeParamNames []string, typeArgs []string) (*GenericTypeResolver, error)

NewGenericTypeResolver creates a new resolver with the given type parameter mappings

func (*GenericTypeResolver) ResolveType

func (r *GenericTypeResolver) ResolveType(typeName string) string

ResolveType resolves a type that may contain generic parameters

type IBoundContract

type IBoundContract interface {
	GetPackageID() string
	GetPackageName() string
	GetModuleName() string
	AppendPTB(ctx context.Context, opts *CallOpts, ptb *transaction.Transaction, encoded *EncodedCall) (*transaction.Argument, error)
	Call(ctx context.Context, opts *CallOpts, encoded *EncodedCall) ([]any, error)
	ExecuteTransaction(ctx context.Context, opts *CallOpts, encoded *EncodedCall) (*models.SuiTransactionBlockResponse, error)
}

type ModuleInformation

type ModuleInformation struct {
	PackageID   string
	PackageName string
	ModuleName  string
}

func (*ModuleInformation) String

func (m *ModuleInformation) String() string

type Object

type Object struct {
	Id                   string
	InitialSharedVersion *uint64
}

func GetSharedObject

func GetSharedObject(ctx context.Context, client sui.ISuiAPI, objectId string) (*Object, error)

type ObjectResolver

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

func NewObjectResolver

func NewObjectResolver(client sui.ISuiAPI) *ObjectResolver

func (*ObjectResolver) ClearCache

func (r *ObjectResolver) ClearCache()

func (*ObjectResolver) GetSharedObject

func (r *ObjectResolver) GetSharedObject(ctx context.Context, objectId string) (*Object, error)

func (*ObjectResolver) ResolveCallArg

func (r *ObjectResolver) ResolveCallArg(ctx context.Context, arg *transaction.CallArg, typeName string) (*transaction.CallArg, error)

type PackageArtifact

type PackageArtifact struct {
	Modules      []string `json:"modules"`
	Dependencies []string `json:"dependencies"`
	Digest       []byte   `json:"digest"`
}

func CompilePackage

func CompilePackage(packageName contracts.Package, namedAddresses map[string]string, isUpgrade bool, suiRPC string) (PackageArtifact, error)

func ToArtifact

func ToArtifact(artifactJSON string) (PackageArtifact, error)

type PackageID

type PackageID = string

type PackageManifest

type PackageManifest struct {
	Package      any               `toml:"package"`
	Addresses    map[string]string `toml:"addresses"`
	Dependencies any               `toml:"dependencies"`
	DevAddresses any               `toml:"dev-addresses"`
}

type ProgrammableMoveCall

type ProgrammableMoveCall struct {
	Package       string        `json:"package"`
	Module        string        `json:"module"`
	Function      string        `json:"function"`
	TypeArguments []interface{} `json:"type_arguments"`
	Arguments     []ArgumentRef `json:"arguments"`
}

ProgrammableMoveCall — kept simple for now

type ProgrammableTransaction

type ProgrammableTransaction struct {
	Inputs   []CallArg `json:"inputs"`
	Commands []Command `json:"commands"`
}

ProgrammableTransaction

type PublishRequest

type PublishRequest struct {
	CompiledModules []string `json:"compiled_modules"`
	Dependencies    []string `json:"dependencies"`
}

type RPCResponse

type RPCResponse struct {
	Result struct {
		Data struct {
			ObjectID string            `json:"objectId"`
			Owner    map[string]string `json:"owner"`
		} `json:"data"`
	} `json:"result"`
}

type SourceModifier

type SourceModifier func(packageRoot string) error

SourceModifier is a function that can modify Move source files during compilation.

This is primarily used for testing package upgrades without creating duplicate contract versions in the repository.

Example usage:

modifier := func(packageRoot string) error {
    sourcePath := filepath.Join(packageRoot, "sources", "contract.move")
    content, _ := os.ReadFile(sourcePath)
    modified := strings.Replace(string(content), "1.0.0", "2.0.0", 1)
    return os.WriteFile(sourcePath, []byte(modified), 0o644)
}

type StructDecoder

type StructDecoder func([]byte) (any, error)

type SuiAddressBytes

type SuiAddressBytes [32]byte

type TransactionData

type TransactionData struct {
	V1 TransactionDataV1 `json:"V1"`
}

Root object

type TransactionDataV1

type TransactionDataV1 struct {
	Kind       TransactionKind `json:"kind"`
	Sender     string          `json:"sender"`
	GasData    GasData         `json:"gas_data"`
	Expiration string          `json:"expiration"`
}

TransactionDataV1

type TransactionKind

type TransactionKind struct {
	ProgrammableTransaction ProgrammableTransaction `json:"ProgrammableTransaction"`
}

TransactionKind

type TransferObjects

type TransferObjects struct {
	Objects []ArgumentRef `json:"TransferObjects,omitempty"`
	Address ArgumentRef   `json:"Address,omitempty"`
}

TransferObjects

type TypeResolver

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

func NewTypeResolver

func NewTypeResolver(genericParams []string, concreteTypes []string) (*TypeResolver, error)

func (*TypeResolver) ResolveType

func (r *TypeResolver) ResolveType(moveType string) string

ResolveType resolves a potentially generic type to a concrete type

Jump to

Keyboard shortcuts

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