new BitcoinDataOutput class
This commit is contained in:
parent
518b2f403f
commit
4d1e17865b
4 changed files with 37 additions and 13 deletions
|
|
@ -18,7 +18,7 @@ from ....tx.base import Base as TxBase
|
|||
from ....obj import MMGenList, HexStr, ListItemAttr
|
||||
from ....util import msg, make_chksum_6, die, pp_fmt
|
||||
|
||||
from ....tx.data_output import DataOutput
|
||||
from .data_output import DataOutput
|
||||
|
||||
def data2scriptPubKey(data):
|
||||
return '6a' + '{:02x}'.format(len(data)) + data.hex() # OP_RETURN data
|
||||
|
|
|
|||
23
mmgen/proto/btc/tx/data_output.py
Executable file
23
mmgen/proto/btc/tx/data_output.py
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# MMGen Wallet, a terminal-based cryptocurrency wallet
|
||||
# Copyright (C)2013-2026 The MMGen Project <mmgen@tuta.io>
|
||||
# Licensed under the GNU General Public License, Version 3:
|
||||
# https://www.gnu.org/licenses
|
||||
# Public project repositories:
|
||||
# https://github.com/mmgen/mmgen-wallet
|
||||
# https://gitlab.com/mmgen/mmgen-wallet
|
||||
|
||||
"""
|
||||
proto.btc.tx.data_output: Bitcoin data output class
|
||||
"""
|
||||
|
||||
from ....tx.data_output import DataOutput
|
||||
|
||||
class BitcoinDataOutput(DataOutput):
|
||||
|
||||
desc = 'OP_RETURN data'
|
||||
|
||||
@property
|
||||
def max_len(self):
|
||||
return self.proto.max_op_return_data_len
|
||||
|
|
@ -16,13 +16,9 @@ from ..obj import InitErrors
|
|||
|
||||
class DataOutput(bytes, InitErrors):
|
||||
|
||||
desc = 'OP_RETURN data'
|
||||
def __new__(base_cls, proto, data_spec):
|
||||
|
||||
@property
|
||||
def max_len(self):
|
||||
return self.proto.max_op_return_data_len
|
||||
|
||||
def __new__(cls, proto, data_spec):
|
||||
cls = proto.base_proto_subclass(base_cls, 'tx.data_output')
|
||||
|
||||
assert isinstance(data_spec, str), f'{cls.desc} argument must be a string'
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import os
|
|||
from mmgen.tx import CompletedTX, UnsignedTX
|
||||
from mmgen.tx.file import MMGenTxFile
|
||||
from mmgen.cfg import Config
|
||||
from mmgen.protocol import init_proto
|
||||
|
||||
from ..include.common import cfg, qmsg, vmsg, gr_uc
|
||||
|
||||
|
|
@ -112,9 +113,13 @@ class unit_tests:
|
|||
ut.process_bad_data(bad_data)
|
||||
return True
|
||||
|
||||
def data_output(self, name, ut, desc='DataOutput class'):
|
||||
max_len = cfg._proto.max_op_return_data_len
|
||||
def data_output_btc(self, name, ut, desc='BitcoinDataOutput class'):
|
||||
return self._data_output(ut, 'btc')
|
||||
|
||||
def _data_output(self, ut, coin):
|
||||
proto = init_proto(cfg, coin)
|
||||
from mmgen.tx.data_output import DataOutput
|
||||
max_len = DataOutput(proto, 'data:abc').max_len
|
||||
vecs = [
|
||||
'data:=:ETH.ETH:0x86d526d6624AbC0178cF7296cD538Ecc080A95F1:0/1/0',
|
||||
'hexdata:3d3a4554482e4554483a30783836643532366436363234416243303137'
|
||||
|
|
@ -128,11 +133,11 @@ class unit_tests:
|
|||
'data:' + gr_uc[:24],
|
||||
]
|
||||
|
||||
assert DataOutput(cfg._proto, vecs[0]) == DataOutput(cfg._proto, vecs[1])
|
||||
assert DataOutput(proto, vecs[0]) == DataOutput(proto, vecs[1])
|
||||
|
||||
for vec in vecs:
|
||||
d = DataOutput(cfg._proto, vec)
|
||||
assert d == DataOutput(cfg._proto, repr(d)) # repr() must return a valid initializer
|
||||
d = DataOutput(proto, vec)
|
||||
assert d == DataOutput(proto, repr(d)) # repr() must return a valid initializer
|
||||
assert isinstance(d, bytes)
|
||||
assert isinstance(str(d), str)
|
||||
vmsg('-' * 80)
|
||||
|
|
@ -156,7 +161,7 @@ class unit_tests:
|
|||
]
|
||||
|
||||
def bad(n):
|
||||
return lambda: DataOutput(cfg._proto, bad_data[n])
|
||||
return lambda: DataOutput(proto, bad_data[n])
|
||||
|
||||
vmsg('-' * 80)
|
||||
vmsg('Testing error handling:')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue