Allow fee settings for read
This commit is contained in:
parent
3937785df5
commit
50c31e5994
@ -136,9 +136,12 @@ class ArgumentParser(argparse.ArgumentParser):
|
|||||||
if arg_flags & Flag.ENV_PREFIX:
|
if arg_flags & Flag.ENV_PREFIX:
|
||||||
self.add_argument('--env-prefix', default=env.get('CONFINI_ENV_PREFIX'), dest='env_prefix', type=str, help='environment prefix for variables to overwrite configuration')
|
self.add_argument('--env-prefix', default=env.get('CONFINI_ENV_PREFIX'), dest='env_prefix', type=str, help='environment prefix for variables to overwrite configuration')
|
||||||
if arg_flags & Flag.PROVIDER:
|
if arg_flags & Flag.PROVIDER:
|
||||||
self.add_argument('-p', '--provider', dest='p', type=str, help='RPC HTTP(S) provider url')
|
self.add_argument('-p', '--rpc-provider', dest='p', type=str, help='RPC HTTP(S) provider url')
|
||||||
self.add_argument('--rpc-dialect', dest='rpc_dialect', type=str, help='RPC HTTP(S) backend dialect')
|
self.add_argument('--rpc-dialect', dest='rpc_dialect', type=str, help='RPC HTTP(S) backend dialect')
|
||||||
self.add_argument('--height', default='latest', help='Block height to execute against')
|
self.add_argument('--height', default='latest', help='Block height to execute against')
|
||||||
|
if arg_flags & Flag.RPC_AUTH:
|
||||||
|
self.add_argument('--rpc-auth', dest='rpc_auth', type=str, help='RPC autentication scheme')
|
||||||
|
self.add_argument('--rpc-credentials', dest='rpc_credentials', type=str, help='RPC autentication credential values')
|
||||||
if arg_flags & Flag.CHAIN_SPEC:
|
if arg_flags & Flag.CHAIN_SPEC:
|
||||||
self.add_argument('-i', '--chain-spec', dest='i', type=str, help='Chain specification string')
|
self.add_argument('-i', '--chain-spec', dest='i', type=str, help='Chain specification string')
|
||||||
if arg_flags & Flag.UNSAFE:
|
if arg_flags & Flag.UNSAFE:
|
||||||
@ -151,8 +154,9 @@ class ArgumentParser(argparse.ArgumentParser):
|
|||||||
self.add_argument('-s', '--send', dest='s', action='store_true', help='Send to network')
|
self.add_argument('-s', '--send', dest='s', action='store_true', help='Send to network')
|
||||||
if arg_flags & Flag.RAW:
|
if arg_flags & Flag.RAW:
|
||||||
self.add_argument('--raw', action='store_true', help='Do not decode output')
|
self.add_argument('--raw', action='store_true', help='Do not decode output')
|
||||||
if arg_flags & Flag.SIGN:
|
if arg_flags & (Flag.SIGN | Flag.NONCE):
|
||||||
self.add_argument('--nonce', type=int, help='override nonce')
|
self.add_argument('--nonce', type=int, help='override nonce')
|
||||||
|
if arg_flags & (Flag.SIGN | Flag.FEE):
|
||||||
self.add_argument('--fee-price', dest='fee_price', type=int, help='override fee price')
|
self.add_argument('--fee-price', dest='fee_price', type=int, help='override fee price')
|
||||||
self.add_argument('--fee-limit', dest='fee_limit', type=int, help='override fee limit')
|
self.add_argument('--fee-limit', dest='fee_limit', type=int, help='override fee limit')
|
||||||
if arg_flags & argflag_std_target == 0:
|
if arg_flags & argflag_std_target == 0:
|
||||||
|
@ -21,6 +21,8 @@ class Flag(enum.IntEnum):
|
|||||||
SEQ = 128
|
SEQ = 128
|
||||||
# read/write - nibble 3
|
# read/write - nibble 3
|
||||||
KEY_FILE = 256
|
KEY_FILE = 256
|
||||||
|
FEE = 512 # this must be defined separately now since some rpcs demand minimum base fee price
|
||||||
|
NONCE = 1024
|
||||||
# write - nibble 4
|
# write - nibble 4
|
||||||
SIGN = 4096
|
SIGN = 4096
|
||||||
NO_TARGET = 8192
|
NO_TARGET = 8192
|
||||||
@ -30,9 +32,10 @@ class Flag(enum.IntEnum):
|
|||||||
WAIT = 65536
|
WAIT = 65536
|
||||||
WAIT_ALL = 131072
|
WAIT_ALL = 131072
|
||||||
SEND = 262144
|
SEND = 262144
|
||||||
|
# rpc extras - nibble 6
|
||||||
|
RPC_AUTH = 1048576
|
||||||
|
|
||||||
|
argflag_std_read = 0x23ff
|
||||||
argflag_std_read = 0x2fff
|
argflag_std_write = 0xff31ff
|
||||||
argflag_std_write = 0xff3fff
|
|
||||||
argflag_std_base = 0x200f
|
argflag_std_base = 0x200f
|
||||||
argflag_std_target = 0x00e000
|
argflag_std_target = 0x00e000
|
||||||
|
@ -159,6 +159,7 @@ class Config(confini.Config):
|
|||||||
|
|
||||||
if arg_flags & Flag.PROVIDER:
|
if arg_flags & Flag.PROVIDER:
|
||||||
args_override['RPC_HTTP_PROVIDER'] = getattr(args, 'p')
|
args_override['RPC_HTTP_PROVIDER'] = getattr(args, 'p')
|
||||||
|
args_override['RPC_PROVIDER'] = getattr(args, 'p')
|
||||||
args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect')
|
args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect')
|
||||||
if arg_flags & Flag.CHAIN_SPEC:
|
if arg_flags & Flag.CHAIN_SPEC:
|
||||||
args_override['CHAIN_SPEC'] = getattr(args, 'i')
|
args_override['CHAIN_SPEC'] = getattr(args, 'i')
|
||||||
@ -171,15 +172,18 @@ class Config(confini.Config):
|
|||||||
config.add(getattr(args, 'height'), '_HEIGHT')
|
config.add(getattr(args, 'height'), '_HEIGHT')
|
||||||
if arg_flags & Flag.UNSAFE:
|
if arg_flags & Flag.UNSAFE:
|
||||||
config.add(getattr(args, 'u'), '_UNSAFE')
|
config.add(getattr(args, 'u'), '_UNSAFE')
|
||||||
if arg_flags & Flag.SEND:
|
if arg_flags & (Flag.SIGN | Flag.FEE):
|
||||||
|
config.add(getattr(args, 'fee_price'), '_FEE_PRICE')
|
||||||
fee_limit = getattr(args, 'fee_limit')
|
fee_limit = getattr(args, 'fee_limit')
|
||||||
if fee_limit == None:
|
if fee_limit == None:
|
||||||
fee_limit = default_fee_limit
|
fee_limit = default_fee_limit
|
||||||
if fee_limit == None:
|
if fee_limit == None:
|
||||||
fee_limit = cls.default_fee_limit
|
fee_limit = cls.default_fee_limit
|
||||||
config.add(fee_limit, '_FEE_LIMIT')
|
config.add(fee_limit, '_FEE_LIMIT')
|
||||||
config.add(getattr(args, 'fee_price'), '_FEE_PRICE')
|
if arg_flags & (Flag.SIGN | Flag.NONCE):
|
||||||
config.add(getattr(args, 'nonce'), '_NONCE')
|
config.add(getattr(args, 'nonce'), '_NONCE')
|
||||||
|
|
||||||
|
if arg_flags & Flag.SIGN:
|
||||||
config.add(getattr(args, 's'), '_RPC_SEND')
|
config.add(getattr(args, 's'), '_RPC_SEND')
|
||||||
|
|
||||||
# handle wait
|
# handle wait
|
||||||
@ -192,6 +196,8 @@ class Config(confini.Config):
|
|||||||
config.add(bool(wait_last), '_WAIT')
|
config.add(bool(wait_last), '_WAIT')
|
||||||
wait_all = wait & Flag.WAIT_ALL
|
wait_all = wait & Flag.WAIT_ALL
|
||||||
config.add(bool(wait_all), '_WAIT_ALL')
|
config.add(bool(wait_all), '_WAIT_ALL')
|
||||||
|
|
||||||
|
|
||||||
if arg_flags & Flag.SEQ:
|
if arg_flags & Flag.SEQ:
|
||||||
config.add(getattr(args, 'seq'), '_SEQ')
|
config.add(getattr(args, 'seq'), '_SEQ')
|
||||||
if arg_flags & Flag.WALLET:
|
if arg_flags & Flag.WALLET:
|
||||||
@ -204,6 +210,10 @@ class Config(confini.Config):
|
|||||||
if arg_flags & Flag.CONFIG:
|
if arg_flags & Flag.CONFIG:
|
||||||
config.add(getattr(args, 'namespace'), 'CONFIG_USER_NAMESPACE')
|
config.add(getattr(args, 'namespace'), 'CONFIG_USER_NAMESPACE')
|
||||||
|
|
||||||
|
if arg_flags & Flag.RPC_AUTH:
|
||||||
|
config.add(getattr(args, 'rpc_auth'), 'RPC_AUTH')
|
||||||
|
config.add(getattr(args, 'rpc_credentials'), 'RPC_CREDENTIALS')
|
||||||
|
|
||||||
for k in extra_args.keys():
|
for k in extra_args.keys():
|
||||||
v = extra_args[k]
|
v = extra_args[k]
|
||||||
if v == None:
|
if v == None:
|
||||||
|
@ -48,9 +48,10 @@ class Rpc:
|
|||||||
:returns: An established rpc connection
|
:returns: An established rpc connection
|
||||||
"""
|
"""
|
||||||
auth = None
|
auth = None
|
||||||
if config.get('RPC_HTTP_AUTHENTICATION') == 'basic':
|
if config.get('RPC_AUTH') == 'basic':
|
||||||
from chainlib.auth import BasicAuth
|
from chainlib.auth import BasicAuth
|
||||||
auth = BasicAuth(config.get('RPC_HTTP_USERNAME'), config.get('RPC_HTTP_PASSWORD'))
|
auth_parts = config.get('RPC_CREDENTIALS').split(':')
|
||||||
|
auth = BasicAuth(auth_parts[0], auth_parts[1])
|
||||||
logg.debug('using basic http auth')
|
logg.debug('using basic http auth')
|
||||||
|
|
||||||
if config.get('_SEQ'):
|
if config.get('_SEQ'):
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
[rpc]
|
[rpc]
|
||||||
http_provider =
|
http_provider =
|
||||||
http_authentication =
|
provider =
|
||||||
http_username =
|
auth =
|
||||||
http_password =
|
credentials =
|
||||||
dialect = default
|
dialect = default
|
||||||
|
scheme = http
|
||||||
|
|
||||||
[chain]
|
[chain]
|
||||||
spec =
|
spec =
|
||||||
|
@ -2,4 +2,7 @@
|
|||||||
|
|
||||||
@chapter Chainlib
|
@chapter Chainlib
|
||||||
|
|
||||||
@include interface.texi
|
@include intro.texi
|
||||||
|
@include cli.texi
|
||||||
|
@include config.texi
|
||||||
|
@include code.texi
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
@node chainlib-interface
|
|
||||||
@section The chainlib implementation
|
|
||||||
|
|
||||||
Chainlib is an attempt at employing a universal interface to manipulate and access blockchains regardless of underlying architecture.
|
|
||||||
|
|
||||||
It makes the following assumptions:
|
|
||||||
|
|
||||||
@itemize
|
|
||||||
@item A block MUST have a interpretable serializable format, and contains zero of more transactions
|
|
||||||
@item A transaction MUST have a interpretable serializable format
|
|
||||||
@item A transaction MUST have a nonce associated with a sender address. This uniquely identifies the transaction on the network.
|
|
||||||
@item A transaction MUST have a fee bid to get the transaction executed on the network (a network that does not care about bids can still ignore this property).
|
|
||||||
@item A transaction signature MAY be locked to a particular chain identifier
|
|
||||||
@item The sender key of a transaction MAY be recovered by the signature of the transaction
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
|
|
||||||
@subsection Pluggable method interface
|
|
||||||
|
|
||||||
The base chainlib blockchain interface is defined by the chainlib.interface.ChainInterface class. The sum of the unimplemented methods in this class summarizes the expected scope of abstraction necessary to interface with @emph{any} blockchain backend.
|
|
||||||
|
|
||||||
Methods in this class will return objects that can be passed to an RPC connection that fits the block context.
|
|
||||||
|
|
||||||
The implemented concepts are as follows, listed by method names:
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item block_latest
|
|
||||||
Retrieve the latest block from the network
|
|
||||||
@item block_by_hash
|
|
||||||
Retrieve the block corresponding to the given block hash
|
|
||||||
@item block_by_number
|
|
||||||
Retrieve the block corresponding to the given block number
|
|
||||||
@item block_from_src
|
|
||||||
Render a chainlib.block.Block derivative object from an architecture-dependent block representation source
|
|
||||||
@item block_to_src
|
|
||||||
Render an architecture dependent transaction representation from the given Block object
|
|
||||||
@item tx_by_hash
|
|
||||||
Retrieve the transaction corresponding to the given transaction hash
|
|
||||||
@item tx_by_block
|
|
||||||
Retrieve the transaction corresponding to the given block hash and transaction index
|
|
||||||
@item tx_receipt
|
|
||||||
Retrieve the details of a confirmed transaction
|
|
||||||
@item tx_raw
|
|
||||||
Generate an RPC query from raw transaction wire data
|
|
||||||
@item tx_pack
|
|
||||||
Generate raw transaction wire data from an architecture dependent transaction representation
|
|
||||||
@item tx_unpack
|
|
||||||
Generate architecture dependent transaction representation from raw transaction wire data
|
|
||||||
@item tx_from_src
|
|
||||||
Render a chainlib.tx.Tx derivative object from an architecture-dependent tx representation source
|
|
||||||
@item tx_to_src
|
|
||||||
Render an architecture dependent transaction representation from the given Tx object
|
|
||||||
@item address_safe
|
|
||||||
Generate a checksum-safe network address
|
|
||||||
@item address_normal
|
|
||||||
Generate an unambiguous network address
|
|
||||||
@item src_normalize
|
|
||||||
Generate an unambiguous dictionary from the given dictionary. For example, this can mean generating camel-case key equivalents for snake-case values.
|
|
||||||
@end table
|
|
@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = chainlib
|
name = chainlib
|
||||||
version = 0.0.9a3
|
version = 0.0.9a6
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user