From 6f572cddde5ca60d293f22110711717754b92947 Mon Sep 17 00:00:00 2001 From: MMGen Date: Tue, 6 Mar 2018 07:28:41 +0000 Subject: [PATCH] Bech32: additional tests --- mmgen/protocol.py | 1 + mmgen/tool.py | 6 +- scripts/test-release.sh | 1 + test/gentest.py | 1 + test/ref/btcwallet-bech32.dump | 109 +++++++++++++++++++++++++++++++++ test/test.py | 6 +- test/tooltest.py | 85 +++++++++++++++---------- 7 files changed, 173 insertions(+), 36 deletions(-) create mode 100644 test/ref/btcwallet-bech32.dump diff --git a/mmgen/protocol.py b/mmgen/protocol.py index daa64ec6..2d052e5e 100755 --- a/mmgen/protocol.py +++ b/mmgen/protocol.py @@ -252,6 +252,7 @@ class LitecoinProtocol(BitcoinProtocol): else os.path.join(g.home_dir,'.litecoin') addr_ver_num = { 'p2pkh': ('30','L'), 'p2sh': ('32','M'), 'p2sh2': ('05','3') } # 'p2sh' is new fmt wif_ver_num = { 'std': 'b0' } + mmtypes = ('L','C','S') secs_per_block = 150 rpc_port = 9332 coin_amt = LTCAmt diff --git a/mmgen/tool.py b/mmgen/tool.py index a6b3caac..83215349 100755 --- a/mmgen/tool.py +++ b/mmgen/tool.py @@ -273,7 +273,11 @@ def Wif2segwit_pair(wif): Msg('{}\n{}'.format(rs,addr)) def Pubhash2addr(pubhash): - Msg(g.proto.pubhash2addr(pubhash,at.addr_fmt=='p2sh')) + if opt.type == 'bech32': + ret = g.proto.pubhash2bech32addr(pubhash) + else: + ret = g.proto.pubhash2addr(pubhash,at.addr_fmt=='p2sh') + Msg(ret) def Addr2hexaddr(addr): Msg(g.proto.verify_addr(addr,CoinAddr.hex_width,return_dict=True)['hex']) def Hash160(pubkeyhex): Msg(hash160(pubkeyhex)) diff --git a/scripts/test-release.sh b/scripts/test-release.sh index eac6290d..73ab9a02 100755 --- a/scripts/test-release.sh +++ b/scripts/test-release.sh @@ -311,6 +311,7 @@ i_gen='Gentest' s_gen="The following tests will run '$gentest_py' on mainnet and testnet for all supported coins" t_gen=( "$gentest_py -q 2 $REFDIR/btcwallet.dump" + "$gentest_py -q --type=bech32 2 $REFDIR/btcwallet-bech32.dump" "$gentest_py -q 1:2 $gen_rounds" "$gentest_py -q --type=segwit 1:2 $gen_rounds" "$gentest_py -q --type=bech32 1:2 $gen_rounds" diff --git a/test/gentest.py b/test/gentest.py index ff6fb401..a170caf6 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -224,6 +224,7 @@ def dump_test(): except: die(2,'\nInvalid {}net WIF address in dump file: {}'.format(('main','test')[g.testnet],wif)) b_addr = ag.to_addr(kg_a.to_pubhex(sec)) + vmsg('\nwif: {}\naddr: {}\n'.format(wif,b_addr)) if a_addr != b_addr: match_error(sec,wif,a_addr,b_addr,3,a) qmsg(green(('\n','')[bool(opt.verbose)] + 'OK')) diff --git a/test/ref/btcwallet-bech32.dump b/test/ref/btcwallet-bech32.dump new file mode 100644 index 00000000..c415ef20 --- /dev/null +++ b/test/ref/btcwallet-bech32.dump @@ -0,0 +1,109 @@ +# Wallet dump created by Bitcoin v0.16.0 +# * Created on 2018-03-05T17:00:47Z +# * Best block at time of backup was 0 (000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f), +# mined on 2009-01-03T18:15:05Z + +# extended private masterkey: xprv9s21ZrQH143K2E1vJ8UzCcQc3nn7ACSCKvVn1eMFagn5bcpi5rQsAdNHzsoek1NDj5mzv6bLJQTV1uCFbJVEwhsyrhy25qg42JQBXg3Z7Dw + +KyWTCn5B7FzwD9xkFuVit5zjK2gT65nqBhqtZFttRSG3x3WEnGUM 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqp3gqvmdcnpk3zqmsqs7jrgt50w2d6u67hznvn hdkeypath=m/0'/0'/888' +L1sBX4pyZRj2mMYkHGVSrY4AZdX6cdaB7PJxcMWjgZpo6aWwLs16 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqrgrczafwmxjqtwwkg6xd45ha0qs43dgv2c7w8 hdkeypath=m/0'/0'/319' +L21i1EB3nT49w25YFBphAeV1WohgbUwKgqpxG2Mcqhs7hW8r3QDM 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqykw28cwsagekcpp5wm34mkuavz3yeh39cl3ld hdkeypath=m/0'/0'/545' +KwHuXwJgdj9eSCBgtMeQFchwD1eZyjt2aVSn31HAXQyS9rGuN2sN 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq9r8j26vyug495cw4mjek3v37cjqnvvezg3lnr hdkeypath=m/0'/0'/675' +L2q9rcJYdWetw7WkTD5xP9oh9iqDbeMevdw1w85z143TWu9V1HBq 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqxk25mad5zue8r0r9h6h9ahg5h60rg8h3qkr60 hdkeypath=m/0'/0'/694' +Kx1BK1hoDvr2ypqz92wpZCXz6WG6dQyuHhQoAh9eMsdvRJyDyfmN 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq84lq3kdrkx0m3lmtvsaw34uyg9xkr259y8tgw hdkeypath=m/0'/0'/328' +Kyr4BZBPTNqc4xmZ8GCaZB4SarDJCdiZNUCYbZT9yEsrfe18ZyKQ 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqg7z8uzgtw9z0d5f4hd5zfcc2kh3kwqr0gg9kf hdkeypath=m/0'/0'/535' +L4At7umzDG6uCRhEugMMQbQy1fKGEvfbpy9bdhUzwRpmQHfAXTPf 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqfz4etlf6tjhxs9za7e47wlg2yjcv4dkke60yn hdkeypath=m/0'/1'/127' +KzoZHRnz5Pzd4ASyAN266kWEZsFH3TLJVoTZrSnSVaJTDr7eqQ4u 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq20hlnuhrvu5r6an0p3sd7my44hnxadvymw3u3 hdkeypath=m/0'/0'/313' +L1NpMJWUtVtNBBdw6wDxGHBUCBcm9WyqH3nMEJ7frMz8Z7AvNvTy 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqvemejtcxfypasga8na722mw5zrh0ej8vslq0u hdkeypath=m/0'/0'/823' +KwpW4hP1yPkQGwwKw3KENarLRcWKxV5z3cvXrtPAUvBaX1CADJu1 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqwtg2e8hw5ez2gfmtkp5k0vvsd2636nezgd7cz hdkeypath=m/0'/0'/511' +KzXyoZV7hMg79dTMsFPDs55W59ZfyCdGop3Hdov8h6U1mkeDVehJ 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqw0xlhaafj4qhq28zqz8kzy4h0r3g8xmeljdt3 hdkeypath=m/0'/0'/791' +L3z6oA4g8LjeZohM5C2bWymVQn3Ur38y1cecD8aDdUnh1Rt79w4b 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqwmh7zzz95j9hwtxas3gtfuj6lh4q084sfrrm6 hdkeypath=m/0'/1'/25' +L2CkEPfXQxKiKuLdBD9cW6FEGM3hFJV19VTZ5SmPD4HJfuudaryb 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqswte344gun53ggt3dmstuxl6pph67el33eqvv hdkeypath=m/0'/0'/666' +L1ZzVyfoPg8TTrRiqF42pqJUYVTYJMCxVCgbGu1csoZxGrLhGpzS 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq3tckl70j3pf9lwhyzex0c76x4x979kma6dzmh hdkeypath=m/0'/0'/766' +KwHgnn61SaNjbvnvBo71R8szs2C9sGytXevHmfzfy5PDs36iAiRs 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqj885hxk75cwvzc5ddmmtu38d7e6jmk00pkxcd hdkeypath=m/0'/0'/794' +L4gHTef1ADBqjUyP9YxJcYNXahHSS5XV5tCmKcsBHLNeJru13TGj 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqj53s7ltrqk0xqnv82656lsahukr8sez08p0n2 hdkeypath=m/0'/0'/59' +L3eZiBUbLKyf8kdguH99Eum5pjLhZgtgCWX75CMs39ErB4jNe7DM 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqnyg93da3pd75zlnk02sv9fz0wrvhc5ft5rghn hdkeypath=m/0'/0'/909' +L5PWQ7kXy34EBJSaXDsoE5DLchgtriiGstpY4obUsb3ySqRkf1Ln 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqngry3p2d6v0g2z0nyzu807lg9rmsp58kd69fc hdkeypath=m/0'/0'/0' +L34HTqbJcQxE1a4tWxzrahNyuntfc4ov4JgFeUBmcvyP2uKHs8BS 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq4puyc8kth0vj5pka93t4gw5lcjtnyzu82qlsu hdkeypath=m/0'/0'/590' +L2vmEeAAue1bTG4ndKYUMDa4ZDMHStZa64TqUyX6dPP2egc7YWEf 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq4wrre3g8gle8wl26j024a79xj870fua8xmm0g hdkeypath=m/0'/0'/215' +L5LCjVd5DiWbbXNzBSnC7Tvw6D2XgcMc2yVTJZL7hyP1SHE3THoA 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq46axh96hcwmk0jqv0c3yzjk27z4qxw9qnhd59 hdkeypath=m/0'/1'/123' +KyvN52EN727SJD1EvrY5aXzswg7W3KytrFXjqzGAuvNzrNYtKeYu 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqhrc49asjczyrduzpmz5net90pq75gt9pv6faa hdkeypath=m/0'/0'/843' +L5b8R2MrDgiBeHh5B5XPhexArARa8YCmyNh7nuZdX2LJRrKBqrW7 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqhyvyjkrlkck4gjgjvwjafs30y88muwxxlww79 hdkeypath=m/0'/0'/988' +L1zBancKMMMccRqadcowbS53CjG6rT5eqaWVHfrUf4Z75H7YjbUc 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqh224zthptx8r5wzhurjartvxs5ewd4hm3dmrh hdkeypath=m/0'/0'/923' +Kz2Eqz4qQM8nAVNBXVXvNf8UMVJL2A9GRSeyNy5QU9UHW28W9C4r 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqe4x09flnqvz4p8nvkv3eeq3u5kh76h7jq4ehe hdkeypath=m/0'/1'/109' +L3EMCL9RspToyDoc98qsykXo8wyCE3b6iZfQVUieaY8onCxMghUz 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqmx2hgr8jad62w8z7xyc0rnu7c6nvf59npmh73 hdkeypath=m/0'/0'/946' +L3tygoS8c88aFZeqqkkwDeHw6RJMcSS4fs5HUdDV96agSdtb9zi1 2018-03-05T16:59:40Z reserve=1 # addr=bc1qquyawrpvsva6e5ftx0w602gs9hqg8nwjxky5at hdkeypath=m/0'/0'/832' +L3jHg3ekpkRN6cGV8Wyu6jq961uKWnByzwd8wghHJ3JiUoL9KTvA 2018-03-05T16:59:40Z reserve=1 # addr=bc1qquu5zdngf5ujfmgh9fy0px3pz5t6hew20xylty hdkeypath=m/0'/0'/154' +L2jVuc6fWHsUo9S2PYEp6TkkcSMzYFmMTXLBthL3651uHpadV8tM 2018-03-05T16:59:40Z reserve=1 # addr=bc1qqagf53n9z2c5qdk2tfzuhpax5ppfaywwcvh48u hdkeypath=m/0'/0'/427' +KxkJWD7cNWAq6aPi7YvmSRBveFoxR44m4imCUYTnJQ4yuA93qgVi 2018-03-05T16:59:40Z reserve=1 # addr=bc1qq76jcducsrg2hqgufrkn06mg55wvzxw22cqhpj hdkeypath=m/0'/0'/570' +L4jgcwxj1s1RRXf3UPtsH8uNK3zWLyLad8YNQQCakH5Pv2RsRMYY 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpqtzpvptfuz0045t24h8tcfzkan6wc62ar2vjf hdkeypath=m/0'/0'/285' +KxE124suFFaYa11NajqC3oRYAgboGE35DaqE5UtMNYdQcbBGdasV 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpqjah85k56z8545z3uakpfv7ergpx4239z262n hdkeypath=m/0'/0'/753' +L2dwSX8zoQbNYJGjADEhfFowAiYMso1SzUQZ3FTMdZeBW6FoxG5d 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpz3vy576zwp4aqmccw2fl2wwhyu6rz05elryjx hdkeypath=m/0'/0'/56' +L4GiN5EvuFPh9yAKV8JDX8BPUBbWtXoD49psbnekmhHtTJtea63L 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpze532kez0g3j4n8s5ayu4juvl8qn5pg6ewm6l hdkeypath=m/0'/1'/43' +KxRRL1mYse1ySJNAHDR16sNrKAQzWrdE2K2qQqFKnKddWa7YS9Vs 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpz6wf2z902esruqtgz5lz944ncl0qg9dlqlzqp hdkeypath=m/0'/0'/767' +KxvDTY6xQ18K3ZGq4RBAy66DCr3n7Bk9QC6iXfvL2M1hR6e53W5R 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpzah2g3e53udpfr2hechf99r362dt3lj9v94dq hdkeypath=m/0'/0'/684' +L1Qf1XCwQgfGN13pssuM3j9Ds7ePyLFjZ35kbK9BsLVZsH9B6apo 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpr46nsmjsukvrmyfrfdwc2gz7zanzy4yrv6ygl hdkeypath=m/0'/1'/84' +KyCUMn3QE61oe6cetw6zTJbK52BGnnPBm3SNJ2xNn9HB6UYKrjAE 2018-03-05T16:59:40Z reserve=1 # addr=bc1qprldy94rsz4ufpqvs3x06lzpfcyl59wddmwclf hdkeypath=m/0'/0'/959' +KxwoViXXjjumNtRZLRfUqpUadiqz54dPjMP1xegqorrPcXeD1Fz8 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp93lx8ewuzk9nygxqkqvyjpe0gt9mz9ea7jqsk hdkeypath=m/0'/0'/408' +Kwm8czowx4GEP9NyKG3WnkER8BuETJU51duN46E5xAQjpz2ixRrU 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp8naexmqq9ryj90sjtnneqgdesm3lp50fjjmv5 hdkeypath=m/0'/0'/914' +L592QXSDgkaKe7pxvDFKkPXbBCiwvxTkyQn6aufKyqW4WU851Ntr 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpfda87xjh073adw305eqjt39xkysr26459mhd5 hdkeypath=m/0'/0'/620' +L1uXXZC5SrsweJVDdFu48R8rQpp9dmjj76jtVC9e8Mnohti1XBzG 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpfk6cguq3mzcv7gzxhd844tr0tk9x27vuswxv7 hdkeypath=m/0'/0'/401' +L59F1RwSTxRbyp5cd3Pvog2XoYmNUhQi7eAijRkhMZBmdgNu2BB1 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp2fv5gyz0f0rjtuq68ktvqx6wj7tzpr3azxu58 hdkeypath=m/0'/0'/262' +L5NaLRQ9atywqUjkuFqajV468tytZKPqK2yAb5hzRiPJN5TBjhXg 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpdvklpsmtcyslz9srnu5zxge92wd9tz0fz45q9 hdkeypath=m/0'/0'/90' +L2zcJjPSPNQD9NLXHrRJ6mSmBAU4AUN9CBotdsYZfwoFWhqFXm8w 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpwzp5y73dl823txuj6kzjxfufqx67xuxflsmkd hdkeypath=m/0'/0'/503' +L2FNif6JWkaRGFajYLtswNd2Lsqe39hzd5UiLPrQRnidWBHuZz8T 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp02gw74r4yry2ctg0wn5l8k2lgydksxn64e8p0 hdkeypath=m/0'/0'/436' +L4X9Kkxe6NPvRz6TVB2REyRJ7VKffJks9TxoJVmHVUdZw5KBRGY9 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpszas698p6arh8dydq07mlg5cpv0j3tmtnjw9f hdkeypath=m/0'/0'/1' +L5CfKHQhz7XCQ3DF49vsCLSf9h4eZqXSDnJLjBKhpabE33FKhtxj 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp3c774jrc54fhqa9z2hk5l2ugzsnmt62qddte4 hdkeypath=m/0'/0'/476' +L1PvQdYMXr9ifYN6AosYpCvHu2BKM4SsBKcsuLczVMwHxAXi4UKK 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp36zctn4wane7g2w43yqefaqxxej7faut3ykt0 hdkeypath=m/0'/0'/161' +L4LYDHAJLjugrHmyq7aZKMiqgwuLbJUBGaXrVRgVNiVMbS7Q4TaQ 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpj0emewh8dlfykv7qlmgf4hwflugya8pd9zffz hdkeypath=m/0'/0'/757' +L468MTvpVBGY31m67W7e6Nd5FGdwB14VUv3URRgjkCjgEfmmufEP 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpjs9zrd7ferkzpwgsghszz78dpcrrftyyl07m6 hdkeypath=m/0'/0'/385' +Kz5ZUuuTSFv3t6sXqXbnQizXi1Y6AggXNu8Phzpqes353wncJYar 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpjs4gjxs4w56sx9spxm2njc6v2mpzxenfv644m hdkeypath=m/0'/0'/343' +L1UbRCzxmEpmccpWPGMXgvSueupRgf4ycpj5TkuWfEMPQWh1QGFo 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpjegzmx2vd60jrx2dn0pd0wsg5munxy4lj2zl5 hdkeypath=m/0'/0'/346' +L3t9ZogBWEKrjjRdC7MCd4zzCptM7AMRFbsvpsT9HmpJtmLAHmDZ 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp5ct6ux2fnnzfmnuwwl0sw5cuhddeatqg00fga hdkeypath=m/0'/0'/32' +KwudSdDLdVS4ExhojDy1QDcEH4nRFi6WVYhZXaTGbEFoi8Cz8jPT 2018-03-05T16:59:40Z reserve=1 # addr=bc1qp42y506qcnteasg52j2zwmgu5efa39j89jzhwh hdkeypath=m/0'/0'/190' +L3wi1sxb5fFhgVXA2JiNjFU7qmh8jhAfqxYUDkjxpyNsSEratgsH 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpk4qrkhx7g22rxt4vdlgczefl0hzh08yeumld4 hdkeypath=m/0'/0'/133' +Kz5MV2oEe54nsqe2h9AxbFJax5CAYjsJhFwowCCfrBEFTSLCx9EH 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpedhst2yp48p39hvga302lk6gzcaepgsqck80j hdkeypath=m/0'/0'/737' +L44RS8bJzRXqE5rpED8HbJzdBx1XfGqKwWdPhGzGaj9B8fkXrsnA 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpmapqjtrjrm9fumh243dcjdgrme5fh98hjdvnw hdkeypath=m/0'/0'/616' +L1tLSdu3JjZYXNn3h2PpYndC1nQRDSgbWJZ9wpdx9LoNmqZ2akPe 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpayqa7kdxv43gl8ey5x8lwnffsw9muk9g8x860 hdkeypath=m/0'/0'/80' +L2AzEVsZhdFg3br6XkZGt8hTX1ZXHJUEM9AtBB3x6NLY5rtHD3Pf 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpasjrv2tlf3kzjud293hwrmwch8drwy4kj0vzd hdkeypath=m/0'/0'/867' +L5RSy2C3Z2xWhhXeGXfGpkHH4EdosXctEKPw4uhDBgVpqPHyzb3i 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpamczxwcmj0kxneje87ydtakrd6mj42nlrse9y hdkeypath=m/0'/0'/931' +KzwQtmR1c6vVZHvj5SUxxx2sFVxHGKFwV6EmYBxR1yG21ifzunWj 2018-03-05T16:59:40Z reserve=1 # addr=bc1qplpszat256uyhhzjereddjez0qk6ghy7kqtg4a hdkeypath=m/0'/0'/526' +Kx9a2RD9wVQAXVYRKhUQnrVUREkXhKDaZSKnz9JMoGes4A6YC5Yn 2018-03-05T16:59:40Z reserve=1 # addr=bc1qplrazmtn8x5x2eyj6c5v9x8y8336pw4vlg6kw2 hdkeypath=m/0'/0'/509' +L4we8nfKFkZNBam6D7t63P3e7LrMLwRjpZ7Cjt3ZGDwWPb5pX6Vt 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpl4mfayagsew6qlgjfdgjsycx7sf2cwfntkf5l hdkeypath=m/0'/0'/970' +KzL3ntoDHe48vgEGQ6mRGLePaLgQr48mp6waqQAs99K9MjJZVRqX 2018-03-05T16:59:40Z reserve=1 # addr=bc1qpluner5ay9p2lfrswwscz7r5jy2lxy0hg3alxx hdkeypath=m/0'/0'/848' +Ky1drboQJbkFSaJzDXJ6bZiTxEQQHX8rx73Ph4wzFs3k6tmVWBYr 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzq6gg9esvq5drl5mtlumvyu46t996n0kxuyq0k hdkeypath=m/0'/0'/954' +KyYRjfkDvdCGZxwVXH2N3pg7FKHBwet6jv6LsT4eTZ1FPuWqjpL1 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzpa0r4yuh0jwywvup50me6dvllp7dps69l7d9g hdkeypath=m/0'/0'/28' +L3yQJ397woQWmYZuWPDHx84RcaGP2iTzkZ8FBB5P7NgaVCe264Vr 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzzdecf0gkuqrqatvly7zz4j43wwhqkmn3pzllr hdkeypath=m/0'/1'/111' +L1nksP6jdcoHD9q7Eqxbq6SSoKbabFQyMXF2yaepGicRSh2qkCs6 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzrfvwmf4canzlrmdkljuqsgllhhqfjvqdsvl7t hdkeypath=m/0'/0'/266' +KzspjV4xxP4ZueyzWhH9QjA17X26t7iCQPiUPRYxjH7FcEYoA97G 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzrdsjpq44zz7z2gx63anvlwwfxec099w7n73qz hdkeypath=m/0'/0'/917' +Ky8b8tqEx6mLvvmromccVfvGB8fTuE11FKbVBU8WJEMTK99kZd3k 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzr7ptylg2reydsfx7e3pv3yryv6hjncjyzegx4 hdkeypath=m/0'/0'/788' +KxHQs2imQZugSigx3WZj1HVMdSgj2uQZ52WgtQjpdzuKsnSJ6daV 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzyu4q32wjwerjt2numx7unrjw7hhlk4pv74dxm hdkeypath=m/0'/0'/160' +L3eJiFTFrqtGYyCLV7pwSvR1wonCdKSa5b5Jnrc58jaW8iec4Z1R 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzxqk4l72k2gedx9jx0eydcvcru257psl3ddpw2 hdkeypath=m/0'/0'/588' +L1L1cU6oiojuwWXcveVhW3wh2mcj3DhZYHtzw6Q11hPmzJD3Q5Lx 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzxy6hrvr2jg6w3ngy65k95wj9ywgjdjrsvulen hdkeypath=m/0'/0'/378' +L3WP94FFjZ9Eg7DgrbmVvL5kMDNwacgHVNcgKSrwVXBQYeZztJZc 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzxx9gzt60x0m4cqccpqv9v9ya7ajdcv9snq5jm hdkeypath=m/0'/0'/829' +KxRmaWfA76L6ok99Z8cfu6nLcog8KyWZKdRd2chH9YAENgeW9AMK 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz8pe4qt33ja40tsfnf3jtnawwsmmjp6pu0qyyq hdkeypath=m/0'/0'/84' +L4AWqGUmu3Ab2zU2xNtS1n7wHuRyrjzSS2mSX9NQ2oE4gjADvp4M 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz8rnq3lrh83nljqajfd0fl4yq4m0dhcwwdskzf hdkeypath=m/0'/0'/841' +L2ke9RZkB9KWatUNey4pUfbGNBg3qyvdC9YnH9sN1Tm33R7xLvfe 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzgfh93xm86m9rlsmkjffehlqhyzvhm66rlsp6n hdkeypath=m/0'/0'/374' +L2apDq3XVGhYaBCubNXNgoCxDAgsZHhX5SCxh1HdLBJhhdapGZxU 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzgd7695z20qs25x5rh9znu5zufr4whsrh8ec6c hdkeypath=m/0'/0'/717' +KwgVhYPVx5HbfY9uHM4ipdA3FHBWsfkrzpdXUPeXpsX4rdBk3mrL 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzgjectrrvvmev72cfdt6uqfql5gzssg3h286c9 hdkeypath=m/0'/0'/50' +L1f8ysdwawiEK8ACVU9WbA9RgXWuKpqiZ1xt4XsV38YbBHg8ctm8 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzg5f2lrpers0a7hsddfvpmz25grzxug7efhg6e hdkeypath=m/0'/0'/525' +KwYLBnkJ53HpZT9PHRf4bUJhzwC8JnJSTonzMxrEmhAgWrk6skk4 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzga3z9ejqfrrpcj9r0k5mrlu5rmnr8ekqggwp8 hdkeypath=m/0'/0'/221' +L4aMkL5UKbucBoTsswSTZCrKbEcPn89KbMc1nP2FhLHT4nhJUS33 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzfeh2yt9th423u24k3htpq74d0frpz8p9jyz0s hdkeypath=m/0'/1'/36' +L5CZdr4RwtjdAzVDY7qqznxps2EmW2T2AuUv7uHmjPHavuseJVhm 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz2x7jz7krhxmu4q8j85syfxhf25ala2emtz78p hdkeypath=m/0'/0'/626' +L4yG4ftoEXWcQH2w9TSh6wMzN5twTQrTS4AasG5DKiGoZhgsGW8b 2018-03-05T16:59:40Z reserve=1 # addr=bc1qztvs4vu8a4trp9wfqdunvj6cehpwlg0teews4z hdkeypath=m/0'/0'/66' +Kwq8oeRTMJuR4RwMVXAvJACydeJovwAEf9opEeoDCYMicCcUUCbg 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzway2udfewsz9cfmeypxvgdnjgptdvwrpww2va hdkeypath=m/0'/0'/751' +KzjPNZC4F1Ksn6qcnMy5ypYuT2RvrBXh6L3qk8vawej1rKdtKFpu 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzsnmd95w4a83qmwht9qm73w4xulu07znexxx2k hdkeypath=m/0'/1'/29' +KzNWGiombLc9go866A3sSGRtdsU1TSpeZbxNyHA3sa7bAXbvTFPk 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz3zn4qp3c5rv5gskme94jzztn7pjyxdwwyrg2y hdkeypath=m/0'/0'/838' +KwrsiQv4svb82viqDQDrerfbQUsZyx8jM7PfkVZzVdVX2M6kjRAc 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzjy9wygr2z94qv0yzp9xdr3fwny5heh0h7k60w hdkeypath=m/0'/0'/591' +L4DbRGykiPaT8298kmDLo3rQqyHmtJ1ZJiWuDXmqUZAdrZUYNkCJ 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzjfyj0ljhudl5w98xcv02ydzv6kjzxercwnx3z hdkeypath=m/0'/0'/347' +L5RUT8xB3rzh1s41fa6wRnskULVF5MpiDrcVJgEug5ud8mJc8D1F 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzn3tcm7p8j37au68ajsa7pencrvkmtx9e6fagc hdkeypath=m/0'/0'/514' +L1Q3isvNS45fGFWj6JVQ7q24peFDSafXiqJuZZPw8smd1LMCohfs 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzn7arptq59rr4z2qwlf5kzmnzpj9tvq9enjsc7 hdkeypath=m/0'/1'/144' +Kxejtrx77wP5B9j1nJz1wjMMnwLGa9XZjifoD6gwb6YufRF37vpw 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz4jtg66ysrv4vzyxwmvwsl9clwvkcegjf90j4d hdkeypath=m/0'/0'/883' +L1n9jYsRQF1R5adHijhNyWcQgPPovizr8oQfEhzwQ59RSZC7fVdb 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz45jn0l56dx8qp3hnge4nprdg90tm6922trr6f hdkeypath=m/0'/0'/821' +L1upSitKPfbj74gupBVe7iB343UUE2NJCTEtymdHqRf2zd4KGcUV 2018-03-05T16:59:40Z reserve=1 # addr=bc1qz4cdmyl3czsu9937jnp2wt6atzge7jm7jpxc49 hdkeypath=m/0'/0'/492' +L3oAMsZDkN6tWL2iBXWQPuPDmKMVnLYFDYUbAFkoUDVJV8yzV5CF 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzky9athff8teluwjg7gvqwadqpay6ggz4k9mhc hdkeypath=m/0'/0'/233' +L2JZLfMEd8FgvZvaQTaxPicx9yVX6X2GUiMdGicfXdQHHcPa92Cu 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzkk0j0y9v5rdugugdnjuny0azw7en5mqt9zvu8 hdkeypath=m/0'/0'/306' +KxtP4NCXGLspbMN5Wxw1RXZJiwe2LKxCFkbEQxo2NqJZ5t2CRS7L 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzhvp0pue0ddpdthh6zyckhh69hgprfsfs4lhfs hdkeypath=m/0'/0'/827' +L19MAvFt16Cv5sBVDrj91GmPFcEyqWpumtwdPMyeQ6xnedWZaE4v 2018-03-05T16:59:40Z reserve=1 # addr=bc1qzhv4xdcyw9yw3uferekl05mcj3w3753m4vujmk hdkeypath=m/0'/0'/777' + +# End of dump diff --git a/test/test.py b/test/test.py index 8d47cd60..2432c29c 100755 --- a/test/test.py +++ b/test/test.py @@ -168,8 +168,8 @@ rtFee = { }[coin_sel] rtBals = { 'btc': ('499.9999488','399.9998282','399.9998147','399.9996877','13.00000000','986.99933647','999.99933647'), - 'bch': ('499.9999416','399.9999124','399.99989','399.9997616','276.22339397','723.77626763','999.99966160'), - 'ltc': ('5499.9971','5399.994085','5399.993545','5399.987145','13.00000000','10986.93714500','10999.93714500'), + 'bch': ('499.9999484','399.9999194','399.9998972','399.9997692','6.79000000','993.20966920','999.99966920'), + 'ltc': ('5499.99744','5399.994425','5399.993885','5399.987525','6.79000000','10993.14752500','10999.93752500'), }[coin_sel] rtBobOp3 = {'btc':'S:2','bch':'L:3','ltc':'S:2'}[coin_sel] @@ -2551,7 +2551,7 @@ class MMGenTestSuite(object): amts = (a for a in (1.12345678,2.87654321,3.33443344,4.00990099,5.43214321)) outputs1 = ['{},{}'.format(a,amts.next()) for a in addrs] sid = self.regtest_user_sid('bob') - l1,l2 = (':S',':B') if g.proto.cap('segwit') else (':L',':L') + l1,l2 = (':S',':B') if 'B' in g.proto.mmtypes else (':S',':S') if g.proto.cap('segwit') else (':L',':L') outputs2 = [sid+':C:2,6.333', sid+':L:3,6.667',sid+l1+':4,0.123',sid+l2+':5'] return self.regtest_user_txdo(name,'bob',rtFee[5],outputs1+outputs2,'1-2') diff --git a/test/tooltest.py b/test/tooltest.py index ebc39a5d..a52b9d82 100755 --- a/test/tooltest.py +++ b/test/tooltest.py @@ -84,24 +84,24 @@ cmd_data = OrderedDict([ 'desc': 'Cryptocoin address/key commands', 'cmd_data': OrderedDict([ ('Randwif', ()), - ('Randpair', ()), # create 3 pairs: uncomp,comp,segwit - ('Wif2addr', ('Randpair','o3')), - ('Wif2hex', ('Randpair','o3')), + ('Randpair', ()), # create 4 pairs: uncomp,comp,segwit,bech32 + ('Wif2addr', ('Randpair','o4')), + ('Wif2hex', ('Randpair','o4')), - ('Privhex2pubhex', ('Wif2hex','o3')), - ('Pubhex2addr', ('Privhex2pubhex','o3')), - ('Hex2wif', ('Wif2hex','io2')), - ('Addr2hexaddr', ('Randpair','o2'))] + # TODO: Hexaddr2addr - ([],[ - ('Pubhash2addr', ('Addr2hexaddr','io2')) - ])[opt.type != 'zcash_z'] + - ([],[ - ('Pubhex2redeem_script', ('Privhex2pubhex','o3')), - ('Wif2redeem_script', ('Randpair','o3')), - ('Wif2segwit_pair', ('Randpair','o2')), - ('Privhex2addr', ('Wif2hex','o3')), # compare with output of Randpair - ('Pipetest', ('Randpair','o3')) - ])[g.coin in ('BTC','LTC')] + ('Privhex2pubhex', ('Wif2hex','o3')), # segwit only + ('Pubhex2addr', ('Privhex2pubhex','o3')), # segwit only + ('Hex2wif', ('Wif2hex','io2')), # uncomp, comp + ('Addr2hexaddr', ('Randpair','o4'))] + # uncomp, comp, bech32 + ([],[ + ('Pubhash2addr', ('Addr2hexaddr','io4')) # uncomp, comp, bech32 + ])[opt.type != 'zcash_z'] + + ([],[ + ('Pubhex2redeem_script', ('Privhex2pubhex','o3')), + ('Wif2redeem_script', ('Randpair','o3')), + ('Wif2segwit_pair', ('Randpair','o2')), + ('Privhex2addr', ('Wif2hex','o4')), # compare with output of Randpair + ('Pipetest', ('Randpair','o3')) + ])[g.coin in ('BTC','LTC')] ) } ), @@ -196,15 +196,17 @@ if opt.list_names: from mmgen.tx import is_wif,is_coin_addr -msg_w = 35 +msg_w = 33 def test_msg(m): m2 = 'Testing {}'.format(m) msg_r(green(m2+'\n') if opt.verbose else '{:{w}}'.format(m2,w=msg_w+8)) maybe_compressed = ('','compressed')['C' in g.proto.mmtypes] maybe_segwit = ('','segwit')['S' in g.proto.mmtypes] +maybe_bech32 = ('','bech32')['B' in g.proto.mmtypes] maybe_type_compressed = ([],['--type=compressed'])['C' in g.proto.mmtypes] maybe_type_segwit = ([],['--type=segwit'])['S' in g.proto.mmtypes] +maybe_type_bech32 = ([],['--type=bech32'])['B' in g.proto.mmtypes] class MMGenToolTestSuite(object): @@ -354,38 +356,57 @@ class MMGenToolTestSuite(object): ret = self.run_cmd_out(name,add_opts=ao,Return=True,fn_idx=n+1) ok_or_die(ret,is_wif,'WIF key') def Randpair(self,name): - for n,k in enumerate(['',maybe_compressed,maybe_segwit]): + for n,k in enumerate(['',maybe_compressed,maybe_segwit,maybe_bech32]): ao = ['--type='+k] if k else [] wif,addr = self.run_cmd_out(name,add_opts=ao,Return=True,fn_idx=n+1).split() ok_or_die(wif,is_wif,'WIF key',skip_ok=True) ok_or_die(addr,is_coin_addr,'Coin address') - def Wif2addr(self,name,f1,f2,f3): - for n,f,k,m in ((1,f1,'',''),(2,f2,'',maybe_compressed),(3,f3,maybe_segwit,maybe_compressed)): + def Wif2addr(self,name,f1,f2,f3,f4): + for n,f,k,m in ( + (1,f1,'',''), + (2,f2,'',maybe_compressed), + (3,f3,maybe_segwit,''), + (4,f4,maybe_bech32,'') + ): ao = ['--type='+k] if k else [] wif = read_from_file(f).split()[0] self.run_cmd_out(name,wif,add_opts=ao,fn_idx=n,extra_msg=m) - def Wif2hex(self,name,f1,f2,f3): - for n,f,m in ((1,f1,''),(2,f2,maybe_compressed),(3,f3,'{} for {}'.format(maybe_compressed,maybe_segwit))): + def Wif2hex(self,name,f1,f2,f3,f4): + for n,f,m in ( + (1,f1,''), + (2,f2,maybe_compressed), + (3,f3,'{} for {}'.format(maybe_compressed,maybe_segwit)), + (4,f4,'{} for {}'.format(maybe_compressed,maybe_bech32)) + ): wif = read_from_file(f).split()[0] self.run_cmd_out(name,wif,fn_idx=n,extra_msg=m) - def Privhex2addr(self,name,f1,f2,f3): - keys = [read_from_file(f).rstrip() for f in (f1,f2,f3)] - for n,k in enumerate(('',maybe_compressed,maybe_segwit)): + def Privhex2addr(self,name,f1,f2,f3,f4): + keys = [read_from_file(f).rstrip() for f in (f1,f2,f3,f4)] + for n,k in enumerate(('',maybe_compressed,maybe_segwit,maybe_bech32)): ao = ['--type='+k] if k else [] ret = self.run_cmd(name,[keys[n]],add_opts=ao).rstrip() iaddr = read_from_tmpfile(cfg,'Randpair{}.out'.format(n+1)).split()[-1] + vmsg('Out: {}'.format(ret)) cmp_or_die(iaddr,ret) def Hex2wif(self,name,f1,f2,f3,f4): for n,fi,fo,k in ((1,f1,f2,''),(2,f3,f4,maybe_compressed)): ao = ['--type='+k] if k else [] ret = self.run_cmd_chk(name,fi,fo,add_opts=ao) - def Addr2hexaddr(self,name,f1,f2): - for n,f,m in ((1,f1,''),(2,f2,'from {}'.format(maybe_compressed))): + def Addr2hexaddr(self,name,f1,f2,f3,f4): + for n,f,m,ao in ( + (1,f1,'',[]), + (2,f2,'from {}'.format(maybe_compressed),[]), + (4,f4,'',maybe_type_bech32), + ): addr = read_from_file(f).split()[-1] - self.run_cmd_out(name,addr,fn_idx=n,extra_msg=m) - def Pubhash2addr(self,name,f1,f2,f3,f4): - for n,fi,fo,m in ((1,f1,f2,''),(2,f3,f4,'from {}'.format(maybe_compressed))): - self.run_cmd_chk(name,fi,fo,extra_msg=m) + self.run_cmd_out(name,addr,fn_idx=n,add_opts=ao,extra_msg=m) + def Pubhash2addr(self,name,f1,f2,f3,f4,f5,f6,f7,f8): + for n,fi,fo,m,ao in ( + (1,f1,f2,'',[]), + (2,f3,f4,'from {}'.format(maybe_compressed),[]), + (4,f7,f8,'',maybe_type_bech32) + ): + self.run_cmd_chk(name,fi,fo,add_opts=ao,extra_msg=m) def Privhex2pubhex(self,name,f1,f2,f3): # from Hex2wif addr = read_from_file(f3).strip() self.run_cmd_out(name,addr,add_opts=maybe_type_compressed,fn_idx=3) # what about uncompressed?