コード例 #1
0
    def test_get_address_from_output_script(self):
        # the inverse of this test is in test_bitcoin: test_address_to_script
        addr_from_script = lambda script: transaction.get_address_from_output_script(
            bfh(script))

        # base58 p2pkh
        self.assertEqual(
            'k11X9AqNVNLqmaeX7RCqXU47hpKzB3yXm8U',
            addr_from_script(
                '76a91428662c67561b95c79d2257d2a93d9d151c977e9188ac'))
        self.assertEqual(
            'k185NR28jAC3VBG2axzNLhzqeArN2P7byuw',
            addr_from_script(
                '76a914704f4b81cadb7bf7e68c08cd3657220f680f863c88ac'))
        # almost but not quite
        self.assertEqual(
            None,
            addr_from_script(
                '76a9130000000000000000000000000000000000000088ac'))

        # base58 p2sh
        self.assertEqual(
            'k32QN9L3r2VbWhL54GjLda4kF4LZzb15eoN',
            addr_from_script('a9142a84cf00d47f699ee7bbc1dea5ec1bdecb4ac15487'))
        self.assertEqual(
            'k3LpGjKVPPFhcS4e2iLhkcEegFkiKwSyU6f',
            addr_from_script('a914f47c8954e421031ad04ecd8e7752c9479206b9d387'))
        # almost but not quite
        self.assertEqual(
            None,
            addr_from_script('a912f47c8954e421031ad04ecd8e7752c947920687'))

        # p2pk
        self.assertEqual(
            None,
            addr_from_script(
                '210289e14468d94537493c62e2168318b568912dec0fb95609afd56f2527c2751c8bac'
            ))
        self.assertEqual(
            None,
            addr_from_script(
                '41045485b0b076848af1209e788c893522a90f3df77c1abac2ca545846a725e6c3da1f7743f55a1bc3b5f0c7e0ee4459954ec0307022742d60032b13432953eb7120ac'
            ))
        # almost but not quite
        self.assertEqual(
            None,
            addr_from_script(
                '200289e14468d94537493c62e2168318b568912dec0fb95609afd56f2527c2751cac'
            ))
        self.assertEqual(
            None,
            addr_from_script(
                '210589e14468d94537493c62e2168318b568912dec0fb95609afd56f2527c2751c8bac'
            ))
コード例 #2
0
    def test_get_address_from_output_script(self):
        # the inverse of this test is in test_bitcoin: test_address_to_script
        addr_from_script = lambda script: transaction.get_address_from_output_script(
            bfh(script))
        ADDR = transaction.TYPE_ADDRESS

        # bech32 native segwit
        # test vectors from BIP-0173
        self.assertEqual(
            (ADDR, 'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4'),
            addr_from_script('0014751e76e8199196d454941c45d1b3a323f1433bd6'))
        self.assertEqual(
            (ADDR,
             'bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx'
             ),
            addr_from_script(
                '5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6'
            ))
        self.assertEqual((ADDR, 'bc1sw50qa3jx3s'),
                         addr_from_script('6002751e'))
        self.assertEqual(
            (ADDR, 'bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj'),
            addr_from_script('5210751e76e8199196d454941c45d1b3a323'))

        # base58 p2pkh
        self.assertEqual(
            (ADDR, '14gcRovpkCoGkCNBivQBvw7eso7eiNAbxG'),
            addr_from_script(
                '76a91428662c67561b95c79d2257d2a93d9d151c977e9188ac'))
        self.assertEqual(
            (ADDR, '1BEqfzh4Y3zzLosfGhw1AsqbEKVW6e1qHv'),
            addr_from_script(
                '76a914704f4b81cadb7bf7e68c08cd3657220f680f863c88ac'))
        self.assertEqual(
            (ADDR, '18u8VTYhogvwek9rUQRtHKn66Sf6a2RV5w'),
            addr_from_script(
                '76a91456a4c36cd1fdb71a493fec9941b69b4a7cec90ea88ac'))

        # base58 p2sh
        self.assertEqual(
            (ADDR, '35ZqQJcBQMZ1rsv8aSuJ2wkC7ohUCQMJbT'),
            addr_from_script('a9142a84cf00d47f699ee7bbc1dea5ec1bdecb4ac15487'))
        self.assertEqual(
            (ADDR, '3PyjzJ3im7f7bcV724GR57edKDqoZvH7Ji'),
            addr_from_script('a914f47c8954e421031ad04ecd8e7752c9479206b9d387'))
コード例 #3
0
ファイル: btc.py プロジェクト: AdamISZ/joinmarket_core
 def verify_tx_input(tx, i, script, sig, pub):
     pub, sig, script = (binascii.unhexlify(x) for x in [pub, sig, script])
     t = etr.Transaction(tx)
     t.deserialize()
     #to prepare for verification (to do the txhash for modtx)
     #we need to have the "address" field set in the input.
     typ, addr = etr.get_address_from_output_script(script)
     if not typ == ebt.TYPE_ADDRESS:
         #Don't support non-p2sh, non-p2pkh for now
         log.debug("Invalid script")
         return False
     t.inputs()[i]["address"] = addr
     txforsig = etr.Hash(t.tx_for_sig(i).decode('hex'))
     ecdsa_pub = get_ecdsa_verifying_key(pub)
     if not ecdsa_pub:
         return False
     try:
         verified = ecdsa_pub.verify_digest(sig, txforsig,
                                    sigdecode = sigdecode_der)
     except BadSignatureError, BadDigestError:
         return False
コード例 #4
0
 def verify_tx_input(tx, i, script, sig, pub):
     pub, sig, script = (binascii.unhexlify(x) for x in [pub, sig, script])
     t = etr.Transaction(tx)
     t.deserialize()
     #to prepare for verification (to do the txhash for modtx)
     #we need to have the "address" field set in the input.
     typ, addr = etr.get_address_from_output_script(script)
     if not typ == ebt.TYPE_ADDRESS:
         #Don't support non-p2sh, non-p2pkh for now
         log.debug("Invalid script")
         return False
     t.inputs()[i]["address"] = addr
     t.inputs()[i]["type"] = 'p2pkh'
     txforsig = etr.Hash(t.serialize_preimage(i).decode('hex'))
     ecdsa_pub = get_ecdsa_verifying_key(pub)
     if not ecdsa_pub:
         return False
     try:
         verified = ecdsa_pub.verify_digest(sig, txforsig,
                                    sigdecode = sigdecode_der)
     except BadSignatureError, BadDigestError:
         return False
コード例 #5
0
ファイル: btc.py プロジェクト: AdamISZ/joinmarket_core
 def script_to_address(script):
     bin_script = binascii.unhexlify(script)
     res = etr.get_address_from_output_script(bin_script)
     if not res[0] == ebt.TYPE_ADDRESS:
         raise ValueError("Invalid script for bitcoin address")
     return res[1]
コード例 #6
0
 def script_to_address(script):
     bin_script = binascii.unhexlify(script)
     res = etr.get_address_from_output_script(bin_script)
     if not res[0] == ebt.TYPE_ADDRESS:
         raise ValueError("Invalid script for bitcoin address")
     return res[1]