title | weight | chapter | pre |
---|---|---|---|
Changelog |
6 |
false |
<b>6. </b> |
Extended the local-tx-submission protocol with a new
EvaluateTx
query which evaluates execution units of scripts present in a transaction. This effectively piggybacks on the Alonzo's tools from the cardano-ledger while providing a more user-friendly interface regarding network parameters. The API offers well-detailed errors and an interface similar to theSubmitTx
. See discussion on #172.New
rewardsProvenance'
query coming as a replacement for the now-deprecatedrewardsProvenance
query. See discussion on #171.
- Support for the new
evaluateTx
query in theTxSubmissionClient
& repl.- Support for the new
rewardsProvenance'
query asrewardsProvenanceNew
in theStateQueryClient
& repl.
Added transaction id as part of the successful response to a
SubmitTx
. While this is technically a breaking-change, it was introduced in a backward-compatible way. Existing applications using the existingSubmitTx
query will see no change and will keep receiving successes as"SubmitSuccessful"
text responses. However, queries which pass transactions using thesubmit
field (instead of the currently expectedbytes
field) will receive, on success, an augmented response which contains a transaction id"SubmitSuccessful": { "txId": "..." }
. See discussion on #174.Improved error reporting for the
SubmitTx
protocol which should gives a little clearer errors for ill-formed transactions.
⚠️ Renamed client'sTxSubmission/errors.ts
intoTxSubmission/submissionErrors.ts
. Similarly, the submission are also now nested under asubmissionErrors
field in theTxSubmission
top-level object.
N/A
New
LocalTxMonitor
support in Ogmios. See The user guide for more details.
⚠️ This new protocol is NOT enabled incardano-node@1.33.*
. Until its inclusion in a next release, a custom build of cardano-node is required to include a more recent version ofouroboros-network
which adds support for that protocol to the Ouroboros' mini-protocols; namely:32af9168
.A version of
cardano-node@1.33.0
patched with the necessary commits can be found at CardanoSolutions/cardano-node@1.33.0+local-tx-monitor.New fields in the health object:
New
ogmios health-check
command, useful to perform simple health check on a running server. For example, to monitor a container via Docker health check mechanism:HEALTHCHECK --interval=10s --timeout=5s --retries=1 CMD /bin/ogmios health-check
Bumped internal dependencies to Cardano's 1.33.* eco-system.
networkSynchronization
andcurrentEra
can benull
when the server isn't connected to a node. #154- The
Metrics
trace is now correctly tagged withMetricsRuntimeStatsDisabled
.- Fixed an issue with the Docker monitoring scripts of cardano-node-ogmios, causing issues on restart. #159
- Relax upper-bound constraint on required node.js engine. This should make it possible to install the TypeScript packages on more recent versions on node.js than the one specified on the repository.
N/A
New state-query
systemStart
to access the blockchain start time (UTC).New state-query
chainTip
to access the blockchain current tip (may slightly differ from theledgerTip
which may be behind catching up).New state-query
blockHeight
to access the blockchain current highest block number (or"origin"
if the chain is just starting).New state-query
eraSummaries
to access all era bounds and slotting parameters details, required for proper slot arithmetic.Log-levels can now be configured per-component. For example, one can decrease the min severity for the health component while keeping the state-query logs at another.
Logs can now be shutdown completely via the special keyword
off
.Static binaries for Linux are now produced by the Nix build and uploaded as build artifacts for the corresponding Github workflow (i.e. Nix).
- Add support for
systemStart
,chainTip
,blockHeight
&eraSummaries
in theclient
andrepl
.
⚠️ RelativeTime
is no-longer serialised as a string (withs
as suffix) but, as an integer representing the number of seconds.
⚠️ Serialised Plutus scripts are now labelled eitherplutus:v1
orplutus:v2
(instead ofplutus
).
⚠️ Some breaking changes in the SubmitTx errors returned by the server for the sake of consistency. All submission errors are now returned as singleton objects within an array. The key of each object indicates the type of error and the value gives additional details about the errors. This is also true for era-mismatch errors. Some errors used to be returned as plain strings, they are now wrapped as singleton object withnull
as a value; this is the case for:
invalidMetadata
mirNegativeTransferNotCurrentlyAllowed
mirProducesNegativeUpdate
mirTransferNotCurrentlyAllowed
missingAtLeastOneInputUtxo
missingCollateralInputs
triesToForgeAda
validationTagMismatch
wrongCertificateType
Upgraded internal dependencies to Cardano eco-system 1.31.0
⚠️ Lovelace
is now a native BigInt.
⚠️ getServerHealth
'sconnection
argument is now wrapped into an object, mapped to the fieldconnection
. (see #135)
⚠️ Replaced schema definitions forHash16
andHash64
with more precise type definitions. For hashes, definitions now follows a conventionDigest[ALGORITHM]::PRE-IMAGE
whereALGORITHM
andPRE-IMAGE
points to the corresponding has algorithm used to hash thePRE-IMAGE
. The length of the digest is given byminLength
andmaxLength
JSON-schema constraints. Consequently, TypeScript types / interfaces generated from the JSON-schema definitions have been altered.
⚠️ Log level severitiescritical
,alert
andemergency
have been removed.error
is now the highest severity.
⚠️ The Nix setup has been highly simplified, resulting in removal of the NixOS services configuration and probably some other stuff.
N / A
- Fixed configuration parsing which would wrongly use Shelley's slots per epoch instead of Byron's. This had an impact on the reported slot number in the chain-sync protocol, where slot numbers would be wrongly offset by
432000
per epoch after the first epoch.
N/A
Enabled Alonzo transaction in the submission protocol (oversight from previous releases). Doing so, explicit compiler warnings have been added to the relevant code to avoid overseeing this in the next upgrade.
Added query response and requests to logs trace, large responses are truncated (e.g. querying the entire UTXO or, informations about all stake pools).
Gracefully handled shutdown and process cleanup on
SIGTERM
.Documented Mary last point to the points of interests for the chain-sync protocol.
Bumped cardano-node's integration to 1.31.0
- The State-Query client can now
release
acquired points to perform queries against the most recent tip (which was also the default when creating a client with no point).
- Some internal rework and cleanup; mostly chasing dangling promises by avoiding attaching even handlers when not needed.
N/A
Generate and store test vectors for various JSON requests and responses. This should ease integration for many clients who seek for good coverage of the server inputs/outputs.
Documented example state queries in the user-guide.
The
ConnectionConfig
has an additional, optional, configuration parametermaxPayload
to configure the maximum allowed message size in bytes. The default is chosen quite large as theutxo
query can result in large payloads.New helpers
isByronEpochBoundaryBlock
andisByronStandardBlock
.
- The
StateQueryClient
now wraps every query in a try/catch to cope with malformed queries leading to clientfault
results from the server.- Type definitions for
QueryResponse[poolIds]
andQueryResponse[poolParameters]
are no longer marked as "optional".- Fixed bug #125 where empty results of
delegationAndRewards
would cause the client to throw an exception.- Handled some floating promises.
N/A
Integrated with the Cardano eco-system corresponding to cardano-node@1.29.0 (Alonzo!) & latest testnet(s).
New
alonzo
block type, with various additions related to Alonzo.New state-queries:
Query Description poolIds
The list of all pool identifiers currently registered and active. poolParameters
Stake pool parameters submitted with registration certificates. poolsRanking
Retrieve stake pools ranking (a.k.a desirabilities). rewardsProvenance
Get details about rewards calculation for the ongoing epoch. Added missing properties in Byron's protocol parameters update. Somehow, an
additionalProperties: true
had slipped through and caused the tests to pass with an incomplete schema.Nested logs are now also structured, in particular those coming from the
Handshake
orTxSubmission
protocols. Before, any message from these layers where actually plain strings with unintelligible gibberish. Now, the submitted transaction payload is shown encoded as hexadecimals and errors are also serialized to json using the same model / codec as the one used for websockets. The handshake is also more verbose now clearly showing what version is being requested and what the node replies / select. All in all, better logs.The Dockerfile now includes a build definition for building
cardano-node
andogmios
into the same image, which is the default and suggested mode of operation. To build an image with only Ogmios, use the build--target ogmios
. Docker Hub now hosts two image repositories:cardanosolutions/cardano-node-ogmios
andcardanosolutions/ogmios
.Docker Hub images are now tagged with a network suffix (e.g.
-mainnet
). In the case of mainnet, the-mainnet
suffix is optional, and points to the same build as the defaults.A new repository for hosting Cardano configurations of various services was created and is now used in Ogmios. Configuration for cardano-node (and therefore Ogmios) or, network genesis can be found in input-output-hk/cardano-configurations. Configurations are updated automatically by a nightly job to be always up-to-date. They can be pulled into projects as git submodules.
New possible errors from the transaction submission (stemming from the Alonzo integration):
collateralHasNonAdaAssets
collateralIsScript
collateralTooSmall
collectErrors
datumsMismatch
executionUnitsTooLarge
extraDataMismatch
extraRedeemers
mirNegativeTransferNotCurrentlyAllowed
mirProducesNegativeUpdate
mirTransferNotCurrentlyAllowed
missingDatumHashesForInputs
missingRequiredDatums
missingRequiredRedeemers
missingRequiredSignatures
outsideForecast
poolMetadataHashTooBig
tooManyCollateralInputs
unspendableDatums
unspendableScriptInputs
validationTagMismatch
Compatibility with aforementioned server additions.
The TypeScript
ChainSyncClient
now implements an in-memory queue to ensurerequestNext
responses are processed sequentially when there are async operations in the message handlers. This behaviour can be bypassed where sequential processsing is not required, by setting the new construction optionsequential
tofalse
.The TypeScript
StateQueryClient
can now re-acquire new points at will, useful for long-running clients for which previously acquired points may expire.The TypeScript client is now fully documented!
⚠️ Theutxo
query can now accept a listTxIn
as argument, and still supports list ofAddress
. Note that lists can't be heterogeneous and it's not possible to mixTxIn
andAddress
.
⚠️ Asset quantities and transaction metadata's integers are now parsed as nativeBigInt
.The
memory
andsteps
JSON representations forprices
are no longer coins, but ratio (represented as strings in the API).The
moveInstantaneousRewards
certificates have a new optional fieldvalue
and not only arewards
map as before. Whenvalue
is present, it signifies that rewards are moved to the other pot.Auxiliary data's
scriptPreImages
in Allegra & Mary has been replaced with a fieldscripts
which has one fieldnative
. The value ofnative
corresponds to what used to be the value ofscriptPreImages
. In Alonzo,scripts
may also have another fieldplutus
with a serialized Plutus script.Transactions witnesses'
address
has been renamed intosignatures
, and the structure of the object has been changed to be a map from public keys to signatures (instead of an object with two fieldkey
&signature
).Transactions witnesses'
script
has been renamed intoscripts
.Transaction submission errors'
networkMismatch
now returns aninvalidEntities
list of object in the form of{ "type": ..., "entity": }
wheretype
is a text tag designating the type of entity for which there is a network identifier mismatch. Values can beaddress
,rewardAccount
and since AlonzotransactionBody
. Theentity
field contains some details specific to the type of entity. Before, it used to be two distinct fieldsinvalidAddresses
andinvalidRewardAccounts
.Empty transaction metadata are no longer materialized by an object with two null fields (
{ "hash": null, "body": null }
). Empty transaction metadata are now equal tonull
.
map
metadatum in transactions' metadata are no longer materialized as a list of list of singleton objects:[[{ "k": ... }, { "v": ... }], ...]
but instead, as a list of object with two fieldsk
andv
:[{ "k": ..., "v": ...}, ...]
. This was an oversight from the encoder which was never intended to end up that way but happened to slip in because the schema for metadatum was not specified / documented (and therefore, also escaped testing). This is now documented properly.The
TxOut
(and thus Utxo) model definitions have been unified and harmonized across all eras. That is, pre-Mary eras now also wrap Ada values in an object with a field"coins": ...
. This reduces the discrepancy between eras for there's now a single TxOut representation valid across all eras. Some fields are however optional and only present in some eras (e.g.datum
starting from Alonzo)
⚠️ State queries (resp. theStateQueryClient
) now automatically runs queries against the last known tip if no explicit point is provided. It used to acquire a point on the first query which would eventually become too old. The behavior is now equivalent to acquiring a new point on every query!
⚠️ SubmitTx
no-longer returns Byron errors. Consequently, submit errors are no longer scoped undererrors.byron
orerrors.shelley
but simplyerrors
.
⚠️ FixedproposedProtocolParameters
query. All fields are actually required AND, more importantly, it can now return either Shelley protocol parameters or, Alonzo protocol parameters.The
ChainSyncClientMessageHandlers
methods now must return a promise.Various reworks and renaming of the TypeScript types
AssetQuantity
is now a nativebigint
- Metadatum's
Int
are now nativebigint
- Type
DelegationsAndRewards
renamed intoDelegationsAndRewardsByAccounts
- Type
DelegationsAndRewards1
renamed intoDelegationsAndRewards
- Type
NonMyopicMemberRewards1
renamed intoNonMyopicMemberRewards
- Type
TxTooLarge1
renamed intoTxTooLarge
- Type
FeeTooSmall1
renamed intoFeeTooSmall
- Type
NetworkMismatch1
renamed intoNetworkMismatch
- Type
Proposal
renamed intoUpdateProposalShelley
- Types
Utxo1
,Utxo2
,UtxoMary
have been unified into a singleUtxo
type. Refer to server breaking changes for details.- Type
Tip
&Point
renamed intoTipOrOrigin
andPointOrOrigin
. As a consequence,Tip1
andPoint1
are now simplyTip
andPoint
.- Many types
NullX
merged into a singleNull
type- Query types have been renamed from
ledgerTip1
toGetLedgerTip
and so forth for all queries.
datumsMismatch
, a previously introduced error from the transaction submission has been removed / replaced.
SubmitTx
can no longer returnSubmitTxError[Byron]
. All the child error types have been removed accordingly, namely:
UtxoValidationError
TxValidationError
LovelaceError
ChainSyncClient
no longer exposes a requestNext function. Instead you must invoke the callback provided as the second argument in each of rollBackward and rollForward handlers.
ChainSyncClient
no longer exposes JSON-WSP reflection as there would be unexpected results given the first n messages would all share the same reflected value.
- New TypeScript client! The client comes in three packages:
- An interactive REPL to play with Ogmios using the command-line.
- A generator to derive TypeScript type definitions from the JSON schema.
- The actual client library providing nice wrapper around the various protocol, in a typed way. The TypeScript client also includes a new battery of automated integration tests against the testnet.
- Support for WebSocket sub-protocols, with currently one support sub-protocol:
ogmios.compact.v1
. When enabled, Ogmios will omit fields such as witnesses, proofs and signatures from responses to make responses smaller. - Provide missing documentation / JSON-schema for:
- JSON-WSP faults
- Allegra & Mary
SubmitTx
failures:-
Allegra:
expiredUtxo
is replaced byoutsideOfValidityInterval
- new error
triesToForgeAda
Mary:
valueNotConserved.consumed
is now aValue
(instead of aDeltaCoin
)valueNotConserved.produced
is now aValue
(instead of aDeltaCoin
)outputTooSmall
items are now of typeTxOut[Mary]
- new error
tooManyAssetsInOutput
-
- Continuous integration job checking for code style and lint on the server source code.
- The
/health
endpoint now returns two additional pieces of information:- A
networkSynchronization
percentage to indicate how far Ogmios / the node is from the network. - A
currentEra
value to indicate the corresponding Cardano era Ogmios / the node is currently running in.
- A
- Nix support for building Ogmios (this also include a
cabal.project
to enable cabal support as well).
- Rework Docker setup to not require an external snapshot image. Everything is now built in a single
Dockerfile
, but cache from DockerHub can be leveraged to reduce overall build time when building from scratch. - Fixed typo in the JSON-schema w.r.t to the 'Acquire' request (
points
→point
), and introduce more automated test to catch this kind of errors more easily.
ø
- Extend the local-state query protocol with support for 'GetCompactGenesis'.
- Extend the local-state query protocol with support for 'GetFilteredDelegationsAndRewards'.
- Add missing
mint
field to transaction's body (added since mary). - The documentation is now hosted on https://ogmios.dev.
- Use 'contentEncoding' over 'format' in appropriate part of the JSON schema.
- Fix various errors in the JSON-schema definition & extend test suite coverage in consequence.
- Implement a 'fast-bech32' encoding library, to speed-up Ogmios serialization of blocks beyond the Shelley era.
- Use faster (and recommended) JSON encoding techniques to speed up overall JSON serialization.
- Improve generated documentation from JSON schema by:
- Providing titles to 'oneOf' items
- Adding descriptions to top-level definitions
- Adding examples to top-level definitions
- Customized API reference's stylesheet to enhance readability.
- Upgrade dependency and code to work with GHC-8.10.4 (from GHC 8.6.5)
- Handle more gracefully unknown exceptions (avoid infinite fast loop of retries on errors).
- Handle more gracefully network mismatches (e.g. connecting Ogmios in testnet mode to a mainnet network)
- Repository reorganization:
- 'ogmios-server' renamed into 'server'
- move Haskell-specific dotfiles and configuration files under 'server'
- move 'modules' under 'server'
- move 'Dockerfile' and 'snapshot.Dockerfile' under 'server'
- Support for GHC-8.6.5
- The docker image no longer shows git revision / version on '--version'
- Support for the Allegra era on the chain-sync, tx submission and state query protocols.
- Support for the Mary era on the chain-sync, tx submission and state query protocols.
- Support for multi-era state queries, or said differently, Ogmios can survive a hard-fork without being restarted or re-compiled.
- Allow clients to also make state queries based on the node's tip (instead of passing an explicit point to acquire).
- Interactive dashboard leveraging Ogmios health's endpoint and local state query protocol to show metrics in real-time.
- Automated smoke sanity tests executed on a running instance, running queries and chain-syncs across all eras.
- Various internal optimization, in particular with rewards to the chain-sync protocol (~14.000 blocks/s in Byron, ~2500 block/s in Shelley and beyond).
- Additional metrics for monitoring: current heap size, total messages, total unrouted messages and start time.
- Configurable HTTP server timeout from the command-line, with sensible defaults.
- Improve error responses to invalid clients' requests (instead of generic error messages).
- Fixed various typos and clumsy wording in the user manual.
- Reworked internal architecture as a Three-Layer Haskell Cake.
- Changed internal dependencies for base16 and base64 encoding for better performances.
- Upgraded internal dependencies to the Cardano eco-system working with cardano-node@1.25.1
- Improved error handling of the Ogmios server, in particular in case of connections lost with the underlying node.
- The server now returns an explicit client error when interleaving 'FindIntersect' messages in-between pipelined 'RequestNext'.
- Revised default compilation flags .
ø
- Support for the Shelley chain in the local-chain-sync protocol.
- Support for the local-state-query protocol.
- Health / Heartbeat endpoint for monitoring.
- Runtime and application metrics measured and served on endpoint (
/health
). - Ogmios now includes an HTTP static server hosting both the WSP definition and, a
/benchmark.html
to run some quick benchmark / smoke test. - Added additional configuration options via command-line or environment.
- Revised user manual with detailed step-by-step examples.
- Several JSON fields renamed to increase consistency between Shelley and Byron.
- Improved logging, more messages and with more context.
- Improved error handling with regards to connection of websocket clients.
ø
-
Initial release and support for:
- Chain Synchronization (no pipelining between cardano-node & ogmios)
- Local Transaction Submission
-
JSON-WSP version 1.0, full support with reflection.
-
Full docker stack via docker-compose.
-
Basic command-line and logging.
ø
ø