``` lightningd: FATAL SIGNAL 6 (version v25.09rc1-1-ga00ed81) 0x5c9e848ca050 send_backtrace common/daemon.c:33 0x5c9e848ca249 crashdump common/daemon.c:78 0x7f451664532f ??? ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 0x7f451669eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44 0x7f451669eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78 0x7f451669eb2c __GI___pthread_kill ./nptl/pthread_kill.c:89 0x7f451664527d __GI_raise ../sysdeps/posix/raise.c:26 0x7f45166288fe __GI_abort ./stdlib/abort.c:79 0x5c9e84893ac3 migrate_from_account_db wallet/account_migration.c:500 0x5c9e848943f7 db_migrate wallet/db.c:1139 ... #5 0x0000555555615ac4 in migrate_from_account_db (ld=0x555555999238, db=0x55555599b158) at wallet/account_migration.c:500 500 abort(); (gdb) p ev->tag $1 = 0x555555a4fbb8 "journal_entry" ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
MsgGen - Generating language bindings and docs from schemas and wire descriptions
MsgGen is a collection of tools that are used to parse schemas and (eventually) protocol wire CSVs into an intermediate representation in memory, and then generate language specific bindings and documentation from it.
The dependency graph looks like this:
digraph {
"JSON-RPC Schemas" -> "msggen model";
"msggen model" -> "grpc proto file";
"msggen model" -> "Rust From<JsonRpc> Converters";
"grpc proto file" -> "Rust grpc bindings"
"Rust grpc bindings" -> "cln-grpc";
"Rust From<JsonRpc> Converters" -> "cln-grpc";
"msggen model" -> "Rust JSON-RPC structs";
"Rust JSON-RPC structs" -> "cln-rpc";
}
msggen will load the schemas in doc/schemas into memory, and then
use Patches to enrich the model before using it to generate the
bindings for the various languages as well as the converters from one
format to another. These patches can be found in msggen/patch.py and
perform a variety of operations:
- Annotate the model with additional data from external sources, such
as the
.msggen.jsonfile at the repository root to track details that can be derived but should remain constant (grpc field numbering and versioning information) - Aggregate common types with type overrides and omit fields that we can't map currently.
- Infer optionality based on the versions a field was added or deprecated, and the currently supported range of versions.
If there is a field that is currently missing in the model, that is in the schemas it is most likely because it has been marked as omitted in the patch.