All notable changes to this project are documented in this file.
- Reformat wallet verbose output to include big-endian scripthash
- Fix network syncing against neo-cli
2.10.3
clients - Update Python requirements
- Fix Docker configuration pip issue
- Fix parsing prompt command arguments that include spaces (e.g. description tx attributes)
- Allow override of test invocation return type
- Add current wallet height to bottom toolbar
- Change class attributes of
Transaction
into instance attributes and fix constructor - Fix sys_fee calculation in block persist.
- Improve testing of "getbalance" RPC method
- Support cancelling actions with
KeyboardInterrupt
- Enhance output of
wallet
cli command - Fixed size calculation for
RegisterTransaction
- Support updating np-core to throw exceptions instead of logging errors #888
- Fixed size calculation for
InvocationTransaction
#919 - Update Virtual Machine to latest implementation, Add support for running official JSON test vectors #921 #932
- Add PICKITEM for ByteArray into VM #923
- Improve Connection Failure Handling in NodeLeader #915
- Improve transaction coverage and fix
PublishTransaction.Size()
#929 - Align
Fixed8
ToString()
output with C# #941 - Move from using
Twisted
toasyncio
as event driven framework #934 - Add new networking code
- Add IP Filtering
- Tighten smart contract storage context validation
- Update VM to 2.4.3 (Also updates
ApplicationEngine
,StateReader
andStateMachine
) - Add support for new Ping/Pong network payload
- Add neo-vm JSON test support + add new Debugger wrapping class
- Various VM performance updates
- Various code cleaning updates
- Ensure LevelDB iterators are close, ensure all
MemoryStream
usages go throughStreamManger
and are closed. - Fix
np-import
not importing headers ahead of block persisting potentially unexpected VM execution results - Fix undesired debug statement printing
- Add negative bitwise shifting support for
BigInteger
to match C# - Include address aliases in
wallet
command output - Fix
config maxpeers
and update tests - Fix error while parsing list arguments from prompt for smart contract test invocations
- Fix
Runtime.GetTrigger
andTransaction.GetType
syscalls pushing wrong StackItem type - Update handling of default cause for
PICKITEM
instruction - Fix
InteropService.GetInterface
not validating types correctly - Speed up
np-import
when appending blocks - Fix
BigInteger.ToByteArray()
for some negative values to return too many bytes - Implement SimplePolicyPlugin for transactions sent to a node #960
- Fix transaction deserialization not setting correct type for
ContractTransaction
- Fix
GetBigInteger()
return value ofBoolean
StackItem
to return correct type - Add workaround for
Neo.Contract.Create
SYSCALl accepting invalidContractParameterType
's until neo-cli fixes it to keep same state - Fix parsing nested lists #954
- Fix clearing storage manipulations on failed invocation transaction execution
- Port caching layer from neo-cli
- Fix
Contract_Migrate
syscall - Fix
BigInteger
modulo for negative divisor values - Fix
GetBoolean()
forArray
stackitem - Fix
BigInteger
division for negative dividend values - Add functionality for RawTransaction class
- Fix
GetPriceForSysCall()
for aNeo.Contract.Create
syscall with invalid contract properties - Updated
np-bootstrap
to delete the downloaded bootstrap file by default #986 - Fix
Remove()
behaviour forMap
andArray
types to be inline with C# - Add support for compressed syscalls
- Validate SimplePolicy for signed transactions
- Fix NEP-5 token send operation in
np-prompt
to properly handle tokendecimals
/scale #990 - Fix
NOT
VM instruction - Fix StackItem deserialization for
Boolean
VM type - Update
CheckDynamicInvoke
to operate on snapshots - Fix
Contract.Destroy
not always deleting storage - Fix
Equals()
ofByteArray
- Fix max recursion depth exception when counting certain VM StackItems that point to themselves
- Fix
RIGHT
opcode for 0 count edge case
- Fix incorrect error handling when importing a 1 out of 2 multi-signature address #860
- Gracefully handle invalid
GET
request #863 - Implement tx size network fee calc #869
- Fix
config maxpeers
to disconnect peers if limit is lower than before #878 - Implement the ability to attach a priority fee to applicable transactions #880
- Fix an invalid list access error during client connection error edge case #882
- Fix NetworkAddressWithTime address serialization #897
- Add additional debug logging to help investigate transaction verification failures #898
- Update
getassetstate
RPC method to support neo and gas aliases; Cleanupshow_contract_state
#667 - Add fix to ensure tx is saved to wallet when sent using RPC #680
- Disallow
Void
type input parameters for smart contracts and increase test coverage #690 - Fix confirmed tx not being purged from mempool #703
- Fix bootstrap thread joining failure on Ubuntu systems #705
- Make bootstrap lookup dynamic such that users don't have to update their configs from here on forward #705
- Move some warnings and 'expected' errors to DEBUG level to avoid logging to console by default #708
- Empty VerificationScripts for deployed contracts now work as intended #709
- Fix various issues related to signing multi-signature transactions #710
- Add GET and OPTIONS request functionality for JSON-RPC servers #712
- Fix RPC's
getaccountstate
response schema to matchneo-cli
#714 - Add bad peers to the
getpeers
RPC method #715 - Allow a raw tx to be build without an active blockchain db in the environment #718
- Introduce Django inspired component loading for REST and RPC server #719
- Fix unnecessary default bootstrap warning for mainnet showing. #722
- Various updates to the network code to improve stability as well as inspection #723
- Added peer health checking to validate that we get the data we requested within a given time threshold
- Added peer connection monitoring to keep queueing or reset if we have no more valid addresses to connect to.
- Added extensive logging to improve inspection
- Fix
gzip
failure in current implementation of ExtendedJsonRpcApi #724 - Gracefully handle balance query failures of NEP-5 tokens. #744
- Fix
getcontractstate
JSON output to match neo-cli 2.9.2 #746 - Fix
getrawtransaction
JSON output to match neo-cli 2.9.2 #751 - Add
--to-addr
option when claiming gas #755 - Remove
ExtendedJsonRpc
server from base repo (still available as extension) #756 - Fix calculation of asset change value when using multiple alternating asset inputs #803
- Refactor CLI to be more user friendly and support better future extensibility #805
- Update TestNet seeds #807
- Add Reset logic to NodeLeader such that Blockchain fixture testcases reset properly #809
- Resolve peewee DeprecationWarning #810
- Add VM SafeReadBytes #812
- Add gettransactionheight RPC method #813
- Update
ApplicationEngine
methodsCheckStackSize
andGetPrice
#814 - Cleanup
show nodes
output #815
- Improve Tokens.py and
token_send
, increase test coverage - Fix max recursion depth exceeding when network data inflow exceeds processing speed
- Add log output control via the new
config output_level
command. The oldconfig debug
command is removed. - Update Readme and Prompt.py
help
- Update documentation to include new
IsPayable
contract flag in the examples - Fix discrepancy between
getpeers
RPC call and themaxpeers
setting - Update
CreateAddress
functionality and tests - Add VM sanity checks for operations on
BigInteger
's - Add raw transaction building examples in
\examples\
folder - Add ExtendedJsonRpcApi, Add
getnodestate
RPC extended method, Addgettxhistory
RPC extended method - Fix return types of
claimGas
function. - 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 withsend
feature, and adds provisions for sending with a negative fee and bad from_address - Fix
ExtendedJsonRpcApi
- Fix cleaning up tasks for disconnected peers #687
- Fix duplicate task starting for requesting blocks
- Add
getblockheader
RPC method - Remove
Neo.Witness.GetInvocationScript
- Allow wallets to sync past corrupt blocks
- Add
sendmany
andsendfrom
RPC methods & tests and integrate withsendtoaddress
- Updated all the dependencies
- Add
Neo.Transaction.GetWitnesses
,Neo.Witness.GetInvocationScript
,Neo.Witness.GetVerificationScript
- Change notification transfer event format to use string quoted integer
- Fix Notification token list to include correct hash for contract and token
- Removes all
hold
andwithdraw
related functionality from wallet and prompt - Various updates to inaccuracies in
ToJson
output ofAccountState
- Add documentation support for Python 3.7
- Change execution fail event payload to give more meaningful error messages
- Implemented
sendtoaddress
RPC method #556 - Gracefully handle network packet deserialization failures
- Implementation Stack Isolation (NEP8)
- Fix issue resetting storage between Smart Contract invocations
- Default
ApplicationConfiguration.AcceptIncomingPeers
toFalse
, if config value is not present - Update seed list to include NGD nodes
- Fix unhandled deferred errors
- Fix
Blockchain.DeregisterBlockchain
not clearing all static variables - Disable
prompt.py
test cases due to high time consumption and unreliable results. - Migrate the existing test cases, which depend on BlockchainFixtureTestCase and WalletFixtureTestCase, to a privnet. Reduction of the fixtures' size to about 7MB. #478
- Ensure non-zero send value in prompt.py
- Update block importing and exporting functionality.
- Add send-zero provision and improved test coverage to
sendtoaddress
- Update Mainnet bootstrap files
- Update to compiler version
v0.5.3
- Prefix
vin
JSON output format to match C# - Update
neo-boa
to v0.5.0 for Python 3.7 compatibility - Update
pexpect
to 4.6.0 to be compatible with Python 3.7 - Accept incoming node connections, configurable via protocol config file setting (default: OFF)
- Fixes vulnerability to RPC invoke functionality that can send node into unclosed loop during 'test' invokes
- Fix issue with opening recently created wallets
- Fix
import_blocks.py
block hash caching issue - Update prompt.py: add
account
to help, update help, update standard completions, addconfig maxpeers
functionality, updateconfigure
function arguments to behave as intended - Add support for multiple requests in one transaction for JSON-RPC
- Update docs
toctree
so all pages are indexed & added instructions for contributing to docs
- Fix issue with
UserWallet.SaveStoredData
- Update neo-core to v0.5.1
- Add appropriate GAS cost for
CHECKMULTISIG
for an array - Add appropriate GAS cost for
VERIFY
- Update test_prompt.py to acheive passing neo-python-core build
- Add Seedlist.rst and update Basicusage.rst for API Servers
- Add test for np-prompt using pexpect
- Add getwalletheight RPC call
- Add support for Peewee 3.6.4
- Add support for
IsPayable
flag in prompt. - Fix Block header problems with
block_import.py
script - Sync GAS price calculations with current Neo core
- Update bootstrap files for mainnet and testnet
- Fix
ContextItem
JSOn decoding - Fix
sys_fee
calculation for certain transaction types - Fix
TransactionAttribute
duplication in Transactions
- Adds ability to attach a fee to a
send
transaction - Update Node selection mechanism
- Store
Transactions
list items inside aBlock
in a consistent format. - Improved peer connection maintenance
- Add CreateAddress Feature
- Update NodeLeader peer monitoring system
- Add ability to configure size of requests for blocks as well as block processing queue size
- Update mainnet bootstrap files
- Fix size calculations for all serializable classes
- Add
size
key to JSON output of Block and Transaction - add prompt command to split VIN to multiple VOUT
- update notification endpoint to include
total_pages
in output, and allowpagesize
paramater to be passed in - update seeds for mainnet
- Updated package requirements, removed
pycrypto
from all dependencies to fix install error(s) #485 - Adds option to enter arguments for smart contract in an 'interactive' mode, which allows for much better parsing of input, activated by passing the
--i
flag when invoking. - Adds ability to not parse address strings such as AeV59NyZtgj5AMQ7vY6yhr2MRvcfFeLWSb when inputting to smart contract by passing the
--no-parse
flag - Changes the structure of items dispatched in SmartContractEvents to use the
ContractParameter
interface for better type inference and variable usage. - Fix sending NEP5 tokesn from a multisig address.
- Bugfix: np-api-server with open wallet now properly processes new blocks
- Update neo-boa to v0.4.8 and neocore to v0.4.11
- Add VM support for
Neo.Contract.IsPayable
- When using a custom datadir (with
--datadir
),np-prompt
will store log and history files there instead of the default directory. Note: if you use a custom datadir that does not yet exist,np-prompt
starts without history or logs because those files are just created from scratch in the custom datadir. - Updated the dependencies
- Updated MainNet bootstrap files
- Added
--wallet
flag to thenp-api-server
command. The server can now open a wallet. #459 - Added a partial implementation of the
listaddress
RPC method. #459 - Added
getnewaddress
method to the JSON RPC API #464 - Added an implementation of the
getbalance
RPC method. #465 - updated seed list, change behavior of restarting NodeLeader when connected nodes falls below 2
- Add Neo.Blockchain.GetTransactionHeight API
- Updating Enumerator API for parity with Neo PR #244
- Unifying interop namespace Neo PR #254
- Update
neo-boa
version to v0.4.7 for new Enumerator/Iterator interop methods and additional python opcode support. - Fixed REST API
/status
current_height
off-by-one #475
- update FunctionCode Return type parsing
- add
np-export
andnp-import
commands for importing and exporting of raw block data files
- fix a bug with smart-contract parameter string parsing #412
- fix
StateMachine.Contract_Migrate
and add tests - add ability to attach tx attrs to build command and testinvoke. altered tx attr parsing
- updated the install instructions present on
docs
- fix issues with some JSON-RPC properties #418
- added support for optionally chunking through GAS claims in prompt #419
- support RPC and REST endpoints in parallel #420
- Added new command
tkn_history
to the prompt. It shows the recorded history of transfers of a given NEP5 token, that are related to the open wallet. - fix current block lookup during smart contract event processing #426
- fixed custom datadir setup for prompt and api-server
- added
mint
smart-contract event to NotificationDB #433 - Allow
SmartContract
to use a hash with or without 0x prefix - update to neo-boa v0.4.4
- Update to neo-python-core v0.4.8:
- Create wallets with
np-utils --create-wallet
BigInteger(0)
now isb'\x00'
- CheckWitness now only accepts 20 or 33 byte addresses,CheckWitness faults VM when input is bad rather than returning
False
- When creating contracts, ReturnType is now written by ScriptBuilder as a BigInteger
- Allow sending of transaction attributes with invocations
- Added signing utility
np-sign
for using a wallet, WIF, or NEP2 to sign an arbitrary message.
- alter logging
- fix issue with dispatching transfer events when
from_addr
isFalse
- add TPS monitor to
prompt
state
command - add check for db schema changes
- add support for
StorageIterator
andStorage.Find
from smart contracts - update to
neocore==0.4.6
- update
VERIFY
implementation to match C# - add check for block tx length when adding to blockchain to address issues #302 and #360
- add smart contract storage searching using a prefix.
- source code cleanup of imports and class declarations
- update to
neo-boa==0.4.2
- add
ServiceEnabled
boolean to settings to determine whether nodes should send other nodes blocks - updated new block retrieval mechanism
- fix for token_delete command not removing tokens from wallet file
- fixed sc-events and notification DB showing previous block height instead of final block height of event
- persist refund() notify events in notification DB
- add Runtime.Serialize/Deserialize support for MAP
- fix for debug breakpoints not being cleared.
- add VERIFY op to ExecutionEngine
- Update to neocore 0.4.2
- add caching to systemshare and systemcoin creation to help in block persistence.
- fix asset amount rounding for very small amounts
- fix storage commit routine for failed contract executions
- Update all the requirements
- Networking changes
- added
--maxpeers
option fornp-prompt
andnp-api-server
. This allows p2p discovery of new nodes up to the value specified - added
--host
option fornp-api-server
in order to specify a hostname for the server - added more testing for
neo.Network
module - various networking improvements
- fix in
neo.SmartContract.StateReader
ContractMigrate
functionality - added check for Python 3.6 on startup
- API: Added CORS header
Access-Control-Allow-Headers: 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With'
(fixesRequest header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response
)
- add
Neo.Runtime.Serialize
andNeo.Runtime.Deserialize
for compliance with this (#163) - Fixed IsWalletTransaction to make it compare scripts in transactions to scripts (instead of scripthashes) in wallet contracts and scripthashes of transactions (instead of scripts) to scripthashes of watch-only addresses
- Python version check in
Settings.py
: fail if not Python 3.6+ (can be disabled with env varSKIP_PY_CHECK
)
- Changed the
eval()
call when parsing the --tx-attr param to parse only json. Reduced the surface and options available on the other 2 eval calls to improve security. - fix wallet rebuild database lock errors (PR #365)
- Fixed synced_watch_only_balances being always zero issue (#209)
- Added 'getpeers' to the JSON RPC API (only containing the available functionality)
- Updated to neo-boa==0.4.0, which has support for using dictionaries and interactive debugging
- Added interactive VM Debugger #367
- Added
Pause
andResume
methods toneo.Core.Blockchain
in order to allow for processing to occur without new incoming blocks - Fix bug with checking if contract is an NEP5 Token
- Update testnet bootstrap files
- lowered amount of blocks requested by each thread to prevent hanging connections
- Add GZIP compression to RPC server responses if the caller supports it.
- Change VM fault reporting to only happen when debug logging is enabled
- fix engine error states
- update mainnet bootstrap files
- performance fix for VM engine execution logging (PR #354)
- update to
neocore==0.3.10
to fixToNeoJsonString()
issue identified here - make home dir optional for
.neopython
- performance fix for block update speed
- Implementing interop type
MAP
along with new opcodesNEWMAP HASKEY KEYS VALUES
and modifyARRAYSIZE PICKITEM SETITEM REMOVE
to supportMAP
as per PR here <https://github.com/neo-project/neo-vm/pull/28>__ - Added support for using
--from-addr=
to specify the address to use fortestinvoke
inprompt.py
. (PR #329) - Fixed
neo/bin/prompt.py
to redact WIF keys, nep2 keys and contract metadata from the command history file.prompt.py.history
. - Added TransactionInvocation.GetScript to
StateReader.py
- Fixed missing uri locations in
neo/api/REST/RestApi.py
(PR #342) - Fixed privatenet check by fixing the chain path for checks in Settings (PR #341)
- Fixed
neo-privnet.sample.wallet
- Fix for current block height lag behind other RPC implementations by 1-3 blocks
- Fixed
bootstrap.py
to use the specified data directory, instead of hard-coded relative paths. - Test chains moved to the user data directory, instead of the projects code path.
- Fixed README reference in
MANIFEST.in
- Added additional error messages to
ExecutionEngine.py
to help with debugging smart contracts. - Changes for Pypi compatibility:
- move protocol.*.json to
neo/data/
- move
prompt.py
and other scripts toneo/bin
- default chain data path is now in
~/.neopython/Chains
.prompt.log
andprompt.history
files are also stored there - the following console scripts are now on the
venv
path after runningpip install neo-python
orpip install -e .
for github based installs: np-prompt
np-api-server
np-bootstrap
np-reencrypt-wallet
- the following console scripts are now on the
- updated docs for Pypi changes
- move protocol.*.json to
- update to
neocore==0.3.8
- Fixed README reference in
MANIFEST.in
, add pypi badge to readme - Add ability to specify
--datadir
path for where leveldb directories are stored - Tries to auto-create
Chains
directory in--datadir
if it doesnt exist - Add scripts to be exported for package install.
np_prompt
,np_api_server
,np_bootstrap
, andnp_reencrypt_wallet
available as commands afterpip
install - add protocol.*.json into data package
- move
neo-privnet.wallet
toneo-privnet.sample.wallet
and .gitignoreneo-privnet.wallet
- Change
README.md
to README.rst`
- All requests to the API that are invalid will now receive a
None
for results rather than an empty list[]
- update to neo-boa==0.3.7
- api-server.py: Improved logging setup. See the options with
./api-server.py -h
- Added
sc-debug-notify
option to theconfig
console command. This preserves smart contractNotify()
events when SC execution fails and is intended for SC debugging purposes only. - Added VM instruction counter to
ExecutionEngine.py
error messages to indicate the final instruction that failed. Allows for setting conditional breakpoints to support SC debugging. - Renamed
neo.api.REST.NotificationRestApi
toneo.api.REST.RestApi
- Added
-v/--verbose
argument to prompt.py, which makes prompt.py show smart contract events by default - Added
vm-log
option to theconfig
console command. This enabled logging of VM instructions tovm_instructions.log
for debugging purposes. - Fix multi-signature contract import to allow using a single signature
- Fix fund sending from multi-signature contract
- Added instructions on retrieving NEO TestNet funds
- Fixed issue with missing
notifications/
prefix foraddr
call inneo/api/REST/RestApi.py
- Added
neo-privnet.wallet
to the project root. This is the standard wallet for private networks. - prompt.py: When using a privnet with
-p
, check if chain database is correct. RenamedChains/Priv_Notif
toChains/privnet_notif
(if you need your old privnet notification db, you need to rename it manually). - Optionally allow to use custom privnet hosts with
-p
(PR #312) - Added a dependency check to
Settings.py
, which verifies that the installed dependencies match those in requirements.txt
- add documentation for data types in
neo-python
- add intructions on
build
,build .. test
,import contract
, andtestinvoke
to docs BuildNRun
results now converted toContractParameter
before printedcontract {hash}
no longer throws errors when it is not anNEP5
contract- Added method
AsParameterType
toContractParameter
for casting results
- Documentation and Dockerfile updates for Python 3.6
- Notification API: include peer count in status
- Fix token error handling (cedde9ec)
- Added warning about wallet syncing prior to logging insufficient funds error, added IsSynced method Wallet class to check this (PR #2259)
- Move to Python 3.6 (PR #270)
- move to only python 3.6+ support
- use new version of compiler ( neo-boa==0.3.3 ) based on python 3.6 wordcode
- full testing of VM and all compiled smart contracts
- adds new command TestBuild for running tests of compiled contracts
- Add Notification REST URL prefix (PR #274)
- Add
api-server.py
(PR #271) - Fixed script value returned by JSON-RPC invokes (PR #268)
- Added support for additional JSON-RPC "type" parameters (PR #267)
- Updating of almost all dependencies (PR #261)
- Fixed bug with transactions consuming between 9 and 10 GAS (PR #260)
- Added automatic deploy to pypi (PR #275)
- Updated Notification REST API URLs with
/v1
prefix, and some with/v1/notifications
(PR #274) - Fixed inconsistencies with JSON-RPC output values (PR #272)
- wallet sync error and password fixes related to encryption changes (PR #245)
- import contract_addr and build ... test fixes (PR #237)
- Easy Coznet support(PR #239)
- ContractParameterContext fix (PR #242)
- Zero length bytearray in VM fix (PR #244)
- Wallet Encryption changes (PR #232)
- Close wallet on quit (PR #226)
- Bugfix for smart contract storage events (PR #228)
- Fix Gas Cost Calculation (PR #220)
- Clarify message for token mint command (PR #212)
- Troubleshooting osx script (PR #208)
- Make Contract Search case insensitive (PR #207)
- implement a more robust CLI command parser
- added peristence to NotificationDB for NEP5 Tokens
- upstream neocore update
- Added support for StateTransaction and StateDescriptors (PR #193)
- Allow multiple open wallets (PR #185)
- Added ability to include transaction attributes with the send command. example:
send neo APRgMZHZubii29UXF9uFa6sohrsYupNAvx 10 --tx-attr={'usage':241,'data':'My Remark'}
(PR #184) - Notification REST API (PR #177, examples/notification-rest-api-server.py)
- Minor cleanups and documentation updates
- updated
neo-boa
to0.2.2
, added support for arrayREMOVE
VM opcodes - moved core functions to neocore
- better LevelDB support for OSX
- dependency udates
- Makefile with some useful commands
- ability to claim GAS from SC address
- lots of documentation
- various small bugfixes
- updated
neo-boa
to0.2.1
- added support for array
REVERSE
andAPPEND
VM opcodes
- updated
neo-boa
to0.2.0
- added support for debug storage
- added support for runtime notifications from verification contracts
- added support for checking verification during
mintTokens
invoke - updated prompt help
- added additional SC Api (
Neo.Runtime.GetTime
,Neo.Transaction.GetUnspentCoins
,Neo.Header.GetIndex
) - added support for dynamically defined smart contract execution
- added ability to alias an address in the wallet
- added support for pip versions >= 10.0