bigchaindb / bigchaindb

Meet BigchainDB. The blockchain database.
https://www.bigchaindb.com/
Apache License 2.0
4.03k stars 774 forks source link

Double spent in chain; gets thrown on get_spent receival #1343

Closed TimDaub closed 7 years ago

TimDaub commented 7 years ago

This one is for @diminator: "when playing around with the kyber tx_explorer -> that happens"

bdb-server_1                | [2017-03-27 17:43:48,029] ERROR in app: Exception on /api/v1/outputs [GET]
bdb-server_1                | Traceback (most recent call last):
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
bdb-server_1                |     rv = self.dispatch_request()
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
bdb-server_1                |     return self.view_functions[rule.endpoint](**req.view_args)
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 477, in wrapper
bdb-server_1                |     resp = resource(*args, **kwargs)
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/flask/views.py", line 84, in view
bdb-server_1                |     return self.dispatch_request(*args, **kwargs)
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 587, in dispatch_request
bdb-server_1                |     resp = meth(*args, **kwargs)
bdb-server_1                |   File "/usr/src/app/bigchaindb/web/views/outputs.py", line 26, in get
bdb-server_1                |     include_spent)
bdb-server_1                |   File "/usr/src/app/bigchaindb/core.py", line 420, in get_outputs_filtered
bdb-server_1                |     outputs = [o for o in outputs
bdb-server_1                |   File "/usr/src/app/bigchaindb/core.py", line 421, in <listcomp>
bdb-server_1                |     if not self.get_spent(o.txid, o.output)]
bdb-server_1                |   File "/usr/src/app/bigchaindb/core.py", line 352, in get_spent
bdb-server_1                |     ' with the chain'.format(txid))
bdb-server_1                | bigchaindb.exceptions.CriticalDoubleSpend: `6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140` was spent more than once. There is a problem with the chain

Looks like it gets thrown in get_spent

diminator commented 7 years ago

It seems that the transaction was doublespent in block bf8eac239223d09c9a1126c3f69749bb9ae1c43e465252e614a0a99baeeb2a98 and that block has no votes....

Some data

Output upon the POST /transactions/

bdb-server_1                | bigchaindb.pipelines.block INFO     Process-12 Write new block bf8eac239223d09c9a1126c3f6974
9bb9ae1c43e465252e614a0a99baeeb2a98 with 2 transactions
bdb-server_1                | Process Process-22:
bdb-server_1                | Traceback (most recent call last):
bdb-server_1                |   File "/usr/local/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
bdb-server_1                |     self.run()
bdb-server_1                |   File "/usr/local/lib/python3.5/multiprocessing/process.py", line 93, in run
bdb-server_1                |     self._target(*self._args, **self._kwargs)
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/multipipes/pipeline.py", line 67, in safe_run
_forever
bdb-server_1                |     self.run_forever()
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/multipipes/pipeline.py", line 74, in run_fore
ver
bdb-server_1                |     self.run()
bdb-server_1                |   File "/usr/local/lib/python3.5/site-packages/multipipes/pipeline.py", line 106, in run
bdb-server_1                |     result = self.target(*args)
bdb-server_1                |   File "/usr/src/app/bigchaindb/pipelines/vote.py", line 108, in validate_tx
bdb-server_1                |     tx.validate(self.bigchain)
bdb-server_1                |   File "/usr/src/app/bigchaindb/models.py", line 47, in validate
bdb-server_1                |     spent = bigchain.get_spent(input_txid, input_.fulfills.output)
bdb-server_1                |   File "/usr/src/app/bigchaindb/core.py", line 352, in get_spent
bdb-server_1                |     ' with the chain'.format(txid))
bdb-server_1                | bigchaindb.exceptions.CriticalDoubleSpend: `6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7
bc85db8b99a33140` was spent more than once. There is a problem with the chain

No vote was created for that block:

Blocks

GET http://localhost:49984/api/v1/votes?block_id=bf8eac239223d09c9a1126c3f69749bb9ae1c43e465252e614a0a99baeeb2a98
[]

So I have a feeling that the voter failed upon that error...

HTTP

http://localhost:49984/api/v1/outputs?public_key=AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin&unspent=true

BigchainDB:

1 node cluster

{
    "keyring": [],
    "public_key": "GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4",
    "software": "BigchainDB",
    "version": "0.10.0.dev"
}

RethinktDB:

bigchain.bigchain

[{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620887","transactions":[{"asset":{"id":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"},"id":"efd3f7464e649defc7f13e42eafdeea9621d9a4a5ac45c3468e309f5ee683c15","inputs":[{"fulfillment":"cf:4:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmMP7Qv69ghDKTIyQt70NejgSGJUCPqrhaDcbBKpBx6Sd1mZRhyIl26oURSOaUQkHDFnLLjMvwR38uTot9d2qbAE","fulfills":{"output":0,"txid":"6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140"},"owners_before":["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}],"metadata":{"message":"fd"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmM:96"},"public_keys":["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}],"version":"0.9"},{"asset":{"id":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"},"id":"135bf52f20810e9c61e1f7808eb13cd7faa8c4e5c4a0e8eb97c61877a27fbfeb","inputs":[{"fulfillment":"cf:4:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmMHY3sM02RwlfIRFC71n-PnHZMyg0ZDsW6XC3QmWhTa4j9CLuzAZkmgy6wBKCmA7exW2HfKrLoH_gWSva5cO-0O","fulfills":{"output":0,"txid":"6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140"},"owners_before":["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}],"metadata":{"message":"fds"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmM:96"},"public_keys":["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"bf8eac239223d09c9a1126c3f69749bb9ae1c43e465252e614a0a99baeeb2a98","signature":"yV8gy6fCoAGcUfjDF8YgVvVJiR1eUWdu4cgmFr6eUh8uhe2hGaacAcwmGCtbaLjhHL2Pmg62Fj27crEEYdKmsn7"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620461","transactions":[{"asset":{"id":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"},"id":"6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140","inputs":[{"fulfillment":"cf:4:Nv2PPvWa8H7IKemuuBxqt_ZZiC5xQzLICTYqd9eioTdi-OJQYfuWjD7xBs7oNTfLakBJnE5zNduNbzp651qDBpbvg3nd6gZLgEAJoDwjELgzWLW_tJuk3WJ3Oo6Vl2cA","fulfills":{"output":0,"txid":"6ad0a817aa0c2926572d00b5000276393c9ec098ca3795e2a58b18535f401a1a"},"owners_before":["4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"]}],"metadata":{"message":"a new transaction to @bruce"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmM:96"},"public_keys":["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"af54f4a4b5483e1cee27b0670de2d9023ee5ae1c944a6c0ba398006b3369b234","signature":"5jN8163C7YjQKBaG4dxaDxEQhtthqNvk2mwuX2AUiDc83VBUygqJuhttdiWnXhfmS4UAS4ZEQRyeLZzDWvqEowMh"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620173","transactions":[{"asset":{"data":{"frequency":2,"timestamp":"1490620171475"}},"id":"30ded103981f2a85ed6c80d2e8af9b9e53c3784c8c06581ed28a42f6683497cf","inputs":[{"fulfillment":"cf:4:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGiH15Trs7gdKV09k3dEVfsVdlNL6lyrgHYE7xrvAoWRfNWx_fv8cF3o0GX46QF5pyWAjDEi4bO3VPjgAyzIop8P","fulfills":null,"owners_before":["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}],"metadata":null,"operation":"CREATE","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGg:96"},"public_keys":["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"40aa5fc77279cf51f31e77f8dd679ff07707e1c348a33bdfd35d912ade42cbe5","signature":"3JEWR8fw8vkZwwqiJnXCN1TeQnTJfs74WiMZvY6bdKNHnfBr4unkMf2t6VKbNXNeHnCAH54Tafbt9sGYLuLcF8C"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620921","transactions":[{"asset":{"data":{"definition":"test"}},"id":"1c539a8f168966d8a2d063e9f4162758a8cfceee5c8daa569d3e9c30b68c9ed3","inputs":[{"fulfillment":"cf:4:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOf82iCDrB0UoZhL6gqjqaPol_7ISOU7XV5ldhme-xAFiiqk5W-k-bFZEM6o0TTBeCuJhfYcVF-HrDmj9S6oXYgG","fulfills":null,"owners_before":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"metadata":null,"operation":"CREATE","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOc:96"},"public_keys":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"702909a5fbfcb08dfd617201f97f8dddae8158e1a0435cf4d23531cf99c27c5f","signature":"y4HSd7jbzYvxjDsXZUAB6HcpFJ23FZo23PqkmRZebAVHeozBuiM5rkr4QHj3YMPugH2UWT3GndpQSH9W9WYmUtx"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490618322","transactions":[{"asset":{"data":null},"id":"513c90fe462bfa61ad54f31b1080831b4edcd4aa994e6a07ac439ea0ef2798a0","inputs":[{"fulfillment":"cf:4:5k4Kk05495kBTCCaa0UCa1n0KHP55st17og8wXzC2KlHzVsLKimybkfX3sg-ENyQpd34qN0wRerdYE36EtiN_c-bwAXleFx5ksBOJQyCtO9pCSWfBQrqaYgcb7maDs4E","fulfills":null,"owners_before":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]}],"metadata":{"message":"Hello World from the BigchainDB"},"operation":"GENESIS","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:5k4Kk05495kBTCCaa0UCa1n0KHP55st17og8wXzC2Kk:96"},"public_keys":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]}],"version":"0.10"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"6679eda035aa457dfa2ad4fda07dfd36b3977966980e79ecb11c51c1008082ef","signature":"3ZqYtSy9UuM42fZnxYUmhe6g9YxqwCnTkBoXeRduE6ZpBNRUvMMLNh8BifndEe9VZwH2cbAvVXkp3LqrA6wJ6KUF"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620084","transactions":[{"asset":{"id":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"},"id":"6ad0a817aa0c2926572d00b5000276393c9ec098ca3795e2a58b18535f401a1a","inputs":[{"fulfillment":"cf:4:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGiJYkx9UaihwdLCLbtdzfIhL3CNrBo95lGwNWNzcqwb7qO1rvFw2NlHYYq-kwNCOW8H9mbBBiYFLAANpYhnXAAO","fulfills":{"output":0,"txid":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"},"owners_before":["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}],"metadata":{"message":"send to @dimi"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:Nv2PPvWa8H7IKemuuBxqt_ZZiC5xQzLICTYqd9eioTc:96"},"public_keys":["4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"9e74b55d7efd48c63654347531ebac9c57dfd72d5f434ea373d5ea8ca1ed4ed7","signature":"wZ6hG91YfxaZQGPvGP2fgUcsJ6jmkRDw8awxpjZTkoUiGpyeNsWSEKp4GSQWU99TzVEsuvEu1k1TLTgSeVXxSDM"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620006","transactions":[{"asset":{"data":{"definition":"Hi Lemonade"}},"id":"3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73","inputs":[{"fulfillment":"cf:4:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGjkNEOAMGZ_QIhzFgx69A-s6WbHrVMrnrqtSVyWFiQqdd9ndv5SsmvjQLEtsZBiiroxIMfBV8-gAym9ZTdzIIgO","fulfills":null,"owners_before":["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}],"metadata":null,"operation":"CREATE","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGg:96"},"public_keys":["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"c1055a4b0fdaf9cf4cd768cff2424afd2bdc8a7d77fded78d2389ebc43d06516","signature":"25Jw7xZGXkKsEzSgpyWrMiiFVto76poYsvdyrhrf8orjp1NhCnqnb7eh8WkPcGQjXQ5Pa5BhEmVGKqW58VoG34Tt"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620932","transactions":[{"asset":{"id":"1c539a8f168966d8a2d063e9f4162758a8cfceee5c8daa569d3e9c30b68c9ed3"},"id":"9727d0669ab8328baa433bff475690a5c7015d7ae7158726b97cdd3777a806f7","inputs":[{"fulfillment":"cf:4:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOe3S-4fgrf70bHefF6lf2OA861DQW_BpXnj3471BsTnMBbjf7GYdy6s0GezYEhGFhCHQDgh2bjk79eHhTMsEKgE","fulfills":{"output":0,"txid":"2b7c3ad9078c87e591e6d8e071cc4b64f37fbcdc59c032a084c99e81de639f93"},"owners_before":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"metadata":{"message":"fdfsdfdsf"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOc:96"},"public_keys":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"fd07ad4ce3826d5653fbda67f15ce1dd127829bb8d0d03f36a4b5cad9c4c8012","signature":"58fHJwWoKSJknKmpqZhQFKeecCxDxJJoXZM7fHyBcvW9GCdrziPbhAGSvG1XCMgu3duiC83DFTHJjK23h4yS9Hvo"},{"block":{"node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","timestamp":"1490620925","transactions":[{"asset":{"id":"1c539a8f168966d8a2d063e9f4162758a8cfceee5c8daa569d3e9c30b68c9ed3"},"id":"2b7c3ad9078c87e591e6d8e071cc4b64f37fbcdc59c032a084c99e81de639f93","inputs":[{"fulfillment":"cf:4:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOcnVT9_aoEcJM1OomXFCthHPhEP-A9FUxiikF8jmutChyOOfGHdZcte4nHPH_5VY0fOrTykgpuOzJA53h1ovUUF","fulfills":{"output":0,"txid":"1c539a8f168966d8a2d063e9f4162758a8cfceee5c8daa569d3e9c30b68c9ed3"},"owners_before":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"metadata":{"message":"hi"},"operation":"TRANSFER","outputs":[{"amount":1,"condition":{"details":{"bitmask":32,"public_key":"79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG","signature":null,"type":"fulfillment","type_id":4},"uri":"cc:4:20:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOc:96"},"public_keys":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"version":"0.9"}],"voters":["GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4"]},"id":"d1a1fdda8497799dcc37d95bebbc7e8773979c174b6c5974fe74b645ac0ec522","signature":"5aEuBydrUbXR2QfFrEwRa6hYjfGq9X4ovK2pNvpR2qSchkPW5yL48UmtWmW6ErMXVuWvZuQy9ShaXov3a8mUEgPY"}]

bigchain.votes

[{"id":"0529a5df-7920-42ea-9914-7b1484ecdb34","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"3MDaGP5i4PBnkFjx84KfGrhqiCLBUr61FoLm23RC8g9dkRe1vYFKWMib26NiLwQV4xtssR79qsc1u5SCoY2wM6eR","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"fd07ad4ce3826d5653fbda67f15ce1dd127829bb8d0d03f36a4b5cad9c4c8012","timestamp":"1490623066","voting_for_block":"4a2d9de1c42b1d0b866de4d75b42d12d11d51f9dacaa20af38f205847eb92ab0"}},{"id":"395062d5-61cc-4764-bd60-5849bdae140e","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"iACMkcxZe9wt3Pd2wK4RV7DSm1Pr4UDPwNBW4iXJpjux238aigXbuyoLtMSBo7ZHTrQ5iQNS9uZnkstQQnJpFnG","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"9e74b55d7efd48c63654347531ebac9c57dfd72d5f434ea373d5ea8ca1ed4ed7","timestamp":"1490620173","voting_for_block":"40aa5fc77279cf51f31e77f8dd679ff07707e1c348a33bdfd35d912ade42cbe5"}},{"id":"84ce57ce-f362-4efd-865b-6ce47daf1863","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"5x7dz8Yzz22RB2G8otbJve2GwQQoeb5i2zX523PJrubg8YdT6gpL3Ra5LRaHvuYMDhfPCgDh5GravcergQCtiTS3","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"702909a5fbfcb08dfd617201f97f8dddae8158e1a0435cf4d23531cf99c27c5f","timestamp":"1490620926","voting_for_block":"d1a1fdda8497799dcc37d95bebbc7e8773979c174b6c5974fe74b645ac0ec522"}},{"id":"c9796d12-7cec-42c3-b20d-c46d0ecb6ba7","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"5Sscqr1MEemcRhroxk9nsGzEvhBhB1qh97LBCT17QbxCsi9JMK7MYRtCoU2EA2AS4qAcXSFNXyZPPk2ZeebP3vbw","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"af54f4a4b5483e1cee27b0670de2d9023ee5ae1c944a6c0ba398006b3369b234","timestamp":"1490620921","voting_for_block":"702909a5fbfcb08dfd617201f97f8dddae8158e1a0435cf4d23531cf99c27c5f"}},{"id":"5c8b98bb-97a3-4e52-afa6-5c9649ed2e58","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"39NBCsdM3LLm6pGW25hWuxKrb64syCZBZf8yGEEv32g41sfK65SszLU8rFf5pT1Nvh81ZF6TdMRuM2WGxFZkuH5Q","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"6679eda035aa457dfa2ad4fda07dfd36b3977966980e79ecb11c51c1008082ef","timestamp":"1490620006","voting_for_block":"c1055a4b0fdaf9cf4cd768cff2424afd2bdc8a7d77fded78d2389ebc43d06516"}},{"id":"b1686823-f9a4-4f46-b51a-46d6f398532b","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"2en9W6vSxgNuLHUu49smmjsLC3LumH3s2tsog1zttihdKZgQ2kHdsyFqYo1FNTNh7mVC96VeS3zEBs7ra4adhALH","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"c1055a4b0fdaf9cf4cd768cff2424afd2bdc8a7d77fded78d2389ebc43d06516","timestamp":"1490620085","voting_for_block":"9e74b55d7efd48c63654347531ebac9c57dfd72d5f434ea373d5ea8ca1ed4ed7"}},{"id":"be49f651-f092-44a0-86f4-d98f8aee86b3","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"H3vKAny1ghsJnficgSRSrKEZnP44CDWqDnavbef4H24mrzgkEMMqYQ8hiv1fp87LnNyJcU48D2TjVjupckXF5QM","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"d1a1fdda8497799dcc37d95bebbc7e8773979c174b6c5974fe74b645ac0ec522","timestamp":"1490620932","voting_for_block":"fd07ad4ce3826d5653fbda67f15ce1dd127829bb8d0d03f36a4b5cad9c4c8012"}},{"id":"c2bdc5b7-9fc0-489c-94d1-7b8824e6d94c","node_pubkey":"GW1nrdZm4mbVC8ePeiGWz6DqHexqewqy5teURVHi3RG4","signature":"3cWVd4imhtgVXv6Tw9PVzyYCiyLR8LZRkbtUJLmr3tGX77pm1DAXHCHzG7hmVbXgVkAu8u2wNBYqwbcPo6WZJ57P","vote":{"invalid_reason":null,"is_block_valid":true,"previous_block":"40aa5fc77279cf51f31e77f8dd679ff07707e1c348a33bdfd35d912ade42cbe5","timestamp":"1490620462","voting_for_block":"af54f4a4b5483e1cee27b0670de2d9023ee5ae1c944a6c0ba398006b3369b234"}}]
diminator commented 7 years ago

Querying the asset works:

http://localhost:49984/api/v1/transactions?asset_id=3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73
[{"outputs": [{"amount": 1, "condition": {"details": {"bitmask": 32, "type": "fulfillment", "type_id": 4, "signature": null, "public_key": "4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"}, "uri": "cc:4:20:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGg:96"}, "public_keys": ["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}], "metadata": null, "version": "0.9", "inputs": [{"fulfillment": "cf:4:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGjkNEOAMGZ_QIhzFgx69A-s6WbHrVMrnrqtSVyWFiQqdd9ndv5SsmvjQLEtsZBiiroxIMfBV8-gAym9ZTdzIIgO", "fulfills": null, "owners_before": ["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}], "id": "3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73", "asset": {"data": {"definition": "Hi Lemonade"}}, "operation": "CREATE"}, {"outputs": [{"amount": 1, "condition": {"details": {"bitmask": 32, "type": "fulfillment", "type_id": 4, "signature": null, "public_key": "AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"}, "uri": "cc:4:20:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmM:96"}, "public_keys": ["AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"]}], "metadata": {"message": "a new transaction to @bruce"}, "version": "0.9", "inputs": [{"fulfillment": "cf:4:Nv2PPvWa8H7IKemuuBxqt_ZZiC5xQzLICTYqd9eioTdi-OJQYfuWjD7xBs7oNTfLakBJnE5zNduNbzp651qDBpbvg3nd6gZLgEAJoDwjELgzWLW_tJuk3WJ3Oo6Vl2cA", "fulfills": {"txid": "6ad0a817aa0c2926572d00b5000276393c9ec098ca3795e2a58b18535f401a1a", "output": 0}, "owners_before": ["4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"]}], "id": "6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140", "asset": {"id": "3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"}, "operation": "TRANSFER"}, {"outputs": [{"amount": 1, "condition": {"details": {"bitmask": 32, "type": "fulfillment", "type_id": 4, "signature": null, "public_key": "4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"}, "uri": "cc:4:20:Nv2PPvWa8H7IKemuuBxqt_ZZiC5xQzLICTYqd9eioTc:96"}, "public_keys": ["4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"]}], "metadata": {"message": "send to @dimi"}, "version": "0.9", "inputs": [{"fulfillment": "cf:4:MhDNxo4dfAJGbX9QVfi7Mh0ghfgA4H1UqGyHip7NHGiJYkx9UaihwdLCLbtdzfIhL3CNrBo95lGwNWNzcqwb7qO1rvFw2NlHYYq-kwNCOW8H9mbBBiYFLAANpYhnXAAO", "fulfills": {"txid": "3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73", "output": 0}, "owners_before": ["4NSFHRzjjQNJ6kpCkXfeUciGfCme6H1htVNLAgymJ7bu"]}], "id": "6ad0a817aa0c2926572d00b5000276393c9ec098ca3795e2a58b18535f401a1a", "asset": {"id": "3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"}, "operation": "TRANSFER"}]

Which includes the transaction that raises on outputs: 6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140

Also, the GET on that transaction works:

http://localhost:49984/api/v1/transactions/6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140
{
"outputs": [
{
"amount": 1,
"condition": {
"details": {
"bitmask": 32,
"type": "fulfillment",
"type_id": 4,
"signature": null,
"public_key": "AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"
},
"uri": "cc:4:20:kOHgXLKCEdaS7oy71KDKTZJ-vaW8vT2sQumtv8edrmM:96"
},
"public_keys": [
"AkZUXyGrEygFF6R8vQveE2Wswkn4rSudEBuUSaV7Wiin"
]
}
],
"metadata": {
"message": "a new transaction to @bruce"
},
"version": "0.9",
"inputs": [
{
"fulfillment": "cf:4:Nv2PPvWa8H7IKemuuBxqt_ZZiC5xQzLICTYqd9eioTdi-OJQYfuWjD7xBs7oNTfLakBJnE5zNduNbzp651qDBpbvg3nd6gZLgEAJoDwjELgzWLW_tJuk3WJ3Oo6Vl2cA",
"fulfills": {
"txid": "6ad0a817aa0c2926572d00b5000276393c9ec098ca3795e2a58b18535f401a1a",
"output": 0
},
"owners_before": [
"4hfGNaQAZkwBk4maYxeAYUcuBDjkb9euQTGCi1d8QdhG"
]
}
],
"id": "6be9c0595fa4f01c59109b7cb12c9098f3bf3f1e37c49af7bc85db8b99a33140",
"asset": {
"id": "3205d467ac0ee6c129aff52124a033c0a97f670cb48a5d46a73c15712c857b73"
},
"operation": "TRANSFER"
}
r-marques commented 7 years ago

I was able to reproduce this bug. To reproduce the bug we need to create a block with a duplicated transaction:

from time import sleep

from bigchaindb import Bigchain
from bigchaindb.models import Transaction

b = Bigchain()

# create and write an asset so we have an output to spend
tx_create = Transaction.create([b.me], [([b.me], 1)]).sign([b.me_private])
b.write_transaction(tx_create)
# wait for inclusion in bigchain and voting
sleep(1)

# create a block with a duplicated transfer transaction
tx_transfer = Transaction.transfer(tx_create.to_inputs(), [([b.me], 1)],
                                   asset_id=tx_create.id).sign([b.me_private])
block = b.create_block([tx_transfer, tx_transfer])
# profit !!
b.write_block(block)

To check:

  1. are we allowing the creating of blocks with duplicated transactions in pipelines.block.BlockPipeline.create?
  2. are we incorrectly validating blocks with duplicated transactions in pipelines.vote.Vote.validate_block?
  3. is there a problem with core.Bigchain.get_spent

1) Was fixed in this pr https://github.com/bigchaindb/bigchaindb/pull/1237 looking at the kyber repo is difficult to know if this code was already there when this bug occurred.

2) pipelines.vote.Vote.validate_block is not checking for duplicated transactions in the block. This needs to be fixed

3) core.Bigchain.get_spent is checking if a given (txid, output) has already been spent in a transaction that is either in an UNDECIDED, VALID, or BACKLOG state. This is ok because we prevent double spents even if it was used in a transatiction that is still being processed. The problem is that the CriticalDoubleSpend exception is being incorrectly raised because it will raise even if the input was spent multiple times in still UNDECIDED transactions. We need to change it to only raise if a given input was spent in multiple VALID transactions.