mmgen-wallet/test/objattrtest_d/btc_mainnet.py

188 lines
4.9 KiB
Python
Executable file

#!/usr/bin/env python3
#
# MMGen Wallet, a terminal-based cryptocurrency wallet
# Copyright (C)2013-2026 The MMGen Project <mmgen@tuta.io>
"""
test.objattrtest_d.btc_mainnet: BTC mainnet test vectors for MMGen data objects
"""
from .common import sample_objs, seed_bin, atd
from ..include.common import cfg
from mmgen.protocol import init_proto
proto = init_proto(cfg, 'btc', need_amt=True)
from mmgen.key import PrivKey, WifKey
from mmgen.addr import CoinAddr, MMGenID, AddrIdx, MMGenAddrType, MMGenPasswordType
from mmgen.amt import BTCAmt
from mmgen.tw.shared import TwMMGenID
sample_objs.update({
'PrivKey': PrivKey(proto, seed_bin, compressed=True, pubkey_type='std'),
'WifKey': WifKey(proto, '5HwzecKMWD82ppJK3qMKpC7ohXXAwcyAN5VgdJ9PLFaAzpBG4sX'),
'CoinAddr': CoinAddr(proto, '1111111111111111111114oLvT2'),
'BTCAmt': BTCAmt('0.01'),
'MMGenID': MMGenID(proto, 'F00F00BB:B:1'),
'TwMMGenID': TwMMGenID(proto, 'F00F00BB:S:23'),
})
from mmgen.addrlist import AddrListEntry
from mmgen.passwdlist import PasswordListEntry
from mmgen.obj import TwComment, CoinTxID, HexStr
from mmgen.seed import SeedID, SeedBase
from mmgen.subseed import SubSeed, SubSeedIdx
from mmgen.seedsplit import (
SeedShareCount,
SeedSplitIDString,
SeedShareIdx,
MasterShareIdx,
SeedShareList,
SeedShareLast,
SeedShareMaster,
SeedShareMasterJoining
)
from mmgen.proto.btc.tw.unspent import BitcoinTwUnspentOutputs
from mmgen.tx.base import Base
tests = {
# addr.py
'AddrListEntry': atd({
'addr': (0b01001, CoinAddr),
'idx': (0b01001, AddrIdx),
'comment': (0b01101, TwComment),
'sec': (0b01001, PrivKey),
# 'viewkey': (0b01001, ViewKey), # TODO
# 'wallet_passwd': (0b01001, WalletPassword), # TODO
},
(proto,),
{}
),
'PasswordListEntry': atd({
'passwd': (0b00001, str),
'idx': (0b01001, AddrIdx),
'comment': (0b01101, TwComment),
'sec': (0b01001, PrivKey),
},
(proto,),
{'passwd': 'ΑlphaΩmega', 'idx': 1},
),
# obj.py
'PrivKey': atd({
'compressed': (0b00001, bool),
'wif': (0b00001, WifKey),
},
(proto, seed_bin),
{'compressed': True, 'pubkey_type': 'std'},
),
'MMGenAddrType': atd({
'name': (0b01001, str),
'pubkey_type': (0b01001, str),
'compressed': (0b11001, bool),
'gen_method': (0b11001, str),
'addr_fmt': (0b11001, str),
'wif_label': (0b11001, str),
'extra_attrs': (0b11001, tuple),
'desc': (0b01001, str),
},
(proto, 'S'),
{},
),
# seed.py
'SeedBase': atd({
'data': (0b00001, bytes),
'sid': (0b00001, SeedID),
},
(cfg,),
{'seed_bin': seed_bin},
),
'SubSeed': atd({
'idx': (0b00001, int),
'nonce': (0b00001, int),
'ss_idx': (0b01001, SubSeedIdx),
},
[sample_objs['SubSeedList'], 1, 1, 'short'],
{},
),
'SeedShareList': atd({
'count': (0b01001, SeedShareCount),
'id_str': (0b01001, SeedSplitIDString),
},
[sample_objs['Seed'], sample_objs['SeedShareCount']],
{},
),
'SeedShareLast': atd({
'idx': (0b01001, SeedShareIdx),
},
[sample_objs['SeedShareList']],
{},
),
'SeedShareMaster': atd({
'idx': (0b01001, MasterShareIdx),
'nonce': (0b00001, int),
},
[sample_objs['SeedShareList'], 7, 0],
{},
),
'SeedShareMasterJoining': atd({
'id_str': (0b01001, SeedSplitIDString),
'count': (0b01001, SeedShareCount),
},
[cfg, sample_objs['MasterShareIdx'], sample_objs['Seed'], 'foo', 2],
{},
),
# twuo.py
'BitcoinTwUnspentOutputs.MMGenTwUnspentOutput': atd({
'txid': (0b01001, CoinTxID),
'vout': (0b01001, int),
'amt': (0b01001, BTCAmt),
'amt2': (0b01001, BTCAmt),
'comment': (0b01101, TwComment),
'twmmid': (0b01001, TwMMGenID),
'addr': (0b01001, CoinAddr),
'confs': (0b00001, int),
'scriptPubKey': (0b01001, HexStr),
'skip': (0b00101, str),
},
(proto,),
{
'amt': BTCAmt('0.01'),
'twmmid': 'F00F00BB:B:17',
'addr': '1111111111111111111114oLvT2',
'confs': 100000,
'scriptPubKey': 'ff',
},
),
# tx.py
'Base.Input': atd({
'vout': (0b01001, int),
'amt': (0b01001, BTCAmt),
'comment': (0b01101, TwComment),
'mmid': (0b01001, MMGenID),
'addr': (0b01001, CoinAddr),
'confs': (0b01001, int),
'txid': (0b01001, CoinTxID),
'have_wif': (0b00011, bool),
'scriptPubKey': (0b01001, HexStr),
'sequence': (0b00001, int),
},
(proto,),
{'amt': BTCAmt('0.01'), 'addr': sample_objs['CoinAddr']},
),
'Base.Output': atd({
'vout': (0b01001, int),
'amt': (0b01001, BTCAmt),
'comment': (0b01101, TwComment),
'mmid': (0b01001, MMGenID),
'addr': (0b01001, CoinAddr),
'confs': (0b01001, int),
'txid': (0b01001, CoinTxID),
'have_wif': (0b00011, bool),
'is_chg': (0b00001, bool),
},
(proto,),
{'amt': BTCAmt('0.01'), 'addr': sample_objs['CoinAddr']},
),
}
tests['MMGenPasswordType'] = atd(tests['MMGenAddrType'].attrs, [proto, 'P'], {})