- Update
SqliteMerkleRadixStore
with exclusive write. This updatesSqliteMerkleRadixStore
such that that all writes are exclusive, but multiple readers will be possible. This mitigates bugs that may occur when concurrent writes are allowed. - Add
From<Arc<RwLock<Pool...>>>
implementation forSqliteBackend
.
- Add workload CLI tool. This CLI tool currently supports submitting
command
andsmallbank
(experimentally) transactions at configurable rates and durations. - Add finer-grained features to allow for more flexible library usage. With these new features, library consumers don't necessarily need to pull in all the modules when using Transact in their applications.
- Add smallbank smart contract example. This contract has been ported from the sawtooth-rust-sdk.
- Add command smart contract.
- Implement
ContextManager::drop_context
, where contexts are reference counted. - Update serial scheduler to drop contexts where appropriate.
- Change
BatchHeader::transaction_ids
fromVec<Vec<u8>>
toVec<String>
to make all header signature fields consistently typed. - Change
TransactionHeader::dependencies
fromVec<Vec<u8>>
toVec<String>
to make all header signature fields consistently typed. - Change
HashMethod:SHA512
to HashMethod::Sha512, following the recommended naming conventions. - Drop experimental feature
"sqlite-db"
, in favor of"state-merkle-sql"
and"sqlite"
. - Drop experimental feature
"redis-db"
, as Redis does not meet the transactional requirements of the Merkle State. - Add
transact::state::merkle::kv::StateDatabaseError::InternalError
variant, wrappingtransact::error::InternalError
. - Add
"sabre-compat"
feature for writing wasm-compatible smart contracts. - Add the smallbank transaction handler.
- Add
xo
,smallbank
andcommand
implementations of theTransactionWorkload
andBatchWorkload
traits. - Remove dependency on openssl.
- Add a CLI command named
command
that has three subcommandsset-state
,get-state
, andshow-state
which can be used to interact with the command smart contract. - Add a
playlist
CLI command that has four subcommandscreate
,process
,batch
, andsubmit
which can be used to generate files of pregenerated payloads, transactions, and batches. The file containing the batches can then be submitted against a distributed ledger. - Add a
workload
CLI command which can be used to submit a workload against a distributed ledger.
- Add a sabre-compatible smallbank smart contract.
- Add a sabre-compatible command smart contract.
- Add an example application that submits command transactions directly to sabre.
-
Make
MerkleRadixStore
and the SQL implementation public. This allows library consumers access to the lower-level APIs for interacting with the merkle-radix tree storage layer. -
Add
list_trees
toMerkleRadixStore
. This allows the user to list the available trees stored in the underlying store.
- Add
delete_tree
toSqlMerkleState
. This allows the entire tree to be deleted, include all state root hashes and leaf data associated with that tree.
-
Limit query recursion to single tree. This fixes an issue where queries in a database with trees with identical structure would cause an infinite loop in SQLite.
-
Use SQLite immediate transactions. This improves multi-threaded support.
-
Update SQLite PRAGMA for the WAL journal mode. This improves multi-threaded support.
-
Remove manual ID sequences for Postgres. This improves multi-thread support.
-
Update defaults for SQLite "synchronous" PRAGMA. This changes the default "synchronous" PRAGMA setting to explicitly be "Normal" or "Full", if the WAL journal mode is enabled.
- The
"state-merkle-sql"
feature has been stabilized, along with the"postgres"
and"sqlite"
features.
-
Stabilize
"state-merkle-sql"
by moving it to the"stable"
feature group. -
Stabilize
"postgres"
by moving it to the"stable"
feature group. -
Stabilize
"sqlite"
by moving it to the"stable"
feature group. -
Replace
OverlayReader
and-Writer
withMerkleRadixStore
. -
Move operations, schema, and models to
store
module. -
Merge
insert_node
andupdate_change_log
operations into singlewrite_changes
operation. -
Separate all Postgres- and SQLite-specific code into respective
postgres
andsqlite
submodules, relative to the parent module. -
Allow migrations to be run against a single connection. This allows migrations to be run in an instance where the caller does not have access to a connection pool or the connection string and, therefore, cannot use a
Backend
instance via theMigrationManager
trait.
- The
"state-merkle-leaf-reader"
feature has been stabilized by being removed. This makes theMerkleLeafReader
trait part of the standard, stable API.
-
Generalize the feature guard over
serde_derive
. This change removes the possibility of the macros being unavailable if a specific libtransact feature is not enabled. Now any feature that depends onserde_derive
will have the macros available. -
Re-export
transact::state::merkle::kv::MerkelLeafIterator
in the parent module for backwards-compatibility. This type was previously part of the public API. -
Soft-deprecate the type
transact::state::merkle::kv::MerkelLeafIterator
, as this type should not be part of the public API, and may be removed in a future release. -
Return
InvalidStateError
when aStateDatabaseError::NotFound
variant is encountered during leaf iteration when implemented onkv::MerkleState
. -
Stabilize
"state-merkle-leaf-reader"
feature by removing it. This makes theMerkleLeafReader
trait part of the standard, stable API.
- Remove
StateDatabaseError::InternalError
variant. This change was not backwards compatible.
- Experimental support for merkle state stored in Postgres and SQLite databases.
This is available via new struct
SqlMerkleState
and activated by the features"state-merkle-sql"
with"postgres"
and/or"sqlite"
enabled for either database.
-
Move existing key-value
MerkleState
implementation totransact::state::merkle::kv
. This implementation is backed by the key-valueDatabase
abstraction. It is re-exported in thetransact::state::merkle
module for backwards compatibility. -
Add experimental
SqlMerkelState
available in the moduletransact::state::merkle::sql
. This is activated by the features"state-merkle-sql"
with"postgres"
and/or"sqlite"
enabled for either database. -
Add
transact::error::InternalError
, copied from the splinter library. -
Add
transact::error::InvalidStateError
, copied from the splinter library. -
Expand SQLite journal configuration in experimental
SqliteDatabase
- Update
semver
dependency from0.9
to1.0
. - Fix various clippy errors that were introduced with the release of Rust 1.50.
- Update
protobuf
dependency from2.0
to2.19
.
- Update the
cylinder
dependency of libtransact and thesimple_xo
example to version0.2
- Add a 32bit-usize-friendly lmdb DEFAULT_SIZE value
- Fix a serial scheduler execution task iterator test that was failing due to timing issues.
- Update the executor's internal thread to shutdown the fan-out threads after its main loop has terminated to ensure they get shut down properly every time.
- Fix a bug where the task readers in the executor were always being given an index of 0.
- Add better management of task readers to the executor to enable shutting down the task readers when they have completed. Previously, these task readers were not being cleaned up, which leaked memory.
- Fix a bug in the serial scheduler's shutdown process where the scheduler's core thread did not always send a message to terminate the execution task iterator.
- Update the serial scheduler's execution task iterator to log an error whenever the scheduler's core thread shuts down without notifying the iterator.
- Fix an issue in
state::merkle::MerkleRadixTree
where an empty set of state changes would produce an empty state id. This has been updated to return the current state root hash. - Fix two issues in the
SerialScheduler
with call ordering ofcancel
andfinalize
. These methods can be called in either order.
- Update the
sawtooth-sdk
version to 0.5. The sawtooth-sdk is used for thesawtooth-compat
feature.
- The
contract-archive
feature has been stabilized. This feature guards the smart contract archive (scar) functionality. - The
transact::signing
module has been replaced by thecylinder
library crate.
- Update the
sawtooth-sdk
andsawtooth-xo
dependencies to0.4
. - Add a
clone_box
method toContextLifecycle
that enables the trait to be clone-able. - Add the
ExecutionTaskSubmitter
for submitting tasks to the executor. This struct is thread-safe and allows a single executor to be used across threads. - Update the
families::command::make_command_transaction
function to take a signer for signing the transaction. - Refactor the
XoTransactionWorkload
andXoBatchWorkload
to take optional workload seeds and signers.
- Add the
SchedulerFactory
trait for creating generic schedulers, along with implementations forMultiScheduler
andSerialScheduler
. - Require implementations of the
Scheduler
trait to have theSend
marker trait. - Change the
Scheduler::cancel
method to abort and return any in-progress batches. - Change the
Scheduler::cancel
method to send aNone
execution result if the scheduler is finished. - Update all schedulers to shut themselves down when they are finished and have no more batches to execute.
- Fix a bug in the serial scheduler where a
None
execution result was not sent when the scheduler was finalized with a non-empty batch queue.
- Enable nightly builds to catch any breaking changes in dependencies or upstream tools.
- Add a field to the
SqliteDatabaseBuilder
to modify the "synchronous" setting via PRAGMA statement. This setting provides different guarantees of data safety for situations such as OS crash or power loss. - Make the
transact::workload
module publicly available with the experimental feature "workload". - Make the xo workload tools publicly available with the
transact::families::xo
module and the experimental feature "family-xo". - Make the
CommandTransactionHandler
and associated methods for the command transaction family publicly available with thetransact::families::command
module and the experimental feature "family-command".
- Add a justfile to enable running
just build
,just lint
, andjust test
- Allow configuring "Write-Ahead Logging" (WAL) journal mode for SQLite databases. This mode offers significant performance improvements over the standard atomic commit and rollback mode.
- Add
TryFrom
implementations to convertTransactionResult
enums andTransactionReceipt
structs intoStateChange
structs.
- Update the
SmartContractArchive::from_scar_file
constructor to take multiple search paths for .scar files. - Add a configurable prefix for table names in SQLite databases.
- Enable reading state via the cursor when using the SQLite database writer.
- Enable loading a .scar file into a native
SmartContractArchive
with the experimental feature "contract-archive"
- Add experimental SQLite support for state storage
- Add an executable example using the Addresser trait implementations to generate radix addresses for up to three natural keys
- Add support for storing invalid transaction results as transaction receipts
- Update DatabaseReader trait such that its "get" method returns a result
- Remove change_log from the Merkle state implementation's public API
- Update transaction receipt builder to allow building transaction receipts for invalid transactions.
- Capture invalid transaction results as transaction receipts
- Add all experimental features to the Rust docs
- Add a SQLite-backed implementation of the Database trait behind the experimental feature "sqlite-db"
- Add KeyValueTransactionContext implementation behind the experimental "contract-context-key-value" feature, which uses a key-value state representation
- Update Addresser error messages to be more accurate
- Add more robust validation and error handling within the Addresser trait implementations
- Add experimental "key-value-state" feature
- Add conversion from
TransactionBuilder
intoBatchBuilder
for easier batch building - Support converting a
BatchList
to and from a nativeVec<Batch>
- Add "state-merkle" feature for conditional compilation of the Merkle state implementation
- Fix bug that converted transaction receipt header signatures to hex twice