Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ConsensusFault ¶
type ConsensusFault struct { // Address of the miner at fault (always an ID address). Target addr.Address // Epoch of the fault, which is the higher epoch of the two blocks causing it. Epoch abi.ChainEpoch // Type of fault. Type ConsensusFaultType }
Result of checking two headers for a consensus fault.
type ConsensusFaultType ¶
type ConsensusFaultType int64
const ( //ConsensusFaultNone ConsensusFaultType = 0 ConsensusFaultDoubleForkMining ConsensusFaultType = 1 ConsensusFaultParentGrinding ConsensusFaultType = 2 ConsensusFaultTimeOffsetMining ConsensusFaultType = 3 )
type Message ¶
type Message interface { // The address of the immediate calling actor. Always an ID-address. // If an actor invokes its own method, Caller() == Receiver(). Caller() addr.Address // The address of the actor receiving the message. Always an ID-address. Receiver() addr.Address // The value attached to the message being processed, implicitly added to CurrentBalance() // of Receiver() before method invocation. // This value came from Caller(). ValueReceived() abi.TokenAmount }
Message contains information available to the actor about the executing message. These values are fixed for the duration of an invocation.
type Runtime ¶
type Runtime interface { // Information related to the current message being executed. // When an actor invokes a method on another actor as a sub-call, these values reflect // the sub-call context, rather than the top-level context. Message // Provides a handle for the actor's state object. StateHandle // Provides IPLD storage for actor state Store // Provides the system call interface. Syscalls // The network protocol version number at the current epoch. NetworkVersion() network.Version // The current chain epoch number. The genesis block has epoch zero. CurrEpoch() abi.ChainEpoch // Satisfies the requirement that every exported actor method must invoke at least one caller validation // method before returning, without making any assertions about the caller. ValidateImmediateCallerAcceptAny() // Validates that the immediate caller's address exactly matches one of a set of expected addresses, // aborting if it does not. // The caller address is always normalized to an ID address, so expected addresses must be // ID addresses to have any expectation of passing validation. ValidateImmediateCallerIs(addrs ...addr.Address) // Validates that the immediate caller is an actor with code CID matching one of a set of // expected CIDs, aborting if it does not. ValidateImmediateCallerType(types ...cid.Cid) // The balance of the receiver. Always >= zero. CurrentBalance() abi.TokenAmount // Resolves an address of any protocol to an ID address (via the Init actor's table). // This allows resolution of externally-provided SECP, BLS, or actor addresses to the canonical form. // If the argument is an ID address it is returned directly. ResolveAddress(address addr.Address) (addr.Address, bool) // Look up the code ID at an actor address. // The address will be resolved as if via ResolveAddress, if necessary, so need not be an ID-address. GetActorCodeCID(addr addr.Address) (ret cid.Cid, ok bool) // GetRandomnessFromBeacon returns a (pseudo)random byte array drawing from a random beacon at a prior epoch. // The beacon value is combined with the personalization tag, epoch number, and explicitly provided entropy. // The personalization tag may be any int64 value. // The epoch must be less than the current epoch. The epoch may be negative, in which case // it addresses the beacon value from genesis block. // The entropy may be any byte array, or nil. GetRandomnessFromBeacon(personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) abi.Randomness // GetRandomnessFromTickets samples randomness from the ticket chain. Randomess // sampled through this method is unique per potential fork, and as a // result, processes relying on this randomness are tied to whichever fork // they choose. // See GetRandomnessFromBeacon for notes about the personalization tag, epoch, and entropy. GetRandomnessFromTickets(personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) abi.Randomness // Sends a message to another actor, returning the exit code and return value envelope. // If the invoked method does not return successfully, its state changes (and that of any messages it sent in turn) // will be rolled back. Send(toAddr addr.Address, methodNum abi.MethodNum, params cbor.Marshaler, value abi.TokenAmount, out cbor.Er) exitcode.ExitCode // Halts execution upon an error from which the receiver cannot recover. The caller will receive the exitcode and // an empty return value. State changes made within this call will be rolled back. // This method does not return. // The provided exit code must be >= exitcode.FirstActorExitCode. // The message and args are for diagnostic purposes and do not persist on chain. They should be suitable for // passing to fmt.Errorf(msg, args...). Abortf(errExitCode exitcode.ExitCode, msg string, args ...interface{}) // Computes an address for a new actor. The returned address is intended to uniquely refer to // the actor even in the event of a chain re-org (whereas an ID-address might refer to a // different actor after messages are re-ordered). // Always an ActorExec address. NewActorAddress() addr.Address // Creates an actor with code `codeID` and address `address`, with empty state. // May only be called by Init actor. // Aborts if the provided address has previously been created. CreateActor(codeId cid.Cid, address addr.Address) // Deletes the executing actor from the state tree, transferring any balance to beneficiary. // Aborts if the beneficiary does not exist or is the calling actor. // May only be called by the actor itself. DeleteActor(beneficiary addr.Address) // Returns the total token supply in circulation at the beginning of the current epoch. // The circulating supply is the sum of: // - rewards emitted by the reward actor, // - funds vested from lock-ups in the genesis state, // less the sum of: // - funds burnt, // - pledge collateral locked in storage miner actors (recorded in the storage power actor) // - deal collateral locked by the storage market actor TotalFilCircSupply() abi.TokenAmount // Provides a Go context for use by HAMT, etc. // The VM is intended to provide an idealised machine abstraction, with infinite storage etc, so this context // should not be used by actor code directly. Context() context.Context // Starts a new tracing span. The span must be End()ed explicitly by invoking or deferring EndSpan StartSpan(name string) (EndSpan func()) // ChargeGas charges specified amount of `gas` for execution. // `name` provides information about gas charging point // `virtual` sets virtual amount of gas to charge, this amount is not counted // toward execution cost. This functionality is used for observing global changes // in total gas charged if amount of gas charged was to be changed. ChargeGas(name string, gas int64, virtual int64) // Note events that may make debugging easier Log(level rt.LogLevel, msg string, args ...interface{}) }
Runtime is the VM's internal runtime object. this is everything that is accessible to actors, beyond parameters.
type StateHandle ¶
type StateHandle interface { // Create initializes the state object. // This is only valid in a constructor function and when the state has not yet been initialized. StateCreate(obj cbor.Marshaler) // Readonly loads a readonly copy of the state into the argument. // // Any modification to the state is illegal and will result in an abort. StateReadonly(obj cbor.Unmarshaler) // Transaction loads a mutable version of the state into the `obj` argument and protects // the execution from side effects (including message send). // // The second argument is a function which allows the caller to mutate the state. // // If the state is modified after this function returns, execution will abort. // // The gas cost of this method is that of a Store.Put of the mutated state object. // // Note: the Go signature is not ideal due to lack of type system power. // // # Usage // “`go // var state SomeState // ret := rt.StateTransaction(&state, func() (interface{}) { // // make some changes // st.ImLoaded = True // return st.Thing, nil // }) // // state.ImLoaded = False // BAD!! state is readonly outside the lambda, it will panic // “` StateTransaction(obj cbor.Er, f func()) }
StateHandle provides mutable, exclusive access to actor state.
type Store ¶
type Store interface { // Retrieves and deserializes an object from the store into `o`. Returns whether successful. StoreGet(c cid.Cid, o cbor.Unmarshaler) bool // Serializes and stores an object, returning its CID. StorePut(x cbor.Marshaler) cid.Cid }
Store defines the storage module exposed to actors.
type Syscalls ¶
type Syscalls interface { // Verifies that a signature is valid for an address and plaintext. // If the address is a public-key type address, it is used directly. // If it's an ID-address, the actor is looked up in state. It must be an account actor, and the // public key is obtained from it's state. VerifySignature(signature crypto.Signature, signer addr.Address, plaintext []byte) error // Hashes input data using blake2b with 256 bit output. HashBlake2b(data []byte) [32]byte // Computes an unsealed sector CID (CommD) from its constituent piece CIDs (CommPs) and sizes. ComputeUnsealedSectorCID(reg abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) // Verifies a sector seal proof. VerifySeal(vi proof.SealVerifyInfo) error BatchVerifySeals(vis map[address.Address][]proof.SealVerifyInfo) (map[address.Address][]bool, error) // Verifies a proof of spacetime. VerifyPoSt(vi proof.WindowPoStVerifyInfo) error // Verifies that two block headers provide proof of a consensus fault: // - both headers mined by the same actor // - headers are different // - first header is of the same or lower epoch as the second // - the headers provide evidence of a fault (see the spec for the different fault types). // The parameters are all serialized block headers. The third "extra" parameter is consulted only for // the "parent grinding fault", in which case it must be the sibling of h1 (same parent tipset) and one of the // blocks in an ancestor of h2. // Returns nil and an error if the headers don't prove a fault. VerifyConsensusFault(h1, h2, extra []byte) (*ConsensusFault, error) }
Pure functions implemented as primitives by the runtime.
Click to show internal directories.
Click to hide internal directories.