smartContract

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Nov 7, 2024 License: GPL-3.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const MaxGasLimitPerQuery = 300_000_000_000

MaxGasLimitPerQuery - each unit is the equivalent of 1 nanosecond processing time

View Source
const (
	// TooMuchGasProvidedMessage is the message for the too much gas provided error
	TooMuchGasProvidedMessage = "too much gas provided"
)

Variables

This section is empty.

Functions

func NewArgumentParser

func NewArgumentParser() *argumentParser

NewArgumentParser creates a full argument parser component

func NewScQueryServiceDispatcher

func NewScQueryServiceDispatcher(list []process.SCQueryService) (*scQueryServiceDispatcher, error)

NewScQueryServiceDispatcher returns a smart contract query service dispatcher that for each function call will forward the request towards the provided list in a round-robin fashion

func NewSmartContractProcessor

func NewSmartContractProcessor(args scrCommon.ArgsNewSmartContractProcessor) (*scProcessor, error)

NewSmartContractProcessor creates a smart contract processor that creates and interprets VM data

Types

type ArgsNewSCQueryService

type ArgsNewSCQueryService struct {
	VmContainer                process.VirtualMachinesContainer
	EconomicsFee               process.FeeHandler
	BlockChainHook             process.BlockChainHookWithAccountsAdapter
	MainBlockChain             data.ChainHandler
	APIBlockChain              data.ChainHandler
	WasmVMChangeLocker         common.Locker
	Bootstrapper               process.Bootstrapper
	AllowExternalQueriesChan   chan struct{}
	MaxGasLimitPerQuery        uint64
	HistoryRepository          dblookupext.HistoryRepository
	ShardCoordinator           sharding.Coordinator
	StorageService             dataRetriever.StorageService
	Marshaller                 marshal.Marshalizer
	Hasher                     hashing.Hasher
	Uint64ByteSliceConverter   typeConverters.Uint64ByteSliceConverter
	IsInHistoricalBalancesMode bool
}

ArgsNewSCQueryService defines the arguments needed for the sc query service

type ArgsNewSmartContractProcessor

type ArgsNewSmartContractProcessor struct {
	VmContainer         process.VirtualMachinesContainer
	ArgsParser          process.ArgumentsParser
	Hasher              hashing.Hasher
	Marshalizer         marshal.Marshalizer
	AccountsDB          state.AccountsAdapter
	BlockChainHook      process.BlockChainHookHandler
	BuiltInFunctions    vmcommon.BuiltInFunctionContainer
	PubkeyConv          core.PubkeyConverter
	ShardCoordinator    sharding.Coordinator
	ScrForwarder        process.IntermediateTransactionHandler
	TxFeeHandler        process.TransactionFeeHandler
	EconomicsFee        process.FeeHandler
	TxTypeHandler       process.TxTypeHandler
	GasHandler          process.GasHandler
	GasSchedule         core.GasScheduleNotifier
	TxLogsProcessor     process.TransactionLogProcessor
	EnableEpochsHandler common.EnableEpochsHandler
	BadTxForwarder      process.IntermediateTransactionHandler
	VMOutputCacher      storage.Cacher
	WasmVMChangeLocker  common.Locker
	IsGenesisProcessing bool
}

ArgsNewSmartContractProcessor defines the arguments needed for new smart contract processor

type SCQueryService

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

SCQueryService can execute Get functions over SC to fetch stored values

func NewSCQueryService

func NewSCQueryService(
	args ArgsNewSCQueryService,
) (*SCQueryService, error)

NewSCQueryService returns a new instance of SCQueryService

func (*SCQueryService) Close

func (service *SCQueryService) Close() error

Close closes all underlying components

func (*SCQueryService) ComputeScCallGasLimit

func (service *SCQueryService) ComputeScCallGasLimit(tx *transaction.Transaction) (uint64, error)

ComputeScCallGasLimit will estimate how many gas a transaction will consume

func (*SCQueryService) ExecuteQuery

func (service *SCQueryService) ExecuteQuery(query *process.SCQuery) (*vmcommon.VMOutput, common.BlockInfo, error)

ExecuteQuery returns the VMOutput resulted upon running the function on the smart contract

func (*SCQueryService) IsInterfaceNil

func (service *SCQueryService) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

type TestScProcessor

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

TestScProcessor extends scProcessor and is used in tests as it exposes some functions that are not supposed to be used in production code Exported functions simplify the reproduction of edge cases

func NewTestScProcessor

func NewTestScProcessor(internalData *scProcessor) *TestScProcessor

NewTestScProcessor -

func (TestScProcessor) CheckBuiltinFunctionIsExecutable

func (sc TestScProcessor) CheckBuiltinFunctionIsExecutable(expectedBuiltinFunction string, tx data.TransactionHandler) error

CheckBuiltinFunctionIsExecutable validates the builtin function arguments and tx fields without executing it

func (*TestScProcessor) CleanGasRefunded

func (tsp *TestScProcessor) CleanGasRefunded()

CleanGasRefunded cleans the gas computation handler

func (TestScProcessor) DeploySmartContract

func (sc TestScProcessor) DeploySmartContract(tx data.TransactionHandler, acntSnd state.UserAccountHandler) (vmcommon.ReturnCode, error)

DeploySmartContract processes the transaction, then deploy the smart contract into VM, final code is saved in account

func (TestScProcessor) ExecuteBuiltInFunction

func (sc TestScProcessor) ExecuteBuiltInFunction(
	tx data.TransactionHandler,
	acntSnd, acntDst state.UserAccountHandler,
) (vmcommon.ReturnCode, error)

ExecuteBuiltInFunction processes the transaction, executes the built in function call and subsequent results

func (TestScProcessor) ExecuteSmartContractTransaction

func (sc TestScProcessor) ExecuteSmartContractTransaction(
	tx data.TransactionHandler,
	acntSnd, acntDst state.UserAccountHandler,
) (vmcommon.ReturnCode, error)

ExecuteSmartContractTransaction processes the transaction, call the VM and processes the SC call output

func (TestScProcessor) GasScheduleChange

func (sc TestScProcessor) GasScheduleChange(gasSchedule map[string]map[string]uint64)

GasScheduleChange sets the new gas schedule where it is needed Warning: do not use flags in this function as it will raise backward compatibility issues because the GasScheduleChange is not called on each epoch change

func (*TestScProcessor) GetAllSCRs

func (tsp *TestScProcessor) GetAllSCRs() []data.TransactionHandler

GetAllSCRs returns all generated scrs

func (*TestScProcessor) GetCompositeTestError

func (tsp *TestScProcessor) GetCompositeTestError() error

GetCompositeTestError composes all errors found in the logs or by parsing the scr forwarder's contents

func (*TestScProcessor) GetGasRemaining

func (tsp *TestScProcessor) GetGasRemaining() uint64

GetGasRemaining returns the remaining gas from the last transaction

func (TestScProcessor) IsInterfaceNil

func (sc TestScProcessor) IsInterfaceNil() bool

IsInterfaceNil returns true if there is no value under the interface

func (TestScProcessor) IsPayable

func (sc TestScProcessor) IsPayable(sndAddress []byte, recvAddress []byte) (bool, error)

IsPayable returns if address is payable, smart contract ca set to false

func (TestScProcessor) ProcessIfError

func (sc TestScProcessor) ProcessIfError(
	acntSnd state.UserAccountHandler,
	txHash []byte,
	tx data.TransactionHandler,
	returnCode string,
	returnMessage []byte,
	snapshot int,
	gasLocked uint64,
) error

ProcessIfError creates a smart contract result, consumes the gas and returns the value to the user

func (TestScProcessor) ProcessSmartContractResult

func (sc TestScProcessor) ProcessSmartContractResult(scr *smartContractResult.SmartContractResult) (vmcommon.ReturnCode, error)

ProcessSmartContractResult updates the account state from the smart contract result

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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