Skip to content

Releases: nspcc-dev/neo-go

Ululation

18 Aug 14:13
Compare
Choose a tag to compare

We've updated NeoGo for 3.0.0-preview3 compatibility implementing all the appropriate protocol changes as well as improving NeoGo-specific components. This release brings with it significant changes for smart contracts, both in terms of Neo protocol changes (no more there is a single entry point! execution environment has also changed in lots of ways) and Go smart contract compiler updates and fixes.

Please note that this release is incompatible with 0.90.0 and there will be no long-term support provided for it, Neo 3 is still changing and
improving. If you have any wallets used with 0.90.0 release you'll need to regenerate them from private keys because of changes to verification scripts that also changed hashes and addresses.

But nonetheless it is tested to be compatible with preview3 testnet for up to 68K of blocks in terms of storage changes, with neo-debugger for debug data produced by the compiler and with consensus process for heterogeneous setups (like 2 neo-go CNs with 2 C# CNs).

New features:

  • secp256k1 signature checks added to interop functions (Neo.Crypto.VerifyWithECDsaSecp256k1 and Neo.Crypto.CheckMultisigWithECDsaSecp256k1 syscalls, crypto.ECDsaSecp256k1Verify and crypto.ECDSASecp256k1CheckMultisig interop functions, #918)
  • RIPEMD160 hash added to interop functions (Neo.Crypto.RIPEMD160 syscall, crypto.RIPEMD160 interop function, #918, #1193)
  • "NotFound" P2P message (#1135, #1333)
  • base64 encoding/decoding interop functions (binary.Base64Encode and binary.Base64Decode, #1187)
  • new contract.GetCallFlags interop (System.Contract.GetCallFlags syscall) implemented (#1187)
  • it is possible now to create iterators and enumerators over primitive VM types in smart contracts (#1218)
  • runtime.Platform interop (System.Runtime.Platform syscall) is now available to smart contracts in Go (#1218)
  • storage.PutEx interop (System.Storage.PutEx syscall) is now available to smart contracts in Go (#1221)
  • exceptions support in VM (#885)
  • CLI conversion utility functions for addresses/hashes/etc (#1207, #1258)
  • multitransfer transactions now can be generated with RPC client or CLI (#940, #1260)
  • System.Callback.* syscalls for callback creation and execution (callback.* interop functions, #1197)
  • MPT implementation was added (#1235)
  • Policy native contract now also contains MaxBlockSystemFee setting (#1195)
  • getting blocks by indexes via P2P is now supported (#1192)
  • limited pointer support was added to the compiler (#1247)
  • voting support in CLI (#1206, #1286)

Behavior changes:

  • crypto.ECDsaVerify interop function was renamed to crypto.ECDsaSecp256r1Verify now that we have support for secp256k1 curve (#918)
  • many RPC requests/responses changed names used for data fields (#1169)
  • runtime.Notify interop function now requires a mandatory UTF8 name parameter (#1052) and this name can be used to filter notifications (#1266)
  • sendrawtransaction and submitblock RPC calls now return a hash instead of boolean value in case of success (#1216)
  • System.Runtime.Log syscall now only accepts valid UTF8 strings no longer than 1024 bytes (#1218)
  • System.Storage.Put syscall now limits keys to 64 bytes and values to 1024 bytes (#1221)
  • PUSHA instruction now works with relative code offset (#1226)
  • EQUAL instruction no longer does type conversions, so that values of different types are always unequal (#1225)
  • verification scripts now can't use more than 0.5 GAS (#1202)
  • contracts no longer have single entry point, rather they export a set of methods with specific offsets. Go smart contract compiler has been changed accordingly to add all exported (as in Go) methods to the manifest (but with the first letter being lowercased to match NEP-5 expections, #1228). Please also refer to examples changes to better see how it affects contracts, manifests and configuration files (#1296)
  • native contracts are now called via Neo.Native.Call syscall (#1191)
  • compressed P2P payloads now also contain their uncompressed size (#1212, #1255)
  • NEF files now use double SHA256 for checksums (#1203)
  • VM's map keys and contract methods now can only contain valid UTF-8 strings (#1198)
  • stack items now can be converted to/from JSON natively (without smartcontract.ContractParameters intermediate) which is now used for invoke* RPC calls and application execution logs (#1242, #1317)
  • invoking Policy native contracts now requires AllowsStates (to get settings) or AllowModifyStates (to change setting) flags (#1254)
  • Transaction now has Signers field unifying Sender (the first Signer) and Cosigners, a Signer can have FeeOnly or any other regular witness scope (#1184)
  • verification scripts no longer have access to blockchain's state (#1277)
  • governance scheme was changed to delegated committee-based one. The number of validators is now specified with ValidatorsCount configuration option, standby validators are no longer being registered by default (#867, #1300)
  • Go 1.13+ is now required to build neo-go (#1281)
  • public contract methods now always return some value and this is being checked by the VM (#1196, #1331, #1332)
  • runtime interop package now exports triggers as proper constants rather than functions (#1299)
  • RPC client no longer has SetWIF/WIF methods that didn't do anything useful anyway (#1328)

Improvements:

  • Neo.Crypto.CheckMultisigWithECDsaSecp256r1 syscall is now available via crypto.ECDSASecp256r1CheckMultisig interop function (#1175)
  • System.Contract.IsStandard syscall now also checks script's container (#1187)
  • syscalls no longer have allowed triggers limitations (#1205)
  • better testing coverage (#1232, #1318, #1328)
  • getrawmempool RPC call now also supports verbose parameter (#1182)
  • VMState is no longer being stored as a string for application execution results (#1236)
  • manifest now contains a list of supported standards (#1204)
  • notifications can't be changed now by a contract after emitting them (#1199)
  • it is possible to call other contracts from native contracts now (#1271)
  • getnep5transfers now supports timing parameters (#1289)
  • smartcontract package now has CreateDefaultMultiSigRedeemScript that should be used for BFT-compliant "m out of n" multisignature script generation (#1300)
  • validators are always sorted now (standby validators were not previously, #1300)
  • debug information now contains all file names (#1295)
  • compiler now accepts directory to compile a package, only one file could be passed previously (#1295)
  • some old no longer used functions and structures were removed (#1303)
  • contract inspection output was improved for new Neo 3 VM instructions (#1231)
  • ping P2P message handling was changed to trigger block requests (#1326)

Bugs fixed:

  • inability to transfer NEO/GAS from deployed contract's address (#1180)
  • System.Blockchain.GetTransactionFromBlock syscall didn't pick all of its arguments from the stack in some error cases (#1187)
  • System.Contract.CallEx syscall didn't properly check call flags (#1187)
  • System.Blockchain.GetContract and System.Contract.Create syscalls returned an interop interface instead of plain well-defined structure (#1187)
  • System.Contract.Update syscall's manifest checks were improved, return value was fixed (#1187)
  • getnep5balances and getnep5transfers RPC calls now support addresses in their parameters (#1188)
  • rare panic during node's shutdown (#1188)
  • System.Runtime.CheckWitness, System.Runtime.GetTime syscalls are only allowed to be called with AllowStates flag (#1218)
  • System.Runtime.GasLeft syscall result for test VM mode was wrong (#1218)
  • getrawtransaction RPC call now also returns its VM state after execution (#1183)
  • getnep5balances and getnep5transfers RPC calls now correctly work for migrated contracts (#1188, #1239)
  • compiler now generates correct code for global variables from multiple files (#1240)
  • compiler now correctly supports exported contracts and variables in packages (#1154)
  • compiler no longer confuses functions with the same name from different packages (#1150)
  • MaxBlockSize policy setting was not enforced (#1254)
  • missing scope check for signers (#1244)
  • compiler now properly supports init() functions (#1253, #1295)
  • getvalidators RPC call now returns zero-length array of validators when there are no registered candidates instead of null value (#1300)
  • events were not added to the debug data (#1311, #1315)
  • RPC client's BalanceOf method was lacking account parameter (#1323)
  • VM CLI debugging commands didn't really allow to step through the contract (#1328)
  • recovery message decoding created incorrect PrepareRequest payload that lead to consensus failures (#1334)

Cornification

11 Aug 12:56
Compare
Choose a tag to compare

This release is aligned with Neo 2.11.0 release, bringing important changes to the NeoX consensus protocol, some bug fixes and new RPC functionality. It is tested to work in consensus with 2.11.0. The DB format was changed for NEP5 tracking data and we also track UTXO transfers now, so you need to resynchronize the DB from the genesis for this version to operate correctly.

New features:

  • getutxotransfers RPC call to track NEO and GAS movements. It accepts address as mandatory parameter, asset name ("gas" or "neo") and start/end time as optional parameters (similar to getnep5transfers). See #1268 and #1288.
  • invoke* RPC calls now support passing hashes to be used as verified ones during execution (for contract's CheckWitness calls), this functionality is also available in the CLI now (#1282)

Behavior changes:

  • getnep5transfers and getnep5balance now return raw balance values, the same way C# node does (previously the result was adjusted by contract's decimals value, #1250)
  • getstateheight RPC call response now uses lowercase field names (#1274)
  • getnep5transfers RPC call now accepts start/end optional time parameters (the same way C# plugin does), lacking start option the result might be different from the one returned by previous node versions (#1284)
  • we no longer support Go 1.12 to build the node (#1285)
  • NeoX consensus was reworked to exchange signatures during Prepare phase and emit stateroot message along with Commit (#1291). Note that this new consensus process is not compatible with 0.76.X versions of neo-go or 2.10.3-neox-preview1 version of C# node, but it is compatible with 2.11.0, so you need to upgrade all of your consensus nodes for the network to run correctly. Also note that the default configuration for mainnet was changed to enable StateRoot functionality.

Bugs fixed:

  • getnep5transfers RPC call not returning results for migrated contracts (#1215)
  • incorrect consensus recovery message data for NeoX-enabled networks (#1270)

Calibration

19 Jul 04:48
Compare
Choose a tag to compare

Minor update for Neo 2. If you're running testnet node, we recommend to resynchronize it to fix state mismatch at block 4516236, mainnet is not known to have any similar problem so you can keep the old DB.

Bugs fixed:

  • rare panic on node shutdown (#1185)
  • VM not clearing alt stack when doing CALLs (#1158)
  • incorrect resource accounting for isolated calls (#1186)
  • state height wasn't updated properly for networks with StateRootEnableIndex higher than zero (like testnet, #1213)

Conduplication

15 Jul 14:52
Compare
Choose a tag to compare

Minor bug fixing for Neo 2 implementation. If you're affected by NEP5 balance tracking bug, please resynchronize your node to get correct results, other than that it's not required, the DB is fully compatible.

Bugs fixed:

  • block synchronization stalls on consensus node when it's not yet up to date and there are a lot of blocks to fetch (#1116)
  • getnep5balances and getnep5transfers RPC calls didn't support passing addresses as parameters (#1146)
  • NEP5 balance tracking was not aware of contract migrations leading to wrong data being returned for getnep5balances RPC call (#1144)

Tantalization

14 Jul 15:56
Compare
Choose a tag to compare

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 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.

Cross-pollination

25 Jun 19:11
Compare
Choose a tag to compare

We wanted to make a 0.75.1-neox-preview1 release of neo-go compatible with
version 2.10.3-neox-preview1 of C# node, but then suddenly decided to make
something better than that and now release 0.76.0 instead which brings with
it configurable cross-chain functionality support. So there is no need to use
different node builds for different networks with NeoGo, one binary fits
all. As usual some bugs were also fixed, this time mostly concentrating around
consensus functionality.

New features:

  • cross-chain (aka neox) support, refer to docs/neox.md for details on what's
    included and how to use it
  • compiler built-in Remove function was added for slices/maps element
    deletion (#1021)

Behavior changes:

  • the default testnet config now enables state root with StateRootEnableIndex
    of 4380100, if you have a testnet node you need to either stay with the old
    configuration or remove the DB and resynchronize blocks from genesis
  • contracts using comparison with nil will fail to compile, this comparison
    actually never functioned correctly (#952)

Improvements:

  • storage cache flushing was optimized, improving block import speed by ~10%
    (#1014)
  • consensus process now logs a bit more relevant messages (#1041)
  • limits to invocation scripts were added to consensus messages (#1087)
  • transaction request retries were added in case consensus process is missing
    some transactions (#1095)

Bugs fixed:

  • dbft's failed nodes detection was tuned for the case of node lagging behind
    the network (#1009)
  • dbft was fixed to always process recovery messages for the current block
    (#1009)
  • compiler now initializes complex struct fields correctly (#952)
  • NOTEQUAL opcode is now only being emitted for integers by the compiler (#952)
  • typo in docker entrypoint script preventing proper bootstrap file passing
    (#1089)
  • MaxFreeTransactionsPerBlock limit wasn't really enforced (#1019)
  • changeview payloads were not processed correctly by the consensus subsystem
    (#1041)
  • dbft library wasn't including messages from higher views for last seen
    message checks (#1041)
  • recovery request sent instead of recovery message in one case (#1095)
  • some correctness checks were not done for proposed block in not all
    transactions were present when the node received PrepareRequest (#1095)
  • timeout wasn't properly calculated in some cases for Primary node leading
    to early PrepareRequest send (#1095)

Caramelization

28 May 16:01
Compare
Choose a tag to compare

A long-awaited Neo 2.0 update for neo-go that fixes a lot of subtle little
differences in VM and syscalls behavior compared to C# node that resulted in
storage state mismatches between two nodes. This release makes neo-go fully
compatible with public testnet and mainnet chains, for every transaction in
every block you get the same result.

But it's not just about bugs, as it's been quite a long development cycle,
we've also included some interesting new features like notification subsystem,
neo-debugger compatibility and BadgerDB support. Smart contract compiler and
interop packages were also updated making neo-go even better for developing
real-world complex smart contracts.

New features:

  • support for for loops with no condition was added to the compiler (#799)
  • compiler can now emit debug information compatible with neo-debugger (#804,
    #829)
  • experimental BadgerDB support was added (#839)
  • support for abi.json files generation was added for contract deployment
    with NEO-Express (#916)
  • RPC over websocket connections is now supported both by the server (with
    ws://$SERVER:$PORT/ws URL) and client (WSClient structure, #921)
  • notification subsystem was added for RPC server and client (using websocket
    connections, #895)
  • interop package now has a complete set of syscalls available (#795, #956)
  • push command was added to VM CLI (#967)
  • diff dumps are now supported in db restore CLI command (#991)

Behavior changes:

  • due to DB format changes you'll need to resynchronize your node from
    scratch (and it'll also update its state to a more proper one)
  • runtime.Notify interop now accepts varargs (#825)
  • compiler's --debug parameter is now used for debug information generation,
    use --verbose to get more internal compiler's messages (#829)
  • compiler now outputs hex-encoded contract's bytecode only with --verbose
    option (#829, previously it was always printed)
  • RPC client's representation of GetBlock results changed significantly (#951)
  • some interop functions changed their in/out types to a more proper ones
    (#956, though previous ones didn't really work, so no current code should
    notice that)
  • skip parameter to db restore CLI command was replaced by start
    (#991), when using full (non-diff) NGD dumps with short (-s) form they're
    compatible, but start (as a block index) makes more sense for diff dumps

Improvements:

  • (*Stack).PushVal in vm now supports all types of integers (#776)
  • state.AppExecResult now stores stack in binary representation (#782)
  • vm.NewBigIntegerItem now accepts int64 parameter (#788)
  • RPC client tests were added (#716)
  • buffer reuse added for persisting temporary changes which improved block
    handling speed (#772)
  • significant RPC server package refactoring was done (#753)
  • BoltDB was updated to v1.3.4 (#793)
  • Go 1.14 is now supported (#775)
  • serialization/deserialization tests were unified (#802)
  • emit package now has Array and AppCallWithOperationAndArgs methods for
    easier script creation (#803)
  • persisting from MemCachedStore to MemCachedStore was optimized which
    allowed to gain 10% improvement in block import time for 1.5M mainnet
    blocks (#807)
  • storage.Find usage example was added (#795)
  • VM stack item tests were improved (#812)
  • config directory now only contains configuration files, no Go code (#423,
    #816)
  • local variables are counted more accurately now in the compiler leading to
    less waste in script runtime (#815)
  • NEP5 example was extended with minting function making it a bit more usable
    (#823)
  • DAO was refactored away into its own package from core (#832)
  • additional tests were added for bitwise and numeric VM operations (#833)
  • tests for VM CALL* instructions were added (#833)
  • consensus message parsing was split into two parts so that ordinary nodes
    won't touch CN's data (#862)
  • contract's metadata was moved into smartcontract package from rpc (#916)
  • interop packages documentation was extended (#956)
  • Docker build was fixed to use Makefile (#981)

Bugs fixed:

  • integer stack values were not following C# node format when being converted
    to JSON (#770)
  • vm now uses truncated division to match C# node behavior for negative
    integers (#773)
  • getapplicationlog and other RPC calls now convert Uint160 to JSON the same
    way C# node does (#769)
  • asset state JSON representation now follows the same format as C# node uses
    (with proper field names for 'id' and 'type' and without 'fee' add
    'address' fields, #785, #819)
  • nextconsensus field in getblockheader RPC call answer was using hex
    representation instead of address (#763)
  • getcontractstate RPC call implementation was using wrong format for
    script field in answer (#763)
  • getnep5balances RPC call implementation was using wrong name for
    balance field in answer (#763)
  • getvalidators RPC call was using non-compliant validators keys format in
    its answer (#763)
  • potential problems with GAS parameter handling in CLI (#790)
  • contract init CLI command was not working correctly (#792)
  • RPC calls now accept integer parameters in JSON strings which fix some
    incompatibilities (#794)
  • CALLI VM instruction was using wrong offset (#791, #798)
  • vm Map stack item for using different serialization format from C# node
    (#806, #808)
  • invoke* RPC calls were returning stack in Stack element rather than more
    compliant stack (#805)
  • slices of compound types were treated wrong by the compiler (#800)
  • wrong code was generated for struct variables declarations by the compiler
    (#800)
  • RPC client was incorrectly processing GetRawTransactionVerbose,
    GetBlockVerbose, GetBlockHeader, GetTxOut and ValidateAddress call results
    (#789)
  • type-specific transaction data was completely missing in getrawtransaction
    RPC call verbose output (#585)
  • documentation for wallet CLI commands was fixed to follow renames made by
    previous version (#814)
  • panic in map-containing notifications processing (#809)
  • VM Map implementation now has deterministic iteration order (#818)
  • MOD instruction behavior was fixed to follow neo-vm (#826)
  • negative arguments are now accepted for SHL/SHR VM instructions (#827)
  • improper in-block cache propagation leading to storage state differences
    with C# node (#821, #817)
  • CLI didn't check for mandatory method parameter presence for
    invokefunction command (#828)
  • wrong code generated by the compiler for return statements with no
    parameters (#929)
  • wrong code generated by the compiler for multiple function arguments with
    one type specification (#935)
  • NEP5 example contained wrong address check (#945)
  • improper code generated by the compiler for op= assignments to struct
    fields and slice elements (#954)
  • Storage.Find elements order was adjusted to match C# node implementation
    and eliminate state differences resulting from that (#822, #977, #988,
    #994)
  • step command wasn't really working in VM CLI (#967)
  • PICKITEM instruction implementation was fixed to reject improper input
    argument types (#965, #967)
  • Runtime.CheckWitness was fixed to only accept compressed keys (#968, #971)
  • input data length check was added to (*PublicKey).DecodeBytes (#971)
  • VM reference counting for SETITEM instruction was fixed (#973)
  • Map VM stack item can now be converted to Boolean (#974)
  • Structs were not cloned by SETITEM instruction implementation (#972, #975)
  • GetUnspentCoins syscall implementation was fixed to return array (#978,
    #979, #984)

Comprehension

17 Mar 13:43
Compare
Choose a tag to compare

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)

Cotransduction

19 Feb 13:28
Compare
Choose a tag to compare

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)

Confabulation

11 Feb 15:26
Compare
Choose a tag to compare

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 and 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)