Skip to content
This repository was archived by the owner on Nov 28, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions qa/pull-tester/rpc-tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
raise

testScripts = [
'feature_issuance.py',
# longest test should go first, to favor running tests in parallel
'wallet-hd.py',
#'walletbackup.py',
Expand Down
111 changes: 8 additions & 103 deletions qa/rpc-tests/confidential_transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ def setup_network(self, split=False):
self.sync_all()

def run_test(self):
print("Mining blocks...")
self.nodes[0].generate(101)
self.sync_all()
print("General Confidential tests")
#Running balances
node0 = self.nodes[0].getbalance()["bitcoin"]
node1 = 0
Expand Down Expand Up @@ -217,12 +215,14 @@ def run_test(self):

# Unblinded issuance of asset
issued = self.nodes[0].issueasset(1, 1, False)
assert_equal(self.nodes[0].getwalletinfo()["balance"][issued["asset"]], 1)
assert_equal(self.nodes[0].getwalletinfo()["balance"][issued["token"]], 1)
# Quick unblinded reissuance check, making 2*COIN total
self.nodes[0].reissueasset(issued["asset"], 1)

testAssetHex = issued["asset"]
# Compare resulting fields with getrawtransaction
raw_details = self.nodes[0].getrawtransaction(issued["txid"], 1)
assert_equal(issued["entropy"], raw_details["vin"][issued["vin"]]["issuance"]["assetEntropy"])
assert_equal(issued["asset"], raw_details["vin"][issued["vin"]]["issuance"]["asset"])
assert_equal(issued["token"], raw_details["vin"][issued["vin"]]["issuance"]["token"])

self.nodes[0].generate(1)
self.sync_all()

Expand Down Expand Up @@ -269,46 +269,6 @@ def run_test(self):
self.nodes[2].generate(101)
self.sync_all()

# Destroy assets
pre_destroy_btc_balance = self.nodes[2].getwalletinfo()['balance']['bitcoin']
self.nodes[2].destroyamount('bitcoin', 2) # Destroy 2 BTC
self.nodes[2].generate(1)
self.sync_all()

issuedamount = self.nodes[0].getwalletinfo()['balance'][issued["token"]]
assert_equal(issuedamount, Decimal('1.0'))
self.nodes[0].destroyamount(issued["token"], issuedamount) # Destroy all reissuance tokens of one type

self.nodes[0].generate(1)
self.sync_all()
assert(issued["token"] not in self.nodes[0].getinfo()['balance'])

# Test various issuance and auditing paths

issuancedata = self.nodes[0].issueasset(Decimal('0.00000002'), Decimal('0.00000001')) #2 of asset, 1 reissuance token
self.nodes[1].generate(1)
self.sync_all()
assert_equal(self.nodes[0].getwalletinfo()["balance"][issuancedata["asset"]], Decimal('0.00000002'))
assert_equal(self.nodes[0].getwalletinfo()["balance"][issuancedata["token"]], Decimal('0.00000001'))
self.nodes[0].reissueasset(issuancedata["asset"], Decimal('0.00000001'))
self.sync_all()
assert_equal(self.nodes[0].getwalletinfo()["balance"][issuancedata["asset"]], Decimal('0.00000003'))
# Can't reissue an issuance token (yet)
try:
self.nodes[0].reissueasset(issuancedata["token"], Decimal('0.00000001'))
raise AssertionError("You shouldn't be able to reissue a token yet")
except JSONRPCException:
pass


issuancedata = self.nodes[2].issueasset(Decimal('0.00000005'), 0) #5 of asset, 0 reissuance token
# No reissuance tokens
try:
self.nodes[2].reissueasset(issuancedata["token"], 5)
raise AssertionError("You shouldn't be able to reissue without a token")
except JSONRPCException:
pass

issuancedata = self.nodes[2].issueasset(0, Decimal('0.00000006')) #0 of asset, 6 reissuance token

# Node 2 will send node 1 a reissuance token, both will generate assets
Expand All @@ -319,68 +279,13 @@ def run_test(self):
self.nodes[2].generate(1)
self.sync_all()

assert_equal(self.nodes[2].getwalletinfo()["balance"][issuancedata["token"]], Decimal('0.00000005'))
assert_equal(self.nodes[1].getwalletinfo()["balance"][issuancedata["token"]], Decimal('0.00000001'))
redata1 = self.nodes[1].reissueasset(issuancedata["asset"], Decimal('0.05'))
redata2 = self.nodes[2].reissueasset(issuancedata["asset"], Decimal('0.025'))

self.sync_all()
# Watch-only issuances won't show up in wallet until confirmed
self.nodes[1].generate(1)
self.sync_all()

# Now have node 0 audit these issuances
blindingkey1 = self.nodes[1].dumpissuanceblindingkey(redata1["txid"], redata1["vin"])
blindingkey2 = self.nodes[2].dumpissuanceblindingkey(redata2["txid"], redata2["vin"])
blindingkey3 = self.nodes[2].dumpissuanceblindingkey(issuancedata["txid"], issuancedata["vin"])

# Need addr to get transactions in wallet. TODO: importissuances?
txdet1 = self.nodes[1].gettransaction(redata1["txid"])["details"]
txdet2 = self.nodes[2].gettransaction(redata2["txid"])["details"]
txdet3 = self.nodes[2].gettransaction(issuancedata["txid"])["details"]

# Receive addresses added last
addr1 = txdet1[len(txdet1)-1]["address"]
addr2 = txdet2[len(txdet2)-1]["address"]
addr3 = txdet3[len(txdet3)-1]["address"]

assert_equal(len(self.nodes[0].listissuances()), 6);
self.nodes[0].importaddress(addr1)
self.nodes[0].importaddress(addr2)
self.nodes[0].importaddress(addr3)

issuances = self.nodes[0].listissuances()
assert_equal(len(issuances), 9)

for issue in issuances:
if issue['txid'] == redata1["txid"] and issue['vin'] == redata1["vin"]:
assert_equal(issue['assetamount'], Decimal('-1'))
if issue['txid'] == redata2["txid"] and issue['vin'] == redata2["vin"]:
assert_equal(issue['assetamount'], Decimal('-1'))
if issue['txid'] == issuancedata["txid"] and issue['vin'] == issuancedata["vin"]:
assert_equal(issue['assetamount'], Decimal('-1'))
assert_equal(issue['tokenamount'], Decimal('-1'))

self.nodes[0].importissuanceblindingkey(redata1["txid"], redata1["vin"], blindingkey1)
self.nodes[0].importissuanceblindingkey(redata2["txid"], redata2["vin"], blindingkey2)
self.nodes[0].importissuanceblindingkey(issuancedata["txid"], issuancedata["vin"], blindingkey3)

issuances = self.nodes[0].listissuances()

for issue in issuances:
if issue['txid'] == redata1["txid"] and issue['vin'] == redata1["vin"]:
assert_equal(issue['assetamount'], Decimal('0.05'))
if issue['txid'] == redata2["txid"] and issue['vin'] == redata2["vin"]:
assert_equal(issue['assetamount'], Decimal('0.025'))
if issue['txid'] == issuancedata["txid"] and issue['vin'] == issuancedata["vin"]:
assert_equal(issue['assetamount'], Decimal('0'))
assert_equal(issue['tokenamount'], Decimal('0.00000006'))

# Check for value accounting when asset issuance is null but token not, ie unblinded
issued = self.nodes[0].issueasset(0, 1, False)
assert(issued["asset"] not in self.nodes[0].getwalletinfo()["balance"])
assert_equal(self.nodes[0].getwalletinfo()["balance"][issued["token"]], 1)


# Check for value when receiving defferent assets by same address.
self.nodes[0].sendtoaddress(unconfidential_address2, Decimal('0.00000001'), "", "", False, test_asset)
Expand Down Expand Up @@ -426,7 +331,7 @@ def run_test(self):
txid1 = self.nodes[0].sendtoaddress(blinded_addr, 1)
txid2 = self.nodes[0].sendtoaddress(blinded_addr, 3)
unspent = self.nodes[0].listunspent(0, 0)
assert_equal(len(unspent), 4)
assert_equal(len(unspent), 3)
rawtx = self.nodes[0].createrawtransaction([{"txid":unspent[0]["txid"], "vout":unspent[0]["vout"]}, {"txid":unspent[1]["txid"], "vout":unspent[1]["vout"]}], {addr:unspent[0]["amount"]+unspent[1]["amount"]-Decimal("0.2"), "fee":Decimal("0.2")})
# Blinding will fail with 2 blinded inputs and 0 blinded outputs
# since it has no notion of a wallet to fill in a 0-value OP_RETURN output
Expand Down
Loading