Namespace Libplanet.Action
Classes
ActionEvaluation
A record type to represent an evaluation plan and result of a single action.
ActionEvaluator
Class responsible for handling of IAction evaluations.
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.
DuplicateActionTypeIdentifierException
An exception that is thrown when multiple action types are associated with the same TypeIdentifier.
ExtractableException
Extension methods for IExtractableException and other Exceptions that do not implement IExtractableException.
GasLimitExceededException
GasLimitNegativeException
GasUseNegativeException
InvalidActionException
The Exception that is thrown when an Bencodex.Types.IValue 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.
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 InnerException 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) => PreviousStates[Target] + 1
, suppose a malicious
node m
changes their own Heal
action code to
Heal(Target) => PreviousStates[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.
IExtractableException
Marks an exception type as able to extract its metadata, so that these metadata can be stored as a part of TxFailure.
IFeeCalculator
IRandom
An pseudorandom number generator interface equivalent to Random.
Although these two types have similar shapes, they are not compatible (i.e., disallowed to be casted to each other).