neo-go/CHANGELOG.md

230 lines
11 KiB
Markdown
Raw Normal View History

# Changelog
This document outlines major changes between releases.
2020-08-18 14:04:41 +00:00
## 0.91.0 "Ululation" (18 August 2020)
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)
2020-07-14 15:47:33 +00:00
## 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).