Exemplo n.º 1
0
 def test_encode_decode_addresses(self):
     addrs = ['bcrt1qs4xe0x388ygy7drku9gkf2n0emcwj5xms0tnkw']
     print('Decoding')
     for addr in addrs:
         decoded = bech32decode(addr)
         print(decoded)
         assert addr == bech32encode(decoded, prefix=BECH32_BITCOIN_REGTEST_PREFIX)
Exemplo n.º 2
0
 def test_invalid_vectors(self):
     vectors = [
         'tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty',
         'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5',
         'BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2',
         'bc1rw5uspcuh',
         'bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90',
         'BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P',
         'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7',
         'bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du',
         'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv',
         'bc1gmk9yu'
     ]
     with self.assertRaises(Exception):
         for vector in vectors:
             bech32decode(vector)
Exemplo n.º 3
0
 def test_invalid_vectors(self):
     vectors = [
         'tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty',
         'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5',
         'BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2',
         'bc1rw5uspcuh',
         'bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90',
         'BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P',
         'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7',
         'bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du',
         'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv',
         'bc1gmk9yu'
     ]
     with self.assertRaises(Exception):
         for vector in vectors:
             bech32decode(vector)
Exemplo n.º 4
0
def mktx(*args, **kwargs):
    # [in0, in1...],[out0, out1...] or in0, in1 ... out0 out1 ...
    ser = kwargs.get('serialize', True)
    ins, outs = [], []
    for arg in args:
        if isinstance(arg, list):
            for a in arg: (ins if is_inp(a) else outs).append(a)
        else:
            (ins if is_inp(arg) else outs).append(arg)

    txobj = {"locktime": kwargs.get('locktime', 0), "version": 1, "ins": [], "outs": []}
    for i in ins:

        " begin segwit "
        seg_input = isinstance(i, dict) and i.get('segregated')
        sequence = isinstance(i, dict) and i.get('sequence', None)
        " end segwit "

        if isinstance(i, dict) and "outpoint" in i:
            txobj["ins"].append(i)
        else:
            if isinstance(i, dict) and "output" in i:
                i = i["output"]
            txobj["ins"].append({
                "outpoint": {"hash": i[:64], "index": int(i[65:])},
                "script": "",
                "sequence": 4294967295 if not sequence and sequence != 0 else sequence
            })
        if seg_input:
            txobj["ins"][-1].update({'txinwitness': []})

    for o in outs:
        if isinstance(o, string_or_bytes_types):
            addr = o[:o.find(':')]
            val = int(o[o.find(':')+1:])
            o = {}
            if re.match('^[0-9a-fA-F]*$', addr):
                o["script"] = addr
            else:
                o["address"] = addr
            o["value"] = val
        outobj = {}
        if "address" in o:
            if o["address"][:2] in ("bc", "tb"):
                outobj["script"] = bech32decode(o["address"])
            else:
                outobj["script"] = address_to_script(o["address"])
        elif "script" in o:
            outobj["script"] = o["script"]
        else:
            raise Exception("Could not find 'address' or 'script' in output.")
        outobj["value"] = o["value"]
        txobj["outs"].append(outobj)
    return txobj if not ser else serialize(txobj)
Exemplo n.º 5
0
    def test_vectors(self):
        vectors = {
            "BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4":
                "0014751e76e8199196d454941c45d1b3a323f1433bd6",

            "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7":
                "00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262",

            "bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx":
                "5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6",

            "BC1SW50QA3JX3S":
                "6002751e",

            "bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj":
                "5210751e76e8199196d454941c45d1b3a323",

            "tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy":
                "0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433"
        }
        for vector in vectors.items():
            assert bech32decode(vector[0]) == vector[1], (bech32decode(vector[0]), vector[1])
Exemplo n.º 6
0
    def test_vectors(self):
        vectors = {
            "BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4":
                "0014751e76e8199196d454941c45d1b3a323f1433bd6",

            "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7":
                "00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262",

            "bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx":
                "5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6",

            "BC1SW50QA3JX3S":
                "6002751e",

            "bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj":
                "5210751e76e8199196d454941c45d1b3a323",

            "tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy":
                "0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433"
        }
        for vector in vectors.items():
            assert bech32decode(vector[0]) == vector[1], (bech32decode(vector[0]), vector[1])
Exemplo n.º 7
0
 def test_encode_decode_mainnet_addresses(self):
     addrs = [
         'bc1qwqdg6squsna38e46795at95yu9atm8azzmyvckulcc7kytlcckxswvvzej',
         'bc1qepn5e55urrelwar3jnzz6w853lxz4vfpysskmmat9mk36u46cvvqtnala0',
         'bc1qurj278havq0phe7y3heufmck246xrnxhtyx5sa92pytky655pr6qsqzzxa',
         'bc1q9909xggg842c58v3cncp9l35vv65gxx8mu3483x3w8xvk8a8ng0stfyrd9',
         'bc1qakft6s8shk0dgunet53pzapsuxc7ewagfj77l6j8358xt6sumtgq9g650j',
         'bc1qkmtl43j4kqucux3tgr52wx9jqfqwy0xjyn89rldu8pm2ksneynksul2ta2',
         'bc1qfa4ycsdv6uv774zjrtvxrp55qvg439ykre3ttm56vw2dhvk8hhnssjjyzs'
     ]
     print('Decoding')
     for addr in addrs:
         decoded = bech32decode(addr)
         assert addr == bech32encode(decoded, prefix=BECH32_BITCOIN_PREFIX)
Exemplo n.º 8
0
 def test_encode_decode_mainnet_addresses(self):
     addrs = [
         'bc1qwqdg6squsna38e46795at95yu9atm8azzmyvckulcc7kytlcckxswvvzej',
         'bc1qepn5e55urrelwar3jnzz6w853lxz4vfpysskmmat9mk36u46cvvqtnala0',
         'bc1qurj278havq0phe7y3heufmck246xrnxhtyx5sa92pytky655pr6qsqzzxa',
         'bc1q9909xggg842c58v3cncp9l35vv65gxx8mu3483x3w8xvk8a8ng0stfyrd9',
         'bc1qakft6s8shk0dgunet53pzapsuxc7ewagfj77l6j8358xt6sumtgq9g650j',
         'bc1qkmtl43j4kqucux3tgr52wx9jqfqwy0xjyn89rldu8pm2ksneynksul2ta2',
         'bc1qfa4ycsdv6uv774zjrtvxrp55qvg439ykre3ttm56vw2dhvk8hhnssjjyzs'
     ]
     print('Decoding')
     for addr in addrs:
         decoded = bech32decode(addr)
         assert addr == bech32encode(decoded, prefix=BECH32_BITCOIN_PREFIX)
Exemplo n.º 9
0
    def test_encode_decode(self):
        transaction = "010000000001019fa7fad392a29f74d124a8770d24e23f0fcc3e3007e756e4114e4b950a5cf37a0200000000f" \
                      "fffffff02402d0e20000000001976a914c0123fd352e7f53a9c4c0e512c490e1a6817dffa88acb19066000000" \
                      "0000220020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d040048304502210" \
                      "0f227d07b7ca8bef3b9d591fc46803b1fc6b41290b3b229064726eee5c3d6fc8b02206450b248d4d035a121e6" \
                      "92d7a0e1b720801e1fd30255f5d1f099dbca61eb92dc01483045022100966181ecf84d9a75be1c7654a29ce2a" \
                      "1cba32b2bfb9988d6564ae3bc7358420702200a5e54430e1a9c4537c84d9159243cbfe020fbac2fa7e09b8cd6" \
                      "efb08c984432016952210375e00eb72e29da82b89367947f29ef34afb75e8654f6ea368e0acdfd92976b7c210" \
                      "3a1b26313f430c4b15bb1fdce663207659d8cac749a0e53d70eff01874496feff2103c96d495bfdd5ba4145e3" \
                      "e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae00000000"

        expected_address = "bc1qwqdg6squsna38e46795at95yu9atm8azzmyvckulcc7kytlcckxswvvzej"
        decoded_expected_address = bech32decode(expected_address)
        deserialized = deserialize(transaction)
        assert decoded_expected_address == deserialized['outs'][1]['script']
        re_encoded_address = bech32encode(deserialized['outs'][1]['script'])
        assert re_encoded_address == expected_address
Exemplo n.º 10
0
    def test_encode_decode(self):
        transaction = "010000000001019fa7fad392a29f74d124a8770d24e23f0fcc3e3007e756e4114e4b950a5cf37a0200000000f" \
                      "fffffff02402d0e20000000001976a914c0123fd352e7f53a9c4c0e512c490e1a6817dffa88acb19066000000" \
                      "0000220020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d040048304502210" \
                      "0f227d07b7ca8bef3b9d591fc46803b1fc6b41290b3b229064726eee5c3d6fc8b02206450b248d4d035a121e6" \
                      "92d7a0e1b720801e1fd30255f5d1f099dbca61eb92dc01483045022100966181ecf84d9a75be1c7654a29ce2a" \
                      "1cba32b2bfb9988d6564ae3bc7358420702200a5e54430e1a9c4537c84d9159243cbfe020fbac2fa7e09b8cd6" \
                      "efb08c984432016952210375e00eb72e29da82b89367947f29ef34afb75e8654f6ea368e0acdfd92976b7c210" \
                      "3a1b26313f430c4b15bb1fdce663207659d8cac749a0e53d70eff01874496feff2103c96d495bfdd5ba4145e3" \
                      "e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae00000000"

        expected_address = "bc1qwqdg6squsna38e46795at95yu9atm8azzmyvckulcc7kytlcckxswvvzej"
        decoded_expected_address = bech32decode(expected_address)
        deserialized = deserialize(transaction)
        assert decoded_expected_address == deserialized['outs'][1]['script']
        re_encoded_address = bech32encode(deserialized['outs'][1]['script'])
        assert re_encoded_address == expected_address
Exemplo n.º 11
0
 def test_mktx(self):
     address = 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7'
     inputs = [
         {
             'output': 'ff'*32 + ':0',
             'value': 100,
             'segregated': True
         }
     ]
     outputs = [
         {
             'value': 100,
             'address': address
         }
     ]
     tx = mktx(inputs, outputs)
     print(tx)
     deserialized = deserialize(tx)
     re_encoded_address = bech32encode(deserialized['outs'][0]['script'], prefix=BECH32_BITCOIN_TESTNET_PREFIX)
     assert re_encoded_address == address
     decoded = bech32decode(re_encoded_address)
     self.assertEqual(deserialized['outs'][0]['script'], decoded)
Exemplo n.º 12
0
 def test_mktx(self):
     address = 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7'
     inputs = [
         {
             'output': 'ff'*32 + ':0',
             'value': 100,
             'segregated': True
         }
     ]
     outputs = [
         {
             'value': 100,
             'address': address
         }
     ]
     tx = mktx(inputs, outputs)
     print(tx)
     deserialized = deserialize(tx)
     re_encoded_address = bech32encode(deserialized['outs'][0]['script'], prefix=BECH32_BITCOIN_TESTNET_PREFIX)
     assert re_encoded_address == address
     decoded = bech32decode(re_encoded_address)
     self.assertEqual(deserialized['outs'][0]['script'], decoded)
Exemplo n.º 13
0
    def test_testnet_encode_decode(self):
        transaction = "01000000000104acb16c8695c04bfff4857d7b6115ca1a539775c4ea396804038c0cd1acbd595c01000000171600" \
                      "14c7ed016bcf101160cd0b146a40133dc8eb6585fbffffffff87b40d41dac1f128fdf89e72ecda7fb5b286f5f586" \
                      "7164e3dd7a581ab53324270000000000ffffffff9b81806b10bf25e255164f026b9fff2ea9af0fe7b3a2ecdce974" \
                      "09b8f85d0e5a0000000000ffffffffdb7234b54fa8bb299248010e0062e141a42579f4e7642d258d1a889a0210c7" \
                      "490000000000ffffffff015838a21e00000000160014854d979a2739104f3476e15164aa6fcef0e950db02473044" \
                      "02206cc1163d3dfe22155c6479470391dcba86e3ccec7d783bb87bbce7cc47660ab102207c02779f21c835085e39" \
                      "24ff85541efa980cb350e1a3513b880b250fac491dd6012102b99f659fadd83993c4858d181922d5c9a8db74edb3" \
                      "6f2a7bbd84300a234d571b0247304402203eb46a7f5c84909291f81d5852421c62a6c19424343d4330f94a50eaf3" \
                      "01c31902200b9e406cd21613ba8022e3b2fe16bf00acf90b6faf8980ee56bd92c10bc2a8db012102d732900601aa" \
                      "2915532ff55ad8603f0c433eef9370ff9292b9696f2681588a720247304402201faecf60e30ebab7d3bbd05984ff" \
                      "f39c5c572fdf03567449a24152c24cdc1cab022078f9e0b338f26d2296c6882fb202ca73f7e229b441617951d879" \
                      "54c5881fb7eb01210376e28d103288b69b4e727ea384b9fa5a2833d68706b411f1cade00b681faea670248304502" \
                      "2100b0bc4018cf71e7d8f0af6b47e8c3bf531ed436abc946bc16fd466cd4f4d535ac02206f3706a9c423933855e6" \
                      "0ff876f4938aee30c0e81ed683c7e4c6286e97992ae0012103820065f5d287223d1c098db514c87e76d24089ca4c" \
                      "e5d4f208b4da97f2b5615800000000"

        expected_address = "tb1qs4xe0x388ygy7drku9gkf2n0emcwj5xmjxj7p8"
        decoded_expected_address = bech32decode(expected_address)
        deserialized = deserialize(transaction)
        assert decoded_expected_address == deserialized['outs'][0]['script']
        re_encoded_address = bech32encode(deserialized['outs'][0]['script'], prefix=BECH32_BITCOIN_TESTNET_PREFIX)
        assert re_encoded_address == expected_address
Exemplo n.º 14
0
    def test_testnet_encode_decode(self):
        transaction = "01000000000104acb16c8695c04bfff4857d7b6115ca1a539775c4ea396804038c0cd1acbd595c01000000171600" \
                      "14c7ed016bcf101160cd0b146a40133dc8eb6585fbffffffff87b40d41dac1f128fdf89e72ecda7fb5b286f5f586" \
                      "7164e3dd7a581ab53324270000000000ffffffff9b81806b10bf25e255164f026b9fff2ea9af0fe7b3a2ecdce974" \
                      "09b8f85d0e5a0000000000ffffffffdb7234b54fa8bb299248010e0062e141a42579f4e7642d258d1a889a0210c7" \
                      "490000000000ffffffff015838a21e00000000160014854d979a2739104f3476e15164aa6fcef0e950db02473044" \
                      "02206cc1163d3dfe22155c6479470391dcba86e3ccec7d783bb87bbce7cc47660ab102207c02779f21c835085e39" \
                      "24ff85541efa980cb350e1a3513b880b250fac491dd6012102b99f659fadd83993c4858d181922d5c9a8db74edb3" \
                      "6f2a7bbd84300a234d571b0247304402203eb46a7f5c84909291f81d5852421c62a6c19424343d4330f94a50eaf3" \
                      "01c31902200b9e406cd21613ba8022e3b2fe16bf00acf90b6faf8980ee56bd92c10bc2a8db012102d732900601aa" \
                      "2915532ff55ad8603f0c433eef9370ff9292b9696f2681588a720247304402201faecf60e30ebab7d3bbd05984ff" \
                      "f39c5c572fdf03567449a24152c24cdc1cab022078f9e0b338f26d2296c6882fb202ca73f7e229b441617951d879" \
                      "54c5881fb7eb01210376e28d103288b69b4e727ea384b9fa5a2833d68706b411f1cade00b681faea670248304502" \
                      "2100b0bc4018cf71e7d8f0af6b47e8c3bf531ed436abc946bc16fd466cd4f4d535ac02206f3706a9c423933855e6" \
                      "0ff876f4938aee30c0e81ed683c7e4c6286e97992ae0012103820065f5d287223d1c098db514c87e76d24089ca4c" \
                      "e5d4f208b4da97f2b5615800000000"

        expected_address = "tb1qs4xe0x388ygy7drku9gkf2n0emcwj5xmjxj7p8"
        decoded_expected_address = bech32decode(expected_address)
        deserialized = deserialize(transaction)
        assert decoded_expected_address == deserialized['outs'][0]['script']
        re_encoded_address = bech32encode(deserialized['outs'][0]['script'], prefix=BECH32_BITCOIN_TESTNET_PREFIX)
        assert re_encoded_address == expected_address
Exemplo n.º 15
0
 def test_encode_decode_addresses(self):
     addrs = ['bcrt1qs4xe0x388ygy7drku9gkf2n0emcwj5xms0tnkw']
     print('Decoding')
     for addr in addrs:
         decoded = bech32decode(addr)
         assert addr == bech32encode(decoded, prefix=BECH32_BITCOIN_REGTEST_PREFIX)
Exemplo n.º 16
0
def mktx(*args, **kwargs):
    # [in0, in1...],[out0, out1...] or in0, in1 ... out0 out1 ...
    ser = kwargs.get('serialize', True)
    ins, outs = [], []
    for arg in args:
        if isinstance(arg, list):
            for a in arg:
                (ins if is_inp(a) else outs).append(a)
        else:
            (ins if is_inp(arg) else outs).append(arg)

    txobj = {
        "locktime": kwargs.get('locktime', 0),
        "version": 1,
        "ins": [],
        "outs": []
    }
    for i in ins:

        " begin segwit "
        seg_input = isinstance(i, dict) and i.get('segregated')
        sequence = isinstance(i, dict) and i.get('sequence', None)
        " end segwit "

        if isinstance(i, dict) and "outpoint" in i:
            txobj["ins"].append(i)
        else:
            if isinstance(i, dict) and "output" in i:
                i = i["output"]
            txobj["ins"].append({
                "outpoint": {
                    "hash": i[:64],
                    "index": int(i[65:])
                },
                "script":
                "",
                "sequence":
                4294967295 if not sequence and sequence != 0 else sequence
            })
        if seg_input:
            txobj["ins"][-1].update({'txinwitness': []})

    for o in outs:
        if isinstance(o, string_or_bytes_types):
            addr = o[:o.find(':')]
            val = int(o[o.find(':') + 1:])
            o = {}
            if re.match('^[0-9a-fA-F]*$', addr):
                o["script"] = addr
            else:
                o["address"] = addr
            o["value"] = val
        outobj = {}
        if "address" in o:
            if o["address"][:2] in ("bc", "tb"):
                outobj["script"] = bech32decode(o["address"])
            else:
                outobj["script"] = address_to_script(o["address"])
        elif "script" in o:
            outobj["script"] = o["script"]
        else:
            raise Exception("Could not find 'address' or 'script' in output.")
        outobj["value"] = o["value"]
        txobj["outs"].append(outobj)
    return txobj if not ser else serialize(txobj)