native

package
v0.92.0 Latest Latest
Warning

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

Go to latest
Published: Dec 28, 2020 License: MIT Imports: 36 Imported by: 4

Documentation

Index

Constants

View Source
const GASFactor = NEOTotalSupply

GASFactor is a divisor for finding GAS integral value.

View Source
const (

	// NEOTotalSupply is the total amount of NEO in the system.
	NEOTotalSupply = 100000000
)
View Source
const (

	// NotaryVerificationPrice is the price of `verify` Notary method.
	NotaryVerificationPrice = 100_0000
)
View Source
const StoragePrice = 100000

StoragePrice is the price to pay for 1 byte of storage.

Variables

View Source
var (
	ErrAlreadyDesignated = errors.New("already designated given role at current block")
	ErrEmptyNodeList     = errors.New("node list is empty")
	ErrInvalidIndex      = errors.New("invalid index")
	ErrInvalidRole       = errors.New("invalid role")
	ErrLargeNodeList     = errors.New("node list is too large")
	ErrNoBlock           = errors.New("no persisting block in the context")
)

Various errors.

View Source
var (
	ErrBigArgument      = errors.New("some of the arguments are invalid")
	ErrInvalidWitness   = errors.New("witness check failed")
	ErrNotEnoughGas     = errors.New("gas limit exceeded")
	ErrRequestNotFound  = errors.New("oracle request not found")
	ErrResponseNotFound = errors.New("oracle response not found")
)

Various validation errors.

Functions

func Call added in v0.91.0

func Call(ic *interop.Context) error

Call calls specified native contract method.

func GetOracleResponseScript added in v0.92.0

func GetOracleResponseScript() []byte

GetOracleResponseScript returns script for transaction with oracle response.

func OnPersist added in v0.92.0

func OnPersist(ic *interop.Context) error

OnPersist calls OnPersist methods for all native contracts.

func PostPersist added in v0.92.0

func PostPersist(ic *interop.Context) error

PostPersist calls PostPersist methods for all native contracts.

func ShouldUpdateCommittee added in v0.92.0

func ShouldUpdateCommittee(h uint32, bc blockchainer.Blockchainer) bool

ShouldUpdateCommittee returns true if committee is updated at block h.

Types

type Contracts

type Contracts struct {
	Management *Management
	NEO        *NEO
	GAS        *GAS
	Policy     *Policy
	Oracle     *Oracle
	Designate  *Designate
	Notary     *Notary
	Contracts  []interop.Contract
	// contains filtered or unexported fields
}

Contracts is a set of registered native contracts.

func NewContracts

func NewContracts(p2pSigExtensionsEnabled bool) *Contracts

NewContracts returns new set of native contracts with new GAS, NEO, Policy, Oracle, Designate and (optional) Notary contracts.

func (*Contracts) ByHash

func (cs *Contracts) ByHash(h util.Uint160) interop.Contract

ByHash returns native contract with the specified hash.

func (*Contracts) ByName added in v0.92.0

func (cs *Contracts) ByName(name string) interop.Contract

ByName returns native contract with the specified name.

func (*Contracts) GetPersistScript

func (cs *Contracts) GetPersistScript() []byte

GetPersistScript returns VM script calling "onPersist" syscall for native contracts.

func (*Contracts) GetPostPersistScript added in v0.92.0

func (cs *Contracts) GetPostPersistScript() []byte

GetPostPersistScript returns VM script calling "postPersist" syscall for native contracts.

type Designate added in v0.92.0

type Designate struct {
	interop.ContractMD
	NEO *NEO
	// contains filtered or unexported fields
}

Designate represents designation contract.

func (*Designate) DesignateAsRole added in v0.92.0

func (s *Designate) DesignateAsRole(ic *interop.Context, r Role, pubs keys.PublicKeys) error

DesignateAsRole sets nodes for role r.

func (*Designate) GetDesignatedByRole added in v0.92.0

func (s *Designate) GetDesignatedByRole(d dao.DAO, r Role, index uint32) (keys.PublicKeys, uint32, error)

GetDesignatedByRole returns nodes for role r.

func (*Designate) Initialize added in v0.92.0

func (s *Designate) Initialize(ic *interop.Context) error

Initialize initializes Oracle contract.

func (*Designate) Metadata added in v0.92.0

func (s *Designate) Metadata() *interop.ContractMD

Metadata returns contract metadata.

func (*Designate) OnPersist added in v0.92.0

func (s *Designate) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*Designate) PostPersist added in v0.92.0

func (s *Designate) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

type GAS

type GAS struct {
	NEO *NEO
	// contains filtered or unexported fields
}

GAS represents GAS native contract.

func (*GAS) Decimals

func (c *GAS) Decimals(_ *interop.Context, _ []stackitem.Item) stackitem.Item

func (*GAS) Initialize

func (g *GAS) Initialize(ic *interop.Context) error

Initialize initializes GAS contract.

func (*GAS) Metadata

func (c *GAS) Metadata() *interop.ContractMD

func (*GAS) OnPersist

func (g *GAS) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*GAS) PostPersist added in v0.92.0

func (g *GAS) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

func (*GAS) Symbol

func (c *GAS) Symbol(_ *interop.Context, _ []stackitem.Item) stackitem.Item

func (*GAS) TotalSupply

func (c *GAS) TotalSupply(ic *interop.Context, _ []stackitem.Item) stackitem.Item

func (*GAS) Transfer

func (c *GAS) Transfer(ic *interop.Context, args []stackitem.Item) stackitem.Item

func (*GAS) TransferInternal added in v0.91.0

func (c *GAS) TransferInternal(ic *interop.Context, from, to util.Uint160, amount *big.Int, data stackitem.Item) error

TransferInternal transfers NEO between accounts.

type IDList added in v0.92.0

type IDList []uint64

IDList is a list of oracle request IDs.

func (IDList) Bytes added in v0.92.0

func (l IDList) Bytes() []byte

Bytes return l serizalized to a byte-slice.

func (*IDList) DecodeBinary added in v0.92.0

func (l *IDList) DecodeBinary(r *io.BinReader)

DecodeBinary implements io.Serializable.

func (IDList) EncodeBinary added in v0.92.0

func (l IDList) EncodeBinary(w *io.BinWriter)

EncodeBinary implements io.Serializable.

func (*IDList) Remove added in v0.92.0

func (l *IDList) Remove(id uint64) bool

Remove removes id from list.

type Management added in v0.92.0

type Management struct {
	interop.ContractMD
	// contains filtered or unexported fields
}

Management is contract-managing native contract.

func (*Management) Deploy added in v0.92.0

func (m *Management) Deploy(d dao.DAO, sender util.Uint160, neff *nef.File, manif *manifest.Manifest) (*state.Contract, error)

Deploy creates contract's hash/ID and saves new contract into the given DAO. It doesn't run _deploy method and doesn't emit notification.

func (*Management) Destroy added in v0.92.0

func (m *Management) Destroy(d dao.DAO, hash util.Uint160) error

Destroy drops given contract from DAO along with its storage. It doesn't emit notification.

func (*Management) GetContract added in v0.92.0

func (m *Management) GetContract(d dao.DAO, hash util.Uint160) (*state.Contract, error)

GetContract returns contract with given hash from given DAO.

func (*Management) GetMinimumDeploymentFee added in v0.92.0

func (m *Management) GetMinimumDeploymentFee(dao dao.DAO) int64

GetMinimumDeploymentFee returns the minimum required fee for contract deploy.

func (*Management) Initialize added in v0.92.0

func (m *Management) Initialize(ic *interop.Context) error

Initialize implements Contract interface.

func (*Management) InitializeCache added in v0.92.0

func (m *Management) InitializeCache(d dao.DAO) error

InitializeCache initializes contract cache with the proper values from storage. Cache initialisation should be done apart from Initialize because Initialize is called only when deploying native contracts.

func (*Management) Metadata added in v0.92.0

func (m *Management) Metadata() *interop.ContractMD

Metadata implements Contract interface.

func (*Management) OnPersist added in v0.92.0

func (m *Management) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*Management) PostPersist added in v0.92.0

func (m *Management) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

func (*Management) PutContractState added in v0.92.0

func (m *Management) PutContractState(d dao.DAO, cs *state.Contract) error

PutContractState saves given contract state into given DAO.

func (*Management) Update added in v0.92.0

func (m *Management) Update(d dao.DAO, hash util.Uint160, neff *nef.File, manif *manifest.Manifest) (*state.Contract, error)

Update updates contract's script and/or manifest in the given DAO. It doesn't run _deploy method and doesn't emit notification.

type NEO

type NEO struct {
	GAS *GAS
	// contains filtered or unexported fields
}

NEO represents NEO native contract.

func (*NEO) CalculateBonus added in v0.92.0

func (n *NEO) CalculateBonus(d dao.DAO, acc util.Uint160, end uint32) (*big.Int, error)

CalculateBonus calculates amount of gas generated for holding value NEO from start to end block and having voted for active committee member.

func (*NEO) CalculateNEOHolderReward added in v0.92.0

func (n *NEO) CalculateNEOHolderReward(d dao.DAO, value *big.Int, start, end uint32) (*big.Int, error)

CalculateNEOHolderReward return GAS reward for holding `value` of NEO from start to end block.

func (*NEO) ComputeNextBlockValidators added in v0.92.0

func (n *NEO) ComputeNextBlockValidators(bc blockchainer.Blockchainer, d dao.DAO) (keys.PublicKeys, error)

ComputeNextBlockValidators returns an actual list of current validators.

func (*NEO) Decimals

func (c *NEO) Decimals(_ *interop.Context, _ []stackitem.Item) stackitem.Item

func (*NEO) GetCandidates added in v0.91.0

func (n *NEO) GetCandidates(d dao.DAO) ([]state.Validator, error)

GetCandidates returns current registered validators list with keys and votes.

func (*NEO) GetCommitteeAddress added in v0.92.0

func (n *NEO) GetCommitteeAddress() util.Uint160

GetCommitteeAddress returns address of the committee.

func (*NEO) GetCommitteeMembers added in v0.92.0

func (n *NEO) GetCommitteeMembers() keys.PublicKeys

GetCommitteeMembers returns public keys of nodes in committee using cached value.

func (*NEO) GetGASPerBlock added in v0.92.0

func (n *NEO) GetGASPerBlock(d dao.DAO, index uint32) *big.Int

GetGASPerBlock returns gas generated for block with provided index.

func (*NEO) GetNextBlockValidatorsInternal

func (n *NEO) GetNextBlockValidatorsInternal() keys.PublicKeys

GetNextBlockValidatorsInternal returns next block validators.

func (*NEO) Initialize

func (n *NEO) Initialize(ic *interop.Context) error

Initialize initializes NEO contract.

func (*NEO) InitializeCache added in v0.92.0

func (n *NEO) InitializeCache(bc blockchainer.Blockchainer, d dao.DAO) error

InitializeCache initializes all NEO cache with the proper values from storage. Cache initialisation should be done apart from Initialize because Initialize is called only when deploying native contracts.

func (*NEO) Metadata

func (c *NEO) Metadata() *interop.ContractMD

func (*NEO) ModifyAccountVotes

func (n *NEO) ModifyAccountVotes(acc *state.NEOBalanceState, d dao.DAO, value *big.Int, isNewVote bool) error

ModifyAccountVotes modifies votes of the specified account by value (can be negative). typ specifies if this modify is occurring during transfer or vote (with old or new validator).

func (*NEO) OnPersist

func (n *NEO) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*NEO) PostPersist added in v0.92.0

func (n *NEO) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

func (*NEO) RegisterCandidateInternal added in v0.91.0

func (n *NEO) RegisterCandidateInternal(ic *interop.Context, pub *keys.PublicKey) error

RegisterCandidateInternal registers pub as a new candidate.

func (*NEO) SetGASPerBlock added in v0.92.0

func (n *NEO) SetGASPerBlock(ic *interop.Context, index uint32, gas *big.Int) (bool, error)

SetGASPerBlock sets gas generated for blocks after index.

func (*NEO) Symbol

func (c *NEO) Symbol(_ *interop.Context, _ []stackitem.Item) stackitem.Item

func (*NEO) TotalSupply

func (c *NEO) TotalSupply(ic *interop.Context, _ []stackitem.Item) stackitem.Item

func (*NEO) Transfer

func (c *NEO) Transfer(ic *interop.Context, args []stackitem.Item) stackitem.Item

func (*NEO) TransferInternal added in v0.91.0

func (c *NEO) TransferInternal(ic *interop.Context, from, to util.Uint160, amount *big.Int, data stackitem.Item) error

TransferInternal transfers NEO between accounts.

func (*NEO) UnregisterCandidateInternal added in v0.91.0

func (n *NEO) UnregisterCandidateInternal(ic *interop.Context, pub *keys.PublicKey) error

UnregisterCandidateInternal unregisters pub as a candidate.

func (*NEO) VoteInternal

func (n *NEO) VoteInternal(ic *interop.Context, h util.Uint160, pub *keys.PublicKey) error

VoteInternal votes from account h for validarors specified in pubs.

type NodeList added in v0.92.0

type NodeList keys.PublicKeys

NodeList represents list or oracle nodes.

func (NodeList) Bytes added in v0.92.0

func (l NodeList) Bytes() []byte

Bytes return l serizalized to a byte-slice.

func (*NodeList) DecodeBinary added in v0.92.0

func (l *NodeList) DecodeBinary(r *io.BinReader)

DecodeBinary implements io.Serializable.

func (NodeList) EncodeBinary added in v0.92.0

func (l NodeList) EncodeBinary(w *io.BinWriter)

EncodeBinary implements io.Serializable.

type Notary added in v0.92.0

type Notary struct {
	interop.ContractMD
	GAS   *GAS
	Desig *Designate
	// contains filtered or unexported fields
}

Notary represents Notary native contract.

func (*Notary) BalanceOf added in v0.92.0

func (n *Notary) BalanceOf(dao dao.DAO, acc util.Uint160) *big.Int

BalanceOf is an internal representation of `balanceOf` Notary method.

func (*Notary) ExpirationOf added in v0.92.0

func (n *Notary) ExpirationOf(dao dao.DAO, acc util.Uint160) uint32

ExpirationOf is an internal representation of `expirationOf` Notary method.

func (*Notary) GetDepositFor added in v0.92.0

func (n *Notary) GetDepositFor(dao dao.DAO, acc util.Uint160) *state.Deposit

GetDepositFor returns state.Deposit for the account specified. It returns nil in case if deposit is not found in storage and panics in case of any other error.

func (*Notary) GetMaxNotValidBeforeDelta added in v0.92.0

func (n *Notary) GetMaxNotValidBeforeDelta(dao dao.DAO) uint32

GetMaxNotValidBeforeDelta is an internal representation of Notary getMaxNotValidBeforeDelta method.

func (*Notary) GetNotaryNodes added in v0.92.0

func (n *Notary) GetNotaryNodes(d dao.DAO) (keys.PublicKeys, error)

GetNotaryNodes returns public keys of notary nodes.

func (*Notary) Initialize added in v0.92.0

func (n *Notary) Initialize(ic *interop.Context) error

Initialize initializes Notary native contract and implements Contract interface.

func (*Notary) Metadata added in v0.92.0

func (n *Notary) Metadata() *interop.ContractMD

Metadata implements Contract interface.

func (*Notary) OnPersist added in v0.92.0

func (n *Notary) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*Notary) PostPersist added in v0.92.0

func (n *Notary) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

type Oracle added in v0.92.0

type Oracle struct {
	interop.ContractMD
	GAS *GAS
	NEO *NEO

	Desig *Designate
}

Oracle represents Oracle native contract.

func (*Oracle) FinishInternal added in v0.92.0

func (o *Oracle) FinishInternal(ic *interop.Context) error

FinishInternal processes oracle response.

func (*Oracle) GetIDListInternal added in v0.92.0

func (o *Oracle) GetIDListInternal(d dao.DAO, url string) (*IDList, error)

GetIDListInternal returns request by ID and key under which it is stored.

func (*Oracle) GetOracleNodes added in v0.92.0

func (o *Oracle) GetOracleNodes(d dao.DAO) (keys.PublicKeys, error)

GetOracleNodes returns public keys of oracle nodes.

func (*Oracle) GetRequestInternal added in v0.92.0

func (o *Oracle) GetRequestInternal(d dao.DAO, id uint64) (*state.OracleRequest, error)

GetRequestInternal returns request by ID and key under which it is stored.

func (*Oracle) GetScriptHash added in v0.92.0

func (o *Oracle) GetScriptHash(d dao.DAO) (util.Uint160, error)

GetScriptHash returns script hash or oracle nodes.

func (*Oracle) Initialize added in v0.92.0

func (o *Oracle) Initialize(ic *interop.Context) error

Initialize initializes Oracle contract.

func (*Oracle) Metadata added in v0.92.0

func (o *Oracle) Metadata() *interop.ContractMD

Metadata returns contract metadata.

func (*Oracle) OnPersist added in v0.92.0

func (o *Oracle) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*Oracle) PostPersist added in v0.92.0

func (o *Oracle) PostPersist(ic *interop.Context) error

PostPersist represents `postPersist` method.

func (*Oracle) PutRequestInternal added in v0.92.0

func (o *Oracle) PutRequestInternal(id uint64, req *state.OracleRequest, d dao.DAO) error

PutRequestInternal puts oracle request with the specified id to d.

func (*Oracle) RequestInternal added in v0.92.0

func (o *Oracle) RequestInternal(ic *interop.Context, url string, filter *string, cb string, userData stackitem.Item, gas *big.Int) error

RequestInternal processes oracle request.

type Policy

type Policy struct {
	interop.ContractMD
	// contains filtered or unexported fields
}

Policy represents Policy native contract.

func (*Policy) CheckPolicy

func (p *Policy) CheckPolicy(d dao.DAO, tx *transaction.Transaction) error

CheckPolicy checks whether transaction conforms to current policy restrictions like not being signed by blocked account or not exceeding block-level system fee limit.

func (*Policy) GetExecFeeFactorInternal added in v0.92.0

func (p *Policy) GetExecFeeFactorInternal(d dao.DAO) int64

GetExecFeeFactorInternal returns current execution fee factor.

func (*Policy) GetFeePerByteInternal

func (p *Policy) GetFeePerByteInternal(dao dao.DAO) int64

GetFeePerByteInternal returns required transaction's fee per byte.

func (*Policy) GetMaxBlockSizeInternal added in v0.91.0

func (p *Policy) GetMaxBlockSizeInternal(dao dao.DAO) uint32

GetMaxBlockSizeInternal returns maximum block size.

func (*Policy) GetMaxBlockSystemFeeInternal added in v0.91.0

func (p *Policy) GetMaxBlockSystemFeeInternal(dao dao.DAO) int64

GetMaxBlockSystemFeeInternal the maximum overall system fee per block.

func (*Policy) GetMaxTransactionsPerBlockInternal

func (p *Policy) GetMaxTransactionsPerBlockInternal(dao dao.DAO) uint32

GetMaxTransactionsPerBlockInternal returns the upper limit of transactions per block.

func (*Policy) GetMaxVerificationGas added in v0.91.0

func (p *Policy) GetMaxVerificationGas(_ dao.DAO) int64

GetMaxVerificationGas returns maximum gas allowed to be burned during verificaion.

func (*Policy) GetStoragePriceInternal added in v0.92.0

func (p *Policy) GetStoragePriceInternal(d dao.DAO) int64

GetStoragePriceInternal returns current execution fee factor.

func (*Policy) Initialize

func (p *Policy) Initialize(ic *interop.Context) error

Initialize initializes Policy native contract and implements Contract interface.

func (*Policy) IsBlockedInternal added in v0.92.0

func (p *Policy) IsBlockedInternal(dao dao.DAO, hash util.Uint160) bool

IsBlockedInternal checks whether provided account is blocked

func (*Policy) Metadata

func (p *Policy) Metadata() *interop.ContractMD

Metadata implements Contract interface.

func (*Policy) OnPersist

func (p *Policy) OnPersist(ic *interop.Context) error

OnPersist implements Contract interface.

func (*Policy) PostPersist added in v0.92.0

func (p *Policy) PostPersist(ic *interop.Context) error

PostPersist implements Contract interface.

type Role added in v0.92.0

type Role byte

Role represents type of participant.

const (
	RoleStateValidator Role = 4
	RoleOracle         Role = 8
	RoleP2PNotary      Role = 128
)

Role enumeration.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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