Documentation
¶
Index ¶
- Constants
- Variables
- type ArgumentsParser
- type BaseOperationCost
- type BlockchainHook
- type BuiltInCost
- type ContextHandler
- type EconomicsHandler
- type EpochNotifier
- type GasCost
- type MessageSignVerifier
- type MetaChainSystemSCsCost
- type NodesConfigProvider
- type NodesCoordinator
- type SystemEI
- type SystemSCContainer
- type SystemSCContainerFactory
- type SystemSmartContract
Constants ¶
const ( // InsufficientGasLimit defined constant for return message InsufficientGasLimit = "insufficient gas limit" // StakeNotEnabled defined constant for return message StakeNotEnabled = "stake is not enabled" // UnBondNotEnabled defined constant for return message UnBondNotEnabled = "unBond is not enabled" // UnStakeNotEnabled defined constant for return message UnStakeNotEnabled = "unStake is not enabled" // TransactionValueMustBeZero defined constant for return message TransactionValueMustBeZero = "transaction value must be zero" // CannotGetOrCreateRegistrationData defined constant for return message CannotGetOrCreateRegistrationData = "cannot get or create registration data: error - " // CannotGetAllBlsKeysFromRegistrationData defined constant for return message CannotGetAllBlsKeysFromRegistrationData = "could not get all blsKeys from registration data: error - " )
Variables ¶
var DelegationManagerSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255}
DelegationManagerSCAddress is the hard-coded address for the delegation manager smart contract
var ESDTSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 255, 255}
ESDTSCAddress is the hard-coded address for esdt issuing smart contract
var EndOfEpochAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}
EndOfEpochAddress is the hard-coded address which can call system smart contract functions at end of epoch
var ErrBLSPublicKeyAlreadyJailed = errors.New("bls public key already jailed")
ErrBLSPublicKeyAlreadyJailed signals that bls public key was already jailed
var ErrBLSPublicKeyMismatch = errors.New("public key mismatch")
ErrBLSPublicKeyMismatch signals that public keys do not match
var ErrBLSPublicKeyMissmatch = errors.New("public key missmatch")
ErrBLSPublicKeyMissmatch signals that public keys do not match
var ErrCallValueMustBeZero = errors.New("call value must be zero")
ErrCallValueMustBeZero signals that call value must be zero
var ErrCouldNotCreateNewTokenIdentifier = errors.New("token identifier could not be created")
ErrCouldNotCreateNewTokenIdentifier signals that token identifier could not be created
var ErrDataNotFoundUnderKey = errors.New("data was not found under requested key")
ErrDataNotFoundUnderKey signals that data was not found under requested key
var ErrDoubleVote = errors.New("double vote is not allowed")
ErrDoubleVote signals that user is voting for the second time for the same proposal
var ErrDuplicatesFoundInArguments = errors.New("duplicates found in arguments")
ErrDuplicatesFoundInArguments signals that duplicates were found in arguments
var ErrElementNotFound = errors.New("element was not found")
ErrElementNotFound signals that element was not found
var ErrEmptyStorage = errors.New("storage is nil for given key")
ErrEmptyStorage signals that the storage is empty for given key
var ErrIncorrectConfig = errors.New("config incorrect")
ErrIncorrectConfig signals that the config is incorrect
var ErrInputArgsIsNil = errors.New("input system smart contract arguments are nil")
ErrInputArgsIsNil signals that input arguments are nil for system smart contract
var ErrInputAsyncParamsMissing = errors.New("input does not contain async params")
ErrInputAsyncParamsMissing signals that input does not contain async params
var ErrInputCallValueIsNil = errors.New("input value for system smart contract is nil")
ErrInputCallValueIsNil signals that input call value is nil for system smart contract
var ErrInputCallerAddrIsNil = errors.New("input called address for system smart contract is nil")
ErrInputCallerAddrIsNil signals that input caller address is nil for system smart contract
var ErrInputFunctionIsNil = errors.New("input function for system smart contract is nil")
ErrInputFunctionIsNil signals that input function is nil for system smart contract
var ErrInputRecipientAddrIsNil = errors.New("input recipient address for system smart contract is nil")
ErrInputRecipientAddrIsNil signals that input recipient address for system smart contract is nil
var ErrInternalErrorWhileSettingNewOwner = errors.New("internal error when setting new contract owner")
ErrInternalErrorWhileSettingNewOwner signals that an error occurred when setting the new contract owner
var ErrInvalidAddress = errors.New("invalid address")
ErrInvalidAddress signals that invalid address has been provided
var ErrInvalidArgument = errors.New("invalid argument")
ErrInvalidArgument signals that invalid argument has been provided
var ErrInvalidBLSKeys = errors.New("invalid bls keys")
ErrInvalidBLSKeys signals that invalid bls keys has been provided
var ErrInvalidBaseIssuingCost = errors.New("invalid base issuing cost")
ErrInvalidBaseIssuingCost signals that invalid base issuing cost has been provided
var ErrInvalidCaller = errors.New("the function was called by a not authorized user")
ErrInvalidCaller signals that the functions was called by a not authorized user
var ErrInvalidDelegationSCConfig = errors.New("invalid delegation sc config")
ErrInvalidDelegationSCConfig signals that invalid delegation sc config has been provided
var ErrInvalidEndOfEpochAccessAddress = errors.New("invalid end of epoch access address")
ErrInvalidEndOfEpochAccessAddress signals that end of epoch access address is invalid
var ErrInvalidGenesisTotalSupply = errors.New("invalid genesis total supply cost")
ErrInvalidGenesisTotalSupply signals that provided genesis total supply is invalid
var ErrInvalidJailAccessAddress = errors.New("invalid jailing access address")
ErrInvalidJailAccessAddress signals that invalid jailing access address was provided
var ErrInvalidMaxNumberOfNodes = errors.New("invalid number of max number of nodes")
ErrInvalidMaxNumberOfNodes signals that invalid number of max number of nodes has been provided
var ErrInvalidMinCreationDeposit = errors.New("invalid min creation deposit")
ErrInvalidMinCreationDeposit signals that invalid min creation deposit has been provided
var ErrInvalidMinStakeValue = errors.New("invalid min stake value")
ErrInvalidMinStakeValue signals that an invalid min stake value was provided
var ErrInvalidMinStepValue = errors.New("invalid min step value")
ErrInvalidMinStepValue signals that an invalid min step value was provided
var ErrInvalidMinUnstakeTokensValue = errors.New("invalid min unstake tokens value")
ErrInvalidMinUnstakeTokensValue signals that an invalid min unstake tokens value was provided
var ErrInvalidNodeLimitPercentage = errors.New("invalid node limit percentage")
ErrInvalidNodeLimitPercentage signals the invalid node limit percentage was provided
var ErrInvalidNodePrice = errors.New("invalid node price")
ErrInvalidNodePrice signals that an invalid node price was provided
var ErrInvalidNumOfArguments = errors.New("invalid number of arguments")
ErrInvalidNumOfArguments signals that invalid number of arguments has been provided
var ErrInvalidNumberOfDecimals = errors.New("invalid number of decimals")
ErrInvalidNumberOfDecimals signals that an invalid number of decimals has been provided
var ErrInvalidStakeLimitPercentage = errors.New("invalid stake limit percentage")
ErrInvalidStakeLimitPercentage signals the invalid stake limit percentage was provided
var ErrInvalidStakingAccessAddress = errors.New("invalid staking access address")
ErrInvalidStakingAccessAddress signals that invalid staking access address was provided
var ErrInvalidStartEndVoteEpoch = errors.New("invalid start/end vote epoch")
ErrInvalidStartEndVoteEpoch signals that invalid arguments where passed for start or end vote epoch
var ErrInvalidUnJailCost = errors.New("invalid unjail cost")
ErrInvalidUnJailCost signals that provided unjail cost is invalid
var ErrInvalidWaitingList = errors.New("invalid waiting list")
ErrInvalidWaitingList signals that waiting list is invalid
var ErrKeyAlreadyRegistered = errors.New("bls key already registered")
ErrKeyAlreadyRegistered signals that bls key is already registered
var ErrNFTCreateRoleAlreadyExists = errors.New("NFT create role already exists")
ErrNFTCreateRoleAlreadyExists signals that NFT create role already exists
var ErrNegativeBleedPercentagePerRound = errors.New("negative bleed percentage per round")
ErrNegativeBleedPercentagePerRound signals that negative bleed percentage per round has been provided
var ErrNegativeInitialStakeValue = errors.New("initial stake value is negative")
ErrNegativeInitialStakeValue signals that a negative initial stake value was provided
var ErrNegativeMaximumPercentageToBleed = errors.New("negative maximum percentage to bleed")
ErrNegativeMaximumPercentageToBleed signals that negative maximum percentage to bleed has been provided
var ErrNegativeOrZeroInitialSupply = errors.New("negative initial supply was provided")
ErrNegativeOrZeroInitialSupply signals that negative initial supply has been provided
var ErrNilAddressPubKeyConverter = errors.New("nil address public key converter")
ErrNilAddressPubKeyConverter signals that the provided public key converter is nil
var ErrNilArgumentsParser = errors.New("nil arguments parser")
ErrNilArgumentsParser signals that arguments parses is nil
var ErrNilBlockchainHook = errors.New("blockchain hook is nil")
ErrNilBlockchainHook signals that blockchain hook is nil
var ErrNilChanceComputer = errors.New("nil chance computer")
ErrNilChanceComputer signals that nil chance computer has been provided
var ErrNilCryptoHook = errors.New("crypto hook is nil")
ErrNilCryptoHook signals that crypto hook is nil
var ErrNilEconomicsData = errors.New("nil economics data")
ErrNilEconomicsData signals that nil economics data has been provided
var ErrNilEnableEpochsHandler = errors.New("nil enable epochs handler")
ErrNilEnableEpochsHandler signals that a nil enable epochs handler has been provided
var ErrNilEndOfEpochSmartContractAddress = errors.New("nil end of epoch smart contract address")
ErrNilEndOfEpochSmartContractAddress signals that the end of epoch smart contract address is nil
var ErrNilGasSchedule = errors.New("nil gas schedule")
ErrNilGasSchedule signals that nil gas schedule has been provided
var ErrNilHasher = errors.New("nil Hasher")
ErrNilHasher signals that an operation has been attempted to or with a nil hasher implementation
var ErrNilKeyGenerator = errors.New("nil key generator")
ErrNilKeyGenerator signals that key generator is nil
var ErrNilMarshalizer = errors.New("nil Marshalizer")
ErrNilMarshalizer signals that an operation has been attempted to or with a nil Marshalizer implementation
var ErrNilMessageSignVerifier = errors.New("nil message sign verifier")
ErrNilMessageSignVerifier signals that message sign verifier is nil
var ErrNilNodesConfigProvider = errors.New("nil nodes config provider")
ErrNilNodesConfigProvider signals that an operation has been attempted to or with a nil nodes config provider
var ErrNilNodesCoordinator = errors.New("nil nodes coordinator")
ErrNilNodesCoordinator signals that nil nodes coordinator was provided
var ErrNilOrEmptyKey = errors.New("nil or empty key")
ErrNilOrEmptyKey signals that key is nil or empty
var ErrNilPublicKey = errors.New("nil public key")
ErrNilPublicKey signals that nil public key has been provided
var ErrNilShardCoordinator = errors.New("nil shard coordinator")
ErrNilShardCoordinator signals that a nil shard coordinator was provided
var ErrNilSingleSigner = errors.New("nil single signer")
ErrNilSingleSigner signals that the single signer is nil
var ErrNilStakingSmartContractAddress = errors.New("nil staking smart contract address")
ErrNilStakingSmartContractAddress signals that staking smart contract address is nil
var ErrNilSystemContractsContainer = errors.New("system contract container is nil")
ErrNilSystemContractsContainer signals that the provided system contract container is nil
var ErrNilSystemEnvironmentInterface = errors.New("system environment interface is nil")
ErrNilSystemEnvironmentInterface signals that a nil system environment interface was provided
var ErrNilSystemSCConfig = errors.New("nil system sc config")
ErrNilSystemSCConfig signals that nil system sc config was provided
var ErrNilUserAccountsDB = errors.New("nil user accounts DB")
ErrNilUserAccountsDB signals that nil user accounts DB was provided
var ErrNilVMType = errors.New("vm type is nil")
ErrNilVMType signals that the provided vm type is nil
var ErrNilValidatorAccountsDB = errors.New("nil validator accounts DB")
ErrNilValidatorAccountsDB signals that nil validator accounts DB was provided
var ErrNilValidatorSmartContractAddress = errors.New("nil validator smart contract address")
ErrNilValidatorSmartContractAddress signals that validator smart contract address is nil
var ErrNoTickerWithGivenName = errors.New("no ticker with given name")
ErrNoTickerWithGivenName signals that ticker does not exist with given name
var ErrNotEnoughArgumentsToStake = errors.New("not enough arguments to stake")
ErrNotEnoughArgumentsToStake signals that the arguments provided are not enough
var ErrNotEnoughGas = errors.New("not enough gas")
ErrNotEnoughGas signals that there is not enough gas for execution
var ErrNotEnoughInitialOwnerFunds = errors.New("not enough initial owner funds")
ErrNotEnoughInitialOwnerFunds signals that not enough initial owner funds has been provided
var ErrNotEnoughStakeToVote = errors.New("not enough stake/delegate to vote")
ErrNotEnoughStakeToVote signals that the stake/delegation is not enough to vote
var ErrNotEnoughVotingPower = errors.New("not enough voting power to cast this vote")
ErrNotEnoughVotingPower signals that there is not enough voting power to cast the vote
var ErrOwnerCannotUnDelegate = errors.New("owner cannot undelegate, contract still active")
ErrOwnerCannotUnDelegate signals that owner cannot undelegate as contract is still active
var ErrProposalNotFound = errors.New("proposal was not found in storage")
ErrProposalNotFound signals that the storage is empty for given key
var ErrRedelegateValueBelowMinimum = errors.New("can not re-delegate as the remaining value will be below the minimum required")
ErrRedelegateValueBelowMinimum signals that the re-delegate added to the remaining value will be below the minimum required
var ErrTickerNameNotValid = errors.New("ticker name is not valid")
ErrTickerNameNotValid signals that ticker name is not valid
var ErrTokenNameNotHumanReadable = errors.New("token name is not human readable")
ErrTokenNameNotHumanReadable signals that token name is not human-readable
var ErrUnknownSystemSmartContract = errors.New("missing system smart contract on selected address")
ErrUnknownSystemSmartContract signals that there is no system smart contract on the provided address
var ErrVotedForAnExpiredProposal = errors.New("voting period is over for this proposal")
ErrVotedForAnExpiredProposal signals that voting was done for an expired proposal
var ErrVotingNotStartedForProposal = errors.New("voting has not yet started for this proposal")
ErrVotingNotStartedForProposal signals that voting was done for a proposal that not begins yet
var ErrWaitingListDisabled = errors.New("waiting list is disabled since staking v4 activation")
ErrWaitingListDisabled signals that waiting list has been disabled, since staking v4 is active
var ErrWrongNewOwnerAddress = errors.New("wrong new owner address")
ErrWrongNewOwnerAddress signals that a wrong new owner address was provided
var ErrWrongRewardAddress = errors.New("wrong reward address")
ErrWrongRewardAddress signals that a wrong reward address was provided
var ErrWrongTypeAssertion = errors.New("wrong type assertion")
ErrWrongTypeAssertion signals that a wrong type assertion occurred.
var FirstDelegationSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255}
FirstDelegationSCAddress is the hard-coded address for the first delegation contract, the other will follow
var GovernanceSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 255}
GovernanceSCAddress is the hard-coded address for governance smart contract
var JailingAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}
JailingAddress is the hard-coded address which can call jail function
var StakingSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255}
StakingSCAddress is the hard-coded address for smart contracts
var ValidatorSCAddress = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255}
ValidatorSCAddress is the hard-coded address for validator smart contract
Functions ¶
This section is empty.
Types ¶
type ArgumentsParser ¶
type ArgumentsParser interface {
ParseData(data string) (string, [][]byte, error)
IsInterfaceNil() bool
}
ArgumentsParser defines the functionality to parse transaction data into arguments and code for smart contracts
type BaseOperationCost ¶
type BaseOperationCost struct {
StorePerByte uint64
ReleasePerByte uint64
DataCopyPerByte uint64
PersistPerByte uint64
CompilePerByte uint64
AoTPreparePerByte uint64
GetCode uint64
}
BaseOperationCost defines cost for base operation cost
type BlockchainHook ¶
type BlockchainHook interface {
GetStorageData(accountAddress []byte, index []byte) ([]byte, uint32, error)
CurrentNonce() uint64
CurrentRound() uint64
CurrentEpoch() uint32
GetUserAccount(address []byte) (vmcommon.UserAccountHandler, error)
GetCode(account vmcommon.UserAccountHandler) []byte
GetShardOfAddress(address []byte) uint32
IsSmartContract(address []byte) bool
IsPayable(sndAddress []byte, recvAddress []byte) (bool, error)
NumberOfShards() uint32
CurrentRandomSeed() []byte
Close() error
GetSnapshot() int
RevertToSnapshot(snapshot int) error
IsBuiltinFunctionName(functionName string) bool
ProcessBuiltInFunction(input *vmcommon.ContractCallInput) (*vmcommon.VMOutput, error)
}
BlockchainHook is the interface for VM blockchain callbacks
type BuiltInCost ¶
type BuiltInCost struct {
ChangeOwnerAddress uint64
ClaimDeveloperRewards uint64
SaveUserName uint64
SaveKeyValue uint64
ESDTTransfer uint64
ESDTBurn uint64
ESDTLocalMint uint64
ESDTLocalBurn uint64
ESDTNFTCreate uint64
ESDTNFTAddQuantity uint64
ESDTNFTBurn uint64
ESDTNFTTransfer uint64
ESDTNFTChangeCreateOwner uint64
ESDTNFTAddUri uint64
ESDTNFTUpdateAttributes uint64
ESDTNFTMultiTransfer uint64
TrieLoadPerNode uint64
TrieStorePerNode uint64
}
BuiltInCost defines cost for built-in methods
type ContextHandler ¶
type ContextHandler interface {
SystemEI
GetContract(address []byte) (SystemSmartContract, error)
SetSystemSCContainer(scContainer SystemSCContainer) error
CreateVMOutput() *vmcommon.VMOutput
CleanCache()
SetSCAddress(addr []byte)
AddCode(addr []byte, code []byte)
AddTxValueToSmartContract(value *big.Int, scAddress []byte)
SetGasProvided(gasProvided uint64)
GetReturnMessage() string
}
ContextHandler defines the methods needed to execute system smart contracts
type EconomicsHandler ¶
EconomicsHandler defines the methods to get data from the economics component
type EpochNotifier ¶
type EpochNotifier interface {
RegisterNotifyHandler(handler vmcommon.EpochSubscriberHandler)
CurrentEpoch() uint32
CheckEpoch(header data.HeaderHandler)
IsInterfaceNil() bool
}
EpochNotifier can notify upon an epoch change and provide the current epoch
type GasCost ¶
type GasCost struct {
BaseOperationCost BaseOperationCost
MetaChainSystemSCsCost MetaChainSystemSCsCost
BuiltInCost BuiltInCost
}
GasCost holds all the needed gas costs for system smart contracts
type MessageSignVerifier ¶
type MessageSignVerifier interface {
Verify(message []byte, signedMessage []byte, pubKey []byte) error
IsInterfaceNil() bool
}
MessageSignVerifier is used to verify if message was signed with given public key
type MetaChainSystemSCsCost ¶
type MetaChainSystemSCsCost struct {
Stake uint64
UnStake uint64
UnBond uint64
Claim uint64
Get uint64
ChangeRewardAddress uint64
ChangeValidatorKeys uint64
UnJail uint64
ESDTIssue uint64
ESDTOperations uint64
Proposal uint64
Vote uint64
DelegateVote uint64
RevokeVote uint64
CloseProposal uint64
DelegationOps uint64
UnStakeTokens uint64
UnBondTokens uint64
DelegationMgrOps uint64
ValidatorToDelegation uint64
GetAllNodeStates uint64
GetActiveFund uint64
FixWaitingListSize uint64
}
MetaChainSystemSCsCost defines the cost of system staking SCs methods
type NodesConfigProvider ¶
type NodesConfigProvider interface {
MinNumberOfNodes() uint32
MinNumberOfNodesWithHysteresis() uint32
IsInterfaceNil() bool
}
NodesConfigProvider defines the functionality which is needed for nodes config in system smart contracts
type NodesCoordinator ¶ added in v1.7.0
NodesCoordinator defines the methods needed about nodes in system SCs from nodes coordinator
type SystemEI ¶
type SystemEI interface {
ExecuteOnDestContext(destination []byte, sender []byte, value *big.Int, input []byte) (*vmcommon.VMOutput, error)
DeploySystemSC(baseContract []byte, newAddress []byte, ownerAddress []byte, initFunction string, value *big.Int, input [][]byte) (vmcommon.ReturnCode, error)
Transfer(destination []byte, sender []byte, value *big.Int, input []byte, gasLimit uint64)
SendGlobalSettingToAll(sender []byte, input []byte)
GetBalance(addr []byte) *big.Int
SetStorage(key []byte, value []byte)
SetStorageForAddress(address []byte, key []byte, value []byte)
AddReturnMessage(msg string)
AddLogEntry(entry *vmcommon.LogEntry)
GetStorage(key []byte) []byte
GetStorageFromAddress(address []byte, key []byte) []byte
Finish(value []byte)
UseGas(gasToConsume uint64) error
GasLeft() uint64
BlockChainHook() BlockchainHook
CryptoHook() vmcommon.CryptoHook
IsValidator(blsKey []byte) bool
StatusFromValidatorStatistics(blsKey []byte) string
CanUnJail(blsKey []byte) bool
IsBadRating(blsKey []byte) bool
CleanStorageUpdates()
GetTotalSentToUser(dest []byte) *big.Int
GetLogs() []*vmcommon.LogEntry
SetOwnerOperatingOnAccount(newOwner []byte) error
UpdateCodeDeployerAddress(scAddress string, newOwner []byte) error
ProcessBuiltInFunction(sender, destination []byte, function string, arguments [][]byte) (*vmcommon.VMOutput, error)
IsInterfaceNil() bool
}
SystemEI defines the environment interface system smart contract can use
type SystemSCContainer ¶
type SystemSCContainer interface {
Get(key []byte) (SystemSmartContract, error)
Add(key []byte, val SystemSmartContract) error
Replace(key []byte, val SystemSmartContract) error
Remove(key []byte)
Len() int
Keys() [][]byte
IsInterfaceNil() bool
}
SystemSCContainer defines a system smart contract holder data type with basic functionality
type SystemSCContainerFactory ¶
type SystemSCContainerFactory interface {
CreateForGenesis() (SystemSCContainer, error)
Create() (SystemSCContainer, error)
IsInterfaceNil() bool
}
SystemSCContainerFactory defines the functionality to create a system smart contract container
type SystemSmartContract ¶
type SystemSmartContract interface {
Execute(args *vmcommon.ContractCallInput) vmcommon.ReturnCode
CanUseContract() bool
SetNewGasCost(gasCost GasCost)
IsInterfaceNil() bool
}
SystemSmartContract interface defines the function a system smart contract should have