-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How should we set up testnet infrastructure? #23
Comments
I think it makes the most sense to have 3 types of nodes for the testnet.
For the time being, these nodes will need to be differentiated by build targets/config files/bash scripts handled through docker. Eventually, when the modular blockchain begins to take shape I want to eliminate the idea of a low memory node as a build option and have it be handled entirely via plugins. This will reduce the complexity of our docker image significantly. |
The reason I believe the scripts that handle porting transactions should live on the same machine as the master node is that it is easiest to do via the cli wallet (which is in the docker image) and is one less IP/domain that we need to track. It can interact safely through api.steemit.com and localhost. We can then put a domain in front of the master/slave seed node cluster. The master node does not need to list seed nodes but can self reference seed.testnet.steemit.com. We will have second ELB group that is also behind seed.testnet.steemit.com that we can bring up when the master node is "live" and producing testnet blocks. Once this boost strapping is done we will have 4-6 seed nodes all behind seed.testnet.steemit.com. |
The fastgen node uses the debug plugin and is temporary. The included transactions generated start out with witnesses controlled by the fastgen node, which creates blocks in the past. At some point the fastgen node submits transactions which change the block signing keys of witnesses away from the fastgen-controlled keys. If you have a normal node connected with the appropriate witnesses enabled, it will pick up block production duties, allowing the fastgen node to be deleted. Porting transactions is a client function. It doesn't require running a node at all, it will simply be a script that connects to mainnet and testnet API providing nodes.
Not really. There are two reasons for this:
The easiest thing to do is construct the transactions as JSON, have the transaction construction script figure out who should sign and what their key is, and then submit the transaction to a simple C++ utility, The hierarchical threshold multisig issue is relevant because currently the generated testnet transactions create an account called |
This isn't exactly a
tinman
issue, it's more of a discussion of the specific deployment practice that should be used for a particular testnet. But it's related and there's no better place to put this, so I'm putting it here.A testnet may have nodes with the following functions:
condenser
,jussi
,yo
,hivemind
, etc.steemd.com
,busy
, etc.In particular testnets, some of these may be omitted, or mutiple roles may be combined on a single machine.
For the currently existing testnet (
pythagoras
) and the previous testnet (halloween
), I manually did the following steps:develop
branch ofsteemd
andmake install
somewhere in/opt
on one nodetar | xz
the resulting installationnc
the tarball to the other nodessha256sum
on each of the 6 instances and manually compare the output value to ensure the tarball transferred correctlynano
to edit the config file for each node, each node's config file will be slightly differentdebug_node_plugin
enabled, runtinman submit
as specified inREADME.md
This handles (a)-(e) although I'm sure the AWS / Docker experts reading this are cringing about how simple and old-fashioned my sysadmin techniques are. I didn't address (f)-(i). A node of type (f) will need to be created for price feeds #13, and type (g) will be needed for porting transactions #2.
Note that (f) and (g) don't need to run
steemd
at all, they just run Python scripts and talk to the API, so the smallest possible instance size will probably be fine for these nodes. @mvandeberg is of the opinion that every one of (a)-(i) should be crammed into a single machine, I say the 6 nodes I created (3 witness nodes and 3 seed / API nodes) is the minimum amount we should have for a long-lived, publically accessible, type (b) testnet.I only have the most hazy idea of what's required for (h) and (i).
[1] Currently
steemd
does not save blocks afterlast_irreversible_block
on disk. So for example, if you have a single witness, then shut it down, upgrade and restart it, it may start producing a fork! This may be avoided by splitting witness duty among at least 3 nodes, at most one of which is down at a time, allowing a--required-participation=60
flag to forbid producing a minority fork before it's caught up to the present.The text was updated successfully, but these errors were encountered: