Skip to content

Releases: nspcc-dev/neo-go

Ventilation

02 Aug 17:04
Compare
Choose a tag to compare

This is an official 3.0.0-compatible release that is ready to be used both for mainnet and testnet. Technically, 0.96.0 and 0.96.1 are compatible too, but they need an updated configuration to work on mainnet while this version has it covered.

We keep improving our node and this release is not just a repackage of something older, so DB format changes require a resynchronization if you're upgrading from 0.96.X.

Behavior changes:

  • updated configuration for mainnet (#2103)

Improvements:

  • documentation for contract configuration file (#2097)
  • significant change to NEP-17 tracking code, it shouldn't affect valid NEP-17 tokens, but now we store a little less data in the DB and get more from token contracts when needed (for getnep17balances RPC for example); this change is required for our future state exchange protocol extension (#2093)
  • improved block processing speed on multicore systems (#2101)
  • JSON deserialization now has the same limits as binary, but this doesn't affect any valid code (#2105)

Bugs fixed:

  • potential deadlocks in notary-enabled nodes (#2064)
  • wallet files not truncated properly on key removal (#2099)

Brecciation

23 Jul 10:29
Compare
Choose a tag to compare

New CLI commands, updated dependencies and some bugs fixed --- you can find all of this in the new NeoGo release. It's compatible with 0.96.0 (except for multisignature contexts, but you're not likely to be using them) and confirmed to have proper RC4 testnet state up to 15K blocks (but 0.96.0 is fine wrt this too). At the same time we recommend to resynchronize the chain if you're using LevelDB or BoltDB, both databases were updated.

New features:

  • query candidates, query committee and query height CLI commands (#2090)
  • GetStateHeight RPC client call support (#2090)

Behavior changes:

  • wallet candidate getstate command was renamed to query voter, now it also prints the key voted for and handles addresses with 0 balance without spitting errors (#2090)

Improvements:

  • query tx now outputs signer address along with script hash (#2082)
  • updated many of node's dependencies including BoltDB and LevelDB, there are no radical changes there, mostly just some fixes improving stability (#2087)
  • better error messages in some places (#2089, #2091)

Bugs fixed:

  • query tx command wasn't providing correct results if used with C# RPC node (#2082)
  • watch-only node (with a key, but not elected to participating in consensus) could panic on receiving a number of Commit messages (#2083)
  • getstateheight RPC call produced result in different format from C# node (#2090)
  • JSON representation of multisignature signing context wasn't compatible with C# implementation (#2092)

Aspiration

21 Jul 14:02
Compare
Choose a tag to compare

We're updating NeoGo to support RC4 changes, there are some incompatible ones so this version can't be used with RC3 networks/chains (RC3 testnet is still available, please use 0.95.4 for it). This release was checked for RC4 testnet compatibility and has the same state as C# for the first 5K blocks.

No significant protocol changes are expected now as we're moving to final N3 release, but we'll keep updating the node fixing bugs (if any), improving performance and introducing NeoGo-specific features.

New features:

  • "System.Runtime.GetNetwork" system call (#2043)
  • ContentTypeNotSupported oracle return code and content type configuration for Oracle service (#2042)
  • block header have "Nonce" field again which is used for "System.Runtime.GetRandom" system call (#2066)
  • import from incremental chain dumps (#2061)
  • configurable initial (from the genesis block) GAS supply (#2078)
  • "query tx" CLI command to check for transaction status (#2070)

Behavior changes:

  • verification GAS limits were increased (#2055)
  • SQRT price reduced (#2071)
  • binary deserialization is now limited to 2048 (MaxStackSize) items (#2071)
  • notary deposit is stored now as serialized stack item (#2071)
  • testnet and mainnet configuration updates (#2077, #2079, #2081)

Improvements:

  • faster stack item binary and JSON serialization (#2053)
  • faster Storage.Find operation (#2057)
  • additional documentation for public network CNs (#2068)
  • better code reuse for native contract's data serialization (#2071, see new stackitem.Convertible interface)
  • some types from state package renamed to remove "State" word (#2075)
  • util.ArrayReverse helper moved to package of its own with additional helpers (#2075)

Bugs fixed:

  • nested structure cloning could lead to OOM (#2054, #2071)
  • addresses were not accepted for witness accounts in RPC calls (#2072)
  • POW instruction could take unknown amount of time to complete for big parameters (#2060)
  • oracle contract could accept invalid user data (#2071)
  • EQUAL for deeply nested structures could never complete (#2071)
  • arrays and structures were limited to 1024 items (#2071)
  • oracle fallback transactions could try using outdated ValidUntilBlock value (#2074)
  • oracle node starting from genesis block tried to process all requests from the chain instead of only working with current ones (#2074)
  • some tests used non-unique/wrong temporary files and directories (#2076)

Yatter

09 Jul 08:38
Compare
Choose a tag to compare

Making a fully compliant Neo node is not easy, there are lots of minuscule details that could be done in a little different way where both ways are technically correct but at the same time just different which is enough to create some interoperability problems. We've seen that with Legacy node implementation where we were functionally complete with 0.74.0 release but some fixes kept coming up to the most recent 0.78.3 version. It was a bit easier with Legacy because we already had some years-long chains to test the node against while N3 is a completely new territory.

So we'd like to thank all RC3 hackathon participants as well as all other people playing with N3 RC3 network, your joint efforts gave enough material to keep us busy fixing things for some time. The chain moving forward hit more and more edge cases with every block and this is actually very helpful, we saw a lot of things that could be improved in our node and we improved them.

Now we're releasing 0.95.4 with all of these fixes which is still RC3-compatible and it's stateroot-compatible with C# implementation up to 281K blocks. Please resynchronize to get identic testnet state. And most likely that's the last RC3-compatible release as we're moving forward to the official 3.0.0 release of C# version NeoGo will be updated with appropriate changes some of which are not compatible with RC3).

New features:

  • 'sysgas' parameter for invocation and transfer CLI commands to manually add some system fee GAS (#2033)

Behavior changes:

  • contract calls are now checked against specified permissions by the compiler (#2025)
  • stack items with nesting levels of 10 and more won't be serialized to JSON for purposes like including them into RPC call reply (#2045)

Improvements:

  • AddHeaders() with multiple headers added at the same time now works with StateRootInHeader option (#2028)
  • cached GAS per vote value leads to substantially improved block processing speed (#2032)
  • failed native NEP17 transfers now still re-save the old value to the storage making state dumps compatible with C# (#2034)
  • refactored and renamed some stackitem package functions, added proper error values in all cases (#2045)
  • RPC calls (and application logs) can now return real serialization errors if there are any (previously all errors were reported as "recursive reference", #2045)
  • better tests (#2039, #2050)

Bugs fixed:

  • wrong onNEP11Payment name in contract configuration examples (#2023)
  • missing permission sections in contract configuration examples (#2023)
  • buffer stack item deserialization created byte string (#2026)
  • Extra contract manifest field serialization was reworked to match C# implementation more closely (#2021)
  • wildcard permission in manifest allowed any methods, while it shouldn't (#2030)
  • group permission in manifest worked incorrectly for a set of groups (#2030)
  • call flags were JSONized in incompatible way (#2041)
  • MPT update left branch nodes with 1 child in some cases (#2034, #2047)
  • JSON marshalling code for stack items detected item recursion in some cases where no actual recursion was present (#2045)
  • binary serialization code for stack items could overwrite old errors in some cases (#2045)
  • binary serialization code for stack items wasn't ensuring maximum size limit during serialization which could lead to OOM (#2045)
  • batched MPT update create excessive extension nodes for the last child of branch node in some cases (#2047)
  • in some cases "TCP accept error" was logged during node shutdown (#2050)
  • contract updating code was updating caches before they should've been updated (#2050)
  • INVERT/ABS/NEGATE unary operations were not copying their arguments (#2052)

Yuppification

17 Jun 13:03
Compare
Choose a tag to compare

One more N3 RC3-compatible release that fixes testnet state difference at block 151376. Please resynchronize to get proper testnet state.

Behavior changes:

  • NEP2-related functions in crypto/keys package changed a bit to allow Scrypt parameters overriding, standard parameters are available via NEP2ScryptParams function (#2001)

Improvements:

  • better unit test stability (#2011, #2001)
  • updated neofs-api-go dependency (with support for TLS-enabled NeoFS node connections, #2003)
  • removed annoying token matching warning (#2018)

Bugs fixed:

  • state mismatch resulting from different committee candidate sorting (#2017)

Echolocation

10 Jun 19:58
Compare
Choose a tag to compare

This is another N3 RC3-compatible release and it's better in its RC3 compatiblity than the previous one because we've fixed some state mismatches wrt C# implementation that were found on testnet. It is confirmed to have the same state up to 126K height (which is current), but to get proper state you need to resynchronize your node from the genesis.

New features:

  • RPC notification subsystem was extended to support notary pool events, so clients can now react on request additions (#1984)
  • compiler now checks notification event name length to fit into the limit (#1989)
  • compiler now also checks for runtime.Notify() calls from Verify method (which won't work anyway, #1995)

Improvements:

  • codegeneration improvements removing some unnecessary store/loads and type conversions (#1881, #1879)
  • additional MPT tests added ensuring compatibility with C# implementation (#1993)
  • additional consistency check added to prevent node running with native contracts differing from the ones saved in DB (#2010)

Bugs fixed:

  • calculatenetworkfee RPC result used format different from C# node (#1998)
  • CALLT opcode was missing any price leading to wrong GAS calculations and different state wrt C# node (#2004)
  • '+' character was emitted directly by jsonSerialize method which is fine wrt JSON itself, but differs from C# node behavior leading to node state difference (#2006)
  • NEO self-transfers were not checking the amount transferred (they didn't change balance, but they succeeded) leading to state difference wrt C# implementation (#2007)

Shiftiness

31 May 09:33
Compare
Choose a tag to compare

Bringing NeoGo up to date with N3 RC3 changes this release also improves compiler and CLI a bit.

This release is mostly compatible with 0.95.0, but you need to resynchronize your chains to have proper stateroot data and to make new methods available to contracts. At the same time there won't be long-term support provided for it, just as with all previous previews and RC.

New features:

  • base58CheckEncode/base58CheckDecode methods in StdLib native contract (#1977, #1979)
  • getAccountState method in NeoToken native contract (#1978, #1986)
  • custom contracts and groups can now be specified for witness scopes in invocations from CLI (#1973)

Improvements:

  • local variable handling was refactored in the compiler, removing some duplicate code and improving robustness (#1921)
  • CLI help now describes how "unvote" can be done (#1985)

Bugs fixed:

  • boolean parameters to function invocations via RPC were not processed correctly (#1976)
  • VM CLI used too restrictive default call flags for loaded scripts (#1981)
  • IPv6 check in NNS contract was out of date wrt C# implementation (#1969)

Sharpness

17 May 20:38
Compare
Choose a tag to compare

This version mostly implements N3 RC2 protocol changes (and is fully RC2-compatible), but also brings NEP11 CLI support and small improvements for node operators.

Please note that this release is incompatible with 0.94.1 and there won't be long-term support provided for it.

New features:

  • CLI command for NEP17 transfers now accepts data parameter for the transfer (#1906)
  • contract deployment CLI comand now also accepts data parameter for _deploy method (#1907)
  • NEP11 and NEP17 transfers from CLI can now have multiple signers (#1914)
  • System.Runtime.BurnGas interop was added to burn some GAS as well as refuel GAS contract method to add GAS to current execution environment (#1937)
  • port number announced via P2P can now differ from actual port node is bound to if new option is used (#1942)
  • CLI now supports full set of NEP11 commands, including balance and transfers (#1918)
  • string split, memory search and compare functions added to stdlib (#1943)
  • MaxValidUntilBlockIncrement can now be configured (#1963)

Behavior changes:

  • data parameter is now passed in a different way to NEP17 RPC client methods (#1906)
  • default (used if nothing else specified) signer scope is now CalledByEntry in CLI and RPC (#1909)
  • SignAndPushInvocationTx RPC client method now adds as many signatures as it can with the wallet given which in some cases allows CLI to create complete transaction without going through multisignature procedure (#1912)
  • getversion RPC call now returns network magic number in network field (#1927)
  • RoleManagement native contract now emits Designation event in designateAsRole method (#1938)
  • System.Storage.Find syscall now strips full prefix given when FindRemovePrefix option is used (#1941)
  • LT, LE, GT, GE VM opcodes now accept Null parameters (#1939)
  • features field was re-added to contract manifests, though it's not currently used (#1944)
  • node will reread TLS certificates (if any configured) on SIGHUP (#1945)
  • contract trusts are now expressed with permission descriptors in manifest (#1946)
  • NEP11 transfers now also support data parameter (#1950)
  • N3 RC2 testnet magic differs from N2 RC1 testnet (#1951, #1954)
  • stdlib encoding/decoding methods now only accept inputs no longer than 1024 bytes (#1943)
  • System.Iterator.Create interop was removed with all associated logic (#1947)
  • Neo.Crypto.CheckSig and Neo.Crypto.CheckMultisig interops were renamed to System.Crypto.CheckSig and System.Crypto.CheckMultisig (#1956)
  • oracle requests now use Neo-specific JSONPath implementation (#1916)
  • native NNS contract was removed and replaced by non-native version (#1965)

Improvements:

  • RPC errors reported by server are now more verbose for submitblock, sendrawtransaction calls (#1899)
  • all CLI commands that accept addresses now also accept hashes and vice versa (#1905)
  • code cleanup based on a number of static analysis tools (#1908, #1958)
  • CLI implementation refactoring (#1905, #1911, #1914, #1915, #1918)
  • only one state validator now sends complete stateroot message normally (#1953)
  • oracle HTTPS requests are now sent with User-Agent header (#1955)
  • stdlib itoa and atoi methods can now be called with one parameter (#1943)
  • oracle nodes are no longer on extensible payload whitelist (#1948)
  • extensible message pool is now per-sender with configurable size (#1948)
  • static-variables field support for debugger as well as debug data for init and _deploy functions (#1957)
  • user documentation for configuration options (#1968)

Bugs fixed:

  • getproof RPC request returned successful results in some cases where it should fail
  • Transfer events with invalid numbers were not rejected by NEP17 tracking code (#1902)
  • boolean function parameters were not accepted by invokefunction RPC call implementation (#1920)
  • potential races in state validation service (#1953)
  • single state validator couldn't ever complete stateroot signature (#1953)
  • SV vote resending was missing (#1953)
  • SV vote messages used invalid (too big) ValidBlockEnd increment (#1953)
  • memory leak in state validation service (#1953)
  • NEP-6 wallets have isDefault field, not isdefault (#1961)

Channelization

08 Apr 12:32
Compare
Choose a tag to compare

This is the second and much improved N3 RC1-compatible release. We've mostly focused on documentation and examples with this release, so there is a number of updates in this area including oracle contract example and NEP-11 NFT contract example. At the same time proper testnet network revealed some implementation inconsistencies between NeoGo and C# especially in oracle and state validation services, so there are fixes for them also.

Protocol-wise this release is compatible with 0.94.0, but MPT structures have changed and there are known state change differences for N3 RC1 testnet, so you need to do full node resynchronization on update from 0.94.0. Some SDK APIs have changed also improving developer experience, but they may affect your code. We don't plan to make more of RC1-compatible releases (the protocol has slightly changed already since the release).

New features:

  • RPC (*Client).GetDesignatedByRole method to easily get node lists from RoleManagement contract (#1855)
  • calculatenetworkfee RPC method support (#1858)
  • RPC client now has additional methods for NEP-11 contracts and specifically for NNS native contract (#1857)
  • contract deployment from multisig addresses (#1886)

Behavior changes:

  • node roles for RoleManagement contract were moved into separate package (#1855)
  • NotaryVerificationPrice constant was moved into package of its own (#1855)
  • testnet configuration now has proper N3 RC1 testnet magic (#1856)
  • crypto.Verifiable interface was removed, now any hash.Hashable thing can be verified (and signed, #1859)
  • Network field was dropped from transaction.Transaction, block.Header, payload.Extensible, state.MPTRoot, payload.P2PNotaryRequest and network.Message, it was needed for proper hash calculations before recent protocol changes (even though this field is not a part of serialized representation of any of these elements), but now it's only used to sign/verify data and doesn't affect hashing which allowed to simplify interface here (#1859)
  • RPC server now returns StateRootInHeader option in its getversion request answers if it's used by the network (#1862)
  • NNS record types were moved to separate package (#1857)
  • MaxStorageKeyLen and MaxStorageValueLen constants were moved to storage package from core (#1871)
  • oracle service now accepts complete URL for other nodes RPC services (#1877)

Improvements:

  • RPC (*Client).AddNetworkFee method is now more informative in some error case (#1852)
  • proper NEP-17 support in unit test contract (#1852)
  • documentation updates for examples and services (#1854, #1890)
  • syscall number is now printed for failed syscalls (#1874)
  • better logging (#1883, #1889)
  • Oracle native contract interop documentation extended (#1884)
  • Oracle native contract interop extended with return codes and constants (#1884)
  • oracle smart contract example (#1884)
  • NEP-11 NFT smart contract example (#1891)

Bugs fixed:

  • node could simultaneously try to connect to the same peer multiple times in some cases (#1861)
  • uniqueness is enforced now for other node addresses provided by peers (#1861)
  • stateroot message hash wasn't calculated the same way as in C# (#1859)
  • state validation service P2P messages were not signed properly (#1859)
  • state.MPTRoot structure JSON representation was different from C# one (#1859)
  • stateroot messages generated by state validation service were not setting proper message category (#1866)
  • block persistence caches were flushed too early by MPT-managing code (#1866)
  • validated stateroot data overwrote local one which lead to node not functioning after restart if states were different (#1866)
  • peers delivering P2P message with validated stateroot differing from local one were disconnected (#1866)
  • state dump comparing script was using old Ledger native contract ID (#1869)
  • candidate registration check was made in different way from C# in native NEO contract leading to different execution results for erroneous voting transactions (#1869)
  • state change dumps were different from C# node for erroneous voting transactions even though contract's state was the same (#1869)
  • arguments were not completely removed from stack in erroneous Runtime.Notify calls leading to different stack state with C# implementation (#1874)
  • in case contract failed execution with THROW the node didn't print the message from the contract properly (#1874)
  • getproof RPC call output was not strictly compliant with C# implementation (#1871)
  • MPT node serialization and some constants were out of date wrt C# implementation (#1871)
  • native NEP-17 contracts could use stale balance data in some cases (#1876)
  • state validation service could lock the system during shutdown, preventing proper node exit (#1877)
  • state validation and oracle services were started before node reaching full synchronization which could lead to excessive useless traffic (#1877)
  • some native contract calls in function arguments could be miscompiled (#1880)
  • oracle service was accepting http URLs instead of https (#1883)
  • neofs URIs were subject to host validation in oracle service even though there is no host there (#1883)
  • neofs URI scheme was differing from C# implementation (#1883)
  • no default value was used for NeoFS request timeout if it's not specified in the configuration (#1883)
  • oracle response code was marshalled as integer into JSON (#1884)
  • MPT could grow in memory unbounded (#1885)
  • Storage.Find results could differ from C# in some cases (#1888)

Tsessebe

19 Mar 18:22
Compare
Choose a tag to compare

N3 RC1-compatible release is here. We've implemented all Neo protocol changes (including state validation service and NeoFS support for oracles) and are ready for testnet launch now, so that you could play with new native contracts, VM instructions and other goodies RC1 brings with it. Some usability improvements and documentation updates also went into this release as well as a number of fixes stabilizing Notary subsystem (which is NeoGo-specific protocol extension).

Please note that this release is incompatible with 0.93.0. We do plan to make an update soon (with more examples and documentation), but there won't be long-term support provided, Neo N3 is still on its way to mainnet (although RC1 and testnet are major milestones on this route).

New features:

  • Compiler:
    • ellipsis support for append() to non-byte slices (#1750)
    • NEP-11 standard conformance check (#1722)
    • onNEP*Payable compliance checks (#1722)
  • you can pass files as contract arguments now with filebytes CLI parameter (#1762)
  • CLI now supports specifying addresses everywhere script hashes are accepted (#1758)
  • System.Contract.CreateMultisigAccount interop function (#1763)
  • SQRT and POW VM instructions (#1789, #1796)
  • new NeoFSAlphabet node role added to RoleManagement contract (#1812)
  • node can serve as state validator node (#1701)
  • oracles now support NeoFS (#1484, #1830)
  • CLI can be used to dump wallet's public keys (#1811)
  • storage fee, candidate register price and oracle request price can now be adjusted by committee (#1818, #1850)
  • native contracts can now be versioned (#1827)
  • RPC client was extended with price getters for native contracts (#1838)

Behavior changes:

  • NFTs no longer have "description" field (#1751)
  • P2P Notary service configuration moved to ApplicationConfiguration section (#1747)
  • native contract methods requiring write permission in call flags now also require read permission (#1777, #1837)
  • System.Contract.Call interop function now requires state read permission (#1777)
  • NeoGo no longer supports Go 1.13 (#1791)
  • native contract calls are now contract version aware (#1744)
  • interop wrappers for smart contracts now use int type for all integers (#1796)
  • MaxTransactionsPerBlock, MaxBlockSize, MaxBlockSystemFee settings are now a part of node configuration and no longer are available in Policy contract (#1759, #1832)
  • storage items can no longer be constant (#1819)
  • state root handling is now conformant with C# implementation (with state validators and vote/stateroot messages, #1701)
  • blocks no longer have ConsensusData section, primary index is now a part of the header (#1792, #1840, #1841)
  • wallet multisign sign command was renamed to wallet sign, it now works not just for multisignature contract signing, but also for multiple regular signers as well as contract verification signing
  • conversion interops were moved to StdLib native contract (#1824)
  • crypto interops (except basic CheckSig and CheckMultiSig) were moved to CryptoLib native contract (#1824)
  • PACK, UNPACK and CONVERT instructions now cost more (#1826)
  • some native contract types were adjusted (#1820)
  • native Neo's getCommittee and getNextBlockValidators methods now cost less (#1828)
  • block/transaction/payload hashing and signing scheme has changed (#1829, #1839)
  • signing context is now serialized to JSON using base64 for data (#1829)
  • System.Contract.IsStandard interop was removed (#1834)
  • notifications are no longer allowed for safe contract methods (#1837)

Improvements:

  • verification script are now allowed to make contract calls (#1751)
  • extensible payloads now have the same size limit as other P2P messages (#1751)
  • error logging is more helpful now in some cases (#1747, #1757)
  • function inlining support in compiler for internal intrinsics, interop refactoring (#1711, #1720, #1774, #1785, #1804, #1805, #1806, #1796, #1809)
  • documentation updates (#1778, #1843)
  • sendrawtransaction and submitblock RPC calls now return more detailed information about errors for failed submissions (#1773)
  • NeoGo now supports Go 1.16 (#1771, #1795)
  • NEP-17 transfer tracking was optimized to avoid some DB accesses (#1782)
  • interop wrappers added for SIGN/ABS/MAX/MIN/WITHIN instructions (#1796)

Bugs fixed:

  • designateAsRole method returned value while it shouldn't (#1746)
  • deleting non-existent key could lead to node panic during MPT calculation (#1754)
  • some invalid IPv4 were accepted by name service contract (#1741)
  • some legitimate IPv6 addresses were rejected by name service (#1741)
  • compiler: append() to byte array produced wrong results for bytes with >0x80 values (#1750)
  • wrong notary-signed transaction size in notifications leading to client disconnects (#1766)
  • CALLT wasn't checking permission to read states and make calls in call flags (#1777)
  • proper escaping wasn't done in some cases on VM stack item conversion to JSON (#1794)
  • improper network fee calculation for complex multi-signed transactions in some cases (#1797)
  • importing package with the same name as compiled one could lead to incorrect compiler behavior (#1808)
  • boolean values were emitted as integers by compiler leading to some comparison failures (#1822)
  • invokecontractverify wasn't calculating proper GAS price of verification using contract (#1825)
  • ContractManagement contract wasn't returning NULL value from getContract method if contract is missing (#1851)