Skip to content

Version 1.4.0 (Stagenet)

Pre-release
Pre-release
Compare
Choose a tag to compare
@waves-jenkins waves-jenkins released this 19 Oct 12:26
· 304 commits to version-1.4.x since this release
608d018

Attention! This release is for stagenet only! Not for mainnet/testnet.

In this release

Protocol Enhancements

  • Added support for Ethereum transactions that perform token transfers or dApp script invocations. Thanks to this, MetaMask users can sign transactions and send them to the Waves blockchain. More details
  • Added support for orders with ECDSA signature in Exchange transactions. Thanks to this, users can sign orders with MetaMask. More details
  • Implemented a new transaction type: Invoke Expression transaction that executes the script attached to it.

Ride

  • Issued version 6 of the Ride Standard library.
  • Added a new script type: call script designed to be executed once by an Invoke Expression transaction.
  • Added a built-in variable: i that is available in a call script and contains the Invocation structure.
  • Added the InvokeExpressionTransaction structure that is used to verify an Invoke Expression transaction by smart contracts.
  • Added the fold range of functions, designed to implement operations on a list of values. The functions replace the FOLD<N> macro used in previous versions of the Standard Library.
  • Added the following built-in functions:
  • For the built-in string functions makeString and split added the range of similar functions with different complexity depending on the data size limit. When data size is known in advance, the “cheaper” function can be used.
  • Changed the complexity of certain built-in functions. The complexity is given in the [Ride v6] Built-in functions article.

Node REST API

Breaking Changes

  • Added support for Ethereum transactions that perform token transfers or dApp script invocations. JSON representation of a transaction depends on its content:

    Example transfer by Ethereum transaction
    {
       "type": 19,
       "id": "AAU7gnVCc4G6LrSndTy3qbgnsDT9FTHkhRCRQNDVo52k",
       "fee": 100000,
       "feeAssetId": null,
       "timestamp": 1632300900966,
       "version": 1,
       "chainId": 67,
       "bytes": "0xf8ac86017bc01bcd9001830186a0943353cdb2c6454ad0811f29b632208162037fc22d80b844a9059cbb00000000000000000000000088955b80d3796397c447220793f625a8e47a589400000000000000000000000000000000000000000000000000000000000f424081ada07221e88bbaf6c221faf586766d856d64c66350017f94515c675930b5a38bfe45a05a36e1ab1cc27938c7a962c794b39b68d5a228d2dc987c04916b97246796db23",
       "sender": "3F11ucZTFLBGrY3TpSmWH3tH4iaYRgLVvZV",
       "senderPublicKey": "4NzCXwRd3wKsmrrYrGVBsmuiUu6sVhZNKdvxPqzreCMRftvpXD7jJ19XFdXZqSC63nS59CtjCXXrBfwMspvf8nfs",
       "applicationStatus": "succeeded",
       "payload": {
          "type": "transfer",
          "assetId": null,
          "amount": 100000000,
          "recipient": "3FDztq6huchm3TEbJXNcZE9HeDH3b4qpEoK"
       }
    }
    Example script invocation by Ethereum transaction
    {
       "type": 19,
       "id": "AAU7gnVCc4G6LrSndTy3qbgnsDT9FTHkhRCRQNDVo52k",
       "fee": 500000,
       "feeAssetId": null,
       "timestamp": 1632300900966,
       "version": 1,
       "chainId": 67,
       "bytes": "0xf9014b86017bc121a113018307a12094c811007db5e07a1bd3d91aef1f37bd3010c28d5980b8e4a72afeeb000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000087100000000000000000000000000000000000000000000000000000000000000001ca0fbe876dcb9939c4812d2ef95bb30cd84740e7db96d7959f043152958a101e177a055356f63ccee0a020cd12bc4350e6a888d2ed7967f5ca0fefe773c4a752950ff",
       "sender": "3F11ucZTFLBGrY3TpSmWH3tH4iaYRgLVvZV",
       "senderPublicKey": "4NzCXwRd3wKsmrrYrGVBsmuiUu6sVhZNKdvxPqzreCMRftvpXD7jJ19XFdXZqSC63nS59CtjCXXrBfwMspvf8nfs",
       "applicationStatus": "succeeded",
       "payload": {
          "type": "invocation",
          "dApp": "3FEVXxz656kaC24vh3r25eXNY64QSqX9ZFg",
          "payment": [],
          "call": {
             "function": "depositRef",
             "args": []
          },
          "stateChanges": {
             "data": [],
             "transfers": [],
             "issues": [],
             "reissues": [],
             "burns": [],
             "sponsorFees": [],
             "leases": [],
             "leaseCancels": [],
             "invokes": []
          }
       }
    }

    Features of the Ethereum transaction JSON representation:

    • sender contains Waves address base58 encoded,
    • senderPublicKey is 64 bytes base58 encoded,
    • bytes contains the entire Ethereum transaction bytes, including the ECDSA signature, HEX encoded.
    • proofs array is missing.
  • Added support for Exchange transactions containing an order (or both orders) with an ECDSA signature.

    Example order with ECDSA signature.
    "order1": {
       "version": 4,
       "id": "2Wx5ctbaU9GqQYXtEkqsin6drfu6SuADdwAyvuYnwai9",
       "sender": "3FzoJXUesFqzf4nmMYejpUDYmFJvkwEiQG6",
       "senderPublicKey": "5BQPcwDXaZexgonPb8ipDrLRXY3RHn1kFLP9fqp1s6M6xiRhC4LvsAq2HueXCMzkpuXsrLnuBA3SdkJyuhNZXMCd",
       "matcherPublicKey": "9BUoYQYq7K38mkk61q8aMH9kD9fKSVL1Fib7FbH6nUkQ",
       "assetPair": {
          "amountAsset": "5fQPsn8hoaVddFG26cWQ5QFdqxWtUPNaZ9zH2E6LYzFn",
          "priceAsset": null
       },
       "orderType": "buy",
       "amount": 1,
       "price": 100,
       "timestamp": 1,
       "expiration": 123,
       "matcherFee": 100000,
       "signature": "",
       "proofs": [],
       "matcherFeeAssetId": null,
       "eip712Signature": "0xe5ff562bfb0296e95b631365599c87f1c5002597bf56a131f289765275d2580f5344c62999404c37cd858ea037328ac91eca16ad1ce69c345ebb52fde70b66251c"
    }

    Features JSON representation of an order with ECDSA signature:

    • sender contains Waves address base58 encoded,
    • senderPublicKey is 64 bytes base58 encoded,
    • eip712Signature contains an ECDSA signature HEX encoded,
    • proofs array is missing.
  • Added the new transaction type: Invoke Expression.

Improvements

  • Added the /eth/assets endpoint that accepts asset IDs in Ethereum representation (the first 20 bytes of the token ID, HEX encoded) and returns the asset details including asset ID in Waves format (32 bytes, base58 encoded). The asset details in the response are in the same order as IDs in the request.

Activation

To activate the improvements listed above, vote for feature #17 “Ride V6, MetaMask support, Invoke Expression”.

SHA256 Checksums

6be46aafd306429f9dd2b3d1e8f0b579a4e7a246f53547d69125c3275568d213  waves-all-1.4.0.jar
aaa78e9087adc19fd082ec02ab84c7652c566b20c035aa1af86ef02a1a68dfa6  waves-grpc-server-1.4.0.tgz
a624ec2f0c182640a2726ce36df6f44114b7ee984ec1830180e4e69a92b998cf  waves-grpc-server-stagenet_1.4.0_all.deb
7a9f041d5e60b3525c4c6106172482b616365549901b8541c27a91155a115848  waves-stagenet_1.4.0_all.deb