Skip to content

Kwil v0.9

Brennan Lamey edited this page Aug 27, 2024 · 4 revisions

Due to increased useage of the preview branch, we are redefining the v0.9 release scope to allow us to get preview features on a stable release. We are removing the SQL and Procedure pricing from the previous scope. The new scope is below.

Major Features

Long-Running Migrations

v0.9 adds a feature for long-running network migrations, which allows networks to release breaking consensus changes with zero downtime. This allows a new network, based off of the old network, to run while the old network begins shutting down. It uses a conflict resolution mechanism (see option b) to merge state from the old network to the new network. This might present a security issue to some networks, and thus may not be suitable for some use cases.

Peer Filtering

v0.9 adds peer filtering, which gives node operators fine-grained control on who can sync as a peer without the need to set up a VPC. Nodes can be configured to only allow peers that are (any of the following):

  • network validators
  • a candidate for being a network validator that the node has voted in favor of.
  • on a preconfigured whitelist
  • manually added via kwil-admin while the node is running

Kwil Testing Framework

v0.9 adds a framework for testing Kuneiform schemas and precompiles. It allows users to write tests as JSON and run them using kwil-cli. Alternatively, users can run the tests in Go with custom functions that give more fine-grained control over the test cases.

Hook Extensions

v0.9 adds a new type of extension: hooks. Currently, there are two hooks:

  • Genesis Hooks: a function that is called exactly once in the lifetime of a network at the end of the genesis block.
  • End Block Hooks: a function that is called at the end of each block.

While the use cases for these are wide-ranging, the primary use case is to allow for Kuneiform schemas to be included as part of a network's core functionality (e.g. to be written to by an oracle).

Minor Features and Developments

  • A Kuneiform language server Kuneiform extension
  • Metrics measuring network throughput for various transaction and block sizes
  • Bug fixes for decimal and uint256 encoding and marshalling/unmarshalling
  • Kuneiform bug fixes and improvements:
    • added parse_unix_timestamp and format_unix_timestamp functions
    • added a notice function for logging within a procedure
    • added a generate_dbid function for generating dbids within a procedure
    • added @authenticator contextual variable which says the authenticator type that was used
    • added @foreign_caller contextual variable which says which schema called the current procedure (if any)
    • added @block_timestamp which includes the timestamp provided by the CometBFT block proposer
    • Changed Kuneiform operator precedence to more intuitively match other languages
    • blob columns support min_len and max_len
    • uint256 and decimal columns support min and max
    • Foreign key violations return position info
  • [removed] REST endpoints