Fix encoding errors on send_transaction()

pull/66/head v0.7.2
Michał Sałaban 4 years ago
parent 261cd342dd
commit 3ad3a6082b

@ -5,6 +5,7 @@ import operator
import json import json
import logging import logging
import requests import requests
import six
from .. import exceptions from .. import exceptions
from ..account import Account from ..account import Account
@ -67,7 +68,7 @@ class JSONRPCDaemon(object):
def send_transaction(self, blob, relay=True): def send_transaction(self, blob, relay=True):
res = self.raw_request('/sendrawtransaction', { res = self.raw_request('/sendrawtransaction', {
'tx_as_hex': binascii.hexlify(blob), 'tx_as_hex': six.ensure_text(binascii.hexlify(blob)),
'do_not_relay': not relay}) 'do_not_relay': not relay})
if res['status'] == 'OK': if res['status'] == 'OK':
return res return res

@ -0,0 +1,18 @@
{
"credits": 0,
"double_spend": false,
"fee_too_low": false,
"invalid_input": false,
"invalid_output": false,
"low_mixin": false,
"not_rct": false,
"not_relayed": false,
"overspend": false,
"reason": "",
"sanity_check_failed": false,
"status": "OK",
"too_big": false,
"too_few_outputs": false,
"top_hash": "",
"untrusted": false
}

@ -1,9 +1,11 @@
import decimal import decimal
import os
import responses import responses
from monero.const import NET_STAGE from monero.const import NET_STAGE
from monero.daemon import Daemon from monero.daemon import Daemon
from monero.backends.jsonrpc import JSONRPCDaemon from monero.backends.jsonrpc import JSONRPCDaemon
from monero.transaction import Transaction
from .base import JSONTestCase from .base import JSONTestCase
@ -11,6 +13,7 @@ class JSONRPCDaemonTestCase(JSONTestCase):
jsonrpc_url = 'http://127.0.0.1:18081/json_rpc' jsonrpc_url = 'http://127.0.0.1:18081/json_rpc'
mempool_url = 'http://127.0.0.1:18081/get_transaction_pool' mempool_url = 'http://127.0.0.1:18081/get_transaction_pool'
transactions_url = 'http://127.0.0.1:18081/get_transactions' transactions_url = 'http://127.0.0.1:18081/get_transactions'
sendrawtransaction_url = 'http://127.0.0.1:18081/sendrawtransaction'
data_subdir = 'test_jsonrpcdaemon' data_subdir = 'test_jsonrpcdaemon'
def setUp(self): def setUp(self):
@ -110,3 +113,18 @@ class JSONRPCDaemonTestCase(JSONTestCase):
"035a1cfadd2f80124998f5af8c7bb6703743a4f322d0a20b7f7b502956ada59d") "035a1cfadd2f80124998f5af8c7bb6703743a4f322d0a20b7f7b502956ada59d")
self.assertIsNone(txs[3].height) self.assertIsNone(txs[3].height)
self.assertEqual(txs[3].size, 2724) self.assertEqual(txs[3].size, 2724)
@responses.activate
def test_send_transaction(self):
path = os.path.join(
os.path.dirname(__file__),
"data",
self.data_subdir,
"0e8fa9202e0773333360e5b9e8fb8e94272c16a8a58b6fe7cf3b4327158e3a44.tx")
responses.add(responses.POST, self.sendrawtransaction_url,
json=self._read('test_send_transaction.json'),
status=200)
tx = Transaction(
blob=open(path, "rb").read())
rsp = self.daemon.send_transaction(tx)
self.assertEqual(rsp["status"], "OK")

@ -4,6 +4,7 @@ import logging
import operator import operator
import re import re
import sys import sys
import six
from monero.backends.jsonrpc import JSONRPCDaemon from monero.backends.jsonrpc import JSONRPCDaemon
from monero.daemon import Daemon from monero.daemon import Daemon
@ -36,9 +37,9 @@ elif args.verbosity > 1:
level = logging.DEBUG level = logging.DEBUG
logging.basicConfig(level=level, format="%(asctime)-15s %(message)s") logging.basicConfig(level=level, format="%(asctime)-15s %(message)s")
if args.tx_filenames: if args.tx_filenames:
blobs = [(f, open(f, 'r').read()) for f in args.tx_filenames] blobs = [(f, open(f, 'rb').read()) for f in args.tx_filenames]
else: else:
blobs = [('transaction', sys.stdin.read())] blobs = [('transaction', sys.stdin.buffer.read() if six.PY3 else sys.stdin.read())]
d = Daemon(JSONRPCDaemon(timeout=args.timeout, proxy_url=args.proxy_url, **args.daemon_rpc_url)) d = Daemon(JSONRPCDaemon(timeout=args.timeout, proxy_url=args.proxy_url, **args.daemon_rpc_url))
for name, blob in blobs: for name, blob in blobs:
logging.debug("Sending {}".format(name)) logging.debug("Sending {}".format(name))

@ -63,6 +63,6 @@ for tx in txns:
if args.outdir: if args.outdir:
outname = os.path.join(args.outdir, tx.hash + '.tx') outname = os.path.join(args.outdir, tx.hash + '.tx')
outfile = open(outname, 'wb') outfile = open(outname, 'wb')
outfile.write(tx.blob.encode()) outfile.write(tx.blob)
outfile.close() outfile.close()
print(u"Transaction saved to {}".format(outname)) print(u"Transaction saved to {}".format(outname))

Loading…
Cancel
Save