Using the local codegen for substreams init:
SUBSTREAMS_CODEGEN_ENDPOINT=http://localhost:9000 substreams init
DEBUG=.* go run ./cmd/substreams-codegen
You write a Conversation
(or Convo
for short) struct.
- This function embed or has a
State
variable with the state you want to build.- This State is what gets serialized to JSON and sent to the client. It must be a usable interface, so pick your names wisely.
- Anything that is exported will be shared with the client, and come back during hydration (if a connection gets interrupted, or the user kept their
generator.json
state, and wants to simply rebuild).
- It has an
Update()
method that is registered into theloop.EventLoop
by thecodegen
framework.- This function can mutate state, and it is the only method who can mutate state.
- This function follows the ELM paradigm, and must never do long-running operations, only quick routing.
- A
NextStep()
function will choose where to go based on the current state, and continue the conversation to make sure it is valid and completely filled in. - Any long running work is done in a
loop.Cmd
(that runs async), and that Cmd returns a message for error handling or continuation. - Any loops are done by sending a
loop.Cmd
that does an iteration, and returns a message to continue the loop. The ending condition is merely the rescheduling of that same Cmd (or not, to end the loop).
The code generation:
- Any
gotmpl
files will go through templating, and be passed the State struct as a single parameter. - The State struct should have helper methods to allow getting data from the state
0x1f98431c8ad98523631ae4a59f267346ea31f984 -> Uniswap V3 Factory https://api.etherscan.io/api?module=contract&action=getabi&address=0xe592427a0aece92de3edee1f18e0157c05861564 -> Uniswap V3 Router https://info.uniswap.org/#/tokens/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -> USDC Contract -> https://etherscan.io/token/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48