def __command_vetting__(state, bindings, pargs) : """controller command to interact with an vetting contract """ parser = argparse.ArgumentParser(prog='vetting') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_verifying_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('initialize') subparser.add_argument('-t', '--type_id', help='contract identifier for the issuer asset type', type=str, required=True) subparser = subparsers.add_parser('approve') subparser.add_argument('-i', '--issuer', help='identity of the issuer; ECDSA key', type=str, required=True) subparser = subparsers.add_parser('get_authority') subparser.add_argument('-i', '--issuer', help='identity of the issuer; ECDSA key', type=str, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams={'quiet' : options.quiet, 'wait' : options.wait} # ------------------------------------------------------- if options.command == 'get_verifying_key' : extraparams['commit'] = False message = invocation_request('get-verifying-key') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol : bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'initialize' : message = invocation_request('initialize', options.type_id) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'approve' : message = invocation_request('add-approved-key', options.issuer) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'get_authority' : extraparams['commit'] = False message = invocation_request('get-authority', options.issuer) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol : bindings.bind(options.symbol, result) return
def __command_exchange__(state, bindings, pargs): """controller command to interact with an exchange contract """ parser = argparse.ArgumentParser(prog='exchange') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_verifying_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('get_offered_asset') subparser = subparsers.add_parser('get_requested_asset') subparser = subparsers.add_parser('initialize') subparser.add_argument( '-r', '--root', help='key for the root authority for requested issuer', type=str, required=True) subparser.add_argument( '-t', '--type_id', help='contract identifier for the requested asset type', type=str, required=True) subparser.add_argument('-o', '--owner', help='identity of the asset owner; ECDSA key', type=str, default="") subparser.add_argument('-c', '--count', help='amount requested', type=int, required=True) subparser = subparsers.add_parser('offer') subparser.add_argument('-a', '--asset', help='serialized escrowed asset', type=str, required=True) subparser = subparsers.add_parser('claim_offer') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('exchange') subparser.add_argument('-a', '--asset', help='serialized escrowed asset', type=str, required=True) subparser = subparsers.add_parser('claim_exchange') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('cancel') subparser = subparsers.add_parser('cancel_attestation') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} # ------------------------------------------------------- if options.command == 'get_verifying_key': extraparams['commit'] = False message = "'(get-verifying-key)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'get_offered_asset': extraparams['commit'] = False message = "'(examine-offered-asset)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'get_requested_asset': extraparams['commit'] = False message = "'(examine-requested-asset)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'initialize': asset_request = "(\"{0}\" {1} \"{2}\")".format(options.type_id, options.count, options.owner) message = "'(initialize {0} \"{1}\")".format(asset_request, options.root) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'offer': message = "'(offer-asset {0})".format(options.asset) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'claim_offer': extraparams['commit'] = False message = "'(claim-offer)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'exchange': message = "'(exchange-asset {0})".format(options.asset) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'claim_exchange': extraparams['commit'] = False message = "'(claim-exchange)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'cancel': message = "'(cancel)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'cancel_attestation': extraparams['commit'] = False message = "'(cancel-attestation)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return
def __command_asset_type__(state, bindings, pargs): """controller command to interact with an asset_type contract """ parser = argparse.ArgumentParser(prog='asset_type') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('initialize') subparser.add_argument('-d', '--description', help='human readable description', type=str, default='') subparser.add_argument('-n', '--name', help='human readable name', type=str, default='') subparser.add_argument('-l', '--link', help='URL where more information is located', type=str, default='') subparser = subparsers.add_parser('get_identifier') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('get_description') options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} # ------------------------------------------------------- if options.command == 'initialize': message = "'(initialize \"{0}\" \"{1}\" \"{2}\")".format( options.name, options.description, options.link) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'get_identifier': extraparams['commit'] = False message = "'(get-identifier)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'get_description': extraparams['quiet'] = True extraparams['commit'] = False message = "'(get-name)" name = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) message = "'(get-description)" description = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) message = "'(get-link)" link = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) print("NAME: {0}".format(name)) print("DESC: {1}".format(description)) print("LINK: {2}".format(link)) return
def __command_auction__(state, bindings, pargs): """controller command to interact with an auction contract """ parser = argparse.ArgumentParser(prog='auction') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save-file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_signing_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('initialize') subparser.add_argument('-k', '--key', help='public key of the asset contract', type=str, required=True) subparser = subparsers.add_parser('prime') subparser.add_argument('-a', '--attestation', help='Escrow attestation from the asset ledger', type=invocation_parameter, required=True) subparser = subparsers.add_parser('submit_bid') subparser.add_argument('-a', '--attestation', help='Escrow attestation from the asset ledger', type=invocation_parameter, required=True) subparser = subparsers.add_parser('get_offered_asset') subparser = subparsers.add_parser('cancel_bid') subparser = subparsers.add_parser('check_bid') subparser = subparsers.add_parser('max_bid') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('close_bidding') subparser = subparsers.add_parser('exchange_attestation') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('cancel_attestation') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} if options.command == 'get_signing_key': message = invocation_request('get-public-signing-key') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'initialize': message = invocation_request('initialize', options.key) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'prime': assert type(options.attestation) is list assert len(options.attestation) == 3 bidinfo = options.attestation[0] dependencies = options.attestation[1] signature = options.attestation[2] message = invocation_request('prime-auction*', bidinfo, dependencies, signature) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'submit_bid': assert type(options.attestation) is list assert len(options.attestation) == 3 bidinfo = options.attestation[0] dependencies = options.attestation[1] signature = options.attestation[2] message = invocation_request('submit-bid*', bidinfo, dependencies, signature) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'get_offered_asset': message = invocation_request('get-offered-asset') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'cancel_bid': message = invocation_request('cancel-bid') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'check_bid': message = invocation_request('check-bid') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'max_bid': message = invocation_request('max-bid') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol: bindings.bind(options.symbol, result) return if options.command == 'close_bidding': message = invocation_request('close-bidding') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'cancel_attestation': message = invocation_request('cancel-attestation') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol: bindings.bind(options.symbol, json.dumps(result)) return if options.command == 'exchange_attestation': message = invocation_request('exchange-attestation') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol: bindings.bind(options.symbol, json.dumps(result)) return
def __command_auction__(state, bindings, pargs): """controller command to interact with an auction contract """ parser = argparse.ArgumentParser(prog='auction') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save-file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_signing_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('initialize') subparser.add_argument('-k', '--key', help='public key of the asset contract', type=str, required=True) subparser = subparsers.add_parser('prime') subparser.add_argument('-a', '--attestation', help='Escrow attestation from the asset ledger', type=str, required=True) #subparser.add_argument('-b', '--bidinfo', help='information about the asset to auction', type=str, required=True) #subparser.add_argument('-d', '--dependencies', help='proof of escrow dependencies', type=str, nargs='*', default=[]) #subparser.add_argument('-s', '--signature', help='signature from the asset contract', type=str, required=True) subparser = subparsers.add_parser('submit_bid') subparser.add_argument('-a', '--attestation', help='Escrow attestation from the asset ledger', type=str, required=True) #subparser.add_argument('-b', '--bidinfo', help='information about the asset to auction', type=str, required=True) #subparser.add_argument('-d', '--dependencies', help='proof of escrow dependencies', type=str, nargs='*', default=[]) #subparser.add_argument('-s', '--signature', help='signature from the asset contract', type=str, required=True) subparser = subparsers.add_parser('get_offered_asset') subparser = subparsers.add_parser('cancel_bid') subparser = subparsers.add_parser('check_bid') subparser = subparsers.add_parser('max_bid') subparser = subparsers.add_parser('close_bidding') subparser = subparsers.add_parser('exchange_attestation') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('cancel_attestation') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} if options.command == 'get_signing_key': message = "'(get-public-signing-key)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'initialize': message = "'(initialize \"{0}\")".format(options.key) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'prime': attestation = SchemeExpression.ParseExpression(options.attestation) bidinfo = str(attestation.nth(0)) dependencies = str(attestation.nth(1)) signature = str(attestation.nth(2)) message = "'(prime-auction* {0} {1} {2})".format( bidinfo, dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'submit_bid': attestation = SchemeExpression.ParseExpression(options.attestation) bidinfo = str(attestation.nth(0)) dependencies = str(attestation.nth(1)) signature = str(attestation.nth(2)) message = "'(submit-bid* {0} {1} {2})".format(bidinfo, dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'get_offered_asset': message = "'(get-offered-asset)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'cancel_bid': message = "'(cancel-bid)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'check_bid': message = "'(check-bid)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'max_bid': message = "'(max-bid)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'close_bidding': message = "'(close-bidding)" send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'cancel_attestation': message = "'(cancel-attestation)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'exchange_attestation': message = "'(exchange-attestation)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return
def __command_kv__(state, bindings, pargs) : """controller command to interact with an asset_type contract """ parser = argparse.ArgumentParser(prog='attestation-test') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str, default='preferred') parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get') subparser.add_argument('-k', '--key', help='transfer key', type=str, default='_transfer_') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('set') subparser.add_argument('-k', '--key', help='transfer key', type=str, default='_transfer_') subparser.add_argument('-v', '--value', help='value to send', type=str, required=True) options = parser.parse_args(pargs) extraparams={'quiet' : options.quiet, 'wait' : options.wait} # ------------------------------------------------------- if options.command == 'get' : kv = KeyValueStore() with kv : kv.set(options.key, "") # push the blocks to the eservice so the server can open the store eservice_client = __get_eservice_client__(state, options.save_file, options.enclave) kv.sync_to_block_store(eservice_client) params = {} params['encryption_key'] = kv.encryption_key params['state_hash'] = kv.hash_identity params['transfer_key'] = options.key message = invocation_request('kv_get', **params) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) result = json.loads(result) # sync the server blocks get to the local block manager count = kv.sync_from_block_store(result, eservice_client) logger.debug("sync complete with %d blocks", count) with kv : value = kv.get(options.key) logger.debug("value: %s", value) if options.symbol : bindings.bind(options.symbol, value) return value # ------------------------------------------------------- if options.command == 'set' : kv = KeyValueStore() with kv : kv.set(options.key, options.value) # push the blocks to the eservice so the server can open the store # local_block_store = pblocks.local_block_manager() eservice_client = __get_eservice_client__(state, options.save_file, options.enclave) kv.sync_to_block_store(eservice_client) params = {} params['encryption_key'] = kv.encryption_key params['state_hash'] = kv.hash_identity params['transfer_key'] = options.key message = invocation_request('kv_set', **params) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return
def __command_integer_key__(state, bindings, pargs): """controller command to interact with an integer-key contract """ parser = argparse.ArgumentParser(prog='integer_key') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save-file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') create_parser = subparsers.add_parser('create') create_parser.add_argument('-k', '--key', help='key to create', type=str, required=True) create_parser.add_argument('-v', '--value', help='initial value to give to the key', type=int, default=0) inc_parser = subparsers.add_parser('inc') inc_parser.add_argument('-k', '--key', help='key to increment', type=str, required=True) inc_parser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) dec_parser = subparsers.add_parser('dec') dec_parser.add_argument('-k', '--key', help='key to decrement', type=str, required=True) dec_parser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) get_parser = subparsers.add_parser('get') get_parser.add_argument('-k', '--key', help='key to retrieve', type=str, required=True) transfer_parser = subparsers.add_parser('transfer') transfer_parser.add_argument('-k', '--key', help='key to transfer', type=str, required=True) transfer_parser.add_argument('-o', '--owner', help='identity to transfer ownership', type=str, required=True) escrow_parser = subparsers.add_parser('escrow') escrow_parser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) escrow_parser.add_argument('-a', '--agent', help='identity of the escrow agent', type=str, required=True) attestation_parser = subparsers.add_parser('attestation') attestation_parser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) attestation_parser.add_argument('-s', '--symbol', help='binding symbol for result', type=str, nargs=3) disburse_parser = subparsers.add_parser('disburse') disburse_parser.add_argument('-d', '--dependencies', help='list of dependencies', type=str, nargs='*', default=[]) disburse_parser.add_argument('-k', '--key', help='key to disburse', type=str, required=True) disburse_parser.add_argument('-s', '--signature', help='signature from the escrow agent', type=str, required=True) exchange_parser = subparsers.add_parser('exchange') exchange_parser.add_argument('-d', '--dependencies', help='list of dependencies', type=str, nargs='*', default=[]) exchange_parser.add_argument('--key1', help='source key', type=str, required=True) exchange_parser.add_argument('--key2', help='destination key', type=str, required=True) exchange_parser.add_argument('-s', '--signature', help='signature from the escrow agent', type=str, required=True) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} if options.command == 'create': message = "'(create \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'inc': message = "'(inc \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'dec': message = "'(dec \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'get': extraparams['commit'] = False message = "'(get-value \"{0}\")".format(options.key) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'transfer': message = "'(transfer-ownership \"{0}\" \"{1}\")".format( options.key, options.owner) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'escrow': message = "'(escrow \"{0}\" \"{1}\")".format(options.key, options.agent) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'attestation': message = "'(escrow-attestation \"{0}\")".format(options.key) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: expression = SchemeExpression.ParseExpression(result) bindings.bind(options.symbol[0], str(expression.nth(0))) bindings.bind(options.symbol[1], str(expression.nth(1))) bindings.bind(options.symbol[2], str(expression.nth(2))) return if options.command == 'disburse': dependencies = " ".join(options.dependencies) message = "'(disburse \"{0}\" ({1}) \"{2}\")".format( options.key, dependencies, options.signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'exchange': dependencies = " ".join(options.dependencies) message = "'(disburse \"{0}\" \"{1}\" ({2}) \"{3}\")".format( options.key1, options.key2, dependencies, options.signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return
def __command_attestation__(state, bindings, pargs): """controller command to interact with an asset_type contract """ parser = argparse.ArgumentParser(prog='attestation-test') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('initialize') subparser.add_argument('-l', '--ledger-key', help='ledger verifying key', type=str) subparser = subparsers.add_parser('get_contract_metadata') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('get_contract_code_metadata') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('add_endpoint') subparser.add_argument('-c', '--code-metadata', help='contract code metadata', type=invocation_parameter, required=True) subparser.add_argument('-i', '--contract-id', help='contract identifier', type=str, required=True) subparser.add_argument('-l', '--ledger-attestation', help='attestation from the ledger', type=invocation_parameter, required=True) subparser.add_argument('-m', '--contract-metadata', help='contract metadata', type=invocation_parameter, required=True) subparser = subparsers.add_parser('generate_secret') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('send_secret') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('recv_secret') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('reveal_secret') subparser.add_argument( '-a', '--state-attestation', help='ledger signature for current state attestation', type=invocation_parameter, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} # ------------------------------------------------------- if options.command == 'initialize': message = invocation_request('initialize', ledger_verifying_key=options.ledger_key) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'get_contract_metadata': extraparams['commit'] = False message = invocation_request('get_contract_metadata') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'get_contract_code_metadata': extraparams['commit'] = False message = invocation_request('get_contract_code_metadata') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'add_endpoint': message = invocation_request( 'add_endpoint', contract_id=options.contract_id, ledger_attestation=options.ledger_attestation, contract_metadata=options.contract_metadata, contract_code_metadata=options.code_metadata) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'generate_secret': message = invocation_request('generate_secret') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'send_secret': return # ------------------------------------------------------- if options.command == 'recv_secret': return # ------------------------------------------------------- if options.command == 'reveal_secret': extraparams['commit'] = False message = invocation_request( 'reveal_secret', ledger_signature=options.state_attestation) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return
def __command_issuer__(state, bindings, pargs): """controller command to interact with an issuer contract """ parser = argparse.ArgumentParser(prog='issuer') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_verifying_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('get_balance') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('initialize') subparser.add_argument( '-t', '--type_id', help='contract identifier for the issuer asset type', type=str, required=True) subparser.add_argument( '-a', '--authority', help='serialized authority from the vetting organization', type=str, required=True) subparser = subparsers.add_parser('issue') subparser.add_argument('-o', '--owner', help='identity of the issuance owner; ECDSA key', type=str, required=True) subparser.add_argument('-c', '--count', help='amount of the issuance', type=int, required=True) subparser = subparsers.add_parser('transfer') subparser.add_argument('-n', '--new_owner', help='identity of the new owner; ECDSA key', type=str, required=True) subparser.add_argument('-c', '--count', help='amount to transfer', type=int, required=True) subparser = subparsers.add_parser('escrow') # combine escrow & attestation subparser.add_argument('-a', '--agent', help='identity of the escrow agent', type=str, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('disburse') subparser.add_argument('-a', '--attestation', help='Disburse attestation from the escrow agent', type=str, required=True) subparser = subparsers.add_parser('claim') subparser.add_argument('-a', '--attestation', help='Disburse attestation from the escrow agent', type=str, required=True) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} # ------------------------------------------------------- if options.command == 'get_verifying_key': extraparams['commit'] = False message = "'(get-verifying-key)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'get_balance': extraparams['commit'] = False message = "'(get-balance)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'initialize': message = "'(initialize \"{0}\" {1})".format(options.type_id, options.authority) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'issue': message = "'(issue \"{0}\" {1})".format(options.owner, options.count) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'transfer': message = "'(transfer \"{0}\" {1})".format(options.new_owner, options.count) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'escrow': extraparams['commit'] = True extraparams['wait'] = True message = "'(escrow \"{0}\")".format(options.agent) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) extraparams['commit'] = False extraparams['wait'] = False message = "'(escrow-attestation)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'disburse': attestation = SchemeExpression.ParseExpression(options.attestation) dependencies = str(attestation.nth(0)) signature = str(attestation.nth(1)) message = "'(disburse {0} {1})".format(dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return # ------------------------------------------------------- if options.command == 'claim': attestation = SchemeExpression.ParseExpression(options.attestation) old_owner_identity = str(attestation.nth(0)) dependencies = str(attestation.nth(1)) signature = str(attestation.nth(2)) message = "'(claim {0} {1} {2})".format(old_owner_identity, dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return
def __command_integer_key__(state, bindings, pargs): """controller command to interact with an integer-key contract """ parser = argparse.ArgumentParser(prog='integer_key') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save-file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_signing_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('create') subparser.add_argument('-k', '--key', help='key to create', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, default=0) subparser = subparsers.add_parser('inc') subparser.add_argument('-k', '--key', help='key to increment', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) subparser = subparsers.add_parser('dec') subparser.add_argument('-k', '--key', help='key to decrement', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) subparser = subparsers.add_parser('get') subparser.add_argument('-k', '--key', help='key to retrieve', type=str, required=True) subparser = subparsers.add_parser('transfer') subparser.add_argument('-k', '--key', help='key to transfer', type=str, required=True) subparser.add_argument('-o', '--owner', help='identity to transfer ownership', type=str, required=True) subparser = subparsers.add_parser('escrow') subparser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) subparser.add_argument('-a', '--agent', help='identity of the escrow agent', type=str, required=True) subparser = subparsers.add_parser('attestation') subparser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('disburse') subparser.add_argument('-a', '--attestation', help='Disburse attestation from the escrow agent', type=str, required=True) subparser = subparsers.add_parser('exchange') subparser.add_argument('-a', '--attestation', help='Disburse attestation from the escrow agent', type=str, required=True) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} if options.command == 'get_signing_key': message = "'(get-public-signing-key)" result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'create': message = "'(create \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'inc': message = "'(inc \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'dec': message = "'(dec \"{0}\" {1})".format(options.key, options.value) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'get': extraparams['commit'] = False message = "'(get-value \"{0}\")".format(options.key) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'transfer': message = "'(transfer-ownership \"{0}\" \"{1}\")".format( options.key, options.owner) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'escrow': message = "'(escrow \"{0}\" \"{1}\")".format(options.key, options.agent) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'attestation': message = "'(escrow-attestation \"{0}\")".format(options.key) result = send_to_contract(state, options.save_file, options.enclave, message, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'disburse': attestation = SchemeExpression.ParseExpression(options.attestation) assetkey = dict(attestation.nth(0).value)['key'] dependencies = str(attestation.nth(1)) signature = str(attestation.nth(2)) message = "'(disburse \"{0}\" {1} {2})".format(assetkey, dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return if options.command == 'exchange': attestation = SchemeExpression.ParseExpression(options.attestation) offered = dict(attestation.nth(0).value)['key'] maxbid = dict(attestation.nth(1).value)['key'] dependencies = str(attestation.nth(2)) signature = str(attestation.nth(3)) message = "'(exchange-ownership \"{0}\" \"{1}\" {2} {3})".format( offered, maxbid, dependencies, signature) send_to_contract(state, options.save_file, options.enclave, message, **extraparams) return
def __command_integer_key__(state, bindings, pargs): """controller command to interact with an integer-key contract """ parser = argparse.ArgumentParser(prog='integer_key') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save-file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_state') subparser = subparsers.add_parser('get_signing_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('create') subparser.add_argument('-k', '--key', help='key to create', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, default=0) subparser = subparsers.add_parser('inc') subparser.add_argument('-k', '--key', help='key to increment', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) subparser = subparsers.add_parser('dec') subparser.add_argument('-k', '--key', help='key to decrement', type=str, required=True) subparser.add_argument('-v', '--value', help='initial value to give to the key', type=int, required=True) subparser = subparsers.add_parser('get') subparser.add_argument('-k', '--key', help='key to retrieve', type=str, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('transfer') subparser.add_argument('-k', '--key', help='key to transfer', type=str, required=True) subparser.add_argument('-o', '--owner', help='identity to transfer ownership', type=str, required=True) subparser = subparsers.add_parser('escrow') subparser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) subparser.add_argument('-a', '--agent', help='identity of the escrow agent', type=str, required=True) subparser = subparsers.add_parser('attestation') subparser.add_argument('-k', '--key', help='key to escrow', type=str, required=True) subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('disburse') subparser.add_argument('-a', '--attestation', help='disburse attestation from escrow agent', type=invocation_parameter, required=True) subparser = subparsers.add_parser('exchange') subparser.add_argument('-a', '--attestation', help='exchange attestation from escrow agent', type=invocation_parameter, required=True) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} if options.command == 'get_state': extraparams['quiet'] = True message = invocation_request('get-state') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) __dump_state__(result) return if options.command == 'get_signing_key': message = invocation_request('get-public-signing-key') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return if options.command == 'create': message = invocation_request('create', options.key, options.value) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'inc': message = invocation_request('inc', options.key, options.value) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'dec': message = invocation_request('dec', options.key, options.value) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'get': extraparams['commit'] = False message = invocation_request('get-value', options.key) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol: bindings.bind(options.symbol, result) return if options.command == 'transfer': message = invocation_request('transfer-ownership', options.key, options.owner) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'escrow': message = invocation_request('escrow', options.key, options.agent) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'attestation': message = invocation_request('escrow-attestation', options.key) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if options.symbol: bindings.bind(options.symbol, json.dumps(result)) return if options.command == 'disburse': assert type(options.attestation) is list assert len(options.attestation) == 3 bidinfo = dict(options.attestation[0]) assetkey = bidinfo['key'] dependencies = options.attestation[1] signature = options.attestation[2] message = invocation_request('disburse', assetkey, dependencies, signature) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return if options.command == 'exchange': assert type(options.attestation) is list assert len(options.attestation) == 4 offered = dict(options.attestation[0])['key'] maxbid = dict(options.attestation[1])['key'] dependencies = options.attestation[2] signature = options.attestation[3] message = invocation_request('exchange-ownership', offered, maxbid, dependencies, signature) send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return
def __command_auction__(state, bindings, pargs): """controller command to interact with an auction contract """ parser = argparse.ArgumentParser(prog='auction') parser.add_argument('-e', '--enclave', help='URL of the enclave service to use', type=str) parser.add_argument('-f', '--save_file', help='File where contract data is stored', type=str) parser.add_argument('-q', '--quiet', help='Suppress printing the result', action='store_true') parser.add_argument('-w', '--wait', help='Wait for the transaction to commit', action='store_true') subparsers = parser.add_subparsers(dest='command') subparser = subparsers.add_parser('get_verifying_key') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('get_offered_asset') subparser = subparsers.add_parser('get_requested_asset') subparser = subparsers.add_parser('initialize') subparser.add_argument( '-r', '--root', help='key for the root authority for requested issuer', type=str, required=True) subparser.add_argument( '-t', '--type_id', help='contract identifier for the requested asset type', type=str, required=True) subparser.add_argument('-o', '--owner', help='identity of the asset owner; ECDSA key', type=str, default="") subparser.add_argument('-c', '--count', help='amount requested', type=int, required=True) subparser = subparsers.add_parser('offer') subparser.add_argument('-a', '--asset', help='serialized escrowed asset', type=scheme_parameter, required=True) subparser = subparsers.add_parser('claim_offer') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('cancel_auction') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('close_auction') subparser = subparsers.add_parser('confirm_close') subparser = subparsers.add_parser('submit_bid') subparser.add_argument('-a', '--asset', help='serialized escrowed asset', type=scheme_parameter, required=True) subparser = subparsers.add_parser('claim_bid') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) subparser = subparsers.add_parser('max_bid') subparser = subparsers.add_parser('check_bid') subparser = subparsers.add_parser('cancel_bid') subparser.add_argument('-s', '--symbol', help='binding symbol for result', type=str) options = parser.parse_args(pargs) extraparams = {'quiet': options.quiet, 'wait': options.wait} # ------------------------------------------------------- if options.command == 'get_verifying_key': extraparams['commit'] = False message = invocation_request('get-verifying-key') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'get_offered_asset': extraparams['commit'] = False message = invocation_request('examine-offered-asset') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'get_requested_asset': extraparams['commit'] = False message = invocation_request('examine-requested-asset') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'initialize': asset_request = [options.type_id, options.count, options.owner] message = invocation_request('initialize', asset_request, options.root) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'offer': message = invocation_request('offer-asset', options.asset) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'claim_offer': extraparams['commit'] = False message = invocation_request('claim-offer') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'cancel_auction': message = invocation_request('cancel-auction') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result == "#t": extraparams['commit'] = False message = invocation_request('cancel-auction-attestation') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'close_auction': message = invocation_request('close-auction') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'confirm_close': message = invocation_request('confirm-close') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'submit_bid': message = invocation_request('submit-bid', options.asset) result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'max_bid': extraparams['commit'] = False message = invocation_request('max-bid') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'check_bid': extraparams['commit'] = False message = invocation_request('check-bid') send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) return # ------------------------------------------------------- if options.command == 'claim_bid': extraparams['commit'] = False message = invocation_request('claim-bid') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return # ------------------------------------------------------- if options.command == 'cancel_bid': message = invocation_request('cancel-bid') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result == "#t": extraparams['commit'] = False message = invocation_request('cancel-bid-attestation') result = send_to_contract(state, options.save_file, message, eservice_url=options.enclave, **extraparams) if result and options.symbol: bindings.bind(options.symbol, result) return