Skip to content
This repository was archived by the owner on Nov 15, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
13e979b
Merge pull request #38 from CityOfZion/development
jseagrave21 Oct 10, 2018
e41e950
Merge pull request #40 from CityOfZion/development
jseagrave21 Oct 11, 2018
7db54f4
Merge pull request #41 from CityOfZion/development
jseagrave21 Oct 11, 2018
54a4f3f
Fix ExtendedJsonRpcApi (#662)
jseagrave21 Oct 11, 2018
0f96dc3
Mute expected test stacktrace and clearly identify why an exception i…
ixje Oct 12, 2018
1e5b4dc
Add guideline for adding tests to the neo-privnet-unittest image (#661)
dauTT Oct 12, 2018
9c8560a
Update JsonRpcApi.py
jseagrave21 Oct 13, 2018
d5839d9
Update test_json_rpc_api.py
jseagrave21 Oct 13, 2018
9aea63a
Update LevelDBBlockchain.py
jseagrave21 Oct 13, 2018
2403e6d
Update test_LevelDBBlockchain.py
jseagrave21 Oct 13, 2018
02618fa
Update prompt.py
jseagrave21 Oct 13, 2018
a0f801d
Update CHANGELOG.rst
jseagrave21 Oct 13, 2018
c403f0d
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 13, 2018
8c6a851
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 14, 2018
3c62083
Update test_extended_json_rpc_api.py
jseagrave21 Oct 14, 2018
c18fef3
Update test_extended_json_rpc_api.py
jseagrave21 Oct 14, 2018
3903a81
Update CHANGELOG.rst
jseagrave21 Oct 14, 2018
9a23f42
Update CHANGELOG.rst
jseagrave21 Oct 14, 2018
12db889
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 14, 2018
6ed8141
Update CHANGELOG.rst
jseagrave21 Oct 14, 2018
85d0336
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 14, 2018
c3d8005
Revert "Update ExtendedJsonRpcApi.py"
jseagrave21 Oct 14, 2018
b3041ae
Revert "Update CHANGELOG.rst"
jseagrave21 Oct 14, 2018
a0200d5
Merge pull request #45 from jseagrave21/revert-44-development
jseagrave21 Oct 14, 2018
6ccebf7
Update CHANGELOG.rst
jseagrave21 Oct 14, 2018
498a5bc
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 14, 2018
a7e08e7
Merge pull request #46 from CityOfZion/development
jseagrave21 Oct 14, 2018
7a0f8f8
Update CHANGELOG.rst
jseagrave21 Oct 14, 2018
f4b2f41
Update ExtendedJsonRpcApi.py
jseagrave21 Oct 14, 2018
caa698c
Update test_extended_json_rpc_api.py
jseagrave21 Oct 14, 2018
8984b4f
Update test_json_rpc_api.py
jseagrave21 Oct 14, 2018
29213a0
Update test_json_rpc_api.py
jseagrave21 Oct 14, 2018
879e987
Update CHANGELOG.rst
jseagrave21 Oct 30, 2018
d0dc7cd
Update test_LevelDBBlockchain.py
jseagrave21 Oct 30, 2018
2286a4e
Merge pull request #60 from CityOfZion/development
jseagrave21 Oct 30, 2018
cdf0b43
Update CHANGELOG.rst
jseagrave21 Oct 30, 2018
ef09c68
Update CHANGELOG.rst
jseagrave21 Oct 30, 2018
8887e8f
Update test_LevelDBBlockchain.py
jseagrave21 Oct 30, 2018
66d919d
Update ExtendedJsonRpcApi.py
jseagrave21 Nov 1, 2018
bfbe09a
Update ExtendedJsonRpcApi.py
jseagrave21 Dec 20, 2018
c0a6d7b
Update test_extended_json_rpc_api.py
jseagrave21 Dec 20, 2018
e5760a6
Update prompt.py
jseagrave21 Dec 22, 2018
268348a
Update CHANGELOG.rst
jseagrave21 Dec 22, 2018
3b3e10c
Merge pull request #85 from CityOfZion/development
jseagrave21 Dec 22, 2018
b8ef7be
Update CHANGELOG.rst
jseagrave21 Dec 22, 2018
3eb8672
Update test_json_rpc_api.py
jseagrave21 Dec 22, 2018
29d244f
Update LevelDBBlockchain.py
jseagrave21 Dec 22, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ All notable changes to this project are documented in this file.

[0.8.3-dev] in progress
-----------------------
- Update ``getassetstate`` RPC method; add ``showallassets`` LevelDBBlockchain function; update prompt.py ``help``, ``show_asset_state``, and ``show_contract_state``
- Disallow ``Void`` type input parameters for smart contracts and increase test coverage
- Fix confirmed tx not being purged from mempool `#703 <https://github.com/CityOfZion/neo-python/issues/703>`_
- Fix bootstrap thread joining failure on Ubuntu systems
Expand Down
12 changes: 12 additions & 0 deletions neo/Implementations/Blockchains/LevelDB/LevelDBBlockchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ def SearchAssetState(self, query):
assets = DBCollection(self._db, DBPrefix.ST_Asset, AssetState)
keys = assets.Keys

if query.lower() == "neo":
query = "AntShare"

if query.lower() in {"gas", "neogas"}:
query = "AntCoin"

for item in keys:
asset = assets.TryGet(keyval=item)
if query in asset.Name.decode('utf-8'):
Expand All @@ -365,6 +371,12 @@ def GetAssetState(self, assetId):

return asset

def ShowAllAssets(self):

assets = DBCollection(self._db, DBPrefix.ST_Asset, AssetState)
keys = assets.Keys
return keys

def GetTransaction(self, hash):

if type(hash) is str:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,7 @@ def test_GetHeaderBy(self):
invalid_bc_height = self._blockchain.Height + 1
block = self._blockchain.GetHeaderBy(invalid_bc_height)
self.assertEqual(block, None)

def test_ShowAllAssets(self):
assets = Blockchain.Default().ShowAllAssets()
self.assertEqual(len(assets), 2)
10 changes: 8 additions & 2 deletions neo/api/JSONRPC/JsonRpcApi.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,14 @@ def json_rpc_method_handler(self, method, params):
return acct.ToJson()

elif method == "getassetstate":
asset_id = UInt256.ParseString(params[0])
asset = Blockchain.Default().GetAssetState(asset_id.ToBytes())
asset_str = params[0]
if asset_str.lower() == 'neo':
assetId = Blockchain.Default().SystemShare().Hash
elif asset_str.lower() == 'gas':
assetId = Blockchain.Default().SystemCoin().Hash
else:
assetId = UInt256.ParseString(params[0])
asset = Blockchain.Default().GetAssetState(assetId.ToBytes())
if asset:
return asset.ToJson()
raise JsonRpcError(-100, "Unknown asset")
Expand Down
20 changes: 19 additions & 1 deletion neo/api/JSONRPC/test_json_rpc_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def test_account_state_failure(self):
self.assertEqual(-2146233033, res['error']['code'])
self.assertEqual('One of the identified items was in an invalid format.', res['error']['message'])

def test_get_asset_state(self):
def test_get_asset_state_hash(self):
asset_str = '602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7'
req = self._gen_post_rpc_req("getassetstate", params=[asset_str])
mock_req = mock_post_request(json.dumps(req).encode("utf-8"))
Expand All @@ -231,6 +231,24 @@ def test_get_asset_state(self):
self.assertEqual(res['result']['admin'], 'AWKECj9RD8rS8RPcpCgYVjk1DeYyHwxZm3')
self.assertEqual(res['result']['available'], 0)

def test_get_asset_state_neo(self):
asset_str = 'neo'
req = self._gen_post_rpc_req("getassetstate", params=[asset_str])
mock_req = mock_post_request(json.dumps(req).encode("utf-8"))
res = json.loads(self.app.home(mock_req))
self.assertEqual(res['result']['assetId'], '0x%s' % str(GetBlockchain().SystemShare().Hash))
self.assertEqual(res['result']['admin'], 'Abf2qMs1pzQb8kYk9RuxtUb9jtRKJVuBJt')
self.assertEqual(res['result']['available'], 10000000000000000)

def test_get_asset_state_gas(self):
asset_str = 'GAS'
req = self._gen_post_rpc_req("getassetstate", params=[asset_str])
mock_req = mock_post_request(json.dumps(req).encode("utf-8"))
res = json.loads(self.app.home(mock_req))
self.assertEqual(res['result']['assetId'], '0x%s' % str(GetBlockchain().SystemCoin().Hash))
self.assertEqual(res['result']['amount'], 10000000000000000)
self.assertEqual(res['result']['admin'], 'AWKECj9RD8rS8RPcpCgYVjk1DeYyHwxZm3')

def test_get_asset_state_0x(self):
asset_str = '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7'
req = self._gen_post_rpc_req("getassetstate", params=[asset_str])
Expand Down
52 changes: 47 additions & 5 deletions neo/bin/prompt.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
from neo.UserPreferences import preferences
from neocore.KeyPair import KeyPair
from neocore.UInt256 import UInt256
from neocore.UInt160 import UInt160
from neo.logging import log_manager

logger = log_manager.getLogger()
Expand Down Expand Up @@ -99,8 +100,10 @@ class PromptInterface:
'tx {hash}',
'account {address} # returns account state',
'asset {assetId} # returns asset state',
'asset all # returns a list of all assets',
'asset search {query}',
'contract {contract hash} # returns contract state',
'contract all # returns a list of all contracts',
'contract search {query}',
'notifications {block_number or address}',
'mem # returns memory in use and number of buffers',
Expand Down Expand Up @@ -675,7 +678,20 @@ def show_asset_state(self, args):

if item is not None:

if item == 'search':
if item.lower() == 'all':
assets = Blockchain.Default().ShowAllAssets()
assetlist = []
for asset in assets:
state = Blockchain.Default().GetAssetState(asset.decode('utf-8')).ToJson()
asset_dict = {state['name']: state['assetId']}
assetlist.append(asset_dict)
bjson = json.dumps(assetlist, indent=4)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), style=self.token_style)
print('\n')
return

elif item.lower() == 'search':
query = get_arg(args, 1)
results = Blockchain.Default().SearchAssetState(query)
print("Found %s results for %s" % (len(results), query))
Expand All @@ -684,10 +700,20 @@ def show_asset_state(self, args):
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), style=self.token_style)
print('\n')

return

asset = Blockchain.Default().GetAssetState(item)
if item.lower() == 'neo':
assetId = Blockchain.Default().SystemShare().Hash
elif item.lower() == 'gas':
assetId = Blockchain.Default().SystemCoin().Hash
else:
try:
assetId = UInt256.ParseString(item)
except Exception:
print("Could not find asset from args: %s" % args)
return

asset = Blockchain.Default().GetAssetState(assetId.ToBytes())

if asset is not None:
bjson = json.dumps(asset.ToJson(), indent=4)
Expand All @@ -706,7 +732,17 @@ def show_contract_state(self, args):

if item.lower() == 'all':
contracts = Blockchain.Default().ShowAllContracts()
print("Contracts: %s" % contracts)
contractlist = []
for contract in contracts:
state = Blockchain.Default().GetContract(contract.decode('utf-8')).ToJson()
contract_dict = {state['name']: state['hash']}
contractlist.append(contract_dict)
bjson = json.dumps(contractlist, indent=4)
tokens = [("class:number", bjson)]
print_formatted_text(FormattedText(tokens), style=self.token_style)
print('\n')
return

elif item.lower() == 'search':
query = get_arg(args, 1)
if query:
Expand All @@ -721,7 +757,13 @@ def show_contract_state(self, args):
else:
print("Please specify a search query")
else:
contract = Blockchain.Default().GetContract(item)
try:
hash = UInt160.ParseString(item).ToBytes()
except Exception:
print("Could not find contract from args: %s" % args)
return

contract = Blockchain.Default().GetContract(hash)

if contract is not None:
contract.DetermineIsNEP5()
Expand Down