Thelonious is the Eris Industries fork of go-ethereum, forked in September 2014 (~POC6). We have kept somewhat up-to-date with that repository, and will continue to do so, but its rate of change is currently too high to integrate everything.
Thelonious is not intended to compete with ethereum directly, the way other forks might. It is not intended to be a single blockchain, either. Rather, it is a window into experimenting with and utilizing the ethereum technology. Thelonious' primary contribution is the monkdoug
package, which facilitates the deployment of customized genesis blocks and blockchain protocols that can be scripted using the same tools used for contract development (namely, EPM). We intend to be much more flexible than ethereum could be, by adding and experimenting with different opcodes, virtual machine designs, and protocol rules. Perhaps something useful will emerge from these experiments that will inform and enhance the ethereum project itself. Perhaps you will simply have fun. Either way, we are content.
Thelonious is alpha software. While you can use it to deploy your own blockchain today, you should beware it has yet to undergo the rigorous testing necessary for a public facing cryptoeconomic system. If you find bugs or glaring flaws, please make an issue or, better yet, a pull request. In the meantime, we recomend using it within the Eris Industries decerver
to build distributed, but not necessarily economic, applications.
You must have Go installed.
go get github.com/eris-ltd/thelonious
cd $GOPATH/src/github.com/eris-ltd/thelonious/cmd/monk
go install
That's it! If you have problems building please do let us know by filing an issue here on Github. We will do our best to assist.
Please note at this time we have not effectively tested Thelonious on Windows so if you have a windows machine we welcome your feedback if you run into any problems (or if you do not!).
For most of the Usage and Tutorials, please see the Thelonious site.
Monk is the blockchain interface into the thelonious library. It was designed to be as simple as possible to work with the thelonious library programatically. Thus, launching a chain from a go program is as simple as:
package main
import (
"github.com/eris-ltd/thelonious/monk"
)
func main(){
m := monk.NewMonk(nil)
m.Init()
m.Start()
m.WaitForShutdown()
}
All the configuration details are hidden inside a Config
struct. So to change configuration options, simply modify that struct:
m := monk.NewMonk(nil)
m.Config.LocalPort = 38383
m.Config.Mining = True
m.Init()
You can also load the config from a json file:
m := monk.NewMonk(nil)
m.ReadConfig("config.json")
m.Init()
For an identical interface into ethereum itself (based on another fork, but unmodified, that we will do our best to keep stable during their development) can be found at https://github.com/eris-ltd/decerver-interfaces/tree/master/glue/eth.
Please enjoy responsibly.
A default thelonious chain should be compatible as an ethereum client. If this is not true today, it will be soon. On the other hand, thelonious allows you to define customized rules for your blockchain, letting you take advantage of authenticated database technology at arbitrary levels of trustlessness and security.
At the heart of a thelonious chain is the genesis doug
, a contract deployed into the genesis block that sets the rules for the chain. Within the genesis doug are a series of global variables defined using the Eris Standard Library which can be accessed by other contracts with a simple getvar
API. The ideal is to store all the protocol's parameters in the genesis doug, and, over time, move all of its rules into the virtual machine. Protocols can thus be specified using a few simple parameters, or can be scripted in their entirety within the vm. Whatver your protocol needs, the genesis doug is at your service.
For more detailed instructions on deploying genesis blocks and defining protocols, see our blog post on the subject.
A command line interface for monk, with a flag for each config option, is provided in cmd/monk
- Fork
- Hack
- Pull Request
Please note that any pull requests which are merged into this repository explicitly accept the licensing thereof.