This changelog is based on Keep A Changelog.
- Removed redundant --governance-authority from most commands (except init-governance) and the config
- Removed
InitToken
- Removed
init-tokens-mint
command - Removed
init-token-status
command - Removed
--chainId
,--threshold-numerator
and--threshold-denominator
- Removed
SidechainParams
type
- Updateable governance system.
init-governance
commandupdate-governance
command
DParameter
,PermissionedCandidates
now use the updateable governance.- Dropped
--version
parameter from all commands. - Dropped
--old-version
and--new-version
parameters fromupdate-version
command. - Moved DParameter, Permissioned Candidates, CommitteeCandidateValidator, Reserve and IlliquidCirculationSupply to Generic Validators implementation.
- Serialization for
BlockProducerRegistrationMsg
- Renamed
--genesis-committee-hash-utxo
to--genesis-utxo
- NativeTokenManagement can be initialised without spending the genesis utxo.
- Add missing newline at end of CLI error output
- CLI now prints errors on stderr instead of stdout
- Added the following smart contracts:
OnlyMintMintingPolicy
,AlwaysPassingValidator
,AlwaysPassingPolicy
- Updated error messages when utxo is not found, or ogmios / kupo connection failed.
- Nicer error messages from the CLI in some cases
- Updated readme
- Updated cardano-transaction-lib to v9.3.1
- Updated the following smart contracts:
InitTokenPolicy
,VersionOraclePolicy
,CommitteePlainSchnorrSecp256k1ATMSPolicy
,ReserveValidator
,ReserveAuthPolicy
,IlliquidCirculationSupplyValidator
- Removed
init
command - the PoC test modules were removed
- Removed
burn-v1
andburn-v2
commands - Removed
claim-v1
andclaim-v2
commands - Removed
save-root
,committee-hash
,committee-handover
andcollect-garbage
commands - Removed
init-checkpoint
,init-fuel
,save-checkpoint
,cbor-update-committee-message
,cbor-merkle-root-insertion-message
,cbor-merkle-tree-entry
,cbor-merkle-tree
,cbor-combined-merkle-proof
, andcbor-plain-aggregate-public-keys
commands - Removed
gen-signatures
tool - Removed
init-candidate-permission-token
andcandidate-permission-token
commands - Removed
--use-candidate-permission-token
switch - Removed
utils
commands - Removed the following smart contracts:
CandidatePermissionPolicy
,CheckpointPolicy
,CheckpointValidator
,CommitteeHashValidator
,CommitteeOraclePolicy
,CommitteePlainEcdsaSecp256k1ATMSPolicy
,CommitteePlainSchnorrSecp256k1ATMSPolicy
,DsConfPolicy
,DsConfValidator
,DsInsertValidator
,DsKeyPolicy
,FUELBurningPolicy
,FUELMintingPolicy
,FUELProxyPolicy
,MerkleRootTokenPolicy
,MerkleRootTokenValidator
- CLI now returns non-zero exit code on failure
InitToken
minting policy withBurnInitToken
redeemer no longer allows minting of tokens- Fixed some help text
- Fee calculation now supports Conway
- Added
--network
paremeter which takes eithertestnet
ormainnet
- Add CLI for reserve and illiquid circulation supply endpoints
- Obtain cardano-address via CHaP
- Update ghc from 8.7 to 9.6.6
- Update plutus-tx from 1.0 to 1.27, and remove plutonic dependency
- Update ctl to version 8.6
- Added
use-candidate-permission-token
switch toregister
andaddresses
command. Using this flag will assume usage of candidate permission tokens. - Added CLI endpoint
list-versioned-scripts
switch to return currently versioned scripts. - Added CLI endpoint
init-token-status
to return all unspent init tokens associated with the user's wallet. getSidechainAddresses
now also returns theInitTokenPolicy
. That affects both theinit
andaddresses
CLI endpoints.- Effect system over the
Contract
monad from the CTL library, plus a mechanism to intercept and re-interpret errors from theContract
monad. https://github.com/input-output-hk/trustless-sidechain/pull/723 - Added CLI versioning and commit hash to pc-contracts-cli with the
subcommand
cli-version
. - Added CLI endpoint
init-tokens-mint
to mint all init tokens by spending the genesis UTxO. - Added CLI endpoint
init-committee-selection
to initialise the committee selection mechanism. - Added CLI endpoint
init-checkpoint
to insert scripts and initialise checkpointing. - Added CLI endpoint
init-fuel
to initialize the FUEL mechanism, namely the distributed set, FUEL minting / burning versioning, and the Merkle Root policy and validator scripts. - Added CLI endpoint
init-candidate-permission-token
to initialise the candidate permission token mechanism.
- CTL updated to version which supports ogmios 6.0.3 and 6.4.0
committee-hash
now uses reference scripts, which should make the transaction smaller and lower the fees 831- implemented (iogx)(https://github.com/input-output-hk/iogx) nix framework
init
now prints more human friendly message, when selected genesis utxo is not available at user's wallet address. (714)VersionOracleValidator
now doesn't allow updating utxos anymore. If you want to update your scripts, you have to insert new versions and remove old version in separate transactions.update-version
does this under the hood.init
now returns a fieldinitTransactionIds
instead ofversioningTransactionIds
. This fields includes all initialization transactions, not just the ones for the versioning system.- NFT token name for Checkpoint and Committee Oracle set to empty string.
Init token name for Committee Oracle set to
Committee oracle InitToken
. Previous values were invalid due to using wrong parsing function. - Some
String
types changed to strictByteString
where appropriate. insert-version
is now calledinsert-version-2
. It only updates a protocol from version 1 to version 2 and only attempts to update the version for features already existing in version 1.- Any command where providing a committee was previously optional now requires it.
- Removed
init-tokens-mint
command. - Removed
use-init-tokens
flag frominit
command. - Removed
candidate-permission-token-utxo
andcandidate-permission-token-name
optional parameters fromregister
andcandidate-permission-token
commands. - Removed
candidate-permission-token-utxo
optional parameter fromaddresses
command. remove-d-parameter
command has been removed. (679)
- Added
update-permissioned-candidates
command takes candidates to add and candidates to remove. It can also remove all current permissioned-candidates with--remove-all-candidates
flag. (631) - Added
collect-garbage
command for burning nfts that can pile up at the user's wallet address. - Script versioning system with three new commands:
insert-version
,invalidate-version
, andupdate-version
. First two require--version
followed by a positive integer as an argument.update-version
requires--old-version
and--new-version
options, each followed by a positive integer. (586) - Added
claim-v2
andburn-v2
commands for claiming and burning fuel using version 2 of the scripts. (586) - D Parameter storage and management system, with
insert-d-parameter
,update-d-parameter
andremove-d-parameter
commands (607)
update-permissioned-candidates
doesn't takemainchainKey
as argument anymore. For example instead of--add-candidate MAINCHAIN_KEY:SIDECHAIN_KEY:AURA_KEY:GRANDPA_KEY
now you have to do--add-candidate SIDECHAIN_KEY:AURA_KEY:GRANDPA_KEY
.- The
--sidechain-genesis-hash
now only needs to be passed to--init
andinit-tokens-mint
commands. BlockProducerRegistration
has 2 new fields -authorityDiscoveryKey
andgrandpaKey
(627)register
now doesn't take--sidechain-pub-key SIDECHAIN_KEY
argument. Instead of that it takes--sidechain-public-keys SIDECHAIN_KEY:AURA_KEY:GRANDPA_KEY
argument. (627)addresses
doesn't return cbor encoded address of UpdateCommitteeHashValidator anymore. Now it returns its validator hash. (614)addresses
no loner requiresinit
to be conducted first. This reverts to earlier behaviour that was changed when the versioning system was implemented. (616)addresses
no longer returnsCommitteeNftPolicy
andCommitteeHashPolicy
in themintingPolicies
list. These were duplicates of theCommitteeOraclePolicy
minting policy. (616)- commands
committee-handover
andcommittee-hash
now requirenew-committee-validator-hash
argument instead ofnew-committee-validator-cbor-encoded-address
. (614) - Commands
claim
andburn
have been renamed toclaim-v1
andburn-v1
, respectively. (586) - Commands
init
andinit-tokens-mint
now require--version
flag followed by a positive integer as an argument. (586) - On-chain scripts now return short error codes instead of lengthy error messages.
genesisHash
field has been removed from the"sidechainParameters"
record in the configuration file.
HasField
type class for easier onchain record handling (561, 508, onchain)- Extra functions for efficient
Data
encoding and decoding for product types (484, 504, onchain) Eq
andShow
instances forUpdateCommitteeHash
,SidechainParams
,ToData
instance forNode
(569, 532, offchain)FromData
instances forSidechainParams
,MerkleRootInsertionMessage
,FUELMint
,UpdateCommitteeHash
,UpdateCommitteeHashMessage
,CommitteeCertificateMint
,CheckpointParameter
,Node
,BlockProducerRegistrationMsg
,SignedMerkleRootRedeemer
,SignedMerkleRootMint
andCandidatePermissionMint
(569, 532, offchain)Eq
instances forSidechainParams
,MerkleTreeEntry
,DsConfMint
,MerkleRootInsertionMessage
,SignedMerkleRootRedeemer
,DsConfDatum
,SignedMerkleRootMint
,CombinedMerkleProof
,FUELMint
,Ds
,DsDatum
,UpdateCommitteeDatum
,UpdateCommitteeHash
,UpdateCommitteeHashMessage
,DsKeyMint
,Node
,BlockProducerRegistrationMsg
,UpdateCommitteeRedeemer
,CommitteeCertificateMint
,CheckpointParameter
,BlockProducerRegistration
andCandidatePermissionMint
(569, 532, offchain)Show
instances forBlockProducerRegistration
,Ds
,DsDatum
,DsConfMint
,DsKeyMint
,Node
,BlockProducerRegistrationMsg
,MerkleRootInsertionMessage
,SignedMerkleRootRedeemer
,SignedMerkleRootMint
,FUELMint
,UpdateCommitteeDatum
,CommitteeCertificateMint
,DsConfDatum
,UpdateCommitteeHash
,UpdateCommitteeHashMessage
,UpdateCommitteeRedeemer
andCandidatePermissionMint
(569, 532, offchain)Generic
instances forUpdateCommitteeDatum
andBlockProducerRegistrationMsg
(569, 532, offchain)Eq
andShow
instances forUpdateCommitteeHash
,SidechainParams
,CandidatePermissionMint
,CommitteeCertificateMint
,BlockProducerRegistrationMsg
,MerkleRootInsertionMessage
,SignedMerkleRootRedeemer
,MerkleTreeEntry
,CombinedMerkleProof
,FUELRedeemer
,UpdateCommitteeDatum
,ATMSPlainAggregatePubKey
,UpdateCommitteeHashMessage
,UpdateCommitteeHashRedeemer
,ATMSPlainMultisignature
,CheckpointParameter
,DsConfDatum
,DsConfMint
,BlockProducerRegistration
andFUELMint
.- Roundtrip tests for
Data
encodings of onchain types (568, 522, - If the
addresses
subcommand has--atms-kind plain-ecdsa-secp256k1
, then the returned JSON object outputs also includesaddresses.mintingPolicies.CommitteePlainEcdsaSecp256k1ATMSPolicyId
. Otherwise, if theaddresses
subcommand has--atms-kind plain-schnorr-secp256k1
, then the returned JSON object outputs also includesaddresses.mintingPolicies.CommitteePlainSchnorrSecp256k1ATMSPolicyId
. (578, 524, onchain) - CLI flags for creating cbor encoded messages and cryptographic primitives has
been added to the Purescript CLI.
In particular, the following CLI commands were added
utils key-gen ecdsa-secp256k1 utils key-gen schnorr-secp256k1 utils sign ecdsa-secp256k1 utils sign schnorr-secp256k1 utils encode cbor-update-committee-message utils encode cbor-block-producer-registration-message utils encode cbor-merkle-root-insertion-message utils encode cbor-merkle-tree-entry utils encode cbor-merkle-tree utils encode cbor-combined-merkle-proof utils encode cbor-plain-aggregate-public-keys
(566 , 517 , offchain)
- Efficient versions of
Data
encoding functions for product types used where - Removed
plutus-apps
dependencies (540, onchain) - Modified
BlockProducerRegistration
data type according to SIP-11 (43, 533, onchain and offchain) - Added CLI arguments
--ada-based-staking
and--native-token-based-staking
toregister
andderegister
commands, and changed--spo-public-key
and--spo-signature
to be only required for Ada based staking model (43, 533, onchain and offchain) - Efficient versions of
Data
encoding functions for product types used where possible (484, 504, onchain) SidechainPublicKey
renamed toEcdsaSecp256k1PubKey
. Functions around it have also been similarly renamed: for example,sidechainPublicKey
is nowecdsaSecp256k1PubKey
(562, 511, offchain and onchain)SidechainSignature
renamed toEcdsaSecp256k1Signature
. Functions around it have also been similarly renamed: for example,sidechainSignature
is nowecdsaSecp256k1Signature
(562, 511, offchain)SidechainMessage
renamed toEcdsaSecp256k1Message
. Functions around it have also been similarly renamed: for example,sidechainMessage
is nowecdsaSecp256k1Message
(562, 511, offchain)SidechainPrivateKey
renamed toEcdsaSecp256k1PrivateKey
. Functions around it have also been similarly renamed: for example,sidechainPrivateKey
is nowecdsaSecp256k1PrivateKey
(562, 511, offchain)TrustlessSidechain.HaskellPrelude
now exportsCoercible
andcoerce
.
- Distributed set is no longer vulnerable to token dusting in
mkInsertValidator
(38, 537, onchain) - Types whose
Data
encodings cannot change have been noted as such ( 484, 504, onchain) FromData
forEcdsaSecp256k1PubKey
(formerlySidechainPublicKey
) now correctly checks its length invariant (562, 511, offchain)FromData
forEcdsaSecp256k1Signature
(formerlySidechainSignature
) now correctly checks its length invariant (562, 511, offchain)FromData
forEcdsaSecp256k1Message
(formerlySidechainMessage
) now correctly checks its length invariant (562, 511, offchain)FromData
forEcdsaSecp256k1PrivateKey
(formerlySidechainPrivateKey
) now correctly checks its invariants (562, 511, offchain)
- Added checkpoint validator address and checkpoint currency symbol to
addresses
command (506 offchain) - Improved error handling with an application-wide error type (471, 492 offchain)
- Checks for
--threshold-numerator
and--threshold-denominator
to ensure coprimality (317, 378 offchain) - Optional flag
--distributed-set-utxo
to theclaim
CLI subcommand to avoid the linear scan through the UTxO set (412, 414 offchain) - Warning when the optional flag
--distributed-set-utxo
in theclaim
CLI endpoint is not used (412, 414 offchain) - New sublibrary
quickcheck-extra
with some QuickCheck helpers (435, 444, onchain) - QuickCheck guide (449, 468, onchain)
toEncoding
forSidechainCommitteeMember
- Size measurements for exported scripts (426, 473, onchain)
abs
for absolute value in Haskell prelude, with the same usage caveats assignum
.- The flag
--atms-kind
with a value such asplain-ecdsa-secp256k1
(in preparation for more signature schemes to come) must be added to all CLI calls to specify which committee certificate verification is being used. Alternatively, one can put"atmsKind": "plain-ecdsa-secp256k1"
in the config JSON file. (394, 487, offchain) (83, 501 offchain/onchain) - The flag
--atms-kind
may have valueplain-schnorr-secp256k1
which allows sidechain public keys and signatures to be Schnorr secp256k1 public keys and Schnorr secp256k1 signatures. (83, 503 offchain/onchain) - The flag
--new-committee-validator-cbor-encoded-address
or--new-committee-validator-bech32-address
was added to thecommittee-hash
endpoint for the offchain CLI interface which takes either hex encoded cbor of an address of a validator script or a bech32 address of a validator script for which the committee oracle should be sent to. In the former case, this desired address can be found in theaddresses
CLI endpoint under the JSON keyscborEncodedAddresses.CommitteeHashValidator
. (394, 487, offchain)
--threshold
is no longer used:--threshold-numerator
and--threshold-denominator
now behave correctly and are no longer deprecated (317, 378, offchain)- CTL is now version 5.0.0 (removing ogmios-datum-cache from runtime dependencies) (395, offchain)
- Refactored configuration file parser (460,
- New Haskell standards document and compliance (441, 450, onchain)
UpdateCommitteeHashMessage
has a new format so committee signatures must be generated differently for this endpoint. In particular,UpdateCommitteeHashMessage
was changed so that the hash of the sorted committee members keys replaces the sorted list of the public keys, and a new field which must be anAddress
(see the next bullet point) must be included. (394, 487, offchain/onchain)- the subcommand
addresses
for the offchain CLI interface outputs thecbor(plutusData(Address))
of the committee hash validator. (394, 487, offchain)
- Deregistration fail after multiple registrations with the same SPO public key (236
- Aeson-related instances for onchain types (not needed).
Generic
derivations for those types where they were only used for Aeson-related instances.
- Added a standalone benchmark tool (333, 347)
- Introduced Sidechain Improvement Proposals (377)
- Added Permissioned committee candidate flow (355, 364)
- Added Checkpointing (373)
- Refactored and renamed internal modules (330, 344, 348, 349, 353)
- Renamed CLI tool executable to
pc-contracts-cli
(344) - CTL in now v4.0.2 (adding Kupo and removing ctl-server from runtime dependencies) (346)
- Security enchancement for Merkle root insertion (361)
First release.