From 3ad3a6082ba237485ba410cb62b9642aea93a84c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sa=C5=82aban?= Date: Mon, 13 Apr 2020 11:43:01 +0200 Subject: [PATCH] Fix encoding errors on send_transaction() --- monero/backends/jsonrpc.py | 3 ++- ...8fb8e94272c16a8a58b6fe7cf3b4327158e3a44.tx | Bin 0 -> 2598 bytes .../test_send_transaction.json | 18 ++++++++++++++++++ tests/test_jsonrpcdaemon.py | 18 ++++++++++++++++++ utils/pushtx.py | 5 +++-- utils/transfer.py | 2 +- 6 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 tests/data/test_jsonrpcdaemon/0e8fa9202e0773333360e5b9e8fb8e94272c16a8a58b6fe7cf3b4327158e3a44.tx create mode 100644 tests/data/test_jsonrpcdaemon/test_send_transaction.json diff --git a/monero/backends/jsonrpc.py b/monero/backends/jsonrpc.py index 7203ae4..4247a4d 100644 --- a/monero/backends/jsonrpc.py +++ b/monero/backends/jsonrpc.py @@ -5,6 +5,7 @@ import operator import json import logging import requests +import six from .. import exceptions from ..account import Account @@ -67,7 +68,7 @@ class JSONRPCDaemon(object): def send_transaction(self, blob, relay=True): 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}) if res['status'] == 'OK': return res diff --git a/tests/data/test_jsonrpcdaemon/0e8fa9202e0773333360e5b9e8fb8e94272c16a8a58b6fe7cf3b4327158e3a44.tx b/tests/data/test_jsonrpcdaemon/0e8fa9202e0773333360e5b9e8fb8e94272c16a8a58b6fe7cf3b4327158e3a44.tx new file mode 100644 index 0000000000000000000000000000000000000000..6e4ad39b310a2eb0b3b9aee5040a8b4c0ba3dd0b GIT binary patch literal 2598 zcmV+>3fc7n00II43*DC~$**CRuL;)~zcH-`(gA-#vIccnjlD}0!cUu z`YSz+{nUf|LdiJtTpmnb$#SK|QbJK`(Tf5A0&V&j$q*z?`5PLKx2H@zPiJd;eYF0d zpVl7D+e!u3rT_wPu1FAiTnn>O+$9%3_3);VxX<M8C11fY}AgamH+vXFr+vh1oO zUnZedd;m-fugP!kral5Z1@+JmT~-x_AYpuI&tjR4Y85Wqpq-!Vym8~`VpunG^3+Ij z6)Fx` zmoRqzSws}xCleRs@!E(5E0W-b-`@mIjbWfeI6>nm4E@@Tzcsgh!p_O0vbGa|n1SoE zfk6icykfly9l8jmCFkRFRVtQQh@{wsazhaWk5&H1=EEAO_(a)c22IhQ6=znF{`M3` z?9ha50wT!6=Yw2#UpR`L$U2S@M?iH@;~E*<)!lWxm1LJlBg>bEXqd_NzWY`V59Ha| z<8!bhqd}2~3c6?7m_qOy5LjXQ^te?vf5`~3&k>9^} zFO4LDCyz&^Q46`ehSPY>%c%w*&huI|4efC%mDgS4 zFp9Zz`a_S!WUF3%Y7>v!?s;f)2cB*0P9T}8z1&iQxDU|O8!rq}rCA<7N^Q*6WvI^( ziWOSi42+6tmhg`#Jm2%qD};+@Y8sBvC8e>pVW@`3<`P)GW%tSj@K_%rq|wRoVVmsR0C^S$ zeJ?#P@PwnCUR|b3q_teA+&s{UM;09_Fvx+H1&M;Y)@nEnXMBDr6E)57?b+;GW3_I_+~6J1zDfSU zvjcO6A^~|$q^mh)4~e+^jYe8p@7MwWHLNCLD3GAMArM&N;sn(Kp#ZM10koAf|HJG? z>)OuxHkgpYuHg!@3kv%>)mL;FKp10<@r2t}Epg%_I8`A$v4X-> z^n*WY3%Ko;1_$$9XnMs)X+RUm(OaSru0Y@~60(+!N2vOu4Ev%k|IDz5y<&}to5Ms| zmO-|i9YZLI;TA<$*j2@P4rFc>2`Y7^uP?M*5di~804l0CRH~FcMxg#WUb%{E3M0L* ze5qUA?q=M~Yff7Elr(W)Uy9*l~t)Qz1K3??Uwb3Y`Lv^t4_pc$?BR zajTIfiIES~cde88ln}>?_j+3T3(yFjX%=CN1PKcqea7u2+7A0W>pkd7r7fZp>Dw%# z2@@Cs(=mEz(pM&+8`MIfC*sLteb2@gtd1;usqWbH0+Wo6=!!zJt&`r_RsZrh-kHBC zqTfz^Z`G1q%YkDO1H0zlkq4GI>btW!(I61dV#=139!f&QzX!k3S=RQ}4aukgZi|W^ zMV7a8n8Az67TFm|`5-s)zyIrMq)Kih3L$zPawM z9-RQc*9!8tr^=KNpb}0r4_NI-nhw~M;T~f5gYEXzDoIFT0<^dOth~%(%?MAKgqbh6P5^I{V+587A3Xi@ z0QMw3WL#}K?A2Q!{!#ETu>tS1 zZLkm)s}~kv)-LLk2OPS1`>JbRHmIQAhX;gkso1x3%UB#m*p3O5J6Ff{2(?3GJ%9JR zFf+Z7iw=fxnj~S7WHjl_Q-=Q@>v9-Q3v?=*-HFyg6)lxOp6rbhv`mx$bRk}jTz3>g z(=Kjd0zyFh9n>L3?&Zb{DCZ?T!H5T1r3oAojq-P;PzD^M3DzX(xm$ghwj+RQD~Ejw zw9agHT#t^AzCv}VZS7Xf4Qoudw#9Uq$l}B$tuSiXtKGd<946|<-Nib;uN^cb2$P9_ z8qMj1wnbIL<<4(e~)TP1yZRoG-xtMP}{JKj*=BHTVrzxR%9g) z*Zbj+XGbf|0=3rPkO^bH!?)!(6nELgVptGkD7Am;11>P>8GnVd2IlQq7Tqv=oc>bH zNdfS&vzQWj&R)>j|AW1&}9K+#hyT04FkD&CcF!&Yv!I;XQqlV+Ylp_DUn1 z3<@?54B>@v=;cDBXY(?JiP$x#0aM}e2Y_a@JFkpH+@ui#iew=t z`u!aLTbN~a$uFAO1`QhgO!_U;<$~~=N{eaZQK0RND~dkjDC2 1: level = logging.DEBUG logging.basicConfig(level=level, format="%(asctime)-15s %(message)s") 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: - 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)) for name, blob in blobs: logging.debug("Sending {}".format(name)) diff --git a/utils/transfer.py b/utils/transfer.py index 9847e2c..6487711 100755 --- a/utils/transfer.py +++ b/utils/transfer.py @@ -63,6 +63,6 @@ for tx in txns: if args.outdir: outname = os.path.join(args.outdir, tx.hash + '.tx') outfile = open(outname, 'wb') - outfile.write(tx.blob.encode()) + outfile.write(tx.blob) outfile.close() print(u"Transaction saved to {}".format(outname))