Browse Source

new modules: pyln.proto.message.{bolt1,bolt2,bolt4,bolt7}

These are autogenerated, but now they export their own
MessageNamespace, as well as the raw csv.

They also expose their SubtypeTypes, MessageTypes and TlvStreamTypes,
though in theory these could clash (they don't for now, and it'd be
kinda awkward if they did).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
nifty/pset-pre
Rusty Russell 4 years ago
committed by Christian Decker
parent
commit
85bb93618b
  1. 4
      contrib/pyln-proto/pyln/proto/message/Makefile
  2. 7
      contrib/pyln-proto/pyln/proto/message/bolt1/Makefile
  3. 16
      contrib/pyln-proto/pyln/proto/message/bolt1/__init__.py
  4. 5
      contrib/pyln-proto/pyln/proto/message/bolt1/bolt.py
  5. 35
      contrib/pyln-proto/pyln/proto/message/bolt1/csv.py
  6. 7
      contrib/pyln-proto/pyln/proto/message/bolt2/Makefile
  7. 16
      contrib/pyln-proto/pyln/proto/message/bolt2/__init__.py
  8. 5
      contrib/pyln-proto/pyln/proto/message/bolt2/bolt.py
  9. 100
      contrib/pyln-proto/pyln/proto/message/bolt2/csv.py
  10. 7
      contrib/pyln-proto/pyln/proto/message/bolt4/Makefile
  11. 16
      contrib/pyln-proto/pyln/proto/message/bolt4/__init__.py
  12. 5
      contrib/pyln-proto/pyln/proto/message/bolt4/bolt.py
  13. 55
      contrib/pyln-proto/pyln/proto/message/bolt4/csv.py
  14. 7
      contrib/pyln-proto/pyln/proto/message/bolt7/Makefile
  15. 16
      contrib/pyln-proto/pyln/proto/message/bolt7/__init__.py
  16. 5
      contrib/pyln-proto/pyln/proto/message/bolt7/bolt.py
  17. 83
      contrib/pyln-proto/pyln/proto/message/bolt7/csv.py
  18. 14
      contrib/pyln-proto/pyln/proto/message/bolts/Makefile
  19. 10
      contrib/pyln-proto/pyln/proto/message/bolts/__init__.py
  20. 273
      contrib/pyln-proto/pyln/proto/message/bolts/bolts.py
  21. 2
      contrib/pyln-proto/setup.py
  22. 46
      contrib/pyln-proto/tests/test_bolt1.py
  23. 8
      contrib/pyln-proto/tests/test_bolt2.py
  24. 8
      contrib/pyln-proto/tests/test_bolt4.py
  25. 14
      contrib/pyln-proto/tests/test_bolt7.py

4
contrib/pyln-proto/pyln/proto/message/Makefile

@ -0,0 +1,4 @@
#! /usr/bin/make
refresh:
for d in bolt*; do $(MAKE) -C $$d; done

7
contrib/pyln-proto/pyln/proto/message/bolt1/Makefile

@ -0,0 +1,7 @@
#! /usr/bin/make
SPECDIR := ../../../../../../../lightning-rfc
csv.py: $(SPECDIR)/01-messaging.md Makefile
SPECNUM=`basename $< | sed 's/-.*//'`; (echo csv = '['; python3 $(SPECDIR)/tools/extract-formats.py $< | sed 's/\(.*\)/ "\1",/'; echo ']') > $@
chmod a+x $@

16
contrib/pyln-proto/pyln/proto/message/bolt1/__init__.py

@ -0,0 +1,16 @@
from .csv import csv
from .bolt import namespace
import sys
__version__ = '0.0.1'
__all__ = [
'csv',
'namespace',
]
mod = sys.modules[__name__]
for d in namespace.subtypes, namespace.tlvtypes, namespace.messagetypes:
for name in d:
setattr(mod, name, d[name])
__all__.append(name)

5
contrib/pyln-proto/pyln/proto/message/bolt1/bolt.py

@ -0,0 +1,5 @@
from pyln.proto.message import MessageNamespace
from .csv import csv
namespace = MessageNamespace(csv_lines=csv)

35
contrib/pyln-proto/pyln/proto/message/bolt1/csv.py

@ -0,0 +1,35 @@
csv = [
"msgtype,init,16",
"msgdata,init,gflen,u16,",
"msgdata,init,globalfeatures,byte,gflen",
"msgdata,init,flen,u16,",
"msgdata,init,features,byte,flen",
"msgdata,init,tlvs,init_tlvs,",
"tlvtype,init_tlvs,networks,1",
"tlvdata,init_tlvs,networks,chains,chain_hash,...",
"msgtype,error,17",
"msgdata,error,channel_id,channel_id,",
"msgdata,error,len,u16,",
"msgdata,error,data,byte,len",
"msgtype,ping,18",
"msgdata,ping,num_pong_bytes,u16,",
"msgdata,ping,byteslen,u16,",
"msgdata,ping,ignored,byte,byteslen",
"msgtype,pong,19",
"msgdata,pong,byteslen,u16,",
"msgdata,pong,ignored,byte,byteslen",
"tlvtype,n1,tlv1,1",
"tlvdata,n1,tlv1,amount_msat,tu64,",
"tlvtype,n1,tlv2,2",
"tlvdata,n1,tlv2,scid,short_channel_id,",
"tlvtype,n1,tlv3,3",
"tlvdata,n1,tlv3,node_id,point,",
"tlvdata,n1,tlv3,amount_msat_1,u64,",
"tlvdata,n1,tlv3,amount_msat_2,u64,",
"tlvtype,n1,tlv4,254",
"tlvdata,n1,tlv4,cltv_delta,u16,",
"tlvtype,n2,tlv1,0",
"tlvdata,n2,tlv1,amount_msat,tu64,",
"tlvtype,n2,tlv2,11",
"tlvdata,n2,tlv2,cltv_expiry,tu32,",
]

7
contrib/pyln-proto/pyln/proto/message/bolt2/Makefile

@ -0,0 +1,7 @@
#! /usr/bin/make
SPECDIR := ../../../../../../../lightning-rfc
csv.py: $(SPECDIR)/02-peer-protocol.md Makefile
SPECNUM=`basename $< | sed 's/-.*//'`; (echo csv = '['; python3 $(SPECDIR)/tools/extract-formats.py $< | sed 's/\(.*\)/ "\1",/'; echo ']') > $@
chmod a+x $@

16
contrib/pyln-proto/pyln/proto/message/bolt2/__init__.py

@ -0,0 +1,16 @@
from .csv import csv
from .bolt import namespace
import sys
__version__ = '0.0.1'
__all__ = [
'csv',
'namespace',
]
mod = sys.modules[__name__]
for d in namespace.subtypes, namespace.tlvtypes, namespace.messagetypes:
for name in d:
setattr(mod, name, d[name])
__all__.append(name)

5
contrib/pyln-proto/pyln/proto/message/bolt2/bolt.py

@ -0,0 +1,5 @@
from pyln.proto.message import MessageNamespace
from .csv import csv
namespace = MessageNamespace(csv_lines=csv)

100
contrib/pyln-proto/pyln/proto/message/bolt2/csv.py

@ -0,0 +1,100 @@
csv = [
"msgtype,open_channel,32",
"msgdata,open_channel,chain_hash,chain_hash,",
"msgdata,open_channel,temporary_channel_id,byte,32",
"msgdata,open_channel,funding_satoshis,u64,",
"msgdata,open_channel,push_msat,u64,",
"msgdata,open_channel,dust_limit_satoshis,u64,",
"msgdata,open_channel,max_htlc_value_in_flight_msat,u64,",
"msgdata,open_channel,channel_reserve_satoshis,u64,",
"msgdata,open_channel,htlc_minimum_msat,u64,",
"msgdata,open_channel,feerate_per_kw,u32,",
"msgdata,open_channel,to_self_delay,u16,",
"msgdata,open_channel,max_accepted_htlcs,u16,",
"msgdata,open_channel,funding_pubkey,point,",
"msgdata,open_channel,revocation_basepoint,point,",
"msgdata,open_channel,payment_basepoint,point,",
"msgdata,open_channel,delayed_payment_basepoint,point,",
"msgdata,open_channel,htlc_basepoint,point,",
"msgdata,open_channel,first_per_commitment_point,point,",
"msgdata,open_channel,channel_flags,byte,",
"msgdata,open_channel,tlvs,open_channel_tlvs,",
"tlvtype,open_channel_tlvs,upfront_shutdown_script,0",
"tlvdata,open_channel_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,...",
"msgtype,accept_channel,33",
"msgdata,accept_channel,temporary_channel_id,byte,32",
"msgdata,accept_channel,dust_limit_satoshis,u64,",
"msgdata,accept_channel,max_htlc_value_in_flight_msat,u64,",
"msgdata,accept_channel,channel_reserve_satoshis,u64,",
"msgdata,accept_channel,htlc_minimum_msat,u64,",
"msgdata,accept_channel,minimum_depth,u32,",
"msgdata,accept_channel,to_self_delay,u16,",
"msgdata,accept_channel,max_accepted_htlcs,u16,",
"msgdata,accept_channel,funding_pubkey,point,",
"msgdata,accept_channel,revocation_basepoint,point,",
"msgdata,accept_channel,payment_basepoint,point,",
"msgdata,accept_channel,delayed_payment_basepoint,point,",
"msgdata,accept_channel,htlc_basepoint,point,",
"msgdata,accept_channel,first_per_commitment_point,point,",
"msgdata,accept_channel,tlvs,accept_channel_tlvs,",
"tlvtype,accept_channel_tlvs,upfront_shutdown_script,0",
"tlvdata,accept_channel_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,...",
"msgtype,funding_created,34",
"msgdata,funding_created,temporary_channel_id,byte,32",
"msgdata,funding_created,funding_txid,sha256,",
"msgdata,funding_created,funding_output_index,u16,",
"msgdata,funding_created,signature,signature,",
"msgtype,funding_signed,35",
"msgdata,funding_signed,channel_id,channel_id,",
"msgdata,funding_signed,signature,signature,",
"msgtype,funding_locked,36",
"msgdata,funding_locked,channel_id,channel_id,",
"msgdata,funding_locked,next_per_commitment_point,point,",
"msgtype,shutdown,38",
"msgdata,shutdown,channel_id,channel_id,",
"msgdata,shutdown,len,u16,",
"msgdata,shutdown,scriptpubkey,byte,len",
"msgtype,closing_signed,39",
"msgdata,closing_signed,channel_id,channel_id,",
"msgdata,closing_signed,fee_satoshis,u64,",
"msgdata,closing_signed,signature,signature,",
"msgtype,update_add_htlc,128",
"msgdata,update_add_htlc,channel_id,channel_id,",
"msgdata,update_add_htlc,id,u64,",
"msgdata,update_add_htlc,amount_msat,u64,",
"msgdata,update_add_htlc,payment_hash,sha256,",
"msgdata,update_add_htlc,cltv_expiry,u32,",
"msgdata,update_add_htlc,onion_routing_packet,byte,1366",
"msgtype,update_fulfill_htlc,130",
"msgdata,update_fulfill_htlc,channel_id,channel_id,",
"msgdata,update_fulfill_htlc,id,u64,",
"msgdata,update_fulfill_htlc,payment_preimage,byte,32",
"msgtype,update_fail_htlc,131",
"msgdata,update_fail_htlc,channel_id,channel_id,",
"msgdata,update_fail_htlc,id,u64,",
"msgdata,update_fail_htlc,len,u16,",
"msgdata,update_fail_htlc,reason,byte,len",
"msgtype,update_fail_malformed_htlc,135",
"msgdata,update_fail_malformed_htlc,channel_id,channel_id,",
"msgdata,update_fail_malformed_htlc,id,u64,",
"msgdata,update_fail_malformed_htlc,sha256_of_onion,sha256,",
"msgdata,update_fail_malformed_htlc,failure_code,u16,",
"msgtype,commitment_signed,132",
"msgdata,commitment_signed,channel_id,channel_id,",
"msgdata,commitment_signed,signature,signature,",
"msgdata,commitment_signed,num_htlcs,u16,",
"msgdata,commitment_signed,htlc_signature,signature,num_htlcs",
"msgtype,revoke_and_ack,133",
"msgdata,revoke_and_ack,channel_id,channel_id,",
"msgdata,revoke_and_ack,per_commitment_secret,byte,32",
"msgdata,revoke_and_ack,next_per_commitment_point,point,",
"msgtype,update_fee,134",
"msgdata,update_fee,channel_id,channel_id,",
"msgdata,update_fee,feerate_per_kw,u32,",
"msgtype,channel_reestablish,136",
"msgdata,channel_reestablish,channel_id,channel_id,",
"msgdata,channel_reestablish,next_commitment_number,u64,",
"msgdata,channel_reestablish,next_revocation_number,u64,",
"msgdata,channel_reestablish,your_last_per_commitment_secret,byte,32",
"msgdata,channel_reestablish,my_current_per_commitment_point,point,",
]

7
contrib/pyln-proto/pyln/proto/message/bolt4/Makefile

@ -0,0 +1,7 @@
#! /usr/bin/make
SPECDIR := ../../../../../../../lightning-rfc
csv.py: $(SPECDIR)/04-onion-routing.md Makefile
SPECNUM=`basename $< | sed 's/-.*//'`; (echo csv = '['; python3 $(SPECDIR)/tools/extract-formats.py $< | sed 's/\(.*\)/ "\1",/'; echo ']') > $@
chmod a+x $@

16
contrib/pyln-proto/pyln/proto/message/bolt4/__init__.py

@ -0,0 +1,16 @@
from .csv import csv
from .bolt import namespace
import sys
__version__ = '0.0.1'
__all__ = [
'csv',
'namespace',
]
mod = sys.modules[__name__]
for d in namespace.subtypes, namespace.tlvtypes, namespace.messagetypes:
for name in d:
setattr(mod, name, d[name])
__all__.append(name)

5
contrib/pyln-proto/pyln/proto/message/bolt4/bolt.py

@ -0,0 +1,5 @@
from pyln.proto.message import MessageNamespace
from .csv import csv
namespace = MessageNamespace(csv_lines=csv)

55
contrib/pyln-proto/pyln/proto/message/bolt4/csv.py

@ -0,0 +1,55 @@
csv = [
"tlvtype,tlv_payload,amt_to_forward,2",
"tlvdata,tlv_payload,amt_to_forward,amt_to_forward,tu64,",
"tlvtype,tlv_payload,outgoing_cltv_value,4",
"tlvdata,tlv_payload,outgoing_cltv_value,outgoing_cltv_value,tu32,",
"tlvtype,tlv_payload,short_channel_id,6",
"tlvdata,tlv_payload,short_channel_id,short_channel_id,short_channel_id,",
"tlvtype,tlv_payload,payment_data,8",
"tlvdata,tlv_payload,payment_data,payment_secret,byte,32",
"tlvdata,tlv_payload,payment_data,total_msat,tu64,",
"msgtype,invalid_realm,PERM|1",
"msgtype,temporary_node_failure,NODE|2",
"msgtype,permanent_node_failure,PERM|NODE|2",
"msgtype,required_node_feature_missing,PERM|NODE|3",
"msgtype,invalid_onion_version,BADONION|PERM|4",
"msgdata,invalid_onion_version,sha256_of_onion,sha256,",
"msgtype,invalid_onion_hmac,BADONION|PERM|5",
"msgdata,invalid_onion_hmac,sha256_of_onion,sha256,",
"msgtype,invalid_onion_key,BADONION|PERM|6",
"msgdata,invalid_onion_key,sha256_of_onion,sha256,",
"msgtype,temporary_channel_failure,UPDATE|7",
"msgdata,temporary_channel_failure,len,u16,",
"msgdata,temporary_channel_failure,channel_update,byte,len",
"msgtype,permanent_channel_failure,PERM|8",
"msgtype,required_channel_feature_missing,PERM|9",
"msgtype,unknown_next_peer,PERM|10",
"msgtype,amount_below_minimum,UPDATE|11",
"msgdata,amount_below_minimum,htlc_msat,u64,",
"msgdata,amount_below_minimum,len,u16,",
"msgdata,amount_below_minimum,channel_update,byte,len",
"msgtype,fee_insufficient,UPDATE|12",
"msgdata,fee_insufficient,htlc_msat,u64,",
"msgdata,fee_insufficient,len,u16,",
"msgdata,fee_insufficient,channel_update,byte,len",
"msgtype,incorrect_cltv_expiry,UPDATE|13",
"msgdata,incorrect_cltv_expiry,cltv_expiry,u32,",
"msgdata,incorrect_cltv_expiry,len,u16,",
"msgdata,incorrect_cltv_expiry,channel_update,byte,len",
"msgtype,expiry_too_soon,UPDATE|14",
"msgdata,expiry_too_soon,len,u16,",
"msgdata,expiry_too_soon,channel_update,byte,len",
"msgtype,incorrect_or_unknown_payment_details,PERM|15",
"msgdata,incorrect_or_unknown_payment_details,htlc_msat,u64,",
"msgdata,incorrect_or_unknown_payment_details,height,u32,",
"msgtype,final_incorrect_cltv_expiry,18",
"msgdata,final_incorrect_cltv_expiry,cltv_expiry,u32,",
"msgtype,final_incorrect_htlc_amount,19",
"msgdata,final_incorrect_htlc_amount,incoming_htlc_amt,u64,",
"msgtype,channel_disabled,UPDATE|20",
"msgtype,expiry_too_far,21",
"msgtype,invalid_onion_payload,PERM|22",
"msgdata,invalid_onion_payload,type,varint,",
"msgdata,invalid_onion_payload,offset,u16,",
"msgtype,mpp_timeout,23",
]

7
contrib/pyln-proto/pyln/proto/message/bolt7/Makefile

@ -0,0 +1,7 @@
#! /usr/bin/make
SPECDIR := ../../../../../../../lightning-rfc
csv.py: $(SPECDIR)/07-routing-gossip.md Makefile
SPECNUM=`basename $< | sed 's/-.*//'`; (echo csv = '['; python3 $(SPECDIR)/tools/extract-formats.py $< | sed 's/\(.*\)/ "\1",/'; echo ']') > $@
chmod a+x $@

16
contrib/pyln-proto/pyln/proto/message/bolt7/__init__.py

@ -0,0 +1,16 @@
from .csv import csv
from .bolt import namespace
import sys
__version__ = '0.0.1'
__all__ = [
'csv',
'namespace',
]
mod = sys.modules[__name__]
for d in namespace.subtypes, namespace.tlvtypes, namespace.messagetypes:
for name in d:
setattr(mod, name, d[name])
__all__.append(name)

5
contrib/pyln-proto/pyln/proto/message/bolt7/bolt.py

@ -0,0 +1,5 @@
from pyln.proto.message import MessageNamespace
from .csv import csv
namespace = MessageNamespace(csv_lines=csv)

83
contrib/pyln-proto/pyln/proto/message/bolt7/csv.py

@ -0,0 +1,83 @@
csv = [
"msgtype,announcement_signatures,259",
"msgdata,announcement_signatures,channel_id,channel_id,",
"msgdata,announcement_signatures,short_channel_id,short_channel_id,",
"msgdata,announcement_signatures,node_signature,signature,",
"msgdata,announcement_signatures,bitcoin_signature,signature,",
"msgtype,channel_announcement,256",
"msgdata,channel_announcement,node_signature_1,signature,",
"msgdata,channel_announcement,node_signature_2,signature,",
"msgdata,channel_announcement,bitcoin_signature_1,signature,",
"msgdata,channel_announcement,bitcoin_signature_2,signature,",
"msgdata,channel_announcement,len,u16,",
"msgdata,channel_announcement,features,byte,len",
"msgdata,channel_announcement,chain_hash,chain_hash,",
"msgdata,channel_announcement,short_channel_id,short_channel_id,",
"msgdata,channel_announcement,node_id_1,point,",
"msgdata,channel_announcement,node_id_2,point,",
"msgdata,channel_announcement,bitcoin_key_1,point,",
"msgdata,channel_announcement,bitcoin_key_2,point,",
"msgtype,node_announcement,257",
"msgdata,node_announcement,signature,signature,",
"msgdata,node_announcement,flen,u16,",
"msgdata,node_announcement,features,byte,flen",
"msgdata,node_announcement,timestamp,u32,",
"msgdata,node_announcement,node_id,point,",
"msgdata,node_announcement,rgb_color,byte,3",
"msgdata,node_announcement,alias,byte,32",
"msgdata,node_announcement,addrlen,u16,",
"msgdata,node_announcement,addresses,byte,addrlen",
"msgtype,channel_update,258",
"msgdata,channel_update,signature,signature,",
"msgdata,channel_update,chain_hash,chain_hash,",
"msgdata,channel_update,short_channel_id,short_channel_id,",
"msgdata,channel_update,timestamp,u32,",
"msgdata,channel_update,message_flags,byte,",
"msgdata,channel_update,channel_flags,byte,",
"msgdata,channel_update,cltv_expiry_delta,u16,",
"msgdata,channel_update,htlc_minimum_msat,u64,",
"msgdata,channel_update,fee_base_msat,u32,",
"msgdata,channel_update,fee_proportional_millionths,u32,",
"msgdata,channel_update,htlc_maximum_msat,u64,,option_channel_htlc_max",
"msgtype,query_short_channel_ids,261,gossip_queries",
"msgdata,query_short_channel_ids,chain_hash,chain_hash,",
"msgdata,query_short_channel_ids,len,u16,",
"msgdata,query_short_channel_ids,encoded_short_ids,byte,len",
"msgdata,query_short_channel_ids,tlvs,query_short_channel_ids_tlvs,",
"tlvtype,query_short_channel_ids_tlvs,query_flags,1",
"tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,u8,",
"tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,...",
"msgtype,reply_short_channel_ids_end,262,gossip_queries",
"msgdata,reply_short_channel_ids_end,chain_hash,chain_hash,",
"msgdata,reply_short_channel_ids_end,full_information,byte,",
"msgtype,query_channel_range,263,gossip_queries",
"msgdata,query_channel_range,chain_hash,chain_hash,",
"msgdata,query_channel_range,first_blocknum,u32,",
"msgdata,query_channel_range,number_of_blocks,u32,",
"msgdata,query_channel_range,tlvs,query_channel_range_tlvs,",
"tlvtype,query_channel_range_tlvs,query_option,1",
"tlvdata,query_channel_range_tlvs,query_option,query_option_flags,varint,",
"msgtype,reply_channel_range,264,gossip_queries",
"msgdata,reply_channel_range,chain_hash,chain_hash,",
"msgdata,reply_channel_range,first_blocknum,u32,",
"msgdata,reply_channel_range,number_of_blocks,u32,",
"msgdata,reply_channel_range,full_information,byte,",
"msgdata,reply_channel_range,len,u16,",
"msgdata,reply_channel_range,encoded_short_ids,byte,len",
"msgdata,reply_channel_range,tlvs,reply_channel_range_tlvs,",
"tlvtype,reply_channel_range_tlvs,timestamps_tlv,1",
"tlvdata,reply_channel_range_tlvs,timestamps_tlv,encoding_type,u8,",
"tlvdata,reply_channel_range_tlvs,timestamps_tlv,encoded_timestamps,byte,...",
"tlvtype,reply_channel_range_tlvs,checksums_tlv,3",
"tlvdata,reply_channel_range_tlvs,checksums_tlv,checksums,channel_update_checksums,...",
"subtype,channel_update_timestamps",
"subtypedata,channel_update_timestamps,timestamp_node_id_1,u32,",
"subtypedata,channel_update_timestamps,timestamp_node_id_2,u32,",
"subtype,channel_update_checksums",
"subtypedata,channel_update_checksums,checksum_node_id_1,u32,",
"subtypedata,channel_update_checksums,checksum_node_id_2,u32,",
"msgtype,gossip_timestamp_filter,265,gossip_queries",
"msgdata,gossip_timestamp_filter,chain_hash,chain_hash,",
"msgdata,gossip_timestamp_filter,first_timestamp,u32,",
"msgdata,gossip_timestamp_filter,timestamp_range,u32,",
]

14
contrib/pyln-proto/pyln/proto/message/bolts/Makefile

@ -1,14 +0,0 @@
#! /usr/bin/make
SPECDIR := ../../../../../../../lightning-rfc
# Only consider specs which have types in them.
SPECS := $(shell fgrep -l '1. type' $(SPECDIR)/[0-9]*.md)
bolts.py: $(SPECS) Makefile
for f in $(SPECS); do SPECNUM=`basename $$f | sed 's/-.*//'`; echo bolt_$${SPECNUM}_csv = '['; python3 $(SPECDIR)/tools/extract-formats.py $$f | sed 's/\(.*\)/ "\1",/'; echo ']'; done > $@
chmod a+x $@
CSVFILES = $(SPECS:%.md=bolt%.py)
refresh: $(CSVFILES)

10
contrib/pyln-proto/pyln/proto/message/bolts/__init__.py

@ -1,10 +0,0 @@
from .bolts import bolt_01_csv, bolt_02_csv, bolt_04_csv, bolt_07_csv
__version__ = '0.0.1'
__all__ = [
"bolt_01_csv",
"bolt_02_csv",
"bolt_04_csv",
"bolt_07_csv",
]

273
contrib/pyln-proto/pyln/proto/message/bolts/bolts.py

@ -1,273 +0,0 @@
bolt_01_csv = [
"msgtype,init,16",
"msgdata,init,gflen,u16,",
"msgdata,init,globalfeatures,byte,gflen",
"msgdata,init,flen,u16,",
"msgdata,init,features,byte,flen",
"msgdata,init,tlvs,init_tlvs,",
"tlvtype,init_tlvs,networks,1",
"tlvdata,init_tlvs,networks,chains,chain_hash,...",
"msgtype,error,17",
"msgdata,error,channel_id,channel_id,",
"msgdata,error,len,u16,",
"msgdata,error,data,byte,len",
"msgtype,ping,18",
"msgdata,ping,num_pong_bytes,u16,",
"msgdata,ping,byteslen,u16,",
"msgdata,ping,ignored,byte,byteslen",
"msgtype,pong,19",
"msgdata,pong,byteslen,u16,",
"msgdata,pong,ignored,byte,byteslen",
"tlvtype,n1,tlv1,1",
"tlvdata,n1,tlv1,amount_msat,tu64,",
"tlvtype,n1,tlv2,2",
"tlvdata,n1,tlv2,scid,short_channel_id,",
"tlvtype,n1,tlv3,3",
"tlvdata,n1,tlv3,node_id,point,",
"tlvdata,n1,tlv3,amount_msat_1,u64,",
"tlvdata,n1,tlv3,amount_msat_2,u64,",
"tlvtype,n1,tlv4,254",
"tlvdata,n1,tlv4,cltv_delta,u16,",
"tlvtype,n2,tlv1,0",
"tlvdata,n2,tlv1,amount_msat,tu64,",
"tlvtype,n2,tlv2,11",
"tlvdata,n2,tlv2,cltv_expiry,tu32,",
]
bolt_02_csv = [
"msgtype,open_channel,32",
"msgdata,open_channel,chain_hash,chain_hash,",
"msgdata,open_channel,temporary_channel_id,byte,32",
"msgdata,open_channel,funding_satoshis,u64,",
"msgdata,open_channel,push_msat,u64,",
"msgdata,open_channel,dust_limit_satoshis,u64,",
"msgdata,open_channel,max_htlc_value_in_flight_msat,u64,",
"msgdata,open_channel,channel_reserve_satoshis,u64,",
"msgdata,open_channel,htlc_minimum_msat,u64,",
"msgdata,open_channel,feerate_per_kw,u32,",
"msgdata,open_channel,to_self_delay,u16,",
"msgdata,open_channel,max_accepted_htlcs,u16,",
"msgdata,open_channel,funding_pubkey,point,",
"msgdata,open_channel,revocation_basepoint,point,",
"msgdata,open_channel,payment_basepoint,point,",
"msgdata,open_channel,delayed_payment_basepoint,point,",
"msgdata,open_channel,htlc_basepoint,point,",
"msgdata,open_channel,first_per_commitment_point,point,",
"msgdata,open_channel,channel_flags,byte,",
"msgdata,open_channel,tlvs,open_channel_tlvs,",
"tlvtype,open_channel_tlvs,upfront_shutdown_script,0",
"tlvdata,open_channel_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,...",
"msgtype,accept_channel,33",
"msgdata,accept_channel,temporary_channel_id,byte,32",
"msgdata,accept_channel,dust_limit_satoshis,u64,",
"msgdata,accept_channel,max_htlc_value_in_flight_msat,u64,",
"msgdata,accept_channel,channel_reserve_satoshis,u64,",
"msgdata,accept_channel,htlc_minimum_msat,u64,",
"msgdata,accept_channel,minimum_depth,u32,",
"msgdata,accept_channel,to_self_delay,u16,",
"msgdata,accept_channel,max_accepted_htlcs,u16,",
"msgdata,accept_channel,funding_pubkey,point,",
"msgdata,accept_channel,revocation_basepoint,point,",
"msgdata,accept_channel,payment_basepoint,point,",
"msgdata,accept_channel,delayed_payment_basepoint,point,",
"msgdata,accept_channel,htlc_basepoint,point,",
"msgdata,accept_channel,first_per_commitment_point,point,",
"msgdata,accept_channel,tlvs,accept_channel_tlvs,",
"tlvtype,accept_channel_tlvs,upfront_shutdown_script,0",
"tlvdata,accept_channel_tlvs,upfront_shutdown_script,shutdown_scriptpubkey,byte,...",
"msgtype,funding_created,34",
"msgdata,funding_created,temporary_channel_id,byte,32",
"msgdata,funding_created,funding_txid,sha256,",
"msgdata,funding_created,funding_output_index,u16,",
"msgdata,funding_created,signature,signature,",
"msgtype,funding_signed,35",
"msgdata,funding_signed,channel_id,channel_id,",
"msgdata,funding_signed,signature,signature,",
"msgtype,funding_locked,36",
"msgdata,funding_locked,channel_id,channel_id,",
"msgdata,funding_locked,next_per_commitment_point,point,",
"msgtype,shutdown,38",
"msgdata,shutdown,channel_id,channel_id,",
"msgdata,shutdown,len,u16,",
"msgdata,shutdown,scriptpubkey,byte,len",
"msgtype,closing_signed,39",
"msgdata,closing_signed,channel_id,channel_id,",
"msgdata,closing_signed,fee_satoshis,u64,",
"msgdata,closing_signed,signature,signature,",
"msgtype,update_add_htlc,128",
"msgdata,update_add_htlc,channel_id,channel_id,",
"msgdata,update_add_htlc,id,u64,",
"msgdata,update_add_htlc,amount_msat,u64,",
"msgdata,update_add_htlc,payment_hash,sha256,",
"msgdata,update_add_htlc,cltv_expiry,u32,",
"msgdata,update_add_htlc,onion_routing_packet,byte,1366",
"msgtype,update_fulfill_htlc,130",
"msgdata,update_fulfill_htlc,channel_id,channel_id,",
"msgdata,update_fulfill_htlc,id,u64,",
"msgdata,update_fulfill_htlc,payment_preimage,byte,32",
"msgtype,update_fail_htlc,131",
"msgdata,update_fail_htlc,channel_id,channel_id,",
"msgdata,update_fail_htlc,id,u64,",
"msgdata,update_fail_htlc,len,u16,",
"msgdata,update_fail_htlc,reason,byte,len",
"msgtype,update_fail_malformed_htlc,135",
"msgdata,update_fail_malformed_htlc,channel_id,channel_id,",
"msgdata,update_fail_malformed_htlc,id,u64,",
"msgdata,update_fail_malformed_htlc,sha256_of_onion,sha256,",
"msgdata,update_fail_malformed_htlc,failure_code,u16,",
"msgtype,commitment_signed,132",
"msgdata,commitment_signed,channel_id,channel_id,",
"msgdata,commitment_signed,signature,signature,",
"msgdata,commitment_signed,num_htlcs,u16,",
"msgdata,commitment_signed,htlc_signature,signature,num_htlcs",
"msgtype,revoke_and_ack,133",
"msgdata,revoke_and_ack,channel_id,channel_id,",
"msgdata,revoke_and_ack,per_commitment_secret,byte,32",
"msgdata,revoke_and_ack,next_per_commitment_point,point,",
"msgtype,update_fee,134",
"msgdata,update_fee,channel_id,channel_id,",
"msgdata,update_fee,feerate_per_kw,u32,",
"msgtype,channel_reestablish,136",
"msgdata,channel_reestablish,channel_id,channel_id,",
"msgdata,channel_reestablish,next_commitment_number,u64,",
"msgdata,channel_reestablish,next_revocation_number,u64,",
"msgdata,channel_reestablish,your_last_per_commitment_secret,byte,32",
"msgdata,channel_reestablish,my_current_per_commitment_point,point,",
]
bolt_04_csv = [
"tlvtype,tlv_payload,amt_to_forward,2",
"tlvdata,tlv_payload,amt_to_forward,amt_to_forward,tu64,",
"tlvtype,tlv_payload,outgoing_cltv_value,4",
"tlvdata,tlv_payload,outgoing_cltv_value,outgoing_cltv_value,tu32,",
"tlvtype,tlv_payload,short_channel_id,6",
"tlvdata,tlv_payload,short_channel_id,short_channel_id,short_channel_id,",
"tlvtype,tlv_payload,payment_data,8",
"tlvdata,tlv_payload,payment_data,payment_secret,byte,32",
"tlvdata,tlv_payload,payment_data,total_msat,tu64,",
"msgtype,invalid_realm,PERM|1",
"msgtype,temporary_node_failure,NODE|2",
"msgtype,permanent_node_failure,PERM|NODE|2",
"msgtype,required_node_feature_missing,PERM|NODE|3",
"msgtype,invalid_onion_version,BADONION|PERM|4",
"msgdata,invalid_onion_version,sha256_of_onion,sha256,",
"msgtype,invalid_onion_hmac,BADONION|PERM|5",
"msgdata,invalid_onion_hmac,sha256_of_onion,sha256,",
"msgtype,invalid_onion_key,BADONION|PERM|6",
"msgdata,invalid_onion_key,sha256_of_onion,sha256,",
"msgtype,temporary_channel_failure,UPDATE|7",
"msgdata,temporary_channel_failure,len,u16,",
"msgdata,temporary_channel_failure,channel_update,byte,len",
"msgtype,permanent_channel_failure,PERM|8",
"msgtype,required_channel_feature_missing,PERM|9",
"msgtype,unknown_next_peer,PERM|10",
"msgtype,amount_below_minimum,UPDATE|11",
"msgdata,amount_below_minimum,htlc_msat,u64,",
"msgdata,amount_below_minimum,len,u16,",
"msgdata,amount_below_minimum,channel_update,byte,len",
"msgtype,fee_insufficient,UPDATE|12",
"msgdata,fee_insufficient,htlc_msat,u64,",
"msgdata,fee_insufficient,len,u16,",
"msgdata,fee_insufficient,channel_update,byte,len",
"msgtype,incorrect_cltv_expiry,UPDATE|13",
"msgdata,incorrect_cltv_expiry,cltv_expiry,u32,",
"msgdata,incorrect_cltv_expiry,len,u16,",
"msgdata,incorrect_cltv_expiry,channel_update,byte,len",
"msgtype,expiry_too_soon,UPDATE|14",
"msgdata,expiry_too_soon,len,u16,",
"msgdata,expiry_too_soon,channel_update,byte,len",
"msgtype,incorrect_or_unknown_payment_details,PERM|15",
"msgdata,incorrect_or_unknown_payment_details,htlc_msat,u64,",
"msgdata,incorrect_or_unknown_payment_details,height,u32,",
"msgtype,final_incorrect_cltv_expiry,18",
"msgdata,final_incorrect_cltv_expiry,cltv_expiry,u32,",
"msgtype,final_incorrect_htlc_amount,19",
"msgdata,final_incorrect_htlc_amount,incoming_htlc_amt,u64,",
"msgtype,channel_disabled,UPDATE|20",
"msgtype,expiry_too_far,21",
"msgtype,invalid_onion_payload,PERM|22",
"msgdata,invalid_onion_payload,type,varint,",
"msgdata,invalid_onion_payload,offset,u16,",
"msgtype,mpp_timeout,23",
]
bolt_07_csv = [
"msgtype,announcement_signatures,259",
"msgdata,announcement_signatures,channel_id,channel_id,",
"msgdata,announcement_signatures,short_channel_id,short_channel_id,",
"msgdata,announcement_signatures,node_signature,signature,",
"msgdata,announcement_signatures,bitcoin_signature,signature,",
"msgtype,channel_announcement,256",
"msgdata,channel_announcement,node_signature_1,signature,",
"msgdata,channel_announcement,node_signature_2,signature,",
"msgdata,channel_announcement,bitcoin_signature_1,signature,",
"msgdata,channel_announcement,bitcoin_signature_2,signature,",
"msgdata,channel_announcement,len,u16,",
"msgdata,channel_announcement,features,byte,len",
"msgdata,channel_announcement,chain_hash,chain_hash,",
"msgdata,channel_announcement,short_channel_id,short_channel_id,",
"msgdata,channel_announcement,node_id_1,point,",
"msgdata,channel_announcement,node_id_2,point,",
"msgdata,channel_announcement,bitcoin_key_1,point,",
"msgdata,channel_announcement,bitcoin_key_2,point,",
"msgtype,node_announcement,257",
"msgdata,node_announcement,signature,signature,",
"msgdata,node_announcement,flen,u16,",
"msgdata,node_announcement,features,byte,flen",
"msgdata,node_announcement,timestamp,u32,",
"msgdata,node_announcement,node_id,point,",
"msgdata,node_announcement,rgb_color,byte,3",
"msgdata,node_announcement,alias,byte,32",
"msgdata,node_announcement,addrlen,u16,",
"msgdata,node_announcement,addresses,byte,addrlen",
"msgtype,channel_update,258",
"msgdata,channel_update,signature,signature,",
"msgdata,channel_update,chain_hash,chain_hash,",
"msgdata,channel_update,short_channel_id,short_channel_id,",
"msgdata,channel_update,timestamp,u32,",
"msgdata,channel_update,message_flags,byte,",
"msgdata,channel_update,channel_flags,byte,",
"msgdata,channel_update,cltv_expiry_delta,u16,",
"msgdata,channel_update,htlc_minimum_msat,u64,",
"msgdata,channel_update,fee_base_msat,u32,",
"msgdata,channel_update,fee_proportional_millionths,u32,",
"msgdata,channel_update,htlc_maximum_msat,u64,,option_channel_htlc_max",
"msgtype,query_short_channel_ids,261,gossip_queries",
"msgdata,query_short_channel_ids,chain_hash,chain_hash,",
"msgdata,query_short_channel_ids,len,u16,",
"msgdata,query_short_channel_ids,encoded_short_ids,byte,len",
"msgdata,query_short_channel_ids,tlvs,query_short_channel_ids_tlvs,",
"tlvtype,query_short_channel_ids_tlvs,query_flags,1",
"tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,u8,",
"tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,...",
"msgtype,reply_short_channel_ids_end,262,gossip_queries",
"msgdata,reply_short_channel_ids_end,chain_hash,chain_hash,",
"msgdata,reply_short_channel_ids_end,full_information,byte,",
"msgtype,query_channel_range,263,gossip_queries",
"msgdata,query_channel_range,chain_hash,chain_hash,",
"msgdata,query_channel_range,first_blocknum,u32,",
"msgdata,query_channel_range,number_of_blocks,u32,",
"msgdata,query_channel_range,tlvs,query_channel_range_tlvs,",
"tlvtype,query_channel_range_tlvs,query_option,1",
"tlvdata,query_channel_range_tlvs,query_option,query_option_flags,varint,",
"msgtype,reply_channel_range,264,gossip_queries",
"msgdata,reply_channel_range,chain_hash,chain_hash,",
"msgdata,reply_channel_range,first_blocknum,u32,",
"msgdata,reply_channel_range,number_of_blocks,u32,",
"msgdata,reply_channel_range,full_information,byte,",
"msgdata,reply_channel_range,len,u16,",
"msgdata,reply_channel_range,encoded_short_ids,byte,len",
"msgdata,reply_channel_range,tlvs,reply_channel_range_tlvs,",
"tlvtype,reply_channel_range_tlvs,timestamps_tlv,1",
"tlvdata,reply_channel_range_tlvs,timestamps_tlv,encoding_type,u8,",
"tlvdata,reply_channel_range_tlvs,timestamps_tlv,encoded_timestamps,byte,...",
"tlvtype,reply_channel_range_tlvs,checksums_tlv,3",
"tlvdata,reply_channel_range_tlvs,checksums_tlv,checksums,channel_update_checksums,...",
"subtype,channel_update_timestamps",
"subtypedata,channel_update_timestamps,timestamp_node_id_1,u32,",
"subtypedata,channel_update_timestamps,timestamp_node_id_2,u32,",
"subtype,channel_update_checksums",
"subtypedata,channel_update_checksums,checksum_node_id_1,u32,",
"subtypedata,channel_update_checksums,checksum_node_id_2,u32,",
"msgtype,gossip_timestamp_filter,265,gossip_queries",
"msgdata,gossip_timestamp_filter,chain_hash,chain_hash,",
"msgdata,gossip_timestamp_filter,first_timestamp,u32,",
"msgdata,gossip_timestamp_filter,timestamp_range,u32,",
]

2
contrib/pyln-proto/setup.py

@ -17,7 +17,7 @@ setup(name='pyln-proto',
author='Christian Decker',
author_email='decker.christian@gmail.com',
license='MIT',
packages=['pyln.proto', 'pyln.proto.message', 'pyln.proto.message.bolts'],
packages=['pyln.proto', 'pyln.proto.message', 'pyln.proto.message.bolts', 'pyln.proto.message.bolt1'],
scripts=[],
zip_safe=True,
install_requires=requirements)

46
contrib/pyln-proto/tests/test_bolts.py → contrib/pyln-proto/tests/test_bolt1.py

@ -1,13 +1,10 @@
#! /usr/bin/python3
from pyln.proto.message import Message, MessageNamespace
from pyln.proto.message.bolts import bolt_01_csv, bolt_02_csv, bolt_04_csv, bolt_07_csv
import pyln.proto.message.bolt1 as bolt1
import io
def test_bolt_01_csv_tlv():
ns = MessageNamespace(bolt_01_csv)
n1 = ns.get_tlvtype('n1')
# FIXME: Test failure cases too!
for t in [['0x', ''],
['0x21 00', '33='],
@ -28,15 +25,17 @@ def test_bolt_01_csv_tlv():
['0x02 08 0000000000000226', 'tlv2={scid=0x0x550}'],
['0x03 31 023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb00000000000000010000000000000002', 'tlv3={node_id=023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb,amount_msat_1=1,amount_msat_2=2}'],
['0xfd00fe 02 0226', 'tlv4={cltv_delta=550}']]:
msg = bytes.fromhex(t[0][2:].replace(' ', ''))
msg = io.BytesIO(bytes.fromhex(t[0][2:].replace(' ', '')))
val, size = n1.val_from_bin(msg, None)
assert size == len(msg)
assert n1.val_to_str(val, None) == '{' + t[1] + '}'
val = bolt1.n1.read(msg, None)
assert len(msg.read()) == 0
assert bolt1.n1.val_to_str(val, None) == '{' + t[1] + '}'
def test_bolt_01_csv():
ns = MessageNamespace(bolt_01_csv)
# We can create a namespace from the csv.
ns = MessageNamespace(bolt1.csv)
# string [expected string]
for t in [['init globalfeatures= features=80',
'init globalfeatures= features=80 tlvs={}'],
@ -48,22 +47,15 @@ def test_bolt_01_csv():
['ping num_pong_bytes=3 ignored=0000'],
['pong ignored='],
['pong ignored=000000']]:
m = Message.from_str(ns, t[0])
b = m.to_bin()
m2 = Message.from_bin(ns, b)
assert m2.to_str() == t[-1]
def test_bolt_02_csv():
MessageNamespace(bolt_02_csv)
# FIXME: Add tests.
def test_bolt_04_csv():
MessageNamespace(bolt_04_csv)
# FIXME: Add tests.
m = Message.from_str(bolt1.namespace, t[0])
b = io.BytesIO()
m.write(b)
# Works with our manually-made namespace, and the builtin one.
b.seek(0)
m2 = Message.read(bolt1.namespace, b)
assert m2.to_str() == t[-1]
def test_bolt_07_csv():
MessageNamespace(bolt_07_csv)
# FIXME: Add tests.
b.seek(0)
m2 = Message.read(ns, b)
assert m2.to_str() == t[-1]

8
contrib/pyln-proto/tests/test_bolt2.py

@ -0,0 +1,8 @@
#! /usr/bin/python3
from pyln.proto.message import MessageNamespace
import pyln.proto.message.bolt2 as bolt2
# FIXME: more tests
def test_bolt_02_csv():
MessageNamespace(bolt2.csv)

8
contrib/pyln-proto/tests/test_bolt4.py

@ -0,0 +1,8 @@
#! /usr/bin/python3
from pyln.proto.message import MessageNamespace
import pyln.proto.message.bolt4 as bolt4
# FIXME: more tests
def test_bolt_04_csv():
MessageNamespace(bolt4.csv)

14
contrib/pyln-proto/tests/test_bolt7.py

@ -0,0 +1,14 @@
#! /usr/bin/python3
from pyln.proto.message import MessageNamespace
import pyln.proto.message.bolt7 as bolt7
# FIXME: more tests
def test_bolt_07_csv():
MessageNamespace(bolt7.csv)
def test_bolt_07_subtypes():
for t in ['{timestamp_node_id_1=1,timestamp_node_id_2=2}']:
vals, _ = bolt7.channel_update_timestamps.val_from_str(t)
assert bolt7.channel_update_timestamps.val_to_str(vals, None) == t
Loading…
Cancel
Save