URI: 
       ttest_lnutil.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       ttest_lnutil.py (54929B)
       ---
            1 import unittest
            2 import json
            3 
            4 from electrum import bitcoin
            5 from electrum.json_db import StoredDict
            6 from electrum.lnutil import (RevocationStore, get_per_commitment_secret_from_seed, make_offered_htlc,
            7                              make_received_htlc, make_commitment, make_htlc_tx_witness, make_htlc_tx_output,
            8                              make_htlc_tx_inputs, secret_to_pubkey, derive_blinded_pubkey, derive_privkey,
            9                              derive_pubkey, make_htlc_tx, extract_ctn_from_tx, UnableToDeriveSecret,
           10                              get_compressed_pubkey_from_bech32, split_host_port, ConnStringFormatError,
           11                              ScriptHtlc, extract_nodeid, calc_fees_for_commitment_tx, UpdateAddHtlc, LnFeatures,
           12                              ln_compare_features, IncompatibleLightningFeatures)
           13 from electrum.util import bh2u, bfh, MyEncoder
           14 from electrum.transaction import Transaction, PartialTransaction
           15 from electrum.lnworker import LNWallet
           16 
           17 from . import ElectrumTestCase
           18 
           19 
           20 funding_tx_id = '8984484a580b825b9972d7adb15050b3ab624ccd731946b3eeddb92f4e7ef6be'
           21 funding_output_index = 0
           22 funding_amount_satoshi = 10000000
           23 commitment_number = 42
           24 local_delay = 144
           25 local_dust_limit_satoshi = 546
           26 
           27 local_payment_basepoint = bytes.fromhex('034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa')
           28 remote_payment_basepoint = bytes.fromhex('032c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991')
           29 # obs = get_obscured_ctn(42, local_payment_basepoint, remote_payment_basepoint)
           30 local_funding_privkey = bytes.fromhex('30ff4956bbdd3222d44cc5e8a1261dab1e07957bdac5ae88fe3261ef321f374901')
           31 local_funding_pubkey = bytes.fromhex('023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb')
           32 remote_funding_pubkey = bytes.fromhex('030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c1')
           33 local_privkey = bytes.fromhex('bb13b121cdc357cd2e608b0aea294afca36e2b34cf958e2e6451a2f27469449101')
           34 localpubkey = bytes.fromhex('030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e7')
           35 remotepubkey = bytes.fromhex('0394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b')
           36 local_delayedpubkey = bytes.fromhex('03fd5960528dc152014952efdb702a88f71e3c1653b2314431701ec77e57fde83c')
           37 local_revocation_pubkey = bytes.fromhex('0212a140cd0c6539d07cd08dfe09984dec3251ea808b892efeac3ede9402bf2b19')
           38 # funding wscript = 5221023da092f6980e58d2c037173180e9a465476026ee50f96695963e8efe436f54eb21030e9f7b623d2ccc7c9bd44d66d5ce21ce504c0acf6385a132cec6d3c39fa711c152ae
           39 
           40 
           41 class TestLNUtil(ElectrumTestCase):
           42     def test_shachain_store(self):
           43         tests = [
           44             {
           45                 "name": "insert_secret correct sequence",
           46                 "inserts": [
           47                     {
           48                         "index": 281474976710655,
           49                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
           50                             "e6e8db3be6854c475621e007a5dc",
           51                         "successful": True
           52                     },
           53                     {
           54                         "index": 281474976710654,
           55                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1" +\
           56                             "a8b4b5bec0c4b872abeba4cb8964",
           57                         "successful": True
           58                     },
           59                     {
           60                         "index": 281474976710653,
           61                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
           62                             "cbf9cd7c043a7d6456b7fc275ad8",
           63                         "successful": True
           64                     },
           65                     {
           66                         "index": 281474976710652,
           67                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab2" +\
           68                             "1e9b506fd4998a51d54502e99116",
           69                         "successful": True
           70                     },
           71                     {
           72                         "index": 281474976710651,
           73                         "secret": "c65716add7aa98ba7acb236352d665cab173" +\
           74                             "45fe45b55fb879ff80e6bd0c41dd",
           75                         "successful": True
           76                     },
           77                     {
           78                         "index": 281474976710650,
           79                         "secret": "969660042a28f32d9be17344e09374b37996" +\
           80                             "2d03db1574df5a8a5a47e19ce3f2",
           81                         "successful": True
           82                     },
           83                     {
           84                         "index": 281474976710649,
           85                         "secret": "a5a64476122ca0925fb344bdc1854c1c0a59" +\
           86                             "fc614298e50a33e331980a220f32",
           87                         "successful": True
           88                     },
           89                     {
           90                         "index": 281474976710648,
           91                         "secret": "05cde6323d949933f7f7b78776bcc1ea6d9b" +\
           92                             "31447732e3802e1f7ac44b650e17",
           93                         "successful": True
           94                     }
           95                 ]
           96             },
           97             {
           98                 "name": "insert_secret #1 incorrect",
           99                 "inserts": [
          100                     {
          101                         "index": 281474976710655,
          102                         "secret": "02a40c85b6f28da08dfdbe0926c53fab2d" +\
          103                             "e6d28c10301f8f7c4073d5e42e3148",
          104                         "successful": True
          105                     },
          106                     {
          107                         "index": 281474976710654,
          108                         "secret": "c7518c8ae4660ed02894df8976fa1a3659" +\
          109                             "c1a8b4b5bec0c4b872abeba4cb8964",
          110                         "successful": False
          111                     }
          112                 ]
          113             },
          114             {
          115                 "name": "insert_secret #2 incorrect (#1 derived from incorrect)",
          116                 "inserts": [
          117                     {
          118                         "index": 281474976710655,
          119                         "secret": "02a40c85b6f28da08dfdbe0926c53fab2de6" +\
          120                             "d28c10301f8f7c4073d5e42e3148",
          121                         "successful": True
          122                     },
          123                     {
          124                         "index": 281474976710654,
          125                         "secret": "dddc3a8d14fddf2b68fa8c7fbad274827493" +\
          126                             "7479dd0f8930d5ebb4ab6bd866a3",
          127                         "successful": True
          128                     },
          129                     {
          130                         "index": 281474976710653,
          131                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
          132                             "cbf9cd7c043a7d6456b7fc275ad8",
          133                         "successful": True
          134                     },
          135                     {
          136                         "index": 281474976710652,
          137                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22a" +\
          138                             "b21e9b506fd4998a51d54502e99116",
          139                         "successful": False
          140                     }
          141                 ]
          142             },
          143             {
          144                 "name": "insert_secret #3 incorrect",
          145                 "inserts": [
          146                     {
          147                         "index": 281474976710655,
          148                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
          149                             "e6e8db3be6854c475621e007a5dc",
          150                         "successful": True
          151                     },
          152                     {
          153                         "index": 281474976710654,
          154                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1" +\
          155                             "a8b4b5bec0c4b872abeba4cb8964",
          156                         "successful": True
          157                     },
          158                     {
          159                         "index": 281474976710653,
          160                         "secret": "c51a18b13e8527e579ec56365482c62f180b" +\
          161                             "7d5760b46e9477dae59e87ed423a",
          162                         "successful": True
          163                     },
          164                     {
          165                         "index": 281474976710652,
          166                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab2" +\
          167                             "1e9b506fd4998a51d54502e99116",
          168                         "successful": False
          169                     }
          170                 ]
          171             },
          172             {
          173                 "name": "insert_secret #4 incorrect (1,2,3 derived from incorrect)",
          174                 "inserts": [
          175                     {
          176                         "index": 281474976710655,
          177                         "secret": "02a40c85b6f28da08dfdbe0926c53fab2de6" +\
          178                             "d28c10301f8f7c4073d5e42e3148",
          179                         "successful": True
          180                     },
          181                     {
          182                         "index": 281474976710654,
          183                         "secret": "dddc3a8d14fddf2b68fa8c7fbad274827493" +\
          184                             "7479dd0f8930d5ebb4ab6bd866a3",
          185                         "successful": True
          186                     },
          187                     {
          188                         "index": 281474976710653,
          189                         "secret": "c51a18b13e8527e579ec56365482c62f18" +\
          190                             "0b7d5760b46e9477dae59e87ed423a",
          191                         "successful": True
          192                     },
          193                     {
          194                         "index": 281474976710652,
          195                         "secret": "ba65d7b0ef55a3ba300d4e87af29868f39" +\
          196                             "4f8f138d78a7011669c79b37b936f4",
          197                         "successful": True
          198                     },
          199                     {
          200                         "index": 281474976710651,
          201                         "secret": "c65716add7aa98ba7acb236352d665cab1" +\
          202                             "7345fe45b55fb879ff80e6bd0c41dd",
          203                         "successful": True
          204                     },
          205                     {
          206                         "index": 281474976710650,
          207                         "secret": "969660042a28f32d9be17344e09374b379" +\
          208                             "962d03db1574df5a8a5a47e19ce3f2",
          209                         "successful": True
          210                     },
          211                     {
          212                         "index": 281474976710649,
          213                         "secret": "a5a64476122ca0925fb344bdc1854c1c0a" +\
          214                             "59fc614298e50a33e331980a220f32",
          215                         "successful": True
          216                     },
          217                     {
          218                         "index": 281474976710649,
          219                         "secret": "05cde6323d949933f7f7b78776bcc1ea6d9b" +\
          220                             "31447732e3802e1f7ac44b650e17",
          221                         "successful": False
          222                     }
          223                 ]
          224             },
          225             {
          226                 "name": "insert_secret #5 incorrect",
          227                 "inserts": [
          228                     {
          229                         "index": 281474976710655,
          230                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
          231                             "e6e8db3be6854c475621e007a5dc",
          232                         "successful": True
          233                     },
          234                     {
          235                         "index": 281474976710654,
          236                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1a" +\
          237                             "8b4b5bec0c4b872abeba4cb8964",
          238                         "successful": True
          239                     },
          240                     {
          241                         "index": 281474976710653,
          242                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
          243                             "cbf9cd7c043a7d6456b7fc275ad8",
          244                         "successful": True
          245                     },
          246                     {
          247                         "index": 281474976710652,
          248                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab21" +\
          249                             "e9b506fd4998a51d54502e99116",
          250                         "successful": True
          251                     },
          252                     {
          253                         "index": 281474976710651,
          254                         "secret": "631373ad5f9ef654bb3dade742d09504c567" +\
          255                             "edd24320d2fcd68e3cc47e2ff6a6",
          256                         "successful": True
          257                     },
          258                     {
          259                         "index": 281474976710650,
          260                         "secret": "969660042a28f32d9be17344e09374b37996" +\
          261                             "2d03db1574df5a8a5a47e19ce3f2",
          262                         "successful": False
          263                     }
          264                 ]
          265             },
          266             {
          267                 "name": "insert_secret #6 incorrect (5 derived from incorrect)",
          268                 "inserts": [
          269                     {
          270                         "index": 281474976710655,
          271                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
          272                             "e6e8db3be6854c475621e007a5dc",
          273                         "successful": True
          274                     },
          275                     {
          276                         "index": 281474976710654,
          277                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1a" +\
          278                             "8b4b5bec0c4b872abeba4cb8964",
          279                         "successful": True
          280                     },
          281                     {
          282                         "index": 281474976710653,
          283                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
          284                             "cbf9cd7c043a7d6456b7fc275ad8",
          285                         "successful": True
          286                     },
          287                     {
          288                         "index": 281474976710652,
          289                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab21" +\
          290                             "e9b506fd4998a51d54502e99116",
          291                         "successful": True
          292                     },
          293                     {
          294                         "index": 281474976710651,
          295                         "secret": "631373ad5f9ef654bb3dade742d09504c567" +\
          296                             "edd24320d2fcd68e3cc47e2ff6a6",
          297                         "successful": True
          298                     },
          299                     {
          300                         "index": 281474976710650,
          301                         "secret": "b7e76a83668bde38b373970155c868a65330" +\
          302                             "4308f9896692f904a23731224bb1",
          303                         "successful": True
          304                     },
          305                     {
          306                         "index": 281474976710649,
          307                         "secret": "a5a64476122ca0925fb344bdc1854c1c0a59f" +\
          308                             "c614298e50a33e331980a220f32",
          309                         "successful": True
          310                     },
          311                     {
          312                         "index": 281474976710648,
          313                         "secret": "05cde6323d949933f7f7b78776bcc1ea6d9b" +\
          314                             "31447732e3802e1f7ac44b650e17",
          315                         "successful": False
          316                     }
          317                 ]
          318             },
          319             {
          320                 "name": "insert_secret #7 incorrect",
          321                 "inserts": [
          322                     {
          323                         "index": 281474976710655,
          324                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
          325                             "e6e8db3be6854c475621e007a5dc",
          326                         "successful": True
          327                     },
          328                     {
          329                         "index": 281474976710654,
          330                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1a" +\
          331                             "8b4b5bec0c4b872abeba4cb8964",
          332                         "successful": True
          333                     },
          334                     {
          335                         "index": 281474976710653,
          336                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
          337                             "cbf9cd7c043a7d6456b7fc275ad8",
          338                         "successful": True
          339                     },
          340                     {
          341                         "index": 281474976710652,
          342                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab21" +\
          343                             "e9b506fd4998a51d54502e99116",
          344                         "successful": True
          345                     },
          346                     {
          347                         "index": 281474976710651,
          348                         "secret": "c65716add7aa98ba7acb236352d665cab173" +\
          349                             "45fe45b55fb879ff80e6bd0c41dd",
          350                         "successful": True
          351                     },
          352                     {
          353                         "index": 281474976710650,
          354                         "secret": "969660042a28f32d9be17344e09374b37996" +\
          355                             "2d03db1574df5a8a5a47e19ce3f2",
          356                         "successful": True
          357                     },
          358                     {
          359                         "index": 281474976710649,
          360                         "secret": "e7971de736e01da8ed58b94c2fc216cb1d" +\
          361                             "ca9e326f3a96e7194fe8ea8af6c0a3",
          362                         "successful": True
          363                     },
          364                     {
          365                         "index": 281474976710648,
          366                         "secret": "05cde6323d949933f7f7b78776bcc1ea6d" +\
          367                             "9b31447732e3802e1f7ac44b650e17",
          368                         "successful": False
          369                     }
          370                 ]
          371             },
          372             {
          373                 "name": "insert_secret #8 incorrect",
          374                 "inserts": [
          375                     {
          376                         "index": 281474976710655,
          377                         "secret": "7cc854b54e3e0dcdb010d7a3fee464a9687b" +\
          378                             "e6e8db3be6854c475621e007a5dc",
          379                         "successful": True
          380                     },
          381                     {
          382                         "index": 281474976710654,
          383                         "secret": "c7518c8ae4660ed02894df8976fa1a3659c1a" +\
          384                             "8b4b5bec0c4b872abeba4cb8964",
          385                         "successful": True
          386                     },
          387                     {
          388                         "index": 281474976710653,
          389                         "secret": "2273e227a5b7449b6e70f1fb4652864038b1" +\
          390                             "cbf9cd7c043a7d6456b7fc275ad8",
          391                         "successful": True
          392                     },
          393                     {
          394                         "index": 281474976710652,
          395                         "secret": "27cddaa5624534cb6cb9d7da077cf2b22ab21" +\
          396                             "e9b506fd4998a51d54502e99116",
          397                         "successful": True
          398                     },
          399                     {
          400                         "index": 281474976710651,
          401                         "secret": "c65716add7aa98ba7acb236352d665cab173" +\
          402                             "45fe45b55fb879ff80e6bd0c41dd",
          403                         "successful": True
          404                     },
          405                     {
          406                         "index": 281474976710650,
          407                         "secret": "969660042a28f32d9be17344e09374b37996" +\
          408                             "2d03db1574df5a8a5a47e19ce3f2",
          409                         "successful": True
          410                     },
          411                     {
          412                         "index": 281474976710649,
          413                         "secret": "a5a64476122ca0925fb344bdc1854c1c0a" +\
          414                             "59fc614298e50a33e331980a220f32",
          415                         "successful": True
          416                     },
          417                     {
          418                         "index": 281474976710648,
          419                         "secret": "a7efbc61aac46d34f77778bac22c8a20c6" +\
          420                             "a46ca460addc49009bda875ec88fa4",
          421                         "successful": False
          422                     }
          423                 ]
          424             }
          425         ]
          426 
          427         for test in tests:
          428             receiver = RevocationStore(StoredDict({}, None, []))
          429             for insert in test["inserts"]:
          430                 secret = bytes.fromhex(insert["secret"])
          431 
          432                 try:
          433                     receiver.add_next_entry(secret)
          434                 except Exception as e:
          435                     if insert["successful"]:
          436                         raise Exception("Failed ({}): error was received but it shouldn't: {}".format(test["name"], e))
          437                 else:
          438                     if not insert["successful"]:
          439                         raise Exception("Failed ({}): error wasn't received".format(test["name"]))
          440 
          441             for insert in test["inserts"]:
          442                 secret = bytes.fromhex(insert["secret"])
          443                 index = insert["index"]
          444                 if insert["successful"]:
          445                     self.assertEqual(secret, receiver.retrieve_secret(index))
          446 
          447             print("Passed ({})".format(test["name"]))
          448 
          449     def test_shachain_produce_consume(self):
          450         seed = bitcoin.sha256(b"shachaintest")
          451         consumer = RevocationStore(StoredDict({}, None, []))
          452         for i in range(10000):
          453             secret = get_per_commitment_secret_from_seed(seed, RevocationStore.START_INDEX - i)
          454             try:
          455                 consumer.add_next_entry(secret)
          456             except Exception as e:
          457                 raise Exception("iteration " + str(i) + ": " + str(e))
          458             if i % 1000 == 0:
          459                 c1 = consumer
          460                 s1 = json.dumps(c1.storage, cls=MyEncoder)
          461                 c2 = RevocationStore(StoredDict(json.loads(s1), None, []))
          462                 s2 = json.dumps(c2.storage, cls=MyEncoder)
          463                 self.assertEqual(s1, s2)
          464 
          465     def test_commitment_tx_with_all_five_HTLCs_untrimmed_minimum_feerate(self):
          466         to_local_msat = 6988000000
          467         to_remote_msat = 3000000000
          468         local_feerate_per_kw = 0
          469         # base commitment transaction fee = 0
          470         # actual commitment transaction fee = 0
          471 
          472         per_commitment_secret = 0x1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100
          473         per_commitment_point = secret_to_pubkey(per_commitment_secret)
          474 
          475         remote_htlcpubkey = remotepubkey
          476         local_htlcpubkey = localpubkey
          477 
          478         htlc_cltv_timeout = {}
          479         htlc_payment_preimage = {}
          480         htlc = {}
          481 
          482         htlc_cltv_timeout[2] = 502
          483         htlc_payment_preimage[2] = b"\x02" * 32
          484         htlc[2] = make_offered_htlc(local_revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, bitcoin.sha256(htlc_payment_preimage[2]))
          485 
          486         htlc_cltv_timeout[3] = 503
          487         htlc_payment_preimage[3] = b"\x03" * 32
          488         htlc[3] = make_offered_htlc(local_revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, bitcoin.sha256(htlc_payment_preimage[3]))
          489 
          490         htlc_cltv_timeout[0] = 500
          491         htlc_payment_preimage[0] = b"\x00" * 32
          492         htlc[0] = make_received_htlc(local_revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, bitcoin.sha256(htlc_payment_preimage[0]), htlc_cltv_timeout[0])
          493 
          494         htlc_cltv_timeout[1] = 501
          495         htlc_payment_preimage[1] = b"\x01" * 32
          496         htlc[1] = make_received_htlc(local_revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, bitcoin.sha256(htlc_payment_preimage[1]), htlc_cltv_timeout[1])
          497 
          498         htlc_cltv_timeout[4] = 504
          499         htlc_payment_preimage[4] = b"\x04" * 32
          500         htlc[4] = make_received_htlc(local_revocation_pubkey, remote_htlcpubkey, local_htlcpubkey, bitcoin.sha256(htlc_payment_preimage[4]), htlc_cltv_timeout[4])
          501 
          502         remote_signature = "304402204fd4928835db1ccdfc40f5c78ce9bd65249b16348df81f0c44328dcdefc97d630220194d3869c38bc732dd87d13d2958015e2fc16829e74cd4377f84d215c0b70606"
parazyd.org:70 /git/electrum/file/electrum/tests/test_lnutil.py.gph:512: line too long