Show / Hide Table of Contents

Namespace Libplanet.Action

Classes

AccountMetrics

ActionEvaluation

A record type to represent an evaluation plan and result of a single action.

ActionEvaluator

Class responsible for handling of IAction evaluations.

ActionsExtensions

ActionTypeAttribute

Indicates that an action class (i.e., a class implementing IAction) can be held by transactions and blocks. It also gives an action class a TypeIdentifier for serialization and deserialization.

BlockProtocolVersionNotSupportedException

The exception that is thrown when an IPreEvaluationBlock with a protocol version that is not supported by an implementation of IActionEvaluator is passed as an argument to Evaluate(IPreEvaluationBlock, Nullable<HashDigest<SHA256>>).

CommittedActionContext

CommittedActionEvaluation

A record type to represent an evaluation plan and result of a single action.

DuplicateActionTypeIdentifierException

An exception that is thrown when multiple action types are associated with the same TypeIdentifier.

GasLimitExceededException

GasLimitNegativeException

GasUseNegativeException

InvalidActionException

The that is thrown when an that is supposedly a serialized IAction cannot be deserialized via an IActionLoader.

NullAction

An action implementation which does nothing for filling type parameter taking of IAction.

PolicyActionsRegistry

RandomExtensions

This extension class provides some convenient methods to deal with IRandom.

UnexpectedlyTerminatedActionException

The exception that is thrown during an IAction is being evaluated.

The actual exception that the Action threw is stored in the property.

Interfaces

IAction

An in-game action. Every action should be replayable, because multiple nodes in a network should execute an action and get the same result.

A “class” which implements this interface is analogous to a function, and its instance is analogous to a partial function application, in other words, a function with some bound arguments. Those parameters that will be bound at runtime should be represented as fields or properties in an action class, and bound argument values to these parameters should be received through a constructor parameters of that class.

From a perspective of security, an action class belongs to the network protocol, and property values in an action belong to a node's will (i.e., a user/player's choice). That means if you define an action class it also defines what every honest node can do in the network. Even if a malicious node changes their own action code it won't affect other honest nodes in the network.

For example, where honest nodes share the common action Heal(Target) => PreviousState[Target] + 1, suppose a malicious node m changes their own Heal action code to Heal(Target) => PreviousState[Target] + 2 (2 instead of 1), and then send an action Heal(m). Fortunately, this action does not work as m's intention, because the changed code in itself is not used by other honest nodes, so they still increase only 1, not 2. The effect of that double healing is a sort of “illusion” only visible to the malicious node alone.

In conclusion, action code is a part of the protocol and it works with consensus in the network, so only things each node can affect the network in general is property values of each action they sign and send, not code of an action.

IActionContext

Contextual data determined by a transaction and a block. Passed to Execute(IActionContext) method.

IActionEvaluation

IActionEvaluator

IActionTypeLoaderContext

An interface to provide contextual variables to load action types.

ICommittedActionContext

Contextual data determined by a transaction and a block for rendering.

ICommittedActionEvaluation

IFeeCollector

Represents a fee collector. A fee collector is a class that collects fees from the sender of the transaction. The fee collector is called three times in a single block. The first call is to collect the fee from the sender of the transaction. The second call is to refund the fee to the sender of the transaction. The third call is to reward the proposer of the block. The fee collector is called only when the transaction is collectible.

IGasMeter

An interface to provide a transition of the gas usage.

IRandom

An pseudorandom number generator interface equivalent to .

Although these two types have similar shapes, they are not compatible (i.e., disallowed to be casted to each other).

In This Article
Back to top Copyright © 2018–2023 Planetarium