commit d39d09fe9cb89d34abde024b5ae490dd67fe7096
parent 46c473cd6ee2808be82d744f4b01fb0a9a247c16
Author: lash <dev@holbrook.no>
Date: Sun, 13 Nov 2022 08:13:43 +0000
Add code component descriptions
Diffstat:
M | Makefile | | | 13 | ++++++++++--- |
M | README.md | | | 76 | +++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- |
A | build/deps.svg | | | 270 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
M | deps.dot | | | 7 | +++++++ |
4 files changed, 338 insertions(+), 28 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,17 +1,24 @@
SOURCES = $(realpath sources.txt)
-all: html txt
+doc: doc-html doc-txt
-html: prep
+doc-html: doc-prep
makeinfo --html --no-split start.texi -o build/out/index.html
-txt: prep
+doc-txt: doc-prep
makeinfo --plaintext start.texi -o build/out
+doc-prep: prep
+
prep:
mkdir -p build/out
#perl setup.pl $(SOURCES) build
+readme: prep diagram
+
+diagram:
+ dot -Tsvg deps.dot > build/deps.svg
+
.PHONY: clean
clean:
diff --git a/README.md b/README.md
@@ -1,31 +1,66 @@
# Chaintool documentation
+Chaintool is still very much a work-in-progress, and so too is its documentation.
+
+This README, while still somewhat chaotic, aims to fill the void of a missing structured presentation, and make the introduction to chaintool a bit more friendly.
+
## Showcasing chaintool
The most intuitive entry point to chaintool is most likely the `eth-monitor` tool. It can be installed directly from `pypi` using `pip install eth-monitor`.
+## Code components
+
+Upstream souce of chaintool code is located at [git.defalsify.org](https://git.defalsify.org)
+
+
+### Core layer
+
+All libraries that are considered part of the `chaintool` suite:
+
+* **funga**, **funga-eth** - message signing tools and daemon for development, with implementation for EVM.
+* **chainlib**, **chainlib-eth** - blockchain RPC interface with tooling and implementation for EVM nodes.
+* **chainsyncer** - blockchain RPC transaction sync driver.
+* **chainqueue** - blockchain RPC transaction queue control.
+* **eth-cache** - transparent proxy that stores local copies of RPC results.
+
+
+### Higher layer
+
+Tools and daemons building on the core layer.
+
+* **eth-monitor** - Visualization and arbitrary code execution for mined transactions
+* **chaind**, **chaind-eth** - Full-duplex transaction queueing tool for ethereum
+
+
+### Lower layer
+
+Libraries that were developed within the context of `chaintool`, but have a more generic scope.
+
+* **shep** - Multi-state key/value stores using bit masks.
+* **confini** - Parse and merge multiple ini files.
+* **aiee** - Common command line interfacing utils.
+* **leveldir** - Multi-level directory structure data stores.
+* **hexathon** - Common and uncommon hex string operations.
+* **potaahto** - Essentially: Convert between snake and camel case.
+
+The upstream code of these lower layer modules can be found at [holbrook.no/src](https://holbrook.no/src)
+
+
## Documentation for chaintool
-Chaintool is still very much a work-in-progress, and so too is its documentation.
So far, documentation efforts have been made in four areas, in order of most recently updated first:
-### Code dependency diagram
-
-The dependency graph is only available in as an unformatted **graphviz** document located at `$REPO_ROOT/deps.dot`.
+### Code components diagram
Last time the author remembered to render it, it looked like this:
-![](https://g33k.holbrook.no/b362bcba6683179736d9c5c40b6c377066f6af40c26c6efcb1a87aecb00333fd)
-
-It is defined in terms of three layers:
+![](./build/deps.svg)
-* The lower layer (grey) consists of libraries that were developed within the context of `chaintool`, but have a higher generic scope.
-* The *core* layer contains all libraries that are considered part of the `chaintool` suite.
-* The higher layer (green) conprise of tools and daemons building on the `chaintool` suite libraries.
+The dependency graph is only available in as an unformatted **graphviz** document located at `$REPO_ROOT/deps.dot`. `make diagram` renders this SVG version.
### Man pages
@@ -34,16 +69,16 @@ The `chainlib` module provides the script `chainlib-man.py` which provides an in
An immediate example can be found in the `chainlib-eth` repository, where the directory `$REPO_ROOT/man` demonstrates how to add hooks for overriding both section contents and argument options for individual tools.
-Invoking `make man` in the `chainlib-eth` and `eth-monitor` repositories will trigger a build of man pages for all the CLI tools provided.
-
What override behavior is currently available should be straightforward to glean from reading the `$CHAINLIB_REPO_ROOT/scripts/chainlib-man.py` script.
+Invoking `make man` in the `chainlib-eth` and `eth-monitor` repositories will trigger a build of man pages for all the CLI tools provided.
+
### Descriptive documentation
Some initial work for high-level documentation exists in the chainlib repository, specifically in `$REPO_ROOT/doc/texinfo`.
-The documentation can be generated by running `make` in the `$REPO_ROOT` of **this** repository. The HTML version of the documentation will be output as a single file to `$REPO_ROOT/build/out/index.html`
+The documentation can be generated by running `make doc` in the `$REPO_ROOT` of **this** repository. The HTML version of the documentation will be output as a single file to `$REPO_ROOT/build/out/index.html`
### Docstrings
@@ -55,16 +90,7 @@ Not much to add here. Ye generic sphinx-doc invocation should do the trick.
To compensate somewhat for the lack of exhaustive documentation, actual implementations using the library may help light the way somewhat.
-The known implementations that have some minimum level of maturity are listed below.
-
-
-### High-level libraries
-
-* **eth-erc20** - an implementation of the ERC20 token, which also includes an example token contract that lets authorized addresses arbitrarily mint tokens at any time.
-* **eth-erc721** - an implementation of the ERC721 "NFT" token, which also includes an example token contract that creates achievment badges for developed contributions.
-
-
-### High-level tools
+Aside from the "higher level" components listed above, two known EVM-based implementations that have some minimum level of maturity are:
-* **eth-monitor** - which provides visualization and arbitrary code execution for mined transactions
-* **chaind-eth** - a full-duplex transaction queueing tool for ethereum
+* [eth-erc20](https://git.defalsify.org/eth-erc20) - an implementation of the ERC20 token, which also includes an example token contract that lets authorized addresses arbitrarily mint tokens at any time.
+* [eth-erc721](https://git.defalsify.org/eth-erc721) - an implementation of the ERC721 "NFT" token, which also includes an example token contract that creates achievment badges for developed contributions.
diff --git a/build/deps.svg b/build/deps.svg
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.0.1 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="635pt" height="548pt"
+ viewBox="0.00 0.00 634.67 548.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 544)">
+<polygon fill="white" stroke="none" points="-4,4 -4,-544 630.67,-544 630.67,4 -4,4"/>
+<!-- confini -->
+<g id="node1" class="node">
+<title>confini</title>
+<ellipse fill="#cccccc" stroke="black" cx="131.45" cy="-450" rx="44.69" ry="18"/>
+<text text-anchor="middle" x="131.45" y="-446.3" font-family="Times,serif" font-size="14.00">lo/confini</text>
+</g>
+<!-- chainlib -->
+<g id="node7" class="node">
+<title>chainlib</title>
+<ellipse fill="none" stroke="black" cx="204.45" cy="-378" rx="38.99" ry="18"/>
+<text text-anchor="middle" x="204.45" y="-374.3" font-family="Times,serif" font-size="14.00">chainlib</text>
+</g>
+<!-- confini->chainlib -->
+<g id="edge2" class="edge">
+<title>confini->chainlib</title>
+<path fill="none" stroke="black" d="M148.01,-433.12C157.51,-424.01 169.59,-412.42 180.15,-402.3"/>
+<polygon fill="black" stroke="black" points="182.31,-405.08 187.11,-395.63 177.47,-400.02 182.31,-405.08"/>
+</g>
+<!-- hexathon -->
+<g id="node2" class="node">
+<title>hexathon</title>
+<ellipse fill="#cccccc" stroke="black" cx="381.45" cy="-522" rx="51.99" ry="18"/>
+<text text-anchor="middle" x="381.45" y="-518.3" font-family="Times,serif" font-size="14.00">lo/hexathon</text>
+</g>
+<!-- leveldir -->
+<g id="node4" class="node">
+<title>leveldir</title>
+<ellipse fill="#cccccc" stroke="black" cx="279.45" cy="-306" rx="46.59" ry="18"/>
+<text text-anchor="middle" x="279.45" y="-302.3" font-family="Times,serif" font-size="14.00">lo/leveldir</text>
+</g>
+<!-- hexathon->leveldir -->
+<g id="edge8" class="edge">
+<title>hexathon->leveldir</title>
+<path fill="none" stroke="black" d="M397.5,-504.84C406.18,-495.03 416.18,-481.78 421.45,-468 438.6,-423.09 455.12,-399.31 427.45,-360 424.3,-355.53 367.23,-335.93 324.9,-321.87"/>
+<polygon fill="black" stroke="black" points="326.25,-318.63 315.66,-318.81 324.05,-325.28 326.25,-318.63"/>
+</g>
+<!-- hexathon->chainlib -->
+<g id="edge3" class="edge">
+<title>hexathon->chainlib</title>
+<path fill="none" stroke="black" d="M331.26,-517.01C296.11,-511.51 250.71,-498.54 223.45,-468 208.88,-451.68 204.51,-426.98 203.57,-407.73"/>
+<polygon fill="black" stroke="black" points="207.07,-407.75 203.4,-397.81 200.07,-407.87 207.07,-407.75"/>
+</g>
+<!-- funga -->
+<g id="node9" class="node">
+<title>funga</title>
+<ellipse fill="none" stroke="black" cx="381.45" cy="-450" rx="30.59" ry="18"/>
+<text text-anchor="middle" x="381.45" y="-446.3" font-family="Times,serif" font-size="14.00">funga</text>
+</g>
+<!-- hexathon->funga -->
+<g id="edge6" class="edge">
+<title>hexathon->funga</title>
+<path fill="none" stroke="black" d="M381.45,-503.7C381.45,-496.41 381.45,-487.73 381.45,-479.54"/>
+<polygon fill="black" stroke="black" points="384.95,-479.62 381.45,-469.62 377.95,-479.62 384.95,-479.62"/>
+</g>
+<!-- potaahto -->
+<g id="node3" class="node">
+<title>potaahto</title>
+<ellipse fill="#cccccc" stroke="black" cx="282.45" cy="-450" rx="50.09" ry="18"/>
+<text text-anchor="middle" x="282.45" y="-446.3" font-family="Times,serif" font-size="14.00">lo/potaahto</text>
+</g>
+<!-- potaahto->chainlib -->
+<g id="edge4" class="edge">
+<title>potaahto->chainlib</title>
+<path fill="none" stroke="black" d="M264.36,-432.76C254.2,-423.65 241.36,-412.13 230.17,-402.09"/>
+<polygon fill="black" stroke="black" points="232.54,-399.51 222.76,-395.44 227.87,-404.72 232.54,-399.51"/>
+</g>
+<!-- eth_cache -->
+<g id="node11" class="node">
+<title>eth_cache</title>
+<ellipse fill="none" stroke="black" cx="276.45" cy="-234" rx="44.39" ry="18"/>
+<text text-anchor="middle" x="276.45" y="-230.3" font-family="Times,serif" font-size="14.00">eth-cache</text>
+</g>
+<!-- leveldir->eth_cache -->
+<g id="edge9" class="edge">
+<title>leveldir->eth_cache</title>
+<path fill="none" stroke="black" d="M278.71,-287.7C278.39,-280.41 278.02,-271.73 277.67,-263.54"/>
+<polygon fill="black" stroke="black" points="281.17,-263.46 277.24,-253.62 274.18,-263.76 281.17,-263.46"/>
+</g>
+<!-- shep -->
+<g id="node5" class="node">
+<title>shep</title>
+<ellipse fill="#cccccc" stroke="black" cx="140.45" cy="-234" rx="36.29" ry="18"/>
+<text text-anchor="middle" x="140.45" y="-230.3" font-family="Times,serif" font-size="14.00">lo/shep</text>
+</g>
+<!-- chainsyncer -->
+<g id="node12" class="node">
+<title>chainsyncer</title>
+<ellipse fill="none" stroke="black" cx="268.45" cy="-162" rx="52.79" ry="18"/>
+<text text-anchor="middle" x="268.45" y="-158.3" font-family="Times,serif" font-size="14.00">chainsyncer</text>
+</g>
+<!-- shep->chainsyncer -->
+<g id="edge14" class="edge">
+<title>shep->chainsyncer</title>
+<path fill="none" stroke="black" d="M164.22,-220C183.07,-209.69 209.75,-195.1 231.39,-183.26"/>
+<polygon fill="black" stroke="black" points="232.83,-186.47 239.92,-178.6 229.47,-180.33 232.83,-186.47"/>
+</g>
+<!-- chainqueue -->
+<g id="node13" class="node">
+<title>chainqueue</title>
+<ellipse fill="none" stroke="black" cx="140.45" cy="-162" rx="50.89" ry="18"/>
+<text text-anchor="middle" x="140.45" y="-158.3" font-family="Times,serif" font-size="14.00">chainqueue</text>
+</g>
+<!-- shep->chainqueue -->
+<g id="edge15" class="edge">
+<title>shep->chainqueue</title>
+<path fill="none" stroke="black" d="M140.45,-215.7C140.45,-208.41 140.45,-199.73 140.45,-191.54"/>
+<polygon fill="black" stroke="black" points="143.95,-191.62 140.45,-181.62 136.95,-191.62 143.95,-191.62"/>
+</g>
+<!-- aiee -->
+<g id="node6" class="node">
+<title>aiee</title>
+<ellipse fill="#cccccc" stroke="black" cx="34.45" cy="-450" rx="34.39" ry="18"/>
+<text text-anchor="middle" x="34.45" y="-446.3" font-family="Times,serif" font-size="14.00">lo/alee</text>
+</g>
+<!-- aiee->chainlib -->
+<g id="edge1" class="edge">
+<title>aiee->chainlib</title>
+<path fill="none" stroke="black" d="M61.01,-438.06C89.12,-426.49 133.74,-408.11 165.76,-394.93"/>
+<polygon fill="black" stroke="black" points="166.77,-398.3 174.69,-391.25 164.11,-391.82 166.77,-398.3"/>
+</g>
+<!-- chainlib_eth -->
+<g id="node8" class="node">
+<title>chainlib_eth</title>
+<ellipse fill="none" stroke="black" cx="396.45" cy="-306" rx="52.79" ry="18"/>
+<text text-anchor="middle" x="396.45" y="-302.3" font-family="Times,serif" font-size="14.00">chainlib-eth</text>
+</g>
+<!-- chainlib->chainlib_eth -->
+<g id="edge5" class="edge">
+<title>chainlib->chainlib_eth</title>
+<path fill="none" stroke="black" d="M234.45,-366.06C265.61,-354.7 314.75,-336.79 350.74,-323.66"/>
+<polygon fill="black" stroke="black" points="351.84,-326.99 360.03,-320.28 349.44,-320.41 351.84,-326.99"/>
+</g>
+<!-- chainlib->chainsyncer -->
+<g id="edge10" class="edge">
+<title>chainlib->chainsyncer</title>
+<path fill="none" stroke="black" d="M203.31,-359.71C201.97,-329.28 202.21,-264.77 223.45,-216 227.91,-205.76 235.02,-196 242.29,-187.71"/>
+<polygon fill="black" stroke="black" points="244.81,-190.13 249.08,-180.44 239.7,-185.35 244.81,-190.13"/>
+</g>
+<!-- chainlib->chainqueue -->
+<g id="edge11" class="edge">
+<title>chainlib->chainqueue</title>
+<path fill="none" stroke="black" d="M184.82,-362.27C158.59,-341.21 113.33,-299.72 95.45,-252 89.83,-237.02 89.93,-231.02 95.45,-216 99.3,-205.52 106.24,-195.69 113.54,-187.41"/>
+<polygon fill="black" stroke="black" points="116.07,-189.83 120.43,-180.17 111,-185 116.07,-189.83"/>
+</g>
+<!-- chainlib_eth->eth_cache -->
+<g id="edge12" class="edge">
+<title>chainlib_eth->eth_cache</title>
+<path fill="none" stroke="black" d="M370.7,-289.98C353.19,-279.77 329.82,-266.14 310.74,-255"/>
+<polygon fill="black" stroke="black" points="312.63,-252.05 302.23,-250.04 309.1,-258.1 312.63,-252.05"/>
+</g>
+<!-- chaind_eth -->
+<g id="node15" class="node">
+<title>chaind_eth</title>
+<ellipse fill="#aaffaa" stroke="black" cx="459.45" cy="-18" rx="57.39" ry="18"/>
+<text text-anchor="middle" x="459.45" y="-14.3" font-family="Times,serif" font-size="14.00">hi/chaind-eth</text>
+</g>
+<!-- chainlib_eth->chaind_eth -->
+<g id="edge25" class="edge">
+<title>chainlib_eth->chaind_eth</title>
+<path fill="none" stroke="black" d="M445.96,-299.48C501.66,-292.13 586.92,-277.07 606.45,-252 658.81,-184.78 597.81,-135.01 540.45,-72 528.77,-59.18 513.35,-48.08 499.1,-39.4"/>
+<polygon fill="black" stroke="black" points="501.19,-36.57 490.78,-34.55 497.66,-42.61 501.19,-36.57"/>
+</g>
+<!-- eth_monitor -->
+<g id="node16" class="node">
+<title>eth_monitor</title>
+<ellipse fill="#aaffaa" stroke="black" cx="469.45" cy="-90" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="469.45" y="-86.3" font-family="Times,serif" font-size="14.00">hi/eth-monitor</text>
+</g>
+<!-- chainlib_eth->eth_monitor -->
+<g id="edge24" class="edge">
+<title>chainlib_eth->eth_monitor</title>
+<path fill="none" stroke="black" d="M444.72,-298.31C495.43,-290.18 570.21,-274.67 587.45,-252 624.85,-202.81 552.89,-144.03 505.78,-112.89"/>
+<polygon fill="black" stroke="black" points="507.73,-109.98 497.43,-107.5 503.93,-115.86 507.73,-109.98"/>
+</g>
+<!-- eth_erc20 -->
+<g id="node17" class="node">
+<title>eth_erc20</title>
+<ellipse fill="#aaffaa" stroke="black" cx="525.45" cy="-234" rx="53.09" ry="18"/>
+<text text-anchor="middle" x="525.45" y="-230.3" font-family="Times,serif" font-size="14.00">hi/eth-erc20</text>
+</g>
+<!-- chainlib_eth->eth_erc20 -->
+<g id="edge20" class="edge">
+<title>chainlib_eth->eth_erc20</title>
+<path fill="none" stroke="black" d="M423.8,-290.15C442.53,-279.99 467.6,-266.39 488.15,-255.24"/>
+<polygon fill="black" stroke="black" points="489.68,-258.39 496.8,-250.55 486.34,-252.24 489.68,-258.39"/>
+</g>
+<!-- eth_erc721 -->
+<g id="node18" class="node">
+<title>eth_erc721</title>
+<ellipse fill="#aaffaa" stroke="black" cx="396.45" cy="-234" rx="57.69" ry="18"/>
+<text text-anchor="middle" x="396.45" y="-230.3" font-family="Times,serif" font-size="14.00">hi/eth-erc721</text>
+</g>
+<!-- chainlib_eth->eth_erc721 -->
+<g id="edge21" class="edge">
+<title>chainlib_eth->eth_erc721</title>
+<path fill="none" stroke="black" d="M396.45,-287.7C396.45,-280.41 396.45,-271.73 396.45,-263.54"/>
+<polygon fill="black" stroke="black" points="399.95,-263.62 396.45,-253.62 392.95,-263.62 399.95,-263.62"/>
+</g>
+<!-- funga->chainlib -->
+<g id="edge22" class="edge">
+<title>funga->chainlib</title>
+<path fill="none" stroke="black" d="M357.39,-438.62C352.15,-436.41 346.62,-434.1 341.45,-432 309.05,-418.85 272.05,-404.58 244.68,-394.17"/>
+<polygon fill="black" stroke="black" points="245.96,-390.91 235.37,-390.63 243.48,-397.45 245.96,-390.91"/>
+</g>
+<!-- funga_eth -->
+<g id="node10" class="node">
+<title>funga_eth</title>
+<ellipse fill="none" stroke="black" cx="374.45" cy="-378" rx="44.39" ry="18"/>
+<text text-anchor="middle" x="374.45" y="-374.3" font-family="Times,serif" font-size="14.00">funga-eth</text>
+</g>
+<!-- funga->funga_eth -->
+<g id="edge7" class="edge">
+<title>funga->funga_eth</title>
+<path fill="none" stroke="black" d="M379.72,-431.7C378.99,-424.41 378.12,-415.73 377.3,-407.54"/>
+<polygon fill="black" stroke="black" points="380.79,-407.21 376.31,-397.61 373.82,-407.91 380.79,-407.21"/>
+</g>
+<!-- funga_eth->chainlib_eth -->
+<g id="edge23" class="edge">
+<title>funga_eth->chainlib_eth</title>
+<path fill="none" stroke="black" d="M379.89,-359.7C382.23,-352.24 385.03,-343.32 387.66,-334.97"/>
+<polygon fill="black" stroke="black" points="390.96,-336.14 390.62,-325.55 384.28,-334.04 390.96,-336.14"/>
+</g>
+<!-- eth_cache->chainsyncer -->
+<g id="edge13" class="edge">
+<title>eth_cache->chainsyncer</title>
+<path fill="none" stroke="black" d="M274.47,-215.7C273.64,-208.41 272.64,-199.73 271.71,-191.54"/>
+<polygon fill="black" stroke="black" points="275.19,-191.15 270.57,-181.61 268.23,-191.94 275.19,-191.15"/>
+</g>
+<!-- chaind -->
+<g id="node14" class="node">
+<title>chaind</title>
+<ellipse fill="#aaffaa" stroke="black" cx="268.45" cy="-90" rx="43.59" ry="18"/>
+<text text-anchor="middle" x="268.45" y="-86.3" font-family="Times,serif" font-size="14.00">hi/chaind</text>
+</g>
+<!-- chainsyncer->chaind -->
+<g id="edge16" class="edge">
+<title>chainsyncer->chaind</title>
+<path fill="none" stroke="black" d="M268.45,-143.7C268.45,-136.41 268.45,-127.73 268.45,-119.54"/>
+<polygon fill="black" stroke="black" points="271.95,-119.62 268.45,-109.62 264.95,-119.62 271.95,-119.62"/>
+</g>
+<!-- chainsyncer->eth_monitor -->
+<g id="edge19" class="edge">
+<title>chainsyncer->eth_monitor</title>
+<path fill="none" stroke="black" d="M304.38,-148.49C336.62,-137.26 384.22,-120.68 420.03,-108.21"/>
+<polygon fill="black" stroke="black" points="421.02,-111.57 429.31,-104.98 418.71,-104.96 421.02,-111.57"/>
+</g>
+<!-- chainqueue->chaind -->
+<g id="edge17" class="edge">
+<title>chainqueue->chaind</title>
+<path fill="none" stroke="black" d="M167.28,-146.33C186.34,-135.9 212.14,-121.79 232.92,-110.43"/>
+<polygon fill="black" stroke="black" points="234.54,-113.53 241.63,-105.67 231.18,-107.39 234.54,-113.53"/>
+</g>
+<!-- chaind->chaind_eth -->
+<g id="edge18" class="edge">
+<title>chaind->chaind_eth</title>
+<path fill="none" stroke="black" d="M300.42,-77.28C331.12,-66.03 377.85,-48.9 412.72,-36.12"/>
+<polygon fill="black" stroke="black" points="413.53,-39.56 421.71,-32.83 411.12,-32.98 413.53,-39.56"/>
+</g>
+</g>
+</svg>
diff --git a/deps.dot b/deps.dot
@@ -4,6 +4,7 @@ digraph {
potaahto [ label="lo/potaahto", style="filled"; fillcolor="#cccccc" ];
leveldir [ label="lo/leveldir", style="filled"; fillcolor="#cccccc" ];
shep [ label="lo/shep", style="filled"; fillcolor="#cccccc" ];
+ aiee [ label="lo/alee", style="filled"; fillcolor="#cccccc" ];
chainlib [ label="chainlib" ];
chainlib_eth [ label="chainlib-eth" ];
@@ -21,6 +22,8 @@ digraph {
eth_erc20 [ label="hi/eth-erc20", style="filled", fillcolor="#aaffaa" ];
eth_erc721 [ label="hi/eth-erc721", style="filled", fillcolor="#aaffaa" ];
+ aiee -> chainlib
+
confini -> chainlib
hexathon -> chainlib
potaahto -> chainlib
@@ -31,6 +34,10 @@ digraph {
hexathon -> leveldir -> eth_cache
+ chainlib -> chainsyncer
+ chainlib -> chainqueue
+ chainlib_eth -> eth_cache
+
eth_cache -> chainsyncer
shep -> chainsyncer
shep -> chainqueue