Skip to content

Releases: AntelopeIO/leap

Leap v3.2.2

16 Mar 14:16
061f010
Compare
Choose a tag to compare

This patch release contains SHiP stability fixes, several additional bug fixes, test fixes, logging improvements, and documentation updates.

Leap v3.2.2 Release Notes

Updates

New subjective-account-max-failures-window-size

PRs

  • (785)[3.1 -> 3.2] subjective-account-max-failures-window-size


A new configuration option, --subjective-account-max-failures-window-size, to set the window size in number of blocks for --subjective-account-max-failures has been added.

Bug fixes

SHiP stability fixes

PRs

  • (714)[3.2] Fix SHiP stability


Some SHiP stability issues were addressed in Leap v3.2.1, however additional issues remained. Those have been addressed in this release. Specifically an issue of use of a socket_stream after destruction has been fixed.

SHiP no longer truncates logs when starting from genesis

PRs

  • (737)[3.2] SHiP do not truncate logs when starting from genesis


SHiP will no longer delete existing SHiP logs if accidently starting a node from genesis.

Fixed terminate-at-block to stop at correct block

PRs

  • (691)[3.1 -> 3.2] Fix --terminate-at-block to stop at correct block


--terminate-at-block was terminating node at +1 requested block in head mode. This has been updated to match expected behavior.

Fixed corner case where dirty-db was reported as "Genesis state is necessary" instead of as a dirty-db

PRs

  • (708)[3.1 -> 3.2] Fix reporting of dirty db


There was an issue with dirty db being reported as genesis not found instead of dirty db.

Fixed issue with keosd hanging when unable to lock the wallet file

PRs

  • (756)[3.1 -> 3.2] keosd - Exit program if keosd fails to aquire wallet lock (GH #513)


Previously, if keosd failed to acquire the wallet lock it would print a failure message but linger forever. It has been updated to exit successfully in this scenario.

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (667)[3.1] Test fix: nodeos_forked_chain_lr_test
  • (670)[3.1 -> 3.2] Test fix: nodeos_forked_chain_lr_test
  • (676)[3.1] net_plugin improve block latency calculation
  • (681)[3.1 -> 3.2] net_plugin improve block latency calculation
  • (684)[3.1] Fix --terminate-at-block to stop at correct block
  • (691)[3.1 -> 3.2] Fix --terminate-at-block to stop at correct block
  • (700)[3.1] Fix reporting of dirty db
  • (708)[3.1 -> 3.2] Fix reporting of dirty db
  • (714)[3.2] Fix SHiP stability
  • (747)[3.1] Backport to 3.1 of bootstrap new protocol features activation
  • (748)[3.1 -> 3.2] Backport to 3.2 of bootstrap new protocol features activation
  • (750)[3.2] Avoid logging errors when client disconnects after request (GH #530)
  • (754)[3.1] keosd - Exit program if keosd fails to aquire wallet lock (GH #513)
  • (756)[3.1 -> 3.2] keosd - Exit program if keosd fails to aquire wallet lock (GH #513)
  • (737)[3.2] SHiP do not truncate logs when starting from genesis
  • (773)[3.1] Move subjective bill log to all level of producer_plugin logger.
  • (779)[3.1 -> 3.2] Move subjective bill log to all level of producer_plugin logger.
  • (777)[3.1] subjective-account-max-failures-window-size
  • (785)[3.1 -> 3.2] subjective-account-max-failures-window-size
  • (821)[3.2] Bump Leap version to release 3.2.2


Full Changelog: v3.2.1...v3.2.2

Leap v3.2.1

19 Jan 23:42
3f9cb99
Compare
Choose a tag to compare

This patch release contains SHiP stability fixes, several additional bug fixes, test fixes, logging improvements, and documentation updates.

Leap v3.2.1 Release Notes

Bug fixes

SHiP stability fixes

PRs

  • (624)[3.2] Backport SHiP fixes from eosio/eos release/2.2.x


State History Plugin (SHiP) stability issues were reported with the release of Leap v.3.2.0 where it would crash under heavy load. This has been resolved with a backport of state_history_plugin fixes.

From the backport:

  • Create an additional thread for all ship network communication. This thread already existed in release Leap v3.2.0 but was not used.
  • Fix bug where state_history_plugin would send blocks with block_num smaller than the client requests when the state history block head is behind the block head of the client.

Additional changes:

  • Remove session_manager_t and use post to main thread so session_set is only accessed from main thread.
  • Use named_thread_pool to simplify SHiP thread. Older versions of boost do not provide an acceptor that takes a strand in constructor, so rely on implicit strand of single thread running io_context which is much simpler than wrapping all calls in boost::asio::bind_executor.
  • The destructor of boost beast web socket stream is called on the SHiP thread.

Interrupt speculative block start_block when a production block is received

PRs

  • (648)[3.1 -> 3.2] Interrupt speculative start_block when a block is received


Block propagation has been improved under high load by exiting a speculative block start_block when a production block comes into the node and its block header is validated. This allows the block to be processed immediately after the execution of the current transaction.

Previously, for a speculative block, an incoming block would not be processed until the main thread was released from processing the backlog of pending transactions that fit with the completion of start_block. This could delay the incoming block processing by as much as 500ms.

Attempt connection retry for duplicate connections

PRs

  • (615)[3.1 -> 3.2] Attempt connection retry for duplicate connections


When syncing from one peer a sync wait timeout could cause the connected peer to determine the reconnect was a duplicate. This prevented reconnection and required a manual disconnect/reconnect to reestablish the connection.

A previous fix for this corner case did not address that no_retry is was redundantly being checked in connect. This duplicate check has been removed because connect is only called from resolve_and_connect where the no_retry is already verified.

Add validation of plugin configuration for deep-mind

PRs

  • (504)[3.1 -> 3.2] Added validation of plugin configuration for deep-mind


Previously there was no enforcement that when deep-mind was enabled that p2p-accept-transactions and
api-accept-transactions be disabled. There is now validation that throws an error when configured incorrectly.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (504)[3.1 -> 3.2] Added validation of plugin configuration for deep-mind
  • (534)[3.1 -> 3.2] Test nodeos_forked_chain_test: Fix race on kill of bridge node
  • (559)[3.1 -> 3.2] Do not run maintenance task on shutdown
  • (566)[3.2] Fix Test: Specify a large time limit for cleos get table
  • (587)[3.2] Fixes Producer Plugin Schema Fixes and Better Alignment with OpenAPI spec
  • (595)[3.1 -> 3.2] Update nodeos options help usage [docs]
  • (615)[3.1 -> 3.2] Attempt connection retry for duplicate connections
  • (624)[3.2] Backport SHiP fixes from eosio/eos release/2.2.x
  • (648)[3.1 -> 3.2] Interrupt speculative start_block when a block is received
  • (653)[3.1->3.2] Merge release 3.1.4 version bump
  • (657) [3.2] bump Leap version to v3.2.1


Full Changelog: v3.2.0...v3.2.1

Leap v3.1.4

19 Jan 21:54
78973e4
Compare
Choose a tag to compare

This patch release contains several bug fixes, test fixes, logging improvements, and documentation updates.

Leap v3.1.4 Release Notes

Bug fixes

Interrupt speculative block start_block when a production block is received

PRs

  • (543)[3.1] Interrupt speculative start_block when a block is received


Block propagation has been improved during high load by exiting speculative block start_block when a block comes into the node and the block header is validated so that it can be processed immediately after the execution of the current transaction.

Previously, for a speculative block, an incoming block would not be processed until the main thread was released from processing the backlog of pending transactions that fit with the completion of start_block. This could delay the incoming block processing by as much as 500ms.

Attempt connection retry for duplicate connections

PRs

  • (606)[3.1] Attempt connection retry for duplicate connections


When syncing from one peer a sync wait timeout could cause the connected peer to determine the reconnect was a duplicate. This prevented reconnection and required a manual disconnect/reconnect to reestablish the connection.

A previous fix for this corner case did not address that no_retry is was redundantly being checked in connect. This duplicate check has been removed because connect is only called from resolve_and_connect where the no_retry is already verified.

Add validation of plugin configuration for deep-mind

PRs

  • (503)[3.1] Added validation of plugin configuration for deep-mind


Previously there was no enforcement that when deep-mind was enabled that p2p-accept-transactions and
api-accept-transactions be disabled. There is now validation that throws an error when configured incorrectly.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (441)[3.1] Fix test failure due to trx hitting near end of block production time
  • (486)[3.1] Use net_plugin_impl logger instead of default logger
  • (503)[3.1] Added validation of plugin configuration for deep-mind
  • (533)[3.1] Test nodeos_forked_chain_test: Fix race on kill of bridge node
  • (541)[3.1] Do not run maintenance task on shutdown
  • (569)[3.1] Fixes Producer Plugin Schema Fixes and Better Alignment with OpenAPI spec
  • (583)[3.1] Update nodeos options help usage [docs]
  • (606)[3.1] Attempt connection retry for duplicate connections
  • (543)[3.1] Interrupt speculative start_block when a block is received
  • (651)bump Leap release to 3.1.4


Full Changelog: v3.1.3...v3.1.4

Leap v3.2.0

21 Nov 19:13
9efc569
Compare
Choose a tag to compare

Release 3.2.0 includes a new unified command-line interface (CLI) tool called leap-util to support users operating Leap nodes, a significant number of new cleos sub-commands, and various performance enhancements. A large portion of this release is a series of backported PRs from previous releases of EOSIO.

Leap v3.2.0 Release Notes

New features

New leap-util program

PRs

  • (150) [3.2] Build framework for leap-util
  • (327)[3.2] Block-log leap-util subcommand refactoring
  • (371)[3.2] Changed default error handler to print help in cli apps by default
  • (399)[3.2] Enable new CLI11 LeapFormatter for both cleos and leap-util


The nodeos program is meant to be run as a daemon. Over time, however, nodeos has collected various functionalities that are useful to Leap node operators, which are invoked by executing the nodeos program which then completes the desired task and then immediately exits the nodeos process. Since nodeos was designed as a daemon rather than a CLI tool like cleos, the interface to invoke these functions within the nodeos program is clunky compared to the hierarchical sub-command interface of cleos.

However, these functions are meant for Leap node operators and are closely tied to the nodeos executable. The program cleos is intended as tool for a more general audience that includes users who interact with servers running nodeos with public interfaces serving its API but do not necessarily run nodeos themselves. Dumping all that functionality into cleos would clutter its interface and be a distraction for the intended audience of cleos.

Furthermore, the Leap package comes with additional programs like eosio-blocklog which provide additional functionality that is relevant to Leap node operators but is not part of nodeos.

This release introduces a new program called leap-util. The program leap-util is intended to be a unified tool to capture all the functions that would benefit Leap node operators specifically and which are not appropriate to include in nodeos given how nodeos is intended to be used as a daemon. It uses a command-line interface of hierarchical sub-commands familiar to users of cleos.

The scope of leap-util includes all of the functionality provided by eosio-blocklog (which now makes the eosio-blocklog program redundant) and will, over time, include additional functions: some currently in nodeos (that really do not belong in nodeos); and others which are completely new capabilities that haven't existed in prior EOSIO or Leap releases in any form.

For the MVP of leap-util introduced in this release, the following features are supported:

  • CLI11 command-line parsing library with autocompletion
  • eosio-blocklog full functionality via sub-command block-log
  • Retrieving chainbase build environment information via sub-command chain-state

Enhancements to cleos

Autocomplete support

PRs

  • (150) [3.2] Build framework for leap-util


The enhancements to the CLI11 library to support autocomplete for the new leap-util program have also made it possible for cleos to also support autocomplete since it shares the same enhanced CLI11 library to parse its command-line arguments.

HTTP/1.1 support for cleos

PRs

  • (mandel#533) [3.2] cleos Http 1.1 support and improves response handling
  • (mandel#630) [3.2] Allow HTTP-RPC with empty response


In some scenarios involving advanced cloud stacks, cleos was being rejected by gateways or proxies with HTTP status 426. The HTTP 426 Upgrade Required error response code indicates that the server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol. The server sends an Upgrade header with this response to indicate the required protocol(s). This update also improves cleos handling of error codes from nodeos; specifically around use of --print-response.

cleos validate signatures sub-command

PRs

  • (mandel#500) [3.2] Backport of the cleos validate signatures


This sub-command takes a signed transaction, validates the signatures on it, and outputs a JSON array of the recovered public keys.

cleos validate signatures <json_file_of_transaction>

Example:

$ cleos create account -j -d --json-file t eosio kevinh EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
{
  "expiration": "2022-06-23T00:50:08",
  "ref_block_num": 4714,
  "ref_block_prefix": 3530990,
  "max_net_usage_words": 0,
  "max_cpu_usage_ms": 0,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio",
      "name": "newaccount",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "0000000000ea305500000000b4e9b68201000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf0100000001000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf01000000"
    }
  ],
  "transaction_extensions": [],
  "signatures": [
    "SIG_K1_K4ewr6ZLtiWABNKjEhWzXkfgiPdhpF2nKvGz9NKAGaZwtpKdBP6FBXrzKDpuiqEVfh5tZ4GAd4FcFZK4ysMf7NcgtreKfK"
  ],
  "context_free_data": []
}
$ cleos validate signatures <t>
info  2022-06-23T00:49:48.284 cleos     main.cpp:2690                 operator()           ] grabbing chain_id from nodeos
[
  "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
]

Add support for authority structure in cleos system newaccount sub-command

PRs

  • (mandel#543) [3.2] Add authority structure to cleos system newaccount


It is now possible to specify an authority structure (encoded as JSON) with cleos system newaccount for the owner or active authorities to use for the newly created account. It still remains possible to specify the single public key and single permission reference shorthands in place of the full authority structure.

Example

$ cleos system newaccount eosio testtesttest '{"threshold": 1, "keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV", "weight":1}], "accounts":[{"permission":{"actor":"eosio.prods", "permission":"active"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.major"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.minor"},"weight":1}],"waits":[]}' --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 4

cleos get supported_protocol_features and system activate sub-commands

PRs

  • (mandel#663) [3.2] cleos: add get supported_protocol_features and system activate subcommands


The sub-commands get supported_protocol_features and system activate were added to cleos so that protocol features can be activated by using their names. Feature digests are no longer needed.

A user can now use get supported_protocol_features to find a list of supported feature names. The command description was cleaned up and PREACTIVATE_FEATURE was removed because it is not possible to activate it using activate action from eosio.boot (RPC schedule_protocol_feature_activations must be used).

  1. Find supported protocol features
$ cleos get supported_protocol_features
ONLY_LINK_TO_EXISTING_PERMISSION
FORWARD_SETCODE
WTMSIG_BLOCK_SIGNATURES
GET_BLOCK_NUM
REPLACE_DEFERRED
NO_DUPLICATE_DEFERRED_ID
RAM_RESTRICTIONS
WEBAUTHN_KEY
BLOCKCHAIN_PARAMETERS
DISALLOW_EMPTY_PRODUCER_SCHEDULE
CRYPTO_PRIMITIVES
ONLY_BILL_FIRST_AUTHORIZER
RESTRICT_ACTION_TO_SELF
GET_CODE_HASH
ACTION_RETURN_VALUE
CONFIGURABLE_WASM_LIMITS2
FIX_LINKAUTH_RESTRICTION
GET_SENDER
  1. Activate a protocol feature
$ cleos system activate WTMSIG_BLOCK_SIGNATURES
executed transaction: 667479cd2280739b21b925c1c9cddc2d8dc46626f0ecc61173aec5f092431c61  128 bytes  179 us
#         eosio <= eosio::activate              {"feature_digest":"299dcb6af692324b899b39f16d5a530a33062804e41f09dc97e9f156b4476707"}
warn  2022-07-16T01:51:13.001 cleos     main.cpp:665                  print_result       warning: transaction executed locally, but may not be confirmed by the network yet

cleos get consensus_parameters sub-command

PRs

  • (mandel#692) [3.2] Add chain api get_consensus_parameters


A new sub-command get consensus_parameters has been added to cleos to retrieve consensus parameters.

cleos --sign-with & --signature options

PRs

  • (mandel#547) [3.2] Backport cleos transaction signature keys
  • (mandel#674) [3.2] Backport: allow multiple signatures in cleos command “pu...
Read more

Leap v3.2.0-rc2

01 Nov 20:40
9497c08
Compare
Choose a tag to compare
Leap v3.2.0-rc2 Pre-release
Pre-release

Release 3.2.0-rc2 includes several improvements to leap-util, bug fixes, and test fixes.

Leap v3.2.0-rc2 Release Notes

Changes

Default error handler to print help in command line interface apps by default

PRs

  • (371)[3.2] Changed default error handler to print help in cli apps by default


The functionality to display help text by default when there is an error output has been added to leap-util and cleos.

leap-util final enhancements for MVP release

PRs

  • (327)[3.2] Block-log leap-util subcommand refactoring
  • (399)[3.2] Enable new CLI11 LeapFormatter for both cleos and leap-util


There were a few final refactors of the block.log subcommands to complete the leap-util MVP.

Inconsistency between Received block and Produced block log output messages

PRs

  • (313)[3.2] Update produced block log output.


The Produced block log output message was missing total block elapsed time and total block time. There was also a minor discrepancy in how confirmation was logged.

API not found errors returning as plain-text message

PRs

  • (326)[3.2] Return application/json for all http responses including errors


In all previous versions of nodeos, any 404 not-found errors are returned as JSON documents. In 3.2.0-rc1 a plain-text error message was being returned in some scenarios. The standard of always returning application/json for all http responses including errors has been restored.

Building, compatibility, and upgrading

Upgrading from prior releases

To upgrade from Leap 3.1, simply install Leap 3.2 and restart the binaries while pointing to the same config and data directories as usual. The persisted data files used by Leap 3.1 are compatible with Leap 3.2.

Deprecations, removals, and dropped support

Deprecations

eosio-launcher

There is an ongoing initiative to develop a regression test framework that will replace the eosio-launcher functionality with python scripts.

The latest state of deprecations for Leap can be found at https://github.com/AntelopeIO/leap/wiki/Deprecations-and-Proposed-Deprecations-In-Leap-Software.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (307)[3.1] Test fix: trx_finality_status_forked_test.py
  • (308)[3.1 -> 3.2] Test fix: trx_finality_status_forked_test.py
  • (313)[3.2] Update produced block log output.
  • (316)[3.1] Test fix: nodeos_forked_chain_lr_test
  • (335)[3.1 -> 3.2] Test fix: nodeos_forked_chain_lr_test
  • (326)[3.2] Return application/json for all http responses including errors
  • (322)[3.1] Test fix: api_tests checktime_pause_block_deadline_not_extended_test
  • (338)[3.1 -> 3.2] Test fix: api_tests checktime_pause_block_deadline_not_extended_test
  • (347)[3.1] SHiP Fix log output
  • (348)[3.1 -> 3.2] SHiP Fix log output
  • (327)[3.2] Block-log leap-util subcommand refactoring
  • (356)[3.1] Remove replay optimization that skips recording transactions in dedup list
  • (342)Complete Pinned Build Instructions + Other README Updates [docs]
  • (365)[3.1 -> 3.2] Remove replay optimization that skips recording transactions in dedup list
  • (358)[3.1] Curate eos.io refs and remove unused doc metadata [docs]
  • (372)[3.1 -> 3.2] - Complete Build Instructions + Other README Updates [docs]
  • (373)[3.1 -> 3.2] Curate eos.io refs and remove unused doc metadata [docs]
  • (382)[3.1] Dropped trxs when overloaded logged as warning in nodeos
  • (384)[3.1 -> 3.2] Warning message for trx being dropped due to high traffic
  • (366)[3.1] Clear expired transactions before snapshot and integrity hash
  • (389)[3.1 -> 3.2] Clear expired transactions before snapshot and integrity hash
  • (371)[3.2] Changed default error handler to print help in cli apps by default
  • (400)[3.1] Use error log instead of warning log when resource_monitor exceeds threshold by
  • (404)[3.1 -> 3.2] Use error log instead of warning log when resource_monitor exceeds threshold
  • (403)[3.2] restore secp256k1 library in dev installation component by @spoonincode
  • (403)[3.2] restore secp256k1 library in dev installation component
  • (413)[3.2] fix threading on state_history shutdown leading to hung nodeos shutdown
  • (399)[3.2] Enable new CLI11 LeapFormatter for both cleos and leap-util
  • (418)[3.1] bump Leap to release/3.1.3
  • (422)[3.1->3.2] merge release/3.1.3 version bump PR
  • (424)[3.2] bump Leap to 3.2.0-rc2
  • (419)[3.2] update libfc path in EosioTesterBuild.cmake.in for building integration tests in CDT and System Contracts


Full Changelog:
v3.2.0-rc1...v3.2.0-rc2

Leap v3.1.3

01 Nov 20:39
905c5cc
Compare
Choose a tag to compare

This patch release contains a bug fixes for a few small edge cases, several test fixes, and documentation updates.

Leap v3.1.3 Release Notes

Changes

Clearing expired transactions before generating a snapshot and integrity hash

PRs

  • (366)[3.1] Clear expired transactions before snapshot and integrity hash


Previously, there was a risk of including expired transactions from the very last call of clear_expired_input_transactions which could lead to generating incorrect snapshots and integrity hashes.

Removal of replay optimization

PRs

  • (356)[3.1] Remove replay optimization that skips recording transactions in dedup list


The replay optimization that skips recording transactions within the dedupe list had a risk of leaving the index in an inconsistent state. After some testing, the performance of the optimization being somewhat negligable justified it's removal instead of investing time in refactoring.

Dropped transactions when overloaded logged as warning in nodeos

PRs

  • (382)[3.1] Dropped trxs when overloaded logged as warning in nodeos


Previously, when a transaction was rejected due to too many transactions in progress, that message would only get logged in a debug logging level.

Now, the first time a transaction is rejected due to too many transactions will be periodically logged as a warning in nodeos at an interval of 1 second or more to escalate visibility without spamming the logs.

Use error log instead of warning log when resource_monitor exceeds threshold

PRs

  • (400)[3.1] Use error log instead of warning log when resource_monitor exceeds threshold


Previously, when the resource monitor exceeded its configured threshold, it would be logged as a warning. This has been updated to log as an error in order to prompt action by the operator.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (307)[3.1] Test fix: trx_finality_status_forked_test.py
  • (316)[3.1] Test fix: nodeos_forked_chain_lr_test
  • (322)[3.1] Test fix: api_tests checktime_pause_block_deadline_not_extended_test
  • (347)[3.1] SHiP Fix log output
  • (356)[3.1] Remove replay optimization that skips recording transactions in dedup list
  • (342)Complete Pinned Build Instructions + Other README Updates [docs]
  • (358)[3.1] Curate eos.io refs and remove unused doc metadata [docs]
  • (382)[3.1] Dropped trxs when overloaded logged as warning in nodeos
  • (366)[3.1] Clear expired transactions before snapshot and integrity hash
  • (400)[3.1] Use error log instead of warning log when resource_monitor exceeds threshold
  • (418) [3.1] bump Leap to release/3.1.3
  • (428)[3.1] CPack: fix separator in depends field of debian dev pacakge


Full Changelog: v3.1.2...v3.1.3

Leap v3.2.0-rc1

07 Oct 20:34
05fda58
Compare
Choose a tag to compare
Leap v3.2.0-rc1 Pre-release
Pre-release

Release 3.2.0 includes a new unified command-line interface (CLI) tool called leap-util to support users operating Leap nodes, a significant number of new cleos sub-commands, and various performance enhancements. A large portion of this release is a series of backported PRs from previous releases of EOSIO.

Leap v3.2.0-rc1 Release Notes

New features

New leap-util program

PRs

  • (150) [3.2] Build framework for leap-util


The nodeos program is meant to be run as a daemon. Over time, however, nodeos has collected various functionalities that are useful to Leap node operators, which are invoked by executing the nodeos program which then completes the desired task and then immediately exits the nodeos process. Since nodeos was designed as a daemon rather than a CLI tool like cleos, the interface to invoke these functions within the nodeos program is clunky compared to the hierarchical sub-command interface of cleos.

However, these functions are meant for Leap node operators and are closely tied to the nodeos executable. The program cleos is intended as tool for a more general audience that includes users who interact with servers running nodeos with public interfaces serving its API but do not necessarily run nodeos themselves. Dumping all that functionality into cleos would clutter its interface and be a distraction for the intended audience of cleos.

Furthermore, the Leap package comes with additional programs like eosio-blocklog which provide additional functionality that is relevant to Leap node operators but is not part of nodeos.

This release introduces a new program called leap-util. The program leap-util is intended to be a unified tool to capture all the functions that would benefit Leap node operators specifically and which are not appropriate to include in nodeos given how nodeos is intended to be used as a daemon. It uses a command-line interface of hierarchical sub-commands familiar to users of cleos.

The scope of leap-util includes all of the functionality provided by eosio-blocklog (which now makes the eosio-blocklog program redundant) and will, over time, include additional functions: some currently in nodeos (that really do not belong in nodeos); and others which are completely new capabilities that haven't existed in prior EOSIO or Leap releases in any form.

For the MVP of leap-util introduced in this release, the following features are supported:

  • CLI11 command-line parsing library with autocompletion
  • eosio-blocklog full functionality via sub-command block-log
  • Retrieving chainbase build environment information via sub-command chain-state

Enhancements to cleos

Autocomplete support

PRs

  • (150) [3.2] Build framework for leap-util


The enhancements to the CLI11 library to support autocomplete for the new leap-util program have also made it possible for cleos to also support autocomplete since it shares the same enhanced CLI11 library to parse its command-line arguments.

HTTP/1.1 support for cleos

PRs

  • (mandel#533) [3.2] cleos Http 1.1 support and improves response handling
  • (mandel#630) [3.2] Allow HTTP-RPC with empty response


In some scenarios involving advanced cloud stacks, cleos was being rejected by gateways or proxies with HTTP status 426. The HTTP 426 Upgrade Required error response code indicates that the server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol. The server sends an Upgrade header with this response to indicate the required protocol(s). This update also improves cleos handling of error codes from nodeos; specifically around use of --print-response.

cleos validate signatures sub-command

PRs

  • (mandel#500) [3.2] Backport of the cleos validate signatures


This sub-command takes a signed transaction, validates the signatures on it, and outputs a JSON array of the recovered public keys.

cleos validate signatures <json_file_of_transaction>

Example:

$ cleos create account -j -d --json-file t eosio kevinh EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
{
  "expiration": "2022-06-23T00:50:08",
  "ref_block_num": 4714,
  "ref_block_prefix": 3530990,
  "max_net_usage_words": 0,
  "max_cpu_usage_ms": 0,
  "delay_sec": 0,
  "context_free_actions": [],
  "actions": [{
      "account": "eosio",
      "name": "newaccount",
      "authorization": [{
          "actor": "eosio",
          "permission": "active"
        }
      ],
      "data": "0000000000ea305500000000b4e9b68201000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf0100000001000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf01000000"
    }
  ],
  "transaction_extensions": [],
  "signatures": [
    "SIG_K1_K4ewr6ZLtiWABNKjEhWzXkfgiPdhpF2nKvGz9NKAGaZwtpKdBP6FBXrzKDpuiqEVfh5tZ4GAd4FcFZK4ysMf7NcgtreKfK"
  ],
  "context_free_data": []
}
$ cleos validate signatures <t>
info  2022-06-23T00:49:48.284 cleos     main.cpp:2690                 operator()           ] grabbing chain_id from nodeos
[
  "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
]

Add support for authority structure in cleos system newaccount sub-command

PRs

  • (mandel#543) [3.2] Add authority structure to cleos system newaccount


It is now possible to specify an authority structure (encoded as JSON) with cleos system newaccount for the owner or active authorities to use for the newly created account. It still remains possible to specify the single public key and single permission reference shorthands in place of the full authority structure.

Example

$ cleos system newaccount eosio testtesttest '{"threshold": 1, "keys":[{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV", "weight":1}], "accounts":[{"permission":{"actor":"eosio.prods", "permission":"active"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.major"},"weight":1},{"permission":{"actor":"eosio.prods", "permission":"prod.minor"},"weight":1}],"waits":[]}' --stake-net "1.0000 EOS" --stake-cpu "1.0000 EOS" --buy-ram-kbytes 4

cleos get supported_protocol_features and system activate sub-commands

PRs

  • (mandel#663) [3.2] cleos: add get supported_protocol_features and system activate subcommands


The sub-commands get supported_protocol_features and system activate were added to cleos so that protocol features can be activated by using their names and feature digests are no longer needed.

A user can now use get supported_protocol_features to find a list of supported feature names. The command description was cleaned up and PREACTIVATE_FEATURE was removed because it is not possible to activate it using activate action from eosio.boot (RPC schedule_protocol_feature_activations must be used).

  1. Find supported protocol features
$ cleos get supported_protocol_features
ONLY_LINK_TO_EXISTING_PERMISSION
FORWARD_SETCODE
WTMSIG_BLOCK_SIGNATURES
GET_BLOCK_NUM
REPLACE_DEFERRED
NO_DUPLICATE_DEFERRED_ID
RAM_RESTRICTIONS
WEBAUTHN_KEY
BLOCKCHAIN_PARAMETERS
DISALLOW_EMPTY_PRODUCER_SCHEDULE
CRYPTO_PRIMITIVES
ONLY_BILL_FIRST_AUTHORIZER
RESTRICT_ACTION_TO_SELF
GET_CODE_HASH
ACTION_RETURN_VALUE
CONFIGURABLE_WASM_LIMITS2
FIX_LINKAUTH_RESTRICTION
GET_SENDER
  1. Activate a protocol feature
$ cleos system activate WTMSIG_BLOCK_SIGNATURES
executed transaction: 667479cd2280739b21b925c1c9cddc2d8dc46626f0ecc61173aec5f092431c61  128 bytes  179 us
#         eosio <= eosio::activate              {"feature_digest":"299dcb6af692324b899b39f16d5a530a33062804e41f09dc97e9f156b4476707"}
warn  2022-07-16T01:51:13.001 cleos     main.cpp:665                  print_result       warning: transaction executed locally, but may not be confirmed by the network yet

cleos get consensus_parameters sub-command

PRs

  • (mandel#692) [3.2] Add chain api get_consensus_parameters


A new sub-command get consensus_parameters has been added to cleos to retrieve consensus parameters.

cleos --sign-with & --signature options

PRs

  • (mandel#547) [3.2] Backport cleos transaction signature keys
  • (mandel#674) [3.2] Backport: allow multiple signatures in cleos command “push transaction”


Added --sign-with <public key> or --sign-with [ <public key 1>, <public key 2>, ... ] option to cleos options that generate a transaction. When specified, cleos will use the provided public keys instead of querying nodeos for the keys required for signing the transaction.

Added `--signature...

Read more

Leap v3.1.2

06 Oct 13:57
0b64f87
Compare
Choose a tag to compare

This patch release contains a bug fix, several test fixes, and documentation updates.

Leap v3.1.2 Release Notes

Bug fix

Transaction de-dup list discrepancy replaying from state or snapshot

PRs

  • (273) [3.1] Fix replay to correctly add trxs into the de-dup list


When replaying a block log, the transactions with expirations equal to the last irreversible block time were not added to the trx de-dup list. This created a difference in the de-dup list vs starting from state or a snapshot. This update now includes these transactions.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (218) [3.1] Fix nodeos_retry_transaction_test.py
  • (211) [3.1] when uploading failure logs, ignore missing files
  • (226) [3.1] Test fix: wait for system init to be in block
  • (238) [3.1] Sync docs with main [docs]
  • (224) [3.1] updated trace_api openapi documentation [docs]
  • (245) [3.1] Remove #pragma(s) to ignore warnings
  • (249) [3.1] Increase keosd http-max-response-time-ms for tests
  • (273) [3.1] Fix replay to correctly add trxs into the de-dup list


Full Changelog: v3.1.1...v3.1.2

Leap v3.1.1

22 Sep 21:26
5810297
Compare
Choose a tag to compare

This patch release contains several bug fixes.

Leap v3.1.1 Release Notes

Bug fixes

Change to cleos exit status on failed trx processing

PRs

  • (199) [3.1] Update cleos to return an error code on failed trx processing


The behavior of cleos' exit status for failed transactions has changed in 3.1.1 to more closely align with behavior in previous EOSIO 2.0 releases. In Leap 3.1.0, cleos would return a 0 exit status on a failed transaction and require the caller of cleos to inspect the JSON output to determine that a transaction has failed. In Leap 3.1.1, similar to EOSIO 2.0, cleos' exit status will be non-zero for transaction failures.

Update subjective CPU billing to use uint64_t instead of uint32_t

PRs

  • (124) [3.1] Allow for larger subjective CPU billing amounts


Subjective billing was previously utilizing uint32_t for duration in microseconds, which only allowed for 1.2 hours before wrapping and returning to zero. If an account had over 1.2 hours of CPU extra, subjective CPU would never be applied, which was directly observed on WAX where waxptreasury subjective CPU wrapped. This has been partially attributed to instances of high CPU usage on that network. To resolve, this value has been updated to match objective billing, which utilizes uint64_t.

Race condition causing failure to sync on startup

PRs

  • (55) [3.1] Fix failure to sync on startup


Leap 3.1.0 included an attempted fix for block producers stuck in a coma state. However, the fix was a bit too aggressive and introduced a race-condition on startup syncing. This change reverts the aggressive reset of syncing from LIB instead of HEAD for every call to start_sync. Now it instead restarts syncing from LIB only when unlinkable blocks causes a connection to be closed.

Improved validation for set_whitelist_blacklist, add_greylist_accounts and remove_greylist_accounts

PRs

  • (113) [3.1] validate input of set_whitelist_blacklist, add_greylist_accounts and remove_greylist_accounts


A lack of input validation for set_whitelist_blacklist, add_greylist_accounts and remove_greylist_accounts was introducing troubleshooting issues. Our current solution is to ensure at least one optional parameter is present in a RPC call.

Further details on changes since last release

Contributors

Special thanks to the contributors that submitted patches for this release:

Full list of changes since last release

PRs

  • (56) [3.1] add a final job that passes if all tests pass making it easier to branch protect on checks
  • (63)[3.1] fix a number of issues with http-max-bytes-in-flight-mb configuration
  • (69)[3.1] Fix python format issue that caused test to fail
  • (55)[3.1] Fix failure to sync on startup
  • (72)[3.1] Fix crash on startup if port already in use
  • (85)[3.1] patch pinned build's boost 1.70 to fix websocket defect
  • (99)[3.1] add CLI11 license to install
  • (106)[3.1] Fix test failure due to trx hitting near end of block production time
  • (113)[3.1] validate input of set_whitelist_blacklist, add_greylist_accounts and remove_greylist_accounts
  • (124)[3.1] Allow for larger subjective CPU billing amounts
  • (128)[3.1] Test: verify on the correct fork before verifying trx status
  • (135)[3.1] net_plugin fix startup issue when peer does not have requested blocks
  • (155)[3.1] always overwrite old downloads in pinned build script
  • (165)[3.1] use a temp dir for release-build test as it can leak creation of config.ini in to default location
  • (179) [3.1] pinned_build.sh: make relative path work
  • (183)[3.1] trx_finality_status_forked_test fix
  • (194)[3.1] promote ship log recovery logging from dlog to ilog
  • (199)[3.1] Update cleos to return an error code on failed trx processing


Full Changelog: v3.1.0...v3.1.1

Leap v3.1.0

23 Aug 22:42
v3.1.0
3c9661e
Compare
Choose a tag to compare

Release 3.1.0 includes protocol upgrades enabling:

  • contracts to get the current block number and the hash of any contract deployed on an account;
  • return values from actions which are accessible from the action trace;
  • additional ability to configurable consensus parameters including increasing various limit enforced by the WebAssembly VM;
  • and, access to various natively implemented cryptographic functions from contracts.

This release also includes many other new features including:

  • a new transaction submission API endpoint with full trace of a transaction failure and automatic nodeos-mediated retry;
  • nodeos-mediated cache of transaction finality statuses along with a new API endpoint to query the finality status of a transaction;
  • the ability to request a nodeos computation of transaction costs without committing the transaction;
  • the addition of new options for subjective billing;
  • automatic pruning of old entries in block and state_history_plugin (SHiP) logs;
  • and, much more.

Leap v3.1.0 Release Notes

Protocol changes

Action return values

A new protocol feature ACTION_RETURN_VALUE has been introduced which upon activation will make the host function set_action_return_value accessible to contracts. The set_action_return_value allows a contract to set a binary blob as the return value for the action. The last set value, if any, at the time the action completes will be used as the return value of the action which is stored in the action trace but also committed to within the action Merkle tree whose root is stored in the block header. ABI support allows for interpreting this binary blob as a structure similar to how it is done for the action input arguments.

The maximum allowed size for the binary blob for each action is enforced by the new blockchain parameter max_action_return_value_size which defaults to 256 bytes.

Note that while an off-chain client can access the action return value, a contract calling another contract via an inline action has no way to access the return value of the inline action.

Additional configurability of consensus parameters

A new protocol feature BLOCKCHAIN_PARAMETERS provides an alternative extensible mechanism to configure the existing blockchain parameters. Any new blockchain parameters, including the max_action_return_value_size parameter introduced with the ACTION_RETURN_VALUE protocol feature, are retrieved or modified only through this new mechanism to access the values of the parameters. The new mechanism consists of consists of getter and setter host functions, get_parameters_packed and set_parameters_packed respectively, which are made accessible only to privileged contracts upon activation of the BLOCKCHAIN_PARAMETERS protocol feature.

Additionally, another new protocol feature CONFIGURABLE_WASM_LIMITS2 provides a mechanism to adjust limits of the WebAssembly VM that were previous hard-coded. This mechanism consists of consists of getter and setter host functions, get_wasm_parameters_packed and set_wasm_parameters_packed respectively, which are made accessible only to privileged contracts upon activation of the CONFIGURABLE_WASM_LIMITS2 protocol feature.

Get code hash from within contracts

A new protocol feature GET_CODE_HASH has been introduced which upon activation will make the host function get_code_hash accessible to contracts. The get_code_hash host function allows any contract to specify the name of an account and then get back the number of times contract code was deployed to that account and the SHA256 hash of the contract code currently deployed on the account.

Host functions to accelerate crypto primitives

A new protocol feature CRYPTO_PRIMITIVES has been introduced which upon activation will make 7 new host functions accessible to contracts which are all related to cryptographic computations.

While in theory all of these cryptographic computations could be implemented in WebAssembly code if the transaction was given sufficient time to execute before timing out, leveraging these new host functions may allow for significantly reducing the time it takes to execute the computations because the computations are carried out in native implementation of the host executable. This means some cryptographic functions now become practically accessible to contracts even with typical transaction deadlines in production blockchains, and some others continue to remain accessible but at a lower CPU cost.

In particular, all of these new host functions serve to reduce CPU costs of executing the cryptographic functions available in EVM precompiled contracts.

Arbitrary-precision exponentiation under modulo

Activation of the CRYPTO_PRIMITIVES protocol feature introduces the mod_exp host function which enables modular exponentiation with arbitrary-precision numbers.

Support for the alt_bn128 elliptic curve

Activation of the CRYPTO_PRIMITIVES protocol feature introduces the following three host functions that support elliptic curve math involving the alt_bn128 elliptic curve:

  • alt_bn128_add: Point addition on the alt_bn128 elliptic curve.
  • alt_bn128_mul: Scalar multiplication on the alt_bn128 elliptic curve.
  • alt_bn128_pair: Bilinear function on groups on the alt_bn128 elliptic curve.

These host functions can support implementations that verify zkSNARKs.

ECDSA uncompressed public key recovery for the secp256k1 elliptic curve

The protocol already supported ECDSA public key recovery for the secp256k1 elliptic curve (and also for the secp256r1 elliptic curve) through the recover_key host function. However, that host function has two limitations. First, it aborts the transaction if an invalid signature is presented rather than returning a failure condition to the caller. Second, it returns the recovered public key in compressed format. And going from a compressed to uncompressed public key requires elliptic curve math which involves compiling in an elliptic curve library into the contract, thus bloating the contract size and increasing CPU time for ECDSA uncompressed public key recovery.

Activation of the CRYPTO_PRIMITIVES protocol features introduces the k1_recover host function which addresses both limitations of recovery_key mentioned above. However, it has its own limitation of only supporting the secp256k1 elliptic curve. There is currently no host function that returns an uncompressed public key from ECDSA recovery using the secp256r1 elliptic curve.

Additional support for hash functions

Activation of CRYPTO_PRIMITIVES protocol feature introduces the following two host functions:

  • sha3: This host function computes the SHA3-256 hash of an arbitrary byte string. Both the NIST and Keccak variants are supported.
  • blake2_f: This host function implements the compression function F used in the BLAKE2 cryptographic hashing algorithm.

Get current block number from within contracts

A new protocol feature GET_BLOCK_NUM has been introduced which upon activation will make the host function get_block_num accessible to contracts. The get_block_num host function returns the block number (aka block height) of the current block.

New features

New transaction submission API

PRs

  • (mandel#79) Transaction retry feature
  • (mandel#88) Many Transaction Long Running Test
  • (mandel#89) Add new transaction retry integration test
  • (mandel#116) Add docs for transaction retry
  • (mandel#173) Implement return failure traces
  • (mandel#809) [3.1] Increase default transaction-retry-max-expiration-sec from 90 to 120


New chain_api_plugin endpoint:

  • /v1/chain/send_transaction2(send_transaction_params)

    struct send_transaction2_params {
        bool return_failure_trace = true; ///< Embed transaction exceptions into the returned transaction trace
        bool retry_trx = false; ///< request transaction retry on validated transaction
        std::optional<uint16_t> retry_trx_num_blocks{}; ///< if retry_trx, report trace at specified blocks from executed or lib if not specified
        fc::variant transaction; ///< same format as send_transaction
    };

This new transaction submission API supports returning the full trace of a failed transaction and automatic nodeos-mediated retry if enabled on the node.

When transaction retry is enabled on an API node, it will monitor incoming API transactions and ensure they are resubmitted additional times into the P2P network until they expire or are included in a block.

⚠️ Warning: Full failure traces are now returned by default instead of exceptions. Be careful to not confuse a returned trace as an indication of speculative execution success. Verify receipt and except fields of the returned trace.

New configuration args for nodeos:

  • transaction-retry-max-storage-size-gb
    • "Maximum size (in GiB) allowed to be allocated for the Transaction Retry feature. Setting above 0 enables this feature."
  • transaction-retry-interval-sec (defaults to 20)
    • "How often, in seconds, to resend an incoming transaction to the P2P network if not seen in a block."
  • transaction-retry-max-expiration-sec (defaults to 120)
    • "Maximum allowed transaction expiration for retry transactions, will retry transactions up to this value."
  • p2p-dedup-cache-expire-time-sec (defaults to 10)
    ...
Read more