commit 3937785df5c34812f71f6a8a8005bbca0e74eca7
parent 524cf059216102c913dbdd90fa233e42611f9037
Author: nolash <dev@holbrook.no>
Date: Sun, 29 Aug 2021 11:31:44 +0200
Rename doc dir
Diffstat:
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/doc/texinfo/index.texi b/doc/texinfo/index.texi
@@ -0,0 +1,5 @@
+@top chainlib
+
+@chapter Chainlib
+
+@include interface.texi
diff --git a/doc/texinfo/interface.texi b/doc/texinfo/interface.texi
@@ -0,0 +1,59 @@
+@node chainlib-interface
+@section The chainlib implementation
+
+Chainlib is an attempt at employing a universal interface to manipulate and access blockchains regardless of underlying architecture.
+
+It makes the following assumptions:
+
+@itemize
+@item A block MUST have a interpretable serializable format, and contains zero of more transactions
+@item A transaction MUST have a interpretable serializable format
+@item A transaction MUST have a nonce associated with a sender address. This uniquely identifies the transaction on the network.
+@item A transaction MUST have a fee bid to get the transaction executed on the network (a network that does not care about bids can still ignore this property).
+@item A transaction signature MAY be locked to a particular chain identifier
+@item The sender key of a transaction MAY be recovered by the signature of the transaction
+@end itemize
+
+
+@subsection Pluggable method interface
+
+The base chainlib blockchain interface is defined by the chainlib.interface.ChainInterface class. The sum of the unimplemented methods in this class summarizes the expected scope of abstraction necessary to interface with @emph{any} blockchain backend.
+
+Methods in this class will return objects that can be passed to an RPC connection that fits the block context.
+
+The implemented concepts are as follows, listed by method names:
+
+@table @code
+@item block_latest
+Retrieve the latest block from the network
+@item block_by_hash
+Retrieve the block corresponding to the given block hash
+@item block_by_number
+Retrieve the block corresponding to the given block number
+@item block_from_src
+Render a chainlib.block.Block derivative object from an architecture-dependent block representation source
+@item block_to_src
+Render an architecture dependent transaction representation from the given Block object
+@item tx_by_hash
+Retrieve the transaction corresponding to the given transaction hash
+@item tx_by_block
+Retrieve the transaction corresponding to the given block hash and transaction index
+@item tx_receipt
+Retrieve the details of a confirmed transaction
+@item tx_raw
+Generate an RPC query from raw transaction wire data
+@item tx_pack
+Generate raw transaction wire data from an architecture dependent transaction representation
+@item tx_unpack
+Generate architecture dependent transaction representation from raw transaction wire data
+@item tx_from_src
+Render a chainlib.tx.Tx derivative object from an architecture-dependent tx representation source
+@item tx_to_src
+Render an architecture dependent transaction representation from the given Tx object
+@item address_safe
+Generate a checksum-safe network address
+@item address_normal
+Generate an unambiguous network address
+@item src_normalize
+Generate an unambiguous dictionary from the given dictionary. For example, this can mean generating camel-case key equivalents for snake-case values.
+@end table