Changelog
What's new
v0.6.0
Breaking changes
See upgrade guide.
- Add new
State.STF
andState.Hook
static methods to define STFs and Hooks. - Remove
ActionSchema
. Input schemas are now defined directly inside the STFs. - Action signatures are now enforced over both STF name and inputs, as opposed to inputs only earlier.
Bug Fixes
- Fix a bug where if a custom sequencer strategy were to discard actions, they would get removed from the action pool. Such discarded actions, if any, are now re-enqueued to the front of the action pool.
Improvements
- Add
sdkVersion
field toExternalConfig
. - Expose
ChainData
ingetOrderedActions
method of a sequencer strategy for increased context.
Other changes
- Updates in CLI
v0.1.8
, ESLint Pluginv0.1.2
and Playground for the above breaking changes. (Use latest for both for compatibility)
v0.5.5
Breaking changes
- The
getOrderedActions
method of a sequencer strategy now accepts a list of actions as aReadonly<AcknowledgedAction[]>
type and is supposed only to return the ordered list of action hashes as opposed toAction
objects earlier.
Bug Fixes
- Fix BigInt handling for PostgreSQL.
Improvements
- Enable WAL for SQLite. This enables better concurrency between readers and writers.
- Optimized execution time by removing duplicate calculation of state root before and after applying all of the block's actions.
- Enforce max size on action's payload during submission (~128kb). This limit is also enforced when collecting actions for block building.
Other changes
- Bumps dependencies version to address high-security vulnerabilities
CLI v0.1.6
- Remove the
add hook
command. - Perform lint checks in
compile
command before building Wasm. This makes use of@stackr/eslint-plugin
, an ESLint plugin with few rules to prevent devs from adding non-deterministic code in transition functions.
CLI v0.1.5
- The EIP-712 domain for the app is now injected into the
stf.wasm
. - Outputs the actual error message if any step in
compile
(ordeploy
) command fails. - Fixes reading of leaf-level shorthand property assingments in
stackr.config.ts
. - Fixes using the
deploymentFile
property fromstackr.config.ts
for deployment file name if specified (defaults todeployment.json
).
v0.5.4 (and CLI v0.1.4)
- Sandbox mode now uses Sepolia's Chain ID (
11155111
) for faster testing. - Clear type hint for arguments of
submitAction
method. - [CLI] Default project READMEs updated with directory tree explanation, docker commands to load
.env
and more.
v0.5.3
Features / Improvements
- Change datatype of
msgSender
andsignature
fields tostring
everywhere (such asSTF
args andActionParams
interface).
Bug Fixes
- Fix ordering of properties in
Domain
type returned fromMicroRollupResponse.config.domain
. - Fix a bug where the L1 listener would at times run into
"filter not found"
error.
v0.5.2 (and CLI v0.1.2)
Breaking Changes
- Revamp the fields in
StackrConfig
and arguments toMicroRollup
constructor. See upgrade guide. - Remove
previousStateRoot
andnewStateRoot
fields fromExecutorEvents.EXECUTE_ACTION
event payload (ExecuteActionEventArgs
).
Features / Improvements
- Micro-rollups can now be ran in "Sandbox" mode, without registration. The new config changes removes dependencies on
deployment.json
andstackrApp
fields. - Expose
emit
in block hooks as well (previously it was available only in STFs). Learn more. - Add ability to unsubscribe or inspect/list active listeners to MRU events.
- Perform C2, C3A and C3B syncs for stale blocks on MRU start-up. This is useful to quickly sync latest states if you re-run the MRU after some downtime.
- Add
previousState
,previousStateRoot
andexecutionHooksLogs
fields toExecutorEvents.EXECUTE_BLOCK
event payload (ExecuteBlockEventArgs
). - The
sequencer.tick()
method exposed inMicroRollupResponse
now returns a boolean value indicating whether a new block was sequenced or not. - [CLI] New
verify
command: Verify that the source state machine binary matches with the registered binary on AppInbox. Learn more.
Bug Fixes
- Fixes a bug where it was possible to force create an empty block by returning an empty list of actions from sequencer strategy.
- [CLI] Registering app subsequently won't fail if hash values match.
- [Playground] Fix state rendering for non-JSON state.
v0.5.1 (and CLI v0.1.1)
- [SDK] fix: get missing
block.batchInfo
fromactions.query()
- [CLI] feat: Add Windows support for
stackr
CLI commands and improve error handling. - [CLI] feat: add
--envFile
flag to all commands to load environment variables from a different file than.env
v0.5.0 (and CLI v0.1.0)
Upgrade guide: here.
Breaking Changes
- Blocks are now rolled up into batches by Vulcan every some fixed interval. Therefore, C3A and above confirmation levels are now received on the batch level from Vulcan and L1. Learn more.
- State Updates are now stored on the Block level and not Action level. In case of a chain revert, the state reverts to the last block having status equal to or higher than
Sequenced
. - Renamed
batchSize
andbatchTime
fields inStackrConfig
toblockSize
andblockTime
respectively.
Features / Improvements
- Pre and post Block execution hooks. Learn more.
- Ability to create empty blocks by setting
sequencer.enableEmptyBlocks
totrue
inStackrConfig
. - Add
logs
anderrors
fields toActionExecutionStatusEventArgs
interface. - Make
syncer.slotTime
an optional field (inStackrConfig
) having a default value ofmax(1000, blockTime)
ms. If provided value is less than1000
ms, it defaults tomax(1000, blockTime)
ms too. - Add
C1X
as a new action confirmation level that represents failed execution. - [CLI] Use dynamic linking for reduced Wasm binary size.
Bug Fixes
- Prevent concurrent sequencer ticks.
- Prevent concurrent Vulcan block submission ticks.
- Fix some types not being exported correctly from the build.
v0.4.3
- [SDK] On MRU bootup, if SDK version does not meet Vulcan's minimum SDK supported version requirement then the latest state is dumped in a JSON file. This is useful to restore state in a new MRU deployment.
v0.4.2 (and CLI v0.0.20)
Features
- [SDK] Expose
emit
method in STF that can be used to record custom logs. Learn more. - [SDK] Add fields
logs
anderrors
toSerializedAction
. - [SDK] Expose
waitFor
method in theSerializedAcknowledgement
object returned fromsubmitAction
.
Improvements
- [CLI] Minified bundled JS file to optimize Wasm binary size.
- [SDK] Removed redundant state computation to optimize Wasm execution.
v0.2.18-alpha to v0.4.1, CLI v0.0.19 and more
SDK
Breaking Changes
- Consolidate BlockEntity boolean fields into status
- Merged the boolean fields
isAcknowledgedByVulcan
,isFinalized
,isRejected
,isSubmitting
intoBlockStatus
itself. - Added
Proposed
,Submitting
andRejected
toBlockStatus
. - Change
BlockStatus.Unknown
->BlockStatus.Proposed
.
Features
- feat:
C3B
confirmation now comes on Consensus Layer finalization - feat: Prune
state_updates
for old finalized blocks- Remove all the state updates for actions in the finalized block once it receives C3B. This makes the datastore lighter.
- feat: Store
fuelConsumed
in DB along with BlockData - feat: store
l1BlockNumber
and use it for query while doing C3B finalization - feat: add
Block
object (containing height, timestamp and parentHash) in STF - feat: new Bridge plugin
- feat: expose
actions.query
in MicroRollupResponse
Other changes
- feat: store & send
l1Metadata
with block - feat:
positionInBlock
for actions - feat: emit
ChainEvents.REORG
event - feat: Support new Block Status Response
- feat: check
minSupportedSDKVersion
from Vulcan Healthcheck - perf: optimizations for fetch actions & acks
- fix: [PLAYGROUND] remove 404 handler
- fix: Respect logLevel for playground plugins logs
- fix: use
ZeroHash
as parentHash of first block - fix: use
stfSchemaMap
to validate actions as per schema based on defined Transition functions - fix: remove
l1RPC
from playground config - fix: create partial block in DB & create one block at a time.
- fix: backfill pending actions from DB to pool on bootup
- fix: execute & sequence unfinalized blocks on bootup
- fix: sync missed BlockSubmitted L1 events on bootup
- fix: State revert to Genesis in case of first action getting rejected [BUG]
- fix: await for
advanceActionExecution
and then enqueue [BUG] - fix: validate genesis state and getRootHash at MRU init
- refactor: Remove internal Datastore
- refactor: getBlockByActionHash
- chore: add local server link in playground logs
- chore: add Bytes32 to Solidity type
- chore: add lint rule for no-floating-promises and all occurrences of no-floating-promises
- test:
BlockService.updateBlockState
and few more
CLI
- feat: Support default export and declaration export for State Machines
- feat: Update datastore in config & fixes in query config
- feat: [COMMAND]
transfer-ownership
along with--privateKey
support - feat: add
--privateKey
flag support for forregister
anddeploy
- feat: [COMMAND]
add <entity> <address>
changesadd-bridge
toadd bridge
- docs: Add docker instructions in README
- fix: handle quote in
.env
values - fix: handle errors globally
- fix: use
process.env.DB_URI
as default - fix: don't ask if when no database
go-daash
go-daash
Newv0.2.0
release!- BlobstreamX integration by @0xRampey in #8
- VectorX integration by @0xRampey in #13.
- Refactor of DA interface by @0xRampey in #13.
Full Changelog: v0.1.7...v0.2.0
v0.2.12-alpha to v0.2.17-alpha
New Features
- [SDK] Playground Plugin
- Ability to add
custom
endpoints - Function to interact with Reducers using selected actions.
- Configurable Port for playground & Link in terminal to directly open and connect Playground to your MRU
- Ability to add
- [CLI] Use App Registration Fee from the Contract for the Operator
- [CLI/SDK] Add support for
mariadb
andmysql
- [CLI] Remove the existing DataStore on
stack register
- [VULCAN] Support new
Beta
contracts - [VULCAN] Interact with Router contract for block submission
- [VULCAN] Honouring Operator's configured
preferredDA
before trying fallback DAs. - [VULCAN] Monitoring Setup for Unified MRU Ecosystem View and Metrics.
Improvements
- [VULCAN] Pre-deployment Validation of on-chain hashes for Genesis State and WASM Binary
- [SDK] Simplified State structure by dropping
clone
method from requirement and making WrappedState optional for trivial states. - [SDK] Type Safety on inputs in STF by adding
InputType
as optional second param toSTF<A, B>
type. - [CLI] New Templates added for initialising a Micro-rollup.
- [CLI ]initialise projects with basic
README.md
- [CLI] Add
chainId
todeployment.json
making it easier for user to get Chain Information for Signing Domain - [CLI] Clean-up interim build files in process of making State Machine WASM
- [SDK] Take
stateMachines
in MRU constructor. - [SDK] Take
preferredDA
in Config. - [SDK] Utils
- Solidity-like
REQUIRE
function
- Solidity-like
Fixes
- [SDK] Fix duplication batch submission to Vulcan incase of high response times.
- [CLI] Sanitise URLs and payload before sending deployment requests to Parent Chain and Vulcan.
- [CLI] Handle Registration with
falsy
Genesis states. - [SDK] Initialisation of Parent Chain listeners in
sandbox
Mode. [Lazy Initialisation] - [SDK] Serialisation of
bigint
entities tonumber
before sending it in batch to Vulcan. - [VULCAN] Compare
primitve
andnon-primitive
Genesis States separately, to avoid serialisation causing validation failures.
v0.2.4-alpha to v0.2.11-alpha
New Features
- [SDK] Add Playground plugin
- [SDK] Emit Playground events
- [CLI] Brand new CLI
- [SDK] Separate Block Builder and Proposer
- [SDK] Add Builder signature in Block to support external Block builders
- [SDK] Add MRU shutdown within app
- [SDK] Add HTTP and WS server for playground
- [SDK] Handle Vulcan rejection - C2X
- [SDK] Add executionStatus for actions to block
- [SDK] Remove StateInput type from MRU
Improvements
- [SDK] Clean execution model
- [CLI/SDK] **Allow state machine to gracefully handle error for reverted Action
- [VULCAN] Handle incorrect msgSender
- [VULCAN] Handle C1 reverted actions gracefully
- [SDK] Allow default block building strategy
- [SDK] Better debug log response from Vulcan
- [CLI] Better Errors for config and on-chain contract calls
Fixes
- [SDK] Fix C2 confirmation status receiving
- [SDK] Sandbox database cleanup on exit
- [SDK] Send BlockData in ProposeBlock
- [SDK] Fix MRU re-initialization bug
- [CLI] pre-install deps & DB drivers as per user's choice
- [CLI] Mute console.logs from compiled binary
v0.2.1-alpha to v0.2.4-alpha
New Features
- Allow multiple State Transition Functions
- Added Plugins framework to build extensions/plugins on top of the SDK
- New Error Framework
- Allow Lazy addition of State Machines & Sequencer Strategies.
- Store granular state updates per block
Improvements
- Reduced package bundle size by ~60%
- Give State Transition Function access to
msgSender
andsignature
. - Reduce the number of parameters in MRU constructor, just necessary config to start with.
- Allow dynamic store config to be able to connect with PostgreSQL alongside SQLite.
- Change MRU interface and expose more utility functions on top level
Fixes
- Backfill Rollup state machine in case servers crashes or restarts.
- Reduce the number of parameters in MRU constructor just necessary config to start with.
- Keep failed actions in
batch
- Better serialization for data like Actions, Acknowledgements & Blocks.
- Improve blockhash attributes
- Prevent replay attacks.
- Separate flags control L1 Syncer, Vulcan Syncer and Block producer