Lorenz Herzberger b57bbe21d2
Planetmint tarantool the merge (#181)
* assets changes

* fixed init db code

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed some other test cases

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* Fixed 1/3 from test_queries.py

* test_queries.py ALL PASSED

* removed junk comment

* test_schema.py fixed

* added funcationilty to init a DB in case it hasn't been initialized before

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed test_schema.py

* last commit

* fixed some minor bugs

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* test_schema.py ALL PASSING + changes in TarantoolDB Class

* test_schema.py ALL PASSING + changes in TarantoolDB Class

* commit err

* fixed asset issues

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed assets handling

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed missing Config().get() migrations

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed unit test error in case tx id is not defined

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed some minor bugs

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* simplified return of metadata

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* reconnect function added to reset_database if statement

* removed some print

* fixed TX compose bug about threshold information

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed usage of from_db part 1

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed tarantool/tendermint status management

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed some backend init issues and error handling

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed output public_keys order bug

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed deepcopy bug and another small assignment bug

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* s

* fixed last asset bug

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* merge

* fixed another set of tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed test_core.py by converting dict transaction to Transaction Object

* fixed delete_transaction function

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* commit

* pre_commit_state singledispatch issue

* fixed global variable of backend

* fixed backend problem with command make tests

* args_reset_db added, fixed error with incorrect handling of kwargs

* test_validator passing

* fixed test_core.py by adding HDict in saved_key_orders function

* fixed pre_commiT-state bug

* init chain recoginez function fixed .

* fixed last error from tendermint/test_core.py

* tendermint/test_core.py all passing

* fixed function from fast_query.py, problem was in deleteting functions

* fixed error from test_fastquery.py, by chaning the algorithm of verifying returnred transactions id

* fixed test_core.py by adding HDict in saved_key_orders function

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* Fix make test issue - unhealthy planetmint container because non-init of tarantool spaces

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* Fix tarantool connection issues in test

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* _save_keys_order, changes behaviour

* hash problem fixed

* separated asset test fixed

* Removed all Errors in Make Test

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* mock error solved

* mock solved

* problem with stdout from Popen

* fixed output from calling subprocess

* Now planetmint drop and planemint init, is working throught schema.py file.

* Fixed some lib and web issues

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* test_lib test_update_utxoset passing

* test_commands.py -> all tests are passing

* test_queries.py -> fixed

* rollback my changes

* fixed test_quries.py -> problem with assets

* test_quries.py -> metadata error fixed

* test_bigchain_api -> fixed by adding ErrorHandling for Tarantool operation

* test_bigchain_api

* test_integration.py -> fixed issue with block object

* test_lib.py -> fixed

* store and get utxo fixed

* NoneType error, fixed in test_lib.py

* test_lib.py fixed error, adopting verification for tarantool

* test_lib.py fixed one more function

* test_store_bulk_transaction -> adopted for tarantool

* test_store_transaction -> changed to work with tarantool

* test_asset_is_separated_from_transaciton -> skipped for Tarantool connection type

* Fixed 4 issues in test/tendermint

Signed-off-by: Sangat Das <sangatdas5@gmail.com>

* fixed merge issues

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed last misspelling of backend config

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* test_block_tendermint.py -> solved by returning empty list if not found

* readded test_core tests, fixed some linter issues

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* last changes

* removed test fixture

* removed planetmint_env folder

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* .idea/ added to gitignore file

* removed .idea/ folder from project

* create 3 files. init: indexes, schema, tables(spaces). this is used for initializing space,index and schema separately, and getting an output for specific command

* added to schema all execute commands in dictionary format

* Added create_tables function for tarantool connection

* 'create_database' function from schema file, is ignored using TarantoolDB Class.

* Implemented planetmint init via schema.py !

* added execute drop commands for spaces

* drop_databases improved

* Removed .lua files that was created temporarily.

* replaced TarantoolDB with TarantoolDBConnection

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Added output to console for creating indexes.

* fixed connection instantiation

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Added exception for NetworkError, to get specific error from connection class.

* _setup_database fixture restored.(STILL NOT WORKING in this commit)

* added 'universe' name as database name for tarantool

* created flush_db for tarantool connection type

* function create_database will call create_tables only for tarantool connection

* _bdb, setup_database restored as it was before

* Fixed flush_dbtarantool

* Fixed fatal crashing at beginning of starting planetmint. problem was solved by returning None value if where is no space.

* adding try except to some queries from tarantool/query.py.

* implemented decorator for running queries in try catch

* removed import of interface

* Removed print + removed import of interface directly

* removed importing of interface

* fixed some imports, refactored TarantoolDBConnection.conn handling

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added new requirement to setup.py

* added query() method, that will return Lazy Object

* removed unecessary comments from connection class

* get_space method is the same as old space method.

* Added run() method to TarantoolDBConnection Class.

* tarantool/query.py changed for using Lazy() implementation + little changes

* queries from tarantool/query.py was adjusted to not get NonType error

* adjusted some function calls, and connection calls

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixes for error NoneType

* fix for flush function (freezing of pytest) + NoneType error

* store_transactions changed to use new format of query

* Changed from .space() method to .get_space()

* putted from new line

* fixed Lazy() has no len

* adjusted _group_transaction_by_ids and store_transactions for connection.run

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed .data from select queries

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed run_command_without_output config and removed faulty error handling

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* made rollback db agnostic

* Added assign for pre_commit

* resolved comments and clean-up of unused code

* Fixed no attribute .run(). Fixed | Fixed no attribute .data

* Fixed no atribute .data

* Fixed list has no attribute .data

* Removed comments

* Fixed flush_db_tarantool, not it removes also from blocks spaces

* Fixed test_queries.py PASSED

* Fixed SystemExit error by inversing sorting of array

* Cleaned up test_core.py

* fixed upsert() functions, incorrect behaviour

* removed unused print

* removed unused print (2)

* Fixed test_txlist.py by improving flush_db_tarantool

* Small fixes in .upsert() functions for tarantool_db

* Fixes some test cases in tendermint/test_lib.py

* Fixed flush_tarantool_db Function.

* added utxos to SPACE_NAMES to delete data from utxo space

* fixed this module by restoring original function instructions.

* added hash generation to create primary key for abci_chain tuple.

* Added field 'id' to abci_chains

* changed flush function to delete abci_chains tuples

* added indexed_pattern_search to basic lua, implemented text_search

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted some queries, wip print statements to be removed

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed get_metadata

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added some prints and simplified code

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed __asset_check

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed print statements

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added limit to text_Search

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Planetmint tarantool (#152)

* added indexed_pattern_search to basic lua, implemented text_search

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted some queries, wip print statements to be removed

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed get_metadata

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added some prints and simplified code

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed __asset_check

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed print statements

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added limit to text_Search

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted store_asset behaviour to match mongodb implementation

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed test_write_metadata test case

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed pattern search for meta_data

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed text_search result conversion

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* adjusted connect config error handling and test case for new signature

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Resolved issues related to key error

* Added convert.py for storing interfaces

* Added convert.py implementation for tarantool

* Implemented to lib.py, functions from converted.py

* Added initializing for convert.py

* init of convert.py for mongodb implementation

* implemented convert.py for mongodatabase [NOT TESTED]

* adjusted get_assets and from_db for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added comment

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fix get_assets issue (#160)

* adjusted get_assets and from_db for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added comment

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* resolve conflicts

* docker all in one now install tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added user to integration init.lua

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated integration test setup for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed print statements

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated changelog

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed error messaging

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed exception verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed printing of testdata

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* Planetmint tarantool (#169)

* 31 restructue documentation (#138)

* removed korean documentation

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed CN and KOR readme

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* changed to the press theme

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* first changes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixe H3 vs H1 issues

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added missing png

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added missing file

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed warnings

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* moved documents

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolete files

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolete folder

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obs. file

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added some final changes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obs. reference

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* moved chain migration to election types (#109)

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Final zenroom (#147)

* zenroom fixes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* expl. defined the aiohttp package

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version number and fixed a zenroom runtime bug

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added fialing zenroom tx signing test

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* extended test to pass zenrooom validation, but to fail planetmint validation.

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added manual tx crafting

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added zenroom fulfillment verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* the last mile before integration

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* zenroom unit tests are passing

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* simplified zenroom unit tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolte lines from the zenroom tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed acceptance tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* adjusted zenroom integraiton tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed linting errors

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* simplified zenroom unit test

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version number

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* using cryptoconditions without print message

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased cc usage to 0.9.9 readded daemon proceses

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version to 0.9.6

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed deployment issue for 0.9.6

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* adjusted get_assets and from_db for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added comment

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* improve usability of zenroom (#159)

* improve usability of zenroom

* * increased version
* fixed test cases
* added changelog

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>

* migrated to AGPLv3

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* 150 add cryptoconditions documentation (#166)

* added smaller logos fixed reference issue

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed some erros and typos

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added cryptoconditions reference to the subproject

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* docker all in one now install tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added user to integration init.lua

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated integration test setup for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed print statements

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated changelog

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed error messaging

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed exception verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed printing of testdata

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com>
Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com>
Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com>
Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>

* Removing naughty strings test cases

* updated quickstart with tarantool installation

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated all-in-one-planetmint with tarantool port and data persistence

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed typo

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* update documentation about tarantool (#174)

* 31 restructue documentation (#138)

* removed korean documentation

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed CN and KOR readme

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* changed to the press theme

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* first changes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixe H3 vs H1 issues

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added missing png

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added missing file

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed warnings

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* moved documents

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolete files

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolete folder

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obs. file

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added some final changes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obs. reference

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* moved chain migration to election types (#109)

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* Final zenroom (#147)

* zenroom fixes

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* expl. defined the aiohttp package

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version number and fixed a zenroom runtime bug

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added fialing zenroom tx signing test

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* extended test to pass zenrooom validation, but to fail planetmint validation.

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added manual tx crafting

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added zenroom fulfillment verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* the last mile before integration

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* zenroom unit tests are passing

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* simplified zenroom unit tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* removed obsolte lines from the zenroom tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed acceptance tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* adjusted zenroom integraiton tests

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed linting errors

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* simplified zenroom unit test

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version number

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* using cryptoconditions without print message

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased cc usage to 0.9.9 readded daemon proceses

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* increased version to 0.9.6

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed deployment issue for 0.9.6

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* adjusted get_assets and from_db for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added comment

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* improve usability of zenroom (#159)

* improve usability of zenroom

* * increased version
* fixed test cases
* added changelog

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>

* migrated to AGPLv3

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* 150 add cryptoconditions documentation (#166)

* added smaller logos fixed reference issue

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed some erros and typos

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* added cryptoconditions reference to the subproject

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* docker all in one now install tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* added user to integration init.lua

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated integration test setup for tarantool

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* removed print statements

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated changelog

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed error messaging

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed exception verification

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* fixed printing of testdata

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>

* updated quickstart with tarantool installation

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* updated all-in-one-planetmint with tarantool port and data persistence

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

* fixed typo

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>

Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com>
Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com>
Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com>
Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>

* Fixes lint issues  (#176)

* Resolved lint issues

* resolved other lint issues

Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>
Co-authored-by: andrei <deffuls@debian-BULLSEYE-live-builder-AMD64>
Co-authored-by: Sangat Das <sangatdas5@gmail.com>
Co-authored-by: liviu-lesan <31960632+liviu-lesan@users.noreply.github.com>
Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com>
Co-authored-by: andreitricolici <97448537+andreitricolici@users.noreply.github.com>
Co-authored-by: ArpitShukla007 <arpitnshukla@gmail.com>
Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com>
Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com>
2022-07-05 14:56:53 +02:00

541 lines
20 KiB
Python

# Copyright © 2020 Interplanetary Database Association e.V.,
# Planetmint and IPDB software contributors.
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
# Code is Apache-2.0 and docs are CC-BY-4.0
from operator import index
import os
from unittest.mock import patch
from planetmint.transactions.types.assets.create import Create
from planetmint.transactions.types.assets.transfer import Transfer
try:
from hashlib import sha3_256
except ImportError:
# NOTE: needed for Python < 3.6
from sha3 import sha3_256
import pytest
from pymongo import MongoClient
from planetmint import backend
from planetmint.transactions.common.transaction_mode_types import (
BROADCAST_TX_COMMIT, BROADCAST_TX_ASYNC, BROADCAST_TX_SYNC)
from planetmint.lib import Block
@pytest.mark.bdb
def test_asset_is_separated_from_transaciton(b):
import copy
from planetmint.transactions.common.crypto import generate_key_pair
from planetmint.backend.tarantool.connection import TarantoolDBConnection
if isinstance(b.connection, TarantoolDBConnection):
pytest.skip("This specific function is skipped because, assets are stored differently if using Tarantool")
alice = generate_key_pair()
bob = generate_key_pair()
asset = {'Never gonna': ['give you up',
'let you down',
'run around'
'desert you',
'make you cry',
'say goodbye',
'tell a lie',
'hurt you']}
tx = Create.generate([alice.public_key],
[([bob.public_key], 1)],
metadata=None,
asset=asset) \
.sign([alice.private_key])
# with store_bulk_transactions we use `insert_many` where PyMongo
# automatically adds an `_id` field to the tx, therefore we need the
# deepcopy, for more info see:
# https://api.mongodb.com/python/current/faq.html#writes-and-ids
tx_dict = copy.deepcopy(tx.to_dict())
b.store_bulk_transactions([tx])
assert 'asset' not in backend.query.get_transaction(b.connection, tx.id)
assert backend.query.get_asset(b.connection, tx.id)['data'] == asset
assert b.get_transaction(tx.id).to_dict() == tx_dict
@pytest.mark.bdb
def test_get_latest_block(b):
from planetmint.lib import Block
for i in range(10):
app_hash = os.urandom(16).hex()
txn_id = os.urandom(16).hex()
block = Block(app_hash=app_hash, height=i,
transactions=[txn_id])._asdict()
b.store_block(block)
block = b.get_latest_block()
assert block['height'] == 9
@pytest.mark.bdb
@patch('planetmint.backend.query.get_block', return_value=None)
@patch('planetmint.Planetmint.get_latest_block', return_value={'height': 10})
def test_get_empty_block(_0, _1, b):
assert b.get_block(5) == {'height': 5, 'transactions': []}
def test_validation_error(b):
from planetmint.transactions.common.crypto import generate_key_pair
alice = generate_key_pair()
tx = Create.generate([alice.public_key],
[([alice.public_key], 1)],
asset=None) \
.sign([alice.private_key]).to_dict()
tx['metadata'] = ''
assert not b.validate_transaction(tx)
@patch('requests.post')
def test_write_and_post_transaction(mock_post, b):
from planetmint.transactions.common.crypto import generate_key_pair
from planetmint.tendermint_utils import encode_transaction
alice = generate_key_pair()
tx = Create.generate([alice.public_key],
[([alice.public_key], 1)],
asset=None) \
.sign([alice.private_key]).to_dict()
tx = b.validate_transaction(tx)
b.write_transaction(tx, BROADCAST_TX_ASYNC)
assert mock_post.called
args, kwargs = mock_post.call_args
assert BROADCAST_TX_ASYNC == kwargs['json']['method']
encoded_tx = [encode_transaction(tx.to_dict())]
assert encoded_tx == kwargs['json']['params']
@patch('requests.post')
@pytest.mark.parametrize('mode', [
BROADCAST_TX_SYNC,
BROADCAST_TX_ASYNC,
BROADCAST_TX_COMMIT
])
def test_post_transaction_valid_modes(mock_post, b, mode):
from planetmint.transactions.common.crypto import generate_key_pair
alice = generate_key_pair()
tx = Create.generate([alice.public_key],
[([alice.public_key], 1)],
asset=None) \
.sign([alice.private_key]).to_dict()
tx = b.validate_transaction(tx)
b.write_transaction(tx, mode)
args, kwargs = mock_post.call_args
assert mode == kwargs['json']['method']
def test_post_transaction_invalid_mode(b):
from planetmint.transactions.common.crypto import generate_key_pair
from planetmint.transactions.common.exceptions import ValidationError
alice = generate_key_pair()
tx = Create.generate([alice.public_key],
[([alice.public_key], 1)],
asset=None) \
.sign([alice.private_key]).to_dict()
tx = b.validate_transaction(tx)
with pytest.raises(ValidationError):
b.write_transaction(tx, 'nope')
@pytest.mark.bdb
def test_update_utxoset(b, signed_create_tx, signed_transfer_tx, db_conn):
b.update_utxoset(signed_create_tx)
utxoset = db_conn.get_space('utxos')
assert utxoset.select().rowcount == 1
utxo = utxoset.select().data
assert utxo[0][0] == signed_create_tx.id
assert utxo[0][1] == 0
b.update_utxoset(signed_transfer_tx)
assert utxoset.select().rowcount == 1
utxo = utxoset.select().data
assert utxo[0][0] == signed_transfer_tx.id
assert utxo[0][1] == 0
@pytest.mark.bdb
def test_store_transaction(mocker, b, signed_create_tx,
signed_transfer_tx, db_context):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
mocked_store_asset = mocker.patch('planetmint.backend.query.store_assets')
mocked_store_metadata = mocker.patch(
'planetmint.backend.query.store_metadatas')
mocked_store_transaction = mocker.patch(
'planetmint.backend.query.store_transactions')
b.store_bulk_transactions([signed_create_tx])
if not isinstance(b.connection, TarantoolDBConnection):
mongo_client = MongoClient(host=db_context.host, port=db_context.port)
utxoset = mongo_client[db_context.name]['utxos']
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo['transaction_id'] == signed_create_tx.id
assert utxo['output_index'] == 0
mocked_store_asset.assert_called_once_with(
b.connection,
[{'data': signed_create_tx.asset['data'], 'tx_id': signed_create_tx.id, 'asset_id': signed_create_tx.id}]
)
else:
mocked_store_asset.assert_called_once_with(
b.connection,
[(signed_create_tx.asset, signed_create_tx.id, signed_create_tx.id)]
)
mocked_store_metadata.assert_called_once_with(
b.connection,
[{'id': signed_create_tx.id, 'metadata': signed_create_tx.metadata}],
)
mocked_store_transaction.assert_called_once_with(
b.connection,
[{k: v for k, v in signed_create_tx.to_dict().items()
if k not in ('asset', 'metadata')}],
)
mocked_store_asset.reset_mock()
mocked_store_metadata.reset_mock()
mocked_store_transaction.reset_mock()
b.store_bulk_transactions([signed_transfer_tx])
if not isinstance(b.connection, TarantoolDBConnection):
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo['transaction_id'] == signed_transfer_tx.id
assert utxo['output_index'] == 0
assert not mocked_store_asset.called
mocked_store_metadata.asser_called_once_with(
b.connection,
[{'id': signed_transfer_tx.id, 'metadata': signed_transfer_tx.metadata}],
)
if not isinstance(b.connection, TarantoolDBConnection):
mocked_store_transaction.assert_called_once_with(
b.connection,
[{k: v for k, v in signed_transfer_tx.to_dict().items()
if k != 'metadata'}],
)
@pytest.mark.bdb
def test_store_bulk_transaction(mocker, b, signed_create_tx,
signed_transfer_tx, db_context):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
mocked_store_assets = mocker.patch(
'planetmint.backend.query.store_assets')
mocked_store_metadata = mocker.patch(
'planetmint.backend.query.store_metadatas')
mocked_store_transactions = mocker.patch(
'planetmint.backend.query.store_transactions')
b.store_bulk_transactions((signed_create_tx,))
if not isinstance(b.connection, TarantoolDBConnection):
mongo_client = MongoClient(host=db_context.host, port=db_context.port)
utxoset = mongo_client[db_context.name]['utxos']
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo['transaction_id'] == signed_create_tx.id
assert utxo['output_index'] == 0
if isinstance(b.connection, TarantoolDBConnection):
mocked_store_assets.assert_called_once_with(
b.connection, # signed_create_tx.asset['data'] this was before
[(signed_create_tx.asset, signed_create_tx.id, signed_create_tx.id)],
)
else:
mocked_store_assets.assert_called_once_with(
b.connection, # signed_create_tx.asset['data'] this was before
[(signed_create_tx.asset["data"], signed_create_tx.id, signed_create_tx.id)],
)
mocked_store_metadata.assert_called_once_with(
b.connection,
[{'id': signed_create_tx.id, 'metadata': signed_create_tx.metadata}],
)
mocked_store_transactions.assert_called_once_with(
b.connection,
[{k: v for k, v in signed_create_tx.to_dict().items()
if k not in ('asset', 'metadata')}],
)
mocked_store_assets.reset_mock()
mocked_store_metadata.reset_mock()
mocked_store_transactions.reset_mock()
b.store_bulk_transactions((signed_transfer_tx,))
if not isinstance(b.connection, TarantoolDBConnection):
assert utxoset.count_documents({}) == 1
utxo = utxoset.find_one()
assert utxo['transaction_id'] == signed_transfer_tx.id
assert utxo['output_index'] == 0
assert not mocked_store_assets.called
mocked_store_metadata.asser_called_once_with(
b.connection,
[{'id': signed_transfer_tx.id,
'metadata': signed_transfer_tx.metadata}],
)
if not isinstance(b.connection, TarantoolDBConnection):
mocked_store_transactions.assert_called_once_with(
b.connection,
[{k: v for k, v in signed_transfer_tx.to_dict().items()
if k != 'metadata'}],
)
@pytest.mark.bdb
def test_delete_zero_unspent_outputs(b, utxoset):
unspent_outputs, utxo_collection = utxoset
num_rows_before_operation = utxo_collection.select().rowcount
delete_res = b.delete_unspent_outputs() # noqa: F841
num_rows_after_operation = utxo_collection.select().rowcount
# assert delete_res is None
assert num_rows_before_operation == num_rows_after_operation
# assert utxo_collection.count_documents(
# {'$or': [
# {'transaction_id': 'a', 'output_index': 0},
# {'transaction_id': 'b', 'output_index': 0},
# {'transaction_id': 'a', 'output_index': 1},
# ]}
# ) == 3
@pytest.mark.bdb
def test_delete_one_unspent_outputs(b, utxoset):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
unspent_outputs, utxo_collection = utxoset
delete_res = b.delete_unspent_outputs(unspent_outputs[0])
if not isinstance(b.connection, TarantoolDBConnection):
assert len(list(delete_res)) == 1
assert utxo_collection.count_documents(
{'$or': [
{'transaction_id': 'a', 'output_index': 1},
{'transaction_id': 'b', 'output_index': 0},
]}
) == 2
assert utxo_collection.count_documents(
{'transaction_id': 'a', 'output_index': 0}) == 0
else:
utx_space = b.connection.get_space("utxos")
res1 = utx_space.select(['a', 1], index="id_search").data
res2 = utx_space.select(['b', 0], index="id_search").data
assert len(res1) + len(res2) == 2
res3 = utx_space.select(['a', 0], index="id_search").data
assert len(res3) == 0
@pytest.mark.bdb
def test_delete_many_unspent_outputs(b, utxoset):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
unspent_outputs, utxo_collection = utxoset
delete_res = b.delete_unspent_outputs(*unspent_outputs[::2])
if not isinstance(b.connection, TarantoolDBConnection):
assert len(list(delete_res)) == 2
assert utxo_collection.count_documents(
{'$or': [
{'transaction_id': 'a', 'output_index': 0},
{'transaction_id': 'b', 'output_index': 0},
]}
) == 0
assert utxo_collection.count_documents(
{'transaction_id': 'a', 'output_index': 1}) == 1
else: # TODO It looks ugly because query.get_unspent_outputs function, has not yet implemented query parameter.
utx_space = b.connection.get_space("utxos")
res1 = utx_space.select(['a', 0], index="id_search").data
res2 = utx_space.select(['b', 0], index="id_search").data
assert len(res1) + len(res2) == 0
res3 = utx_space.select([], index="id_search").data
assert len(res3) == 1
@pytest.mark.bdb
def test_store_zero_unspent_output(b, utxo_collection):
num_rows_before_operation = utxo_collection.select().rowcount
res = b.store_unspent_outputs()
num_rows_after_operation = utxo_collection.select().rowcount
assert res is None
assert num_rows_before_operation == num_rows_after_operation
@pytest.mark.bdb
def test_store_one_unspent_output(b, unspent_output_1, utxo_collection):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
res = b.store_unspent_outputs(unspent_output_1)
if not isinstance(b.connection, TarantoolDBConnection):
assert res.acknowledged
assert len(list(res)) == 1
assert utxo_collection.count_documents(
{'transaction_id': unspent_output_1['transaction_id'],
'output_index': unspent_output_1['output_index']}
) == 1
else:
utx_space = b.connection.get_space("utxos")
res = utx_space.select([unspent_output_1["transaction_id"], unspent_output_1["output_index"]],
index="id_search")
assert len(res.data) == 1
@pytest.mark.bdb
def test_store_many_unspent_outputs(b, unspent_outputs, utxo_collection):
from planetmint.backend.tarantool.connection import TarantoolDBConnection
res = b.store_unspent_outputs(*unspent_outputs)
if not isinstance(b.connection, TarantoolDBConnection):
assert res.acknowledged
assert len(list(res)) == 3
assert utxo_collection.count_documents(
{'transaction_id': unspent_outputs[0]['transaction_id']}
) == 3
else:
utxo_space = b.connection.get_space("utxos") # .select([], index="transaction_search").data
res = utxo_space.select([unspent_outputs[0]["transaction_id"]], index="transaction_search")
assert len(res.data) == 3
def test_get_utxoset_merkle_root_when_no_utxo(b):
assert b.get_utxoset_merkle_root() == sha3_256(b'').hexdigest()
@pytest.mark.bdb
@pytest.mark.usefixture('utxoset')
def test_get_utxoset_merkle_root(b, utxoset):
expected_merkle_root = (
'86d311c03115bf4d287f8449ca5828505432d69b82762d47077b1c00fe426eac')
merkle_root = b.get_utxoset_merkle_root()
assert merkle_root == expected_merkle_root
@pytest.mark.bdb
def test_get_spent_transaction_critical_double_spend(b, alice, bob, carol):
from planetmint.exceptions import CriticalDoubleSpend
from planetmint.transactions.common.exceptions import DoubleSpend
asset = {'test': 'asset'}
tx = Create.generate([alice.public_key],
[([alice.public_key], 1)],
asset=asset) \
.sign([alice.private_key])
tx_transfer = Transfer.generate(tx.to_inputs(),
[([bob.public_key], 1)],
asset_id=tx.id) \
.sign([alice.private_key])
double_spend = Transfer.generate(tx.to_inputs(),
[([carol.public_key], 1)],
asset_id=tx.id) \
.sign([alice.private_key])
same_input_double_spend = Transfer.generate(tx.to_inputs() + tx.to_inputs(),
[([bob.public_key], 1)],
asset_id=tx.id) \
.sign([alice.private_key])
b.store_bulk_transactions([tx])
with pytest.raises(DoubleSpend):
same_input_double_spend.validate(b)
assert b.get_spent(tx.id, tx_transfer.inputs[0].fulfills.output, [tx_transfer])
with pytest.raises(DoubleSpend):
b.get_spent(tx.id, tx_transfer.inputs[0].fulfills.output,
[tx_transfer, double_spend])
b.store_bulk_transactions([tx_transfer])
with pytest.raises(DoubleSpend):
b.get_spent(tx.id, tx_transfer.inputs[0].fulfills.output, [double_spend])
b.store_bulk_transactions([double_spend])
with pytest.raises(CriticalDoubleSpend):
b.get_spent(tx.id, tx_transfer.inputs[0].fulfills.output)
def test_validation_with_transaction_buffer(b):
from planetmint.transactions.common.crypto import generate_key_pair
priv_key, pub_key = generate_key_pair()
create_tx = Create.generate([pub_key], [([pub_key], 10)]).sign([priv_key])
transfer_tx = Transfer.generate(create_tx.to_inputs(),
[([pub_key], 10)],
asset_id=create_tx.id).sign([priv_key])
double_spend = Transfer.generate(create_tx.to_inputs(),
[([pub_key], 10)],
asset_id=create_tx.id).sign([priv_key])
assert b.is_valid_transaction(create_tx)
assert b.is_valid_transaction(transfer_tx, [create_tx])
assert not b.is_valid_transaction(create_tx, [create_tx])
assert not b.is_valid_transaction(transfer_tx, [create_tx, transfer_tx])
assert not b.is_valid_transaction(double_spend, [create_tx, transfer_tx])
@pytest.mark.bdb
def test_migrate_abci_chain_yields_on_genesis(b):
b.migrate_abci_chain()
latest_chain = b.get_latest_abci_chain()
assert latest_chain is None
@pytest.mark.bdb
@pytest.mark.parametrize('chain,block_height,expected', [
(
(1, 'chain-XYZ', True),
4,
{'height': 5, 'chain_id': 'chain-XYZ-migrated-at-height-4',
'is_synced': False},
),
(
(5, 'chain-XYZ-migrated-at-height-4', True),
13,
{'height': 14, 'chain_id': 'chain-XYZ-migrated-at-height-13',
'is_synced': False},
),
])
def test_migrate_abci_chain_generates_new_chains(b, chain, block_height,
expected):
b.store_abci_chain(*chain)
b.store_block(Block(app_hash='', height=block_height,
transactions=[])._asdict())
b.migrate_abci_chain()
latest_chain = b.get_latest_abci_chain()
assert latest_chain == expected
@pytest.mark.bdb
def test_get_spent_key_order(b, user_pk, user_sk, user2_pk, user2_sk):
from planetmint import backend
from planetmint.transactions.common.crypto import generate_key_pair
from planetmint.transactions.common.exceptions import DoubleSpend
alice = generate_key_pair()
bob = generate_key_pair()
tx1 = Create.generate([user_pk],
[([alice.public_key], 3), ([user_pk], 2)],
asset=None) \
.sign([user_sk])
b.store_bulk_transactions([tx1])
inputs = tx1.to_inputs()
tx2 = Transfer.generate([inputs[1]], [([user2_pk], 2)], tx1.id).sign([user_sk])
assert tx2.validate(b)
tx2_dict = tx2.to_dict()
fulfills = tx2_dict['inputs'][0]['fulfills']
tx2_dict['inputs'][0]['fulfills'] = {'output_index': fulfills['output_index'],
'transaction_id': fulfills['transaction_id']}
backend.query.store_transactions(b.connection, [tx2_dict])
tx3 = Transfer.generate([inputs[1]], [([bob.public_key], 2)], tx1.id).sign([user_sk])
with pytest.raises(DoubleSpend):
tx3.validate(b)