Resolve decimal vs float issues
This commit is contained in:
parent
a2db35137b
commit
aa4b98a7c3
|
@ -4,16 +4,16 @@
|
|||
#
|
||||
|
||||
import argparse
|
||||
import decimal
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
from decimal import Decimal
|
||||
from slickrpc import Proxy
|
||||
from slickrpc.exc import RpcException
|
||||
|
||||
DEFAULT_FEE = decimal.Decimal('0.0001')
|
||||
DEFAULT_FEE = Decimal('0.0001')
|
||||
|
||||
#
|
||||
# Smoke test definitions
|
||||
|
@ -128,18 +128,15 @@ def run_cmd(results, case, zcash, name, args=[]):
|
|||
|
||||
def wait_for_balance(zcash, zaddr, expected=None, timeout=900):
|
||||
print('Waiting for funds to %s...' % zaddr)
|
||||
if expected is not None:
|
||||
print('Expecting %s' % expected)
|
||||
|
||||
unconfirmed_balance = zcash.z_getbalance(zaddr, 0)
|
||||
print('Unconfirmed balance: %s' % unconfirmed_balance)
|
||||
unconfirmed_balance = Decimal(zcash.z_getbalance(zaddr, 0)).quantize(Decimal('1.00000000'))
|
||||
print('Expecting: %s; Unconfirmed Balance: %s' % (expected, unconfirmed_balance))
|
||||
if expected is not None and unconfirmed_balance != expected:
|
||||
print('WARNING: Unconfirmed balance does not match expected balance')
|
||||
|
||||
ttl = timeout
|
||||
while True:
|
||||
balance = zcash.z_getbalance(zaddr)
|
||||
if balance == unconfirmed_balance:
|
||||
balance = Decimal(zcash.z_getbalance(zaddr)).quantize(Decimal('1.00000000'))
|
||||
if (expected is not None and balance == unconfirmed_balance) or (expected is None and balance > 0):
|
||||
print('Received %s' % balance)
|
||||
return balance
|
||||
|
||||
|
@ -209,7 +206,7 @@ def z_sendmany(results, case, zcash, from_addr, recipients):
|
|||
def check_z_sendmany(results, case, zcash, from_addr, recipients):
|
||||
txid = z_sendmany(results, case, zcash, from_addr, recipients)
|
||||
if txid is None:
|
||||
return decimal.Decimal('0')
|
||||
return [Decimal('0')]
|
||||
return [wait_and_check_balance(results, case, zcash, to_addr, amount) for (to_addr, amount) in recipients]
|
||||
|
||||
def check_z_sendmany_parallel(results, zcash, runs):
|
||||
|
@ -217,7 +214,7 @@ def check_z_sendmany_parallel(results, zcash, runs):
|
|||
txids = [(run, z_sendmany(results, run[0], zcash, run[1], run[2])) for run in runs]
|
||||
# Then wait for balance updates caused by successful transactions
|
||||
return [
|
||||
wait_and_check_balance(results, run[0], zcash, to_addr, amount) if txid is not None else decimal.Decimal('0')
|
||||
wait_and_check_balance(results, run[0], zcash, to_addr, amount) if txid is not None else Decimal('0')
|
||||
for (run, txid) in txids
|
||||
for (to_addr, amount) in run[2]]
|
||||
|
||||
|
@ -227,7 +224,7 @@ def z_mergetoaddress(results, case, zcash, from_addrs, to_addr):
|
|||
def check_z_mergetoaddress(results, case, zcash, from_addrs, to_addr, amount):
|
||||
txid = z_mergetoaddress(results, case, zcash, from_addrs, to_addr)
|
||||
if txid is None:
|
||||
return decimal.Decimal('0')
|
||||
return Decimal('0')
|
||||
return wait_and_check_balance(results, case, zcash, to_addr, amount)
|
||||
|
||||
def check_z_mergetoaddress_parallel(results, zcash, runs):
|
||||
|
@ -235,7 +232,7 @@ def check_z_mergetoaddress_parallel(results, zcash, runs):
|
|||
txids = [(run, z_mergetoaddress(results, run[0], zcash, run[1], run[2])) for run in runs]
|
||||
# Then wait for balance updates caused by successful transactions
|
||||
return [
|
||||
wait_and_check_balance(results, run[0], zcash, run[2], run[3]) if txid is not None else decimal.Decimal('0')
|
||||
wait_and_check_balance(results, run[0], zcash, run[2], run[3]) if txid is not None else Decimal('0')
|
||||
for (run, txid) in txids]
|
||||
|
||||
|
||||
|
@ -327,10 +324,10 @@ def transaction_chain(zcash):
|
|||
|
||||
# Sprout -> taddr
|
||||
taddr_balance = check_z_sendmany(
|
||||
results, '4c', zcash, sprout_zaddr_1, [(taddr_1, (starting_balance / 10) * 6)])[0]
|
||||
results, '4c', zcash, sprout_zaddr_1, [(taddr_1, (starting_balance / Decimal('10')) * Decimal('6'))])[0]
|
||||
sprout_balance -= taddr_balance + DEFAULT_FEE
|
||||
|
||||
balance = run_cmd(results, '5f', zcash, 'z_getbalance', [sprout_zaddr_1])
|
||||
balance = Decimal(run_cmd(results, '5f', zcash, 'z_getbalance', [sprout_zaddr_1])).quantize(Decimal('1.00000000'))
|
||||
if balance != sprout_balance:
|
||||
results['5f'] = False
|
||||
|
||||
|
@ -338,11 +335,11 @@ def transaction_chain(zcash):
|
|||
# Send it all here because z_sendmany pick a new t-addr for change
|
||||
sapling_balance = check_z_sendmany(
|
||||
results, '4f', zcash, taddr_1, [(sapling_zaddr_1, taddr_balance - DEFAULT_FEE)])[0]
|
||||
taddr_balance = 0
|
||||
taddr_balance = Decimal('0')
|
||||
|
||||
# Sapling -> taddr
|
||||
taddr_balance = check_z_sendmany(
|
||||
results, '4i', zcash, sapling_zaddr_1, [(taddr_1, (starting_balance / 10) * 3)])[0]
|
||||
results, '4i', zcash, sapling_zaddr_1, [(taddr_1, (starting_balance / Decimal('10')) * Decimal('3'))])[0]
|
||||
sapling_balance -= taddr_balance + DEFAULT_FEE
|
||||
|
||||
#
|
||||
|
@ -370,16 +367,16 @@ def transaction_chain(zcash):
|
|||
# Sapling -> multiple Sapling
|
||||
check_z_sendmany_parallel(results, zcash, [
|
||||
('4k', sprout_zaddr_2, [
|
||||
(sprout_zaddr_1, starting_balance / 10),
|
||||
(sprout_zaddr_3, starting_balance / 10),
|
||||
(sprout_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sprout_zaddr_3, starting_balance / Decimal('10')),
|
||||
]),
|
||||
('4p', taddr_2, [
|
||||
(taddr_1, starting_balance / 10),
|
||||
(taddr_3, taddr_balance - (starting_balance / 10) - DEFAULT_FEE),
|
||||
(taddr_1, starting_balance / Decimal('10')),
|
||||
(taddr_3, taddr_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE),
|
||||
]),
|
||||
('4t', sapling_zaddr_2, [
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(sapling_zaddr_3, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sapling_zaddr_3, starting_balance / Decimal('10')),
|
||||
]),
|
||||
])
|
||||
sprout_balance -= DEFAULT_FEE
|
||||
|
@ -410,8 +407,8 @@ def transaction_chain(zcash):
|
|||
|
||||
# Sprout -> taddr and Sapling
|
||||
txid = z_sendmany(results, '4n', zcash, sprout_zaddr_2, [
|
||||
(taddr_2, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(taddr_2, starting_balance / Decimal('10')),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
])
|
||||
if txid is not None:
|
||||
print('Should have failed')
|
||||
|
@ -419,8 +416,8 @@ def transaction_chain(zcash):
|
|||
|
||||
# Sprout -> multiple Sapling
|
||||
txid = z_sendmany(results, '4o', zcash, sprout_zaddr_2, [
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(sapling_zaddr_2, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sapling_zaddr_2, starting_balance / Decimal('10')),
|
||||
])
|
||||
if txid is not None:
|
||||
print('Should have failed')
|
||||
|
@ -428,8 +425,8 @@ def transaction_chain(zcash):
|
|||
|
||||
# taddr -> Sprout and Sapling
|
||||
txid = z_sendmany(results, '4s', zcash, taddr_2, [
|
||||
(sprout_zaddr_1, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(sprout_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
])
|
||||
if txid is not None:
|
||||
print('Should have failed')
|
||||
|
@ -437,8 +434,8 @@ def transaction_chain(zcash):
|
|||
|
||||
# Sapling -> multiple Sprout
|
||||
txid = z_sendmany(results, '4u', zcash, sapling_zaddr_2, [
|
||||
(sprout_zaddr_1, starting_balance / 10),
|
||||
(sprout_zaddr_2, starting_balance / 10),
|
||||
(sprout_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sprout_zaddr_2, starting_balance / Decimal('10')),
|
||||
])
|
||||
if txid is not None:
|
||||
print('Should have failed')
|
||||
|
@ -446,8 +443,8 @@ def transaction_chain(zcash):
|
|||
|
||||
# Sapling -> Sapling and Sprout
|
||||
txid = z_sendmany(results, '4x', zcash, sapling_zaddr_2, [
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(sprout_zaddr_1, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
(sprout_zaddr_1, starting_balance / Decimal('10')),
|
||||
])
|
||||
if txid is not None:
|
||||
print('Should have failed')
|
||||
|
@ -467,60 +464,60 @@ def transaction_chain(zcash):
|
|||
# Sapling -> taddr and Sapling
|
||||
check_z_sendmany_parallel(results, zcash, [
|
||||
('4m', sprout_zaddr_2, [
|
||||
(taddr_1, starting_balance / 10),
|
||||
(sprout_zaddr_1, starting_balance / 10),
|
||||
(taddr_1, starting_balance / Decimal('10')),
|
||||
(sprout_zaddr_1, starting_balance / Decimal('10')),
|
||||
]),
|
||||
('4w', sapling_zaddr_2, [
|
||||
(taddr_3, starting_balance / 10),
|
||||
(sapling_zaddr_1, starting_balance / 10),
|
||||
(taddr_3, starting_balance / Decimal('10')),
|
||||
(sapling_zaddr_1, starting_balance / Decimal('10')),
|
||||
]),
|
||||
])
|
||||
sprout_balance -= (starting_balance / 10) + DEFAULT_FEE
|
||||
sapling_balance -= (starting_balance / 10) + DEFAULT_FEE
|
||||
taddr_balance += (starting_balance / 10) * 2
|
||||
sprout_balance -= (starting_balance / Decimal('10')) + DEFAULT_FEE
|
||||
sapling_balance -= (starting_balance / Decimal('10')) + DEFAULT_FEE
|
||||
taddr_balance += (starting_balance / Decimal('10')) * Decimal('2')
|
||||
|
||||
# taddr and Sprout -> Sprout
|
||||
# taddr and Sapling -> Sapling
|
||||
check_z_mergetoaddress_parallel(results, zcash, [
|
||||
('4dd', [taddr_1, sprout_zaddr_1], sprout_zaddr_2, sprout_balance + (starting_balance / 10) - DEFAULT_FEE),
|
||||
('4ee', [taddr_3, sapling_zaddr_1], sapling_zaddr_2, sapling_balance + (starting_balance / 10) - DEFAULT_FEE),
|
||||
('4dd', [taddr_1, sprout_zaddr_1], sprout_zaddr_2, sprout_balance + (starting_balance / Decimal('10')) - DEFAULT_FEE),
|
||||
('4ee', [taddr_3, sapling_zaddr_1], sapling_zaddr_2, sapling_balance + (starting_balance / Decimal('10')) - DEFAULT_FEE),
|
||||
])
|
||||
sprout_balance += (starting_balance / 10) - DEFAULT_FEE
|
||||
sapling_balance += (starting_balance / 10) - DEFAULT_FEE
|
||||
taddr_balance -= (starting_balance / 10) * 2
|
||||
sprout_balance += (starting_balance / Decimal('10')) - DEFAULT_FEE
|
||||
sapling_balance += (starting_balance / Decimal('10')) - DEFAULT_FEE
|
||||
taddr_balance -= (starting_balance / Decimal('10')) * Decimal('2')
|
||||
|
||||
# Sprout -> multiple taddr
|
||||
# Sapling -> multiple taddr
|
||||
check_z_sendmany_parallel(results, zcash, [
|
||||
('4l', sprout_zaddr_2, [
|
||||
(taddr_1, (starting_balance / 10)),
|
||||
(taddr_3, (starting_balance / 10)),
|
||||
(taddr_1, (starting_balance / Decimal('10'))),
|
||||
(taddr_3, (starting_balance / Decimal('10'))),
|
||||
]),
|
||||
('4v', sapling_zaddr_2, [
|
||||
(taddr_4, (starting_balance / 10)),
|
||||
(taddr_5, (starting_balance / 10)),
|
||||
(taddr_4, (starting_balance / Decimal('10'))),
|
||||
(taddr_5, (starting_balance / Decimal('10'))),
|
||||
]),
|
||||
])
|
||||
sprout_balance -= ((starting_balance / 10) * 2) + DEFAULT_FEE
|
||||
sapling_balance -= ((starting_balance / 10) * 2) + DEFAULT_FEE
|
||||
taddr_balance += (starting_balance / 10) * 4
|
||||
sprout_balance -= ((starting_balance / Decimal('10')) * Decimal('2')) + DEFAULT_FEE
|
||||
sapling_balance -= ((starting_balance / Decimal('10')) * Decimal('2')) + DEFAULT_FEE
|
||||
taddr_balance += (starting_balance / Decimal('10')) * Decimal('4')
|
||||
|
||||
# multiple taddr -> Sprout
|
||||
# multiple taddr -> Sapling
|
||||
check_z_mergetoaddress_parallel(results, zcash, [
|
||||
('4z', [taddr_1, taddr_3], sprout_zaddr_2, sprout_balance + ((starting_balance / 10) * 2) - DEFAULT_FEE),
|
||||
('4bb', [taddr_4, taddr_5], sapling_zaddr_2, sapling_balance + ((starting_balance / 10) * 2) - DEFAULT_FEE),
|
||||
('4z', [taddr_1, taddr_3], sprout_zaddr_2, sprout_balance + ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE),
|
||||
('4bb', [taddr_4, taddr_5], sapling_zaddr_2, sapling_balance + ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE),
|
||||
])
|
||||
sprout_balance += ((starting_balance / 10) * 2) - DEFAULT_FEE
|
||||
sapling_balance += ((starting_balance / 10) * 2) - DEFAULT_FEE
|
||||
taddr_balance -= (starting_balance / 10) * 4
|
||||
sprout_balance += ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE
|
||||
sapling_balance += ((starting_balance / Decimal('10')) * Decimal('2')) - DEFAULT_FEE
|
||||
taddr_balance -= (starting_balance / Decimal('10')) * Decimal('4')
|
||||
|
||||
# taddr -> Sprout
|
||||
check_z_sendmany_parallel(results, zcash, [
|
||||
('4d', taddr_2, [(sprout_zaddr_3, taddr_balance - DEFAULT_FEE)]),
|
||||
])
|
||||
sprout_balance += taddr_balance - DEFAULT_FEE
|
||||
taddr_balance = 0
|
||||
taddr_balance = Decimal('0')
|
||||
|
||||
# multiple Sprout -> taddr
|
||||
# multiple Sapling -> taddr
|
||||
|
@ -529,26 +526,26 @@ def transaction_chain(zcash):
|
|||
('', [sapling_zaddr_1, sapling_zaddr_2, sapling_zaddr_3], taddr_2, sapling_balance - DEFAULT_FEE),
|
||||
])
|
||||
taddr_balance = sprout_balance + sapling_balance - (2 * DEFAULT_FEE)
|
||||
sprout_balance = 0
|
||||
sapling_balance = 0
|
||||
sprout_balance = Decimal('0')
|
||||
sapling_balance = Decimal('0')
|
||||
|
||||
# taddr -> multiple Sprout
|
||||
# taddr -> multiple Sapling
|
||||
taddr_1_balance = zcash.z_getbalance(taddr_1)
|
||||
taddr_2_balance = zcash.z_getbalance(taddr_2)
|
||||
taddr_1_balance = Decimal(zcash.z_getbalance(taddr_1)).quantize(Decimal('1.00000000'))
|
||||
taddr_2_balance = Decimal(zcash.z_getbalance(taddr_2)).quantize(Decimal('1.00000000'))
|
||||
check_z_sendmany_parallel(results, zcash, [
|
||||
('4q', taddr_1, [
|
||||
(sprout_zaddr_1, (starting_balance / 10)),
|
||||
(sprout_zaddr_2, taddr_1_balance - (starting_balance / 10) - DEFAULT_FEE),
|
||||
(sprout_zaddr_1, (starting_balance / Decimal('10'))),
|
||||
(sprout_zaddr_2, taddr_1_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE),
|
||||
]),
|
||||
('4r', taddr_2, [
|
||||
(sapling_zaddr_1, (starting_balance / 10)),
|
||||
(sapling_zaddr_2, taddr_2_balance - (starting_balance / 10) - DEFAULT_FEE),
|
||||
(sapling_zaddr_1, (starting_balance / Decimal('10'))),
|
||||
(sapling_zaddr_2, taddr_2_balance - (starting_balance / Decimal('10')) - DEFAULT_FEE),
|
||||
]),
|
||||
])
|
||||
sprout_balance = taddr_1_balance - DEFAULT_FEE
|
||||
sapling_balance = taddr_2_balance - DEFAULT_FEE
|
||||
taddr_balance = 0
|
||||
taddr_balance = Decimal('0')
|
||||
|
||||
# multiple Sprout -> taddr
|
||||
# multiple Sapling -> taddr
|
||||
|
@ -556,21 +553,21 @@ def transaction_chain(zcash):
|
|||
('', [sprout_zaddr_1, sprout_zaddr_2], taddr_1, sprout_balance - DEFAULT_FEE),
|
||||
('', [sapling_zaddr_1, sapling_zaddr_2], taddr_2, sapling_balance - DEFAULT_FEE),
|
||||
])
|
||||
taddr_balance = sprout_balance + sapling_balance - (2 * DEFAULT_FEE)
|
||||
sprout_balance = 0
|
||||
sapling_balance = 0
|
||||
taddr_balance = sprout_balance + sapling_balance - (Decimal('2') * DEFAULT_FEE)
|
||||
sprout_balance = Decimal('0')
|
||||
sapling_balance = Decimal('0')
|
||||
|
||||
# z_mergetoaddress taddr -> Sprout
|
||||
# z_mergetoaddress taddr -> Sapling
|
||||
taddr_1_balance = zcash.z_getbalance(taddr_1)
|
||||
taddr_2_balance = zcash.z_getbalance(taddr_2)
|
||||
taddr_1_balance = Decimal(zcash.z_getbalance(taddr_1)).quantize(Decimal('1.00000000'))
|
||||
taddr_2_balance = Decimal(zcash.z_getbalance(taddr_2)).quantize(Decimal('1.00000000'))
|
||||
check_z_mergetoaddress_parallel(results, zcash, [
|
||||
('4y', [taddr_1], sprout_zaddr_1, taddr_1_balance - DEFAULT_FEE),
|
||||
('4cc', [taddr_2], sapling_zaddr_1, taddr_2_balance - DEFAULT_FEE),
|
||||
])
|
||||
sprout_balance = taddr_1_balance - DEFAULT_FEE
|
||||
sapling_balance = taddr_2_balance - DEFAULT_FEE
|
||||
taddr_balance = 0
|
||||
taddr_balance = Decimal('0')
|
||||
finally:
|
||||
#
|
||||
# End the chain by returning the remaining funds
|
||||
|
@ -587,13 +584,16 @@ def transaction_chain(zcash):
|
|||
|
||||
print()
|
||||
print('Waiting for all transactions to be mined')
|
||||
[wait_for_balance(zcash, addr) for addr in all_addrs]
|
||||
for addr in all_addrs:
|
||||
balance = Decimal(zcash.z_getbalance(addr, 0)).quantize(Decimal('1.00000000'))
|
||||
if balance > 0:
|
||||
wait_for_balance(zcash, addr, balance)
|
||||
|
||||
print()
|
||||
print('Returning remaining balance minus fees')
|
||||
for addr in all_addrs:
|
||||
balance = zcash.z_getbalance(addr)
|
||||
if balance != 0:
|
||||
balance = Decimal(zcash.z_getbalance(addr)).quantize(Decimal('1.00000000'))
|
||||
if balance > 0:
|
||||
z_sendmany(None, '', zcash, addr, [(chain_end, balance - DEFAULT_FEE)])
|
||||
|
||||
return results
|
||||
|
|
Loading…
Reference in New Issue