Commit graph

18 commits

Author SHA1 Message Date
Nathaniel
f9fcffbb4d
Safety Check: Part 2 -- Implement and Integrate Checks
Implement a safety check mechanism on object_database, based on the
safety_check_policy abstract interface. Create two standard
implementations of the safety_check_policy interface, one
(null_safety_check) which allows all modifications unconditionally, and
the other (database_lock_safety_check) which allows modifications only
when unlocked.

Integrate these safety checks into chain::database and plugins, so that
the consensus databases are locked at all times except during core
consensus code pathways. Also ensures that databases are re-locked when
calling code outside of consensus pathways from consensus pathways.

To make this work, it was necessary to move two objects from the
consensus object spaces to a new API object space. The
operation_history_object and account_transaction_history_object were
moved to the API object space, as they are not actually used by
consensus and are maintained by a plugin (which can no longer modify the
consensus object spaces, due to the safety checks).

Finally, add a mechanism to application and chain::database, which
allows the chain to start in "unit testing mode" and allows unchecked
actions upon the database within delimited scopes. This was necessary
because many tests edit the database directly to set up the environment
for their respective tests. This mode is activated by database_fixture so
tests can utilize it conveniently, but it is architecturally difficult to
enable this mode in production, i.e. from a plugin.
2022-03-12 14:04:08 -06:00
Nathan Hourt
c76e1f3157 Toward dynamically reloading contracts...
Add the ability to dynamically unload an auxiliary evaluator (any
evaluator for a given operation type except the first one registered for
that operation type), and as an added convenience, add an idiomatically
consistent way to check if a given index is already registered or not.
2021-11-11 14:27:50 -05:00
Peter Conrad
f25c4f6ae6
Replace fc::uint128 with boost::multiprecision::uint128_t 2020-08-23 14:16:41 -05:00
Peter Conrad
95a5b57c4f Writing the object_database is now almost atomic 2019-09-02 17:19:21 +03:00
Peter Conrad
b71f20e060 Dont leave _data_dir empty if db is locked 2019-09-02 17:19:21 +03:00
Peter Conrad
c8f8f1a44b Fixed lock detection 2019-09-02 17:19:21 +03:00
Peter Conrad
17417037c6 Moved reindex logic into database / chain_database, make use of additional blocks in block_database
Fixed tests wrt db.open
2019-09-02 17:19:21 +03:00
Fabian Schuh
5111084730 [License] Modify cpp and hpp headers to MIT #496 2016-01-07 11:44:52 -05:00
theoreticalbts
d0609e8e74 Update copyright notice for BitShares 2015-10-12 13:48:40 -04:00
theoreticalbts
60f0812de2 Update copyright notice 2015-10-12 13:32:47 -04:00
Daniel Larimer
f7c91be622 fix market history 2015-10-09 16:31:40 -04:00
theoreticalbts
00253b396e object_database.cpp: Don't crash when a bogus type_id is passed 2015-09-29 12:09:43 -04:00
Daniel Larimer
a14500a364 merge from master, clean up test output 2015-06-18 15:40:38 -04:00
Daniel Larimer
ef4ed937cb Fix update_call_order
- redefine price feeds
- clean up unit test spam
2015-06-18 15:17:48 -04:00
Nathan Hourt
9291250214 Issue #52: working my way out of the rabbit hole
Evils abound. And tests still fail.
2015-06-18 15:08:51 -04:00
Daniel Larimer
2724939ffb tests pass again 2015-06-16 18:45:33 -04:00
Daniel Larimer
ca89d5057c remove dependency on level db, bugs left to fix 2015-06-16 15:56:13 -04:00
Nathan Hourt
0a945b0257 Initial commit 2015-06-08 12:36:37 -04:00