Skip to content

Commit d24a5b6

Browse files
committed
add snowflakes and tests
1 parent d1dccfd commit d24a5b6

File tree

5 files changed

+67
-13
lines changed

5 files changed

+67
-13
lines changed

riemann/simple.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ def guess_version(redeem_script):
1414
We want to signal nSequence if we're using OP_CSV.
1515
Unless we're in zcash.
1616
'''
17-
if 'zcash' in riemann.get_current_network_name():
17+
n = riemann.get_current_network_name()
18+
if 'sprout' in n:
1819
return 1
20+
if 'overwinter' in n:
21+
return 3
22+
if 'sapling' in n:
23+
return 4
1924
try:
2025
script_array = redeem_script.split()
2126
script_array.index('OP_CHECKSEQUENCEVERIFY')

riemann/tests/test_simple.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ def test_guess_version(self):
2626
simple.guess_version('OP_IF'),
2727
1)
2828

29+
riemann.select_network('zcash_overwinter_main')
30+
self.assertEqual(
31+
simple.guess_version('OP_IF'),
32+
3)
33+
34+
riemann.select_network('zcash_sapling_main')
35+
self.assertEqual(
36+
simple.guess_version('OP_IF'),
37+
4)
38+
2939
def test_guess_sequence(self):
3040
self.assertEqual(
3141
simple.guess_sequence('OP_IF'),

riemann/tests/tx/test_tx_builder.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import unittest
22
import riemann
3-
from .. import helpers
4-
from ...tx import tx_builder as tb
3+
from unittest import mock
4+
from riemann.tests import helpers
5+
from riemann.tx import tx_builder as tb
56

67

78
class TestTxBuilder(unittest.TestCase):
@@ -279,3 +280,21 @@ def test_length_prepend(self):
279280
self.assertEqual(
280281
tb.length_prepend(b'\x00' * 256),
281282
b'\xfd\x00\x01' + b'\x00' * 256)
283+
284+
@mock.patch('riemann.tx.tx_builder.tx')
285+
def test_sprout_snowflake(self, mock_tx):
286+
# TODO: Improve
287+
riemann.select_network('zcash_sprout_main')
288+
mock_tx.SproutTx.return_value = 0
289+
self.assertEqual(
290+
tb.make_tx(0, 0, 0, 0, tx_joinsplits=[]),
291+
0)
292+
293+
@mock.patch('riemann.tx.tx_builder.tx')
294+
def test_overwinter_snowflake(self, mock_tx):
295+
# TODO: Improve
296+
riemann.select_network('zcash_overwinter_main')
297+
mock_tx.OverwinterTx.return_value = 0
298+
self.assertEqual(
299+
tb.make_tx(0, 0, 0, 0, expiry=0),
300+
0)

riemann/tx/tx_builder.py

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,38 @@ def make_witness_input_and_witness(outpoint, sequence,
248248

249249

250250
def make_tx(version, tx_ins, tx_outs, lock_time,
251-
expiry=None, tx_witnesses=None):
252-
251+
expiry=None, tx_witnesses=None,
252+
tx_joinsplits=None, joinsplit_pubkey=None, joinsplit_sig=None):
253253
'''
254254
int, list(TxIn), list(TxOut), int, list(InputWitness) -> Tx
255255
'''
256-
if 'decred' in riemann.get_current_network_name():
257-
return tx.DecredTx(version=utils.i2le_padded(version, 4),
258-
tx_ins=tx_ins,
259-
tx_outs=tx_outs,
260-
lock_time=utils.i2le_padded(lock_time, 4),
261-
expiry=utils.i2le_padded(expiry, 4),
262-
tx_witnesses=[tx_witnesses])
256+
n = riemann.get_current_network_name()
257+
if 'decred' in n:
258+
return tx.DecredTx(
259+
version=utils.i2le_padded(version, 4),
260+
tx_ins=tx_ins,
261+
tx_outs=tx_outs,
262+
lock_time=utils.i2le_padded(lock_time, 4),
263+
expiry=utils.i2le_padded(expiry, 4),
264+
tx_witnesses=[tx_witnesses])
265+
if 'sprout' in n and tx_joinsplits is not None:
266+
return tx.SproutTx(
267+
version=version,
268+
tx_ins=tx_ins,
269+
tx_outs=tx_outs,
270+
lock_time=utils.i2le_padded(lock_time, 4),
271+
tx_joinsplits=tx_joinsplits,
272+
joinsplit_pubkey=joinsplit_pubkey,
273+
joinsplit_sig=joinsplit_sig)
274+
if 'overwinter' in n:
275+
return tx.OverwinterTx(
276+
tx_ins=tx_ins,
277+
tx_outs=tx_outs,
278+
lock_time=utils.i2le_padded(lock_time, 4),
279+
expiry_height=utils.i2le_padded(expiry, 4),
280+
tx_joinsplits=tx_joinsplits,
281+
joinsplit_pubkey=joinsplit_pubkey,
282+
joinsplit_sig=joinsplit_sig)
263283
flag = riemann.network.SEGWIT_TX_FLAG \
264284
if tx_witnesses is not None else None
265285
return tx.Tx(version=utils.i2le_padded(version, 4),

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name='riemann-tx',
7-
version='0.10.3',
7+
version='1.0.0',
88
description=('Transaction creation library for Bitcoin-like coins'),
99
url='https://github.com/summa-tx/riemann',
1010
author='James Prestwich',

0 commit comments

Comments
 (0)