mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-22 19:19:09 +00:00
CHANGELOG: release 0.90.0
This commit is contained in:
parent
53efb43ad2
commit
447554ea4d
2 changed files with 64 additions and 847 deletions
903
CHANGELOG.md
903
CHANGELOG.md
|
@ -2,844 +2,65 @@
|
|||
|
||||
This document outlines major changes between releases.
|
||||
|
||||
## 0.74.0 "Comprehension" (17 Mar 2020)
|
||||
|
||||
Functionally complete NEO 2.0 node implementation, this release can be used as
|
||||
a drop-in replacement for C# node in any setting. It features full RPC
|
||||
functionality support and full set of wallet operations. As usual, there
|
||||
also was a number of bugs fixed, the node stability improved and some great
|
||||
optimizations were also done (especially concentrated around DB interactions),
|
||||
so even though this release has more functionality than ever (and it stores a
|
||||
lot more chain data than ever) it at the same time imports blocks faster than
|
||||
the previous one.
|
||||
|
||||
Of course we will make additional maintenance releases for NEO 2.0 when
|
||||
needed, but following this release we'll concentrate more on NEO 3.0 features
|
||||
and catching up with recent community developments around that.
|
||||
|
||||
New features:
|
||||
* WIF and NEP2 keys import/export into/from the wallet (#685)
|
||||
* multisig accounts import into the wallet (#685)
|
||||
* additional key generation for existing wallets (#685)
|
||||
* support for `break` and `continue` statements in the compiler (#678)
|
||||
* `getblocksysfee` RPC method support (#341)
|
||||
* `getapplicationlog` RPC method support (#500, #754)
|
||||
* `getclaimable` RPC method support (#694)
|
||||
* gas claiming support in wallet CLI (#694)
|
||||
* asset transfer commands in wallet CLI (#694, #706)
|
||||
* `getrawmempool` RPC method support (#175)
|
||||
* RPC client support for all methods implemented in neo-go's server (#586,
|
||||
#715, #694, #723, #750)
|
||||
* `getblockheader` RPC method support (#722)
|
||||
* `getnep5balances` and `getnep5transfers` RPC methods support (#498, #751)
|
||||
* `gettransactionheight` RPC method support (#713)
|
||||
* `submitblock` RPC method support (#344)
|
||||
* `getvalidators` RPC method support (#714)
|
||||
* support for `switch` `fallthrough` statements in the compiler (#628)
|
||||
* a set of `NEP5*` methods added to RPC client for convenient NEP5 contract
|
||||
calls (#728, #764)
|
||||
* NEP tokens balance querying and transfers support for CLI (#728, #757)
|
||||
* `getunclaimed` RPC method support (#712)
|
||||
* contract import was added to the wallet CLI command set (#757)
|
||||
* key removal added to the wallet CLI command set (#757)
|
||||
* https support for RPC server (#702)
|
||||
|
||||
Behaviour changes:
|
||||
* gas parameter for deployment no longer specifies full gas to be added into
|
||||
the transaction, it now only specifies the network fee part while system
|
||||
fee part is computed automatically based on contract's metadata (#747)
|
||||
* contract deployment and invocation from CLI is now integrated with the
|
||||
wallet subsystem, WIF parameter support was dropped (#747)
|
||||
* wallet subcommands were renamed, `create` became `init` and
|
||||
`create-account` became simple `create` (#757)
|
||||
* DB format was changed several times during this release cycle, so please
|
||||
resynchronize your chains
|
||||
|
||||
Improvements:
|
||||
* improved and extended `wallet` package (#685, #694, #706, #728, #757)
|
||||
* refactored RPC package (dividing it into smaller subpackages, #510, #689)
|
||||
* `GroupInputsByPrevHash` is no longer tied to `Transaction`, allowing its
|
||||
wider use (#696)
|
||||
* more efficient `transaction.InOut` type is used for `References` (#696,
|
||||
#733)
|
||||
* RPC client's `SendToAddress` was renamed to `TransferAsset` to better
|
||||
reflect its purpose (#686)
|
||||
* P2P server's graceful shutdown with connection closing (#691)
|
||||
* broadcasted transaction batching was added improving network efficiency
|
||||
(#681)
|
||||
* dropped duplicating `rpc.StackParamType` in favor of improved
|
||||
`smartcontract.ParamType` (#690, #706)
|
||||
* trigger types moved to their own `trigger` package (#690)
|
||||
* all Go packages were moved from github.com/CityOfZion to
|
||||
github.com/nspcc-dev where they technically already reside since August
|
||||
2019 (#710)
|
||||
* NEP5 balances and transfers tracking was added to Blockchain (#723, #748)
|
||||
* optimized transaction inputs/outputs/results verification (#743)
|
||||
* `SpentCoin` and `UnspentCoin` structures were merged and moved into `state`
|
||||
package (#743)
|
||||
* `AddVerificationHash` method was added to `Transaction` to simplify
|
||||
attributes management (#752)
|
||||
|
||||
Bugs fixed:
|
||||
* `getpeers` RPC request was not returning unconnected and bad peers (#676)
|
||||
* RPC client was not reporting real error from the answer in case of HTTP
|
||||
error (#676)
|
||||
* potential race in `Seek` implementation for `MemoryStore` (#693)
|
||||
* improper handling of more than 64K branching points in the compiler (#687)
|
||||
* Enrollment transactions verification didn't check for validator key (#696)
|
||||
* Claim transaction witness check might miss some hashes from Inputs (#696)
|
||||
* double Claim verification was missing (#696)
|
||||
* network fee calculation was completely broken (#696)
|
||||
* mempool's `Remove` might drop wrong transaction (#697)
|
||||
* missing double claim verification for mempool transactions (#697)
|
||||
* server deadlock upon reaching connection limit (#691)
|
||||
* wrong logic short-circuiting by compiler in complex conditions (#699, #701)
|
||||
* `AddHeaders` method was not verifying headers in any way (#703)
|
||||
* missing Claim amount verification (#694)
|
||||
* bogus error returned from `GetValidators` when processing transfers to
|
||||
(yet) unexisting accounts (#694)
|
||||
* Claim and Miner transactions network fee was wrong (#694)
|
||||
* negative outputs were allowed in transactions, but shouldn't (#694)
|
||||
* smart contract invocation CLI command failed to process some parameters
|
||||
correctly (#719)
|
||||
* fatal error on concurrent access to `Blockchain` internal variable (#720)
|
||||
* Invocation transactions missed some decoding checks (#718)
|
||||
* it was allowed to have fractional GAS in Invocation transactions (which is
|
||||
interpreted as system fee), but it shouldn't (#718)
|
||||
* system fee calculation for Invocation transactions was incorrect (#718)
|
||||
* `Transaction` JSON unmarshalling was processing Outputs and Witnesses
|
||||
incorrectly (#706)
|
||||
* panic on server shutdown in case it's not fully started yet (#721)
|
||||
* `sendrawtransaction` RPC method implementation was not following error
|
||||
codes convention (#724)
|
||||
* interop implementations were using wrong byte order for returned hashes
|
||||
leading to storage state differences at mainnet's block 2025204 (#727)
|
||||
* `getblock` verbose response format was not following official documentation
|
||||
(#734)
|
||||
* contract deployment could fail with no error returned (#736)
|
||||
* max contract description limit was wrong, leading to deployment failures
|
||||
(#735)
|
||||
* compiler didn't properly clean up stack on `return` or `break` in some
|
||||
situations (#731)
|
||||
* deadlock in discovery service (#741)
|
||||
* missing dynamic `APPCALL` support (#740)
|
||||
* `EQUAL` opcode implementation was not comparing different stack item types
|
||||
correctly (#745, #749)
|
||||
* RPC error on contract invocation when Hash160 is being passed into it
|
||||
(#758)
|
||||
* absent any ping timeouts configuration the node was constantly pinging its
|
||||
neighbours (#680)
|
||||
* contract's state migration was not done properly (#760)
|
||||
* db import with state dump was not saving dumps correctly on interruption
|
||||
and was now resuming writes to dump files correctly after restart (#761)
|
||||
* incomplete State transaction verification (#767)
|
||||
* missing Owner signature check for Register transaction (#766)
|
||||
* incomplete Issue transaction verification and mempool conflicts check
|
||||
(#765)
|
||||
|
||||
## 0.73.0 "Cotransduction" (19 Feb 2020)
|
||||
|
||||
This is the first release than can successfully operate as a Testnet CN
|
||||
bringing with it fixed voting system implementation, policying support and
|
||||
other related fixes. It also contains RPC improvements and updates to the
|
||||
compiler.
|
||||
|
||||
New features:
|
||||
* Go smart contracts can now use variables for struct fields initialization
|
||||
(#656)
|
||||
* for range loops support in the compiler (#658)
|
||||
* subslicing support for `[]byte` type (#654)
|
||||
* block's storage changes dump support similar to NeoResearch's storage audit
|
||||
(#649)
|
||||
* `gettxout` RPC method support (#345)
|
||||
* `getcontractstate` RPC method support (#342)
|
||||
* `getstorage` RPC method support (#343)
|
||||
* GetChangeAddress function in the wallet (#682)
|
||||
* basic policying was implemented allowing to configure
|
||||
MaxTransactionsPerBlock, MaxFreeTransactionsPerBlock,
|
||||
MaxFreeTransactionSize and FeePerExtraByte (#682)
|
||||
|
||||
Behaviour changes:
|
||||
* consensus process now only start when server sees itself synchronized with
|
||||
the rest of the network (see (*Server).IsInSync method, #682)
|
||||
* default testnet and mainnet configurations now contain policer settings
|
||||
identical to default SimplePolicy C# plugin (#682), privnet is not changed
|
||||
|
||||
Improvements:
|
||||
* keys.PublicKey now has Cmp method available (#661)
|
||||
* core now exports UtilityTokenID and GoverningTokenID functions (#682)
|
||||
* miner transactions generated by consensus process now properly set outputs
|
||||
based on block's transactions fees (#682)
|
||||
* (*Blockchain).`IsLowPriority` now takes fee (Fixed8) as an input (#682)
|
||||
* mempool's GetVerifiedTransactions and TryGetValue now also return
|
||||
transaction's fee
|
||||
* DBFT logging was improved
|
||||
* keys package no longer has Signature methods, they were replaced with more
|
||||
useful GetScriptHash (#682)
|
||||
|
||||
Bugs fixed:
|
||||
* compiler produced wrong code if there was some data containing byte 0x62 in
|
||||
the program (#630)
|
||||
* answer to the `getblock` RPC method was not following the specification in
|
||||
multiple places (#659)
|
||||
* State transaction's descriptors were not encoded/decoded correctly (#661)
|
||||
* keys.PublicKeys slice was not decoded properly (#661)
|
||||
* 'Registered' descriptor of State transaction was not decoded correctly
|
||||
(#661)
|
||||
* voting processing and validators election was fixed to follow C#
|
||||
implementation (#661, #512, #664, #682)
|
||||
* deadlock in network subsystem on disconnect (#663)
|
||||
* RPC answers with transactions were not following the specification in fields
|
||||
names (#666)
|
||||
* segmentation fault when checking references of bad transactions (#671)
|
||||
* `getassetstate` and `getrawtransaction` RPC methods were not returning
|
||||
error properly when missing asset or transaction (#675)
|
||||
* consensus RecoveryMessage encoding/decoding wasn't correct (#679)
|
||||
* DBFT was not reinitialized after successful chain update with the new block
|
||||
received from other peers (#673)
|
||||
* DBFT timer was extended too much, not following the C# implementation (#682)
|
||||
|
||||
## 0.72.2 "Confabulation" (11 Feb 2020)
|
||||
|
||||
Bugfix and small refactoring release, though it's the first one to include
|
||||
improved CHECKMULTISIG implementation that is ~20% faster.
|
||||
|
||||
Improvements:
|
||||
* parallel CHECKMULTISIG implementation improving this instruction speed by
|
||||
around 20% (#548)
|
||||
* bytecode emitting functions moved to separate package, avoiding old
|
||||
duplicate code and improving testing (#449, #534, #642)
|
||||
* AppCall interop now accepts variable number of arguments (#651)
|
||||
* more logging at info level from consensus subsystem, following neo-cli
|
||||
behaviour
|
||||
|
||||
Bugs fixed:
|
||||
* compiler-emitted integers were using wrong format (#642)
|
||||
* FreeGasLimit configuration set to zero was not really disabling gas limits
|
||||
(#652)
|
||||
* stale disconnected peers could cause networking subsystem deadlock (#653)
|
||||
* transaction reverification (on new block processing) could lead to
|
||||
blockchain deadlock for non-standard verification contracts (#655)
|
||||
|
||||
## 0.72.1 "Contextualization" (07 Feb 2020)
|
||||
|
||||
Exactly one bug fixed relative to the 0.72.0:
|
||||
* testnet synchronization failed at block 713985 because of wrong
|
||||
notification generated by the invocation transaction (#650)
|
||||
|
||||
## 0.72.0 "Crystallization" (06 Feb 2020)
|
||||
|
||||
Starting at the end of the year 2019 we've spent a lot of effort to
|
||||
stress-test our node with transaction load and this allowed us to uncover
|
||||
some problems in various parts of the system. This release addresses all of
|
||||
them and brings with it updated networking, consensus and mempool components
|
||||
that can handle quite substantial transaction traffic and successfully produce
|
||||
new blocks while being stressed. There are also important updates in VM that
|
||||
fix incompatibilities with C# node and interesting improvements in compiler
|
||||
based on our experience porting neofs smart contract to Go.
|
||||
|
||||
New features:
|
||||
* `dump` command for wallet to dump it (replaced non-functional `open`
|
||||
command, #589)
|
||||
* support for single-node consensus setup (#595)
|
||||
* ping/pong P2P messages are now supported with PingInterval and PingTimeout
|
||||
configuration options (#430, #610, #627, #639)
|
||||
* VM now fully supports calculating GAS spent during execution (#424, #648)
|
||||
* Fixed8 type now supports YAML marshalling (#609)
|
||||
* RPC invoke* calls can now be GAS-limited with MaxGasInvoke configuration
|
||||
option (#609)
|
||||
* gas limit for free invocation transactions can now be configured with
|
||||
FreeGasLimit option which default to 10.0 for mainnet and testnet (#609)
|
||||
* new compiler interop VerifySignature to verify ECDSA signatures (#617)
|
||||
* compiler now supports loops with single condition (no init/post, #618)
|
||||
* memory pool size is now configurable with MemPoolSize option which defaults
|
||||
to 50000 for all configurations (#614)
|
||||
* support for variables in slice literals in the compiler (#619)
|
||||
* support for map literals in the compiler (#620)
|
||||
* AppCall interop function (#621)
|
||||
* `string` to `[]byte` conversion was implemented in the compiler (#622)
|
||||
* Docker images now contain a dump of 1600 blocks for single-node setups and
|
||||
one can choose which dump to use for restore with ACC environment variable
|
||||
(#625)
|
||||
* switch statement support in the compiler (#626)
|
||||
* panic support in the compiler (#629)
|
||||
|
||||
Behaviour changes:
|
||||
* NEP2Decrypt function in keys package now returns a pointer to PrivateKey
|
||||
rather than a WIF-encoded string (#589)
|
||||
* DecryptAccount function in wallet package was moved to Decrypt method of
|
||||
Account (#589)
|
||||
* logging was moved from logrus to zap which changed messages format a little
|
||||
(#284, #598)
|
||||
* Block, BlockBase and Header structures were moved into their own `block`
|
||||
package (#597)
|
||||
* MemPool was moved into its own `mempool` package (#597)
|
||||
* Sign method of PrivateKey no longer returns an error (#604)
|
||||
* wallet is now compatible with C# node wallets (#603)
|
||||
* consensus service now gets its keys from the wallet file instead of
|
||||
plain-text WIF in the configuration (#588)
|
||||
* `image` Makefile target was updated to nspccdev repo (#625)
|
||||
* serializing invalid Transaction structures (that have no Data) is now
|
||||
forbidden (#640)
|
||||
* Item is no longer exposed by the mempool package (#647)
|
||||
|
||||
Improvements:
|
||||
* better testing of keys, wallet, compiler and mempool packages (#589, #568,
|
||||
#647)
|
||||
* smart use of previous proposal for block generation after dBFT's ChangeView
|
||||
(#591)
|
||||
* peer-server interaction refactored (#606)
|
||||
* peer message queues were introduced with different priorities reducing
|
||||
delays in consensus messages delivery and improving unicast communication
|
||||
(#590, #615, #639)
|
||||
* more efficient code generated by the compiler in some cases (#626, #629,
|
||||
#637)
|
||||
* mempool redesign leading to better performance (#647), it also doesn't
|
||||
store unverified transactions now
|
||||
|
||||
Bugs fixed:
|
||||
* consensus service was not really requesting transactions from peers when it
|
||||
was missing some locally (#602)
|
||||
* build failing with newer rfc6979 package (#592)
|
||||
* wrong integer serialization/deserialization in VM leading to
|
||||
inconsistencies in state with C# node (#501/#605)
|
||||
* consensus service was not processing node election results to
|
||||
enable/disable dBFT (#603)
|
||||
* in some cases peers were not unregistered after disconnect (#606)
|
||||
* different execution results with C# node because of missing invocation fee
|
||||
calculations (#607)
|
||||
* RPC server now properly returns the amount of gas spent during execution
|
||||
for invoke* calls (#609)
|
||||
* FromAddress interop was translated improperly by the compiler (#621)
|
||||
* compiler emitting wrong integers (#624)
|
||||
* EOF errors on recovery consensus messages decoding (#632)
|
||||
* wrong handling of assignments to underscore variable in the compiler (#631)
|
||||
* wrong answers to getunspents/getaccountstate RPC requests for unknown
|
||||
addresses (#633)
|
||||
* multiple dBFT issues leading to consensus stalls, attempts to add wrong
|
||||
block to the chain, message processing using wrong height and other
|
||||
problems (#635, #641)
|
||||
* duplicate connections were not detected before the handshake completion
|
||||
which can happen too late (#639)
|
||||
* attempts to connect to peer that has already connected to node (#639)
|
||||
* unregistration of connected addresses (#639)
|
||||
* ArrayReverse function was not copying arrays of size 1 (#644)
|
||||
* race in transaction verification/addition to the mempool leading to
|
||||
potential double spends (#647)
|
||||
* wrong concurrent attempts to add new block to the chain (#647)
|
||||
* blocks were not relayed properly by non-consensus nodes (#647)
|
||||
* mempool memory leak (#647)
|
||||
* missing reverification after block acceptance for transactions in mempool
|
||||
(#647)
|
||||
|
||||
## 0.71.0 "Celebration" (30 Dec 2019)
|
||||
|
||||
Version 0.71.0 ends the year 2019 of neo-go development with a solid release
|
||||
that adds support for pprof, implements all missing interoperability
|
||||
functions, improves performance and as usual fixes some bugs. This is also the
|
||||
first release with a test coverage of more than 60% which is a significant
|
||||
milestone in our trend to improve code quality and testing. Back in August
|
||||
2019 when NSPCC had started neo-go developement the project only had a
|
||||
coverage of 45% and even though a lot of code has been added since we're
|
||||
improving this metrics with every release.
|
||||
|
||||
New features:
|
||||
* pprof support (disabled by default, #536)
|
||||
* compiler now supports assignments to an element of slice using variable
|
||||
index (#564)
|
||||
* hashed 4-byte IDs support for SYSCALL instruction (#565)
|
||||
* remainder ('%') operator support in compiler (#563)
|
||||
* Neo.Witness.GetVerificationScript and Neo.InvocationTransaction.GetScript
|
||||
interop functions (#421)
|
||||
* Neo.Iterator.*, Neo.Enumerator.* and Neo.Storage.Find interops (#422)
|
||||
* tuple return support in compiler (#562)
|
||||
* `getblocks` P2P command implementation (#577)
|
||||
|
||||
Behaviour changes:
|
||||
* `Monitoring` config section changed its name to `Prometheus` because of
|
||||
pprof addition (#536)
|
||||
* `db dump` command now also writes the block number zero by default to
|
||||
comply with ImportBlocks format (#582)
|
||||
* `skip` parameter was renamed to `start` in the `db dump` command (#582)
|
||||
* `db restore` now skips the genesis block in the dump if starting to import
|
||||
into the new DB and if this block matches the one generated on blockchain
|
||||
init (#582)
|
||||
|
||||
Improvements:
|
||||
* VM optimizations (#558, #559, #565, #572)
|
||||
* top block caching in core to improve dApps performance (#572)
|
||||
* transaction's TXType can now be JSON-unmarshalled (#575)
|
||||
* `crypto` package no longer exports AES functions (#579)
|
||||
* merkle tree functions and structures were moved into the `hash` package
|
||||
(#579)
|
||||
* base58 functionality was moved into its own package from `crypto` (#579)
|
||||
* `Uint160DecodeAddress` and `AddressFromUint160` functions were moved out of
|
||||
`crypto` into their own package (#579)
|
||||
* `address` package now can be configured to use different prefixes (#579)
|
||||
|
||||
Bugs fixed:
|
||||
* wrong INVERT instruction behaviour for converted values (#561)
|
||||
* wrong DUP behaviour when the next instruction doesn't convert the value
|
||||
(#561)
|
||||
* OVER and PICK implementations didn't properly duplicate stack items (#561)
|
||||
* PICKITEM instruction failed to duplicate picked items (#561)
|
||||
* `getblock` RPC call was not answering with full hex-encoded block (#575)
|
||||
* base58.CheckDecode was decoding values with leading zeroes in a wrong way
|
||||
(#579)
|
||||
* decoding wrong public key could succeed (#579)
|
||||
* consensus payload verification was inconsistent with other verification
|
||||
code (#555)
|
||||
* DB dump was using wrong format in release 0.70.1 (#582)
|
||||
* DB restorer was not properly counting skipped blocks which could lead to
|
||||
bogus error being reported (#582)
|
||||
* the DB was not closed properly on error during DB restore (#582)
|
||||
* NPE in consensus (#583)
|
||||
|
||||
## 0.70.1 "Centrifugation" (16 Dec 2019)
|
||||
|
||||
Release 0.70.1 brings no new functionality focusing on internal node
|
||||
improvements instead. Some bugs were fixed, refactoring was done and
|
||||
performance was improved substantially.
|
||||
|
||||
Behaviour changes:
|
||||
* as with the previous release, this one changes the database format, so you
|
||||
need to resynchronize your nodes
|
||||
* code testing will fail if you're not to checkout submodules (we have one
|
||||
with neo-vm tests, #543)
|
||||
|
||||
Improvements:
|
||||
* "inv" command handling was changed to not ask peers of the items we already
|
||||
have (#533)
|
||||
* numerous optimizations across the whole system (#535, #546, #547, #545,
|
||||
#549, #550, #553, #554, #556, #557)
|
||||
* compiler no longer outputs errors by itself, passing them programmatically
|
||||
instead via its API (#457)
|
||||
* VM opcodes were moved into their own package allowing wider reuse (#538)
|
||||
* `compiler` package was moved one level up from `pkg/vm/compiler` to
|
||||
`pkg/compiler` (#538)
|
||||
* proper script trigger constants were added (#509)
|
||||
* consensus payloads are now properly signed and this signature is being
|
||||
checked (#544)
|
||||
* Uint160/Uint256 types were made more consistent and having an explicit
|
||||
LE/BE suffix for conversion functions (#314)
|
||||
* a separate layer based on storage.Store with state item-specific functions
|
||||
was created (#517, #334)
|
||||
* ReadBytes/WriteBytes in io package were renamed into
|
||||
ReadVarBytes/WriteVarBytes to more accurately describe them and be more
|
||||
consistent with C# implementation (#545)
|
||||
* io package was refactored to add type-specific read/write methods to its
|
||||
structures and remove generic (slow) ReadLE/WriteLE (#553, #554)
|
||||
* a simple tx performance benchmark was added (#551)
|
||||
|
||||
Bugs fixed:
|
||||
* consensus could start and stall with not-yet-connected peers (#532)
|
||||
* nil pointer dereference in PrepareResponse and PrepareRequest messages
|
||||
handling (#532)
|
||||
* fatal error because of locking problems in mempool (#535)
|
||||
* missing error handling in compiler emitter functions (#297)
|
||||
* wallet opening command now hides the password printed into it (#539)
|
||||
* storage was updated improperly when several transactions in one block were
|
||||
touching the same keys, leading to subsequent transactions failures (#542)
|
||||
* application execution results were not saved in full (#517)
|
||||
* mempool transaction verification was wrong (#557)
|
||||
|
||||
## 0.70.0 "Constellation" (29 Nov 2019)
|
||||
|
||||
This is a long-awaited and exciting release implementing a full Neo
|
||||
consensus node that you can run your own neo-go private net with! It also
|
||||
brings with it serious improvements in contract handling, you can now not
|
||||
only compile, but also deploy and invoke contracts with neo-go.
|
||||
|
||||
New features:
|
||||
* systemd unit file for deployment (#326)
|
||||
* claim transactions processing was added (#489)
|
||||
* Consensus payloads decoding/encoding (#431)
|
||||
* `getunspents` method is RPC server (#473)
|
||||
* updated docker-compose environment for privnet setup (#497, #529)
|
||||
* client-side `getunspents` RPC method support (#511)
|
||||
* contract deployment from the CLI (#474)
|
||||
* enrollment and state transactions processing (#508)
|
||||
* `Neo.Blockchain.GetValidators` interop support (#420)
|
||||
* `invokefunction` RPC method support in the server (#347)
|
||||
* `testinvokefunction` command in the CLI to do test invocations via
|
||||
`invokefunction` RPC method (#521)
|
||||
* consensus node support (#507, #525)
|
||||
* server-side `invoke` RPC method support (#346)
|
||||
* `testinvoke` CLI command to invoke contracts via `invoke` RPC method (#527)
|
||||
* `getheaders` P2P message processing (#529)
|
||||
* relaying was added for transactions coming from P2P network (#529)
|
||||
* `invoke` and `invokefunction` commands to invoke deployed script and send an
|
||||
invocation transaction to the network (#531)
|
||||
|
||||
Behavior changes:
|
||||
* db dump/restore format is now compatible with NGD chain dumps (#466)
|
||||
* smart contracts now have a new configuration format that is used to deploy
|
||||
them (#511)
|
||||
* `testinvoke` CLI command was renamed to `testinvokescript` (#521)
|
||||
|
||||
Improvements:
|
||||
* `core.Blockchainer` interface now has a `Close` method (#485)
|
||||
* `util.Uint256Size` is now public (#490)
|
||||
* `io` package now has generic functions for array
|
||||
serialization/deserialization (#490)
|
||||
* `util.Uint256` now supports `io.Serializable` interface (#495)
|
||||
* `smartcontract.ParamType` type now supports `io.Serializable` interface
|
||||
(#495)
|
||||
* `vm.ByteArrayItem` now uses hex representation when being marshalled into
|
||||
JSON (#499)
|
||||
* `io` serialization/deserialization for arrays is now restricted in elements
|
||||
count (#503, #505)
|
||||
* `core.AccountState` now stores all UTXOs for the account (#504)
|
||||
* interop functions got some testing coverage (#492)
|
||||
* rpc client now implements `CalculateInputs` method via `getunspents` call
|
||||
for transaction building (#511)
|
||||
* `transaction.NewInvocationTX` now accepts a gas parameter for the
|
||||
corresponding transaction field (#511)
|
||||
* `rpc.StackParamType` now supports YAML marshaling/unmarshaling
|
||||
* `rpc` package now has more fine-grained methods for transaction building
|
||||
(#511, #531)
|
||||
* `Blockchain` now stores and updates validators list (#508)
|
||||
* blockchain state management refactored (#508)
|
||||
* `rpc` invocation parameter management reworked (#513)
|
||||
* `util` test coverage improved (#515)
|
||||
* `invokescript` tests were added to the `rpc` package (#521)
|
||||
* `crypto/keys` and `crypto/hash` packages test coverage improved (#516)
|
||||
|
||||
Bugs fixed:
|
||||
* blockchain not persisting the latest changes on exit (#485)
|
||||
* db dump/restore commands incorrectly handled `skip` parameter (#486)
|
||||
* vm failed to serialize duplicating non-reference elements (#496)
|
||||
* improper smartcontract notifications handling (#453)
|
||||
* nondeterministic `GetReferences` interop behaviour leading to contract
|
||||
failures (#454)
|
||||
* writing message to the peer could be interleaved with other messages
|
||||
leading to garbage being sent (#503, #506)
|
||||
* inability to process block with previously relayed transaction (#511)
|
||||
* decoding transaction with invalid type didn't return an error (#522)
|
||||
* attempts to reconnect to the node with the same ID (#507)
|
||||
* peer disconnects during handshake because of code race (#529)
|
||||
* useless header requests from peers with low height (#529)
|
||||
* wrong header hashes initialization from the DB in case there are 2000*N + 1
|
||||
blocks in the chain (#529)
|
||||
|
||||
## 0.62.0 "Commotion" (07 Nov 2019)
|
||||
|
||||
Release 0.62.0 finishes one very important work some pieces of which were
|
||||
gradually rolled out in previous releases --- it integrates all neo-vm project
|
||||
JSON-based tests for NEO 2.0 C# VM and runs them successfully against neo-go
|
||||
VM. There are also important bug fixes based on mainnet nodes deployment
|
||||
experience and additional configuration options.
|
||||
|
||||
New Features:
|
||||
* implemented `Runtime.Serialize` and `Runtime.Deserialize` syscalls (#419)
|
||||
* new configuration option -- `AttemptConnPeers` to set the number of
|
||||
connections that the node will try to establish when it goes below the
|
||||
MinPeers setting (#478)
|
||||
* `LogPath` configuration parameter to write logs into some file and not to
|
||||
stdout (#460), not enabled by default
|
||||
* `Address` configuration parameter to specify the address to bind to (#460),
|
||||
not enabled by default
|
||||
|
||||
Behavior changes:
|
||||
* mainnet configuration now has correct ports specified (#478)
|
||||
* multiple connections to the same peer are disallowed now (as they are in C#
|
||||
node (#478))
|
||||
* the default MaxPeers setting was increased to 100 for mainnet and testnet
|
||||
configurations and limited to 10 for privnet (#478)
|
||||
|
||||
Improvements:
|
||||
* implemented missing VM constraints: stack item number limitation (#462) and
|
||||
integer size checks (#484, #373)
|
||||
* added a framework to run JSON-based neo-vm tests for C# VM and fixed all
|
||||
remaining incompabitibilities (#196)
|
||||
* added wallet unit tests (#475)
|
||||
* network.Peer's NetAddr method was split into RemoteAddr and PeerAddr (#478)
|
||||
* `MakeDirForFile` function was added to the `io` package (#470)
|
||||
|
||||
Bugs fixed:
|
||||
* RPC service responded with block height to `getblockcount` request which
|
||||
differs from C# interpretation of `getblockcount` (#471)
|
||||
* `getbestblockhash` RPC method response was not adding leading `0x` prefix
|
||||
to the hash, while C# node does it
|
||||
* inability to correctly handshake clients on the server side (#458, #480)
|
||||
* data race in `Server` structure fields access (#478)
|
||||
* MaxPeers configuration setting was not working properly (#478)
|
||||
* useless DB reads (that failed in some cases) on persist attempt that didn't
|
||||
persist anything (#481)
|
||||
* current header height was not stored in the DB when starting a new
|
||||
blockchain which lead to node failures on restart (#481)
|
||||
* crash on node restart if no header hashes were written into the DB (#481)
|
||||
|
||||
## 0.61.0 "Cuspidation" (01 Nov 2019)
|
||||
|
||||
New features:
|
||||
* Prometheus support for monitoring (#441)
|
||||
* `neo-go contract invoke` now accepts endpoint parameter (`--endpoint` or
|
||||
`-e`) to specify RPC node to be used for invocation (#363)
|
||||
* RPC server now supports `invokescript` method (#348)
|
||||
* minimum peers number can now be configured (#468)
|
||||
* configured CORS workaround implemented in the RPC package (#469)
|
||||
|
||||
Behavior changes:
|
||||
* `neo-go contract inspect` now expects avm files in input, but can also
|
||||
compile Go code with `-c` parameter (previously is was done by default),
|
||||
`inspect` subcommand was removed from `neo-go vm` (it dumped avm files in
|
||||
previous release) (#463)
|
||||
* the default minimum peers was reduced to 3 for privnet setups to avoid
|
||||
useless reconnections to only 4 available nodes
|
||||
* RPC service now has its own section in configuration, update your
|
||||
configurations (#469)
|
||||
|
||||
Improvements:
|
||||
* VM.Load() now clears the state properly, making VM reusable after the Run()
|
||||
(#463)
|
||||
* Compile() in compiler package no longer accepts Options, they were not used
|
||||
previously anyway (#463)
|
||||
* invocation stack depth is now limited in the VM (#461)
|
||||
* VM got new State() method to get textual state description (#463)
|
||||
* vm's Stack structure can now be marshalled into JSON (#463)
|
||||
|
||||
Bugs fixed:
|
||||
* race in discoverer part of the server (#445)
|
||||
* RPC server giving improper (not JSON) respons to unimplemented API requests
|
||||
(#463)
|
||||
|
||||
## 0.60.0 "Cribration" (25 Oct 2019)
|
||||
|
||||
Release 0.60.0 brings with it an implementation of all NEO 2.0 VM opcodes,
|
||||
full support for transaction relaying, improved logging, a bunch of fixes and
|
||||
an updated project logo.
|
||||
|
||||
New features:
|
||||
* blocks dumping from DB to file and restoring from file to DB (#436)
|
||||
* new logo (#444)
|
||||
* implemented `getdata` message handling (#448)
|
||||
* issue tx processing (#450)
|
||||
* CALL_I, CALL_E, CALL_ET, CALL_ED, CALL_EDT implementation in the VM (#192)
|
||||
|
||||
Internal improvements:
|
||||
* codestyle fixes (#439, #443)
|
||||
* removed spurious prints from all the code, now everything is passed/logged
|
||||
correctly (#247)
|
||||
|
||||
Bugs fixed:
|
||||
* missing max size limitation in CAT and PUSHDATA4 opcodes implementation
|
||||
(#435)
|
||||
* wrong interpretation of missing unspent coin state when checking for double
|
||||
spend (#439)
|
||||
* panic on successive node starts when no headers were saved in the DB (#440)
|
||||
* NEWARRAY/NEWSTRUCT opcodes didn't copy operands for array<->struct
|
||||
conversions
|
||||
* deadlock in MemPool on addition (#448)
|
||||
* transactions were not removed from the MemPool when processing new signed
|
||||
block (#446)
|
||||
* wrong contract property constants leading to storage usage failures (#450)
|
||||
|
||||
## 0.51.0 "Confirmation" (17 Oct 2019)
|
||||
|
||||
With over a 100 commits made since 0.50.0 release 0.51.0 brings with it full
|
||||
block verification, improved and fixed transaction verifications,
|
||||
implementation of most of interop functions and VM improvements. Block
|
||||
verification is an important milestone on the road to full consensus node
|
||||
support and it required implementing a lot of other associated functionality.
|
||||
|
||||
New features:
|
||||
* CHECKSIG, VERIFY and CHECKMULTISIG instructions in VM (#269)
|
||||
* witness verification logic for transactions (#368)
|
||||
* NEWMAP, HASKEY, KEYS and VALUES instructions, support for Map type in
|
||||
PICKITEM, SETITEM, REMOVE, EQUAL, ARRAYSIZE (#359)
|
||||
* configurable transaction verification on block addition (#415, #418)
|
||||
* contract storage and support for VM to call contracts via APPCALL/TAILCALL
|
||||
(#417)
|
||||
* support for Interop type in VM (#417)
|
||||
* VM now has stepInto/stepOver/stepOut method implementations for debugging
|
||||
matching neo-vm behavior (#187)
|
||||
* storage support for contracts (#418)
|
||||
* added around 90% of interop functions (#418)
|
||||
* Invocation TX processing now really does invoke contracts using internal VM
|
||||
(#418)
|
||||
* blocks are now completely verified when added to the chain (if not
|
||||
configured otherwise; #12, #418)
|
||||
|
||||
Behavior changes:
|
||||
* full block verification is now enabled for all network types
|
||||
* block's transaction verification enabled for privnet setups, mainnet and
|
||||
testnet don't have it enabled
|
||||
|
||||
Technical improvements:
|
||||
* GetVarIntSize and GetVarStringSize were removed from the io package (use
|
||||
GetVarSize instead; #408)
|
||||
* OVER implementation was optimized to not pop the top element from the stack
|
||||
(#406, part of #196 work)
|
||||
* vm.VM was extended with HasFailed() method to check its state (previously
|
||||
external VM users couldn't do it; #411)
|
||||
* redesigned input block queue mechanism, now it's completely moved out of
|
||||
the Blockchain, which only accepts the next block via AddBlock() (#414)
|
||||
* unpersisted blocks are now fully available with the Blockchain (thus we
|
||||
have symmetry now in AddBlock/GetBlock APIs; #414, #366)
|
||||
* removed duplicating batch structures from BoltDB and Redis code, now all of
|
||||
them use the same batch as MemoryStore does (#414)
|
||||
* MemoryStore was exporting its mutex for no good reason, now it's hidden
|
||||
(#414)
|
||||
* storage layer now returns ErrKeyNotFound for all DBs in appropriate
|
||||
situations (#414)
|
||||
* VM's PopResult() now doesn't panic if there is no result (#417)
|
||||
* VM's Element now has a Value() method to quickly get the item value (#417)
|
||||
* VM's stack PushVal() method now accepts uint8/16/32/64 (#417, #418)
|
||||
* VM's Element now has TryBool() method similar to Bool(), but without a
|
||||
panic (for external VM users; #417)
|
||||
* VM has now completely separated instruction read and execution phases
|
||||
(#417)
|
||||
* Store interface now has Delete method (#418)
|
||||
* Store tests were reimplemented to use one test set for all Store
|
||||
implementations, including LevelDB that was not tested at all previously
|
||||
(#418)
|
||||
* Batch interface doesn't have Len method now as it's not used at all (#418)
|
||||
* New*FromRawBytes functions were renamed to New*FromASN1 in the keys
|
||||
package, previous naming made it easy to confuse them with functions
|
||||
operating with NEO serialization format (#418)
|
||||
* PublicKey's IsInfinity method is exported now (#418)
|
||||
* smartcontract package now has CreateSignatureRedeemScript() matching C#
|
||||
code (#418)
|
||||
* vm package now has helper functions
|
||||
IsSignatureContract/IsMultiSigContract/IsStandardContract matching C# code
|
||||
(#418)
|
||||
* Blockchain's GetBlock() now returns full block with transactions (#418)
|
||||
* Block's Verify() was changed to return specific error (#418)
|
||||
* Blockchain's GetTransationResults was renamed into GetTransactionResults
|
||||
(#418)
|
||||
* Blockchainer interface was extended with GetUnspentCoinState,
|
||||
GetContractState and GetScriptHashesForVerifying methods (#418)
|
||||
* introduced generic MemCacheStore that is used now for write caching
|
||||
(including temporary stores for transaction processing) and batched
|
||||
persistence (#425)
|
||||
|
||||
Bugs fixed:
|
||||
* useless persistence failure message printed with no error (#409)
|
||||
* persistence error message being printed twice (#409)
|
||||
* segmentation fault upon receival of message that is not currently handled
|
||||
properly (like "consensus" message; #409)
|
||||
* BoltDB's Put for a batch wasn't copying data which could lead to data
|
||||
corruption (#409)
|
||||
* APPEND instruction applied to struct element was not copying it like neo-vm
|
||||
does (#405, part of #196 work)
|
||||
* EQUAL instruction was comparing array contents, while it should've compared
|
||||
references (#405, part of #196 work)
|
||||
* SUBSTR instruction was failing for out of bounds length parameters while it
|
||||
should've truncated them to string length (#406, part of #196 work)
|
||||
* SHL and SHR implementations had no limits, neo-vm restricts them to
|
||||
-256/+256 (#406, part of #196 work)
|
||||
* minor VM state mismatches with neo-vm on failures (#405, #406)
|
||||
* deadlock on Blockchain init when headers pointer is not in sync with the
|
||||
hashes list (#414)
|
||||
* node failed to request blocks when headers list was exactly one position
|
||||
ahead of block count (#414)
|
||||
* TestRPC/getassetstate_positive failed occasionally (#410)
|
||||
* panic on block verification with no transactions inside (#415)
|
||||
* DutyFlag check in GetScriptHashesForVerifying was not done correctly (#415)
|
||||
* default asset expiration for assets created with Register TX was wrong, now
|
||||
it matches C# code (#415)
|
||||
* Claim transactions needed specific GetScriptHashesForVerifying logic to
|
||||
be verified correctly (#415)
|
||||
* VerifyWitnesses wasn't properly sorting hashes and witnesses (#415)
|
||||
* transactions referring to two outputs of some other transaction were
|
||||
failing to verify (#415)
|
||||
* wrong program dumps (#295)
|
||||
* potential data race in logging code (#418)
|
||||
* bogus port check during handshake (#432)
|
||||
* missing max size checks in NEWARRAY, NEWSTRUCT, APPEND, PACK, SETITEM
|
||||
(#427, part of #373)
|
||||
|
||||
## 0.50.0 "Consolidation" (19 Sep 2019)
|
||||
|
||||
The first release from the new team focuses on bringing all related
|
||||
development effort into one codebase, refactoring things, fixing some
|
||||
long-standing bugs and adding new functionality. This release merges two
|
||||
radically different development branches --- `dev` and `master` that were
|
||||
present in the project (along with all associated pull requests) and also
|
||||
brings in changes made to the compiler in the neo-storm project.
|
||||
|
||||
New features:
|
||||
* configurable storage backends supporting LevelDB, in-memory DB (for
|
||||
testing) and Redis
|
||||
* BoltDB support for storage backend
|
||||
* updated and extended interop APIs (thanks to neo-storm)
|
||||
|
||||
Notable behavior changes:
|
||||
* the default configuration for privnet was changed to use ports 20331 and
|
||||
20332 so that it doesn't clash with the default dockerized neo-privnet
|
||||
setups
|
||||
* the default configuration path was changed from `../config` to `./config`,
|
||||
at this stage it makes life a bit easier for development, later this will
|
||||
be changed to some sane default for production version
|
||||
* VM CLI now supports type inference for `run` parameters (you don't need to
|
||||
specify types explicitly in most of the cases) and treats `operation`
|
||||
parameter as mandatory if anything is passed to `run`
|
||||
|
||||
VM improvements:
|
||||
* added implementation for `EQUAL`, `NZ`, `PICK`, `TUCK`, `XDROP`, `INVERT`,
|
||||
`CAT`, `SUBSTR`, `LEFT`, `RIGHT`, `UNPACK`, `REVERSE`, `REMOVE`
|
||||
* expanded tests
|
||||
* better error messages for different erroneous code
|
||||
* implemented item conversions following neo-vm behavior: array to/from
|
||||
struct, bigint to/from boolean, anything to bytearray and anything to
|
||||
boolean
|
||||
* improved compatibility with neo-vm (#394)
|
||||
|
||||
Technical improvements:
|
||||
* switched to Go 1.12+
|
||||
* gofmt, golint (#213)
|
||||
* fixed and improved CircleCI builds
|
||||
* removed internal rfc6969 package (#285)
|
||||
* refactored util/crypto/io packages, removed a lot of duplicating code
|
||||
* updated READMEs and user-level documents
|
||||
* update Makefile with useful targets
|
||||
* dropped internal base58 implementation (#355)
|
||||
* updated default seed lists for mainnet and testnet from neo-cli
|
||||
|
||||
Bugs fixed:
|
||||
* a lot of compiler fixes from neo-storm
|
||||
* data access race in memory-backed storage backend (#313)
|
||||
* wrong comparison opcode emitted by compiler (#294)
|
||||
* decoding error in `publish` transactions (#179)
|
||||
* decoding error in `invocation` transactions (#173)
|
||||
* panic in `state` transaction decoding
|
||||
* double VM run from CLI (#96)
|
||||
* non-constant time crypto (#245)
|
||||
* APPEND pushed value on the stack and worked for bytearrays (#391)
|
||||
* reading overlapping hash blocks from the DB leading to blockchain state
|
||||
neo-go couldn't recover from (#393)
|
||||
* codegen for `append()` wasn't type-aware and emitted wrong code (#395)
|
||||
* node wasn't trying to reconnect to other node if connection failed (#390)
|
||||
* stricly follow handshare procedure (#396)
|
||||
* leaked connections if disconnect happened before handshake completed (#396)
|
||||
|
||||
### Inherited unreleased changes
|
||||
|
||||
Some changes were also done before transition to the new team, highlights are:
|
||||
* improved RPC testing
|
||||
* implemented `getaccountstate`, `validateaddress`, `getrawtransaction` and
|
||||
`sendrawtransaction` RPC methods in server
|
||||
* fixed `getaccountstate` RPC implementation
|
||||
* implemented graceful blockchain shutdown with proper DB closing
|
||||
|
||||
## 0.45.14 (not really released, 05 Dec 2018)
|
||||
|
||||
This one can technically be found in the git history and attributed to commit
|
||||
fa1da2cb917cf4dfccbe49d44c5741eec0e0bb65, but it has no tag in the repository
|
||||
and so can't count as a properly released thing. Still it can be marked as a
|
||||
point in history with the following changes relative to 0.44.10:
|
||||
* switched to Go modules for dependency management
|
||||
* various optimizations for basic structures like Uin160/Uint256/Fixed8
|
||||
* improved testing
|
||||
* added support for `invoke` method in RPC client
|
||||
* implemented `getassetstate` in RPC server
|
||||
* fixed NEP2Encrypt and added tests
|
||||
* added `NewPrivateKeyFromRawBytes` function to the `wallet` package
|
||||
|
||||
## 0.44.10 (27 Sep 2018)
|
||||
|
||||
This is the last one tagged in the repository, so it's considered as the last
|
||||
one properly released before 0.50+. Releases up to 0.44.10 seem to be made in
|
||||
automated fashion and you can find their [changes on
|
||||
GitHub](https://github.com/nspcc-dev/neo-go/releases).
|
||||
## 0.90.0 "Tantalization" (14 July 2020)
|
||||
|
||||
The first Neo 3 compatible release of neo-go! We've targeted to make it
|
||||
compatible with preview2 release of Neo 3, so it only contains features
|
||||
available there, but at the same time this makes the node more useful until we
|
||||
have some more up to date reference version. It's a completely different
|
||||
network, so almost everything has changed and it's hard to describe it with
|
||||
the same level of details we usually do (but we'll provide them for subsequent
|
||||
releases where the changeset is going to be lower in size). Please note that
|
||||
this is a preview-level release and there won't be long-term support provided
|
||||
for it, Neo 3 is evolving and the next release won't be compatible with this
|
||||
one.
|
||||
|
||||
Main Neo 3 features in this release:
|
||||
* no UTXO
|
||||
* native contracts
|
||||
* new VM
|
||||
* scoped witnesses for transaction
|
||||
* updated interop/syscalls set
|
||||
* contract manifests
|
||||
* more efficient P2P protocol
|
||||
|
||||
Things that have also changed:
|
||||
* transaction format
|
||||
* block format
|
||||
* address format
|
||||
* wallets
|
||||
* RPC protocol
|
||||
* notification subsystem
|
||||
* executable format output for compiler
|
||||
|
||||
Compatibility level of this neo-go release:
|
||||
* identical storage changes compared to C# node for 378K blocks of preview2
|
||||
testnet
|
||||
* debugging info produced is compatible with preview2-compatible neo-debugger
|
||||
* running consensus nodes in heterogeneous setup is possible (2 neo-go CNs
|
||||
with 2 C# CNs, for example)
|
||||
|
||||
Changes specific to neo-go:
|
||||
* some CLI parameters like wallet path or RPC endpoint URL have been unified
|
||||
across all commands and thus have changed in some of them (refer to CLI
|
||||
help for details)
|
||||
* as an extension we support post-preview2 cosigners parameter for
|
||||
invokefunction RPC calls (see neo-project/neo-modules#260)
|
||||
* Go compiler now supports comparisons with nil properly
|
||||
* we no longer provide bootstrapping 6k block dump for private networks, you
|
||||
have 30000000 GAS right in the genesis block and it's not hard to make use
|
||||
of it (see
|
||||
[neo-go-sc-wrkshp](https://github.com/nspcc-dev/neo-go-sc-wrkshp) for an
|
||||
example of how to use it)
|
||||
* we have a conversion tool for your old Neo 2 wallets (`wallet convert`
|
||||
command), so you can reuse keys on Neo 3 networks
|
||||
* util.Equals interop function may not function the way you expect it to due
|
||||
to Neo VM changes, it still is an EQUAL opcode though. This interop may be
|
||||
removed in the future.
|
||||
|
||||
## Older versions
|
||||
|
||||
Please refer to the [master-2.x branch
|
||||
CHANGELOG](https://github.com/nspcc-dev/neo-go/tree/master-2.x/CHANGELOG.md)
|
||||
for versions prior to 0.90.0 (that are Neo 2 compatible, unlike 0.90.0+ that
|
||||
are Neo 3 compatible).
|
||||
|
|
|
@ -7,12 +7,8 @@ functionality.
|
|||
## Versions 0.7X.Y (as needed)
|
||||
* Neo 2.0 support (bug fixes, minor functionality additions)
|
||||
|
||||
## Version 0.90.0 (June 2020)
|
||||
* Neo 3.0 features preview (compatible with v3.0.0-preview2)
|
||||
|
||||
## Version 0.91.0 (July/August 2020)
|
||||
* Neo 3.0 features preview (more up to date version, will probably sync with
|
||||
the next C# implementation preview release)
|
||||
## Version 0.91.0 (August 2020)
|
||||
* Neo 3.0-preview3 compatible version.
|
||||
|
||||
## Version 1.0 (2020, aligned with NEO 3.0 release)
|
||||
* full NEO 3.0 support
|
||||
|
|
Loading…
Reference in a new issue