mirror of
https://github.com/planetmint/planetmint.git
synced 2025-03-30 15:08:31 +00:00
All test passed. Acceptance tests passed too
This commit is contained in:
parent
24f34f01cb
commit
4ddfcb0d8d
10
CHANGELOG.md
10
CHANGELOG.md
@ -399,7 +399,7 @@ Tag name: v1.2.0
|
||||
### Added
|
||||
* New and improved installation setup docs and code. Pull requests [#1775](https://github.com/planetmint/planetmint/pull/1775) and [#1785](https://github.com/planetmint/planetmint/pull/1785)
|
||||
* New Planetmint configuration setting to set the port number of the log server: `log.port`. [Pull request #1796](https://github.com/planetmint/planetmint/pull/1796)
|
||||
* New secondary index on `id` in the bigchain table. That will make some queries execute faster. [Pull request #1803](https://github.com/planetmint/planetmint/pull/1803)
|
||||
* New secondary index on `id` in the planet table. That will make some queries execute faster. [Pull request #1803](https://github.com/planetmint/planetmint/pull/1803)
|
||||
* When using MongoDB, there are some restrictions on allowed names for keys (JSON keys). Those restrictions were always there but now Planetmint checks key names explicitly, rather than leaving that to MongoDB. Pull requests [#1807](https://github.com/planetmint/planetmint/pull/1807) and [#1811](https://github.com/planetmint/planetmint/pull/1811)
|
||||
* When using MongoDB, there are some restrictions on the allowed values of "language" (if that key is used in the values of `metadata` or `asset.data`). Those restrictions were always there but now Planetmint checks the values explicitly, rather than leaving that to MongoDB. Pull requests [#1806](https://github.com/planetmint/planetmint/pull/1806) and [#1811](https://github.com/planetmint/planetmint/pull/1811)
|
||||
* There's a new page in the root docs about permissions in Planetmint. [Pull request #1788](https://github.com/planetmint/planetmint/pull/1788)
|
||||
@ -434,7 +434,7 @@ Tag name: v1.1.0
|
||||
|
||||
### Notes
|
||||
* New drivers & tools from our community:
|
||||
* [Java driver](https://github.com/authenteq/java-planetmint-driver), by [Authenteq](https://authenteq.com/)
|
||||
* [Java driver](https://github.com/authenteq/java-bigchaindb-driver), by [Authenteq](https://authenteq.com/)
|
||||
* [Ruby library](https://rubygems.org/gems/planetmint), by @nileshtrivedi
|
||||
* Many improvements to our production deployment template (which uses Kubernetes).
|
||||
* The production deployment template for the multi-node case was out of date. We updated that and verified it. [Pull request #1713](https://github.com/planetmint/planetmint/pull/1713)
|
||||
@ -493,7 +493,7 @@ Tag name: v1.0.0rc1
|
||||
* In `setup.py`, the "Development Status" (as reported on PyPI) was changed from Alpha to Beta. [Pull Request #1437](https://github.com/planetmint/planetmint/pull/1437)
|
||||
* If you explicitly specify a config file, e.g. `planetmint -c path/to/config start` and that file can't be found, then Planetmint Server will fail with a helpful error message. [Pull Request #1486](https://github.com/planetmint/planetmint/pull/1486)
|
||||
* Reduced the response time on the HTTP API endpoint to get all the unspent outputs associated with a given public key (a.k.a. "fast unspents"). [Pull Request #1411](https://github.com/planetmint/planetmint/pull/1411)
|
||||
* Internally, the value of an asset's `"data"` is now stored in a separate assets table. This enabled the new text search. Each asset data is stored along with the associated CREATE transaction ID (asset ID). That data gets written when the containing block gets written to the bigchain table. [Pull Request #1460](https://github.com/planetmint/planetmint/pull/1460)
|
||||
* Internally, the value of an asset's `"data"` is now stored in a separate assets table. This enabled the new text search. Each asset data is stored along with the associated CREATE transaction ID (asset ID). That data gets written when the containing block gets written to the planet table. [Pull Request #1460](https://github.com/planetmint/planetmint/pull/1460)
|
||||
* Schema validation was sped up by switching to `rapidjson-schema`. [Pull Request #1494](https://github.com/planetmint/planetmint/pull/1494)
|
||||
* If a node comes back from being down for a while, it will resume voting on blocks in the order determined by the MongoDB oplog, in the case of MongoDB. (In the case of RethinkDB, blocks missed in the changefeed will not be voted on.) [Pull Request #1389](https://github.com/planetmint/planetmint/pull/1389)
|
||||
* Parallelized transaction schema validation in the vote pipeline. [Pull Request #1492](https://github.com/planetmint/planetmint/pull/1492)
|
||||
@ -523,7 +523,7 @@ Tag name: v1.0.0rc1
|
||||
* We dropped support for Python 3.4. [Pull Request #1564](https://github.com/planetmint/planetmint/pull/1564)
|
||||
* There were many improvements to our Kubernetes-based production deployment template (and the associated documentaiton).
|
||||
* There is now a [Planetmint Ruby driver](https://github.com/LicenseRocks/planetmint_ruby), created by @addywaddy at [license.rocks](https://github.com/planetmint/planetmint/pull/1437).
|
||||
* The [Planetmint JavaScript driver](https://github.com/planetmint/js-planetmint-driver) was moved to a different GitHub repo and is now officially maintained by the Planetmint team.
|
||||
* The [Planetmint JavaScript driver](https://github.com/planetmint/js-bigchaindb-driver) was moved to a different GitHub repo and is now officially maintained by the Planetmint team.
|
||||
* We continue to recommend using MongoDB.
|
||||
|
||||
## [0.10.3] - 2017-06-29
|
||||
@ -996,7 +996,7 @@ committed: May 27, 2016, 1:42 PM GMT+2
|
||||
- Caching of calls to `load_consensus_plugin()`, using [`@lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache). This speeds up the instantiation of `Bigchain` objects and greatly improves overall performance. [Pull Request #271](https://github.com/planetmint/planetmint/pull/271)
|
||||
- New `Dockerfile-dev` Docker file to make it easier for developers to _develop_ Planetmint with Docker. One can run all unit tests with Docker again. [Pull Request #313](https://github.com/planetmint/planetmint/pull/313)
|
||||
- Transactions in invalid blocks are copied to the backlog: [Pull Request #221](https://github.com/planetmint/planetmint/pull/221).
|
||||
- Queries to the bigchain table now ignore invalid blocks: [Pull Request #324](https://github.com/planetmint/planetmint/issues/324)
|
||||
- Queries to the planet table now ignore invalid blocks: [Pull Request #324](https://github.com/planetmint/planetmint/issues/324)
|
||||
- Use secondary index on get_transaction: [Pull Request #324](https://github.com/planetmint/planetmint/issues/324)
|
||||
- New `planetmint` command to set the number of RethinkDB shards (in both tables): [Pull Request #258](https://github.com/planetmint/planetmint/pull/258)
|
||||
- Better handling of an outdated `setuptools`: [Pull Request #279](https://github.com/planetmint/planetmint/pull/279)
|
||||
|
@ -5,5 +5,5 @@ RUN pip install --upgrade \
|
||||
pycco \
|
||||
websocket-client~=0.47.0 \
|
||||
pytest~=3.0 \
|
||||
planetmint-driver~=0.6.2 \
|
||||
bigchaindb-driver~=0.6.2 \
|
||||
blns
|
||||
|
@ -24,7 +24,7 @@
|
||||
import os
|
||||
|
||||
# For this test case we import and use the Python Driver.
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ def test_basic():
|
||||
# connect to localhost, but you can override this value using the env variable
|
||||
# called `PLANETMINT_ENDPOINT`, a valid value must include the schema:
|
||||
# `https://example.com:9984`
|
||||
bdb = Planetmint(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
bdb = BigchainDB(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
|
||||
# ## Create keypairs
|
||||
# This test requires the interaction between two actors with their own keypair.
|
||||
|
@ -29,7 +29,7 @@ import pytest
|
||||
from bigchaindb_driver.exceptions import BadRequest
|
||||
|
||||
# For this test case we import and use the Python Driver.
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ def test_divisible_assets():
|
||||
# ## Set up a connection to Planetmint
|
||||
# Check [test_basic.py](./test_basic.html) to get some more details
|
||||
# about the endpoint.
|
||||
bdb = Planetmint(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
bdb = BigchainDB(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
|
||||
# Oh look, it is Alice again and she brought her friend Bob along.
|
||||
alice, bob = generate_keypair(), generate_keypair()
|
||||
|
@ -12,12 +12,12 @@ from threading import Thread
|
||||
import queue
|
||||
|
||||
import bigchaindb_driver.exceptions
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
|
||||
|
||||
def test_double_create():
|
||||
bdb = Planetmint(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
bdb = BigchainDB(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
alice = generate_keypair()
|
||||
|
||||
results = queue.Queue()
|
||||
|
@ -25,7 +25,7 @@
|
||||
import os
|
||||
|
||||
# For this test case we import and use the Python Driver.
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
|
||||
|
||||
@ -33,7 +33,7 @@ def test_multiple_owners():
|
||||
# ## Set up a connection to Planetmint
|
||||
# Check [test_basic.py](./test_basic.html) to get some more details
|
||||
# about the endpoint.
|
||||
bdb = Planetmint(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
bdb = BigchainDB(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
|
||||
# Hey Alice and Bob, nice to see you again!
|
||||
alice, bob = generate_keypair(), generate_keypair()
|
||||
|
@ -24,7 +24,7 @@ from blns import blns
|
||||
import pytest
|
||||
|
||||
# For this test case we import and use the Python Driver.
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
from bigchaindb_driver.exceptions import BadRequest
|
||||
|
||||
@ -36,7 +36,7 @@ def send_naughty_tx(asset, metadata):
|
||||
# ## Set up a connection to Planetmint
|
||||
# Check [test_basic.py](./test_basic.html) to get some more details
|
||||
# about the endpoint.
|
||||
bdb = Planetmint(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
bdb = BigchainDB(os.environ.get('PLANETMINT_ENDPOINT'))
|
||||
|
||||
# Here's Alice.
|
||||
alice = generate_keypair()
|
||||
|
@ -27,7 +27,7 @@ from uuid import uuid4
|
||||
# [websocket](https://github.com/websocket-client/websocket-client) module
|
||||
from websocket import create_connection
|
||||
|
||||
from bigchaindb_driver import Planetmint
|
||||
from bigchaindb_driver import BigchainDB
|
||||
from bigchaindb_driver.crypto import generate_keypair
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ def test_stream():
|
||||
# *That's pretty bad, but let's do like this for now.*
|
||||
WS_ENDPOINT = 'ws://{}:9985/api/v1/streams/valid_transactions'.format(BDB_ENDPOINT.rsplit(':')[0])
|
||||
|
||||
bdb = Planetmint(BDB_ENDPOINT)
|
||||
bdb = BigchainDB(BDB_ENDPOINT)
|
||||
|
||||
# Hello to Alice again, she is pretty active in those tests, good job
|
||||
# Alice!
|
||||
|
@ -4,12 +4,12 @@
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS = -W
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
PAPER = a4
|
||||
BUILDDIR = build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
PAPEROPT_a4 = -D latex_elements.papersize=a4paper
|
||||
PAPEROPT_letter = -D latex_elements.papersize=letterpaper
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
|
@ -290,7 +290,7 @@ html_static_path = ['_static']
|
||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
|
||||
# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
|
||||
#
|
||||
# html_search_language = 'en'
|
||||
# html_search_language = 'en's
|
||||
|
||||
# A dictionary with options for the search language support, empty by default.
|
||||
# 'ja' uses this config value.
|
||||
@ -304,14 +304,14 @@ html_static_path = ['_static']
|
||||
# html_search_scorer = 'scorer.js'
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'BigchainDBdoc'
|
||||
htmlhelp_basename = 'Planetmintdoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
|
@ -11,9 +11,9 @@ There are many ways you can contribute to Planetmint.
|
||||
It includes several sub-projects.
|
||||
|
||||
- `Planetmint Server <https://github.com/planetmint/planetmint>`_
|
||||
- `Planetmint Python Driver <https://github.com/planetmint/planetmint-driver>`_
|
||||
- `Planetmint JavaScript Driver <https://github.com/planetmint/js-planetmint-driver>`_
|
||||
- `Planetmint Java Driver <https://github.com/planetmint/java-planetmint-driver>`_
|
||||
- `Planetmint Python Driver <https://github.com/planetmint/bigchaindb-driver>`_
|
||||
- `Planetmint JavaScript Driver <https://github.com/planetmint/js-bigchaindb-driver>`_
|
||||
- `Planetmint Java Driver <https://github.com/planetmint/java-bigchaindb-driver>`_
|
||||
- `cryptoconditions <https://github.com/planetmint/cryptoconditions>`_ (a Python package by us)
|
||||
- `py-abci <https://github.com/davebryson/py-abci>`_ (a Python package we use)
|
||||
- `Planetmint Enhancement Proposals (PEPs) <https://github.com/planetmint/PEPs>`_
|
||||
|
@ -22,7 +22,7 @@ People ask questions about Planetmint in the following places:
|
||||
|
||||
- Gitter
|
||||
- [planetmint/planetmint](https://gitter.im/planetmint/community)
|
||||
- [planetmint/js-planetmint-driver](https://gitter.im/planetmint/community))
|
||||
- [planetmint/js-bigchaindb-driver](https://gitter.im/planetmint/community))
|
||||
- [Twitter](https://twitter.com/planetmint)
|
||||
- [Stack Overflow "planetmint"](https://stackoverflow.com/search?q=planetmint)
|
||||
|
||||
|
@ -19,8 +19,8 @@ If you're writing code, you should also update any related docs. However, you mi
|
||||
You can certainly do that!
|
||||
|
||||
- The docs for Planetmint Server live under ``planetmint/docs/`` in the ``planetmint/planetmint`` repo.
|
||||
- There are docs for the Python driver under ``planetmint-driver/docs/`` in the ``planetmint/planetmint-driver`` repo.
|
||||
- There are docs for the JavaScript driver under ``planetmint/js-planetmint-driver`` in the ``planetmint/js-planetmint-driver`` repo.
|
||||
- There are docs for the Python driver under ``bigchaindb-driver/docs/`` in the ``planetmint/bigchaindb-driver`` repo.
|
||||
- There are docs for the JavaScript driver under ``planetmint/js-bigchaindb-driver`` in the ``planetmint/js-bigchaindb-driver`` repo.
|
||||
- The source code for the Planetmint website is in a private repo, but we can give you access if you ask.
|
||||
|
||||
The [Planetmint Transactions Specs](https://github.com/planetmint/PEPs/tree/master/tx-specs/) (one for each spec version) are in the ``planetmint/PEPs`` repo.
|
||||
|
@ -12,8 +12,8 @@ Connectors to Planetmint are referred to as drivers within the community. A driv
|
||||
These drivers were originally created by the original Planetmint team:
|
||||
|
||||
* `Python Driver <https://docs.planetmint.com/projects/py-driver/en/latest/index.html>`_
|
||||
* `JavaScript / Node.js Driver <https://github.com/planetmint/js-planetmint-driver>`_
|
||||
* `Java Driver <https://github.com/planetmint/java-planetmint-driver>`_
|
||||
* `JavaScript / Node.js Driver <https://github.com/planetmint/js-bigchaindb-driver>`_
|
||||
* `Java Driver <https://github.com/planetmint/java-bigchaindb-driver>`_
|
||||
|
||||
These drivers and tools were created by the Planetmint community:
|
||||
|
||||
@ -26,6 +26,6 @@ These drivers and tools were created by the Planetmint community:
|
||||
* `ANSI C driver <https://github.com/RiddleAndCode/planetmint-c-driver>`_, should also work with C++ (working as of June 2019)
|
||||
* `C# driver <https://github.com/Omnibasis/planetmint-csharp-driver>`_ (working as of May 2019)
|
||||
* `Haskell transaction builder <https://github.com/planetmint/planetmint-hs>`_
|
||||
* `Go driver <https://github.com/zbo14/envoke/blob/master/bigchain/bigchain.go>`_
|
||||
* `Go driver <https://github.com/zbo14/envoke/blob/master/bigchain/planet.go>`_
|
||||
* `Ruby driver <https://github.com/LicenseRocks/planetmint_ruby>`_
|
||||
* `Ruby library for preparing/signing transactions and submitting them or querying a Planetmint node (MIT licensed) <https://rubygems.org/gems/planetmint>`_
|
||||
|
@ -283,14 +283,14 @@ specified path.
|
||||
|
||||
**Log rotation:** Log files have a size limit of about 200 MB
|
||||
and will be rotated up to five times.
|
||||
For example, if `log.file` is set to `"~/bigchain.log"`, then
|
||||
logs would always be written to `bigchain.log`. Each time the file
|
||||
`bigchain.log` reaches 200 MB it will be closed and renamed
|
||||
`bigchain.log.1`. If `bigchain.log.1` and `bigchain.log.2` already exist they
|
||||
would be renamed `bigchain.log.2` and `bigchain.log.3`. This pattern would be
|
||||
applied up to `bigchain.log.5` after which `bigchain.log.5` would be
|
||||
overwritten by `bigchain.log.4`, thus ending the rotation cycle of whatever
|
||||
logs were in `bigchain.log.5`.
|
||||
For example, if `log.file` is set to `"~/planet.log"`, then
|
||||
logs would always be written to `planet.log`. Each time the file
|
||||
`planet.log` reaches 200 MB it will be closed and renamed
|
||||
`planet.log.1`. If `planet.log.1` and `planet.log.2` already exist they
|
||||
would be renamed `planet.log.2` and `planet.log.3`. This pattern would be
|
||||
applied up to `planet.log.5` after which `planet.log.5` would be
|
||||
overwritten by `planet.log.4`, thus ending the rotation cycle of whatever
|
||||
logs were in `planet.log.5`.
|
||||
|
||||
### log.error_file
|
||||
|
||||
|
@ -53,7 +53,7 @@ SQL을 이용해 mongoDB 데이터베이스를 쿼리할 수 있습니다. 예
|
||||
...
|
||||
> show dbs
|
||||
admin 0.000GB
|
||||
bigchain 0.000GB
|
||||
planet 0.000GB
|
||||
config 0.000GB
|
||||
local 0.000GB
|
||||
> use bigchain
|
||||
@ -197,6 +197,6 @@ Tendermint voting 파워가 0인 노드인 추종자 노드를 생성할 수 있
|
||||
|
||||
[MongoDB node.js 드라이버](https://mongodb.github.io/node-mongodb-native/?jmp=docs)와 같은 MongoDB 드라이버를 사용하여 다음 중 하나를 사용하여 노드의 MongoDB 데이터베이스에 연결할 수 있습니다. 여기 자바스크립트 쿼리 코드에 대한 링크가 있습니다.
|
||||
|
||||
- [The Planetmint JavaScript/Node.js driver source code](https://github.com/planetmint/js-planetmint-driver)
|
||||
- [The Planetmint JavaScript/Node.js driver source code](https://github.com/planetmint/js-bigchaindb-driver)
|
||||
- [Example code by @manolodewiner](https://github.com/manolodewiner/query-mongodb-planetmint/blob/master/queryMongo.js)
|
||||
- [More example code by @manolodewiner](https://github.com/planetmint/planetmint/issues/2315#issuecomment-392724279)
|
@ -56,11 +56,11 @@ For example, if you're on a machine that's running a default Planetmint node, th
|
||||
...
|
||||
> show dbs
|
||||
admin 0.000GB
|
||||
bigchain 0.000GB
|
||||
planet 0.000GB
|
||||
config 0.000GB
|
||||
local 0.000GB
|
||||
> use bigchain
|
||||
switched to db bigchain
|
||||
> use planetmint
|
||||
switched to db planetmint
|
||||
> show collections
|
||||
abci_chains
|
||||
assets
|
||||
@ -75,14 +75,14 @@ For example, if you're on a machine that's running a default Planetmint node, th
|
||||
The above example illustrates several things:
|
||||
|
||||
* When you don't specify the hostname or port, the Mongo Shell assumes they are ``localhost`` and ``27017``, respectively. (``localhost`` had IP address 127.0.0.1 on the machine in question, an Ubuntu machine.)
|
||||
* Planetmint stores its data in a database named ``bigchain``.
|
||||
* The ``bigchain`` database contains several `collections <https://docs.mongodb.com/manual/core/databases-and-collections/>`_.
|
||||
* Planetmint stores its data in a database named ``planetmint``.
|
||||
* The ``planetmint`` database contains several `collections <https://docs.mongodb.com/manual/core/databases-and-collections/>`_.
|
||||
* Votes aren't stored in any collection, currently. They are all handled and stored by Tendermint in its own (LevelDB) database.
|
||||
|
||||
Example Documents from Some Collections
|
||||
---------------------------------------
|
||||
|
||||
The most interesting collections in the ``bigchain`` database are:
|
||||
The most interesting collections in the ``planetmint`` database are:
|
||||
|
||||
- transactions
|
||||
- assets
|
||||
@ -224,6 +224,6 @@ of the MongoDB drivers, such as `the MongoDB Node.js driver
|
||||
Here are some links to example JavaScript code that queries a
|
||||
Planetmint node's MongoDB database:
|
||||
|
||||
- `The Planetmint JavaScript/Node.js driver source code <https://github.com/planetmint/js-planetmint-driver>`_
|
||||
- `The Planetmint JavaScript/Node.js driver source code <https://github.com/planetmint/js-bigchaindb-driver>`_
|
||||
- `Example code by @manolodewiner <https://github.com/manolodewiner/query-mongodb-planetmint/blob/master/queryMongo.js>`_
|
||||
- `More example code by @manolodewiner <https://github.com/planetmint/planetmint/issues/2315#issuecomment-392724279>`_
|
||||
|
@ -9,8 +9,8 @@ WORKDIR /
|
||||
RUN apk add --no-cache --update curl bind-tools python3-dev g++ \
|
||||
libffi-dev make vim git nodejs openssl-dev \
|
||||
&& pip3 install ipython \
|
||||
&& git clone https://github.com/planetmint/planetmint-driver \
|
||||
&& cd planetmint-driver \
|
||||
&& git clone https://github.com/bigchaindb/bigchaindb-driver \
|
||||
&& cd bigchaindb-driver \
|
||||
&& pip3 install -e . \
|
||||
&& npm install -g wsc
|
||||
ENTRYPOINT ["/bin/sh"]
|
||||
|
@ -150,7 +150,7 @@ def get_owned_ids(connection, owner):
|
||||
|
||||
@singledispatch
|
||||
def get_block(connection, block_id):
|
||||
"""Get a block from the bigchain table.
|
||||
"""Get a block from the planet table.
|
||||
|
||||
Args:
|
||||
block_id (str): block id of the block to get
|
||||
|
@ -113,19 +113,19 @@ def run_election(args):
|
||||
globals()[f'run_election_{args.action}'](args, b)
|
||||
|
||||
|
||||
def run_election_new(args, bigchain):
|
||||
def run_election_new(args, planet):
|
||||
election_type = args.election_type.replace('-', '_')
|
||||
globals()[f'run_election_new_{election_type}'](args, bigchain)
|
||||
globals()[f'run_election_new_{election_type}'](args, planet)
|
||||
|
||||
|
||||
def create_new_election(sk, bigchain, election_class, data):
|
||||
def create_new_election(sk, planet, election_class, data):
|
||||
try:
|
||||
key = load_node_key(sk)
|
||||
voters = election_class.recipients(bigchain)
|
||||
voters = election_class.recipients(planet)
|
||||
election = election_class.generate([key.public_key],
|
||||
voters,
|
||||
data, None).sign([key.private_key])
|
||||
election.validate(bigchain)
|
||||
election.validate(planet)
|
||||
except ValidationError as e:
|
||||
logger.error(e)
|
||||
return False
|
||||
@ -133,7 +133,7 @@ def create_new_election(sk, bigchain, election_class, data):
|
||||
logger.error(fd_404)
|
||||
return False
|
||||
|
||||
resp = bigchain.write_transaction(election, BROADCAST_TX_COMMIT)
|
||||
resp = planet.write_transaction(election, BROADCAST_TX_COMMIT)
|
||||
if resp == (202, ''):
|
||||
logger.info('[SUCCESS] Submitted proposal with id: {}'.format(election.id))
|
||||
return election.id
|
||||
@ -142,7 +142,7 @@ def create_new_election(sk, bigchain, election_class, data):
|
||||
return False
|
||||
|
||||
|
||||
def run_election_new_upsert_validator(args, bigchain):
|
||||
def run_election_new_upsert_validator(args, planet):
|
||||
"""Initiates an election to add/update/remove a validator to an existing Planetmint network
|
||||
|
||||
:param args: dict
|
||||
@ -152,7 +152,7 @@ def run_election_new_upsert_validator(args, bigchain):
|
||||
'node_id': the node_id of the new peer (str)
|
||||
'sk': the path to the private key of the node calling the election (str)
|
||||
}
|
||||
:param bigchain: an instance of Planetmint
|
||||
:param planet: an instance of Planetmint
|
||||
:return: election_id or `False` in case of failure
|
||||
"""
|
||||
|
||||
@ -163,24 +163,24 @@ def run_election_new_upsert_validator(args, bigchain):
|
||||
'node_id': args.node_id
|
||||
}
|
||||
|
||||
return create_new_election(args.sk, bigchain, ValidatorElection, new_validator)
|
||||
return create_new_election(args.sk, planet, ValidatorElection, new_validator)
|
||||
|
||||
|
||||
def run_election_new_chain_migration(args, bigchain):
|
||||
def run_election_new_chain_migration(args, planet):
|
||||
"""Initiates an election to halt block production
|
||||
|
||||
:param args: dict
|
||||
args = {
|
||||
'sk': the path to the private key of the node calling the election (str)
|
||||
}
|
||||
:param bigchain: an instance of Planetmint
|
||||
:param planet: an instance of Planetmint
|
||||
:return: election_id or `False` in case of failure
|
||||
"""
|
||||
|
||||
return create_new_election(args.sk, bigchain, ChainMigrationElection, {})
|
||||
return create_new_election(args.sk, planet, ChainMigrationElection, {})
|
||||
|
||||
|
||||
def run_election_approve(args, bigchain):
|
||||
def run_election_approve(args, planet):
|
||||
"""Approve an election
|
||||
|
||||
:param args: dict
|
||||
@ -188,12 +188,12 @@ def run_election_approve(args, bigchain):
|
||||
'election_id': the election_id of the election (str)
|
||||
'sk': the path to the private key of the signer (str)
|
||||
}
|
||||
:param bigchain: an instance of Planetmint
|
||||
:param planet: an instance of Planetmint
|
||||
:return: success log message or `False` in case of error
|
||||
"""
|
||||
|
||||
key = load_node_key(args.sk)
|
||||
tx = bigchain.get_transaction(args.election_id)
|
||||
tx = planet.get_transaction(args.election_id)
|
||||
voting_powers = [v.amount for v in tx.outputs if key.public_key in v.public_keys]
|
||||
if len(voting_powers) > 0:
|
||||
voting_power = voting_powers[0]
|
||||
@ -206,9 +206,9 @@ def run_election_approve(args, bigchain):
|
||||
approval = Vote.generate(inputs,
|
||||
[([election_pub_key], voting_power)],
|
||||
tx.id).sign([key.private_key])
|
||||
approval.validate(bigchain)
|
||||
approval.validate(planet)
|
||||
|
||||
resp = bigchain.write_transaction(approval, BROADCAST_TX_COMMIT)
|
||||
resp = planet.write_transaction(approval, BROADCAST_TX_COMMIT)
|
||||
|
||||
if resp == (202, ''):
|
||||
logger.info('[SUCCESS] Your vote has been submitted')
|
||||
@ -218,22 +218,22 @@ def run_election_approve(args, bigchain):
|
||||
return False
|
||||
|
||||
|
||||
def run_election_show(args, bigchain):
|
||||
def run_election_show(args, planet):
|
||||
"""Retrieves information about an election
|
||||
|
||||
:param args: dict
|
||||
args = {
|
||||
'election_id': the transaction_id for an election (str)
|
||||
}
|
||||
:param bigchain: an instance of Planetmint
|
||||
:param planet: an instance of Planetmint
|
||||
"""
|
||||
|
||||
election = bigchain.get_transaction(args.election_id)
|
||||
election = planet.get_transaction(args.election_id)
|
||||
if not election:
|
||||
logger.error(f'No election found with election_id {args.election_id}')
|
||||
return
|
||||
|
||||
response = election.show_election(bigchain)
|
||||
response = election.show_election(planet)
|
||||
|
||||
logger.info(response)
|
||||
|
||||
|
@ -1211,13 +1211,13 @@ class Transaction(object):
|
||||
tx['metadata'], tx['version'], hash_id=tx['id'], tx_dict=tx)
|
||||
|
||||
@classmethod
|
||||
def from_db(cls, bigchain, tx_dict_list):
|
||||
def from_db(cls, planet, tx_dict_list):
|
||||
"""Helper method that reconstructs a transaction dict that was returned
|
||||
from the database. It checks what asset_id to retrieve, retrieves the
|
||||
asset from the asset table and reconstructs the transaction.
|
||||
|
||||
Args:
|
||||
bigchain (:class:`~planetmint.tendermint.Planetmint`): An instance
|
||||
planet (:class:`~planetmint.tendermint.Planetmint`): An instance
|
||||
of Planetmint used to perform database queries.
|
||||
tx_dict_list (:list:`dict` or :obj:`dict`): The transaction dict or
|
||||
list of transaction dict as returned from the database.
|
||||
@ -1238,7 +1238,7 @@ class Transaction(object):
|
||||
tx_map[tx['id']] = tx
|
||||
tx_ids.append(tx['id'])
|
||||
|
||||
assets = list(bigchain.get_assets(tx_ids))
|
||||
assets = list(planet.get_assets(tx_ids))
|
||||
for asset in assets:
|
||||
if asset is not None:
|
||||
tx = tx_map[asset['id']]
|
||||
@ -1246,7 +1246,7 @@ class Transaction(object):
|
||||
tx['asset'] = asset
|
||||
|
||||
tx_ids = list(tx_map.keys())
|
||||
metadata_list = list(bigchain.get_metadata(tx_ids))
|
||||
metadata_list = list(planet.get_metadata(tx_ids))
|
||||
for metadata in metadata_list:
|
||||
tx = tx_map[metadata['id']]
|
||||
tx.update({'metadata': metadata.get('metadata')})
|
||||
@ -1276,13 +1276,13 @@ class Transaction(object):
|
||||
def validate_schema(cls, tx):
|
||||
pass
|
||||
|
||||
def validate_transfer_inputs(self, bigchain, current_transactions=[]):
|
||||
def validate_transfer_inputs(self, planet, current_transactions=[]):
|
||||
# store the inputs so that we can check if the asset ids match
|
||||
input_txs = []
|
||||
input_conditions = []
|
||||
for input_ in self.inputs:
|
||||
input_txid = input_.fulfills.txid
|
||||
input_tx = bigchain.get_transaction(input_txid)
|
||||
input_tx = planet.get_transaction(input_txid)
|
||||
|
||||
if input_tx is None:
|
||||
for ctxn in current_transactions:
|
||||
@ -1293,7 +1293,7 @@ class Transaction(object):
|
||||
raise InputDoesNotExist("input `{}` doesn't exist"
|
||||
.format(input_txid))
|
||||
|
||||
spent = bigchain.get_spent(input_txid, input_.fulfills.output,
|
||||
spent = planet.get_spent(input_txid, input_.fulfills.output,
|
||||
current_transactions)
|
||||
if spent:
|
||||
raise DoubleSpend('input `{}` was already spent'
|
||||
|
@ -41,7 +41,7 @@ class Election(Transaction):
|
||||
ELECTION_THRESHOLD = 2 / 3
|
||||
|
||||
@classmethod
|
||||
def get_validator_change(cls, bigchain):
|
||||
def get_validator_change(cls, planet):
|
||||
"""Return the validator set from the most recent approved block
|
||||
|
||||
:return: {
|
||||
@ -49,18 +49,18 @@ class Election(Transaction):
|
||||
'validators': <validator_set>
|
||||
}
|
||||
"""
|
||||
latest_block = bigchain.get_latest_block()
|
||||
latest_block = planet.get_latest_block()
|
||||
if latest_block is None:
|
||||
return None
|
||||
return bigchain.get_validator_change(latest_block['height'])
|
||||
return planet.get_validator_change(latest_block['height'])
|
||||
|
||||
@classmethod
|
||||
def get_validators(cls, bigchain, height=None):
|
||||
def get_validators(cls, planet, height=None):
|
||||
"""Return a dictionary of validators with key as `public_key` and
|
||||
value as the `voting_power`
|
||||
"""
|
||||
validators = {}
|
||||
for validator in bigchain.get_validators(height):
|
||||
for validator in planet.get_validators(height):
|
||||
# NOTE: we assume that Tendermint encodes public key in base64
|
||||
public_key = public_key_from_ed25519_key(key_from_base64(validator['public_key']['value']))
|
||||
validators[public_key] = validator['voting_power']
|
||||
@ -68,11 +68,11 @@ class Election(Transaction):
|
||||
return validators
|
||||
|
||||
@classmethod
|
||||
def recipients(cls, bigchain):
|
||||
def recipients(cls, planet):
|
||||
"""Convert validator dictionary to a recipient list for `Transaction`"""
|
||||
|
||||
recipients = []
|
||||
for public_key, voting_power in cls.get_validators(bigchain).items():
|
||||
for public_key, voting_power in cls.get_validators(planet).items():
|
||||
recipients.append(([public_key], voting_power))
|
||||
|
||||
return recipients
|
||||
@ -92,7 +92,7 @@ class Election(Transaction):
|
||||
# validators and their voting power in the network
|
||||
return current_topology == voters
|
||||
|
||||
def validate(self, bigchain, current_transactions=[]):
|
||||
def validate(self, planet, current_transactions=[]):
|
||||
"""Validate election transaction
|
||||
|
||||
NOTE:
|
||||
@ -102,7 +102,7 @@ class Election(Transaction):
|
||||
allocated according to the voting power of each validator node.
|
||||
|
||||
Args:
|
||||
:param bigchain: (Planetmint) an instantiated planetmint.lib.Planetmint object.
|
||||
:param planet: (Planetmint) an instantiated planetmint.lib.Planetmint object.
|
||||
:param current_transactions: (list) A list of transactions to be validated along with the election
|
||||
|
||||
Returns:
|
||||
@ -114,14 +114,14 @@ class Election(Transaction):
|
||||
input_conditions = []
|
||||
|
||||
duplicates = any(txn for txn in current_transactions if txn.id == self.id)
|
||||
if bigchain.is_committed(self.id) or duplicates:
|
||||
if planet.is_committed(self.id) or duplicates:
|
||||
raise DuplicateTransaction('transaction `{}` already exists'
|
||||
.format(self.id))
|
||||
|
||||
if not self.inputs_valid(input_conditions):
|
||||
raise InvalidSignature('Transaction signature is invalid.')
|
||||
|
||||
current_validators = self.get_validators(bigchain)
|
||||
current_validators = self.get_validators(planet)
|
||||
|
||||
# NOTE: Proposer should be a single node
|
||||
if len(self.inputs) != 1 or len(self.inputs[0].owners_before) != 1:
|
||||
@ -184,15 +184,15 @@ class Election(Transaction):
|
||||
votes = votes + int(getter(output, 'amount'))
|
||||
return votes
|
||||
|
||||
def get_commited_votes(self, bigchain, election_pk=None):
|
||||
def get_commited_votes(self, planet, election_pk=None):
|
||||
if election_pk is None:
|
||||
election_pk = self.to_public_key(self.id)
|
||||
txns = list(backend.query.get_asset_tokens_for_public_key(bigchain.connection,
|
||||
txns = list(backend.query.get_asset_tokens_for_public_key(planet.connection,
|
||||
self.id,
|
||||
election_pk))
|
||||
return self.count_votes(election_pk, txns, dict.get)
|
||||
|
||||
def has_concluded(self, bigchain, current_votes=[]):
|
||||
def has_concluded(self, planet, current_votes=[]):
|
||||
"""Check if the election can be concluded or not.
|
||||
|
||||
* Elections can only be concluded if the validator set has not changed
|
||||
@ -201,11 +201,11 @@ class Election(Transaction):
|
||||
|
||||
Custom elections may override this function and introduce additional checks.
|
||||
"""
|
||||
if self.has_validator_set_changed(bigchain):
|
||||
if self.has_validator_set_changed(planet):
|
||||
return False
|
||||
|
||||
election_pk = self.to_public_key(self.id)
|
||||
votes_committed = self.get_commited_votes(bigchain, election_pk)
|
||||
votes_committed = self.get_commited_votes(planet, election_pk)
|
||||
votes_current = self.count_votes(election_pk, current_votes)
|
||||
|
||||
total_votes = sum(output.amount for output in self.outputs)
|
||||
@ -215,31 +215,31 @@ class Election(Transaction):
|
||||
|
||||
return False
|
||||
|
||||
def get_status(self, bigchain):
|
||||
election = self.get_election(self.id, bigchain)
|
||||
def get_status(self, planet):
|
||||
election = self.get_election(self.id, planet)
|
||||
if election and election['is_concluded']:
|
||||
return self.CONCLUDED
|
||||
|
||||
return self.INCONCLUSIVE if self.has_validator_set_changed(bigchain) else self.ONGOING
|
||||
return self.INCONCLUSIVE if self.has_validator_set_changed(planet) else self.ONGOING
|
||||
|
||||
def has_validator_set_changed(self, bigchain):
|
||||
latest_change = self.get_validator_change(bigchain)
|
||||
def has_validator_set_changed(self, planet):
|
||||
latest_change = self.get_validator_change(planet)
|
||||
if latest_change is None:
|
||||
return False
|
||||
|
||||
latest_change_height = latest_change['height']
|
||||
|
||||
election = self.get_election(self.id, bigchain)
|
||||
election = self.get_election(self.id, planet)
|
||||
|
||||
return latest_change_height > election['height']
|
||||
|
||||
def get_election(self, election_id, bigchain):
|
||||
return bigchain.get_election(election_id)
|
||||
def get_election(self, election_id, planet):
|
||||
return planet.get_election(election_id)
|
||||
|
||||
def store(self, bigchain, height, is_concluded):
|
||||
bigchain.store_election(self.id, height, is_concluded)
|
||||
def store(self, planet, height, is_concluded):
|
||||
planet.store_election(self.id, height, is_concluded)
|
||||
|
||||
def show_election(self, bigchain):
|
||||
def show_election(self, planet):
|
||||
data = self.asset['data']
|
||||
if 'public_key' in data.keys():
|
||||
data['public_key'] = public_key_to_base64(data['public_key']['value'])
|
||||
@ -247,7 +247,7 @@ class Election(Transaction):
|
||||
for k, v in data.items():
|
||||
if k != 'seed':
|
||||
response += f'{k}={v}\n'
|
||||
response += f'status={self.get_status(bigchain)}'
|
||||
response += f'status={self.get_status(planet)}'
|
||||
|
||||
return response
|
||||
|
||||
@ -276,7 +276,7 @@ class Election(Transaction):
|
||||
return elections
|
||||
|
||||
@classmethod
|
||||
def process_block(cls, bigchain, new_height, txns):
|
||||
def process_block(cls, planet, new_height, txns):
|
||||
"""Looks for election and vote transactions inside the block, records
|
||||
and processes elections.
|
||||
|
||||
@ -303,27 +303,27 @@ class Election(Transaction):
|
||||
initiated_elections = cls._get_initiated_elections(new_height, txns)
|
||||
|
||||
if initiated_elections:
|
||||
bigchain.store_elections(initiated_elections)
|
||||
planet.store_elections(initiated_elections)
|
||||
|
||||
# elections voted for in this block and their votes
|
||||
elections = cls._get_votes(txns)
|
||||
|
||||
validator_update = None
|
||||
for election_id, votes in elections.items():
|
||||
election = bigchain.get_transaction(election_id)
|
||||
election = planet.get_transaction(election_id)
|
||||
if election is None:
|
||||
continue
|
||||
|
||||
if not election.has_concluded(bigchain, votes):
|
||||
if not election.has_concluded(planet, votes):
|
||||
continue
|
||||
|
||||
validator_update = election.on_approval(bigchain, new_height)
|
||||
election.store(bigchain, new_height, is_concluded=True)
|
||||
validator_update = election.on_approval(planet, new_height)
|
||||
election.store(planet, new_height, is_concluded=True)
|
||||
|
||||
return [validator_update] if validator_update else []
|
||||
|
||||
@classmethod
|
||||
def rollback(cls, bigchain, new_height, txn_ids):
|
||||
def rollback(cls, planet, new_height, txn_ids):
|
||||
"""Looks for election and vote transactions inside the block and
|
||||
cleans up the database artifacts possibly created in `process_blocks`.
|
||||
|
||||
@ -332,23 +332,23 @@ class Election(Transaction):
|
||||
|
||||
# delete election records for elections initiated at this height and
|
||||
# elections concluded at this height
|
||||
bigchain.delete_elections(new_height)
|
||||
planet.delete_elections(new_height)
|
||||
|
||||
txns = [bigchain.get_transaction(tx_id) for tx_id in txn_ids]
|
||||
txns = [planet.get_transaction(tx_id) for tx_id in txn_ids]
|
||||
|
||||
elections = cls._get_votes(txns)
|
||||
for election_id in elections:
|
||||
election = bigchain.get_transaction(election_id)
|
||||
election.on_rollback(bigchain, new_height)
|
||||
election = planet.get_transaction(election_id)
|
||||
election.on_rollback(planet, new_height)
|
||||
|
||||
def on_approval(self, bigchain, new_height):
|
||||
def on_approval(self, planet, new_height):
|
||||
"""Override to update the database state according to the
|
||||
election rules. Consider the current database state to account for
|
||||
other concluded elections, if required.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def on_rollback(self, bigchain, new_height):
|
||||
def on_rollback(self, planet, new_height):
|
||||
"""Override to clean up the database artifacts possibly created
|
||||
in `on_approval`. Part of the `end_block`/`commit` crash recovery.
|
||||
"""
|
||||
|
@ -20,7 +20,7 @@ class Vote(Transaction):
|
||||
# Custom validation schema
|
||||
TX_SCHEMA_CUSTOM = TX_SCHEMA_VOTE
|
||||
|
||||
def validate(self, bigchain, current_transactions=[]):
|
||||
def validate(self, planet, current_transactions=[]):
|
||||
"""Validate election vote transaction
|
||||
NOTE: There are no additional validity conditions on casting votes i.e.
|
||||
a vote is just a valid TRANFER transaction
|
||||
@ -28,7 +28,7 @@ class Vote(Transaction):
|
||||
For more details refer BEP-21: https://github.com/planetmint/BEPs/tree/master/21
|
||||
|
||||
Args:
|
||||
bigchain (Planetmint): an instantiated planetmint.lib.Planetmint object.
|
||||
planet (Planetmint): an instantiated planetmint.lib.Planetmint object.
|
||||
|
||||
Returns:
|
||||
Vote: a Vote object
|
||||
@ -36,7 +36,7 @@ class Vote(Transaction):
|
||||
Raises:
|
||||
ValidationError: If the election vote is invalid
|
||||
"""
|
||||
self.validate_transfer_inputs(bigchain, current_transactions)
|
||||
self.validate_transfer_inputs(planet, current_transactions)
|
||||
return self
|
||||
|
||||
@classmethod
|
||||
|
@ -20,17 +20,17 @@ class ChainMigrationElection(Election):
|
||||
|
||||
return super().has_concluded(planetmint, *args, **kwargs)
|
||||
|
||||
def on_approval(self, bigchain, *args, **kwargs):
|
||||
bigchain.migrate_abci_chain()
|
||||
def on_approval(self, planet, *args, **kwargs):
|
||||
planet.migrate_abci_chain()
|
||||
|
||||
def show_election(self, bigchain):
|
||||
output = super().show_election(bigchain)
|
||||
chain = bigchain.get_latest_abci_chain()
|
||||
def show_election(self, planet):
|
||||
output = super().show_election(planet)
|
||||
chain = planet.get_latest_abci_chain()
|
||||
if chain is None or chain['is_synced']:
|
||||
return output
|
||||
|
||||
output += f'\nchain_id={chain["chain_id"]}'
|
||||
block = bigchain.get_latest_block()
|
||||
block = planet.get_latest_block()
|
||||
output += f'\napp_hash={block["app_hash"]}'
|
||||
validators = [
|
||||
{
|
||||
@ -39,10 +39,10 @@ class ChainMigrationElection(Election):
|
||||
'value': k,
|
||||
},
|
||||
'power': v,
|
||||
} for k, v in self.get_validators(bigchain).items()
|
||||
} for k, v in self.get_validators(planet).items()
|
||||
]
|
||||
output += f'\nvalidators={json.dumps(validators, indent=4)}'
|
||||
return output
|
||||
|
||||
def on_rollback(self, bigchain, new_height):
|
||||
bigchain.delete_abci_chain(new_height)
|
||||
def on_rollback(self, planet, new_height):
|
||||
planet.delete_abci_chain(new_height)
|
||||
|
@ -16,10 +16,10 @@ class Transaction(Transaction):
|
||||
METADATA = 'metadata'
|
||||
DATA = 'data'
|
||||
|
||||
def validate(self, bigchain, current_transactions=[]):
|
||||
def validate(self, planet, current_transactions=[]):
|
||||
"""Validate transaction spend
|
||||
Args:
|
||||
bigchain (Planetmint): an instantiated planetmint.Planetmint object.
|
||||
planet (Planetmint): an instantiated planetmint.Planetmint object.
|
||||
Returns:
|
||||
The transaction (Transaction) if the transaction is valid else it
|
||||
raises an exception describing the reason why the transaction is
|
||||
@ -31,7 +31,7 @@ class Transaction(Transaction):
|
||||
|
||||
if self.operation == Transaction.CREATE:
|
||||
duplicates = any(txn for txn in current_transactions if txn.id == self.id)
|
||||
if bigchain.is_committed(self.id) or duplicates:
|
||||
if planet.is_committed(self.id) or duplicates:
|
||||
raise DuplicateTransaction('transaction `{}` already exists'
|
||||
.format(self.id))
|
||||
|
||||
@ -39,7 +39,7 @@ class Transaction(Transaction):
|
||||
raise InvalidSignature('Transaction signature is invalid.')
|
||||
|
||||
elif self.operation == Transaction.TRANSFER:
|
||||
self.validate_transfer_inputs(bigchain, current_transactions)
|
||||
self.validate_transfer_inputs(planet, current_transactions)
|
||||
|
||||
return self
|
||||
|
||||
|
@ -18,13 +18,13 @@ class ValidatorElection(Election):
|
||||
ALLOWED_OPERATIONS = (OPERATION,)
|
||||
TX_SCHEMA_CUSTOM = TX_SCHEMA_VALIDATOR_ELECTION
|
||||
|
||||
def validate(self, bigchain, current_transactions=[]):
|
||||
def validate(self, planet, current_transactions=[]):
|
||||
"""For more details refer BEP-21: https://github.com/planetmint/BEPs/tree/master/21
|
||||
"""
|
||||
|
||||
current_validators = self.get_validators(bigchain)
|
||||
current_validators = self.get_validators(planet)
|
||||
|
||||
super(ValidatorElection, self).validate(bigchain, current_transactions=current_transactions)
|
||||
super(ValidatorElection, self).validate(planet, current_transactions=current_transactions)
|
||||
|
||||
# NOTE: change more than 1/3 of the current power is not allowed
|
||||
if self.asset['data']['power'] >= (1/3)*sum(current_validators.values()):
|
||||
@ -37,22 +37,22 @@ class ValidatorElection(Election):
|
||||
super(ValidatorElection, cls).validate_schema(tx)
|
||||
validate_asset_public_key(tx['asset']['data']['public_key'])
|
||||
|
||||
def has_concluded(self, bigchain, *args, **kwargs):
|
||||
latest_block = bigchain.get_latest_block()
|
||||
def has_concluded(self, planet, *args, **kwargs):
|
||||
latest_block = planet.get_latest_block()
|
||||
if latest_block is not None:
|
||||
latest_block_height = latest_block['height']
|
||||
latest_validator_change = bigchain.get_validator_change()['height']
|
||||
latest_validator_change = planet.get_validator_change()['height']
|
||||
|
||||
# TODO change to `latest_block_height + 3` when upgrading to Tendermint 0.24.0.
|
||||
if latest_validator_change == latest_block_height + 2:
|
||||
# do not conclude the election if there is a change assigned already
|
||||
return False
|
||||
|
||||
return super().has_concluded(bigchain, *args, **kwargs)
|
||||
return super().has_concluded(planet, *args, **kwargs)
|
||||
|
||||
def on_approval(self, bigchain, new_height):
|
||||
def on_approval(self, planet, new_height):
|
||||
validator_updates = [self.asset['data']]
|
||||
curr_validator_set = bigchain.get_validators(new_height)
|
||||
curr_validator_set = planet.get_validators(new_height)
|
||||
updated_validator_set = new_validator_set(curr_validator_set,
|
||||
validator_updates)
|
||||
|
||||
@ -60,7 +60,7 @@ class ValidatorElection(Election):
|
||||
if v['voting_power'] > 0]
|
||||
|
||||
# TODO change to `new_height + 2` when upgrading to Tendermint 0.24.0.
|
||||
bigchain.store_validator_set(new_height + 1, updated_validator_set)
|
||||
planet.store_validator_set(new_height + 1, updated_validator_set)
|
||||
return encode_validator(self.asset['data'])
|
||||
|
||||
def on_rollback(self, planetmint, new_height):
|
||||
|
@ -42,8 +42,8 @@ class AssetListApi(Resource):
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
assets = bigchain.text_search(**args)
|
||||
with pool() as planet:
|
||||
assets = planet.text_search(**args)
|
||||
|
||||
try:
|
||||
# This only works with MongoDB as the backend
|
||||
|
@ -26,8 +26,8 @@ class BlockApi(Resource):
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
block = bigchain.get_block(block_id=block_id)
|
||||
with pool() as planet:
|
||||
block = planet.get_block(block_id=block_id)
|
||||
|
||||
if not block:
|
||||
return make_error(404)
|
||||
@ -52,7 +52,7 @@ class BlockListApi(Resource):
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
blocks = bigchain.get_block_containing_tx(tx_id)
|
||||
with pool() as planet:
|
||||
blocks = planet.get_block_containing_tx(tx_id)
|
||||
|
||||
return blocks
|
||||
|
@ -41,9 +41,9 @@ class MetadataApi(Resource):
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
with pool() as planet:
|
||||
args['table'] = 'metadata'
|
||||
metadata = bigchain.text_search(**args)
|
||||
metadata = planet.text_search(**args)
|
||||
|
||||
try:
|
||||
# This only works with MongoDB as the backend
|
||||
|
@ -24,8 +24,8 @@ class OutputListApi(Resource):
|
||||
args = parser.parse_args(strict=True)
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
with pool() as bigchain:
|
||||
outputs = bigchain.get_outputs_filtered(args['public_key'],
|
||||
with pool() as planet:
|
||||
outputs = planet.get_outputs_filtered(args['public_key'],
|
||||
args['spent'])
|
||||
return [{'transaction_id': output.txid, 'output_index': output.output}
|
||||
for output in outputs]
|
||||
|
@ -34,8 +34,8 @@ class TransactionApi(Resource):
|
||||
"""
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
tx = bigchain.get_transaction(tx_id)
|
||||
with pool() as planet:
|
||||
tx = planet.get_transaction(tx_id)
|
||||
|
||||
if not tx:
|
||||
return make_error(404)
|
||||
@ -52,8 +52,8 @@ class TransactionListApi(Resource):
|
||||
parser.add_argument('last_tx', type=parameters.valid_bool,
|
||||
required=False)
|
||||
args = parser.parse_args()
|
||||
with current_app.config['bigchain_pool']() as bigchain:
|
||||
txs = bigchain.get_transactions_filtered(**args)
|
||||
with current_app.config['bigchain_pool']() as planet:
|
||||
txs = planet.get_transactions_filtered(**args)
|
||||
|
||||
return [tx.to_dict() for tx in txs]
|
||||
|
||||
@ -89,16 +89,16 @@ class TransactionListApi(Resource):
|
||||
'Invalid transaction ({}): {}'.format(type(e).__name__, e)
|
||||
)
|
||||
|
||||
with pool() as bigchain:
|
||||
with pool() as planet:
|
||||
try:
|
||||
bigchain.validate_transaction(tx_obj)
|
||||
planet.validate_transaction(tx_obj)
|
||||
except ValidationError as e:
|
||||
return make_error(
|
||||
400,
|
||||
'Invalid transaction ({}): {}'.format(type(e).__name__, e)
|
||||
)
|
||||
else:
|
||||
status_code, message = bigchain.write_transaction(tx_obj, mode)
|
||||
status_code, message = planet.write_transaction(tx_obj, mode)
|
||||
|
||||
if status_code == 202:
|
||||
response = jsonify(tx)
|
||||
|
@ -17,7 +17,7 @@ class ValidatorsApi(Resource):
|
||||
|
||||
pool = current_app.config['bigchain_pool']
|
||||
|
||||
with pool() as bigchain:
|
||||
validators = bigchain.get_validators()
|
||||
with pool() as planet:
|
||||
validators = planet.get_validators()
|
||||
|
||||
return validators
|
||||
|
@ -69,7 +69,7 @@ def test_node_count(some_args):
|
||||
### Crash components
|
||||
- start n nodes, mongodb crashes
|
||||
- start n nodes, tendermint crashes
|
||||
- start n nodes, bigchain crashes
|
||||
- start n nodes, planet crashes
|
||||
- start n nodes, connection crashes
|
||||
- what else can crash?
|
||||
- possible crash times
|
||||
|
@ -38,12 +38,12 @@ def test_bigchain_class_default_initialization(config):
|
||||
from planetmint import Planetmint
|
||||
from planetmint.validation import BaseValidationRules
|
||||
from planetmint.backend.connection import Connection
|
||||
bigchain = Planetmint()
|
||||
assert isinstance(bigchain.connection, Connection)
|
||||
assert bigchain.connection.host == config['database']['host']
|
||||
assert bigchain.connection.port == config['database']['port']
|
||||
assert bigchain.connection.dbname == config['database']['name']
|
||||
assert bigchain.validation == BaseValidationRules
|
||||
planet = Planetmint()
|
||||
assert isinstance(planet.connection, Connection)
|
||||
assert planet.connection.host == config['database']['host']
|
||||
assert planet.connection.port == config['database']['port']
|
||||
assert planet.connection.dbname == config['database']['name']
|
||||
assert planet.validation == BaseValidationRules
|
||||
|
||||
|
||||
def test_bigchain_class_initialization_with_parameters():
|
||||
@ -57,12 +57,12 @@ def test_bigchain_class_initialization_with_parameters():
|
||||
'name': 'this_is_the_db_name',
|
||||
}
|
||||
connection = connect(**init_db_kwargs)
|
||||
bigchain = Planetmint(connection=connection)
|
||||
assert bigchain.connection == connection
|
||||
assert bigchain.connection.host == init_db_kwargs['host']
|
||||
assert bigchain.connection.port == init_db_kwargs['port']
|
||||
assert bigchain.connection.dbname == init_db_kwargs['name']
|
||||
assert bigchain.validation == BaseValidationRules
|
||||
planet = Planetmint(connection=connection)
|
||||
assert planet.connection == connection
|
||||
assert planet.connection.host == init_db_kwargs['host']
|
||||
assert planet.connection.port == init_db_kwargs['port']
|
||||
assert planet.connection.dbname == init_db_kwargs['name']
|
||||
assert planet.validation == BaseValidationRules
|
||||
|
||||
|
||||
@pytest.mark.bdb
|
||||
|
@ -28,7 +28,7 @@ def flush_localmongo_db(connection, dbname):
|
||||
getattr(connection.conn[dbname], t).delete_many({})
|
||||
|
||||
|
||||
def generate_block(bigchain):
|
||||
def generate_block(planet):
|
||||
from planetmint.common.crypto import generate_key_pair
|
||||
from planetmint.models import Transaction
|
||||
|
||||
@ -38,7 +38,7 @@ def generate_block(bigchain):
|
||||
asset=None)\
|
||||
.sign([alice.private_key])
|
||||
|
||||
code, message = bigchain.write_transaction(tx, BROADCAST_TX_COMMIT)
|
||||
code, message = planet.write_transaction(tx, BROADCAST_TX_COMMIT)
|
||||
assert code == 202
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user