Move standard library initialization to genesis transactions
thehowl opened this issue · 5 comments
Standard libraries can and should be treated as regular packages; which, at least for the time being, can only be loaded at genesis.
Related discussion: #2319 (comment)
After discussing with Milos, we agreed that it makes sense for the gno.land node at startup to be ignorant about standard libraries; this way, we can further separate the gno.land application binary from needing a surrounding gno repository to work.
To make this work, we'll likely additionally need adequate mechanisms to make stdlib loading fast in testing code and in gnodev, which often restart nodes from genesis. Currently, this is implemented by the method LoadStdlibCached, which is very effective at cutting down start-up costs in these scenarios currently, but would have to be removed if we moved to having stdlibs in the genesis file.
Related #1248
The goal is to use a go-embed of the standard libraries and utilize this embedded component while generating the hot genesis in gnodev
/gnoland start
. At the end, we will be able to manually craft a static genesis when creating the mainnet one.