Skip to content

Mandel v3.1.0-rc1 Release Notes

Pre-release
Pre-release
Compare
Choose a tag to compare
@jgiszczak jgiszczak released this 15 Jun 04:40
· 652 commits to main since this release
165e031

This is a RELEASE CANDIDATE for version 3.1.0. The latest STABLE release is v2.0.14.

Release 3.1.0-rc1 includes protocol upgrades enabling contracts to get the current block number and to accelerate various cryptographic computation, as well as 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.

Read on for details.

Protocol changes

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.

⚠️ Warning: The behavior of this protocol feature has been changed in later releases. Version 3.1.0-rc1 should not be used in a network that has activated this protocol feature.

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

  • Transaction retry feature (#79)
  • Many Transaction Long Running Test (#88)
  • Add new transaction retry integration test (#89)
  • Add docs for transaction retry. (#116)
  • Implement return failure traces (#173)


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 90)
    • "Maximum allowed transaction expiration for retry transactions, will retry transactions up to this value."
  • p2p-dedup-cache-expire-time-sec (defaults to 10)
    • "Maximum time in seconds to track transaction for duplicate optimization"

New command line options for cleos:

  • --use-old-send-rpc
    • "Use old RPC /v1/chain/send_transaction, rather than new RPC /v1/chain/send_transaction2"
  • -t,--return-failure-trace defaults to true use -t false for previous behavior
    • "Return partial traces on failed transactions"
    • Note: Automation which depends on cleos to return a non-zero value on transaction failure will instead need to parse the traces or use option -t false.
  • --retry-irreversible
    • "Request node to retry transaction until it is irreversible or expires, blocking call"
  • --retry-num-blocks
    • "Request node to retry transaction until in a block of given height, blocking call"

Transaction finality status

PRs

  • Added read only transaction status capability, get_transaction_status, to the Chain API Plugin. Also added support in cleos. (#145)
  • Added Finality Status storage. Added storage for Finality Status feature and using signals_processor to populate. (#81)
  • Added integration tests for finality status. (#189)


New chain_api_plugin endpoint:

  • /v1/chain/get_transaction_status(get_transaction_status_params)

    struct get_transaction_status_params {
        transaction_id_type                id; //transaction id to status
    };
    
    struct get_transaction_status_results {
        string                               state;
        std::optional<uint32_t>              block_number;
        std::optional<chain::block_id_type>  block_id;
        std::optional<fc::time_point>        block_timestamp;
        std::optional<fc::time_point>        expiration;
        uint32_t                             head_number;
        chain::block_id_type                 head_id;
        fc::time_point                       head_timestamp;
        uint32_t                             irreversible_number;
        chain::block_id_type                 irreversible_id;
        fc::time_point                       irreversible_timestamp;
        chain::block_id_type                 last_tracked_block_id;
    };

When transaction finality status is enabled, the status of a transaction in the node, as well as a snapshot of the current chain state, can be queried. If a transaction is not found for the given transaction id, only the chain status fields and a status of "UNKNOWN" will be provided.

New configuration args for nodeos:

  • transaction-finality-status-max-storage-size-gb
    • "Maximum size (in GiB) allowed to be allocated for the Transaction Finality Status feature. Setting above 0 enables this feature."
  • transaction-finality-status-success-duration-sec (defaults to 180)
    • "Duration (in seconds) a successful transaction's finality status will remain available from being first identified."
  • transaction-finality-status-failure-duration-sec (defaults to 180)
    • "Duration (in seconds) a failed transaction's finality status will remain available from being first identified."

New command line options for cleos:

  • get transaction-status <id>
    • "Gets current blockchain state and, if available, transaction information given the transaction id"

Transaction Resource Cost Estimation

PRs

  • Added read only transaction capability, compute_transaction, to the Chain API Plugin. (#86)
  • Improved read only transaction plumbing. (#108)
  • Added compute_transaction functionality (#109)
  • Disabled subjective billing for read-only transactions. (#114)


New chain_api_plugin endpoint:

  • /v1/chain/compute_transaction
    • accepts existing send_transaction_params

Transactions sent to this endpoint will be executed and create a transaction trace, including resource usage, and then will revert all state changes and will not contribute to the subjective billing for the account. If the transaction has signatures, they will be processed, but any failures will be ignored. Transactions which fail will always include the transaction failure trace.

⚠️ Warning: Users with exposed nodes who have enabled the compute_transaction endpoint should implement some sort of throttling to protect from Denial of Service attacks.

New command line options for cleos:

  • --read-only
    • "Specify a transaction is read-only"

Block log & state_history_plugin (SHiP) log pruning

PRs

  • (#342) block log pruning: optionally reduce disk usage of block log file during operation by periodically trimming blocks
  • (#327) ship log pruning: optionally reduce disk usage of ship log files during operation by periodically trimming logs


Two new options block-log-retain-blocks and state-history-log-retain-blocks are available to configure nodeos to periodically prune these logs to the most recent configured blocks. This allows reducing the amount of disk space nodeos uses over time without stopping the node.

Other changes

Upgraded cryptography library libsecp256k1

PRs

  • (#19) replace old libsecp256k1 fork with upstream
  • (#128) replace old libsecp256k1 fork with upstream


The branch of the libsecp256k1 library in use was many years old. The newly adopted version enables significant performance improvements, as well as including bug fixes.

K1 signature key recovery performance improvements:

CPU Previous New
Intel 9600k 50 µs 33 µs
AMD 5950X 51 µs 35 µs

(exact performance numbers will vary depending on hardware, OS, and system load)

The library's own unit tests are now incorporated into the suite of tests executed by Mandel.

Subjective billing improvements

PRs

  • Implemented additional check against account whitelist in subjective billing. (#84)
  • Added "subjective-account-max-failures" option in the Producer Plugin to set the maximum amount of failures allowed per account, per block. (#82)
  • Added "subjective-account-decay-time-minutes" option to the Producer Plugin. It sets the amount of time it takes to restore full subjective CPU to an account. (#90)


Account max failures: During block production, accounts are permitted a set number of failures before their additional transactions are dropped for a given block. This previously hard-coded limit of 3 is now configurable. Also, disable-subjective-account-billing accounts are no longer subjected to this limit.

Decay time: Users are prevented from abuse of transactions by tracking an account's subjective CPU budget. The budget is returned to an account over a period of time known as subjective account decay. This previously hard-coded decay of 24 hours is now configurable.

New configuration args for nodeos:

  • subjective-account-max-failures (defaults to 3)
    • "Sets the maximum amount of failures that are allowed for an account per block"
  • subjective-account-decay-time-minutes (defaults to 1440 (24 hours))
    • "Sets the time to return full subjective CPU for accounts"

New user-defined fields in GELF appender for Graylog

PRs


The GELF appender now supports arbitrary fields and accompanying values in the logging.json configuration file, with some restrictions. Per the GELF specification, user-defined field names must begin with an underscore and contain only letters, numbers, underscores, dashes, and dots. The regular expression against which field names are checked is: ^_[\w\.\-]*$. Beyond the format check, there is also a list of reserved field names which are reserved by the specification or used by nodeos. The list of reserved field names is:

  • _id
  • _timestamp_ns
  • _log_id
  • _line
  • _file
  • _method_name
  • _thread_name
  • _task_name

There is no enforced limit on the length of the field name nor the accompanying value. However, by default, Graylog servers are configured to drop UDP GELF log messages which exceed 128 fragments. The GELF appender limits its payload size to 512 bytes, so field names and values with a combined length of somewhat less than 65536 bytes may result in lost log messages. The GELF protocol allows a maximum of 256 fragments, so a combined length exceeding 131072 bytes will always result in lost log messages. There is also no enforced limit regarding the number of user-defined fields beyond those limits described above.

The Graylog server automatically elides the leading underscore in user-defined fields when displaying them in selectors and in the interface.

New --terminate-at-block option in nodeos

PRs

  • Add terminate-at-block option to nodeos (#144)


Nodeos can be configured to exit once it receives or replays the specified block number, allowing unattended progression to a desired state and enabling easy automation of pre-determined snapshots.

New configuration arg for nodeos:

  • --terminate-at-block (defaults to 0, meaning disabled)
    • "terminate after reaching this block number (if set to a non-zero number)"

This option is only accepted on the command line.

Building, compatibility, and upgrading

New build procedure

The shell scripts previously recommended for building the software have been removed in favor of a build process entirely driven by CMake. Those wishing to build from source are now responsible for installing the necessary dependencies. The list of dependencies and the recommended build procedure are in the README.md file. Instructions are also included for efficiently running the tests.

Ubuntu 18.04, 20.04, and 22.04 are the only build platforms that are supported. Other distributions, compilers, and platforms are known to work. Your mileage may vary.

Snapshot compatibility

This release introduces a new snapshot format. It can still load older snapshot versions. Snapshot versions and compatibility is as follows:

  • v6 is the snapshot format introduced in this release (3.1). It is only compatible with nodeos version 3.1.
  • v5 is a snapshot format from the unsupported EOSIO 2.1 release. Because v5 snapshots can be generated by unsupported software that may have incompatible protocol features activated, it may not generally be possible to load a v5 snapshot into a version 3.1 release of nodeos. However, if the v5 snapshot is of the state of a blockchain that has not activated any protocol features introduced in EOSIO 2.1, then the snapshot can be loaded in nodeos version 3.1.
  • v4 is a snapshot format generated by nodeos version 2.0. It is compatible with nodeos version 3.1.

Network compatibility

Network compatibity means it can accept blocks and transactions over the p2p connection between nodes and will respond to requests for blocks.

This release is network compatible with nodeos version 2.0.

This release may also be network compatible with EOSIO 2.1 assuming the blockchain has not activated any protocol features specific to EOSIO 2.1.

state_history_plugin (SHiP) compatibility

This release is compatible with SHiP logs generated by nodeos version 2.0, but is NOT compatibile with SHiP logs that were written to by EOSIO 2.1.

To accommodate 3.1's new features, changes to the state history ABI were required. Consumers of state history from a 3.1 nodeos must be prepared to handle the following changes.

A new action_trace_v1 and chain_config_v1 will be sent instead of the previous _v0 versions. Remember that your client must be prepared to receive either the v0 or v1 variation since entries in your state history log prior to upgrading to 3.1 will continue to be sent to your client as v0 versions.

These new versions are listed here for convenience but the authoritative definition is the ABI sent over state history's WebSocket upon connection.

action_trace_v1 & chain_config_v1
    {
      "name": "action_trace_v1",
      "fields": [
        {
          "name": "action_ordinal",
          "type": "varuint32"
        },
        {
          "name": "creator_action_ordinal",
          "type": "varuint32"
        },
        {
          "name": "receipt",
          "type": "action_receipt?"
        },
        {
          "name": "receiver",
          "type": "name"
        },
        {
          "name": "act",
          "type": "action"
        },
        {
          "name": "context_free",
          "type": "bool"
        },
        {
          "name": "elapsed",
          "type": "int64"
        },
        {
          "name": "console",
          "type": "string"
        },
        {
          "name": "account_ram_deltas",
          "type": "account_delta[]"
        },
        {
          "name": "except",
          "type": "string?"
        },
        {
          "name": "error_code",
          "type": "uint64?"
        },
        {
          "name": "return_value",
          "type": "bytes"
        }
      ]
    },

  {
    "name": "chain_config_v1",
    "fields": [
      {
        "type": "uint64",
        "name": "max_block_net_usage"
      },
      {
        "type": "uint32",
        "name": "target_block_net_usage_pct"
      },
      {
        "type": "uint32",
        "name": "max_transaction_net_usage"
      },
      {
        "type": "uint32",
        "name": "base_per_transaction_net_usage"
      },
      {
        "type": "uint32",
        "name": "net_usage_leeway"
      },
      {
        "type": "uint32",
        "name": "context_free_discount_net_usage_num"
      },
      {
        "type": "uint32",
        "name": "context_free_discount_net_usage_den"
      },
      {
        "type": "uint32",
        "name": "max_block_cpu_usage"
      },
      {
        "type": "uint32",
        "name": "target_block_cpu_usage_pct"
      },
      {
        "type": "uint32",
        "name": "max_transaction_cpu_usage"
      },
      {
        "type": "uint32",
        "name": "min_transaction_cpu_usage"
      },
      {
        "type": "uint32",
        "name": "max_transaction_lifetime"
      },
      {
        "type": "uint32",
        "name": "deferred_trx_expiration_window"
      },
      {
        "type": "uint32",
        "name": "max_transaction_delay"
      },
      {
        "type": "uint32",
        "name": "max_inline_action_size"
      },
      {
        "type": "uint16",
        "name": "max_inline_action_depth"
      },
      {
        "type": "uint16",
        "name": "max_authority_depth"
      },
      {
        "type": "uint32",
        "name": "max_action_return_value_size"
      }
    ]
  }


Additionally, global_property_v1 has a new binary extension with the wasm_config type, implemented with wasm_config_v0

global_property_v1 & wasm_config_v0
  "name": "global_property_v1",
  "fields": [
    {
      "type": "uint32?",
      "name": "proposed_schedule_block_num"
    },
    {
      "type": "producer_authority_schedule",
      "name": "proposed_schedule"
    },
    {
      "type": "chain_config",
      "name": "configuration"
    },
    {
      "type": "checksum256",
      "name": "chain_id"
    },
    {
      "type": "wasm_config$",
      "name": "wasm_configuration"
    }
  ]
},

"name": "wasm_config_v0",
"fields": [
  {
    "type": "uint32",
    "name": "max_mutable_global_bytes"
  },
  {
    "type": "uint32",
    "name": "max_table_elements"
  },
  {
    "type": "uint32",
    "name": "max_section_elements"
  },
  {
    "type": "uint32",
    "name": "max_linear_memory_init"
  },
  {
    "type": "uint32",
    "name": "max_func_local_bytes"
  },
  {
    "type": "uint32",
    "name": "max_nested_structures"
  },
  {
    "type": "uint32",
    "name": "max_symbol_bytes"
  },
  {
    "type": "uint32",
    "name": "max_module_bytes"
  },
  {
    "type": "uint32",
    "name": "max_code_bytes"
  },
  {
    "type": "uint32",
    "name": "max_pages"
  },
  {
    "type": "uint32",
    "name": "max_call_depth"
  }
]


State file compatibility

This release is not compatible with the state files generated by earlier release. Please use a compatible snapshot file generated from an earlier version of nodeos.

Block log compatibility

This release is compatible with block logs generated by nodeos version 2.0.

This release is NOT compatible with block logs generated by EOSIO 2.1.

Upgrading from prior releases

Generate a snapshot of the state from an earlier version of nodeos (e.g. 2.0). See snapshot compatibiltiy section for other snapshot formats that can be used.

Remove the state file used by the node you are upgrading. If using EOSIO 2.1, you will also need to remove the SHiP and blocks logs. But SHiP and block logs can remain if upgrading from nodeos version 2.0.

Start nodeos with the snapshot. Afterwards, you can start and stop nodeos as usual.

Deprecations, removals, and dropped support

Deprecations

ABI conversion APIs deprecated

The APIs /v1/chain/abi_bin_to_json and /v1/chain/abi_json_to_bin have been deprecated as of this release and will be fully disabled or removed in a future release.

Removals

Build scripts removed

As mentioned earlier, the build scripts were removed. See README.md for instructions to build.

history_plugin removed

The history_plugin was deprecated as part of the v1.2.0 release and is fully removed as of this release.

Nodes which were being started with --plugin eosio::history_plugin will need to be migrated to --plugin eosio::trace_api_plugin or --plugin eosio::state_history_plugin.

mongo_db_plugin removed

The mongo_db_plugin was deprecated as part of the v1.8.0 release and is fully removed as of this release.

Reversible block database removed

A chainbase database is no longer used to store the active set of reversible blocks during nodeos operation. The reversible blocks continue to still be stored in the fork databasae on shutdown.

Note: Any existing configuration for the reversible block Chainbase database should be removed from the config.ini file and any scripts.

reversible-blocks-db-size-mb, reversible-blocks-db-guard-size-mb, fix-reversible-blocks, import-reversible-blocks, and export-reversible-blocks

Dropped support

Ubuntu 16.04, Centos, and macOS

As mentioned earlier, the only officially supported platforms are Ubuntu 18.04, 20.04 and 22.04. All others have been removed from binary package support and/or code level changes.

Developers using cleos, nodeos, etc. should look at DUNE which supports Windows 10 and 11, macOS, and any Linux that supports Docker.

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) net_plugin transaction dedup cache handling
  • (#59) Track storage for multiple new features
  • (#62) Merging latest main commits into feature branch
  • (#63) Merge main 3 17 2022
  • (#71) Merge main 03 23 2022
  • (#72) Added classes for processing controller trx and block signals
  • (#75) Revert "Added classes for processing controller trx and block signals"
  • (#74) Change applied_transaction signal signature and other changes
  • (#76) Added classes for processing controller trx and block signals
  • (#80) Update fc to head of fc main branch
  • (#84) ENFS-43: Add Configured Whitelist to Ignore Number of Failures
  • (#79) Transaction retry feature
  • (#87) Take advantage of tracked_storage erase that takes an iterator
  • (#88) Many Transaction Long Running Test
  • (#86) Added capability for read-only txns / added compute_transaction to chain api
  • (#94) fix cmake CMP0115 warning by being explict about config.hpp location
  • (#96) fix compile on recent glibc: SIGSTKSZ not always a constant expression
  • (#97) add --no-auto-keosd to cli_test
  • (#98) remove BOOST_ASIO_HAS_LOCAL_SOCKETS ifdefs
  • (#101) add some needed includes to build with boost 1.79 beta
  • (#102) eliminate prolific gperftools copy paste
  • (#103) grab bag of misc WASM unit tests for old defects
  • (#90) Configurable subjective account decay time
  • (#105) remove unused wabt submodule
  • (#104) Split wasm spec tests into two jobs so they run quicker.
  • (#95) remove gettext/libintl dependency
  • (#106) Fixes for non-determinism in dfuse tests
  • (#107) Merge main 2022-04-14
  • (#82) Configurable max_failures_per_account
  • (#81) Adding Finality Status storage
  • (#89) Add new transaction retry integration test
  • (#108) Ignore signature verification for compute_transaction / integration tests
  • (#109) Added compute_transaction functionality
  • (#112) Remove requirement for disable-api-persisted-trx to be true
  • (#114) Don't apply subjective billing to read-only transactions
  • (#116) Add docs for transaction retry
  • (#119) Improve integration test stability
  • (#120) compute_transaction & send_transaction2 cleanup
  • (#128) replace old libsecp256k1 fork with upstream & remove GMP dependency
  • (#124) Transaction Resource Cost Estimation Docs Update
  • (#133) remove long disabled faucet_testnet_plugin
  • (#135) Add unit test to verify that the description digests of protocol features are correct
  • (#132) Remove unused code
  • (#129) improve reliability of two forking unit tests
  • (#127) Update memory_size() calculation for tracked_transaction
  • (#136) Add tests for multi_index iterator cache across notifies
  • (#134) another grab bag of misc unit tests
  • (#142) Implement return failure traces.
  • (#141) Added integration tests for subjective billing
  • (#150) Revert "Implement return failure traces."
  • (#145) Add get_transaction_status to chain_plugin
  • (#149) Merge main 04 27 2022
  • (#61) API+ features for Mandel 3.1
  • (#137) remove build scripts & b1's cicd
  • (#155) get_producers tests
  • (#159) Fix merge issue, change of args to constructor.
  • (#138) Remove mongo_db_plugin
  • (#140) port python changes from "test framework archiving"
  • (#143) port "Ship delay error fix" test changes
  • (#153) Better error message on failure to nodeos and keosd from cleos
  • (#146) refactor release-build-test to eliminate sole usage of jq
  • (#144) Add terminate-at-block option to nodeos
  • (#164) Subjective Billing Whitelisting Dev Docs
  • (#122) Remove OpenSSL 1.0 support; add OpenSSL 3.0 support
  • (#160) increase HTTP server's default maximum POST size to 2MB
  • (#161) Updates to get_transaction_status handling.
  • (#171) stop setting CXX_FLAGS with both C & CXX flags
  • (#165) remove std::iterator<> usage
  • (#177) remove unused checktime & call depth wasm injection
  • (#173) Implement return failure traces
  • (#179) Simplify error message from get_transaction_status
  • (#181) Rename last_tracked_* to earliest_tracked_*
  • (#185) fixing flakiness in voting and forked chain tests
  • (#180) Remove reversible db
  • (#187) fixup behavior of force-all-checks & disable-replay-opts to match likely expectation
  • (#174) small tweak to eos-vm to build with gcc 12
  • (#186) Add RPC /v1/chain/get_block_info
  • (#202) Spelling correction in transaction_context::init()
  • (#131) Fix strict aliasing violations in database_utils.hpp
  • (#130) Fix pause timer calculation.
  • (#196) Do not limit transaction deadline if subjective billing disabled for account
  • (#192) backport decompressed_size_under_limit test case
  • (#203) Remove test consensus-validation-malicious-producers.py
  • (#190) Backport of transaction logging from 2.2
  • (#213) increment version to 3.1.0-dev
  • (#200) Add message body check (400) for http calls
  • (#189) Rework signal handling
  • (#224) Fix transaction retry issue
  • (#230) Increase http-max-response-time-ms for tests
  • (#226) Transaction logging fix
  • (#223) Backported code to preemptively create wallet dir
  • (#233) cleaned up handling of failed startup from snapshot
  • (#169) Backport eosio/eos 2.1 version of net_plugin
  • (#156) net_plugin call accept_transaction on net thread
  • (#250) Fix test_trx_finality_status_processing test
  • (#253) Fix spelling error in cleos #178
  • (#251) escape ']' character in deep mind unit test regexes
  • (#252) remove bash4 lowercase operation and just use python for release-build test
  • (#234) Rewrite ship_tests's ship_client to C++; remove node & npm as dependencies for a test
  • (#247) look for openssl 3.0 & 1.1 by default on macos
  • (#249) make sure subjective_billing_test is properly marked as NP test
  • (#228) Backport some misc bugfixes from EOSIO/develop-boxed
  • (#255) Backport fix for push_block
  • (#257) remove more unused wasm injection code
  • (#258) bump fc submodule to version with variadic fc::fwd
  • (#162) Freebsd build support
  • (#231) Remove history_plugin
  • (#267) Backport: Reduce logging for failed http plugin calls
  • (#268) trace history log messages should print nicely in syslog
  • (#270) Remove unnecessary strlen
  • (#271) Apply 400 check to db_size
  • (#272) Default to returning WASM as returning WAST has been deprecated.
  • (#273) Fix duplicate symbol error in trace_api::configuration_utils
  • (#269) Fix "cleos net peers" command error
  • (#276) remove left over unused and unneeded nodejs search in cmake file
  • (#266) Backport: chain api plugin / get_activated_protocol_features modifications
  • (#275) cleos remove wasm to wast conversion
  • (#278) Added earliest available block to get_info
  • (#283) Fix all python tests to correctly report failure exit code on failure including any exception thrown.
  • (#281) Add integration test for nodeos shutdown
  • (#287) Fix test error log statement and import
  • (#306) stop using spaces in dummy CMAKE_BUILD_TYPE for abieos
  • (#305) Update to most recent version of the fc library.
  • (#311) Backported exit on fork_db corrupted
  • (#312) Backport of unpacking packed transaction in cleos
  • (#308) Explicit Values for builtin_protocol_feature_t enum
  • (#313) Bump up successful trx cache expiration to 60s in integration test.
  • (#314) fix in abieos and update submodule
  • (#295) Refactor unapplied transaction queue
  • (#299) Apply 3-strike rule for complete block production
  • (#302) Add linked permissions to get_account
  • (#288) port over resource monitor plugin
  • (#320) add needed thread include
  • (#322) resolve "clearing an object of non-trivial type" warning in WAVM
  • (#323) add more --no-auto-keosd flags to cli_test
  • (#329) Add hash verification to get_activated_protocol_features test
  • (#325) resolve a few warnings including a chainbase one that generated lots of spam
  • (#324) don't run appbase's signal catching thread detached after main() exits
  • (#330) Update fc
  • (#260) Cherry picked updates to messages
  • (#277) change "make install" to only install non-dev files; add "make dev-install" to install headers & libraries
  • (#279) add cpack support to easily build .deb & .rpm packages
  • (#333) remove old unused database-hugepage-path config option
  • (#336) disable resmon shutdown for plugin_http_api_test
  • (#338) trace_api_plugin eosio/eos 2.1 compatibility
  • (#184) Fix large stack usage and add tests
  • (#339) remove IMPORTANT.md
  • (#309) Update Bios Boot Tutorial
  • (#347) Modified parameter to compute_transaction
  • (#348) fix path for eosio.token.abi in tests
  • (#326) mark the deb & rpm packages as conflicting with 'eosio' package
  • (#349) add missing BOOST_AUTO_TEST_SUITE_END() to chain_plugin_tests.cpp
  • (#317) ARM64 Builds and Pinned Builds
  • (#353) build pinned LLVM in release mode
  • (#350) Bump snapshot version to v6
  • (#365) add platform, platform version, and architecture to package file name
  • (#368) change which() for public_key & signature to return size_t silencing some warnings
  • (#366) pack a separate "dev" package containing headers and libraries for native contract unit testing
  • (#371) tweak OC with WASM_LIMITS protocol feature
  • (#377) Suppress "End of file" error reporting in SHiP
  • (#378) use sh instead of bash for cmake unittests
  • (#383) Fix non-determinism issues with deep-mind logger in tests
  • (#316) Add host functions to support EVM
  • (#342) block log pruning: optionally reduce disk usage of block log file during operation by periodically trimming blocks
  • (#327) ship log pruning: optionally reduce disk usage of ship log files during operation by periodically trimming logs
  • (#385) Fix clang compiler error
  • (#388) remove ccache from deps listed in README
  • (#379) Release 3.1.0-rc1


Full Changelog: v3.0.5-rc1...v3.1.0-rc1