blocklog

package
v0.6.1-alpha.4-prerelease Latest Latest
Warning

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

Go to latest
Published: Apr 5, 2023 License: Apache-2.0 Imports: 19 Imported by: 1

Documentation

Overview

in the blocklog core contract the VM keeps indices of blocks and requests in an optimized way for fast checking and timestamp access.

Index

Constants

View Source
const (
	// parameters
	ParamBlockIndex             = "n"
	ParamBlockInfo              = "i"
	ParamGoverningAddress       = "g"
	ParamContractHname          = "h"
	ParamFromBlock              = "f"
	ParamToBlock                = "t"
	ParamRequestID              = "u"
	ParamRequestIndex           = "r"
	ParamRequestProcessed       = "p"
	ParamRequestRecord          = "d"
	ParamEvent                  = "e"
	ParamStateControllerAddress = "s"
)
View Source
const (
	BlockInfoLatestSchemaVersion = 0
)
View Source
const (
	PrefixBlockRegistry = string('a' + iota)
)

Variables

View Source
var (
	// TODO feels like controlAddresses could be deprecated - controller addresses can be derived from the AO
	ViewControlAddresses           = coreutil.ViewFunc("controlAddresses")
	ViewGetBlockInfo               = coreutil.ViewFunc("getBlockInfo")
	ViewGetRequestIDsForBlock      = coreutil.ViewFunc("getRequestIDsForBlock")
	ViewGetRequestReceipt          = coreutil.ViewFunc("getRequestReceipt")
	ViewGetRequestReceiptsForBlock = coreutil.ViewFunc("getRequestReceiptsForBlock")
	ViewIsRequestProcessed         = coreutil.ViewFunc("isRequestProcessed")
	ViewGetEventsForRequest        = coreutil.ViewFunc("getEventsForRequest")
	ViewGetEventsForBlock          = coreutil.ViewFunc("getEventsForBlock")
	ViewGetEventsForContract       = coreutil.ViewFunc("getEventsForContract")
)
View Source
var Contract = coreutil.NewContract(coreutil.CoreContractBlocklog, "Block log contract")
View Source
var Processor = Contract.Processor(nil,
	ViewControlAddresses.WithHandler(viewControlAddresses),
	ViewGetBlockInfo.WithHandler(viewGetBlockInfo),
	ViewGetEventsForBlock.WithHandler(viewGetEventsForBlock),
	ViewGetEventsForContract.WithHandler(viewGetEventsForContract),
	ViewGetEventsForRequest.WithHandler(viewGetEventsForRequest),
	ViewGetRequestIDsForBlock.WithHandler(viewGetRequestIDsForBlock),
	ViewGetRequestReceipt.WithHandler(viewGetRequestReceipt),
	ViewGetRequestReceiptsForBlock.WithHandler(viewGetRequestReceiptsForBlock),
	ViewIsRequestProcessed.WithHandler(viewIsRequestProcessed),
)

Functions

func BlockInfoKey added in v0.3.0

func BlockInfoKey(index uint32) []byte

BlockInfoKey a key to access block info record inside SC state

func GetEventsByBlockIndex added in v1.0.3

func GetEventsByBlockIndex(partition kv.KVStoreReader, blockIndex uint32, totalRequests uint16) []string

func GetOutputID added in v1.0.3

func GetOutputID(stateR kv.KVStoreReader, stateIndex uint32, outputIndex uint16) (iotago.OutputID, error)

func GetRequestIDsForBlock

func GetRequestIDsForBlock(stateReader kv.KVStoreReader, blockIndex uint32) ([]isc.RequestID, error)

GetRequestIDsForBlock reads blocklog from chain state and returns request IDs settled in specific block Can only panic on DB error of internal error

func IsRequestProcessed

func IsRequestProcessed(stateReader kv.KVStoreReader, requestID isc.RequestID) (bool, error)

IsRequestProcessed check if requestID is stored in the chain state as processed

func MustIsRequestProcessed added in v0.3.0

func MustIsRequestProcessed(stateReader kv.KVStoreReader, reqid isc.RequestID) bool

func RequestReceiptKey added in v0.3.0

func RequestReceiptKey(rkey RequestLookupKey) []byte

func SaveControlAddressesIfNecessary

func SaveControlAddressesIfNecessary(partition kv.KVStore, stateAddress, governingAddress iotago.Address, blockIndex uint32)

SaveControlAddressesIfNecessary saves new information about state address in the blocklog partition If state address does not change, it does nothing

func SaveEvent

func SaveEvent(partition kv.KVStore, msg string, key EventLookupKey, contract isc.Hname)

func SaveNextBlockInfo

func SaveNextBlockInfo(partition kv.KVStore, blockInfo *BlockInfo)

SaveNextBlockInfo appends block info and returns its index

func SaveRequestReceipt added in v0.3.0

func SaveRequestReceipt(partition kv.KVStore, rec *RequestReceipt, key RequestLookupKey) error

SaveRequestReceipt appends request record to the record log and creates records for fast lookup

func SetInitialState added in v1.0.3

func SetInitialState(s kv.KVStore)

func UpdateLatestBlockInfo added in v0.3.0

func UpdateLatestBlockInfo(partition kv.KVStore, anchorTxID iotago.TransactionID, aliasOutput *isc.AliasOutputWithID, l1commitment *state.L1Commitment)

UpdateLatestBlockInfo is called before producing the next block to save anchor tx id and commitment data of the previous one

Types

type BlockInfo

type BlockInfo struct {
	SchemaVersion         uint8
	Timestamp             time.Time
	TotalRequests         uint16
	NumSuccessfulRequests uint16 // which didn't panic
	NumOffLedgerRequests  uint16
	PreviousAliasOutput   *isc.AliasOutputWithID // if new schema => always not nil
	GasBurned             uint64
	GasFeeCharged         uint64
}

func BlockInfoFromBytes

func BlockInfoFromBytes(data []byte) (*BlockInfo, error)

func GetBlockInfo added in v1.0.3

func GetBlockInfo(partition kv.KVStoreReader, blockIndex uint32) (*BlockInfo, error)

func (*BlockInfo) BlockIndex

func (bi *BlockInfo) BlockIndex() uint32

func (*BlockInfo) Bytes

func (bi *BlockInfo) Bytes() []byte

func (*BlockInfo) PreviousL1Commitment added in v0.3.0

func (bi *BlockInfo) PreviousL1Commitment() *state.L1Commitment

func (*BlockInfo) RequestTimestamp

func (bi *BlockInfo) RequestTimestamp(requestIndex uint16) time.Time

RequestTimestamp returns timestamp which corresponds to the request with the given index Timestamps of requests are incremented by 1 nanosecond in the block. The timestamp of the last one is equal to the timestamp pof the block

func (*BlockInfo) String

func (bi *BlockInfo) String() string

type ControlAddresses

type ControlAddresses struct {
	StateAddress     iotago.Address
	GoverningAddress iotago.Address
	SinceBlockIndex  uint32
}

func ControlAddressesFromBytes

func ControlAddressesFromBytes(data []byte) (*ControlAddresses, error)

func ControlAddressesFromMarshalUtil

func ControlAddressesFromMarshalUtil(mu *marshalutil.MarshalUtil) (*ControlAddresses, error)

func (*ControlAddresses) Bytes

func (ca *ControlAddresses) Bytes() []byte

func (*ControlAddresses) String

func (ca *ControlAddresses) String() string

type EventLookupKey

type EventLookupKey [8]byte

EventLookupKey is a globally unique reference to the event: block index + index of the request within block + index of the event within the request

func EventLookupKeyFromBytes

func EventLookupKeyFromBytes(r io.Reader) (*EventLookupKey, error)

func NewEventLookupKey

func NewEventLookupKey(blockIndex uint32, requestIndex, eventIndex uint16) EventLookupKey

func (EventLookupKey) BlockIndex

func (k EventLookupKey) BlockIndex() uint32

func (EventLookupKey) Bytes

func (k EventLookupKey) Bytes() []byte

func (EventLookupKey) RequestEventIndex

func (k EventLookupKey) RequestEventIndex() uint16

func (EventLookupKey) RequestIndex

func (k EventLookupKey) RequestIndex() uint16

func (*EventLookupKey) Write

func (k *EventLookupKey) Write(w io.Writer) error

type GetRequestReceiptResult added in v0.3.0

type GetRequestReceiptResult struct {
	ReceiptBin   []byte
	BlockIndex   uint32
	RequestIndex uint16
}

func GetRequestRecordDataByRequestID added in v0.3.0

func GetRequestRecordDataByRequestID(stateReader kv.KVStoreReader, reqID isc.RequestID) (*GetRequestReceiptResult, error)

GetRequestRecordDataByRequestID tries to obtain the receipt data for a given request returns nil if receipt was not found

type RequestLookupKey

type RequestLookupKey [6]byte

RequestLookupReference globally unique reference to the request: block index and index of the request within block

func NewRequestLookupKey

func NewRequestLookupKey(blockIndex uint32, requestIndex uint16) RequestLookupKey

func (RequestLookupKey) BlockIndex

func (k RequestLookupKey) BlockIndex() uint32

func (RequestLookupKey) Bytes

func (k RequestLookupKey) Bytes() []byte

func (*RequestLookupKey) Read

func (k *RequestLookupKey) Read(r io.Reader) error

func (RequestLookupKey) RequestIndex

func (k RequestLookupKey) RequestIndex() uint16

func (*RequestLookupKey) Write

func (k *RequestLookupKey) Write(w io.Writer) error

type RequestLookupKeyList

type RequestLookupKeyList []RequestLookupKey

RequestLookupKeyList a list of RequestLookupReference of requests with colliding isc.RequestLookupDigest

func RequestLookupKeyListFromBytes

func RequestLookupKeyListFromBytes(data []byte) (RequestLookupKeyList, error)

func (RequestLookupKeyList) Bytes

func (ll RequestLookupKeyList) Bytes() []byte

type RequestReceipt

type RequestReceipt struct {
	// TODO request may be big (blobs). Do we want to store it all?
	Request       isc.Request            `json:"request"`
	Error         *isc.UnresolvedVMError `json:"error"`
	GasBudget     uint64                 `json:"gasBudget"`
	GasBurned     uint64                 `json:"gasBurned"`
	GasFeeCharged uint64                 `json:"gasFeeCharged"`
	// not persistent
	BlockIndex   uint32       `json:"blockIndex"`
	RequestIndex uint16       `json:"requestIndex"`
	GasBurnLog   *gas.BurnLog `json:"-"`
}

RequestReceipt represents log record of processed request on the chain

func GetRequestReceipt added in v1.0.3

func GetRequestReceipt(stateReader kv.KVStoreReader, requestID isc.RequestID) (*RequestReceipt, error)

func RequestReceiptFromBytes

func RequestReceiptFromBytes(data []byte) (*RequestReceipt, error)

func RequestReceiptFromMarshalUtil added in v0.3.0

func RequestReceiptFromMarshalUtil(mu *marshalutil.MarshalUtil) (*RequestReceipt, error)

func RequestReceiptsFromBlock added in v1.0.3

func RequestReceiptsFromBlock(block state.Block) ([]*RequestReceipt, error)

func (*RequestReceipt) Bytes

func (r *RequestReceipt) Bytes() []byte

func (*RequestReceipt) LookupKey added in v0.3.0

func (r *RequestReceipt) LookupKey() RequestLookupKey

func (*RequestReceipt) Short

func (r *RequestReceipt) Short() string

func (*RequestReceipt) String

func (r *RequestReceipt) String() string

func (*RequestReceipt) ToISCReceipt added in v0.3.0

func (r *RequestReceipt) ToISCReceipt(resolvedError *isc.VMError) *isc.Receipt

func (*RequestReceipt) WithBlockData

func (r *RequestReceipt) WithBlockData(blockIndex uint32, requestIndex uint16) *RequestReceipt

Jump to

Keyboard shortcuts

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