diff --git a/HACKING.md b/HACKING.md new file mode 100644 index 000000000..279e71c4f --- /dev/null +++ b/HACKING.md @@ -0,0 +1,74 @@ +Welcome, fellow coder! + +This repository contains a prototype for testing the lightning protocols. + +Getting Started +--------------- +It's in C, to encourage alternate implementations. It uses the Linux +coding style. Patches are welcome! Just look for FIXME if you want +ideas. + +To read the code, you'll probably need to understand ccan/tal: it's a +heirarchical memory allocator, where each allocation has a parent, and +thus lifetimes are grouped. eg. a 'struct bitcoin_tx' has a pointer +to an array of 'struct bitcoin_tx_input'; they are allocated off the +'struct bitcoind_tx', so freeing the 'struct bitcoind_tx' frees them +all. Tal also supports destructors, which are usually used to remove +things from lists, etc. + +The daemon uses async io (ccan/io): you register callbacks and they +happen once I/O is available, then you return what to do next. This +does not use threads, so the code flow is generally fairly simple. + +Here's a list of parts, with notes: + +ccan/ - useful routines from http://ccodearchive.net + - Use make update-ccan to update it. + - Use make update-ccan CCAN_NEW="mod1 mod2..." to add modules + +bitcoin/ - bitcoin script, signature and transaction routines. + - Not a complete set, but enough for our purposes. + +secp256k1/ - a copy of libsecp256k1. + - TODO: Replace this will the library once 1.0 is well distributed. + +test/ - A few standalone test programs + - test_onion: C code to generate and decode the routing onion + (Obsolete; will replace with Sphynx!) + - test_state_coverage: routine to test state machine. + +daemon/ - The start of a lightningd daemon and lightning-cli + + Networking and comms: + - cryptopkt: cryptographic handshake and comms routines. + - dns: async dns lookup + - netaddr: wrapper type for network addresses. + + JSON and command support: + - jsmn/ : a "minimalistic JSON parser" from http://zserge.com/jsmn.html + - json: simple wrappers around jsmn for parsing and creating JSON + - jsonrpc: routines for handing JSON commands (async). + - lightning-cli: simple lightning command line client. + + Misc: + - configdir: support for ~/.lightning/config + - controlled_time: support for dev-mocktime to alter time. + - log: logging routines + - pseudorand: pseudorandom wrapper + - secrets: routines for using secret keys. + - timeout: timer support. + + Dealing with bitcoin events: + - bitcoind: communication with bitcoind to monitor/send txs. + - watch: wrapper for watching specific events. + + Core code: + - lightningd: main routine for lightning + - packets: per-peer packet creation and acceptance routines + - peer: peer routines and data structure. + +Feel free to ask questions on the lightning-dev mailing list, or on +#lightning-dev on IRC, or email me at rusty@rustcorp.com.au. + +Cheers! +Rusty. diff --git a/Makefile b/Makefile index 829593bde..2b1fcb9af 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ #! /usr/bin/make -NAME=MtGox's Cold Wallet +NAME=Butterfly Labs' Timely Delivery # Needs to have oneof support: Ubuntu vivid's is too old :( PROTOCC:=protoc-c