Skip to main content


  • sc
    • Fix incorrect emitting of numbers in ScriptBuilder.
    • Add support for Map type in emitContractParam function.


  • wallet
    • Accept scriptHash with 0x prefix in Account constructor.
  • sc
    • Add Map contract parameter support.
  • u
    • New function to remove 0x prefix.


  • wallet
    • Fix slow encrypt/decrypt in certain React setups.
  • sc
    • Add PUSHT and PUSHF opcodes.


  • rpc
    • Add traverseIterator method.
    • Change InvokeResult to allow an optional specific type for the stack.
  • sc
    • Add new fields to StackItem to be able to be used on traverseIterator.


  • tx
    • Update transaction attributes to NEO3.
    • Fix BooleanWitnessCondition serialization.
    • Fix CalledByContractCondition missing 0x for hash in toJson.


  • tx
    • Fix WitnessRule type deserialization.
    • Fix BooleanWitnessCondition deserialization for false values.
    • Fix AndWitnessCondition deserialization.
  • misc
    • Update testnet magic to T5


  • sc
    • Fix NEF class to match the format since v3.1.0+.
  • api
    • Add smartCalculateNetworkFee which wraps the calculateNetworkFee RPC method and takes care of the temporary witnesses to correctly calculate the fee.
  • experimental
    • update addFees() to use prioritisationFee of CommonConfig if specified.
  • rpc
    • Remove obsolete Fixed8Parser function.
  • u
    • Remove obsolete num2fixed8 and fixed82num functions.
    • Deprecate localized calculateNetworkFee which can't handle forks in favour of smartCalculateNetworkFee which uses the RPC node.
    • Update addFees() to use prioritisationFee of CommonConfig if specified.
  • misc
    • Update core documentation.


neo-cli: v3.3.1

SDK changes:

  • rpc
    • Fix wrong type for state key in ApplicationLogJson.
    • Update default address version to match NEO 3.
  • sc
    • Add System.Runtime.GetAddressVersion SYSCALL.
    • Update System.Runtime.GetNotifications SYSCALL fee.
    • Remove System.Runtime.GetRandom from the fixed interop service price list.
  • misc
    • Remove obsolete Fixed8 class.
    • Remove obsolete settings document.


neo-cli: v3.1.0

SDK changes:

  • api
    • Include transaction signers when using validateScript().
    • Add neon-uri.
    • Change SigningFunction signature to allow the callee to determine how to extract the necessary information for signing. This makes signing with a Ledger possible through the NetworkFacade interface.
    • Deprecate calculateNetworkFee in favour of the RPC call.
    • Remove notifications API.
  • const
    • Update magic numbers to reflect ecosystem.
  • experimental
    • Allow custom signers list in experimental contract invoke.
  • ledger
    • Updated to support NEO N3 ledger app.
  • rpc
    • Update getVersion response format.
    • Rename Nep17Tracker to TokenTracker.
    • Add getNep11Balances, getNep11Transfer and getNep11Properties.
    • Add getNativeContracts.
    • Add calculateNetworkFee.
    • Update the Query type to conform to JSONRPC specs to allow structure values under params. This means either an array or object.
    • Add BatchQuery to allow for an array of JSON-RPC calls to be sent over a single rpc call.
  • sc
    • Fix ContractPermissions.toJson dropping 0x prefix causing manifest parsing to fail on the C# side.
    • Add PACKMAP and PACKSTRUCT opcodes.
    • Update interopMethods following the introduction of the StdLib and Crypto on chain native contracts.
    • Fix {type: "Any", value: null"} not being recognized as a valid ContractParam.
  • tx
    • Fix sorting of witnesses in a Transaction.
    • Add support for WitnessRules.
  • uri
    • Add new neon-uri package. neon-uri is a rename and upgrade of nep-9. Nep9 style uris are very specific to neo2 and are not too relevant in N3 context. neon-uri retains the core support of token transfers while also adding an additional voting uri support. It draws from ethereum's proposal of adding prefixes to indicate the core intent of the uri.
  • wallet
    • Rename account.isdefault to isDefault.
    • Add argument to isAddressto verify with a specific address version.
  • misc
    • Remove settings and plugin style system.
    • Breakout addressVersion as configurable parameter and add new DEFAULT_ADDRESS_VERSION export as the library's default.


neo-cli: v3.0.0-rc2
neon-js: v5.0.0-next.10

Key blockchain changes:

  • Scripthashes are changed again, please regenerate all addresses and NEP2 keys if required.

SDK changes:

  • sc

    • Syscalls are renamed. Please take a look at the InteropServiceCodes to update it.
  • consts

    • Rename DesignationContract to RoleManagement.
    • Removed NameService. NameService contract is moved to a non-native deployment.


neo-cli: v3.0.0-rc1
neon-js: v5.0.0-next.7

Key blockchain changes:

  • Smart contract hashes are determined in a new way causing all native contract hashes to change.
  • Neo address format has changed.
  • Smart contract execution fees have changed.
  • JSON, Binary and most Crypto SYSCALLs have been moved to StdLib and CryptoLib native smart contracts.

SDK changes:

  • sc
    • NEO_BINARY_* and NEO_JSON_* SYSCALLs removed.
    • Transaction networkfee and systemfee representation changed to be without decimals.
  • u
    • isMultisigContract and isSignatureContract helpers updated to new format changes.
  • wallet
    • Updated signature and multisignature contract scripts to structure changes and using the new crypto syscalls.


neo-cli: v3.0.0-preview5
neon-js: v5.0.0-next.6

Key blockchain changes:

  • Smart contract hashes are determined in a new way causing all native contract hashes to change.
  • More RPC methods results been streamlined to return base64 values requiring interface updates.
  • Gas consumption results in RPC calls are no longer returned as decimal values.
  • Contract calling function signatures changed requiring modification of the transaction builder.

SDK changes:

  • rpc

    • Rename getApplicationLogs to getApplicationLog.
    • ApplicationLog interface changed to move the majority of properties under the executions array.
    • The key parameter to getStorage needs to be hex encodable. The return value is now base64 encoded.
    • getContractState no longer returns script as a key in its result. Instead, it returns a nef key describing the smart contract including the script.
  • sc

    • Neo Executable Format (NEF) class has been added. This allows loading compiled contracts from disk and inspect or deploy them.


neo-cli: v3.0.0-preview4
neon-js: v5.0.0-next.5

Key blockchain changes:

  • Prices for VM operations are now adjusted to be dynamic. It is now a baseline price multiplied by PolicyContract's GetExecFee.
  • Contract deployment is now managed by a native contract.
  • NEP17 is now the new token standard superseding NEP5.

SDK changes:

neon-core and neon-api is now supported and usable for this preview stage.

  • Misc

    • GAS claim is now more complicated, sending NEO to the same address does not give you GAS anymore. Currently, this function is not supported until further notice. If you want to claim gas, just have 2 addresses and send NEO between both addresses.
    • Removal of the Nep5 package. The functionality is now absorbed into the sc package as tokens become part of the native functionality.
    • Nep5 is now deprecated in favor of Nep17. The new standard removes name, adjusts transfer and adds some new functionality.
    • Fees are now more dynamic. It now uses data from PolicyContract as a multiplier to the execution price.
  • api

    • NetworkFacade is the new high level API class that is intended to make common wallet operations easy to use. It will contain the following methods:

      • transferToken
      • getTokenInfos
      • getTokenBalances
      • getFeeInformation
    • TransactionBuilder is a utility class for building transaction templates. This will help create transactions based on intents provided. Currently only supports token transfer.

    • TransactionValidator is a class working in tandem with TransactionBuilder to validate and autofill other portions of the transaction that requires a network connection. For example, both fees require blockchain assistance in determining the correct fees.

  • u

    • Fixed8 is now deprecated. BigInteger is the new replacement for this class. BigInteger will allow for bigger numbers and less messing around with the fixed convention of 8 decimals. Internally, the SDK will try to represent and move data around as integers since the decimals is merely an arbitrary precision data contained within the contract.
  • tx

    • Reduce max transaction lifespan down to 24 hours (based on 15s blocks).
  • rpc

    • Reworked base class into RpcDispatcher that uses mixins to create suitable clients. This allows typings to be more specific for certain cases where only a subset of the RPC methods are required.
    • Invoke* methods and transaction methods now use base64 encoding for transmission of data.
    • rename getValidators to getNextBlockValidators
    • getVersion is updated to return the full payload (previously it only returned the version string). This allows users to access the magic number inside this payload which will be needed to sign transactions.
  • sc

    • OpToken is introduced to wrap OpCode. This allows for better parsing of VM scripts.
    • Introduce a better typed interface ContractCall. This replaces the old ScriptIntent with the primary goal of making the arguments easier to translate into proper VM script format.
    • Remove ScriptParser in favor of using OpToken.
    • Renamed Nep5Contract to Nep17Contract. Most of the original Nep5 methods remain unchanged with the exception of the removal of the name method.
    • Removed contract deployment code. We are testing it out in experimental at the moment.
  • wallet

    • Implement WIF format natively to reduce dependency.

    • Deprecate ASSET_ID in favor of NATIVE_CONTRACT_HASH. Asset as a term is pretty much deprecated in neo3.
  • experimental

    • new section under neon-js to test out a different way of doing things. Contract deployment and some basic api functions are available. Please look at the readme found within the src folder for more details.


neo-cli v3.0.0-preview3
neon-js: v5.0.0-next.4

Key blockchain changes:

  • Another update of InteropServiceCode. This means that all scripthashes, addresses and encrypted keys from preview2 are invalid and will need to be regenerated.
  • Transaction.cosigners is now renamed to signers. The sender field is now inferred from the first Signer.
  • Codebase wide changes for json field name convention. Field names are now lowercased without seperators (previously it was lower case with underscores).
  • Add support for SECP256K1 curve (same elliptic curve used in bitcoin).

SDK changes:

As usual, only neon-core will be updated and usable during the preview stage.

  • Misc

    • Enforce ts-lint for docstrings throughout the codebase.
  • tx

    • The cosigners field is now signers. Deserialization order has changed.
    • The sender field is now inferred as the first signer. It is now not included in the transaction serialization.
    • Updated WitnessScope enum to include the FeeOnly enum. Integer ordering has also changed.
  • sc

    • Updated codes for OpCodes and InteropServiceCodes.
    • Updated interfaces for ContractParamType, StackItem enum types. Integer ordering for both types have changed.
    • Removed serialization of StackItem. Added toJson support.
    • Update ContractManifest and its related classes.
  • rpc

    • Updated fields to use lowercased strings with no separators. This should not have any effect internally as neon-js will continue to use camelCase.


neo-cli: v3.0.0-preview2
neon-js: v5.0.0-next.3

Key blockchain changes:

  • Change of address prefix. Now all addresses produced will start with N.
  • Total revamp of OpCode and InteropServiceCode. All previous scripts are invalid.
  • Signing of transaction now involves the magic number of the network. This makes transaction witnesses unique across the different networks (You cannot take a transaction from MainNet and replay it on TestNet. This was possible when UTXO was removed.)

SDK changes:

Due to the large number of changes ongoing, only neon-core will be fully functional and maintained.

  • Misc

    • Establish testing for Node 10 and Node 12.
  • tx

    • Renamed scripts field to witnesses field
    • Transaction.sign now takes an optional magic number argument to sign.
    • Add support for reading JSON outputs from neo RPC endpoints.
  • sc

    • OpCode is now an int enum (previously string)
    • ScriptBuilder.emitString now accepts a UTF8 string instead of hexstring. Please use emitHexstring for hex. This makes the distinction when emitting strings clearer.
    • Make public the various methods on ScriptBuilder for emitting different data types. Please avoid emitPush as it is too overloaded and may cause unexpected consequences.
    • Add a function to return a copy of the script (replaces the .str getter)
  • rpc

    • Update methods to match preview2 methods. This removes getBlockSysFee. The rest received some data structure changes.
    • Optional verbose paramters now accepts booleans.
    • Amend getVersion to read the keys correctly.
  • wallet

    • Account generation now uses the new address prefix of 0x35.
    • Witness generation is updated to use the new OpCodes.
    • VerificationScript generation is also updated to match preview2.
  • u

    • Add support for encoding and decoding between hexstrings and base64. This is used to send data over RPC.


neo-cli: v3.0.0-preview1
neon-js: v5.0.0-next.2

Key blockchain changes:

  • Removal of the UTXO system coupled with the integration of additional RPC methods on the neo node allowed for the wallet to operate without the need for a third party aggregator. Neon-api is now a high level API package.

  • A change in the neoVM and the generation of scripts means a change in addresses. Private and public keys are the only things that remain unchanged from neo2. All other details (Scripthash, WIF, NEP2, Address) are different.

SDK changes:

  • Neon-api

    • Removed all provider modules. We do not need to rely on neoscan for details in order to form transactions.
    • Introduced a new flow for transaction forming. Old flow is removed.
      • TransactionBuilder class for forming transactions. This follows the builder fluent pattern allowing chaining of methods to add data to the transaction. Most of the more friendly methods will be found on this class with the old methods migrating off the Transaction class.
      • TransactionValidator is a new step in the process. It helps validate the properties of the transaction by making rpc calls to the blockchain and making sure that the parameters are valid. It also provides suggestions whenever possible.
      • TransactionSigner is a basic class for signing the Transaction. This will replace the sign function on the Transaction class itself.
  • Neon-core

    • tx

      • There is only one Transaction type now.
      • Added new fields:
        • nonce: Field to make transaction unique since there is no more UTXO.
        • validUntilBlock: expiry date for transactions in mempool.
        • systemFee and networkFee: Separate fields for each fee.
        • sender: Identity of the main signature.
        • cosigners: Identities of other parties involved. Comes with permissioning for contract calls.
      • Replaced AddAttribute method. It now only accepts an TransactionAttributeLike object. Old method is now on the builder.
    • sc

      • There is now OpCode and InteropCodes. OpCode are your basic computer instructions while InteropCodes are for more complex operations. Signature verification code is moved from OpCode to InteropCode. (This is the primary change that resulted in the change in addresses)
      • Add ScriptParser class to read script back into ScriptIntent.
      • Add ContractManifest class.
    • tx

      • Updated Account to generate the new scripthash.
    • u

      • Add Hexstring class to handle hexstrings. Capable of handling strings starting with 0x prefix.
  • Neon-js

    • Updated networks to connect to neo3 TestNet.