runtime

package
v0.12.12 Latest Latest
Warning

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

Go to latest
Published: Feb 24, 2021 License: Apache-2.0 Imports: 19 Imported by: 54

Documentation

Index

Constants

View Source
const BlockHashLength = 32

Variables

View Source
var InvalidLiteralError = fmt.Errorf("invalid literal")
View Source
var LiteralExpressionTypeError = fmt.Errorf("input is not a literal")
View Source
var UnsupportedLiteralError = fmt.Errorf("unsupported literal")

Functions

func CodeToHashValue added in v0.2.0

func CodeToHashValue(code []byte) *interpreter.ArrayValue

func ExportType added in v0.11.0

func ExportType(t sema.Type, results map[sema.TypeID]cadence.Type) cadence.Type

ExportType converts a runtime type to its corresponding Go representation.

func ExportValue added in v0.12.0

func ExportValue(value interpreter.Value, inter *interpreter.Interpreter) cadence.Value

ExportValue converts a runtime value to its native Go representation.

func LiteralValue added in v0.12.0

func LiteralValue(expression ast.Expression, ty sema.Type) (cadence.Value, error)

func NewBlockValue added in v0.2.0

func NewBlockValue(block Block) interpreter.BlockValue

func ParseLiteral added in v0.12.0

func ParseLiteral(literal string, ty sema.Type) (cadence.Value, error)

ParseLiteral parses a single literal string, that should have the given type.

Returns an error if the literal string is not a literal (e.g. it does not have valid syntax, or does not parse to a literal).

func ParseLiteralArgumentList added in v0.12.4

func ParseLiteralArgumentList(argumentList string, parameterTypes []sema.Type) ([]cadence.Value, error)

ParseLiteralArgumentList parses an argument list with literals, that should have the given types.

Returns an error if the code is not a valid argument list, or the arguments are not literals.

Types

type Address

type Address = common.Address

type Block added in v0.9.0

type Block struct {
	Height    uint64
	View      uint64
	Hash      BlockHash
	Timestamp int64
}

type BlockHash added in v0.3.0

type BlockHash [BlockHashLength]byte

type Cache added in v0.9.3

type Cache map[StorageKey]CacheEntry

type CacheEntry added in v0.9.3

type CacheEntry struct {
	// true indicates that the value definitely must be written, independent of the value.
	// false indicates that the value may has to be written if the value is modified.
	MustWrite bool
	Value     interpreter.Value
}

type ComputationLimitExceededError added in v0.2.0

type ComputationLimitExceededError struct {
	Limit uint64
}

func (ComputationLimitExceededError) Error added in v0.2.0

type Context added in v0.12.0

type Context struct {
	Interface         Interface
	Location          Location
	PredeclaredValues []ValueDeclaration
	// contains filtered or unexported fields
}

func (*Context) InitializeCodesAndPrograms added in v0.12.3

func (c *Context) InitializeCodesAndPrograms()

func (Context) SetCode added in v0.12.0

func (c Context) SetCode(location common.Location, code string)

func (Context) SetProgram added in v0.12.3

func (c Context) SetProgram(location common.Location, program *ast.Program)

func (Context) WithLocation added in v0.12.0

func (c Context) WithLocation(location common.Location) Context

type CoverageReport added in v0.12.0

type CoverageReport struct {
	Coverage map[common.LocationID]*LocationCoverage `json:"coverage"`
}

CoverageReport is a collection of coverage per location

func NewCoverageReport added in v0.12.0

func NewCoverageReport() *CoverageReport

func (*CoverageReport) AddLineHit added in v0.12.0

func (r *CoverageReport) AddLineHit(location common.Location, line int)

type EmptyRuntimeInterface

type EmptyRuntimeInterface struct{}

func (*EmptyRuntimeInterface) AddAccountKey

func (i *EmptyRuntimeInterface) AddAccountKey(_ Address, _ []byte) error

func (*EmptyRuntimeInterface) CacheProgram added in v0.2.0

func (i *EmptyRuntimeInterface) CacheProgram(_ Location, _ *ast.Program) error

func (*EmptyRuntimeInterface) CreateAccount

func (i *EmptyRuntimeInterface) CreateAccount(_ Address) (address Address, err error)

func (*EmptyRuntimeInterface) DecodeArgument added in v0.2.0

func (i *EmptyRuntimeInterface) DecodeArgument(_ []byte, _ cadence.Type) (cadence.Value, error)

func (*EmptyRuntimeInterface) EmitEvent

func (i *EmptyRuntimeInterface) EmitEvent(_ cadence.Event) error

func (*EmptyRuntimeInterface) GenerateUUID

func (i *EmptyRuntimeInterface) GenerateUUID() (uint64, error)

func (*EmptyRuntimeInterface) GetAccountContractCode added in v0.10.0

func (i *EmptyRuntimeInterface) GetAccountContractCode(_ Address, _ string) (code []byte, err error)

func (*EmptyRuntimeInterface) GetBlockAtHeight added in v0.3.0

func (i *EmptyRuntimeInterface) GetBlockAtHeight(_ uint64) (block Block, exists bool, err error)

func (*EmptyRuntimeInterface) GetCachedProgram added in v0.2.0

func (i *EmptyRuntimeInterface) GetCachedProgram(_ Location) (*ast.Program, error)

func (*EmptyRuntimeInterface) GetCode added in v0.10.0

func (i *EmptyRuntimeInterface) GetCode(_ Location) ([]byte, error)

func (*EmptyRuntimeInterface) GetComputationLimit added in v0.2.0

func (i *EmptyRuntimeInterface) GetComputationLimit() uint64

func (*EmptyRuntimeInterface) GetCurrentBlockHeight added in v0.3.0

func (i *EmptyRuntimeInterface) GetCurrentBlockHeight() (uint64, error)

func (*EmptyRuntimeInterface) GetSigningAccounts

func (i *EmptyRuntimeInterface) GetSigningAccounts() ([]Address, error)

func (EmptyRuntimeInterface) GetStorageCapacity added in v0.10.3

func (i EmptyRuntimeInterface) GetStorageCapacity(_ Address) (uint64, error)

func (EmptyRuntimeInterface) GetStorageUsed added in v0.10.3

func (i EmptyRuntimeInterface) GetStorageUsed(_ Address) (uint64, error)

func (*EmptyRuntimeInterface) GetValue

func (i *EmptyRuntimeInterface) GetValue(_, _ []byte) (value []byte, err error)

func (*EmptyRuntimeInterface) Hash added in v0.10.0

func (i *EmptyRuntimeInterface) Hash(
	_ []byte,
	_ string,
) ([]byte, error)

func (*EmptyRuntimeInterface) ImplementationDebugLog added in v0.12.8

func (i *EmptyRuntimeInterface) ImplementationDebugLog(_ string) error

func (*EmptyRuntimeInterface) ProgramLog added in v0.12.8

func (i *EmptyRuntimeInterface) ProgramLog(_ string) error

func (*EmptyRuntimeInterface) RemoveAccountContractCode added in v0.10.0

func (i *EmptyRuntimeInterface) RemoveAccountContractCode(_ Address, _ string) (err error)

func (*EmptyRuntimeInterface) RemoveAccountKey

func (i *EmptyRuntimeInterface) RemoveAccountKey(_ Address, _ int) (publicKey []byte, err error)

func (*EmptyRuntimeInterface) ResolveLocation added in v0.10.0

func (i *EmptyRuntimeInterface) ResolveLocation(identifiers []Identifier, location Location) ([]ResolvedLocation, error)

func (*EmptyRuntimeInterface) SetComputationUsed added in v0.10.4

func (i *EmptyRuntimeInterface) SetComputationUsed(uint64) error

func (*EmptyRuntimeInterface) SetValue

func (i *EmptyRuntimeInterface) SetValue(_, _, _ []byte) error

func (*EmptyRuntimeInterface) UnsafeRandom added in v0.5.0

func (i *EmptyRuntimeInterface) UnsafeRandom() (uint64, error)

func (*EmptyRuntimeInterface) UpdateAccountCode

func (i *EmptyRuntimeInterface) UpdateAccountCode(_ Address, _ []byte) error

func (*EmptyRuntimeInterface) UpdateAccountContractCode added in v0.10.0

func (i *EmptyRuntimeInterface) UpdateAccountContractCode(_ Address, _ string, _ []byte) (err error)

func (*EmptyRuntimeInterface) ValueExists

func (i *EmptyRuntimeInterface) ValueExists(_, _ []byte) (exists bool, err error)

func (*EmptyRuntimeInterface) VerifySignature added in v0.5.0

func (i *EmptyRuntimeInterface) VerifySignature(
	_ []byte,
	_ string,
	_ []byte,
	_ []byte,
	_ string,
	_ string,
) (bool, error)

type Error

type Error struct {
	Err      error
	Location common.Location
	Codes    map[common.LocationID]string
	Programs map[common.LocationID]*ast.Program
}

Error is the containing type for all errors produced by the runtime.

func (Error) Error

func (e Error) Error() string

func (Error) Unwrap

func (e Error) Unwrap() error

type HighLevelStorage added in v0.6.0

type HighLevelStorage interface {
	Interface

	// HighLevelStorageEnabled should return true
	// if the functions of HighLevelStorage should be called,
	// e.g. SetCadenceValue
	HighLevelStorageEnabled() bool

	// SetCadenceValue sets a value for the given key in the storage, owned by the given account.
	SetCadenceValue(owner Address, key string, value cadence.Value) (err error)
}

type Identifier added in v0.10.0

type Identifier = ast.Identifier

type ImportResolver

type ImportResolver = func(location common.Location) (program *ast.Program, e error)

type Interface

type Interface interface {
	// ResolveLocation resolves an import location.
	ResolveLocation(identifiers []Identifier, location Location) ([]ResolvedLocation, error)
	// GetCode returns the code at a given location
	GetCode(location Location) ([]byte, error)
	// GetCachedProgram attempts to get a parsed program from a cache.
	GetCachedProgram(Location) (*ast.Program, error)
	// CacheProgram adds a parsed program to a cache.
	CacheProgram(Location, *ast.Program) error
	// GetValue gets a value for the given key in the storage, owned by the given account.
	GetValue(owner, key []byte) (value []byte, err error)
	// SetValue sets a value for the given key in the storage, owned by the given account.
	SetValue(owner, key, value []byte) (err error)
	// CreateAccount creates a new account.
	CreateAccount(payer Address) (address Address, err error)
	// AddAccountKey appends a key to an account.
	AddAccountKey(address Address, publicKey []byte) error
	// RemoveAccountKey removes a key from an account by index.
	RemoveAccountKey(address Address, index int) (publicKey []byte, err error)
	// UpdateAccountContractCode updates the code associated with an account contract.
	UpdateAccountContractCode(address Address, name string, code []byte) (err error)
	// GetAccountContractCode returns the code associated with an account contract.
	GetAccountContractCode(address Address, name string) (code []byte, err error)
	// RemoveAccountContractCode removes the code associated with an account contract.
	RemoveAccountContractCode(address Address, name string) (err error)
	// GetSigningAccounts returns the signing accounts.
	GetSigningAccounts() ([]Address, error)
	// ProgramLog logs program logs.
	ProgramLog(string) error
	// EmitEvent is called when an event is emitted by the runtime.
	EmitEvent(cadence.Event) error
	// ValueExists returns true if the given key exists in the storage, owned by the given account.
	ValueExists(owner, key []byte) (exists bool, err error)
	// GenerateUUID is called to generate a UUID.
	GenerateUUID() (uint64, error)
	// GetComputationLimit returns the computation limit. A value <= 0 means there is no limit
	GetComputationLimit() uint64
	// SetComputationUsed reports the amount of computation used.
	SetComputationUsed(used uint64) error
	// DecodeArgument decodes a transaction argument against the given type.
	DecodeArgument(argument []byte, argumentType cadence.Type) (cadence.Value, error)
	// GetCurrentBlockHeight returns the current block height.
	GetCurrentBlockHeight() (uint64, error)
	// GetBlockAtHeight returns the block at the given height.
	GetBlockAtHeight(height uint64) (block Block, exists bool, err error)
	// UnsafeRandom returns a random uint64, where the process of random number derivation is not cryptographically
	// secure.
	UnsafeRandom() (uint64, error)
	// VerifySignature returns true if the given signature was produced by signing the given tag + data
	// using the given public key, signature algorithm, and hash algorithm.
	VerifySignature(
		signature []byte,
		tag string,
		signedData []byte,
		publicKey []byte,
		signatureAlgorithm string,
		hashAlgorithm string,
	) (bool, error)
	// Hash returns the digest of hashing the given data with using the given hash algorithm
	Hash(data []byte, hashAlgorithm string) ([]byte, error)
	// GetStorageUsed gets storage used in bytes by the address at the moment of the function call.
	GetStorageUsed(address Address) (value uint64, err error)
	// GetStorageCapacity gets storage capacity in bytes on the address.
	GetStorageCapacity(address Address) (value uint64, err error)
	// ImplementationDebugLog logs implementation log statements on a debug-level
	ImplementationDebugLog(message string) error
}

type InvalidContractDeploymentError added in v0.12.1

type InvalidContractDeploymentError struct {
	Err error
	interpreter.LocationRange
}

InvalidContractDeploymentError

func (*InvalidContractDeploymentError) ChildErrors added in v0.12.1

func (e *InvalidContractDeploymentError) ChildErrors() []error

func (*InvalidContractDeploymentError) Error added in v0.12.1

func (*InvalidContractDeploymentError) Unwrap added in v0.12.1

type InvalidContractDeploymentOriginError added in v0.12.1

type InvalidContractDeploymentOriginError struct {
	interpreter.LocationRange
}

InvalidContractDeploymentOriginError

func (*InvalidContractDeploymentOriginError) Error added in v0.12.1

type InvalidEntryPointArgumentError added in v0.5.0

type InvalidEntryPointArgumentError struct {
	Index int
	Err   error
}

func (*InvalidEntryPointArgumentError) Error added in v0.5.0

func (*InvalidEntryPointArgumentError) Unwrap added in v0.5.0

type InvalidEntryPointParameterCountError added in v0.5.0

type InvalidEntryPointParameterCountError struct {
	Expected int
	Actual   int
}

func (InvalidEntryPointParameterCountError) Error added in v0.5.0

type InvalidScriptReturnTypeError added in v0.11.0

type InvalidScriptReturnTypeError struct {
	Type sema.Type
}

InvalidScriptReturnTypeError is an error that is reported for invalid script return types.

For example, the type `Int` is valid, whereas a function type is not, because it cannot be exported/serialized.

func (*InvalidScriptReturnTypeError) Error added in v0.11.0

type InvalidTransactionAuthorizerCountError added in v0.2.0

type InvalidTransactionAuthorizerCountError struct {
	Expected int
	Actual   int
}

func (InvalidTransactionAuthorizerCountError) Error added in v0.2.0

type InvalidTransactionCountError

type InvalidTransactionCountError struct {
	Count int
}

func (InvalidTransactionCountError) Error

type InvalidTypeAssignmentError added in v0.2.0

type InvalidTypeAssignmentError struct {
	Value interpreter.Value
	Type  sema.Type
	Err   error
}

func (*InvalidTypeAssignmentError) Error added in v0.2.0

func (*InvalidTypeAssignmentError) Unwrap added in v0.2.0

func (e *InvalidTypeAssignmentError) Unwrap() error

type Location

type Location = common.Location

type LocationCoverage added in v0.12.0

type LocationCoverage struct {
	LineHits map[int]int `json:"line_hits"`
}

LocationCoverage records coverage information for a location

func NewLocationCoverage added in v0.12.0

func NewLocationCoverage() *LocationCoverage

func (*LocationCoverage) AddLineHit added in v0.12.0

func (c *LocationCoverage) AddLineHit(line int)

type Metrics added in v0.2.0

type Metrics interface {
	ProgramParsed(location common.Location, duration time.Duration)
	ProgramChecked(location common.Location, duration time.Duration)
	ProgramInterpreted(location common.Location, duration time.Duration)
	ValueEncoded(duration time.Duration)
	ValueDecoded(duration time.Duration)
}

type Option added in v0.5.0

type Option func(Runtime)

type ParsingCheckingError added in v0.9.3

type ParsingCheckingError struct {
	Err      error
	Location common.Location
}

ParsingCheckingError is an error wrapper for a parsing or a checking error at a specific location

func (*ParsingCheckingError) ChildErrors added in v0.9.3

func (e *ParsingCheckingError) ChildErrors() []error

func (*ParsingCheckingError) Error added in v0.9.3

func (e *ParsingCheckingError) Error() string

func (*ParsingCheckingError) ImportLocation added in v0.12.1

func (e *ParsingCheckingError) ImportLocation() common.Location

func (*ParsingCheckingError) Unwrap added in v0.9.3

func (e *ParsingCheckingError) Unwrap() error

type REPL

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

func NewREPL

func NewREPL(onError func(error), onResult func(interpreter.Value), checkerOptions []sema.Option) (*REPL, error)

func (*REPL) Accept

func (r *REPL) Accept(code string) (inputIsComplete bool)

func (*REPL) Suggestions

func (r *REPL) Suggestions() (result []REPLSuggestion)

type REPLSuggestion added in v0.2.0

type REPLSuggestion struct {
	Name, Description string
}

type ResolvedLocation added in v0.10.0

type ResolvedLocation = sema.ResolvedLocation

type Runtime

type Runtime interface {
	// ExecuteScript executes the given script.
	//
	// This function returns an error if the program has errors (e.g syntax errors, type errors),
	// or if the execution fails.
	ExecuteScript(Script, Context) (cadence.Value, error)

	// ExecuteTransaction executes the given transaction.
	//
	// This function returns an error if the program has errors (e.g syntax errors, type errors),
	// or if the execution fails.
	ExecuteTransaction(Script, Context) error

	// ParseAndCheckProgram parses and checks the given code without executing the program.
	//
	// This function returns an error if the program contains any syntax or semantic errors.
	ParseAndCheckProgram(source []byte, context Context) (*sema.Checker, error)

	// SetCoverageReport activates reporting coverage in the given report.
	// Passing nil disables coverage reporting (default).
	//
	SetCoverageReport(coverageReport *CoverageReport)
}

Runtime is a runtime capable of executing Cadence.

func NewInterpreterRuntime

func NewInterpreterRuntime(options ...Option) Runtime

NewInterpreterRuntime returns a interpreter-based version of the Flow runtime.

type Script added in v0.12.0

type Script struct {
	Source    []byte
	Arguments [][]byte
}

type ScriptParameterTypeNotStorableError added in v0.8.0

type ScriptParameterTypeNotStorableError struct {
	Type sema.Type
}

ScriptParameterTypeNotStorableError is an error that is reported for script parameter types that are not storable.

For example, the type `Int` is a storable type, whereas a function type is not.

func (*ScriptParameterTypeNotStorableError) Error added in v0.8.0

type StorageKey added in v0.9.3

type StorageKey struct {
	Address common.Address
	Key     string
}

type ValueDeclaration added in v0.12.0

type ValueDeclaration struct {
	Name           string
	Type           sema.Type
	Kind           common.DeclarationKind
	IsConstant     bool
	ArgumentLabels []string
	Available      func(common.Location) bool
	Value          interpreter.Value
}

func (ValueDeclaration) ValueDeclarationArgumentLabels added in v0.12.0

func (v ValueDeclaration) ValueDeclarationArgumentLabels() []string

func (ValueDeclaration) ValueDeclarationAvailable added in v0.12.0

func (v ValueDeclaration) ValueDeclarationAvailable(location common.Location) bool

func (ValueDeclaration) ValueDeclarationIsConstant added in v0.12.0

func (v ValueDeclaration) ValueDeclarationIsConstant() bool

func (ValueDeclaration) ValueDeclarationKind added in v0.12.0

func (v ValueDeclaration) ValueDeclarationKind() common.DeclarationKind

func (ValueDeclaration) ValueDeclarationName added in v0.12.0

func (v ValueDeclaration) ValueDeclarationName() string

func (ValueDeclaration) ValueDeclarationPosition added in v0.12.0

func (v ValueDeclaration) ValueDeclarationPosition() ast.Position

func (ValueDeclaration) ValueDeclarationType added in v0.12.0

func (v ValueDeclaration) ValueDeclarationType() sema.Type

func (ValueDeclaration) ValueDeclarationValue added in v0.12.0

func (v ValueDeclaration) ValueDeclarationValue() interpreter.Value

Directories

Path Synopsis
Package activations implements data structures that can be used when dealing with program scopes.
Package activations implements data structures that can be used when dealing with program scopes.
Package ast contains all AST nodes for Cadence.
Package ast contains all AST nodes for Cadence.
cmd
minifier
* Cadence - The resource-oriented smart contract programming language * * Copyright 2019-2020 Dapper Labs, Inc.
* Cadence - The resource-oriented smart contract programming language * * Copyright 2019-2020 Dapper Labs, Inc.
ir
wasm
WebAssembly (https://webassembly.org/) is an open standard for portable executable programs.
WebAssembly (https://webassembly.org/) is an open standard for portable executable programs.
tests

Jump to

Keyboard shortcuts

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