Skip to content

Version 1.2.10 (Mainnet + Testnet + Stagenet)

Compare
Choose a tag to compare
@waves-jenkins waves-jenkins released this 12 Aug 15:40

In this release

This release is accumulation of all previous 1.2.x releases. Now it's available for Mainnet.
After the activation of the feature #​15 all Protocol changes become available.

Below you can find the list of only major changes comparing to 1.1 release. The full list of changes can be found in the documentation.

Protocol changes

  • Improved the mechanism for generating blocks by using VRF (Verifiable random function). This improvement allows withstanding stake grinding attacks, which are used by the attackers to try to increase the probability of generating a block for themselves.
  • Implemented saving failed transactions. Invoke Script transactions and Exchange transactions are saved on the blockchain and a fee is charged for them even if the dApp script or the asset script failed, provided that the sender's signature or account script verification passed and the complexity of calculations performed during script invocation exceeded the threshold for saving failed transactions. More details
  • Changed the scheme for signing the block transactions by the generating node. Previously, the generating node needed to sign the block header along with all transactions. For now, the transactions root hash is added to the header, so it is enough to sign only the header.
  • Implemented binary transaction formats based on protobuf.
  • Minimal interval between blocks is increased from 5 to 15 seconds. Average block time is targeted 60 seconds instead of current ~59 seconds.
  • Implemented the feature of changing the asset name and description. For this means, the Update Asset Info transaction is used.
  • Reduced the minimum fee from 1 to 0.001 WAVES for the Reissue transaction and Sponsor Fee transaction.
  • Implemented the feature of deletion of entries from the account data storage. This action can be performed by the Data transaction or DeleteEntry structure of the Ride language.
  • Changed the orders' price calculation formula. Earlier, when determining the price for assets with different numbers of decimal places, there was a price value size issue. The maximum value depended on the difference of decimal digits of assets. For example, the price for an NFT asset could not exceed 1000 WAVES. The modified formula corrects this problem. Decimal places no longer affect the maximum price.
  • dApp can't call itself with InvokeScript transaction with attached payments. Also dApp can't transfer funds to itself by ScriptTransfer.

Ride improvements

  • Issued version 4 of the Ride Standard library.
  • Enabled processing up to two payments attached to the Invoke Script transaction (previously only one).
  • Added script actions that the callable function of dApp can perform:
  • Changed the complexity of certain built-in functions and operators. Changes are listed in the Built-in Functions article.
  • For the built-in hashing functions blakeb256, keccak256, sha256 and the built-in verification functions rsaVerify, sigVerify the complexity is changed in version 4 along with adding the range of similar functions with different complexity depending on the argument size limit.
  • Added support of list of primitives as a callable function argument.
  • Added built-in functions that verify the zero-knowledge proof zk-SNARK by groth16 protocol: groth16Verify (on the bls12-381 curve) and bn256groth16Verify (on the bn254 curve).
  • Added the ecrecover built-in function that recovers public key from the message hash and the ECDSA digital signature.
  • Added the following built-in functions and operators:
  • Added the Tuple data type.
  • Changed the maximum complexity to 2000 of an account script and verifier function of dApp script for new scripts, regardless of the Standard library version. The maximum complexity of an asset script and callable function of dApp script remains 4000.
  • Changed the maximum data size:
    • String: 32,767 bytes
    • ByteVector: 32,767 bytes (except the bodyBytes field of the transaction structure).

REST API Updates

In the Node 1.2 release, we have some semantic and breaking changes in the API. Please read the following changes very attentively as it can affect your working application when migrating from Node 1.1 API to the Node 1.2 API.

Semantic

  • As failed transactions can be saved in the blockchain so it's not enough to see presence of Invoke Script and Exchange transactions in the blockchain - user needs to check their status. Please see new field "applicationStatus" in methods listed in the full release notes.
  • In the stateChanges of invoke Script transaction user now can find the reason of failure if transaction is failed in the "error" field in the following methods:
    • /debug/stateChanges/address/{address}/limit/{limit}
    • /debug/stateChanges/info/{id}
  • There are new fields for stateChanges of Invoke Script transaction due to new script actions. Now it has the following structure: "stateChanges": { "data": [], "transfers": [], "issues": [], "reissues": [], "burns": [], "sponsorFees": [], "error": {"code": number, "text": string} }
    Affected methods:
    • /debug/stateChanges/address/{address}/limit/{limit}
    • /debug/stateChanges/info/{id}
  • "reference" field in Block v5 corresponds to "id" of the previous block instead of "signature" in Block v4.

Breaking changes

  • Blocks now get by their id instead of signature. Affected methods:
    • /blocks/delay/{id}/{blockNum}
    • /blocks/height/{id}
    • /block/signature
    • /debug/rollback-to/{id}
    • /blocks/child
  • Method /consensus/generationsignature deleted.
  • In /addresses/scriptInfo/{address}/meta agrument list is now listed as an object array.
    Before: "meta": { "callableFuncTypes": { "funcName": { "arg1": string, "arg2": string } } }
    Now: "meta": { "callableFuncTypes": { "funcName": [ { "name": string, "type": string }, { "name": string, "type": string } ] } }
  • There is new transaction Update Asset Info.
  • Invoke Script transaction now can have arguments of List type: { "call": { "function": string, "args": [ ["arg1-item1", "arg1-item2", "arg1-item3"] ] } }
  • Data in account can be deleted by key with Data transaction and Invoke Script transaction. Such an element must have "key" specified, "value" set to null and no "type" field: { "key": string, "value": null }. Can be found in:
    • /blocks/{id}
    • /blocks/address/{address}/{from}/{to}
    • /blocks/at/{height}
    • /blocks/last
    • /blocks/seq/{from}/{to}
    • /debug/stateChanges/address/{address}/limit/{limit}
    • /debug/stateChanges/info/{id}
    • /transactions/address/{address}/limit/{limit}
    • /transactions/info/{id}
  • Exchange transaction v3 can include buy and sell orders in any order: buy/sell or sell/buy.
  • /assets/{assetId}/distribution/{height}/limit/{limit} endpoint returns addresses in a different order. This is caused by internal optimizations.

Improvements

  • /debug/validate - does not require api-key.
  • /assets/details - can request information of several assets at once.
  • Methods /addresses/scriptInfo/{address}, /utils/script/compileCode, /utils/script/estimate return complexity of every annotated function: { "complexity": number, "callableComplexities": { "funcName1": number, "funcName2": number }, "verifierComplexity": number }
  • /addresses/balance can request balances for several addresses for specific height not more than 2000 from current.

Known issues

In the "assetId" and "feeAssetId" fields of transactions, you can specify WAVES only using the null value. An empty string "" is interpreted as asset id. This will be fixed in release 1.2.11.

Update Notes

Rebuild of the state is needed.

To get the actual state for your updated node you have 3 ways:

  1. Remove state and synchronize blockchain during regular node operation [several days]
  2. Remove state and import blockchain from file [several days, faster than 1] (Due to explanation in Known issues section below we don't recommend this method currently)
  3. Download latest blockchain database and apply it [~1-2 hours]

All the new Protocol and Ride features become available with feature 15.

If you are a miner please vote!

Known issues

After importing blockchain from file, node may produce errors "Could not load bloom filter" and "filter is stale" in logs at startup.

While fixing importer tool to store liquid block into leveldb at the end of import we broke the ordered shutdown of the storage subsystem in such way that the node won't load pre-calculated bloom filter upon the subsequent startup.

When starting, the node will check the state and bloom filter consistency, and if there's any discrepancy (e.g. filter was saved at some height which does not match current state height), the node will rebuild all bloom filters. This is a time-consuming process which may take up to 30-60 minutes.

This issue will be fixed in release 1.2.11.

Official pools update notes

Due to presense of breaking changes in the Node's API please migrate your existing projects/applications.

Official nodes pools will be updated to the current version as follows:

SHA256 Checksums

2707807e436f7ac6944a083b6d23dde26e8b8d14903934209f8c9b5078d1976d  grpc-server-1.2.10.tgz
2a9810217fe6f705634961170a6baa6c6e8de2c4ab1b885654b3d167409b8b1b  grpc-server-stagenet-1.2.10.tgz
76394d7905869249b329eb04d16ec494d17f6f1b739bbeb1bae7a56e5dffdb38  grpc-server-stagenet_1.2.10_all.deb
55788cad8954bdad49ac0c80e5b2354affbdfc45300c61f6fa6f98df1f70878e  grpc-server-testnet-1.2.10.tgz
b923356c59e16ea111b5947e292c65c3cab16124bb0161cd6922033486d2677f  grpc-server-testnet_1.2.10_all.deb
16d1d5b038df66333121343c42b7043dee356ef8009f7737b928b6b0ffa124a0  grpc-server_1.2.10_all.deb
6efe164002c37e85f4fdad6756d7f5daeefd7765b4a422d1e83d077029e80781  waves-all-1.2.10.jar
3ec8466b402aaf6fce8f941e91a21ea39270544baad9ef4cbcda77d39949d354  waves-stagenet_1.2.10_all.deb
e8a8982a290b6c890f267dc4010e7377474234640610fbf8004de64c231f9013  waves-testnet_1.2.10_all.deb
4d163f655c92997323c225a96ddf87fde1c9eb28232aff9cff79e4a245a5e7cd  waves_1.2.10_all.deb