isc

package
v0.7.0-alpha.4 Latest Latest
Warning

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

Go to latest
Published: Jul 4, 2023 License: Apache-2.0 Imports: 31 Imported by: 11

Documentation

Overview

Package 'isc' defines fundamental types that are used in Wasp.

The core types are mostly based on the fundamental data types of Shimmer

Index

Constants

View Source
const ChainIDLength = iotago.AliasIDLength
View Source
const FuncInit = "init"

FuncInit is a name of the init function for any smart contract

View Source
const HnameLength = 4
View Source
const HnameNil = Hname(0)

HnameNil is the value used to represent a non-existent Hname.

View Source
const Million = uint64(1_000_000)
View Source
const RequestConsideredExpiredWindow = time.Minute * 1

don't process any request which deadline will expire within 1 minute

View Source
const RequestIDDigestLen = 6
View Source
const RequestRefKeyLen = iotago.OutputIDLength + 32
View Source
const VMCoreErrorContractID = math.MaxUint32

VMCoreErrorContractID defines that all errors with a MaxUint32 contract id will be considered as core errors.

View Source
const VMErrorMessageLimit = math.MaxUint16

Variables

View Source
var BaseTokenID = []byte{}
View Source
var (
	EntryPointInit = Hn(FuncInit)
)

well known hnames

Functions

func AddressFromAgentID

func AddressFromAgentID(a AgentID) (iotago.Address, bool)

AddressFromAgentID returns the L1 address of the AgentID, if applicable.

func AddressFromBytes

func AddressFromBytes(data []byte) (iotago.Address, error)

func AddressFromReader added in v1.0.3

func AddressFromReader(rr *rwutil.Reader) (address iotago.Address)

func AddressToBytes added in v1.0.3

func AddressToBytes(address iotago.Address) []byte

func AddressToWriter added in v1.0.3

func AddressToWriter(ww *rwutil.Writer, address iotago.Address)

func AgentIDToWriter added in v1.0.3

func AgentIDToWriter(ww *rwutil.Writer, agent AgentID)

func GetErrorIDFromMessageFormat

func GetErrorIDFromMessageFormat(messageFormat string) uint16

func IsBaseToken

func IsBaseToken(tokenID []byte) bool

IsBaseToken return whether a given tokenID represents the base token

func IsEmptyOutputID added in v1.0.3

func IsEmptyOutputID(outputID iotago.OutputID) bool

func MustLogRequestsInTransaction added in v1.0.3

func MustLogRequestsInTransaction(tx *iotago.Transaction, log func(msg string, args ...interface{}), prefix string)

func MustNativeTokenIDFromBytes

func MustNativeTokenIDFromBytes(data []byte) iotago.NativeTokenID

func NativeTokenIDFromBytes

func NativeTokenIDFromBytes(data []byte) (ret iotago.NativeTokenID, err error)

func NativeTokenIDToBytes added in v1.0.3

func NativeTokenIDToBytes(tokenID iotago.NativeTokenID) []byte

func OutputSetToOutputIDs

func OutputSetToOutputIDs(outputSet iotago.OutputSet) iotago.OutputIDs

func RequestHash

func RequestHash(req Request) hashing.HashValue

func RequestIsExpired

func RequestIsExpired(req OnLedgerRequest, currentTime time.Time) bool

func RequestIsUnlockable

func RequestIsUnlockable(req OnLedgerRequest, chainAddress iotago.Address, currentTime time.Time) bool

func RequestsInTransaction

func RequestsInTransaction(tx *iotago.Transaction) (map[ChainID][]Request, error)

RequestsInTransaction parses the transaction and extracts those outputs which are interpreted as a request to a chain

func VMErrorIs

func VMErrorIs(err error, expected VMErrorBase) bool

VMErrorIs returns true if the error includes a VMErrorCode in its chain that matches the given code

func VMErrorMustBe

func VMErrorMustBe(err error, expected VMErrorBase)

VMErrorMustBe panics unless the error includes a VMErrorCode in its chain that matches the given code

Types

type AddressAgentID

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

AddressAgentID is an AgentID backed by a non-alias address.

func NewAddressAgentID added in v1.0.3

func NewAddressAgentID(addr iotago.Address) *AddressAgentID

func (*AddressAgentID) Address

func (a *AddressAgentID) Address() iotago.Address

func (*AddressAgentID) Bytes

func (a *AddressAgentID) Bytes() []byte

func (*AddressAgentID) Equals

func (a *AddressAgentID) Equals(other AgentID) bool

func (*AddressAgentID) Kind

func (a *AddressAgentID) Kind() AgentIDKind

func (*AddressAgentID) Read added in v1.0.3

func (a *AddressAgentID) Read(r io.Reader) error

func (*AddressAgentID) String

func (a *AddressAgentID) String() string

func (*AddressAgentID) Write added in v1.0.3

func (a *AddressAgentID) Write(w io.Writer) error

type AgentID

type AgentID interface {
	Bytes() []byte
	Equals(other AgentID) bool
	Kind() AgentIDKind
	Read(r io.Reader) error
	String() string
	Write(w io.Writer) error
}

AgentID represents any entity that can hold assets on L2 and/or call contracts.

func AgentIDFromBytes

func AgentIDFromBytes(data []byte) (AgentID, error)

func AgentIDFromReader added in v1.0.3

func AgentIDFromReader(rr *rwutil.Reader) (ret AgentID)

func AgentIDFromString added in v1.0.3

func AgentIDFromString(s string) (AgentID, error)

AgentIDFromString parses the human-readable string representation

func NewAgentID

func NewAgentID(addr iotago.Address) AgentID

NewAgentID creates an AddressAgentID if the address is not an AliasAddress; otherwise a ContractAgentID with hname = HnameNil.

func NewRandomAgentID

func NewRandomAgentID() AgentID

NewRandomAgentID creates random AgentID

type AgentIDKind

type AgentIDKind rwutil.Kind
const (
	AgentIDKindNil AgentIDKind = iota
	AgentIDKindAddress
	AgentIDKindContract
	AgentIDKindEthereumAddress

	AgentIDIsNil AgentIDKind = 0x80
)

type AgentIDWithL1Address

type AgentIDWithL1Address interface {
	AgentID
	Address() iotago.Address
}

AgentIDWithL1Address is an AgentID backed by an L1 address (either AddressAgentID or ContractAgentID).

type AliasOutputWithID

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

func AliasOutputWithIDFromBytes added in v1.0.3

func AliasOutputWithIDFromBytes(data []byte) (*AliasOutputWithID, error)

func AliasOutputWithIDFromTx added in v1.0.3

func AliasOutputWithIDFromTx(tx *iotago.Transaction, aliasAddr iotago.Address) (*AliasOutputWithID, error)

func NewAliasOutputWithID

func NewAliasOutputWithID(aliasOutput *iotago.AliasOutput, outputID iotago.OutputID) *AliasOutputWithID

func RandomAliasOutputWithID added in v1.0.3

func RandomAliasOutputWithID() *AliasOutputWithID

only for testing

func (*AliasOutputWithID) Bytes added in v1.0.3

func (a *AliasOutputWithID) Bytes() []byte

func (*AliasOutputWithID) Equals added in v1.0.3

func (a *AliasOutputWithID) Equals(other *AliasOutputWithID) bool

func (*AliasOutputWithID) GetAliasID

func (a *AliasOutputWithID) GetAliasID() iotago.AliasID

func (*AliasOutputWithID) GetAliasOutput

func (a *AliasOutputWithID) GetAliasOutput() *iotago.AliasOutput

func (*AliasOutputWithID) GetStateAddress

func (a *AliasOutputWithID) GetStateAddress() iotago.Address

func (*AliasOutputWithID) GetStateIndex

func (a *AliasOutputWithID) GetStateIndex() uint32

func (*AliasOutputWithID) GetStateMetadata

func (a *AliasOutputWithID) GetStateMetadata() []byte

func (*AliasOutputWithID) Hash added in v1.0.3

func (*AliasOutputWithID) OutputID

func (a *AliasOutputWithID) OutputID() iotago.OutputID

func (*AliasOutputWithID) Read added in v1.0.3

func (a *AliasOutputWithID) Read(r io.Reader) error

func (*AliasOutputWithID) String added in v1.0.3

func (a *AliasOutputWithID) String() string

func (*AliasOutputWithID) TransactionID added in v1.0.3

func (a *AliasOutputWithID) TransactionID() iotago.TransactionID

func (*AliasOutputWithID) Write added in v1.0.3

func (a *AliasOutputWithID) Write(w io.Writer) error

type Assets added in v1.0.3

type Assets struct {
	BaseTokens   uint64              `json:"baseTokens"`
	NativeTokens iotago.NativeTokens `json:"nativeTokens"`
	NFTs         []iotago.NFTID      `json:"nfts"`
}

func AssetsFromBytes added in v1.0.3

func AssetsFromBytes(b []byte) (*Assets, error)

func AssetsFromDict added in v1.0.3

func AssetsFromDict(d dict.Dict) (*Assets, error)

func AssetsFromNativeTokenSum added in v1.0.3

func AssetsFromNativeTokenSum(baseTokens uint64, tokens iotago.NativeTokenSum) *Assets

func AssetsFromOutput added in v1.0.3

func AssetsFromOutput(o iotago.Output) *Assets

func AssetsFromOutputMap added in v1.0.3

func AssetsFromOutputMap(outs map[iotago.OutputID]iotago.Output) *Assets

func MustAssetsFromBytes added in v1.0.3

func MustAssetsFromBytes(b []byte) *Assets

func NewAssets added in v1.0.3

func NewAssets(baseTokens uint64, tokens iotago.NativeTokens, nfts ...iotago.NFTID) *Assets

func NewAssetsBaseTokens added in v1.0.3

func NewAssetsBaseTokens(amount uint64) *Assets

func NewEmptyAssets

func NewEmptyAssets() *Assets

func (*Assets) Add added in v1.0.3

func (a *Assets) Add(b *Assets) *Assets

func (*Assets) AddBaseTokens added in v1.0.3

func (a *Assets) AddBaseTokens(amount uint64) *Assets

func (*Assets) AddNFTs added in v1.0.3

func (a *Assets) AddNFTs(nfts ...iotago.NFTID) *Assets

func (*Assets) AddNativeTokens added in v1.0.3

func (a *Assets) AddNativeTokens(nativeTokenID iotago.NativeTokenID, amount interface{}) *Assets

func (*Assets) AmountNativeToken added in v1.0.3

func (a *Assets) AmountNativeToken(nativeTokenID iotago.NativeTokenID) *big.Int

func (*Assets) Bytes added in v1.0.3

func (a *Assets) Bytes() []byte

func (*Assets) Clone added in v1.0.3

func (a *Assets) Clone() *Assets

returns nil if nil pointer receiver is cloned

func (*Assets) Equals added in v1.0.3

func (a *Assets) Equals(b *Assets) bool

func (*Assets) IsEmpty added in v1.0.3

func (a *Assets) IsEmpty() bool

func (*Assets) NFTSet added in v1.0.3

func (a *Assets) NFTSet() map[iotago.NFTID]bool

func (*Assets) Read added in v1.0.3

func (a *Assets) Read(r io.Reader) error

func (*Assets) Spend added in v1.0.3

func (a *Assets) Spend(toSpend *Assets) bool

Spend subtracts assets from the current set. Mutates receiver `a` ! If budget is not enough, returns false and leaves receiver untouched

func (*Assets) String added in v1.0.3

func (a *Assets) String() string

func (*Assets) ToDict added in v1.0.3

func (a *Assets) ToDict() dict.Dict

func (*Assets) Write added in v1.0.3

func (a *Assets) Write(w io.Writer) error

type Authorize

type Authorize interface {
	RequireCaller(agentID AgentID)
	RequireCallerAnyOf(agentID []AgentID)
	RequireCallerIsChainOwner()
}

type BLS

type BLS interface {
	ValidSignature(data []byte, pubKey []byte, signature []byte) bool
	AddressFromPublicKey(pubKey []byte) (iotago.Address, error)
	AggregateBLSSignatures(pubKeysBin [][]byte, sigsBin [][]byte) ([]byte, []byte, error)
}

type Balance

type Balance interface {
	// BalanceBaseTokens returns number of base tokens in the balance of the smart contract
	BalanceBaseTokens() uint64
	// BalanceNativeToken returns number of native token or nil if it is empty
	BalanceNativeToken(iotago.NativeTokenID) *big.Int
	// BalanceNativeTokens returns all native tokens owned by the smart contract
	BalanceNativeTokens() iotago.NativeTokens
	// OwnedNFTs returns the NFTIDs of NFTs owned by the smart contract
	OwnedNFTs() []iotago.NFTID
	// returns whether a given user owns a given amount of tokens
	HasInAccount(AgentID, *Assets) bool
}

type CallTarget

type CallTarget struct {
	Contract   Hname `json:"contract"`
	EntryPoint Hname `json:"entryPoint"`
}

CallTarget the target representation of the request

func NewCallTarget

func NewCallTarget(contract, entryPoint Hname) CallTarget

func (CallTarget) Equals

func (t CallTarget) Equals(otherTarget CallTarget) bool

type Calldata

type Calldata interface {
	Allowance() *Assets // transfer of assets to the smart contract. Debited from sender account
	Assets() *Assets    // attached assets for the UTXO request, nil for off-ledger. All goes to sender
	CallTarget() CallTarget
	GasBudget() (gas uint64, isEVM bool)
	ID() RequestID
	NFT() *NFT // Not nil if the request is an NFT request
	Params() dict.Dict
	SenderAccount() AgentID
	TargetAddress() iotago.Address // TODO implement properly. Target depends on time assumptions and UTXO type
}

type ChainID

type ChainID iotago.AliasID

ChainID represents the global identifier of the chain It is wrapped AliasAddress, an address without a private key behind

func ChainIDFromAddress

func ChainIDFromAddress(addr *iotago.AliasAddress) ChainID

func ChainIDFromAliasID

func ChainIDFromAliasID(aliasID iotago.AliasID) ChainID

ChainIDFromAliasID creates new chain ID from alias address

func ChainIDFromBytes

func ChainIDFromBytes(data []byte) (ret ChainID, err error)

ChainIDFromBytes reconstructs a ChainID from its binary representation.

func ChainIDFromString

func ChainIDFromString(bech32 string) (ChainID, error)

func EmptyChainID added in v1.0.3

func EmptyChainID() ChainID

EmptyChainID returns an empty ChainID.

func RandomChainID

func RandomChainID(seed ...[]byte) ChainID

RandomChainID creates a random chain ID. Used for testing only

func (ChainID) AsAddress

func (id ChainID) AsAddress() iotago.Address

func (ChainID) AsAliasAddress

func (id ChainID) AsAliasAddress() iotago.AliasAddress

func (ChainID) AsAliasID

func (id ChainID) AsAliasID() iotago.AliasID

func (ChainID) Bytes

func (id ChainID) Bytes() []byte

func (ChainID) Empty added in v1.0.3

func (id ChainID) Empty() bool

func (ChainID) Equals

func (id ChainID) Equals(other ChainID) bool

func (ChainID) IsSameChain

func (id ChainID) IsSameChain(agentID AgentID) bool

func (ChainID) Key

func (id ChainID) Key() string

func (*ChainID) Read added in v1.0.3

func (id *ChainID) Read(r io.Reader) error

func (ChainID) ShortString added in v1.0.3

func (id ChainID) ShortString() string

func (ChainID) String

func (id ChainID) String() string

String human-readable form (bech32)

func (*ChainID) Write added in v1.0.3

func (id *ChainID) Write(w io.Writer) error

type ChainInfo added in v1.0.3

type ChainInfo struct {
	ChainID         ChainID
	ChainOwnerID    AgentID
	GasFeePolicy    *gas.FeePolicy
	GasLimits       *gas.Limits
	BlockKeepAmount int32

	PublicURL string
	Metadata  *PublicChainMetadata
}

ChainInfo is an API structure containing the main parameters of the chain

type ContractAgentID

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

ContractAgentID is an AgentID formed by a ChainID and a contract Hname.

func NewContractAgentID

func NewContractAgentID(chainID ChainID, hname Hname) *ContractAgentID

func (*ContractAgentID) Address

func (a *ContractAgentID) Address() iotago.Address

func (*ContractAgentID) Bytes

func (a *ContractAgentID) Bytes() []byte

func (*ContractAgentID) ChainID

func (a *ContractAgentID) ChainID() ChainID

func (*ContractAgentID) Equals

func (a *ContractAgentID) Equals(other AgentID) bool

func (*ContractAgentID) Hname

func (a *ContractAgentID) Hname() Hname

func (*ContractAgentID) Kind

func (a *ContractAgentID) Kind() AgentIDKind

func (*ContractAgentID) Read added in v1.0.3

func (a *ContractAgentID) Read(r io.Reader) error

func (*ContractAgentID) String

func (a *ContractAgentID) String() string

func (*ContractAgentID) Write added in v1.0.3

func (a *ContractAgentID) Write(w io.Writer) error

type ControlAddresses added in v1.0.3

type ControlAddresses struct {
	StateAddress     iotago.Address
	GoverningAddress iotago.Address
	SinceBlockIndex  uint32
}

type ED25519

type ED25519 interface {
	ValidSignature(data []byte, pubKey []byte, signature []byte) bool
	AddressFromPublicKey(pubKey []byte) (iotago.Address, error)
}

type EVMTracer added in v1.0.3

type EVMTracer struct {
	Tracer  tracers.Tracer
	TxIndex uint64
}

type EthereumAddressAgentID

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

EthereumAddressAgentID is an AgentID formed by an Ethereum address

func NewEthereumAddressAgentID

func NewEthereumAddressAgentID(eth common.Address) *EthereumAddressAgentID

func (*EthereumAddressAgentID) Bytes

func (a *EthereumAddressAgentID) Bytes() []byte

func (*EthereumAddressAgentID) Equals

func (a *EthereumAddressAgentID) Equals(other AgentID) bool

func (*EthereumAddressAgentID) EthAddress

func (a *EthereumAddressAgentID) EthAddress() common.Address

func (*EthereumAddressAgentID) Kind

func (*EthereumAddressAgentID) Read added in v1.0.3

func (*EthereumAddressAgentID) String

func (a *EthereumAddressAgentID) String() string

func (*EthereumAddressAgentID) Write added in v1.0.3

func (a *EthereumAddressAgentID) Write(w io.Writer) error

type Event added in v1.0.3

type Event struct {
	ContractID Hname
	Payload    []byte
	Topic      string
	Timestamp  uint64
}

func EventFromBytes added in v1.0.3

func EventFromBytes(data []byte) (*Event, error)

func (*Event) Bytes added in v1.0.3

func (e *Event) Bytes() []byte

func (*Event) Read added in v1.0.3

func (e *Event) Read(r io.Reader) error

func (*Event) ToJSONStruct added in v1.0.3

func (e *Event) ToJSONStruct() *EventJSON

func (*Event) Write added in v1.0.3

func (e *Event) Write(w io.Writer) error

type EventJSON added in v1.0.3

type EventJSON struct {
	ContractID Hname  `json:"contractID" swagger:"desc(ID of the Contract that issued the event),required,min(1)"`
	Payload    string `json:"payload" swagger:"desc(payload),required"`
	Topic      string `json:"topic" swagger:"desc(topic),required"`
	Timestamp  uint64 `json:"timestamp" swagger:"desc(timestamp),required"`
}

type Expiration

type Expiration struct {
	Time          time.Time
	ReturnAddress iotago.Address
}

type Features

type Features interface {
	// Expiry returns the expiry time and sender address, or a zero time if not present
	Expiry() (time.Time, iotago.Address) // return expiry time data and sender address or nil, nil if does not exist
	ReturnAmount() (uint64, bool)
	// TimeLock returns the timelock feature, or a zero time if not present
	TimeLock() time.Time
}

type Gas

type Gas interface {
	Burn(burnCode gas.BurnCode, par ...uint64)
	Budget() uint64
	Burned() uint64
}

type Hashing

type Hashing interface {
	Blake2b(data []byte) hashing.HashValue
	Hname(name string) Hname
	Keccak(data []byte) hashing.HashValue
	Sha3(data []byte) hashing.HashValue
}

type Helpers

type Helpers interface {
	Requiref(cond bool, format string, args ...interface{})
	RequireNoError(err error, str ...string)
}

type Hname

type Hname uint32

Hname is calculated as the first 4 bytes of the BLAKE2b hash of a string, interpreted as a little-endian uint32.

func ContractIDFromEventBytes added in v1.0.3

func ContractIDFromEventBytes(eventBytes []byte) (Hname, error)

ContractIDFromEventBytes is used by blocklog to filter out specific events per contract For performance reasons it is working directly with the event bytes.

func Hn

func Hn(name string) (ret Hname)

Hn calculates the hname for the given string. For any given string s, it is guaranteed that Hn(s) != HnameNil.

func HnameFromAgentID

func HnameFromAgentID(a AgentID) Hname

HnameFromAgentID returns the hname of the AgentID, or HnameNil if not applicable.

func HnameFromBytes

func HnameFromBytes(data []byte) (ret Hname, err error)

func HnameFromString

func HnameFromString(s string) (Hname, error)

func (Hname) Bytes

func (hn Hname) Bytes() []byte

func (Hname) Clone

func (hn Hname) Clone() Hname

func (Hname) IsNil added in v1.0.3

func (hn Hname) IsNil() bool

func (*Hname) Read

func (hn *Hname) Read(r io.Reader) error

func (Hname) String

func (hn Hname) String() string

func (*Hname) Write

func (hn *Hname) Write(w io.Writer) error

type IRC27NFTMetadata added in v1.0.3

type IRC27NFTMetadata struct {
	Standard string `json:"standard"`
	Version  string `json:"version"`
	MIMEType string `json:"type"`
	URI      string `json:"uri"`
	Name     string `json:"name"`
}

IRC27NFTMetadata represents an NFT metadata according to IRC27. See: https://github.com/iotaledger/tips/blob/main/tips/TIP-0027/tip-0027.md

func IRC27NFTMetadataFromBytes added in v1.0.3

func IRC27NFTMetadataFromBytes(b []byte) (*IRC27NFTMetadata, error)

func NewIRC27NFTMetadata added in v1.0.3

func NewIRC27NFTMetadata(mimeType, uri, name string) *IRC27NFTMetadata

func (*IRC27NFTMetadata) Bytes added in v1.0.3

func (m *IRC27NFTMetadata) Bytes() []byte

type KVDecoder

type KVDecoder interface {
	kv.KVStoreReader
	GetInt16(key kv.Key, def ...int16) (int16, error)
	MustGetInt16(key kv.Key, def ...int16) int16
	GetUint16(key kv.Key, def ...uint16) (uint16, error)
	MustGetUint16(key kv.Key, def ...uint16) uint16
	GetInt32(key kv.Key, def ...int32) (int32, error)
	MustGetInt32(key kv.Key, def ...int32) int32
	GetUint32(key kv.Key, def ...uint32) (uint32, error)
	MustGetUint32(key kv.Key, def ...uint32) uint32
	GetInt64(key kv.Key, def ...int64) (int64, error)
	MustGetInt64(key kv.Key, def ...int64) int64
	GetUint64(key kv.Key, def ...uint64) (uint64, error)
	MustGetUint64(key kv.Key, def ...uint64) uint64
	GetBool(key kv.Key, def ...bool) (bool, error)
	MustGetBool(key kv.Key, def ...bool) bool
	GetTime(key kv.Key, def ...time.Time) (time.Time, error)
	MustGetTime(key kv.Key, def ...time.Time) time.Time
	GetString(key kv.Key, def ...string) (string, error)
	MustGetString(key kv.Key, def ...string) string
	GetHname(key kv.Key, def ...Hname) (Hname, error)
	MustGetHname(key kv.Key, def ...Hname) Hname
	GetHashValue(key kv.Key, def ...hashing.HashValue) (hashing.HashValue, error)
	MustGetHashValue(key kv.Key, def ...hashing.HashValue) hashing.HashValue
	GetAddress(key kv.Key, def ...iotago.Address) (iotago.Address, error)
	MustGetAddress(key kv.Key, def ...iotago.Address) iotago.Address
	GetRequestID(key kv.Key, def ...RequestID) (RequestID, error)
	MustGetRequestID(key kv.Key, def ...RequestID) RequestID
	GetAgentID(key kv.Key, def ...AgentID) (AgentID, error)
	MustGetAgentID(key kv.Key, def ...AgentID) AgentID
	GetChainID(key kv.Key, def ...ChainID) (ChainID, error)
	MustGetChainID(key kv.Key, def ...ChainID) ChainID
	GetBytes(key kv.Key, def ...[]byte) ([]byte, error)
	MustGetBytes(key kv.Key, def ...[]byte) []byte
	GetTokenScheme(key kv.Key, def ...iotago.TokenScheme) (iotago.TokenScheme, error)
	MustGetTokenScheme(key kv.Key, def ...iotago.TokenScheme) iotago.TokenScheme
	GetBigInt(key kv.Key, def ...*big.Int) (*big.Int, error)
	MustGetBigInt(key kv.Key, def ...*big.Int) *big.Int
	GetNativeTokenID(key kv.Key, def ...iotago.NativeTokenID) (iotago.NativeTokenID, error)
	MustGetNativeTokenID(key kv.Key, def ...iotago.NativeTokenID) iotago.NativeTokenID
	GetNFTID(key kv.Key, def ...iotago.NFTID) (iotago.NFTID, error)
	MustGetNFTID(key kv.Key, def ...iotago.NFTID) iotago.NFTID
}

KVDecoder is interface with all kind of utility functions extracting and decoding values from the key/value map

type LogInterface

type LogInterface interface {
	Infof(format string, param ...interface{})
	Debugf(format string, param ...interface{})
	Panicf(format string, param ...interface{})
}

type NFT

type NFT struct {
	ID       iotago.NFTID
	Issuer   iotago.Address
	Metadata []byte  // (ImmutableMetadata)
	Owner    AgentID // can be nil
}

func NFTFromBytes

func NFTFromBytes(data []byte) (*NFT, error)

func NFTFromReader added in v1.0.3

func NFTFromReader(rr *rwutil.Reader) (ret *NFT, err error)

func (*NFT) Bytes

func (nft *NFT) Bytes() []byte

func (*NFT) Read added in v1.0.3

func (nft *NFT) Read(r io.Reader) error

func (*NFT) Write added in v1.0.3

func (nft *NFT) Write(w io.Writer) error

type NilAgentID

type NilAgentID struct{}

func (*NilAgentID) Bytes

func (a *NilAgentID) Bytes() []byte

func (*NilAgentID) Equals

func (a *NilAgentID) Equals(other AgentID) bool

func (*NilAgentID) Kind

func (a *NilAgentID) Kind() AgentIDKind

func (*NilAgentID) Read added in v1.0.3

func (a *NilAgentID) Read(r io.Reader) error

func (*NilAgentID) String

func (a *NilAgentID) String() string

func (*NilAgentID) Write added in v1.0.3

func (a *NilAgentID) Write(w io.Writer) error

type OffLedgerRequest

type OffLedgerRequest interface {
	Request
	OffLedgerRequestData
	VerifySignature() error
}

func NewEVMOffLedgerCallRequest added in v1.0.3

func NewEVMOffLedgerCallRequest(chainID ChainID, callMsg ethereum.CallMsg) OffLedgerRequest

func NewEVMOffLedgerTxRequest added in v1.0.3

func NewEVMOffLedgerTxRequest(chainID ChainID, tx *types.Transaction) (OffLedgerRequest, error)

type OffLedgerRequestData

type OffLedgerRequestData interface {
	ChainID() ChainID
	Nonce() uint64
}

type OnLedgerRequest

type OnLedgerRequest interface {
	Request
	Clone() OnLedgerRequest
	Output() iotago.Output
	IsInternalUTXO(ChainID) bool
	OutputID() iotago.OutputID
	Features() Features
}

func OnLedgerFromUTXO

func OnLedgerFromUTXO(output iotago.Output, outputID iotago.OutputID) (OnLedgerRequest, error)

type OutputInfo added in v1.0.3

type OutputInfo struct {
	OutputID           iotago.OutputID
	Output             iotago.Output
	TransactionIDSpent iotago.TransactionID
}

func NewOutputInfo added in v1.0.3

func NewOutputInfo(outputID iotago.OutputID, output iotago.Output, transactionIDSpent iotago.TransactionID) *OutputInfo

func (*OutputInfo) AliasOutputWithID added in v1.0.3

func (o *OutputInfo) AliasOutputWithID() *AliasOutputWithID

func (*OutputInfo) Consumed added in v1.0.3

func (o *OutputInfo) Consumed() bool

type Params

type Params struct {
	Dict dict.Dict
	KVDecoder
}

type Privileged

type Privileged interface {
	TryLoadContract(programHash hashing.HashValue) error
	CreateNewFoundry(scheme iotago.TokenScheme, metadata []byte) (uint32, uint64)
	DestroyFoundry(uint32) uint64
	ModifyFoundrySupply(serNum uint32, delta *big.Int) int64
	GasBurnEnable(enable bool)
	MustMoveBetweenAccounts(fromAgentID, toAgentID AgentID, assets *Assets)
	DebitFromAccount(AgentID, *Assets)
	CreditToAccount(AgentID, *Assets)
	RetryUnprocessable(req Request, blockIndex uint32, outputIndex uint16)

	// EVM
	SetBlockContext(bctx interface{})
	BlockContext() interface{}
	CallOnBehalfOf(caller AgentID, target, entryPoint Hname, params dict.Dict, allowance *Assets) dict.Dict
	SetEVMFailed(*types.Transaction, *types.Receipt)
}

Privileged is a sub-interface for core contracts. Should not be called by VM plugins

type PublicChainMetadata added in v1.0.3

type PublicChainMetadata struct {
	EVMJsonRPCURL   string
	EVMWebSocketURL string
	Name            string
	Description     string
	Website         string
}

func PublicChainMetadataFromBytes added in v1.0.3

func PublicChainMetadataFromBytes(data []byte) (*PublicChainMetadata, error)

func (*PublicChainMetadata) Bytes added in v1.0.3

func (m *PublicChainMetadata) Bytes() []byte

func (*PublicChainMetadata) Read added in v1.0.3

func (m *PublicChainMetadata) Read(r io.Reader) error

func (*PublicChainMetadata) Write added in v1.0.3

func (m *PublicChainMetadata) Write(w io.Writer) error

type Receipt

type Receipt struct {
	Request       []byte             `json:"request"`
	Error         *UnresolvedVMError `json:"error"`
	GasBudget     uint64             `json:"gasBudget"`
	GasBurned     uint64             `json:"gasBurned"`
	GasFeeCharged uint64             `json:"gasFeeCharged"`
	SDCharged     uint64             `json:"storageDepositCharged"`
	BlockIndex    uint32             `json:"blockIndex"`
	RequestIndex  uint16             `json:"requestIndex"`
	ResolvedError string             `json:"resolvedError"`
	GasBurnLog    *gas.BurnLog       `json:"-"`
}

Receipt represents a blocklog.RequestReceipt with a resolved error string

func (Receipt) DeserializedRequest

func (r Receipt) DeserializedRequest() Request

func (Receipt) String

func (r Receipt) String() string

type Request

type Request interface {
	Calldata

	Bytes() []byte
	IsOffLedger() bool
	String() string

	Read(r io.Reader) error
	Write(w io.Writer) error
}

Request wraps any data which can be potentially be interpreted as a request

func RequestFromBytes added in v1.0.3

func RequestFromBytes(data []byte) (Request, error)

func RequestFromReader added in v1.0.3

func RequestFromReader(rr *rwutil.Reader) (ret Request)

type RequestID

type RequestID iotago.OutputID

func NewRequestID

func NewRequestID(txid iotago.TransactionID, index uint16) RequestID

func RequestIDFromBytes

func RequestIDFromBytes(data []byte) (ret RequestID, err error)

func RequestIDFromString

func RequestIDFromString(s string) (ret RequestID, err error)

func (RequestID) Bytes

func (rid RequestID) Bytes() []byte

func (RequestID) Equals

func (rid RequestID) Equals(other RequestID) bool

func (RequestID) LookupDigest

func (rid RequestID) LookupDigest() RequestLookupDigest

func (RequestID) OutputID

func (rid RequestID) OutputID() iotago.OutputID

func (*RequestID) Read added in v1.0.3

func (rid *RequestID) Read(r io.Reader) error

func (RequestID) Short

func (rid RequestID) Short() string

func (RequestID) String

func (rid RequestID) String() string

func (*RequestID) Write added in v1.0.3

func (rid *RequestID) Write(w io.Writer) error

type RequestKind added in v1.0.3

type RequestKind rwutil.Kind

type RequestLookupDigest

type RequestLookupDigest [RequestIDDigestLen + 2]byte

RequestLookupDigest is shortened version of the request id. It is guaranteed to be unique within one block, however it may collide globally. Used for quick checking for most requests if it was never seen

type RequestMetadata

type RequestMetadata struct {
	SenderContract Hname `json:"senderContract"`
	// ID of the target smart contract
	TargetContract Hname `json:"targetContract"`
	// entry point code
	EntryPoint Hname `json:"entryPoint"`
	// request arguments
	Params dict.Dict `json:"params"`
	// Allowance intended to the target contract to take. Nil means zero allowance
	Allowance *Assets `json:"allowance"`
	// gas budget
	GasBudget uint64 `json:"gasBudget"`
}

func RequestMetadataFromBytes

func RequestMetadataFromBytes(data []byte) (*RequestMetadata, error)

func (*RequestMetadata) Bytes

func (meta *RequestMetadata) Bytes() []byte

func (*RequestMetadata) Clone added in v1.0.3

func (meta *RequestMetadata) Clone() *RequestMetadata

returns nil if nil pointer receiver is cloned

func (*RequestMetadata) Read added in v1.0.3

func (meta *RequestMetadata) Read(r io.Reader) error

func (*RequestMetadata) Write added in v1.0.3

func (meta *RequestMetadata) Write(w io.Writer) error

type RequestParameters

type RequestParameters struct {
	// TargetAddress is the target address. It may represent another chain or L1 address
	TargetAddress iotago.Address
	// Assets attached to the output, always taken from the caller's account.
	// It expected to contain base tokens at least the amount required for storage deposit
	// It depends on the context how it is handled when base tokens are not enough for storage deposit
	Assets *Assets
	// AdjustToMinimumStorageDeposit if true base tokens in attached fungible tokens will be added to meet minimum storage deposit requirements
	AdjustToMinimumStorageDeposit bool
	// Metadata is a request metadata. It may be nil if the output is just sending assets to L1 address
	Metadata *SendMetadata
	// SendOptions includes options of the output, such as time lock or expiry parameters
	Options SendOptions
}

RequestParameters represents parameters of the on-ledger request. The output is build from these parameters

type RequestRef added in v1.0.3

type RequestRef struct {
	ID   RequestID
	Hash hashing.HashValue
}

func RequestRefFromBytes added in v1.0.3

func RequestRefFromBytes(data []byte) (*RequestRef, error)

func RequestRefFromRequest added in v1.0.3

func RequestRefFromRequest(req Request) *RequestRef

func RequestRefsFromRequests added in v1.0.3

func RequestRefsFromRequests(reqs []Request) []*RequestRef

func (*RequestRef) AsKey added in v1.0.3

func (ref *RequestRef) AsKey() RequestRefKey

func (*RequestRef) Bytes added in v1.0.3

func (ref *RequestRef) Bytes() []byte

func (*RequestRef) IsFor added in v1.0.3

func (ref *RequestRef) IsFor(req Request) bool

func (*RequestRef) Read added in v1.0.3

func (ref *RequestRef) Read(r io.Reader) error

func (*RequestRef) String added in v1.0.3

func (ref *RequestRef) String() string

func (*RequestRef) Write added in v1.0.3

func (ref *RequestRef) Write(w io.Writer) error

type RequestRefKey added in v1.0.3

type RequestRefKey [RequestRefKeyLen]byte

func (RequestRefKey) String added in v1.0.3

func (rrk RequestRefKey) String() string

type RetryOnLedgerRequest added in v1.0.3

type RetryOnLedgerRequest struct {
	OnLedgerRequest
	// contains filtered or unexported fields
}

func NewRetryOnLedgerRequest added in v1.0.3

func NewRetryOnLedgerRequest(req OnLedgerRequest, retryOutput iotago.OutputID) *RetryOnLedgerRequest

func (*RetryOnLedgerRequest) RetryOutputID added in v1.0.3

func (r *RetryOnLedgerRequest) RetryOutputID() iotago.OutputID

func (*RetryOnLedgerRequest) SetRetryOutputID added in v1.0.3

func (r *RetryOnLedgerRequest) SetRetryOutputID(oid iotago.OutputID)

type ReturnAmountOptions

type ReturnAmountOptions interface {
	ReturnTo() iotago.Address
	Amount() uint64
}

type Sandbox

type Sandbox interface {
	SandboxBase
	Authorize

	// State k/v store of the current call (in the context of the smart contract)
	State() kv.KVStore
	// Request return the request in the context of which the smart contract is called
	Request() Calldata

	// Call calls the entry point of the contract with parameters and allowance.
	// If the entry point is full entry point, allowance tokens are available to be moved from the caller's
	// accounts (if enough). If the entry point is view, 'allowance' has no effect
	Call(target, entryPoint Hname, params dict.Dict, allowance *Assets) dict.Dict
	// DeployContract deploys contract on the same chain. 'initParams' are passed to the 'init' entry point
	DeployContract(programHash hashing.HashValue, name string, initParams dict.Dict)
	// Event emits an event
	Event(topic string, payload []byte)
	// RegisterError registers an error
	RegisterError(messageFormat string) *VMErrorTemplate
	// GetEntropy 32 random bytes based on the hash of the current state transaction
	GetEntropy() hashing.HashValue
	// AllowanceAvailable specifies max remaining (after transfers) budget of assets the smart contract can take
	// from the caller with TransferAllowedFunds. Nil means no allowance left (zero budget)
	AllowanceAvailable() *Assets
	// TransferAllowedFunds moves assets from the caller's account to specified account within the budget set by Allowance.
	// Skipping 'assets' means transfer all Allowance().
	// The TransferAllowedFunds call mutates AllowanceAvailable
	// Returns remaining budget
	TransferAllowedFunds(target AgentID, transfer ...*Assets) *Assets
	// Send sends an on-ledger request (or a regular transaction to any L1 Address)
	Send(metadata RequestParameters)
	// EstimateRequiredStorageDeposit returns the amount of base tokens needed to cover for a given request's storage deposit
	EstimateRequiredStorageDeposit(r RequestParameters) uint64
	// StateAnchor properties of the anchor output
	StateAnchor() *StateAnchor

	// EVMTracer returns a non-nil tracer if an EVM tx is being traced
	// (e.g. with the debug_traceTransaction JSONRPC method).
	EVMTracer() *EVMTracer

	// Privileged is a sub-interface of the sandbox which should not be called by VM plugins
	Privileged() Privileged
}

Sandbox is an interface given to the processor to access the VMContext and virtual state, transaction builder and request parameters through it.

type SandboxBase

type SandboxBase interface {
	Helpers
	Balance
	// Params returns the parameters of the current call
	Params() *Params
	// ChainID returns the chain ID
	ChainID() ChainID
	// ChainOwnerID returns the AgentID of the current owner of the chain
	ChainOwnerID() AgentID
	// ChainInfo returns information and configuration parameters of the chain
	ChainInfo() *ChainInfo
	// Contract returns the Hname of the current contract in the context
	Contract() Hname
	// AccountID returns the agentID of the current contract (i.e. chainID + contract hname)
	AccountID() AgentID
	// Caller is the agentID of the caller.
	Caller() AgentID
	// Timestamp returns the Unix timestamp of the current state in seconds
	Timestamp() time.Time
	// Log returns a logger that outputs on the local machine. It includes Panicf method
	Log() LogInterface
	// Utils provides access to common necessary functionality
	Utils() Utils
	// Gas returns sub-interface for gas related functions. It is stateful but does not modify chain's state
	Gas() Gas
	// GetNFTData returns information about a NFTID (issuer and metadata)
	GetNFTData(nftID iotago.NFTID) *NFT
	// CallView calls another contract. Only calls view entry points
	CallView(contractHname Hname, entryPoint Hname, params dict.Dict) dict.Dict
	// StateR returns the immutable k/v store of the current call (in the context of the smart contract)
	StateR() kv.KVStoreReader
}

SandboxBase is the common interface of Sandbox and SandboxView

type SandboxView

type SandboxView interface {
	SandboxBase
}

SandboxView is an interface for read only call

type SendMetadata

type SendMetadata struct {
	TargetContract Hname
	EntryPoint     Hname
	Params         dict.Dict
	Allowance      *Assets
	GasBudget      uint64
}

SendMetadata represents content of the data payload of the output

type SendOptions

type SendOptions struct {
	Timelock   time.Time
	Expiration *Expiration
}

type StateAnchor

type StateAnchor struct {
	ChainID              ChainID
	Sender               iotago.Address
	OutputID             iotago.OutputID
	IsOrigin             bool
	StateController      iotago.Address
	GovernanceController iotago.Address
	StateIndex           uint32
	StateData            []byte
	Deposit              uint64
	NativeTokens         iotago.NativeTokens
}

StateAnchor contains properties of the anchor output/transaction in the current context

type UnresolvedVMError

type UnresolvedVMError struct {
	ErrorCode VMErrorCode `json:"code"`
	Params    []any       `json:"params"`
}

func (*UnresolvedVMError) AsGoError

func (e *UnresolvedVMError) AsGoError() error

func (*UnresolvedVMError) Bytes

func (e *UnresolvedVMError) Bytes() []byte

func (*UnresolvedVMError) Code

func (e *UnresolvedVMError) Code() VMErrorCode

func (*UnresolvedVMError) Error

func (e *UnresolvedVMError) Error() string

func (*UnresolvedVMError) Read added in v1.0.3

func (e *UnresolvedVMError) Read(r io.Reader) error

func (*UnresolvedVMError) ToJSONStruct added in v1.0.3

func (e *UnresolvedVMError) ToJSONStruct() *UnresolvedVMErrorJSON

produce the params as humanly readably json, and the uints as strings

func (*UnresolvedVMError) Write added in v1.0.3

func (e *UnresolvedVMError) Write(w io.Writer) error

type UnresolvedVMErrorJSON added in v1.0.3

type UnresolvedVMErrorJSON struct {
	ErrorCode string   `json:"code"`
	Params    []string `json:"params"`
}

type UnsignedOffLedgerRequest

type UnsignedOffLedgerRequest interface {
	Bytes() []byte
	WithNonce(nonce uint64) UnsignedOffLedgerRequest
	WithGasBudget(gasBudget uint64) UnsignedOffLedgerRequest
	WithAllowance(allowance *Assets) UnsignedOffLedgerRequest
	WithSender(sender *cryptolib.PublicKey) UnsignedOffLedgerRequest
	Sign(key *cryptolib.KeyPair) OffLedgerRequest
}

func NewOffLedgerRequest

func NewOffLedgerRequest(
	chainID ChainID,
	contract, entryPoint Hname,
	params dict.Dict,
	nonce uint64,
	gasBudget uint64,
) UnsignedOffLedgerRequest

type Utils

type Utils interface {
	Hashing() Hashing
	ED25519() ED25519
	BLS() BLS
}

Utils implement various utilities which are faster on host side than on wasm VM Implement deterministic stateless computations

type VMError

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

func (*VMError) AsGoError

func (e *VMError) AsGoError() error

func (*VMError) AsTemplate

func (e *VMError) AsTemplate() *VMErrorTemplate

func (*VMError) AsUnresolvedError

func (e *VMError) AsUnresolvedError() *UnresolvedVMError

func (*VMError) Bytes

func (e *VMError) Bytes() []byte

func (*VMError) Code

func (e *VMError) Code() VMErrorCode

func (*VMError) Error

func (e *VMError) Error() string

func (*VMError) MessageFormat

func (e *VMError) MessageFormat() string

func (*VMError) Params

func (e *VMError) Params() []any

func (*VMError) Read added in v1.0.3

func (e *VMError) Read(r io.Reader) error

func (*VMError) Write added in v1.0.3

func (e *VMError) Write(w io.Writer) error

type VMErrorBase

type VMErrorBase interface {
	error
	Code() VMErrorCode
}

VMErrorBase is the common interface of UnresolvedVMError and VMError

type VMErrorCode

type VMErrorCode struct {
	ContractID Hname
	ID         uint16
}

func NewCoreVMErrorCode

func NewCoreVMErrorCode(id uint16) VMErrorCode

func NewVMErrorCode

func NewVMErrorCode(contractID Hname, id uint16) VMErrorCode

func VMErrorCodeFromBytes

func VMErrorCodeFromBytes(b []byte) (ret VMErrorCode, err error)

func (VMErrorCode) Bytes

func (c VMErrorCode) Bytes() []byte

func (*VMErrorCode) Read added in v1.0.3

func (c *VMErrorCode) Read(r io.Reader) error

func (VMErrorCode) String

func (c VMErrorCode) String() string

func (*VMErrorCode) Write added in v1.0.3

func (c *VMErrorCode) Write(w io.Writer) error

type VMErrorTemplate

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

func NewVMErrorTemplate

func NewVMErrorTemplate(code VMErrorCode, messageFormat string) *VMErrorTemplate

func VMErrorTemplateFromBytes added in v1.0.3

func VMErrorTemplateFromBytes(data []byte) (*VMErrorTemplate, error)

func (*VMErrorTemplate) Bytes

func (e *VMErrorTemplate) Bytes() []byte

func (*VMErrorTemplate) Code

func (e *VMErrorTemplate) Code() VMErrorCode

func (*VMErrorTemplate) Create

func (e *VMErrorTemplate) Create(params ...any) *VMError

func (*VMErrorTemplate) Error

func (e *VMErrorTemplate) Error() string

VMErrorTemplate implements error just in case someone panics with VMErrorTemplate by mistake, so that we don't crash the VM because of that.

func (*VMErrorTemplate) MessageFormat

func (e *VMErrorTemplate) MessageFormat() string

func (*VMErrorTemplate) Read added in v1.0.3

func (e *VMErrorTemplate) Read(r io.Reader) error

func (*VMErrorTemplate) Write added in v1.0.3

func (e *VMErrorTemplate) Write(w io.Writer) error

type VMProcessor

type VMProcessor interface {
	GetEntryPoint(code Hname) (VMProcessorEntryPoint, bool)
}

VMProcessor is an interface to the VM processor instance.

type VMProcessorEntryPoint

type VMProcessorEntryPoint interface {
	Call(ctx interface{}) dict.Dict
	IsView() bool
}

VMProcessorEntryPoint is an abstract interface by which VM is called by passing the Sandbox interface

Directories

Path Synopsis
package coreutil provides functions to describe interface of the core contract in a compact way
package coreutil provides functions to describe interface of the core contract in a compact way

Jump to

Keyboard shortcuts

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