- Alter column type for
merkle_radix_leaf.addressin SQLite. This fixes a bug where address that were valid numeric values would have their leading 0s removed (as expressed in the hex string of the address). - Move
CommandTransactionBuilderfromtransact::families::command::workloadtotransact::families::command. The original version remains and is now deprecated. - Update rustdoc for transact::state::merkle module with more detail
- Update rustdoc for transact::state::Prune trait for clarity
- Update
SqliteMerkleRadixStorewith exclusive write. This updatesSqliteMerkleRadixStoresuch 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
commandandsmallbank(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_idsfromVec<Vec<u8>>toVec<String>to make all header signature fields consistently typed. - Change
TransactionHeader::dependenciesfromVec<Vec<u8>>toVec<String>to make all header signature fields consistently typed. - Change
HashMethod:SHA512to 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::InternalErrorvariant, wrappingtransact::error::InternalError. - Add
"sabre-compat"feature for writing wasm-compatible smart contracts. - Add the smallbank transaction handler.
- Add
xo,smallbankandcommandimplementations of theTransactionWorkloadandBatchWorkloadtraits. - Remove dependency on openssl.
- Add a CLI command named
commandthat has three subcommandsset-state,get-state, andshow-statewhich can be used to interact with the command smart contract. - Add a
playlistCLI command that has four subcommandscreate,process,batch, andsubmitwhich 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
workloadCLI 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
MerkleRadixStoreand 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_treestoMerkleRadixStore. This allows the user to list the available trees stored in the underlying store.
- Add
delete_treetoSqlMerkleState. 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
OverlayReaderand-WriterwithMerkleRadixStore. -
Move operations, schema, and models to
storemodule. -
Merge
insert_nodeandupdate_change_logoperations into singlewrite_changesoperation. -
Separate all Postgres- and SQLite-specific code into respective
postgresandsqlitesubmodules, 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
Backendinstance via theMigrationManagertrait.
- The
"state-merkle-leaf-reader"feature has been stabilized by being removed. This makes theMerkleLeafReadertrait 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_derivewill have the macros available. -
Re-export
transact::state::merkle::kv::MerkelLeafIteratorin 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
InvalidStateErrorwhen aStateDatabaseError::NotFoundvariant is encountered during leaf iteration when implemented onkv::MerkleState. -
Stabilize
"state-merkle-leaf-reader"feature by removing it. This makes theMerkleLeafReadertrait part of the standard, stable API.
- Remove
StateDatabaseError::InternalErrorvariant. This change was not backwards compatible.
- Experimental support for merkle state stored in Postgres and SQLite databases.
This is available via new struct
SqlMerkleStateand activated by the features"state-merkle-sql"with"postgres"and/or"sqlite"enabled for either database.
-
Move existing key-value
MerkleStateimplementation totransact::state::merkle::kv. This implementation is backed by the key-valueDatabaseabstraction. It is re-exported in thetransact::state::merklemodule for backwards compatibility. -
Add experimental
SqlMerkelStateavailable 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
semverdependency from0.9to1.0. - Fix various clippy errors that were introduced with the release of Rust 1.50.
- Update
protobufdependency from2.0to2.19.
- Update the
cylinderdependency of libtransact and thesimple_xoexample 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::MerkleRadixTreewhere 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
SerialSchedulerwith call ordering ofcancelandfinalize. These methods can be called in either order.
- Update the
sawtooth-sdkversion to 0.5. The sawtooth-sdk is used for thesawtooth-compatfeature.
- The
contract-archivefeature has been stabilized. This feature guards the smart contract archive (scar) functionality. - The
transact::signingmodule has been replaced by thecylinderlibrary crate.
- Update the
sawtooth-sdkandsawtooth-xodependencies to0.4. - Add a
clone_boxmethod toContextLifecyclethat enables the trait to be clone-able. - Add the
ExecutionTaskSubmitterfor 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_transactionfunction to take a signer for signing the transaction. - Refactor the
XoTransactionWorkloadandXoBatchWorkloadto take optional workload seeds and signers.
- Add the
SchedulerFactorytrait for creating generic schedulers, along with implementations forMultiSchedulerandSerialScheduler. - Require implementations of the
Schedulertrait to have theSendmarker trait. - Change the
Scheduler::cancelmethod to abort and return any in-progress batches. - Change the
Scheduler::cancelmethod to send aNoneexecution 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
Noneexecution 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
SqliteDatabaseBuilderto 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::workloadmodule publicly available with the experimental feature "workload". - Make the xo workload tools publicly available with the
transact::families::xomodule and the experimental feature "family-xo". - Make the
CommandTransactionHandlerand associated methods for the command transaction family publicly available with thetransact::families::commandmodule 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
TryFromimplementations to convertTransactionResultenums andTransactionReceiptstructs intoStateChangestructs.
- Update the
SmartContractArchive::from_scar_fileconstructor 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
SmartContractArchivewith 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
TransactionBuilderintoBatchBuilderfor easier batch building - Support converting a
BatchListto 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