Ejemplo n.º 1
0
 def test_axe_tx_sub_tx_reset_key(self):
     tx = transaction.Transaction(SUB_TX_RESET_KEY)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 10
     extra = deser['extra_payload']
     assert (str(extra))
     assert extra.version == 1
     assert len(extra.regTxHash) == 32
     assert extra.regTxHash == bfh(
         'd384e42374e8abfeffffff01570b000000a40100b67ffbbd095de31ea3844675')
     assert len(extra.hashPrevSubTx) == 32
     assert extra.hashPrevSubTx == bfh(
         'af3e98e9601210293360bf2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0')
     assert extra.creditFee == 1000
     assert len(extra.newPubKey) == 48
     assert extra.newPubKey == bfh(
         '601210293360bf2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0103f7'
         '61caf3e98e9601210293360bf2a2e810673')
     assert len(extra.payloadSig) == 96
     assert extra.payloadSig == bfh(
         '412bc6e8e0e358f3fb7bdbe9a667b3d0103f761caf3e98e9601210293360b'
         'f2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0103f761caf3e98e960'
         '1210293360bf2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0103f761'
         'cabcdefab')
     ser = tx.serialize()
     assert ser == SUB_TX_RESET_KEY
Ejemplo n.º 2
0
    def on_receive(self, keyhash, message):
        self.print_error("signal arrived for", keyhash)
        for key, _hash, window in self.keys:
            if _hash == keyhash:
                break
        else:
            self.print_error("keyhash not found")
            return

        wallet = window.wallet
        if wallet.has_password():
            password = window.password_dialog('An encrypted transaction was retrieved from cosigning pool.\nPlease enter your password to decrypt it.')
            if not password:
                return
        else:
            password = None
            if not window.question(_("An encrypted transaction was retrieved from cosigning pool.\nDo you want to open it now?")):
                return

        xprv = wallet.keystore.get_master_private_key(password)
        if not xprv:
            return
        try:
            k = bitcoin.deserialize_xprv(xprv)[-1].encode('hex')
            EC = bitcoin.EC_KEY(k.decode('hex'))
            message = EC.decrypt_message(message)
        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            window.show_message(str(e))
            return

        self.listener.clear(keyhash)
        tx = transaction.Transaction(message)
        show_transaction(tx, window, prompt_if_unsaved=True)
Ejemplo n.º 3
0
 def test_axe_tx_pro_up_serv_tx(self):
     tx = transaction.Transaction(PRO_UP_SERV_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 2
     extra = deser['extra_payload']
     assert (str(extra))
     assert extra.version == 1
     assert len(extra.proTxHash) == 32
     assert extra.proTxHash == bfh(
         '3c6dca244f49f19d3f09889753ffff1fec5bb8f9f5bd5bc09dabd999da21198f')
     assert extra.ipAddress == '95.183.53.128'
     assert extra.port == 10001
     assert extra.scriptOperatorPayout == bfh(
         '76a91421851058431a7d722e8e8dd9509e7f2b8e7042ec88ac')
     assert len(extra.inputsHash) == 32
     assert extra.inputsHash == bfh(
         'efcfe3d578914bb48c6bd71b3459d384e4237446d521c9e2c6'
         'b6fcf019b5aafc')
     assert len(extra.payloadSig) == 96
     assert extra.payloadSig == bfh(
         '99443fe14f644cfa47086e8897cf7b546a67723d4a8ec5353a82f962a96e'
         'c3cea328343b647aace2897d6eddd0b8c8ee0f2e56f6733aed2e9f0006ca'
         'afa6fc21c18a013c619d6e37af8d2f0985e3b769abc38ffa60e46c365a38'
         'd9fa0d44fd62')
     ser = tx.serialize()
     assert ser == PRO_UP_SERV_TX
Ejemplo n.º 4
0
 def test_axe_tx_pro_up_reg_tx(self):
     tx = transaction.Transaction(PRO_UP_REG_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 3
     extra = deser['extra_payload']
     assert (str(extra))
     assert extra.version == 1
     assert len(extra.proTxHash) == 32
     assert extra.proTxHash == bfh(
         'aeb817f94b8e699b58130a53d2fbe98d5519c2abe3b15e6f36c9abeb32e4dcce')
     assert extra.mode == 0
     assert len(extra.PubKeyOperator) == 48
     assert extra.PubKeyOperator == bfh(
         '1061eb559a64427ad239830742ef59591cdbbdffda7d3f5e7a2d95b9607a'
         'd80e389191e44c59ea5987b85e6d0e3eb527')
     assert len(extra.KeyIdVoting) == 20
     assert extra.KeyIdVoting == bfh(
         'b9e198fa7a745913c9278ec993d4472a95dac425')
     assert extra.scriptPayout == bfh(
         '76a914eebbacffff3a55437803e0efb68a7d591e0409d188ac')
     assert len(extra.inputsHash) == 32
     assert extra.inputsHash == bfh(
         '0eb0067e6ccdd2acb96e7279113702218f3f0ab6f2287e14c11c5be6f2051d5a')
     assert extra.payloadSig == bfh(
         '20cb00124d838b02207097048cb668244cd79df825eb2d4d211fd2c4604c1'
         '8b30e1ae9bb654787144d16856676efff180889f05b5c9121a483b4ae3f0e'
         'a0ff3faf')
     ser = tx.serialize()
     assert ser == PRO_UP_REG_TX
Ejemplo n.º 5
0
 def test_axe_tx_v2(self):
     tx = transaction.Transaction(V2_TX)
     deser = tx.deserialize()
     assert deser['version'] == 2
     assert deser['tx_type'] == 0
     assert deser['extra_payload'] == b''
     ser = tx.serialize()
     assert ser == V2_TX
Ejemplo n.º 6
0
 def test_axe_tx_wrong_spec_tx(self):
     tx = transaction.Transaction(WRONG_SPEC_TX)
     deser = tx.deserialize()
     assert deser['version'] == 12255234
     assert deser['tx_type'] == 0
     extra = deser['extra_payload']
     assert extra == b''
     ser = tx.serialize()
     assert ser == WRONG_SPEC_TX
Ejemplo n.º 7
0
 def test_axe_tx_sub_tx_topup(self):
     tx = transaction.Transaction(SUB_TX_TOPUP)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 9
     extra = deser['extra_payload']
     assert extra.version == 1
     assert len(extra.regTxHash) == 32
     assert extra.regTxHash == bfh(
         'd384e42374e8abfeffffff01570b000000a40100b67ffbbd095de31ea3844675')
     ser = tx.serialize()
     assert ser == SUB_TX_TOPUP
Ejemplo n.º 8
0
 def test_axe_tx_cb_tx(self):
     tx = transaction.Transaction(CB_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 5
     extra = deser['extra_payload']
     assert extra.version == 1
     assert extra.height == 264132
     assert len(extra.merkleRootMNList) == 32
     assert extra.merkleRootMNList == bfh(
         '76629a6e42fb519188f65889fd3ac0201be87aa227462b5643e8bb2ec1d7a82a')
     ser = tx.serialize()
     assert ser == CB_TX
    def test_tx_signed(self):
        expected = {
            'inputs': [{
                'address': None,
                'num_sig': 0,
                'prevout_hash':
                '94ff0738bee075823a566db3e1011f1adae98c6e31950da4475126d81b4fb580',
                'prevout_n': 0,
                'scriptSig':
                '473044022057e5b082ef4aaeae33562766012a2fbc85869b8e625255e2111df4f9d39c971302200c07a8f1d96d079710e6451a87ba3007dcacc1c1f322bf879bf19e584c1f5216012103aa69e4e3f9fddc3e087491996e9d59eae908e650c12a75054d2249e6573ff52a',
                'sequence': 4294967294,
                'type': 'unknown'
            }],
            'lockTime':
            64577,
            'outputs': [{
                'address': 'PQCuFncFVzYhuoyv9MCSE5nQU2gwr56uh4',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914ab4b96c435fd4ac967b27745fee19982a510430888ac',
                'type': TYPE_ADDRESS,
                'value': 99999040
            }],
            'partial':
            False,
            'version':
            1,
            'tx_type':
            0,
            'extra_payload':
            b''
        }
        tx = transaction.Transaction(signed_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)
        self.assertEqual(tx.as_dict(), {
            'hex': signed_blob,
            'complete': True,
            'final': True
        })

        self.assertEqual(tx.serialize(), signed_blob)

        tx.update_signatures(signed_blob_signatures)

        self.assertEqual(tx.estimated_total_size(), 191)
        self.assertEqual(tx.estimated_base_size(), 191)
        self.assertEqual(tx.estimated_weight(), 764)
        self.assertEqual(tx.estimated_size(), 191)
Ejemplo n.º 10
0
 def test_axe_tx_unknown_spec_tx(self):
     tx = transaction.Transaction(UNKNOWN_SPEC_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 187
     extra = deser['extra_payload']
     assert extra == bfh(
         '0100d384e42374e8abfeffffff01570b000000a40100b67ffbbd095de31e'
         'a3844675af3e98e9601210293360bf2a2e810673412bc6e8e0e358f3fb7b'
         'dbe9a12bc6e8e0e358f3fb7bdbe9a62bc6e8e0e358f3fb7bdbe9a667b3d0'
         '103f761caf3e98e9601210293360bf2a2e810673412bc6e8e0e358f3fb7b'
         'dbe9a667b3d0103f761caf3e98e9601210293360bf2a2e810673412bc6e8'
         'e0e358f3fb7bdbe9a667b3d0103f761cabcdefab')
     ser = tx.serialize()
     assert ser == UNKNOWN_SPEC_TX
Ejemplo n.º 11
0
    def on_receive(self, keyhash, message):
        self.print_error("signal arrived for", keyhash)
        for key, _hash, window in self.keys:
            if _hash == keyhash:
                break
        else:
            self.print_error("keyhash not found")
            return

        wallet = window.wallet
        if isinstance(wallet.keystore, keystore.Hardware_KeyStore):
            window.show_warning(
                _('An encrypted transaction was retrieved from cosigning pool.'
                  ) + '\n' +
                _('However, hardware wallets do not support message decryption, '
                  'which makes them not compatible with the current design of cosigner pool.'
                  ))
            return
        elif wallet.has_keystore_encryption():
            password = window.password_dialog(
                _('An encrypted transaction was retrieved from cosigning pool.'
                  ) + '\n' + _('Please enter your password to decrypt it.'))
            if not password:
                return
        else:
            password = None
            if not window.question(
                    _("An encrypted transaction was retrieved from cosigning pool."
                      ) + '\n' + _("Do you want to open it now?")):
                return

        xprv = wallet.keystore.get_master_private_key(password)
        if not xprv:
            return
        try:
            k = bitcoin.deserialize_xprv(xprv)[-1]
            EC = ecc.ECPrivkey(k)
            message = bh2u(EC.decrypt_message(message))
        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            window.show_error(_('Error decrypting message') + ':\n' + str(e))
            return

        self.listener.clear(keyhash)
        tx = transaction.Transaction(message)
        show_transaction(tx, window, prompt_if_unsaved=True)
Ejemplo n.º 12
0
 def test_axe_tx_sub_tx_register(self):
     tx = transaction.Transaction(SUB_TX_REGISTER)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 8
     extra = deser['extra_payload']
     assert extra.version == 1
     assert extra.userName == b'abc'
     assert len(extra.pubKey) == 48
     assert extra.pubKey == bfh(
         '8e7042ec88acefcfe3d578914bb48c6bd71b3459d384e42374e8abfeffff'
         'ff01570b0000000000001976a91490c5ce9d')
     assert len(extra.payloadSig) == 96
     assert extra.payloadSig == bfh(
         '8bc992a88ac00000000a40100b67ffbbd095de31ea38446754e8abfeffff'
         'ff01570b0000000000001976a91490c5ce9d8bc992a88ac00000000a4010'
         '0b67ffbbd095de31ea38446754e8abfeffffff01570b0000000000001976'
         'a91490c5ce9d')
     ser = tx.serialize()
     assert ser == SUB_TX_REGISTER
Ejemplo n.º 13
0
 def test_axe_tx_sub_tx_close_account(self):
     tx = transaction.Transaction(SUB_TX_CLOSE_ACCOUNT)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 11
     extra = deser['extra_payload']
     assert extra.version == 1
     assert len(extra.regTxHash) == 32
     assert extra.regTxHash == bfh(
         'd384e42374e8abfeffffff01570b000000a40100b67ffbbd095de31ea3844675')
     assert len(extra.hashPrevSubTx) == 32
     assert extra.hashPrevSubTx == bfh(
         'af3e98e9601210293360bf2a2e810673412bc6e8e0e358f3fb7bdbe9a12bc6e8')
     assert extra.creditFee == 1000
     assert len(extra.payloadSig) == 96
     assert extra.payloadSig == bfh(
         'a62bc6e8e0e358f3fb7bdbe9a667b3d0103f761caf3e98e9601210293360b'
         'f2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0103f761caf3e98e960'
         '1210293360bf2a2e810673412bc6e8e0e358f3fb7bdbe9a667b3d0103f761'
         'cabcdefab')
     ser = tx.serialize()
     assert ser == SUB_TX_CLOSE_ACCOUNT
Ejemplo n.º 14
0
 def test_axe_tx_pro_up_rev_tx(self):
     tx = transaction.Transaction(PRO_UP_REV_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 4
     extra = deser['extra_payload']
     assert extra.version == 1
     assert len(extra.proTxHash) == 32
     assert extra.proTxHash == bfh(
         'b67ffbbd095de31ea38446754b6bf251287936d2881d58b7c4efae0b54c75e9f')
     assert extra.reason == 0
     assert len(extra.inputsHash) == 32
     assert extra.inputsHash == bfh(
         'eb073521b60306717f1d4feb3e9022f886b97bf981137684716a7d3d7e45b7fe')
     assert len(extra.payloadSig) == 96
     assert extra.payloadSig == bfh(
         '83f4bb5530f7c5954e8b1ad50a74a9e1d65dcdcbe4acb8cbe3671abc7911'
         'e8c3954856c4da7e5fd242f2e4f5546f08d90849245bc593d1605654e1a9'
         '9cd0a79e9729799742c48d4920044666ad25a85fd093559c43e4900e634c'
         '371b9b8d89ba')
     ser = tx.serialize()
     assert ser == PRO_UP_REV_TX
Ejemplo n.º 15
0
 def test_axe_tx_pro_reg_tx(self):
     tx = transaction.Transaction(PRO_REG_TX)
     deser = tx.deserialize()
     assert deser['version'] == 3
     assert deser['tx_type'] == 1
     extra = deser['extra_payload']
     assert (str(extra))
     assert extra.version == 1
     assert extra.type == 0
     assert extra.mode == 0
     assert len(extra.collateralOutpoint.hash) == 32
     assert extra.collateralOutpoint.hash == bfh(
         '4de1afa0a321bc88c34978d4eeba739256b86f8d8cdf47651b6f60e451f0a3de')
     assert extra.collateralOutpoint.index == 1
     assert extra.ipAddress == '18.202.52.170'
     assert extra.port == 29999
     assert len(extra.KeyIdOwner) == 20
     assert extra.KeyIdOwner == bfh(
         '2b3edeed6842db1f59cf35de1ab5721094f049d0')
     assert len(extra.PubKeyOperator) == 48
     assert extra.PubKeyOperator == bfh(
         '00ab986c589053b3f3bd720724e75e18581afdca54bce80d14750b1bcf920215'
         '8fe6c596ce8391815265747bd4a2009e')
     assert len(extra.KeyIdVoting) == 20
     assert extra.KeyIdVoting == bfh(
         '2b3edeed6842db1f59cf35de1ab5721094f049d0')
     assert extra.operatorReward == 0
     assert extra.scriptPayout == bfh(
         '76a9149bf5948b901a1e3e54e42c6e10496a17cd4067e088ac')
     assert len(extra.inputsHash) == 32
     assert extra.inputsHash == bfh(
         '54d046585434668b4ee664c597864248b8a6aac33a7b2f4fcd1cc1b5da474a8a')
     assert extra.payloadSig == bfh(
         '1fc1617ae83406c92a9132f14f9fff1487f2890f401e776fdddd639bc505'
         '5c456268cf7497400d3196109c8cd31b94732caf6937d63de81d9a5be4db'
         '5beb83f9aa')
     ser = tx.serialize()
     assert ser == PRO_REG_TX
    def test_tx_unsigned(self):
        expected = {
            'inputs': [{
                'type':
                'p2pkh',
                'address':
                'PQMDbX7KC3Z6nkpkptBb19vkoEaaFo5K5o',
                'num_sig':
                1,
                'prevout_hash':
                '94ff0738bee075823a566db3e1011f1adae98c6e31950da4475126d81b4fb580',
                'prevout_n':
                0,
                'pubkeys': [
                    '03aa69e4e3f9fddc3e087491996e9d59eae908e650c12a75054d2249e6573ff52a'
                ],
                'scriptSig':
                '01ff4c53ff0488b21e000000000000000000d6f1f7cd3d082daddffc75e8e558e4d33efc1c2f0b1cf6d52cd8719621e7c49e03123e1dc268988db79c47f91dfc00b328f666c375dd9e7b5d1d2bb7658a3b027e00000000',
                'sequence':
                4294967294,
                'signatures': [None],
                'x_pubkeys': [
                    'ff0488b21e000000000000000000d6f1f7cd3d082daddffc75e8e558e4d33efc1c2f0b1cf6d52cd8719621e7c49e03123e1dc268988db79c47f91dfc00b328f666c375dd9e7b5d1d2bb7658a3b027e00000000'
                ]
            }],
            'lockTime':
            64577,
            'outputs': [{
                'address': 'PQCuFncFVzYhuoyv9MCSE5nQU2gwr56uh4',
                'prevout_n': 0,
                'scriptPubKey':
                '76a914ab4b96c435fd4ac967b27745fee19982a510430888ac',
                'type': TYPE_ADDRESS,
                'value': 99999040
            }],
            'partial':
            True,
            'version':
            1,
            'tx_type':
            0,
            'extra_payload':
            b''
        }
        tx = transaction.Transaction(unsigned_blob)
        self.assertEqual(tx.deserialize(), expected)
        self.assertEqual(tx.deserialize(), None)

        self.assertEqual(tx.as_dict(), {
            'hex': unsigned_blob,
            'complete': False,
            'final': True
        })
        self.assertEqual(tx.get_outputs(),
                         [('PQCuFncFVzYhuoyv9MCSE5nQU2gwr56uh4', 99999040)])
        self.assertEqual(tx.get_output_addresses(),
                         ['PQCuFncFVzYhuoyv9MCSE5nQU2gwr56uh4'])

        self.assertTrue(tx.has_address('PQCuFncFVzYhuoyv9MCSE5nQU2gwr56uh4'))
        self.assertTrue(tx.has_address('PQMDbX7KC3Z6nkpkptBb19vkoEaaFo5K5o'))
        self.assertFalse(
            tx.has_address('PUFpXCipFhCM1n3incCvY1pdJnsuBYGXopNoZ'))

        self.assertEqual(tx.serialize(), unsigned_blob)

        tx.update_signatures(signed_blob_signatures)
        self.assertEqual(tx.raw, signed_blob)

        tx.update(unsigned_blob)
        tx.raw = None
        blob = str(tx)
        self.assertEqual(transaction.deserialize(blob), expected)
 def _run_naive_tests_on_tx(self, raw_tx, txid):
     tx = transaction.Transaction(raw_tx)
     self.assertEqual(txid, tx.txid())
     self.assertEqual(raw_tx, tx.serialize())
     self.assertTrue(tx.estimated_size() >= 0)
 def test_version_field(self):
     tx = transaction.Transaction(v2_blob)
     self.assertEqual(
         tx.txid(),
         "b97f9180173ab141b61b9f944d841e60feec691d6daab4d4d932b24dd36606fe")
Ejemplo n.º 19
0
 def test_axe_tx_unknown_spec_tx(self):
     tx = transaction.Transaction(UNKNOWN_SPEC_TX)
     with self.assertRaises(AxeTxError):
         tx.deserialize()