Browse Source

test.py: rewrite create_ref_tx, update reference tx files

MMGen 6 years ago
parent
commit
9d04a244ec

+ 5 - 4
mmgen/tx.py

@@ -948,13 +948,14 @@ class MMGenTX(MMGenObject):
 
 	def create_fn(self):
 		tl = self.get_hex_locktime()
-		self.fn = u'{}{}[{!s}{}{}]{x}.{}'.format(
+		tn = ('','.testnet')[g.proto.is_testnet()]
+		self.fn = u'{}{}[{!s}{}{}]{x}{}.{}'.format(
 			self.txid,
 			('-'+g.coin,'')[g.coin=='BTC'],
 			self.send_amt,
 			('',',{}'.format(self.fee_abs2rel(self.get_fee_from_tx())))[self.is_rbf()],
 			('',',tl={}'.format(tl))[bool(tl)],
-			self.ext,
+			tn,self.ext,
 			x=u'-α' if g.debug_utf8 else '')
 
 	def write_to_file(  self,
@@ -1158,7 +1159,7 @@ class MMGenTX(MMGenObject):
 
 			desc = 'number of lines' # four required lines
 			metadata,self.hex,inputs_data,outputs_data = tx_data
-			assert len(metadata) < 60,'invalid metadata length' # rough check
+			assert len(metadata) < 100,'invalid metadata length' # rough check
 			metadata = metadata.split()
 
 			if metadata[-1].find('LT=') == 0:
@@ -1183,7 +1184,7 @@ class MMGenTX(MMGenObject):
 			self.check_tx_hex_data()
 			# the following ops will all fail if g.coin doesn't match self.coin
 			desc = 'coin type in metadata'
-			assert self.coin == g.coin,'invalid coin type'
+			assert self.coin == g.coin,'invalid coin type: {}'.format(self.coin)
 			desc = 'inputs data'
 			self.inputs  = eval_io_data(inputs_data,'inputs')
 			desc = 'outputs data'

+ 4 - 1
scripts/test-release.sh

@@ -209,7 +209,10 @@ f_monero='Monero tests completed'
 
 i_eth='Ethereum'
 s_eth='Testing transaction and tracking wallet operations for Ethereum'
-t_eth=("$test_py -On ethdev")
+t_eth=(
+	"$test_py -On --coin=eth ref_tx_chk"
+	"$test_py -On ethdev"
+)
 f_eth='Ethereum tests completed'
 
 i_autosign='Autosign'

+ 6 - 0
test/ref/0B8D5A[15.31789,14,tl=1320969600].rawtx

@@ -0,0 +1,6 @@
+89d20a
+MAINNET 0B8D5A 15.31789 20180604_141855 0 LT=1320969600
+0200000004ce07f59ca3cc178edfa4c3b4eaad2cdcbfe5e686e083f3fad61e11d9a92325280000000000fdffffff4054da7ad12da31202b7dfd3802c8a6f29d19653addf058f8903303e99cb0eab0500000000fffffffff921871cba2a535a7b8df130096dc3b39d833db11925dfa56452baf8b00182cb0600000000ffffffff3d83031aed02ebdf1852d2e17b77997d18b4bdacedc579391e21c3e36117d0f00700000000ffffffff06f0e9631c0000000017a914345eb1bb2c8463a6be79d3eb33c8437fa3eb5fc487b0dbf307000000001976a914e082f38eb3733b935d07c1552fc939e05512056588acf90e090103000000160014daac6c62c4366b5a909231bbdc6d764bee262bdb008ae300000000001976a9149b1a59d1411e2678a707b371e8e805bbacdde32288acd872271f000000001600143c26c2d65a2d0a48a2c065516e3f1ba6f2384c3c507cea160000000017a9143239a010027d6365d5fa4b81a681b43e2d3817bb878065bc4e
+[{'confs': 5237526, 'mmid': '98831F3A:B:1', 'vout': 0, 'sequence': 4294967293, 'label': u'\u6240\u4ee5\uff0c\u6211\u5011\u975e\u5e38\u9700\u8981\u9019\u6a23\u4e00\u7a2e\u96fb\u5b50\u652f\u4ed8\u7cfb\u7d71\uff0c\u5b83\u57fa\u65bc\u5bc6\u78bc\u5b78\u539f\u7406\u800c\u4e0d\u57fa\u65bc\u4fe1\u7528\uff0c\u4f7f\u5f97\u4efb\u4f55\u9054', 'scriptPubKey': '00143c26c2d65a2d0a48a2c065516e3f1ba6f2384c3c', 'txid': '282523a9d9111ed6faf383e086e6e5bfdc2cadeab4c3a4df8e17cca39cf507ce', 'amt': '24.5485321', 'addr': 'bc1q8snv94j6959y3gkqv4gku0cm5mersnpucsvw5z'}, {'confs': 5662786, 'mmid': '98831F3A:C:1', 'vout': 5, 'txid': 'ab0ecb993e3003898f05dfad5396d1296f8a2c80d3dfb70212a32dd17ada5440', 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac', 'label': u'Rainy day', 'amt': '43.86958673', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP'}, {'confs': 6236658, 'mmid': '98831F3A:L:1', 'vout': 6, 'txid': 'cb8201b0f8ba5264a5df2519b13d839db3c36d0930f18d7b5a532aba1c8721f9', 'scriptPubKey': '76a914e082f38eb3733b935d07c1552fc939e05512056588ac', 'label': u'Real estate fund', 'amt': '42.4060708', 'addr': '1MU7EdgqYy9JX35L25hR6CmXXcSEBDAwyv'}, {'confs': 1396022, 'mmid': '98831F3A:S:1', 'vout': 7, 'txid': 'f0d01761e3c3211e3979c5edacbdb4187d99777be1d25218dfeb02ed1a03833d', 'scriptPubKey': 'a914345eb1bb2c8463a6be79d3eb33c8437fa3eb5fc487', 'label': u'Healthcare', 'amt': '33.51652798', 'addr': '36TvVzU5mxSjJ3D9qKAmYzCV7iUqtTDezF'}]
+[{'mmid': '98831F3A:L:1', 'amt': '1.33422', 'addr': '1MU7EdgqYy9JX35L25hR6CmXXcSEBDAwyv'}, {'mmid': '98831F3A:S:1', 'amt': '4.7631', 'addr': '36TvVzU5mxSjJ3D9qKAmYzCV7iUqtTDezF'}, {'mmid': '98831F3A:C:1', 'amt': '0.14912', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP'}, {'mmid': '98831F3A:B:1', 'amt': '5.22679', 'addr': 'bc1q8snv94j6959y3gkqv4gku0cm5mersnpucsvw5z'}, {'is_chg': True, 'addr': 'bc1qm2kxcckyxe444yyjxxaacmtkf0hzv27mzkamms', 'amt': '129.02272761', 'mmid': '98831F3A:B:2'}, {'addr': '36Gak1PHQU4rszsWkyt9B2FhCda6xnt6y9', 'amt': '3.84466'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 6 - 0
test/ref/0C7115[15.86255,14,tl=1320969600].testnet.rawtx

@@ -0,0 +1,6 @@
+497388
+TESTNET 0C7115 15.86255 20180604_142745 0 LT=1320969600
+0200000004a74dbe8833976927a0b14a67ecf8a9293950fb472e8850cd7b4147d6692232020000000000fdffffff3fd6c9fbccb18d4879e88a7074f32846f8060ebc709c9c4c04bc40a5f8237eb80400000000ffffffff2842c9c26e72015af2c5017d15d416b3d9094f53334c31b2c14c3d756bd19acc0100000000ffffffff574141965cc7a4656fe31f196c5a69a99f3e0e986a3b2377e86f4fb0ad56cacc0500000000ffffffff06b0a596180000000017a914daaf772bc9d05b41f6811fa200a34fcd4d58ed2c879055251d000000001976a9141c95ba688637b1b8e792c494129c2a64931e19a588ac93a69c0b02000000160014b8b85bec8debbafa0160604b3b1339ccf7e00a1d209d60140000000017a91456bbd7fd28829edc29189dc6d68ce01d57b89e2e8728c4290d00000000160014ff496bbc2e661d6c39e0d1077af84b1849ff579710f84507000000001976a9146322b1e8ad2853c2ddd4f2a98bfe820d00ea2e4788ac8065bc4e
+[{'confs': 8340835, 'mmid': '98831F3A:B:1', 'vout': 0, 'sequence': 4294967293, 'label': u'Healthcare', 'scriptPubKey': '0014ff496bbc2e661d6c39e0d1077af84b1849ff5797', 'txid': '02322269d647417bcd50882e47fb503929a9f8ec674ab1a02769973388be4da7', 'amt': '31.29656913', 'addr': 'tb1qlaykh0pwvcwkcw0q6yrh47ztrpyl74uhmlugth'}, {'confs': 7543247, 'mmid': '98831F3A:C:1', 'vout': 4, 'txid': 'b87e23f8a540bc044c9c9c70bc0e06f84628f374708ae879488db1ccfbc9d63f', 'scriptPubKey': '76a9146322b1e8ad2853c2ddd4f2a98bfe820d00ea2e4788ac', 'label': u'\u5fc5\u8981\u306a\u306e\u306f\u3001\u4fe1\u7528\u3067\u306f\u306a\u304f\u6697\u53f7\u5316\u3055\u308c\u305f\u8a3c\u660e\u306b\u57fa\u3065\u304f\u96fb\u5b50\u53d6\u5f15\u30b7\u30b9\u30c6\u30e0\u3067\u3042\u308a\u3001\u3053\u308c\u306b\u3088', 'amt': '23.12036572', 'addr': 'mpZ8kh9mkns4B1Q9RzthXiU5d2RgYnV25Y'}, {'confs': 7864144, 'mmid': '98831F3A:L:1', 'vout': 1, 'txid': 'cc9ad16b753d4cc1b2314c33534f09d9b316d4157d01c5f25a01726ec2c94228', 'scriptPubKey': '76a9141c95ba688637b1b8e792c494129c2a64931e19a588ac', 'label': u"Bob's bequest", 'amt': '25.16213303', 'addr': 'mi86aiiSXZQKPrig8Ti66rhXSoAt6seSSi'}, {'confs': 6843189, 'mmid': '98831F3A:S:1', 'vout': 5, 'txid': 'ccca56adb04f6fe877233b6a980e3e9fa9695a6c191fe36f65a4c75c96414157', 'scriptPubKey': 'a914daaf772bc9d05b41f6811fa200a34fcd4d58ed2c87', 'label': u"Eddie's endowment", 'amt': '24.13108439', 'addr': '2NDBXVfG7uUDwrZPyEZPc8vRMyZN4dfPoY7'}]
+[{'is_chg': True, 'addr': 'tb1qhzu9hmydawa05qtqvp9nkyeeenm7qzsak7et5g', 'amt': '87.84750227', 'mmid': '98831F3A:B:2'}, {'mmid': '98831F3A:B:1', 'amt': '2.20841', 'addr': 'tb1qlaykh0pwvcwkcw0q6yrh47ztrpyl74uhmlugth'}, {'mmid': '98831F3A:C:1', 'amt': '1.22026', 'addr': 'mpZ8kh9mkns4B1Q9RzthXiU5d2RgYnV25Y'}, {'addr': '2N19q8PdJ1EHHUmSYzcjUfkJuJVMzghA4tL', 'amt': '3.41876'}, {'mmid': '98831F3A:L:1', 'amt': '4.88986', 'addr': 'mi86aiiSXZQKPrig8Ti66rhXSoAt6seSSi'}, {'mmid': '98831F3A:S:1', 'amt': '4.12526', 'addr': '2NDBXVfG7uUDwrZPyEZPc8vRMyZN4dfPoY7'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 6 - 0
test/ref/359FD5-BCH[6.68868,tl=1320969600].testnet.rawtx

@@ -0,0 +1,6 @@
+16ed33
+BCH TESTNET 359FD5 6.68868 20180604_154119 0 LT=1320969600
+02000000022dc70865a629c6728d3cdce6abb3d84daa45b4a494bbff27c6379fb2d0abc49e0600000000feffffff3657fdf0f992064faaaae5dbfc7a14679a3a40219a392e5cebae8ae47fb72c650000000000ffffffff04b0862d19000000001976a9146322b1e8ad2853c2ddd4f2a98bfe820d00ea2e4788ac68f20c07000000001976a914904b67202d7b6a28eac98d963e6d936597aee04988ac88a4a307000000001976a9141c95ba688637b1b8e792c494129c2a64931e19a588acddc508a6010000001976a9144daf4fa0c3b1ea8ac4d7e29b45832cf64e47dfa188ac8065bc4e
+[{'confs': 7716577, 'mmid': '98831F3A:C:1', 'vout': 6, 'sequence': 4294967294, 'label': u'\u6240\u4ee5\uff0c\u6211\u5011\u975e\u5e38\u9700\u8981\u9019\u6a23\u4e00\u7a2e\u96fb\u5b50\u652f\u4ed8\u7cfb\u7d71\uff0c\u5b83\u57fa\u65bc\u5bc6\u78bc\u5b78\u539f\u7406\u800c\u4e0d\u57fa\u65bc\u4fe1\u7528\uff0c\u4f7f\u5f97\u4efb\u4f55\u9054', 'scriptPubKey': '76a9146322b1e8ad2853c2ddd4f2a98bfe820d00ea2e4788ac', 'txid': '9ec4abd0b29f37c627ffbb94a4b445aa4dd8b3abe6dc3c8d72c629a66508c72d', 'amt': '42.97552312', 'addr': 'mpZ8kh9mkns4B1Q9RzthXiU5d2RgYnV25Y'}, {'confs': 4011798, 'mmid': '98831F3A:L:1', 'vout': 0, 'txid': '652cb77fe48aaeeb5c2e399a21403a9a67147afcdbe5aaaa4f0692f9f0fd5736', 'scriptPubKey': '76a9141c95ba688637b1b8e792c494129c2a64931e19a588ac', 'label': u'Emergency fund', 'amt': '34.51975781', 'addr': 'mi86aiiSXZQKPrig8Ti66rhXSoAt6seSSi'}]
+[{'mmid': '98831F3A:L:1', 'amt': '1.28165', 'addr': 'mi86aiiSXZQKPrig8Ti66rhXSoAt6seSSi'}, {'addr': 'mtfuvkwXtXWmhAqb2b3q5dhcuCvfK2wKhw', 'amt': '1.18289'}, {'mmid': '98831F3A:C:1', 'amt': '4.22414', 'addr': 'mpZ8kh9mkns4B1Q9RzthXiU5d2RgYnV25Y'}, {'is_chg': True, 'addr': 'mnbiLeezPbyWUPkrVt8VbXAqrghYjtiJRp', 'amt': '70.80560093', 'mmid': '98831F3A:L:2'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 6 - 0
test/ref/460D4D-BCH[10.19764,tl=1320969600].rawtx

@@ -0,0 +1,6 @@
+f710e6
+BCH MAINNET 460D4D 10.19764 20180604_154621 0 LT=1320969600
+02000000022af6fe4154073432151399a56741a25ad012f26a6413a49d6066a93ae8139c230300000000feffffff35cc12f21a64aff906fee4d711feccb0e1f3bb9e03763bc86a0549debf9503560200000000ffffffff04f8d8411a000000001976a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac00d34a14000000001976a914c1c3574c5ac14ec935d9b89e569fc8c7f60854fc88acc35c18d7010000001976a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac28b13b0e000000001976a914e082f38eb3733b935d07c1552fc939e05512056588ac8065bc4e
+[{'confs': 4919901, 'mmid': '98831F3A:C:1', 'vout': 3, 'sequence': 4294967294, 'label': u'\u6240\u4ee5\uff0c\u6211\u5011\u975e\u5e38\u9700\u8981\u9019\u6a23\u4e00\u7a2e\u96fb\u5b50\u652f\u4ed8\u7cfb\u7d71\uff0c\u5b83\u57fa\u65bc\u5bc6\u78bc\u5b78\u539f\u7406\u800c\u4e0d\u57fa\u65bc\u4fe1\u7528\uff0c\u4f7f\u5f97\u4efb\u4f55\u9054', 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac', 'txid': '239c13e83aa966609da413646af212d05aa24167a59913153234075441fef62a', 'amt': '39.835815', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP'}, {'confs': 3014433, 'mmid': '98831F3A:L:1', 'vout': 2, 'txid': '560395bfde49056ac83b76039ebbf3e1b0ccfe11d7e4fe06f9af641af212cc35', 'scriptPubKey': '76a914e082f38eb3733b935d07c1552fc939e05512056588ac', 'label': u'Real estate fund', 'amt': '49.39947847', 'addr': '1MU7EdgqYy9JX35L25hR6CmXXcSEBDAwyv'}]
+[{'addr': '1JfXRZAMvgTn2YpsgpxSh49HWuXvPguEJH', 'amt': '3.40448'}, {'mmid': '98831F3A:L:1', 'amt': '2.38793', 'addr': '1MU7EdgqYy9JX35L25hR6CmXXcSEBDAwyv'}, {'mmid': '98831F3A:C:1', 'amt': '4.40523', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP'}, {'is_chg': True, 'addr': '1GfuYaKHrhdiVybXMGCcjadSgfjvpdt2x9', 'amt': '79.03665347', 'mmid': '98831F3A:L:2'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/6A52BC-B2X[106.6789,tl=1320969600].rawtx

@@ -1,6 +0,0 @@
-ff8ec9
-B2X MAINNET 6A52BC 106.6789 20171113_152611 434 LT=1320969600
-020000000321efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0000000000feffffff21efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0200000000ffffffff21efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0100000000ffffffff0400e40b54020000001976a914e9721033b4cd4fae9e5510cdc9d7871dcf2be9e488ac30051d21000000001976a914b57ca511b3e5b54a7ec936b0fc6b44f595a7cffe88ac6c206028090000001976a9142794da6d30fc6adced41313ac3bfab900096b44488ac202cb2060000000017a914f12c150f224f045e75799410d6b6653af33568d8878065bc4e
-[{'confs': 1, 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP', 'vout': 0, 'sequence': 4294967294, 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'mmid': '98831F3A:C:1', 'amt': B2XAmt('100'), 'label': u''}, {'confs': 1, 'scriptPubKey': '76a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac', 'addr': '1GfuYaKHrhdiVybXMGCcjadSgfjvpdt2x9', 'vout': 2, 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'mmid': '98831F3A:L:2', 'amt': B2XAmt('200'), 'label': u''}, {'confs': 1, 'scriptPubKey': 'a914dd36f2365178f16504c5c38492a015be59bff33b87', 'addr': '3Mrh5fQwUwV9U2D1VHBrBW6cwqM4ZBdja9', 'vout': 1, 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'mmid': '98831F3A:S:2', 'amt': B2XAmt('199.9999598'), 'label': u''}]
-[{'is_chg': True, 'addr': '14cHfz8dixc3GL3HFZEbicjinguTkaL1BJ', 'amt': B2XAmt('393.3209406'), 'mmid': '98831F3A:L:4'}, {'addr': '1NHM5xG2x1972hGvPqi1X1bcQV4bg4B6zK', 'amt': B2XAmt('100')}, {'mmid': '98831F3A:C:5', 'amt': B2XAmt('5.5555'), 'addr': '1HYcdCFPmWakX2g8mP6ksxDDokDyRbeaAb'}, {'mmid': '98831F3A:S:3', 'amt': B2XAmt('1.1234'), 'addr': '3PgDafUUfbG4MYCXjKgzrfZTRFogLKS4fZ'}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/6A52BC-B2X[106.6789,tl=1320969600].testnet.rawtx

@@ -1,6 +0,0 @@
-c14468
-B2X TESTNET 6A52BC 106.6789 20171113_152611 434 LT=1320969600
-020000000321efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0000000000feffffff21efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0200000000ffffffff21efc7591303a97400ed3bb813258762695f40100825255ab0f9d596310c654a0100000000ffffffff0400e40b54020000001976a914e9721033b4cd4fae9e5510cdc9d7871dcf2be9e488ac30051d21000000001976a914b57ca511b3e5b54a7ec936b0fc6b44f595a7cffe88ac6c206028090000001976a9142794da6d30fc6adced41313ac3bfab900096b44488ac202cb2060000000017a914f12c150f224f045e75799410d6b6653af33568d8878065bc4e
-[{'confs': 1, 'addr': 'muf4bgD8kyD9qLpCMDqYTBSKY3DqTWZR92', 'vout': 0, 'sequence': 4294967294, 'label': u'', 'mmid': '98831F3A:C:1', 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'amt': B2XAmt('100'), 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac'}, {'confs': 1, 'addr': 'mwBrqdQGfj4yH6594qAzZVqmYfLdmB1C7W', 'vout': 2, 'label': u'', 'mmid': '98831F3A:L:2', 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'amt': B2XAmt('200'), 'scriptPubKey': '76a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac'}, {'confs': 1, 'addr': '2NDQu9QLy6PzVfoqZAQoioT5tABZENihnkH', 'vout': 1, 'label': u'', 'mmid': '98831F3A:S:2', 'txid': '4a650c3196d5f9b05a25250810405f6962872513b83bed0074a9031359c7ef21', 'amt': B2XAmt('199.9999598'), 'scriptPubKey': 'a914dd36f2365178f16504c5c38492a015be59bff33b87'}]
-[{'addr': 'mj8Ey3DcXz3J3SWty8CyYXx3egWAapMVMF', 'mmid': '98831F3A:L:4', 'amt': B2XAmt('393.3209406'), 'is_chg': True}, {'addr': 'n2oJP1M1m2aMookY7QgPLvowGUfJYcFbZ7', 'amt': B2XAmt('100')}, {'mmid': '98831F3A:C:5', 'addr': 'mx4ZvFLNaY21J99kUx58hsRYfjpgPYwpHn', 'amt': B2XAmt('5.5555')}, {'mmid': '98831F3A:S:3', 'addr': '2NFEReQQWH3mQZKq5QTJsUcYidc1r35E2Rg', 'amt': B2XAmt('1.1234')}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/99BE60-BCH[106.6789].rawtx

@@ -1,6 +0,0 @@
-8332a9
-BCH MAINNET 99BE60 106.6789 20171025_141647 434
-02000000030a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0000000000ffffffff0a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0100000000ffffffff0a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0200000000ffffffff0400e40b54020000001976a9149316cedacbfcc41e63bdb903b43ae5157654044188ac30051d21000000001976a914b57ca511b3e5b54a7ec936b0fc6b44f595a7cffe88ac48126028090000001976a9142794da6d30fc6adced41313ac3bfab900096b44488ac202cb206000000001976a914cd88336614e1d3dadf2b1e9c5b598e28c8ffcf1288ac00000000
-[{'confs': 1, 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac', 'addr': '1F97Jd89wwmu4ELadesAdGDzg3d8Y6j5iP', 'vout': 0, 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'mmid': '98831F3A:C:1', 'amt': BCHAmt('100'), 'label': u''}, {'confs': 1, 'scriptPubKey': '76a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac', 'addr': '1GfuYaKHrhdiVybXMGCcjadSgfjvpdt2x9', 'vout': 1, 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'mmid': '98831F3A:L:2', 'amt': BCHAmt('200'), 'label': u''}, {'confs': 1, 'scriptPubKey': '76a914bba3993079ccdf40c9bbbe495473f0b3d2dc5eec88ac', 'addr': '1J79LtWctedRLnMfFNRgzzSFsozQqDeoKD', 'vout': 2, 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'mmid': '98831F3A:L:3', 'amt': BCHAmt('199.9999416'), 'label': u''}]
-[{'is_chg': True, 'addr': '14cHfz8dixc3GL3HFZEbicjinguTkaL1BJ', 'amt': BCHAmt('393.3209044'), 'mmid': '98831F3A:L:4'}, {'mmid': '98831F3A:C:5', 'amt': BCHAmt('5.5555'), 'addr': '1HYcdCFPmWakX2g8mP6ksxDDokDyRbeaAb'}, {'mmid': '98831F3A:C:3', 'amt': BCHAmt('1.1234'), 'addr': '1KjkgipjAyTR8Lc6Xrr8RoeSeiYXaExKHo'}, {'addr': '1EQjevrVa3XWzSnRq7cyc1D7wnNXsHx73x', 'amt': BCHAmt('100')}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/99BE60-BCH[106.6789].testnet.rawtx

@@ -1,6 +0,0 @@
-a27973
-BCH TESTNET 99BE60 106.6789 20171025_141647 434
-02000000030a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0000000000ffffffff0a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0100000000ffffffff0a30fe391cc62f8a94a43a51b581cf176a8567431fcb01318cd1005757d0168d0200000000ffffffff0400e40b54020000001976a9149316cedacbfcc41e63bdb903b43ae5157654044188ac30051d21000000001976a914b57ca511b3e5b54a7ec936b0fc6b44f595a7cffe88ac48126028090000001976a9142794da6d30fc6adced41313ac3bfab900096b44488ac202cb206000000001976a914cd88336614e1d3dadf2b1e9c5b598e28c8ffcf1288ac00000000
-[{'confs': 1, 'addr': 'muf4bgD8kyD9qLpCMDqYTBSKY3DqTWZR92', 'vout': 0, 'label': u'', 'mmid': '98831F3A:C:1', 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'amt': BCHAmt('100'), 'scriptPubKey': '76a9149b1a59d1411e2678a707b371e8e805bbacdde32288ac'}, {'confs': 1, 'addr': 'mwBrqdQGfj4yH6594qAzZVqmYfLdmB1C7W', 'vout': 1, 'label': u'', 'mmid': '98831F3A:L:2', 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'amt': BCHAmt('200'), 'scriptPubKey': '76a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac'}, {'confs': 1, 'addr': 'mxd6dwbbhg4g7tqGxwQ4pueajob7kjWHBG', 'vout': 2, 'label': u'', 'mmid': '98831F3A:L:3', 'txid': '8d16d0575700d18c3101cb1f4367856a17cf81b5513aa4948a2fc61c39fe300a', 'amt': BCHAmt('199.9999416'), 'scriptPubKey': '76a914bba3993079ccdf40c9bbbe495473f0b3d2dc5eec88ac'}]
-[{'addr': 'mj8Ey3DcXz3J3SWty8CyYXx3egWAapMVMF', 'mmid': '98831F3A:L:4', 'amt': BCHAmt('393.3209044'), 'is_chg': True}, {'mmid': '98831F3A:C:5', 'addr': 'mx4ZvFLNaY21J99kUx58hsRYfjpgPYwpHn', 'amt': BCHAmt('5.5555')}, {'mmid': '98831F3A:C:3', 'addr': 'mzFhymuhyztfuT5iFRpWFirmWi9EWMrybs', 'amt': BCHAmt('1.1234')}, {'addr': 'mtvgwywUP4xmmZG3YgbMRvRSomyEh3ShVb', 'amt': BCHAmt('100')}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/FFB367[1.234].rawtx

@@ -1,6 +0,0 @@
-e7c42d
-FFB367 1.234 20150405_102927 350828
-01000000013364630b6d290a82c822facc2f7c1db4452cea459b2ce22371135530485a5d010600000000ffffffff0205d7d600010000001976a914bba3993079ccdf40c9bbbe495473f0b3d2dc5eec88ac40ef5a07000000001976a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac00000000
-[{'label': u'Test Wallet', 'mmid': u'98831F3A:500', 'vout': 6, 'txid': u'015d5a483055137123e22c9b45ea2c45b41d7c2fccfa22c8820a296d0b636433', 'amt': BTCAmt('44.32452045'), 'confs': 495L, 'addr': u'1EZNuddPnaZFah9QVbGvzvTcP4KeRrRFt8', 'scriptPubKey': '76a91494b93bbe8a32f1db80b307482e83c25fa4e99b8c88ac'}]
-[{'amt': BTCAmt('43.09047045'), 'mmid': '98831F3A:3', 'addr': u'1J79LtWctedRLnMfFNRgzzSFsozQqDeoKD'}, {'amt': BTCAmt('1.23400000'), 'mmid': '98831F3A:2', 'addr': u'1GfuYaKHrhdiVybXMGCcjadSgfjvpdt2x9'}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/FFB367[1.234].testnet.rawtx

@@ -1,6 +0,0 @@
-3c0e60
-FFB367 1.234 20150405_102927 350828
-01000000013364630b6d290a82c822facc2f7c1db4452cea459b2ce22371135530485a5d010600000000ffffffff0205d7d600010000001976a914bba3993079ccdf40c9bbbe495473f0b3d2dc5eec88ac40ef5a07000000001976a914abe58e1e45f6176910a4c1ac1ee62328d5cc4fd588ac00000000
-[{'label': u'Test Wallet', 'mmid': u'98831F3A:500', 'vout': 6, 'txid': u'015d5a483055137123e22c9b45ea2c45b41d7c2fccfa22c8820a296d0b636433', 'amt': BTCAmt('44.32452045'), 'confs': 495L, 'addr': u'mu5LCgiNbbzWMod2DAFJpqfwF3vMSGPdnb', 'scriptPubKey': '76a91494b93bbe8a32f1db80b307482e83c25fa4e99b8c88ac'}]
-[{'amt': BTCAmt('43.09047045'), 'mmid': '98831F3A:3', 'addr': u'mxd6dwbbhg4g7tqGxwQ4pueajob7kjWHBG'}, {'amt': BTCAmt('1.23400000'), 'mmid': '98831F3A:2', 'addr': u'mwBrqdQGfj4yH6594qAzZVqmYfLdmB1C7W'}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 2 - 1
test/ref/ethereum/BC79AB-ETH[0.123].rawtx

@@ -1,5 +1,6 @@
-59b070
+5eb350
 ETH FOUNDATION BC79AB 0.123 20180530_125230 7513928
 {"nonce": "0", "chainId": "0x1", "from": "e704b6cfd9f0edb2e6cfbd0c913438d37ede7b35", "to": "62ff8e4dbd251b98102e3fb5e4b14119e24cadde", "amt": "0.123", "gasPrice": "0.000000050"}
 [{'confs': 0, 'addr': 'e704b6cfd9f0edb2e6cfbd0c913438d37ede7b35', 'vout': 0, 'txid': '0000000000000000000000000000000000000000000000000000000000000000', 'label': u'', 'amt': '1.234567', 'mmid': '98831F3A:E:1'}]
 [{'mmid': '98831F3A:E:31', 'amt': '0.123', 'addr': '62ff8e4dbd251b98102e3fb5e4b14119e24cadde'}]
+qRHzrPVpZFYxnQvk3atLzUtp41bZupJ2UQNnKe3ZnmqFsEngS6vaCCvesKKy9khzVq6y2RqarVBcZLnjtXxMpbAcdEtyBWiBYmZdoU8SN4uAbroHT1c7gEbmUNVKKdqHD86ZRRqDNpdh1ztmLiMAy3ibM83puwJHNpGGHgUGjZ1RSEgyVKCs2rZ9wXN8rBMibDDPYo1LgtAst2FkB36Mgf4Vf7ekoRAdiRNGd5YZ3RXAVsSdnZcyn4rdeQDMDkCq7JJDoB25eNEuXQutZFUcf2fEfxkMbW1sXJDNFQq

+ 6 - 0
test/ref/ethereum/F04889-ETH[0.123].testnet.rawtx

@@ -0,0 +1,6 @@
+8f7b85
+ETH KOVAN F04889 0.123 20180530_125230 7513928
+{"nonce": "0", "chainId": "0x2a", "from": "97ccc3a117b3696340c42561361054b1c9c793d5", "to": "07f575951e67f855ceffe512ee33a362e177924f", "amt": "0.123", "gasPrice": "0.000000008"}
+[{'confs': 0, 'addr': '97ccc3a117b3696340c42561361054b1c9c793d5', 'label': u'', 'amt': '1.234567', 'mmid': '98831F3A:E:1'}]
+[{'mmid': '98831F3A:E:31', 'amt': '0.123', 'addr': '07f575951e67f855ceffe512ee33a362e177924f'}]
+qRHzrPVpZFYxnQvk3atLzUtp41bZupJ2UQNnKe3ZnmqFsEngS6vaCCvesKKy9khzVq6y2RqarVBcZLnjtXxMpbAcdEtyBWiBYmZdoU8SN4uAbroHT1c7gEbmUNVKKdqHD86ZRRqDNpdh1ztmLiMAy3ibM83puwJHNpGGHgUGjZ1RSEgyVKCs2rZ9wXN8rBMibDDPYo1LgtAst2FkB36Mgf4Vf7ekoRAdiRNGd5YZ3RXAVsSdnZcyn4rdeQDMDkCq7JJDoB25eNEuXQutZFUcf2fEfxkMbW1sXJDNFQq

+ 0 - 6
test/ref/litecoin/75F455-LTC[106.6789].rawtx

@@ -1,6 +0,0 @@
-2622b7
-LTC MAINNET 75F455 106.6789 20171018_182153 434
-0200000003040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50200000000ffffffff040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50100000000ffffffff040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50000000000ffffffff0400e40b54020000001976a9141e43586462a093ef77a140f7fc33bc9b62b8ea4688ac30051d21000000001976a914f9c129a968a4242f6c29da9cc77dd2fc9408481488ac202cb2060000000017a914f17c92d1a9ca42be1b2bd5293f1e638d457b05848768bda6927d0000001976a914b2da98c692ed20d7d155ca8c13284bf55f7988a988ac00000000
-[{'confs': 1, 'scriptPubKey': '76a914cb4067ff77f8133dc20790c702a994006a2f956c88ac', 'addr': 'LdkebBKVXSs6NNoPJWGM8KciDnL8LhXXjb', 'vout': 2, 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'mmid': '98831F3A:C:1', 'amt': LTCAmt('100'), 'label': u''}, {'confs': 1, 'scriptPubKey': '76a9142fad2fae2cee09645766da65a5566e9e49dc305688ac', 'addr': 'LPa3VRMf4aYfd85bq2LyN69KfzV6KBJ9gy', 'vout': 1, 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'mmid': '98831F3A:L:2', 'amt': LTCAmt('200'), 'label': u''}, {'confs': 1, 'scriptPubKey': 'a9143d6021a6448977d93cbff97f884b10506ff625d987', 'addr': 'MDVgcTj9JGFE8xbSwprg7D9zgSRCBzr3CC', 'vout': 0, 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'mmid': '98831F3A:S:2', 'amt': LTCAmt('5199.99799'), 'label': u''}]
-[{'is_chg': True, 'addr': 'LbXeQjFrukhFJr1nmiUx8UftEQ3DszF3Ud', 'amt': LTCAmt('5393.31313'), 'mmid': '98831F3A:L:4'}, {'mmid': '98831F3A:C:5', 'amt': LTCAmt('5.5555'), 'addr': 'LhzXvAJzRhmn1s8nGSxsajF9wdS6c8AXhA'}, {'mmid': '98831F3A:S:3', 'amt': LTCAmt('1.1234'), 'addr': 'MVv2KBRyRT4Kpf6AokKwZAWmrRvM1DP5K9'}, {'addr': 'LMyyDCZWLnThGrCYcUM4SZdeTBEgV95odE', 'amt': LTCAmt('100')}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 0 - 6
test/ref/litecoin/75F455-LTC[106.6789].testnet.rawtx

@@ -1,6 +0,0 @@
-68c9ce
-LTC TESTNET 75F455 106.6789 20171018_182153 434
-0200000003040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50200000000ffffffff040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50100000000ffffffff040e4755ff327ef5edb98aa488a9de7dcd266f4f7faba383aadb502743eb8fc50000000000ffffffff0400e40b54020000001976a9141e43586462a093ef77a140f7fc33bc9b62b8ea4688ac30051d21000000001976a914f9c129a968a4242f6c29da9cc77dd2fc9408481488ac202cb2060000000017a914f17c92d1a9ca42be1b2bd5293f1e638d457b05848768bda6927d0000001976a914b2da98c692ed20d7d155ca8c13284bf55f7988a988ac00000000
-[{'confs': 1, 'addr': 'mz3ed26eFp4HtgaqqwFRgDmGsZZZAHbryP', 'vout': 2, 'label': u'', 'mmid': '98831F3A:C:1', 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'amt': LTCAmt('100'), 'scriptPubKey': '76a914cb4067ff77f8133dc20790c702a994006a2f956c88ac'}, {'confs': 1, 'addr': 'mjs3XG8onwjs9Rs4NTL3uzHtKmiX5bCH6Y', 'vout': 1, 'label': u'', 'mmid': '98831F3A:L:2', 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'amt': LTCAmt('200'), 'scriptPubKey': '76a9142fad2fae2cee09645766da65a5566e9e49dc305688ac'}, {'confs': 1, 'addr': 'QSCWVL7SyhxEgRi99BXDzDLHiUUjn5cGSJ', 'vout': 0, 'label': u'', 'mmid': '98831F3A:S:2', 'txid': 'c58feb432750dbaa83a3ab7f4f6f26cd7ddea988a48ab9edf57e32ff55470e04', 'amt': LTCAmt('5199.99799'), 'scriptPubKey': 'a9143d6021a6448977d93cbff97f884b10506ff625d987'}]
-[{'addr': 'mwpeSa31e7tSq9oFK9U2gNpStBGeeKfNC4', 'mmid': '98831F3A:L:4', 'amt': LTCAmt('5393.31313'), 'is_chg': True}, {'mmid': '98831F3A:C:5', 'addr': 'n4HXx169A4xyYAvEoswx8dPibQfXPpjAMT', 'amt': LTCAmt('5.5555')}, {'mmid': '98831F3A:S:3', 'addr': 'QicrC3pH6tmLN8Cs16zVSAh4tTytgRSCTZ', 'amt': LTCAmt('1.1234')}, {'addr': 'miGyF3Lf59eto9z19uL8zTnD6xU7Kbiumg', 'amt': LTCAmt('100')}]
-TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 6 - 0
test/ref/litecoin/A5A1E0-LTC[1454.64322,1453,tl=1320969600].testnet.rawtx

@@ -0,0 +1,6 @@
+2f7e39
+LTC TESTNET A5A1E0 1454.64322 20180604_155843 0 LT=1320969600
+0200000004292425590a87cde7e792b037cdfa5b11291cf51ff793e25ec67a5f70c412819c0600000000fdffffff63d0a42d4e2db165ec6641183ddcb96cf748ecd554f297f6892cb7f810d287320200000000ffffffff3d78e233f525adb7b7837bb9418e9953d4e876a27f7bf3615636d676f34d63e60000000000ffffffff71a42d65b540388a8c86efdd2aed088f9679221818bce04c1274afb8ab2850f90000000000ffffffff064182feaaf5000000160014ef1f1d517f22cdb3b2f190e541f9ee4f0fee7ebb7051418c0700000017a9143e6e40ced5782c16af3be7703c0214b5d6a44db28758b28d2506000000160014520b41a6e036145eed6fdcc766d4689f95fe83877030af26020000001976a9147e69822fdbbaa6111645c47d1a1ba8ab7cfefe8188ac90ab8dd80d0000001976a91424111860d733eeaa50f1cf3392e5ebbe2337ba2f88ac08884d2d0400000017a914e0fedc90ca538b79ed27a7b21eb31a561b39d61d878065bc4e
+[{'confs': 2873446, 'mmid': '98831F3A:B:1', 'vout': 6, 'sequence': 4294967293, 'label': u'Healthcare', 'scriptPubKey': '0014520b41a6e036145eed6fdcc766d4689f95fe8387', 'txid': '9c8112c4705f7ac65ee293f71ff51c29115bfacd37b092e7e7cd870a59252429', 'amt': '1122.1400282', 'addr': 'tltc1q2g95rfhqxc29amt0mnrkd4rgn72laqu83yq2ee'}, {'confs': 4292343, 'mmid': '98831F3A:C:1', 'vout': 2, 'txid': '3287d210f8b72c89f697f254d5ec48f76cb9dc3d184166ec65b12d4e2da4d063', 'scriptPubKey': '76a91424111860d733eeaa50f1cf3392e5ebbe2337ba2f88ac', 'label': u'\u6240\u4ee5\uff0c\u6211\u5011\u975e\u5e38\u9700\u8981\u9019\u6a23\u4e00\u7a2e\u96fb\u5b50\u652f\u4ed8\u7cfb\u7d71\uff0c\u5b83\u57fa\u65bc\u5bc6\u78bc\u5b78\u539f\u7406\u800c\u4e0d\u57fa\u65bc\u4fe1\u7528\uff0c\u4f7f\u5f97\u4efb\u4f55\u9054', 'amt': '2516.83102913', 'addr': 'miof6ksLJu62rtz94Nw4yUBLgNT3FURHze'}, {'confs': 1442298, 'mmid': '98831F3A:L:1', 'vout': 0, 'txid': 'e6634df376d6365661f37b7fa276e8d453998e41b97b83b7b7ad25f533e2783d', 'scriptPubKey': '76a9147e69822fdbbaa6111645c47d1a1ba8ab7cfefe8188ac', 'label': u'Travel expenses', 'amt': '4028.5102425', 'addr': 'ms3Mq5yzTXPqZQPY3pde39G1nkH5nsgomA'}, {'confs': 2448042, 'mmid': '98831F3A:S:1', 'vout': 0, 'txid': 'f95028abb8af74124ce0bc18182279968f08ed2addef868c8a3840b5652da471', 'scriptPubKey': 'a9143e6e40ced5782c16af3be7703c0214b5d6a44db287', 'label': u"Carl's capital", 'amt': '4338.52985746', 'addr': 'QSJ65iUid3zCQ7G13oAiQjHjEho7KCBv4x'}]
+[{'mmid': '98831F3A:C:1', 'amt': '594.67738', 'addr': 'miof6ksLJu62rtz94Nw4yUBLgNT3FURHze'}, {'addr': 'Qh7enMxmvLpYmmuhdYQyhZMaCBsZUSk3xy', 'amt': '179.39925'}, {'is_chg': True, 'addr': 'tltc1qau0365tlytxm8vh3jrj5r70wfu87ul4mczvjhv', 'amt': '10551.35793729', 'mmid': '98831F3A:B:2'}, {'mmid': '98831F3A:B:1', 'amt': '263.99847', 'addr': 'tltc1q2g95rfhqxc29amt0mnrkd4rgn72laqu83yq2ee'}, {'mmid': '98831F3A:L:1', 'amt': '92.3895', 'addr': 'ms3Mq5yzTXPqZQPY3pde39G1nkH5nsgomA'}, {'mmid': '98831F3A:S:1', 'amt': '324.17862', 'addr': 'QSJ65iUid3zCQ7G13oAiQjHjEho7KCBv4x'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 6 - 0
test/ref/litecoin/AF3CDF-LTC[620.76194,1453,tl=1320969600].rawtx

@@ -0,0 +1,6 @@
+eef89c
+LTC MAINNET AF3CDF 620.76194 20180604_160219 0 LT=1320969600
+020000000455cff6944c64a4436998fde661cc932689b4ca781e385405c120c43a670adaa50400000000fdffffffba62389cc7b4c4e2921813107bae22e94986dcc014e53fe74e925719fd4f9abc0700000000ffffffff7378c4a495a331117c554eeea457dee30e6c7ae527b0ec5b2149032b4d34785b0000000000ffffffff848797babb6d7ca0370ddd87c23b5869bc938a25ac8acf0d564d1aff3f884aea0600000000ffffffff06287cf5e7000000001600146b100808b5bad4ff8ce925a8cf4ce7adf850f9a798785db50400000017a91497acf666b7e19a579393ff2aed12e4bfeb13e5e18760cf9601010000001976a9141dec6649620b2a9979113c6c051e2a536fa14d4588ac980af8c60200000017a914b9fb1a947913903086e1651f03d565f332022da18718be250e050000001976a914cb4067ff77f8133dc20790c702a994006a2f956c88ac5c4a7d6228010000160014af15f1284a8e346ed6ecfe7d8804d279e80ef1e48065bc4e
+[{'confs': 6245914, 'mmid': '98831F3A:B:1', 'vout': 4, 'sequence': 4294967293, 'label': u"Carl's capital", 'scriptPubKey': '00146b100808b5bad4ff8ce925a8cf4ce7adf850f9a7', 'txid': 'a5da0a673ac420c10554381e78cab4892693cc61e6fd986943a4644c94f6cf55', 'amt': '1951.30288153', 'addr': 'ltc1qdvgqsz94ht20lr8fyk5v7n884hu9p7d8k9easu'}, {'confs': 7886534, 'mmid': '98831F3A:C:1', 'vout': 7, 'txid': 'bc9a4ffd1957924ee73fe514c0dc8649e922ae7b10131892e2c4b4c79c3862ba', 'scriptPubKey': '76a914cb4067ff77f8133dc20790c702a994006a2f956c88ac', 'label': u'\u6240\u4ee5\uff0c\u6211\u5011\u975e\u5e38\u9700\u8981\u9019\u6a23\u4e00\u7a2e\u96fb\u5b50\u652f\u4ed8\u7cfb\u7d71\uff0c\u5b83\u57fa\u65bc\u5bc6\u78bc\u5b78\u539f\u7406\u800c\u4e0d\u57fa\u65bc\u4fe1\u7528\uff0c\u4f7f\u5f97\u4efb\u4f55\u9054', 'amt': '3877.54189259', 'addr': 'LdkebBKVXSs6NNoPJWGM8KciDnL8LhXXjb'}, {'confs': 5175326, 'mmid': '98831F3A:L:1', 'vout': 0, 'txid': '5b78344d2b0349215becb027e57a6c0ee3de57a4ee4e557c1131a395a4c47873', 'scriptPubKey': '76a9141dec6649620b2a9979113c6c051e2a536fa14d4588ac', 'label': u'House purchase', 'amt': '4734.38345591', 'addr': 'LMxB474SVfxeYdqxNrM1WZDZMnifteSMv1'}, {'confs': 5649429, 'mmid': '98831F3A:S:1', 'vout': 6, 'txid': 'ea4a883fff1a4d560dcf8aac258a93bc69583bc287dd0d37a07c6dbbba978784', 'scriptPubKey': 'a914b9fb1a947913903086e1651f03d565f332022da187', 'label': u"Alice's allowance", 'amt': '2787.17068817', 'addr': 'MQrY3vEbqKMBgegXrSaR93R2HoTDE5bKrY'}]
+[{'mmid': '98831F3A:L:1', 'amt': '43.21628', 'addr': 'LMxB474SVfxeYdqxNrM1WZDZMnifteSMv1'}, {'mmid': '98831F3A:C:1', 'amt': '217.12191', 'addr': 'LdkebBKVXSs6NNoPJWGM8KciDnL8LhXXjb'}, {'is_chg': True, 'addr': 'ltc1q4u2lz2z23c6xa4hvle7cspxj085qau0ywut87w', 'amt': '12729.6269782', 'mmid': '98831F3A:B:2'}, {'addr': 'MMj9U3PtKa52nvQE1dRJdpdgDsyCkZSQbD', 'amt': '202.22671'}, {'mmid': '98831F3A:S:1', 'amt': '119.28079', 'addr': 'MQrY3vEbqKMBgegXrSaR93R2HoTDE5bKrY'}, {'mmid': '98831F3A:B:1', 'amt': '38.91625', 'addr': 'ltc1qdvgqsz94ht20lr8fyk5v7n884hu9p7d8k9easu'}]
+TvwWgaAnrkQFpAxxjBa4PHvJ8NsJDsurtiv2HuzdnXWjQmY7LHyt6PZn5J7BNtB5VzHtBG7bUosCAMFon8yxUe2mYTZoH9e6dpoAz9E6JDZtUNYz9YnF1Z3jFND1X89RuKAk6YVBrfWseeyHR8vZDdaFzBPK5SPos

+ 80 - 121
test/test.py

@@ -234,6 +234,20 @@ cfgs = {
 	'17': { 'tmpdir': os.path.join(u'test',u'tmp17') },
 	'18': { 'tmpdir': os.path.join(u'test',u'tmp18') },
 #	'19': { 'tmpdir': os.path.join(u'test',u'tmp19'), 'wpasswd':'abc' }, B2X
+
+	'31': { 'tmpdir': os.path.join(u'test',u'tmp31'), # L
+			'addr_idx_list':'1-2', 'segwit': False,
+			'dep_generators': {'addrs':'ref_tx_addrgen1'} },
+	'32': { 'tmpdir': os.path.join(u'test',u'tmp32'), # C
+			'addr_idx_list':'1-2', 'segwit': False,
+			'dep_generators': {'addrs':'ref_tx_addrgen2'} },
+	'33': { 'tmpdir': os.path.join(u'test',u'tmp33'), # S
+			'addr_idx_list':'1-2', 'segwit': True,
+			'dep_generators': {'addrs':'ref_tx_addrgen3'} },
+	'34': { 'tmpdir': os.path.join(u'test',u'tmp34'), # B
+			'addr_idx_list':'1-2', 'segwit': True,
+			'dep_generators': {'addrs':'ref_tx_addrgen4'} },
+
 	'1': {
 		'tmpdir':        os.path.join(u'test',u'tmp1'),
 		'wpasswd':       u'Dorian-α',
@@ -551,11 +565,14 @@ cfgs = {
 		'ref_keyaddrfile_chksum_etc': 'EF49 967D BD6C FE45',
 		'ref_passwdfile_chksum':   'A983 DAB9 5514 27FB',
 		'ref_tx_file': {
-			'btc': 'FFB367[1.234]{}.rawtx',
-			'bch': '99BE60-BCH[106.6789]{}.rawtx',
-			'b2x': '6A52BC-B2X[106.6789,tl=1320969600]{}.rawtx',
-			'ltc': '75F455-LTC[106.6789]{}.rawtx',
-			'eth': 'BC79AB-ETH[0.123]{}.rawtx',
+			'btc': ('0B8D5A[15.31789,14,tl=1320969600].rawtx',
+					'0C7115[15.86255,14,tl=1320969600].testnet.rawtx'),
+			'bch': ('460D4D-BCH[10.19764,tl=1320969600].rawtx',
+					'359FD5-BCH[6.68868,tl=1320969600].testnet.rawtx'),
+			'ltc': ('AF3CDF-LTC[620.76194,1453,tl=1320969600].rawtx',
+					'A5A1E0-LTC[1454.64322,1453,tl=1320969600].testnet.rawtx'),
+			'eth': ('BC79AB-ETH[0.123].rawtx',
+					'F04889-ETH[0.123].testnet.rawtx'),
 		},
 		'ic_wallet':       u'98831F3A-5482381C-18460FB1[256,1].mmincog',
 		'ic_wallet_hex':   u'98831F3A-1630A9F2-870376A9[256,1].mmincox',
@@ -590,10 +607,11 @@ cfgs = {
 	},
 }
 
+dfl_words = os.path.join(ref_dir,cfgs['8']['seed_id']+'.mmwords')
+
 # The Parity dev address with lots of coins.  Create with "ethkey -b info ''":
 eth_addr = '00a329c0648769a73afac7f9381e08fb43dbea72'
 eth_key = '4d5db4107d237df6a3d58ee5f70ae63d73d7658d4026f2eefd2f204c81682cb7'
-eth_wallet = os.path.join(ref_dir,cfgs['8']['seed_id']+'.mmwords')
 eth_args = [u'--outdir={}'.format(cfgs['22']['tmpdir']),'--coin=eth','--rpc-port=8549','--quiet']
 
 from copy import deepcopy
@@ -885,25 +903,24 @@ cmd_group['ref_alt'] = (
 
 # undocumented admin cmds - precede with 'admin'
 cmd_group_admin = OrderedDict()
-cmd_group_admin['create_ref_tx'] = (
-	('ref_tx_setup',                     'regtest (Bob and Alice) mode setup'),
-	('ref_tx_addrgen_bob_ref_wallet',    'address generation (Bob - reference wallet)'),
-	('ref_tx_addrimport_bob_ref_wallet', "importing Bob's addresses (reference wallet)"),
-	('ref_tx_fund_bob',                  "funding Bob's wallet (reference wallet)"),
-	('ref_tx_bob_split',                 "splitting Bob's funds (reference wallet)"),
-	('ref_tx_generate',                  'mining a block'),
-	('ref_tx_bob_create_tx',             "creating reference transaction"),
-	('ref_tx_bob_modify_tx',             "modifying reference transaction (testnet+mainnet)"),
-)
+cmd_group_admin['create_ref_tx'] = OrderedDict([
+	['ref_tx_addrgen1', (31,'address generation (legacy)', [[[],1]])],
+	['ref_tx_addrgen2', (32,'address generation (compressed)', [[[],1]])],
+	['ref_tx_addrgen3', (33,'address generation (segwit)', [[[],1]])],
+	['ref_tx_addrgen4', (34,'address generation (bech32)', [[[],1]])],
+	['ref_tx_txcreate', (31,'transaction creation', [[['addrs'],31],[['addrs'],32],[['addrs'],33],[['addrs'],34]])],
+])
 cmd_list_admin = OrderedDict()
-cmd_data_admin = OrderedDict()
 for k in cmd_group_admin: cmd_list_admin[k] = []
 
+cmd_data_admin = OrderedDict()
+for k,v in [('create_ref_tx',('reference transaction creation',[31,32,33,34]))]:
+	cmd_data_admin['info_'+k] = v
+	for i in cmd_group_admin[k]:
+		cmd_list_admin[k].append(i)
+		cmd_data_admin[i] = cmd_group_admin[k][i]
+
 cmd_data_admin['info_create_ref_tx'] = 'create reference tx',[8]
-for a,b in cmd_group_admin['create_ref_tx']:
-	cmd_list_admin['create_ref_tx'].append(a)
-	cmd_data_admin[a] = (8,b,[[[],8]])
-# end undocumented admin commands
 
 cmd_list = OrderedDict()
 for k in cmd_group: cmd_list[k] = []
@@ -912,7 +929,7 @@ cmd_data = OrderedDict()
 for k,v in (
 		('help', ('help screens',[])),
 		('dfl_wallet', ('basic operations with default wallet',[15,16])),
-		('main', ('basic operations',[1,2,3,4,5,15,16])),
+		('main', ('basic operations',[1,2,3,4,5,6,15,16])),
 		('tool', ('tools',[9]))
 	):
 	cmd_data['info_'+k] = v
@@ -1147,13 +1164,13 @@ class MMGenExpect(MMGenPexpect):
 def create_fake_unspent_entry(coinaddr,al_id=None,idx=None,lbl=None,non_mmgen=False,segwit=False):
 	if 'S' not in g.proto.mmtypes: segwit = False
 	if lbl: lbl = ' ' + lbl
-	spk_beg,spk_end = (
-		('76a914','88ac'),
-		('a914','87'),
-		(g.proto.witness_vernum_hex+'14','')
-		)[segwit and (coinaddr.addr_fmt=='p2sh') + 2*(coinaddr.addr_fmt=='bech32')]
+	k = coinaddr.addr_fmt
+	if not segwit and k == 'p2sh': k = 'p2pkh'
+	s_beg,s_end = { 'p2pkh':  ('76a914','88ac'),
+					'p2sh':   ('a914','87'),
+					'bech32': (g.proto.witness_vernum_hex+'14','') }[k]
 	amt1,amt2 = {'btc':(10,40),'bch':(10,40),'ltc':(1000,4000)}[coin_sel]
-	return {
+	ret = {
 		'account': '{}:{}'.format(g.proto.base_coin.lower(),coinaddr) if non_mmgen \
 			else (u'{}:{}{}'.format(al_id,idx,lbl)),
 		'vout': int(getrandnum(4) % 8),
@@ -1161,9 +1178,10 @@ def create_fake_unspent_entry(coinaddr,al_id=None,idx=None,lbl=None,non_mmgen=Fa
 		'amount': g.proto.coin_amt('{}.{}'.format(amt1 + getrandnum(4) % amt2, getrandnum(4) % 100000000)),
 		'address': coinaddr,
 		'spendable': False,
-		'scriptPubKey': '{}{}{}'.format(spk_beg,coinaddr.hex,spk_end),
+		'scriptPubKey': '{}{}{}'.format(s_beg,coinaddr.hex,s_end),
 		'confirmations': getrandnum(3) / 2 # max: 8388608 (7 digits)
 	}
+	return ret
 
 labels = [
 	"Automotive",
@@ -1230,7 +1248,7 @@ def write_fake_data_to_file(d):
 	if opt.verbose or opt.exact_output:
 		sys.stderr.write(u"Fake transaction wallet data written to file {!r}\n".format(unspent_data_file))
 
-def create_tx_data(sources):
+def create_tx_data(sources,addrs_per_wallet=addrs_per_wallet):
 	tx_data,ad = {},AddrData()
 	for s in sources:
 		afile = get_file_with_ext('addrs',cfgs[s]['tmpdir'])
@@ -1736,12 +1754,14 @@ class MMGenTestSuite(object):
 						txdo_args=[],
 						add_args=[],
 						view='n',
+						addrs_per_wallet=addrs_per_wallet,
 						non_mmgen_input_compressed=True):
+
 		if opt.verbose or opt.exact_output:
 			sys.stderr.write(green('Generating fake tracking wallet info\n'))
 
 		silence()
-		ad,tx_data = create_tx_data(sources)
+		ad,tx_data = create_tx_data(sources,addrs_per_wallet)
 		dfake = create_fake_unspent_data(ad,tx_data,non_mmgen_input,non_mmgen_input_compressed)
 		write_fake_data_to_file(repr(dfake))
 		cmd_args = make_txcreate_cmdline(tx_data)
@@ -1832,11 +1852,11 @@ class MMGenTestSuite(object):
 		t.expect('Save signed transaction.*?\? \(Y/n\): ','y',regex=True)
 		t.written_to_file('Signed transaction' + (' #' + tnum if tnum else ''), oo=True)
 
-	def txsign(self,name,txfile,wf,pf='',bumpf='',save=True,has_label=False,extra_opts=[]):
+	def txsign(self,name,txfile,wf,pf='',bumpf='',save=True,has_label=False,do_passwd=True,extra_opts=[]):
 		t = MMGenExpect(name,'mmgen-txsign', extra_opts + ['-d',cfg['tmpdir'],txfile]+([],[wf])[bool(wf)])
 		t.license()
 		t.view_tx('n')
-		t.passphrase('MMGen wallet',cfg['wpasswd'])
+		if do_passwd: t.passphrase('MMGen wallet',cfg['wpasswd'])
 		if save:
 			self.txsign_end(t,has_label=has_label)
 			t.ok()
@@ -2179,7 +2199,7 @@ class MMGenTestSuite(object):
 	def autosign(self,name): # tests everything except device detection, mount/unmount
 		if skip_for_win(): return
 		fdata = (('btc',''),('bch',''),('ltc','litecoin'),('eth','ethereum'))
-		tfns = [cfgs['8']['ref_tx_file'][c].format('') for c,d in fdata]
+		tfns = [cfgs['8']['ref_tx_file'][c][0] for c,d in fdata]
 		tfs = [os.path.join(ref_dir,d[1],fn) for d,fn in zip(fdata,tfns)]
 		try: os.mkdir(os.path.join(cfg['tmpdir'],'tx'))
 		except: pass
@@ -2454,11 +2474,11 @@ class MMGenTestSuite(object):
 #		self.txcreate_common(name,sources=['8'])
 
 	def ref_tx_chk(self,name):
-		tf = os.path.join(ref_dir,ref_subdir,cfg['ref_tx_file'][g.coin.lower()].format(tn_ext))
-		wf = os.path.join(ref_dir,cfg['ref_wallet'])
+		tf = os.path.join(ref_dir,ref_subdir,cfg['ref_tx_file'][g.coin.lower()][bool(tn_ext)])
+		wf = dfl_words
 		write_to_tmpfile(cfg,pwfile,cfg['wpasswd'])
 		pf = get_tmpfile_fn(cfg,pwfile)
-		self.txsign(name,tf,wf,pf,save=False,has_label=True)
+		self.txsign(name,tf,wf,pf,save=False,has_label=True,do_passwd=False)
 
 	def ref_tool_decrypt(self,name):
 		f = os.path.join(ref_dir,ref_enc_fn)
@@ -2690,7 +2710,8 @@ class MMGenTestSuite(object):
 		silence()
 		psave = g.proto
 		g.proto = CoinProtocol(g.coin,True)
-		g.proto.bech32_hrp = g.proto.bech32_hrp_rt
+		if hasattr(g.proto,'bech32_hrp_rt'):
+			g.proto.bech32_hrp = g.proto.bech32_hrp_rt
 		addr = AddrList(fn).data[idx].addr
 		g.proto = psave
 		end_silence()
@@ -2736,9 +2757,8 @@ class MMGenTestSuite(object):
 		t.ok()
 
 	def regtest_bob_rbf_bump(self,name):
-		txfile = get_file_with_ext(u',{}]{x}.sigtx'.format(
-					rtFee[1][:-1],x=u'-α' if g.debug_utf8 else ''),
-						cfg['tmpdir'],delete=False,no_dot=True)
+		ext = u',{}]{x}.testnet.sigtx'.format(rtFee[1][:-1],x=u'-α' if g.debug_utf8 else '')
+		txfile = get_file_with_ext(ext,cfg['tmpdir'],delete=False,no_dot=True)
 		return self.regtest_user_txbump(name,'bob',txfile,rtFee[2],'c')
 
 	def regtest_generate(self,name,coin=None,num_blocks=1):
@@ -3028,7 +3048,7 @@ class MMGenTestSuite(object):
 
 	def ethdev_addrgen(self,name):
 		from mmgen.addr import MMGenAddrType
-		t = MMGenExpect(name,'mmgen-addrgen', eth_args + [eth_wallet,'1-10'])
+		t = MMGenExpect(name,'mmgen-addrgen', eth_args + [dfl_words,'1-10'])
 		t.written_to_file('Addresses')
 		t.ok()
 
@@ -3061,7 +3081,7 @@ class MMGenTestSuite(object):
 		key_fn = get_tmpfile_fn(cfg,cfg['parity_keyfile'])
 		write_to_tmpfile(cfg,cfg['parity_keyfile'],eth_key+'\n')
 		tx_fn = get_file_with_ext(ext,cfg['tmpdir'],no_dot=True)
-		t = MMGenExpect(name,'mmgen-txsign',eth_args + ([],['--yes'])[ni] + ['-k',key_fn,tx_fn,eth_wallet])
+		t = MMGenExpect(name,'mmgen-txsign',eth_args + ([],['--yes'])[ni] + ['-k',key_fn,tx_fn,dfl_words])
 		self.txsign_ui_common(t,name,ni=ni)
 
 	def ethdev_txsign_ni(self,name):
@@ -3117,85 +3137,24 @@ class MMGenTestSuite(object):
 		ok()
 
 	# undocumented admin commands
-	ref_tx_setup = regtest_setup
-	ref_tx_generate = regtest_generate
-
-	def ref_tx_addrgen_bob_ref_wallet(self,name):
-		wf = os.path.join(ref_dir,cfg['ref_wallet'])
-		self.regtest_addrgen(name,'bob',wf=wf,passwd=cfg['wpasswd'],addr_range='1-100')
-
-	def ref_tx_addrimport_bob_ref_wallet(self,name):
-		self.regtest_addrimport(name,'bob',sid=cfg['seed_id'],addr_range='1-100',num_addrs=100)
-
-	def ref_tx_fund_bob(self,name):
-		mmtype = g.proto.mmtypes[-1]
-		self.regtest_fund_wallet(name,'bob',mmtype,rtFundAmt,sid=cfg['seed_id'],addr_range='1-100')
-
-	def ref_tx_bob_split(self,name):
-		sid = cfg['seed_id']
-		outputs_cl = [sid+':C:1,100', sid+':L:2,200',sid+':'+rtBobOp3]
-		wf = os.path.join(ref_dir,cfg['ref_wallet'])
-		return self.regtest_user_txdo(name,'bob',rtFee[0],outputs_cl,'1',wf=wf,pw=cfg['wpasswd'],
-										do_label=True,full_tx_view=True)
-
-	def ref_tx_bob_create_tx(self,name):
-		sid = cfg['seed_id']
-		psave = g.proto
-		g.proto = CoinProtocol(g.coin,True)
-		privhex = PrivKey(os.urandom(32),compressed=True,pubkey_type='std')
-		addr = AddrGenerator('p2pkh').to_addr(KeyGenerator('std').to_pubhex(privhex))
-		g.proto = psave
-		outputs_cl = [sid+':{}:3,1.1234'.format(g.proto.mmtypes[-1]), sid+':C:5,5.5555',sid+':L:4',addr+',100']
-		pw = cfg['wpasswd']
-		# create tx in cwd
-		t = MMGenExpect(name,'mmgen-txcreate',
-				['-B','--bob','--tx-fee='+rtFee[0],'--locktime=1320969600'] + outputs_cl)
-		self.txcreate_ui_common(t,'txdo',menu=['M'],inputs='1 2 3',add_comment=ref_tx_label_zh,view='n')
-		t.expect('Save transaction? (y/N): ','y')
-		fn = t.written_to_file('Transaction')
-		write_to_tmpfile(cfg,'ref_tx_fn',fn)
-		t.ok()
-
-	def ref_tx_bob_modify_tx(self,name):
-		MMGenExpect(name,'',msg_only=True)
-		fn = read_from_tmpfile(cfg,'ref_tx_fn')
-		with open(fn) as f:
-			lines = f.read().splitlines()
-
-		tx = {}
-		from ast import literal_eval
-		for k,i in (('in',3),('out',4)):
-			tx[k] = literal_eval(lines[i])
-			tx[k+'_addrs'] = [i['addr'] for i in tx[k]]
-
-		psave = g.proto
-		g.proto = CoinProtocol(g.coin,True)
-		from mmgen.obj import CoinAddr
-		for k in ('in_addrs','out_addrs'):
-			tx[k+'_hex'] = [(CoinAddr(a).hex,CoinAddr(a).addr_fmt) for a in tx[k]]
-		g.proto = psave
-
-		for k in ('in_addrs','out_addrs'):
-			tx[k+'_conv'] = [g.proto.pubhash2addr(h,(False,True)[f=='p2sh']) for h,f in tx[k+'_hex']]
-
-		for k in ('in','out'):
-			for i in range(len(tx[k])):
-				tx[k][i]['addr'] = tx[k+'_addrs_conv'][i]
-
-		lines_tn = [lines[1].replace('REGTEST','TESTNET')] + lines[2:]
-		o_tn = '\n'.join([make_chksum_6(' '.join(lines_tn))] + lines_tn)+'\n'
-		fn_tn = fn.replace('.rawtx','.testnet.rawtx')
-
-		lines_mn = [lines[1].replace('REGTEST','MAINNET'),
-					lines[2],
-					repr(tx['in']),
-					repr(tx['out'])] + lines[5:]
-		o_mn = '\n'.join([make_chksum_6(' '.join(lines_mn))] + lines_mn)+'\n'
-		fn_mn = fn.replace('.rawtx','.mainnet.rawtx')
-		ok()
+	def ref_tx_addrgen(self,name,atype='L'):
+		if atype not in g.proto.mmtypes: return
+		t = MMGenExpect(name,'mmgen-addrgen',['--outdir='+cfg['tmpdir'],'--type='+atype,dfl_words,'1-2'])
+		t.read()
 
-		write_data_to_file(fn_tn,o_tn,'testnet TX data',ask_overwrite=False,ignore_opt_outdir=True)
-		write_data_to_file(fn_mn,o_mn,'mainnet TX data',ask_overwrite=False,ignore_opt_outdir=True)
+	def ref_tx_addrgen1(self,name): self.ref_tx_addrgen(name,atype='L')
+	def ref_tx_addrgen2(self,name): self.ref_tx_addrgen(name,atype='C')
+	def ref_tx_addrgen3(self,name): self.ref_tx_addrgen(name,atype='S')
+	def ref_tx_addrgen4(self,name): self.ref_tx_addrgen(name,atype='B')
+
+	def ref_tx_txcreate(self,name,f1,f2,f3,f4):
+		sources = ['31','32']
+		if 'S' in g.proto.mmtypes: sources += ['33']
+		if 'B' in g.proto.mmtypes: sources += ['34']
+		self.txcreate_common(name,  sources=sources,
+									addrs_per_wallet=2,
+									add_args=['--locktime=1320969600'],
+									do_label=True)
 
 	# END methods
 	for k in (

+ 7 - 4
test/tooltest.py

@@ -139,9 +139,12 @@ cfg = {
 	'tmpdir_num':    10,
 	'refdir':        'test/ref',
 	'txfile': {
-		'btc': 'FFB367[1.234]{}.rawtx',
-		'bch': '99BE60-BCH[106.6789]{}.rawtx',
-		'ltc': '75F455-LTC[106.6789]{}.rawtx',
+		'btc': ('0B8D5A[15.31789,14,tl=1320969600].rawtx',
+				'0C7115[15.86255,14,tl=1320969600].testnet.rawtx'),
+		'bch': ('460D4D-BCH[10.19764,tl=1320969600].rawtx',
+				'359FD5-BCH[6.68868,tl=1320969600].testnet.rawtx'),
+		'ltc': ('AF3CDF-LTC[620.76194,1453,tl=1320969600].rawtx',
+				'A5A1E0-LTC[1454.64322,1453,tl=1320969600].testnet.rawtx'),
 	},
 	'addrfile': '98831F3A{}[1,31-33,500-501,1010-1011]{}.addrs',
 	'addrfile_chk':  {
@@ -474,7 +477,7 @@ class MMGenToolTestSuite(object):
 	def Twview(self,name):
 		self.run_cmd_out(name,literal=True)
 	def Txview(self,name):
-		fn = os.path.join(cfg['refdir'],ref_subdir,cfg['txfile'][g.coin.lower()].format(tn_ext))
+		fn = os.path.join(cfg['refdir'],ref_subdir,cfg['txfile'][g.coin.lower()][bool(tn_ext)])
 		self.run_cmd_out(name,fn,literal=True)
 
 # main()