def encode_non_final(amt_to_forward, outgoing_cltv_value, short_channel_id): payload = ( TlvHopPayload.encode_amt_to_forward(amt_to_forward) + TlvHopPayload.encode_outgoing_cltv_value(outgoing_cltv_value) + TlvHopPayload.encode_short_channel_id(short_channel_id)) return BigSize.encode(len(payload)) + payload
def encode_non_final(amt_to_forward, outgoing_cltv_value, short_channel_id, art_no, pixels): unextended = TlvHopPayload.encode_non_final(amt_to_forward, outgoing_cltv_value, short_channel_id) old_len, content, err = BigSize.pop(unextended) assert err is None art_no_content = Extension._encode_art_no(art_no) pixel_content = Extension._encode_pixels(pixels) new_content = content + art_no_content + pixel_content return BigSize.encode(len(new_content)) + new_content
def encode_final(amt_to_forward, outgoing_cltv_value, payment_secret, total_msat, art_no, pixels): unextended = TlvHopPayload.encode_final(amt_to_forward, outgoing_cltv_value, pament_secret=payment_secret, totol_msat=total_msat) old_len, content, err = BigSize.pop(unextended) assert err is None art_no_content = Extension._encode_art_no(art_no) pixel_content = Extension._encode_pixels(pixels) new_content = content + art_no_content + pixel_content return BigSize.encode(len(new_content)) + new_content
def encode_final(amt_to_forward, outgoing_cltv_value, payment_secret=None, total_msat=None): payload = ( TlvHopPayload.encode_amt_to_forward(amt_to_forward) + TlvHopPayload.encode_outgoing_cltv_value(outgoing_cltv_value)) if payment_secret: assert total_msat != None, "payment_secret without total_msat" payload += TlvHopPayload.encode_payment_data( payment_secret, total_msat) return BigSize.encode(len(payload)) + payload
def encode_custom_test(amt_to_forward=None, outgoing_cltv_value=None, short_channel_id=None, payment_data=None): # prepares a payload that may violate some of the BOLT 4 tlv payload # rules payload = b'' if amt_to_forward: payload += TlvHopPayload.encode_amt_to_forward(amt_to_forward) if outgoing_cltv_value: payload += ( TlvHopPayload.encode_outgoing_cltv_value(outgoing_cltv_value)) if short_channel_id: payload += TlvHopPayload.encode_short_channel_id(short_channel_id) if payment_data: payload += (TlvHopPayload.encode_payment_data( payment_data[0], payment_data[1])) return BigSize.encode(len(payload)) + payload
def encode(self): return BigSize.encode(self.t) + BigSize.encode(self.l) + self.v
print("running test cases") for test in BIGSIZE_DECODING_TESTS: #print("test: %s" % test) v, remainder, err = BigSize.pop(h2b(test['bytes'])) #print("%s %s %s %s" % (test['value'], str(v), remainder, err)) if 'exp_error' in test.keys(): assert err is not None, "did not get error as expected" else: assert v == test['value'], "did not get value expected" print("passed test cases") print("running small") TEST_ITERATIONS = 10000 for _ in range(TEST_ITERATIONS): v = random.randint(0, 0xfc) encoded = BigSize.encode(v) decoded, remainder, err = BigSize.pop(encoded) assert err is None, "unexpected error" assert len(remainder) == 0, "unexpected remainder" assert decoded == v, "got wrong value" print("passed small") print("running medium") for _ in range(TEST_ITERATIONS): v = random.randint(0, 0x1000) encoded = BigSize.encode(v) decoded, remainder, err = BigSize.pop(encoded) assert err is None, "unexpected error" assert len(remainder) == 0, "unexpected remainder" assert decoded == v, "got wrong value" print("passed medium")