Add missing jsonrpc module, add address code retrieve to get cli util

This commit is contained in:
nolash 2021-04-17 13:01:26 +02:00
parent a0dd37e944
commit 9356ef53b2
Signed by: lash
GPG Key ID: 21D2E7BB88C2A746
5 changed files with 65 additions and 13 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
__pycache__
gmon.out
*.pyc
dist/
build/
*.egg-info

11
Makefile Normal file
View File

@ -0,0 +1,11 @@
PACKAGE=chainlib
build:
python setup.py bdist_wheel
.PHONY clean:
rm -rf build
rm -rf dist
rm -rf $(PACKAGE).egg-info
.PHONY dist: clean build

16
chainlib/eth/jsonrpc.py Normal file
View File

@ -0,0 +1,16 @@
# proposed custom errors
# source: https://eth.wiki/json-rpc/json-rpc-error-codes-improvement-proposal
#1 Unauthorized Should be used when some action is not authorized, e.g. sending from a locked account.
#2 Action not allowed Should be used when some action is not allowed, e.g. preventing an action, while another depending action is processing on, like sending again when a confirmation popup is shown to the user (?).
#3 Execution error Will contain a subset of custom errors in the data field. See below.
#100 X doesnt exist Should be used when something which should be there is not found. (Doesnt apply to eth_getTransactionBy_ and eth_getBlock_. They return a success with value null)
#101 Requires ether Should be used for actions which require somethin else, e.g. gas or a value.
#102 Gas too low Should be used when a to low value of gas was given.
#103 Gas limit exceeded Should be used when a limit is exceeded, e.g. for the gas limit in a block.
#104 Rejected Should be used when an action was rejected, e.g. because of its content (too long contract code, containing wrong characters ?, should differ from -32602 - Invalid params).
#105 Ether too low Should be used when a to low value of Ether was given.
#106 Timeout Should be used when an action timedout.
#107 Conflict Should be used when an action conflicts with another (ongoing?) action.

View File

@ -17,11 +17,10 @@ import argparse
import logging import logging
import enum import enum
# third-party imports # external imports
from hexathon import ( from hexathon import (
add_0x, add_0x,
strip_0x, strip_0x,
even,
) )
import sha3 import sha3
@ -33,8 +32,10 @@ from chainlib.jsonrpc import (
) )
from chainlib.eth.connection import EthHTTPConnection from chainlib.eth.connection import EthHTTPConnection
from chainlib.eth.tx import Tx from chainlib.eth.tx import Tx
from chainlib.eth.address import to_checksum_address
from chainlib.eth.block import Block from chainlib.eth.block import Block
from chainlib.chain import ChainSpec from chainlib.chain import ChainSpec
from chainlib.status import Status
logging.basicConfig(level=logging.WARNING) logging.basicConfig(level=logging.WARNING)
logg = logging.getLogger() logg = logging.getLogger()
@ -50,7 +51,7 @@ argparser.add_argument('-u', '--unsafe', dest='u', action='store_true', help='Au
argparser.add_argument('--abi-dir', dest='abi_dir', type=str, default=default_abi_dir, help='Directory containing bytecode and abi (default {})'.format(default_abi_dir)) argparser.add_argument('--abi-dir', dest='abi_dir', type=str, default=default_abi_dir, help='Directory containing bytecode and abi (default {})'.format(default_abi_dir))
argparser.add_argument('-v', action='store_true', help='Be verbose') argparser.add_argument('-v', action='store_true', help='Be verbose')
argparser.add_argument('-vv', action='store_true', help='Be more verbose') argparser.add_argument('-vv', action='store_true', help='Be more verbose')
argparser.add_argument('tx_hash', type=str, help='Transaction hash') argparser.add_argument('item', type=str, help='Item to get information for (address og transaction)')
args = argparser.parse_args() args = argparser.parse_args()
if args.vv: if args.vv:
@ -60,16 +61,11 @@ elif args.v:
conn = EthHTTPConnection(args.p) conn = EthHTTPConnection(args.p)
tx_hash = add_0x(args.tx_hash) #tx_hash = add_0x(args.tx_hash)
item = add_0x(args.item)
class Status(enum.Enum): def get_transaction(conn, tx_hash):
UNCONFIRMED = -1
REVERTED = 0
SUCCESS = 1
def main():
o = jsonrpc_template() o = jsonrpc_template()
o['method'] = 'eth_getTransactionByHash' o['method'] = 'eth_getTransactionByHash'
o['params'].append(tx_hash) o['params'].append(tx_hash)
@ -92,7 +88,30 @@ def main():
tx = Tx(tx_src) tx = Tx(tx_src)
if rcpt != None: if rcpt != None:
tx.apply_receipt(rcpt) tx.apply_receipt(rcpt)
print(tx) return tx
def get_address(conn, address):
o = jsonrpc_template()
o['method'] = 'eth_getCode'
o['params'].append(address)
o['params'].append('latest')
code = conn.do(o)
content = strip_0x(code, allow_empty=True)
if len(content) == 0:
return None
return content
def main():
r = None
if len(item) > 42:
r = get_transaction(conn, item)
elif args.u or to_checksum_address(item):
r = get_address(conn, item)
print(r)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -1,6 +1,6 @@
[metadata] [metadata]
name = chainlib name = chainlib
version = 0.0.2a15 version = 0.0.2a16
description = Generic blockchain access library and tooling description = Generic blockchain access library and tooling
author = Louis Holbrook author = Louis Holbrook
author_email = dev@holbrook.no author_email = dev@holbrook.no