Ethereum’s geth
has options for running a pure development, contract testing node (the -dev
and -dev.period 0
options). This makes it so that the node does nothing until you send it a transaction, when it immediately handles the transaction, then sits waiting again.
I have a very simple example program that performs 7 eth transactions and 6 event queries after starting the server in a Docker container. This takes 15s on my 5 yr old laptop.
When I run the same program on Algorand, it makes 7 Algo transaction groups and 6 indexer queries after starting algod
and the indexer in a shared Docker container (and postgres in an adjacent one). It takes 3 minutes and 26 seconds----206 seconds or 13 times longer!
It is really excruciatingly slow. I don’t know enough about algod
to know where the time goes, but here are some thoughts:
- The indexer fetcher has a hard-coded 5 second delay on a disconnect from
algod
; in my experience this happens a lot even on this simple workload. - There are a lot of consensus parameters that are timeouts and so, especially important I assume is SmallLambda
In my private network for testing — https://github.com/reach-sh/reach-lang/tree/master/scripts/algorand-devnet — I only have one node so the committee is just 1. I think that all that is needed is the ability to drop SmallLambda and all of the other parameters to zero in this testing mode, but I think ya’ll at Algorand will just know right off the bat whether this will work and/or if there’s a simpler way.
Has anyone else thought about this problem? Is it safe to just drop SmallLambda to 0 and run a network with one node? I’d like to gather some ideas and try a patch then add the configuration option into algod
.
For reference, I have a Github issue about this too: https://github.com/algorand/go-algorand/issues/1598