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: | ||||
|             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: | ||||
|             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('--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: | ||||
|             self.add_argument('-i', '--chain-spec', dest='i', type=str, help='Chain specification string') | ||||
|         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') | ||||
|         if arg_flags & Flag.RAW: | ||||
|             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') | ||||
|         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-limit', dest='fee_limit', type=int, help='override fee limit') | ||||
|         if arg_flags & argflag_std_target == 0: | ||||
| @ -161,4 +165,4 @@ class ArgumentParser(argparse.ArgumentParser): | ||||
|             self.add_argument('-e', '--exectuable-address', dest='executable_address', type=str, help='contract address') | ||||
|         if arg_flags & Flag.WALLET: | ||||
|             self.add_argument('-a', '--recipient', dest='recipient', type=str, help='recipient address') | ||||
| 
 | ||||
|          | ||||
|  | ||||
| @ -21,8 +21,10 @@ class Flag(enum.IntEnum): | ||||
|     SEQ = 128 | ||||
|     # read/write - nibble 3 | ||||
|     KEY_FILE = 256 | ||||
|     FEE = 512 # this must be defined separately now since some rpcs demand minimum base fee price | ||||
|     NONCE = 1024 | ||||
|     # write - nibble 4 | ||||
|     SIGN = 4096  | ||||
|     SIGN = 4096 | ||||
|     NO_TARGET = 8192 | ||||
|     EXEC = 16384 | ||||
|     WALLET = 32768 | ||||
| @ -30,9 +32,10 @@ class Flag(enum.IntEnum): | ||||
|     WAIT = 65536 | ||||
|     WAIT_ALL = 131072 | ||||
|     SEND = 262144 | ||||
|     # rpc extras - nibble 6 | ||||
|     RPC_AUTH = 1048576 | ||||
| 
 | ||||
| 
 | ||||
| argflag_std_read = 0x2fff  | ||||
| argflag_std_write = 0xff3fff | ||||
| argflag_std_read = 0x23ff  | ||||
| argflag_std_write = 0xff31ff | ||||
| argflag_std_base = 0x200f | ||||
| argflag_std_target = 0x00e000 | ||||
|  | ||||
| @ -159,6 +159,7 @@ class Config(confini.Config): | ||||
| 
 | ||||
|         if arg_flags & Flag.PROVIDER: | ||||
|             args_override['RPC_HTTP_PROVIDER'] = getattr(args, 'p') | ||||
|             args_override['RPC_PROVIDER'] = getattr(args, 'p') | ||||
|             args_override['RPC_DIALECT'] = getattr(args, 'rpc_dialect') | ||||
|         if arg_flags & Flag.CHAIN_SPEC: | ||||
|             args_override['CHAIN_SPEC'] = getattr(args, 'i') | ||||
| @ -171,15 +172,18 @@ class Config(confini.Config): | ||||
|             config.add(getattr(args, 'height'), '_HEIGHT') | ||||
|         if arg_flags & Flag.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') | ||||
|             if fee_limit == None: | ||||
|                 fee_limit = default_fee_limit | ||||
|             if fee_limit == None: | ||||
|                 fee_limit = cls.default_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') | ||||
| 
 | ||||
|         if arg_flags & Flag.SIGN: | ||||
|             config.add(getattr(args, 's'), '_RPC_SEND') | ||||
| 
 | ||||
|             # handle wait | ||||
| @ -192,6 +196,8 @@ class Config(confini.Config): | ||||
|             config.add(bool(wait_last), '_WAIT') | ||||
|             wait_all = wait & Flag.WAIT_ALL | ||||
|             config.add(bool(wait_all), '_WAIT_ALL') | ||||
| 
 | ||||
| 
 | ||||
|         if arg_flags & Flag.SEQ: | ||||
|             config.add(getattr(args, 'seq'), '_SEQ') | ||||
|         if arg_flags & Flag.WALLET: | ||||
| @ -204,6 +210,10 @@ class Config(confini.Config): | ||||
|         if arg_flags & Flag.CONFIG: | ||||
|             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(): | ||||
|             v = extra_args[k] | ||||
|             if v == None: | ||||
|  | ||||
| @ -48,9 +48,10 @@ class Rpc: | ||||
|         :returns: An established rpc connection | ||||
|         """ | ||||
|         auth = None | ||||
|         if config.get('RPC_HTTP_AUTHENTICATION') == 'basic': | ||||
|         if config.get('RPC_AUTH') == 'basic': | ||||
|             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') | ||||
|          | ||||
|         if config.get('_SEQ'): | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| [rpc] | ||||
| http_provider =  | ||||
| http_authentication =  | ||||
| http_username = | ||||
| http_password = | ||||
| provider = | ||||
| auth =  | ||||
| credentials = | ||||
| dialect = default | ||||
| scheme = http | ||||
| 
 | ||||
| [chain] | ||||
| spec =  | ||||
|  | ||||
| @ -2,4 +2,7 @@ | ||||
| 
 | ||||
| @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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user