commit 29f4fdb7772e3004e50597302df4ca93b37117fe
parent df4d62e3e7dcfb2cb398bd69d56f95c6f3338041
Author: nolash <dev@holbrook.no>
Date: Wed, 14 Apr 2021 14:45:37 +0200
Add missing import in checksum cli
Diffstat:
10 files changed, 33 insertions(+), 37 deletions(-)
diff --git a/chainlib/eth/erc20.py b/chainlib/eth/erc20.py
@@ -108,7 +108,7 @@ class ERC20(TxFactory):
def transfer_from(self, contract_address, sender_address, holder_address, recipient_address, value, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
- enc.method('transfer')
+ enc.method('transferFrom')
enc.typ(ABIContractType.ADDRESS)
enc.typ(ABIContractType.ADDRESS)
enc.typ(ABIContractType.UINT256)
@@ -122,12 +122,12 @@ class ERC20(TxFactory):
return tx
- def approve(self, contract_address, sender_address, recipient_address, value, tx_format=TxFormat.JSONRPC):
+ def approve(self, contract_address, sender_address, spender_address, value, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
enc.method('approve')
enc.typ(ABIContractType.ADDRESS)
enc.typ(ABIContractType.UINT256)
- enc.address(recipient_address)
+ enc.address(spender_address)
enc.uint256(value)
data = add_0x(enc.get())
tx = self.template(sender_address, contract_address, use_nonce=True)
diff --git a/chainlib/eth/gas.py b/chainlib/eth/gas.py
@@ -94,12 +94,14 @@ class OverrideGasOracle(RPCGasOracle):
self.limit = limit
self.price = price
+ price_conn = None
+
if self.limit == None or self.price == None:
- price_conn = None
if self.price == None:
price_conn = conn
logg.debug('override gas oracle with rpc fallback; price {} limit {}'.format(self.price, self.limit))
- super(OverrideGasOracle, self).__init__(price_conn, code_callback)
+
+ super(OverrideGasOracle, self).__init__(price_conn, code_callback)
def get_gas(self, code=None):
diff --git a/chainlib/eth/runnable/checksum.py b/chainlib/eth/runnable/checksum.py
@@ -1,8 +1,15 @@
# standard imports
import sys
+# external imports
+from hexathon import strip_0x
+
# local imports
from chainlib.eth.address import to_checksum_address
+def main():
+ print(to_checksum_address(strip_0x(sys.argv[1])))
+
-print(to_checksum_address(sys.argv[1]))
+if __name__ == '__main__':
+ main()
diff --git a/chainlib/eth/runnable/get.py b/chainlib/eth/runnable/get.py
@@ -60,7 +60,7 @@ elif args.v:
conn = EthHTTPConnection(args.p)
-tx_hash = args.tx_hash
+tx_hash = add_0x(args.tx_hash)
class Status(enum.Enum):
diff --git a/chainlib/eth/runnable/transfer.py b/chainlib/eth/runnable/transfer.py
@@ -104,7 +104,7 @@ def _max_gas(code=None):
return 8000000
gas_oracle = None
-if args.price != None:
+if args.gas_price != None or args.gas_limit != None:
gas_oracle = OverrideGasOracle(price=args.gas_price, limit=args.gas_limit)
else:
gas_oracle = RPCGasOracle(conn, code_callback=_max_gas)
diff --git a/chainlib/eth/tx.py b/chainlib/eth/tx.py
@@ -14,6 +14,7 @@ from rlp import decode as rlp_decode
from rlp import encode as rlp_encode
from crypto_dev_signer.eth.transaction import EIP155Transaction
from crypto_dev_signer.encoding import public_key_to_address
+from potaahto.symbols import snake_and_camel
# local imports
@@ -30,6 +31,7 @@ from chainlib.jsonrpc import jsonrpc_template
logg = logging.getLogger().getChild(__name__)
+
class TxFormat(enum.IntEnum):
DICT = 0x00
RAW = 0x01
@@ -271,8 +273,6 @@ class TxFactory:
class Tx:
- re_camel_snake = re.compile(r'([a-z0-9]+)([A-Z])')
-
# TODO: force tx type schema parser (whether expect hex or int etc)
def __init__(self, src, block=None, rcpt=None):
logg.debug('src {}'.format(src))
@@ -324,7 +324,7 @@ class Tx:
if inpt != '0x':
inpt = strip_0x(inpt)
else:
- inpt = None
+ inpt = ''
self.payload = inpt
to = src['to']
@@ -349,29 +349,14 @@ class Tx:
@classmethod
def src_normalize(self, src):
- src_normal = {}
- for k in src.keys():
- s = ''
- right_pos = 0
- for m in self.re_camel_snake.finditer(k):
- g = m.group(0)
- s += g[:len(g)-1]
- s += '_' + g[len(g)-1].lower()
- right_pos = m.span()[1]
-
-
- s += k[right_pos:]
- src_normal[k] = src[k]
- if s != k:
- logg.debug('adding snake {} for camel {}'.format(s, k))
- src_normal[s] = src[k]
-
- return src_normal
-
+ return snake_and_camel(src)
def apply_receipt(self, rcpt):
logg.debug('rcpt {}'.format(rcpt))
- status_number = int(rcpt['status'], 16)
+ try:
+ status_number = int(rcpt['status'], 16)
+ except TypeError:
+ status_number = int(rcpt['status'])
if status_number == 1:
self.status = Status.SUCCESS
elif status_number == 0:
@@ -383,7 +368,10 @@ class Tx:
if contract_address != None:
self.contract = contract_address
self.logs = rcpt['logs']
- self.gas_used = int(rcpt['gasUsed'], 16)
+ try:
+ self.gas_used = int(rcpt['gasUsed'], 16)
+ except TypeError:
+ self.gas_used = int(rcpt['gasUsed'])
def __repr__(self):
diff --git a/chainlib/eth/unittest/base.py b/chainlib/eth/unittest/base.py
@@ -122,7 +122,6 @@ class TestRPCConnection(RPCConnection):
def eth_getTransactionReceipt(self, p):
rcpt = self.backend.get_transaction_receipt(p[0])
- # TODO: use camelcase to snake case converter
if rcpt.get('block_number') == None:
rcpt['block_number'] = rcpt['blockNumber']
else:
diff --git a/requirements.txt b/requirements.txt
@@ -1,5 +1,5 @@
-crypto-dev-signer~=0.4.14a17
+crypto-dev-signer~=0.4.14b2
pysha3==1.0.2
hexathon~=0.0.1a7
websocket-client==0.57.0
-redis==3.5.3
+potaahto~=0.0.1a1
diff --git a/setup.cfg b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = chainlib
-version = 0.0.2a8
+version = 0.0.2a14
description = Generic blockchain access library and tooling
author = Louis Holbrook
author_email = dev@holbrook.no
diff --git a/tests/test_stat.py b/tests/test_stat.py
@@ -3,7 +3,7 @@ import unittest
import datetime
# external imports
-from chainlib.stat import Stat
+from chainlib.stat import ChainStat
from chainlib.eth.block import Block