Scheduled recovery:
This release contains a scheduled message recovery. The network failed to reach consensus on seven messages due to Solana RPC timeouts experienced by a superminority of nodes.
On Oct 5 2021 11:00 UTC, the guardiand node fetches a list of transactions from GitHub to re-observe these accounts and achieve consensus. The list of accounts is untrusted - guardiand still relies on the connected RPC node for finality, it merely re-triggers the observation using the same code path.
This release includes retry logic to improve handling of RPC timeouts, so hopefully this is the first and only time we need to use this new feature :-)
Breaking changes:
-
The
guardiand bridge
command was renamed toguardiand node
to avoid any confusion with token bridge functionality. The build command is nowmake node
. Two command line flags were also changed:--solanaBridgeAddress
is now--solanaContract
--bridgeKey
is now--guardianKey
The Heartbeat proto message had one of its fields renamed from BridgeAddress to ContractAddress. If you were using the REST API (rather than the gRPC API, which is unaffected), you might have to update your code to use
contract_address
instead ofbridge_address
. -
Support for raw heartbeat streams was removed from the public API. The
GetLastHeartbeats
/v1/heartbeats
API with server-side aggregation should be used instead. -
--publicREST
has been extended with grpc-web and TLS support and renamed to--publicWeb
(see below). -
Go 1.17 is now required to build the guardiand node.
New features:
-
The admin CLI now supports injecting token and NFT bridge chain registration messages.
-
admin list-nodes
now supports a--showDetails
flag to display contract addresses and error counts. -
guardiand now comes with a built-in REST and grpc-web API endpoint for web UIs to retrieve signed messages. Guardians are encouraged to run a public API endpoint for web UIs to use - please refer to the docs for more details.
- The node exports Prometheus metrics for gRPC requests made to the publicWeb service.
-
Signed VAA messages are now broadcast on the gossip network, allowing all nodes to store them even if they missed the original observation.
Improvements:
-
guardiand startup time has been improved to a few seconds down from ~15s by improving Ethereum guardian set fetching.
-
invalid signed heartbeat received
messages are no longer logged atINFO
level. These messages occur when nodes that aren't part of the guardian set broadcast signatures, which is normal. -
guardiand now maintains state for messages it observed but failed to reach consensus for up to 24 hours, allowing the network to submit observations late. This is meant to facilitate manual governance consensus and nodes falling behind and catching back up.
-
guardiand now retries failed Solana slot and account fetches up to five times.
-
A workaround was added for a suspected Solana bug, causing finalized transactions to be missed in rare occasions. This increases the number of GetConfirmedBlock calls by about 10% (skipped blocks are no longer excluded).
-
Log output for message observations was improved to include more context for lookups.