def test_export_private_key_imported(self, mock_save_db):
     wallet = restore_wallet_from_text(
         'p2pkh:XGx8LpkmLRv9RiMvpYx965BCaQKQbeMVVqgAh7B5SQVdosQiKJ4i p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd',
         path='if_this_exists_mocking_failed_648151893',
         config=self.config)['wallet']
     cmds = Commands(config=self.config)
     # single address tests
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys', ("asdasd", ), wallet=wallet
                   )  # invalid addr, though might raise "not in wallet"
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys',
                   ("XdDHzW6aTeuQsraNXeEsPy5gAv1nUz7Y7Q", ),
                   wallet=wallet)  # not in wallet
     self.assertEqual(
         "p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd",
         cmds._run('getprivatekeys',
                   ("Xci5KnMVkHrqBQk9cU4jwmzJfgaTPopHbz", ),
                   wallet=wallet))
     # list of addresses tests
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys',
                   (['XmQ3Tn67Fgs7bwNXthtiEnBFh7ZeDG3aw2', 'asd'], ),
                   wallet=wallet)
     self.assertEqual([
         'p2pkh:XGx8LpkmLRv9RiMvpYx965BCaQKQbeMVVqgAh7B5SQVdosQiKJ4i',
         'p2pkh:XEn9o6oayjsRmoEQwDbvkrWVvjRNqPj3xNskJJPAKraJTrWuutwd'
     ],
                      cmds._run('getprivatekeys', ([
                          'XmQ3Tn67Fgs7bwNXthtiEnBFh7ZeDG3aw2',
                          'Xci5KnMVkHrqBQk9cU4jwmzJfgaTPopHbz'
                      ], ),
                                wallet=wallet))
 def test_export_private_key_deterministic(self, mock_save_db):
     wallet = restore_wallet_from_text(
         'hint shock chair puzzle shock traffic drastic note dinosaur mention suggest sweet',
         gap_limit=2,
         path='if_this_exists_mocking_failed_648151893',
         config=self.config)['wallet']
     cmds = Commands(config=self.config)
     # single address tests
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys', ("asdasd", ), wallet=wallet
                   )  # invalid addr, though might raise "not in wallet"
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys',
                   ("XdDHzW6aTeuQsraNXeEsPy5gAv1nUz7Y7Q", ),
                   wallet=wallet)  # not in wallet
     self.assertEqual(
         "p2pkh:XE5VEmWKQRK5N7kQMfw6KqoRp3ExKWgaeCKsxsmDFBxJJBgdQdTH",
         cmds._run('getprivatekeys',
                   ("XvmHzyQe8QWbvv17wc1PPMyJgaomknSp7W", ),
                   wallet=wallet))
     # list of addresses tests
     with self.assertRaises(Exception):
         cmds._run('getprivatekeys',
                   (['XvmHzyQe8QWbvv17wc1PPMyJgaomknSp7W', 'asd'], ),
                   wallet=wallet)
     self.assertEqual([
         'p2pkh:XE5VEmWKQRK5N7kQMfw6KqoRp3ExKWgaeCKsxsmDFBxJJBgdQdTH',
         'p2pkh:XGtpLmVGmaRnfvRvd4qxSeE7PqJoi9FUfkgPKD24PeoJsZCh1EXg'
     ],
                      cmds._run('getprivatekeys', ([
                          'XvmHzyQe8QWbvv17wc1PPMyJgaomknSp7W',
                          'XoEUKPPiPETff1S4oQmo4HGR1rYrRAX6uT'
                      ], ),
                                wallet=wallet))
Esempio n. 3
0
 def test_deserialize_transaction_unknown_spec_tx(self):
     cmds = Commands(config=None)
     with self.assertRaises(DashTxError):
         coro = cmds.deserialize(UNKNOWN_SPEC_TX)
         fut = asyncio.run_coroutine_threadsafe(coro,
                                                asyncio.get_event_loop())
         result = fut.result()
 def test_setconfig_non_auth_boolean(self):
     self.assertEqual(
         True,
         Commands._setconfig_normalize_value('show_console_tab', "true"))
     self.assertEqual(
         True,
         Commands._setconfig_normalize_value('show_console_tab', "True"))
 def test_setconfig_non_auth_number(self):
     self.assertEqual(
         7777, Commands._setconfig_normalize_value('rpcport', "7777"))
     self.assertEqual(
         7777, Commands._setconfig_normalize_value('rpcport', '7777'))
     self.assertAlmostEqual(
         Decimal(2.3),
         Commands._setconfig_normalize_value('somekey', '2.3'))
 def test_setconfig_non_auth_list(self):
     self.assertEqual(['file:///var/www/', 'https://electrum.org'],
                      Commands._setconfig_normalize_value(
                          'url_rewrite',
                          "['file:///var/www/','https://electrum.org']"))
     self.assertEqual(['file:///var/www/', 'https://electrum.org'],
                      Commands._setconfig_normalize_value(
                          'url_rewrite',
                          '["file:///var/www/","https://electrum.org"]'))
 def test_encrypt_decrypt(self, mock_save_db):
     wallet = restore_wallet_from_text(
         'p2pkh:XJvTzLoBy3jPMZFSTzK6KqTiNR3n5xbreSScEy7u9C8fEf1GZG3X',
         path='if_this_exists_mocking_failed_648151893',
         config=self.config)['wallet']
     cmds = Commands(config=self.config)
     cleartext = "asdasd this is the message"
     pubkey = "021f110909ded653828a254515b58498a6bafc96799fb0851554463ed44ca7d9da"
     ciphertext = cmds._run('encrypt', (pubkey, cleartext))
     self.assertEqual(
         cleartext, cmds._run('decrypt', (pubkey, ciphertext),
                              wallet=wallet))
 def test_setconfig_auth(self):
     self.assertEqual(
         "7777", Commands._setconfig_normalize_value('rpcuser', "7777"))
     self.assertEqual(
         "7777", Commands._setconfig_normalize_value('rpcuser', '7777'))
     self.assertEqual(
         "7777", Commands._setconfig_normalize_value('rpcpassword', '7777'))
     self.assertEqual(
         "2asd", Commands._setconfig_normalize_value('rpcpassword', '2asd'))
     self.assertEqual(
         "['file:///var/www/','https://electrum.org']",
         Commands._setconfig_normalize_value(
             'rpcpassword', "['file:///var/www/','https://electrum.org']"))
 def test_getprivatekeyforpath(self, mock_save_db):
     wallet = restore_wallet_from_text(
         'hint shock chair puzzle shock traffic drastic note dinosaur mention suggest sweet',
         gap_limit=2,
         path='if_this_exists_mocking_failed_648151893',
         config=self.config)['wallet']
     cmds = Commands(config=self.config)
     self.assertEqual(
         "p2pkh:cRVRdGfHrP9zb3cNTT1HGoG9JPcZfvjBMqUa2vTDMGDnKG1dNu24",
         cmds._run('getprivatekeyforpath', ([0, 10000], ), wallet=wallet))
     self.assertEqual(
         "p2pkh:cRVRdGfHrP9zb3cNTT1HGoG9JPcZfvjBMqUa2vTDMGDnKG1dNu24",
         cmds._run('getprivatekeyforpath', ("m/0/10000", ), wallet=wallet))
     self.assertEqual(
         "p2pkh:cS2exaULytoQ9CR89QHJDMg82NWKZ6f8rFboU7LGbHhdUMXxpPcd",
         cmds._run('getprivatekeyforpath', ("m/5h/100000/88h/7", ),
                   wallet=wallet))
Esempio n. 10
0
    def test_convert_xkey(self):
        cmds = Commands(config=self.config)
        xpubs = {
            ("tpubD8p5qNfjczgTGbh9qgNxsbFgyhv8GgfVkmp3L88qtRm5ibUYiDVCrn6WYfnGey5XVVw6Bc5QNQUZW5B4jFQsHjmaenvkFUgWtKtgj5AdPm9",
             "standard"),
        }
        for xkey1, xtype1 in xpubs:
            for xkey2, xtype2 in xpubs:
                self.assertEqual(xkey2,
                                 cmds._run('convert_xkey', (xkey1, xtype2)))

        xprvs = {
            ("tprv8c83gxdVUcznP8fMx2iNUBbaQgQC7MUbBUDG3c6YU9xgt7Dn5pfcgHUeNZTAvuYmNgVHjyTzYzGWwJr7GvKCm2FkPaaJipyipbfJeB3tdPW",
             "standard"),
        }
        for xkey1, xtype1 in xprvs:
            for xkey2, xtype2 in xprvs:
                self.assertEqual(xkey2,
                                 cmds._run('convert_xkey', (xkey1, xtype2)))
Esempio n. 11
0
    def test_convert_xkey(self):
        cmds = Commands(config=self.config)
        xpubs = {
            ("xpub6CCWFbvCbqF92kGwm9nV7t7RvVoQUKaq5USMdyVP6jvv1NgN52KAX6NNYCeE8Ca7JQC4K5tZcnQrubQcjJ6iixfPs4pwAQJAQgTt6hBjg11",
             "standard"),
        }
        for xkey1, xtype1 in xpubs:
            for xkey2, xtype2 in xpubs:
                self.assertEqual(xkey2,
                                 cmds._run('convert_xkey', (xkey1, xtype2)))

        xprvs = {
            ("xprv9yD9r6PJmTgqpGCUf8FUkkAhNTxv4rryiFWkqb5mYQPw8aMDXUzuyJ3tgv5vUqYkdK1E6Q5jKxPss4HkMBYV4q8AfG8t7rxgyS4xQX4ndAm",
             "standard"),
        }
        for xkey1, xtype1 in xprvs:
            for xkey2, xtype2 in xprvs:
                self.assertEqual(xkey2,
                                 cmds._run('convert_xkey', (xkey1, xtype2)))
Esempio n. 12
0
 def test_serialize(self):
     cmds = Commands(config=self.config)
     jsontx = {
         "inputs": [{
             "prevout_hash":
             "9d221a69ca3997cbeaf5624d723e7dc5f829b1023078c177d37bdae95f37c539",
             "prevout_n":
             1,
             "value":
             1000000,
             "privkey":
             "p2pkh:cVDXzzQg6RoCTfiKpe8MBvmm5d5cJc6JLuFApsFDKwWa6F5TVHpD"
         }],
         "outputs": [{
             "address": "yVMyvBvALMa12EJaqhEwu4tJ5h4tWcn9Yz",
             "value": 990000
         }]
     }
     self.assertEqual(
         "020000000139c5375fe9da7bd377c1783002b129f8c57d3e724d62f5eacb9739ca691a229d010000006a4730440220724a67810148fdc9474a71fafd116065d918c494dbabd4ad979a597045e9291c0220728fc15a0422cdb2624d6642fdd2e3c817131c5563309c8a6ac7a02846a082000121021f110909ded653828a254515b58498a6bafc96799fb0851554463ed44ca7d9dafeffffff01301b0f00000000001976a9146333e61a83cf112553c2f93629dbc9bba70b594f88ac00000000",
         cmds._run('serialize', (jsontx, )))
Esempio n. 13
0
 def test_serialize_custom_nsequence(self):
     cmds = Commands(config=self.config)
     jsontx = {
         "inputs": [{
             "prevout_hash":
             "9d221a69ca3997cbeaf5624d723e7dc5f829b1023078c177d37bdae95f37c539",
             "prevout_n": 1,
             "value": 1000000,
             "privkey":
             "p2pkh:cVDXzzQg6RoCTfiKpe8MBvmm5d5cJc6JLuFApsFDKwWa6F5TVHpD",
             "nsequence": 0xfffffffd
         }],
         "outputs": [{
             "address": "yVMyvBvALMa12EJaqhEwu4tJ5h4tWcn9Yz",
             "value": 990000
         }]
     }
     print(cmds._run('serialize', (jsontx, )))
     self.assertEqual(
         "020000000139c5375fe9da7bd377c1783002b129f8c57d3e724d62f5eacb9739ca691a229d010000006a4730440220100ca9083e11fb3adfc201591c8de7d6c8f6da70cddf090416ed4e7d54a1277702200c86304c89a187075d4992eb4741794f28aef08c1d025a009fb52d9ada8039860121021f110909ded653828a254515b58498a6bafc96799fb0851554463ed44ca7d9dafdffffff01301b0f00000000001976a9146333e61a83cf112553c2f93629dbc9bba70b594f88ac00000000",
         cmds._run('serialize', (jsontx, )))
Esempio n. 14
0
    def test_serialize_command_with_extra_payload(self):
        cmds = Commands(config=None)
        test_json_tx = {
            'inputs': [],
            'outputs': [],
        }
        res = cmds._run('serialize', (test_json_tx, ))
        assert res == '02000000000000000000'

        test_json_tx.update({'extra_payload': ''})
        res = cmds._run('serialize', (test_json_tx, ))
        assert res == '02000000000000000000'

        test_json_tx.update({'extra_payload': {'key': 'value'}})
        res = cmds._run('serialize', (test_json_tx, ))
        assert res == {
            'error':
            'Transactions with extra payload can not'
            ' be created from serialize command'
        }

        test_json_tx.update({'extra_payload': '0b0a'})
        res = cmds._run('serialize', (test_json_tx, ))
        assert res == {
            'error':
            'Transactions with extra payload can not'
            ' be created from serialize command'
        }
Esempio n. 15
0
daemon = Daemon(config, listen_jsonrpc=False)
network = daemon.network
assert network.asyncio_loop.is_running()

# get wallet on disk
wallet_dir = os.path.dirname(config.get_wallet_path())
wallet_path = os.path.join(wallet_dir, "test_wallet")
if not os.path.exists(wallet_path):
    create_new_wallet(path=wallet_path, config=config)

# open wallet
wallet = daemon.load_wallet(wallet_path, password=None, manual_upgrades=False)
wallet.start_network(network)

# you can use ~CLI commands by accessing command_runner
command_runner = Commands(config=config, daemon=daemon, network=network)
print(
    "balance",
    network.run_from_another_thread(command_runner.getbalance(wallet=wallet)))
print(
    "addr",
    network.run_from_another_thread(
        command_runner.getunusedaddress(wallet=wallet)))
print(
    "gettx",
    network.run_from_another_thread(
        command_runner.gettransaction(
            "d8ee577f6b864071c6ccbac1e30d0d19edd6fa9a171be02b85a73fd533f2734d")
    ))

# but you might as well interact with the underlying methods directly
Esempio n. 16
0
 def test_deserialize_transaction_cbtx(self):
     cmds = Commands(config=None)
     deser = cmds._run('deserialize', (CB_TX_V2, ))
     assert deser['extra_payload'] == CB_TX_V2_D
Esempio n. 17
0
 def test_deserialize_transaction_v2(self):
     cmds = Commands(config=None)
     deser = cmds._run('deserialize', (V2_TX, ))
     assert deser['extra_payload'] == ''
Esempio n. 18
0
 def test_setconfig_non_auth_number_as_string(self):
     self.assertEqual(
         "7777", Commands._setconfig_normalize_value('somekey', "'7777'"))