⛓️ Reference Waves Blockchain Node (client) implementation on Scala
This bugfix contains important security fixes. We encourage everyone to update their nodes. There's no need to rebuild state when updating from 1.3.8 (mostly; see below).
spentComplexity
field to transaction JSON containing actual complexity spent during transaction processing. This complexity only includes dApp script complexity and does not include verifier complexity or smart asset complexity (if any). The node will store complexities only for the transactions it has processed after an update. State rebuild is required to be able to retrieve complexities for older transactions.There's no need to rebuild state when updating from 1.3.8 unless you need to retrieve spent complexities for older transactions via REST API.
0e5d05645f23c8df48aae44d40e4bcf3a1e6f6f308cad11cbf12fe17da09ba45 waves-all-1.3.9.jar
0d41dc96e0e09e333557445ced2822c097671e83fb9ce7ffff91e8e28cbf5213 waves-grpc-server-1.3.9.tgz
5fca0c2c2cb64aab0c5bed0648a6856796f075a4110f9de0338e5a9da94059b7 waves-grpc-server-testnet_1.3.9_all.deb
a3ec99c8a50d4cae64995ecc24f8f92611fb084e484caca1de8aa758ea170187 waves-grpc-server_1.3.9_all.deb
aefbbe362285cfb55dbe6f4e0ac666ac57a1e28802f24374cbd90306b7f86af3 waves-testnet_1.3.9_all.deb
23c637b3c251789f025172a783686061f62bdde84ff922f593681002eb212a0d waves_1.3.9_all.deb
5fca0c2c2cb64aab0c5bed0648a6856796f075a4110f9de0338e5a9da94059b7 waves-grpc-server-testnet_1.3.9_all.deb
aefbbe362285cfb55dbe6f4e0ac666ac57a1e28802f24374cbd90306b7f86af3 waves-testnet_1.3.9_all.deb
This release fixes a protocol issue which involves ethereum transaction processing, and is therefore mandatory for all miners.
FOLD<>
macro support in Ride V6.When updating from 1.4.0, a full state rebuild is required.
d212e2a8c35736425eee7048b27b1f88b78d70d2bf1223e547b6fd28fa422b55 waves-all-1.4.1.jar
44747efde309fa25051e7a2602c98dd4788ad78edeba4ab9b1a1811129108166 waves-grpc-server-1.4.1.tgz
c4cc9629ac31bf0930ad5a9da88419babc2513228516fae53cdf2877ca28c12d waves-grpc-server-stagenet_1.4.1_all.deb
110c281057f7becd763f2d26296507ab734231b675de7649e2162dbe1c28defb waves-stagenet_1.4.1_all.deb
Attention! This release is for stagenet only! Not for mainnet/testnet.
FOLD<N>
macro used in previous versions of the Standard Library.Added support for Ethereum transactions that perform token transfers or dApp script invocations. JSON representation of a transaction depends on its content:
{
"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"
}
}
{
"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.
"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.
/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.To activate the improvements listed above, vote for feature #17 “Ride V6, MetaMask support, Invoke Expression”.
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
This release fixes a critical issue in Blockchain Updates extension, which was introduced with release 1.3.7. This release is mandatory for everyone operating the extension. There's no need to rebuild state when updating from 1.3.7.
If you don't have the extension enabled, you can continue using release 1.3.7. Please read about release 1.3.7 for more info.
6a9136d247510ff7ffced3c8909674fe6732a95ec1552bd6fb0c7b9cabdfad17 waves-all-1.3.8.jar
57af487020076521f095379e784dc600861b5fd98a9fcd96d9aa428a01c65b59 waves-grpc-server-1.3.8.tgz
3d43618f42a5b83ec4c4fb15132bd18293ab6b8b8072a1ac20106f2a7277aeee waves-grpc-server-stagenet_1.3.8_all.deb
b41fd081ddac210de1a60baa67ab242137e10e87c0301e95bd8c396f3262b1bb waves-grpc-server-testnet_1.3.8_all.deb
b2d09a24a56160e1d3c323d6f24d8c726e8a57c3f671da1f9fcd1d7127f36027 waves-grpc-server_1.3.8_all.deb
fac395a991831149bab8e3a50c3db3c2987499487ea9a31e500e4a07b9f726e8 waves-stagenet_1.3.8_all.deb
616a15d959441d8018876bc8a31e60fa51558a3586e42252dc76b3d52c594a48 waves-testnet_1.3.8_all.deb
54d4fd9dee97c37c38994181c56d2b97d9d5b829847735a816d3d16d2be72aaa waves_1.3.8_all.deb
This is mandatory release. It includes several Blockchain Updates, REST API and RIDE enhancements and improvements. Please pay attention to the Update Notes section.
waves.rest-api.minimum peers
sets the number of peer connections required to broadcast transactions via REST API. If the node has less peers, the transaction is not accepted into the UTX pool. By default, at least one connection is required.waves.rest-api.heavy-request-processor-pool-threads
sets the number of threads which process "heavy" API requests (e.g. transactions by address, complete portfolio or batched data requests). When no value is set, at most 4 threads are used. Explicitly setting higher value may improve throughput on multicore systems.waves.wallet.seed
matches the actual seed stored in wallet.dat
file. If the values don't match, the node will report an error and shut down./assets/balance/{address}
: optional repeated id
parameter can be used request balances for selected assets. Just like in other batched requests, this parameter can either specified as a query parameter in a GET
request, or in the body of a POST
request./debug/validate
method returns traces for nested invocations/transactions/calculateFee
takes expensive DApp actions into account, e.g. asset issuance will increase minimal fee by 1 WAVESas[SomeType]
and exactAs[SomeType]
macro that cast Any type to specified one.There's no need to rebuild the state when updating from v1.3.6.
This release introduces new mandatory fields in application.ini
. If you have not changed this file, apt
/dpkg
will silently replace the existing version with the new one. If you have, you will need to manually install the new version, and then add your custom parameters to the new file.
--force-confnew
to dpkg
:
dpkg -i --force-confnew waves_1.3.7_all.deb
-o Dpkg::Options::=--force-confnew
to apt:
apt-get update && apt-get install -o Dpkg::Options::=--force-confnew waves waves-grpc-server
apt
/dpkg
discovers the file has changed, you'll be prompted to update the file:
Configuration file '/usr/share/waves/conf/application.ini'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** application.ini (Y/I/N/O/D/Z) [default=N] ? Y
Select Y
to update the file.Once the package is updated, you can tweak the file to suit your needs, just make sure that the lines starting with -J-Dwaves.defaults
are left intact.
Ubuntu 16.04 has reached its end of life in April 2021 and will no longer receive security updates. Some of the node's dependencies require newer versions of GNU C library, which are not included with Ubuntu 16.04. It is recommended to update your OS to a more recent version.
0acb8be41e821622f0e129d957d92ee8fa776b53a48af2f960d9ee84d0c3f14a waves-all-1.3.7.jar
3e8ee2c2c712c002b28c0783b884b0103abefb90b30ae5559a4af1fdc562bd90 waves-grpc-server-1.3.7.tgz
f5093d271d3a993bb3141ebee371a664e56fdd54052b41d2058e7e4516e44f9e waves-grpc-server-stagenet_1.3.7_all.deb
c231b337168886e98db943a674802f4aa0fbe31310023fafb951404f09117423 waves-grpc-server-testnet_1.3.7_all.deb
60bd4e7e2ceb7da0d35ce5d8cfc71016fb672b4f6b402f8014b7611fedd5261a waves-grpc-server_1.3.7_all.deb
e926255c94bccf5f65916e0935b66c39fa8deabe58cda2b17458b51012bba370 waves-stagenet_1.3.7_all.deb
09cb4924a3bb0ee9ac780aaf361741cbb44167e7110ad566d024752192909813 waves-testnet_1.3.7_all.deb
b41546aa89435bf7fbd0d8a5044f3a429260ca54fbd8790fb65c00c9ee74b8e9 waves_1.3.7_all.deb
This is an optional release which mostly fixes several REST API issues. There's no need to rebuild state when upgrading from 1.3.5.
de337c5da41c2c823dd4758d9f196b6f27300bbd39cf8997afb2a7e4c4b0c69c waves-all-1.3.6.jar
8582d78ed582047e10a85189ef93b196deb89debba0d7c8c81849ad44b593f0a waves-grpc-server-1.3.6.tgz
de9e96dae9294b499e8844cdb6f639cd9534064824207f6798f244fb6743f12a waves-grpc-server-stagenet_1.3.6_all.deb
65e654dfd82a9cc15dd70dc8374b949c8af96277f02349934b1fb73b7dd82c09 waves-grpc-server-testnet_1.3.6_all.deb
fe3976559c95a59e1e6e0412586c778a10c8bfe3104911aa30c2533bfa2d3616 waves-grpc-server_1.3.6_all.deb
4064a8d94422fdf4d984a25358b3f3260862580768e7aa6c13d1273292e80c10 waves-stagenet_1.3.6_all.deb
5d25f75ea8747c0d0389feeb4b05a50058f43a920a8ed0c38e93330ea783d204 waves-testnet_1.3.6_all.deb
f32dce4beecf59c500bbfabfd2d5899ef14b1f919395df101a3e02c73b5a13b0 waves_1.3.6_all.deb
This release is accumulation of all previous 1.3.x releases. Now it's available for Mainnet. After the activation of the feature #16 all Protocol changes become available.
Issued version 5 of the Ride Standard library.
Enabled processing up to 10 payments attached to the Invoke Script transaction.
Added the functions for dApp-to-dApp invocation:
Added strict variables that are evaluated before the next expression to ensure executing callable functions and applying their actions in the right order.
Modified the callable function result by adding a return value.
Modified the Invocation structure: in case of dApp-to-dApp invocation, the structure contains the address and public key of both the sender of the Invoke Script transaction and the dApp account that invokes the callable function.
The maximum total number of Issue
, Reissue
, Burn
, SponsorFee
, ScriptTransfer
, Lease
, LeaseCancel
script actions executed by all callable functions in a single transaction is 30.
The maximum total number of BinaryEntry
, BooleanEntry
, IntegerEntry
, StringEntry
, DeleteEntry
script actions executed by all callable functions in a single transaction is 100.
Added script actions that the callable function can perform:
Using these actions, you can change the amount of the lease, in particular, withdraw a part of the leased funds. If you cancel a lease for a larger amount and create a new lease for a smaller amount with the same recipient in the same script invocation, the recipient's generating balance decreases by the difference. Otherwise, if you send two separate transactions: a Lease Cancel transaction and a Lease transaction, they can be added to a different blocks and therefore generating balance decreases by the amount of the canceled lease immediately and increases by the amount of the new lease after 1000 blocks.
Added the function calculateLeaseId that calculates ID of the lease formed by the Lease
structure.
Added an arbitrary data type — Any.
Added the BigInt data type of 64 bytes (512 bits) and functions.
Added the following built-in functions:
Added the following account data storage functions that allow the dApp script to read entries of its own data storage:
getBinary(key: String): ByteVector|Unit
getBinaryValue(key: String): ByteVector
getBoolean(key: String): Boolean|Unit
getBooleanValue(key: String): Boolean
getInteger(key: String): Int|Unit
getIntegerValue(key: String): Int
getString(key: String): String|Unit
getStringValue(key: String): String
The maximum complexity of a callable function of a dApp script is changed to 10,000.
A lease can be created both as a result of a Lease transaction and as a result of an Invoke Script transaction via a Lease
script action. Therefore, the response of the following endpoints has been changed:
/transactions/address/{address}/limit/{limit}
and /transactions/info/{id}
endpoints for a Lease Cancel transaction, the lease
structure now contains lease parameters instead of Lease transaction fields./leasing/active/{address}
returns an array of structures containing lease parameters instead of array of Lease transactions.dApp-to-dApp invocation results are added as the invokes
array to the stateChanges
structure returned by the following endpoints:
/transactions/info/{id}
/transactions/address/{address}/limit/{limit}
Each element of invokes
array, in turn, also contains stateChanges
.
Results of the Lease
and LeaseCancel
script actions are added to the stateChanges
structure.
Results of Lease
and LeaseCancel
script actions are also added to the trace
structure returned by the following endpoints:
/transactions/broadcast
/debug/validate
/leasing/info
endpoint that returns lease parameters by lease IDs./blocks/heightByTimestamp
endpoint that returns blockchain height at a given timestamp.To activate the improvements listed above, vote for feature #16 “Ride V5, dApp-to-dApp invocations”.
If you are not using Blockchain Updates extension, there's no need to reimport state when updating from version 1.2.x. Attention Blockchain Updates users:
Due to presense of breaking changes in the Node's API please migrate your existing projects/applications. Version 1.3.5 will be immediately available on the testnet. Mainnet will be updated on June, 11th.
b938cbd04016131be6a06a3f6db9d8fc5df8fe6fd1204469e1a67eeb999f1bbc waves-all-1.3.5.jar
76381331a983383ef4991077abcafcaed3f5ad55bb686c52dd0f1c68ca752d04 waves-grpc-server-1.3.5.tgz
449af81db3ec693baaf5508ca5769587a7023ddaea203f406413efca6a2e840f waves-grpc-server-stagenet_1.3.5_all.deb
aa801db4c4b279fc226b2642d11281cc02ec7f182668a96628e8bc097e0aadb8 waves-grpc-server-testnet_1.3.5_all.deb
2c28f517df7595fd85e1a12a0dc78eb2e8cf3f7316251b160eeacf5f56dbabf0 waves-grpc-server_1.3.5_all.deb
f4faf1da9fc23b90ba96f48585f73b4ac1a1127ec73fd636decac57261cca5fa waves-stagenet_1.3.5_all.deb
6dd05421d4f2622693acb8ca320af291c04aeb0052863b9bedf3c2dc79e167df waves-testnet_1.3.5_all.deb
142616a71ed1aa3f08623db036cb540234a546d2d6cbd769dbe605cced28abb4 waves_1.3.5_all.deb
This is the first release of 1.3 series intended for both Testnet and Stagenet (however, it is not ready for Mainnet just yet). Please vote for feature 16 on Testnet!
The following issues have been fixed since 1.3.3:
c35b97d5e7e842ba7ed14dbca663d89452cfe78ef0802a0669f8d470eedc2491 grpc-server-stagenet-1.3.4.tgz
2d891990360b654a26e20fae85d709f2ff9d1db5fae4cf6a4fa0d5c00fd0881f grpc-server-stagenet_1.3.4_all.deb
c550927f681cdedd0c6047e1203d8de29b981ac298bdaae4fb9a28aaa6517ec9 grpc-server-testnet-1.3.4.tgz
c82a99252aebb1511843ee6e2b6fd8026640b8a1a980e71e6def2f040059d634 grpc-server-testnet_1.3.4_all.deb
169401cf4d81aa99ffc936b3de36bed61c7d499dd12218635ba7f6a9360ea912 waves-all-1.3.4.jar
4783b334f08151b2c89f0762de4e86720288911266f0dc08e121f6b84ccba78b waves-stagenet_1.3.4_all.deb
ef304c7f0412d3e0127f468f6ee043aa773d84b071410ec845d9772d7d4b813a waves-testnet_1.3.4_all.deb
This release fixes an issue which could prevent the node from successfully completing blockhain import. All miners are advised to update their nodes. A bug which prevented Blockchain Updates extension from properly handling certain types of microblock rollbacks has also been fixed.
There is no need to rebuild state when updating from version 1.2.20.
3d5e98bc15dec945c3925e7e430240a9dde47961c4c8f91dfca4e45284f849dc grpc-server-1.2.21.tgz
70193a320a7f41b80ea84644daf9eab3e8aae9e50359337da1e7829465903bd4 grpc-server-testnet-1.2.21.tgz
e123842f551ceb802e4db6c3341d3f53a1ef3bdbc7b1832eda29db569c6660cd grpc-server-testnet_1.2.21_all.deb
ade342d99951383084743d30875dc5c34c9666ccfe36df88d950e7720dee0bd2 grpc-server_1.2.21_all.deb
9e074f65338ee74c171b591354080ebee4274f9d231f66886df9a7e26cc8e753 waves-all-1.2.21.jar
4afa8bc74e7fe9420b716550117a255bbc9542552d4bbeff8c81f7c37e54f258 waves-testnet_1.2.21_all.deb
190c7cfb303bd933a5a1df8e6255ae662b95bd51a65314cc392326332a2e2c6d waves_1.2.21_all.deb
This release is intended for Stagenet only. There's no need to rebuild state when updating from 1.3.2
This release includes the following improvements:
reentrantInvoke
function for dApp-to-dApp invocation. The only difference from the invoke
function is that there is no reentrancy restriction for the parent dApp that uses reentrantInvoke
./leasing/info/{id}
endpoint.4851a8c950fb08e3a42a191d8bb313afc21ca0a20c2317b385e0a40b9bd775fc grpc-server-stagenet-1.3.3.tgz
0ef5fed6a84029d41e1e939ac1822d6780815470121265ac5442ee53a742d740 grpc-server-stagenet_1.3.3_all.deb
ef099346d232a976f9d858cf4ead88bf286359cdfb8135f3eb13dca05dd0e530 waves-all-1.3.3.jar
3fa8b99760ab5752a86eb80aa2725773789c1915dabc8745579da92b7b83372a waves-stagenet_1.3.3_all.deb