Show / Hide Table of Contents

Class AtomicActionRenderer

A middleware to make action render events to satisfy transactions' atomicity.

Decorates an IActionRenderer instance and filters out render events made by unsuccessful transactions (i.e., transactions with one or more exception-throwing actions).

Inheritance
Object
AtomicActionRenderer
Implements
IActionRenderer
IRenderer
Inherited Members
Object.Equals(Object)
Object.Equals(Object, Object)
Object.GetHashCode()
Object.GetType()
Object.MemberwiseClone()
Object.ReferenceEquals(Object, Object)
Object.ToString()
Namespace: Libplanet.Blockchain.Renderers
Assembly: Libplanet.dll
Syntax
public sealed class AtomicActionRenderer : IActionRenderer, IRenderer
Remarks

The wrapped ActionRenderer will not receive any RenderActionError(IValue, IActionContext, Exception) events except for block actions, which do not belong to any transactions.

Constructors

| Improve this Doc View Source

AtomicActionRenderer(IActionRenderer)

Creates a new AtomicActionRenderer instance decorating the given actionRenderer.

Declaration
public AtomicActionRenderer(IActionRenderer actionRenderer)
Parameters
Type Name Description
IActionRenderer actionRenderer

The inner action renderer which has the actual implementations and expects to receive no RenderActionError(IValue, IActionContext, Exception) events.

Remarks

The wrapped ActionRenderer will not receive any RenderActionError(IValue, IActionContext, Exception) events except for block actions, which do not belong to any transactions.

Properties

| Improve this Doc View Source

ActionRenderer

The inner action renderer which has the actual implementations and expects to receive no RenderActionError(IValue, IActionContext, Exception) events.

Declaration
public IActionRenderer ActionRenderer { get; }
Property Value
Type Description
IActionRenderer
Remarks

The wrapped ActionRenderer will not receive any RenderActionError(IValue, IActionContext, Exception) events except for block actions, which do not belong to any transactions.

Methods

| Improve this Doc View Source

RenderAction(IValue, IActionContext, IAccountStateDelta)

Does things that should be done right after an action is executed and applied to the blockchain.

Declaration
public void RenderAction(IValue action, IActionContext context, IAccountStateDelta nextStates)
Parameters
Type Name Description
Bencodex.Types.IValue action

An executed action.

IActionContext context

The equivalent context object to an object passed to the action's Execute(IActionContext) method. That means PreviousStates are the states right before this action executed. For the states after this action executed, use the nextStates argument instead.

IAccountStateDelta nextStates

The states right after this action executed, which means it is equivalent to the states action's Execute(IActionContext) method returned.

Remarks

It is guaranteed to be called only once for an action, and only after applied to the blockchain, unless an exception is thrown during executing the action (in that case RenderActionError(IValue, IActionContext, Exception) is called instead) or once the action has been unrendered.

Also note that this method is invoked after RenderBlock(Block, Block) method is called (where its second parameter newTip contains a transaction the action belongs to).

| Improve this Doc View Source

RenderActionError(IValue, IActionContext, Exception)

Does the similar things to RenderAction(IValue, IActionContext, IAccountStateDelta), except that this method is invoked when action has terminated with an exception.

Declaration
public void RenderActionError(IValue action, IActionContext context, Exception exception)
Parameters
Type Name Description
Bencodex.Types.IValue action

An action which threw an exception during execution.

IActionContext context

The equivalent context object to an object passed to the action's Execute(IActionContext) method. That means PreviousStates are the states right before this action executed.

Exception exception

The exception thrown during executing the action.

Remarks

Also note that this method is invoked after RenderBlock(Block, Block) method is called (where its second parameter newTip contains a transaction the action belongs to).

| Improve this Doc View Source

RenderBlock(Block, Block)

Does things that should be done right after a new Block is appended to a BlockChain<T> (so that its Tip has changed).

Declaration
public void RenderBlock(Block oldTip, Block newTip)
Parameters
Type Name Description
Block oldTip

The previous Tip.

Block newTip

The current Tip.

Remarks

It is guaranteed to be called only once for a block, and only after applied to the blockchain, unless it has been stale due to reorg.

| Improve this Doc View Source

RenderBlockEnd(Block, Block)

Does things that should be done right all actions in a new Block are rendered.

Declaration
public void RenderBlockEnd(Block oldTip, Block newTip)
Parameters
Type Name Description
Block oldTip

The previous Tip.

Block newTip

The current Tip.

Remarks

It is guaranteed to be called only once for a block.

Implements

IActionRenderer
IRenderer
  • Improve this Doc
  • View Source
In This Article
Back to top Copyright © 2018–2023 Planetarium