New features:
- Solido no longer requires that validators use a 100%-commission account of which Solido is the withdraw authority. Any vote account can now be used, as long as its commission does not exceed Solido’s configured maximum commission percentage.
Compatibility
- The
AddValidatorinstruction is no longer supported and has been superseded byAddValidatorV2. - The
WithdrawInactiveStakeinstruction is no longer supported and has been superseded byUpdateStakeAccountBalance. - The
CollectValidatorFeeinstruction is no longer supported. - The
ClaimValidatorFeeinstruction is no longer supported.
Released 2022-07-08.
The on-chain Solido program remains functionally unchanged since v1.0.0. The Anker program remains unchanged since v1.3.0.
Changes:
- Do not try to call
Anker::SendRewardsfrom the maintenance daemon.
Released 2022-05-04.
The on-chain Solido program remains functionally unchanged since v1.0.0. The Anker program remains unchanged since v1.3.0.
New features:
- Expose Anker TVL metrics in the maintainer Prometheus metrics.
Bugfixes:
- Make dependencies compatible with
cargo vendor. In particular, this restores the ability to build the CLI with Nix'buildRustPackage.
Released 2022-04-29.
The on-chain Solido program remains functionally unchanged since v1.0.0. The Anker program remains unchanged since v1.3.0.
New features:
- Expose Anker metrics in the maintainer Prometheus metrics.
Released 2022-04-14.
This release contains the final version of the Anker program, to be deployed on-chain. There are no functional changes to the on-chain Solido program in this release. The on-chain Solido program remains functionally unchanged since v1.0.0.
Compatibility:
- The data layout of the Anker instance has changed with respect to the previous release, which was a preview release of Anker.
New features:
- First stable version of the Anker program, and support in the
solidoCLI. - Add the APY daemon, which fetches the stSOL/SOL exchange rate from the chain and stores it in a SQLite database, to be able to compute APY over longer periods of time.
- Add a preview version of
solido.js, a Typescript library to interact with Solido and Anker. This library is not yet stable.
Released 2022-01-11.
There are no functional changes to the on-chain Solido program in this release. The on-chain Solido program remains functionally unchanged since v1.0.0.
Compatibility:
- The interface of the Solido program remains unchanged.
- This version of the
solidoprogram is backwards compatible, only new options were added.
New features:
solido multisig show-transactionnow recognizes wLDO token transfers and will display them in a more readable manner.
Feature previews:
- Add the Anker program, which implements integration with the Anchor protocol on the Terra blockchain, and is responsible for minting bSOL.
- This release is an internal milestone intended to aid auditing.
- The
solidoCLI program gained anankersubcommand for interacting with the Anker program.
Released 2021-10-06.
There are no changes to the on-chain program in this release, only to the
solido CLI program. The on-chain program remains unchanged since v1.0.0.
Compatibility:
-
If you run
solido run-maintainerand connect to a custom RPC endpoint with--cluster, you need to ensure that your RPC node has account indexing enabled for the config program. This can be done by adding--account-index program-id --account-index-include-key Config1111111111111111111111111111111111111to the
solana-validatorcommand line. This option is needed for the new validator name metrics. Without account indexing, thegetProgramAccountsRPC call will likely time out.
New features:
-
Maintainers now have “maintainer duty” at different non-overlapping times, to reduce the probability of maintainers racing to perform the same update.
-
Active rebalancing: the maintainer can now unstake from validators, which helps to restore the stake balance quickly if new deposits alone are insufficient. This is especially useful after onboarding new validators.
-
The maintainer now waits until the last 5% of the epoch, before it performs staking and unstaking operations. This reduces maintenance fees, and can achieve a more uniform stake balance.
-
It is now possible to run
solido run-maintainereven if--keypairis not a member of the maintainer set. In this mode,solido run-maintainerwill never submit maintenance transactions, but it can still be used to export metrics to Prometheus. -
solido run-maintainernow exposes more metrics:solido_maintainer_balance_solis now included for all maintainers, not just the one that the instance is running as.solido_withdraw_count_total. We recorded this in the on-chain state already, but we never exposed the counter until now.solido_validator_last_voted_slotsolido_validator_last_voted_timestampsolido_validator_identity_account_balance_solsolido_validator_vote_credits_totalsolido_solana_epochsolido_solana_epoch_start_slotsolido_solana_slots_per_epochsolido_solana_stake_sol
-
solido show-solidonow prints validator names and other metadata, in addition to the vote account address. The new validator metrics in/metricsalso include validator names. -
solido multisig show-transactionnow prints a diff forChangeMultisigtransactions.
Bugfixes:
- Previously, if
solido run-maintainerfailed to execute a maintenance transaction, metrics of the on-chain state would not be available even if they were fetched successfully. Now those metrics can be served even if a transaction fails. - The maintainer now waits for transactions to be confirmed before continuing, and preflights transactions against the lastest known state (even if unconfirmed).
solido multisig show-transactioncan now parse and displayChangeMultisigtransactions again. This had been broken since v0.5.0.
Released 2021-09-10.
Bugfixes:
- Fix to the maintainer logic so that it chooses the active validator that has the least amount of stake for the stake deposit, instead of that which is farthest from the target.
Released 2021-09-08.
Bugfixes:
- Fix an outdated version number and filename in
buildimage.shthat caused it to fail. No changes to the on-chain program orsolido.
Released 2021-09-08.
Compatibility:
- The
--validator-vote-accountoption has been removed fromsolido run-maintainer. Previously this was used to specify the validator to claim validation fees for, but now the maintenance bot will claim fees on behalf of all validators whenever possible.
New features:
solidonow supports--keypair(andSOLIDO_KEYPAIRwhen passed as environment variable) as an alternative to--keypair-path. This is useful for example to load the signer key from Hashicorp Vault with Vaultenv.- We added scripts to automate some of the checks for validator onboarding.
Bugfixes:
- Issues identified by Neodyme have been fixed, including one critical issue that enabled an attacker to asymptotically own 100% of the stSOL supply.
- Issues identified by Jon Cinque in a peer review have been fixed. Thanks Jon!
Other changes:
- Solido now has a bug bounty and security policy, see SECURITY.md.
Released 2021-08-25.
Compatibility:
solido run-maintainernow accepts the listen address with the--listenoption, instead of accepting it directly; this was an oversight in previous versions.- The
Validatorstruct, part of the on-chainLidostruct, now stores two more stake account seeds, and theweight: u32has been replaced withactive: bool. Both of these play a role in validator removal and stake redistribution. We intend for this to be the final on-chain format that will be used in v1. - The serialization format of some instructions changed, due to the introduction of new instructions. From v1 onwards we will make sure to keep these stable.
New features:
- Withdrawals are now possible through the new
Withdrawinstruction that splits off a stake account. For testing purposes and for advanced users,solidogained a new subcommand,withdraw, to submit a withdraw transaction. solido create-solidonow accepts a mint address. This can be used to create the stSOL mint in advance at a known address, which is what we did on mainnet-beta.solidonow includes more detail when printing some errors.solido multisignow outputs some details about the transaction forapproveandexecute-transaction.- Validators now have an
activestatus (that supersedesweight— the stake distribution will be uniform). Validators start out active, but can be deactivated to initiate their removal. - The new
solido deactivate-validatorsubcommand can propose a multisig transaction to deactivate a validator. - There is a new
Unstakeinstruction that will be used for active stake rebalancing in a future version.
Bugfixes:
solidonow properly handles derivation paths when usingusb://ledgerkeypair paths.- The stake authority account is no longer writable for the
StakeDepositinstruction.
Other changes:
- We updated to Solana from 1.7.3 to 1.7.8 and the Serum Multisig program from
v0.4.0 to v0.6.0, and we updated dependencies with
cargo auditissues. - A Grafana dashboard is available in
etc/grafana-dashboard.json. - The audit report of the Bramah Systems audit is now available in
audit. - A deposit transaction now logs what it did, to make it easier to understand transactions on block explorers.
- The
StakeDepositinstruction now requires staking with the validator that has the least stake, to reduce the need to trust maintainers.
Released 2021-07-30.
Compatibility:
- The on-chain
Lidostruct gained a new field in itsmetricsfield for tracking withdrawals.
New features:
- A first version of withdrawals has been implemented.
solido show-solidonow shows more information about validators.- The maintenance daemon can now be configured to claim fees for one validator. Claiming the fee transfers validation fee stSOL to the validator’s configured fee account.
Other changes:
- We now have more accurate coverage measurements for the unit tests and CLI
test scripts. The
solana_program_testtests and on-chain program still do not have coverage reports. - Internal cleanup.
Released 2021-07-20.
Compatibility:
- Solido now requires validators to use a vote account that has its withdraw authority set to a Solido-controlled address, and that has the commission set to 100%. Solido then ensures that enrolled validators all get the same commission percentage, paid in stSOL. The manager can configure the fee percentage. This approach discourages direct delegations (users delegating directly to the vote account, instead of depositing with Solido).
- The on-chain
Lidostruct gained two fields:rewards_withdraw_authority_bump_seed: u8, andmetrics: Metrics. See below for more information.
New features:
- All options for the
solidoprogram can now be configured through a config file or environment variable. Previously this was not possible for the--keypair-path,--cluster, and--output-modeoptions. - The
solidoprogram gained adepositsubcommand that enables deposits from the command line. This command is intended for testing purposes, not for end- users. - Solido now records metrics about deposits, rewards, and fees, in the on-chain
data structure. It can be read by any client (for example, by our deposit
widget, to show how much SOL users deposited so far). The maintenance daemon
also exposes these metrics in its Prometheus
/metricsendpoint.
Changes:
- Solido now expects all rewards to appear in vote accounts. A new instruction,
CollectValidatorFee, withdraws rewards as much SOL as possible from a vote account, and distributes fees. The maintenance daemon calls this instruction when needed. - Solido can now withdraw excess balance in stake accounts back to the reserve,
from where it can be staked. The main cause of excess balance is merging
stake accounts, which frees up some of the rent. Withdrawing excess stake is
done by the
WithdrawInactiveStakeinstruction, which was previously calledUpdateValidatorBalance. The maintenance daemon calls this instruction when needed. - Dependencies on Solana Program Library programs are now through crates.io. Previously we embedded the Solana Program Library as a Git submodule.
Released 2021-07-07.
Compatibility:
- The reserve no longer doubles as mint authority. There is now a separate program-derived address that acts as the mint authority.
- The on-chain
Lidostruct gained a field:mint_authority_bump_seed: u8. - The
Depositinstruction takes one additional account input: the mint authority.
New features:
- When adding a validator, we can now specify its weight, which determines the weighted stake distribution.
- The
solidoprogram now accepts options from environment variables, in addition to the command-line and a config file.
Bugfixes and other changes:
- CI now automatically builds a maintainer container image for every release.
- We now avoid creating new stake accounts during
StakeDepositif possible, and the logic forMergeStakewas simplified. - The maintainer bot uses fewer RPC calls and tries harder to get a consistent view of the on-chain state.
- Fix bug where no fees would be minted if there are donations but no deposits.
Released 2021-07-01.
This is an internal milestone, intended as a cut-off point for the initial audit.