City of Zion has recently released v0.8.2 of neo-python, a Python-based node and SDK for the NEO blockchain. The project aims to become a full port of the NEO project. The original changelog can be viewed here, and the latest version can be downloaded here.

New Features

  • Add getblockheader RPC method

The neo-python project does not currently have support for all RPC methods that are implemented in neo-cli. CoZ developer @jseagrave21 provided the getblockheader method, which follows the same example set by neo-cli, but also accepts block height as a parameter in addition to block hash.

  • Add VM sanity checks for operations on BigInteger’s

Independent developer @udoprog noted a potential exploit that could cause the VM to perform computationally expensive operations with a relatively low GAS cost. CoZ developer @ixje resolved the issue.

The neo-python team created an optional API extension that allows for the implementation of non-standard RPC methods (methods that are not implemented in neo-cli). In the future, extended RPC functionality will be moved to a Plugin-based system.

  • Allow wallets to sync past corrupt blocks

Due to past fork incidents on the NEO blockchain, wallets could become stuck on a corrupt block. CoZ developer @localhuman provided a solution that allows wallets to skip corrupt blocks.

Bug Fixes

  • Fix max recursion depth exceeding when network data inflow exceeds processing speed

If incoming data exceeded the rate at which neo-python could process it, eventually the max recursion depth will be reached, causing a segmentation fault. @ixje resolved the issue by using a while loop to check if there is more data for parsing, as an alternative to recursion.

  • Fix discrepancy between getpeers RPC call and the maxpeers setting
  • Fix return types of claimGas function.
  • Fix ExtendedJsonRpcApi
  • Fix cleaning up tasks for disconnected peers

CoZ developer @ThomasLobker noticed that when a connected peer disconnected, tasks would keep running and consuming memory. He resolved the issue by adding a .stop() method to the tasks when cleaning up the disconnected peers.

  • Fix duplicate task starting for requesting blocks

General Changes

  • Add log output control via the new config output_level command. The old config debugcommand is removed.
  • Update Readme and Prompt.py help
  • Update documentation to include new IsPayable contract flag in the examples
  • Update CreateAddress functionality and tests

Community member @wanglongfei88 reported that an error message was displaying when creating an address, although it would be created successfully. @jseagrave21 addressed the issue, and took the opportunity to improve the functionality and make some improvements to CreateWallet tests.

  • Add raw transaction building examples in \examples\ folder
  • Update compiler version v0.5.6
  • Add the option -u (unittest-net) to prompt.py
  • Add fixtures guidelines and add the smart contract source codes (UnitTest-SM.zip) to the fixtures package
  • Adds sendmany feature to prompt.py, integrates with send feature, and adds provisions for sending with a negative fee and bad from_address
  • Remove Neo.Witness.GetInvocationScript

The latest neo-python release can be acquired here. Full documentation on the installation, configuration and use of neo-python can be found here.

Readers that wish to contribute to the project are recommended to join the #python channel on the NEO discord, or to visit the current list of open issues on Github.

More information on City of Zion can be found at the links below.