def search_assets(): ConfigProvider.set_config(ExampleConfig.get_config()) nevermined = Nevermined() account = get_account(0) ddo = nevermined.assets.create( example_metadata.metadata, account, ) sleep(ASYNC_DELAY) logging.info(f'Registered asset: did={ddo.did}, ddo={ddo.as_text()}') resolved_ddo = nevermined.assets.resolve(ddo.did) logging.info( f'resolved asset ddo: did={resolved_ddo.did}, ddo={resolved_ddo.as_text()}' ) ddo_list = nevermined.assets.search('bonding curve') logging.info( f'found {len(ddo_list)} assets that contain `bonding curve` in their metadata.' ) ddo_list = nevermined.assets.query( {"query": { "text": ['Nevermined protocol white paper'] }}) logging.info( f'found {len(ddo_list)} assets with name that contains `Nevermined protocol white paper`' )
def sign_service_agreement(): ConfigProvider.set_config(ExampleConfig.get_config()) # make ocean instance and register an asset nevermined = Nevermined() acc = get_account(0) ddo = nevermined.assets.create(example_metadata.metadata, acc) consumer_account = get_account(1) agreement_id, signature = nevermined.agreements.prepare( ddo.did, consumer_account) sleep(ASYNC_DELAY) logging.info(f'service agreement signed: ' f'\nservice agreement id: {agreement_id}, ' f'\nsignature: {signature}')
def setup_keeper(config_file=None): config = Config(filename=config_file) if config_file else get_config() keeper_url = config.keeper_url artifacts_path = get_keeper_path(config) ContractHandler.artifacts_path = artifacts_path Web3Provider.get_web3(keeper_url) init_account_envvars() account = get_account(0) if account is None: raise AssertionError( f'Nevermined Gateway cannot run without a valid ' f'ethereum account. Account address was not found in the environment' f'variable `PROVIDER_ADDRESS`. Please set the following environment ' f'variables and try again: `PROVIDER_ADDRESS`, `PROVIDER_PASSWORD`, ' f', `PROVIDER_KEYFILE`, `RSA_KEYFILE` and `RSA_PASSWORD`.') if not account.key_file and not (account.password and account.key_file): raise AssertionError( f'Nevermined Gateway cannot run without a valid ' f'ethereum account with either a password and ' f'keyfile/encrypted-key-string ' f'or private key. Current account has password {account.password}, ' f'keyfile {account.key_file}, encrypted-key {account._encrypted_key} ' f'and private-key {account._private_key}.')
def resolve_asset(): ConfigProvider.set_config(ExampleConfig.get_config()) nevermined = Nevermined() account = get_account(0) ddo = nevermined.assets.create( example_metadata.metadata, account, ) sleep(ASYNC_DELAY) logging.info(f'Registered asset: did={ddo.did}, ddo={ddo.as_text()}') resolved_ddo = nevermined.assets.resolve(ddo.did) logging.info(f'resolved asset ddo: did={resolved_ddo.did}, ddo={resolved_ddo.as_text()}')
def setup_keeper(): init_account_envvars() account = get_account(0) if account is None: raise AssertionError( f'Nevermined Gateway cannot run without a valid ' f'ethereum account. Account address was not found in the environment' f'variable `PROVIDER_ADDRESS`. Please set the following evnironment ' f'variables and try again: `PROVIDER_ADDRESS`, `PROVIDER_PASSWORD`, ' f', `PROVIDER_KEYFILE`, `RSA_KEYFILE` and `RSA_PASSWORD`.') if not account.key_file and not (account.password and account.key_file): raise AssertionError( f'Nevermined Gateway cannot run without a valid ' f'ethereum account with either a password and ' f'keyfile/encrypted-key-string ' f'or private key. Current account has password {account.password}, ' f'keyfile {account.key_file}, encrypted-key {account._encrypted_key} ' f'and private-key {account._private_key}.')
def register_asset(): # make nevermined instance ConfigProvider.set_config(ExampleConfig.get_config()) nevermined = Nevermined() account = get_account(0) # account = ([acc for acc in nevermined.accounts.list() if acc.password] or # nevermined.accounts.list())[0] ddo = nevermined.assets.create( example_metadata.metadata, account, providers=['0xfEF2d5e1670342b9EF22eeeDcb287EC526B48095']) sleep(ASYNC_DELAY) logging.info( f'Registered asset: did={ddo.did}, ddo-services={ddo.services}') resolved_ddo = nevermined.assets.resolve(ddo.did) logging.info( f'resolved asset ddo: did={resolved_ddo.did}, ddo={resolved_ddo.as_text()}' )
def run_events_monitor(): setup_logging() config = get_config() keeper_url = config.keeper_url storage_path = config.get('resources', 'storage.path', fallback='./provider-events-monitor.db') web3 = Web3Provider.get_web3(keeper_url) ContractHandler.artifacts_path = get_keeper_path(config) keeper = Keeper.get_instance() init_account_envvars() account = get_account(0) if account is None: raise AssertionError( f'Provider events monitor cannot run without a valid ' f'ethereum account. Account address was not found in the environment' f'variable `PROVIDER_ADDRESS`. Please set the following environment ' f'variables and try again: `PROVIDER_ADDRESS`, [`PROVIDER_PASSWORD`, ' f'and `PROVIDER_KEYFILE` or `PROVIDER_ENCRYPTED_KEY`] or `PROVIDER_KEY`.' ) if not account.key_file and not (account.password and account.key_file): raise AssertionError( f'Provider events monitor cannot run without a valid ' f'ethereum account with either a `PROVIDER_PASSWORD` ' f'and `PROVIDER_KEYFILE`/`PROVIDER_ENCRYPTED_KEY` ' f'or private key `PROVIDER_KEY`. Current account has password {account.password}, ' f'keyfile {account.key_file}, encrypted-key {account._encrypted_key} ' f'and private-key {account._private_key}.') monitor = ProviderEventsMonitor(keeper, web3, storage_path, account) monitor.start_agreement_events_monitor() while True: time.sleep(5)
def get_consumer_account(): return get_account(1)
def get_publisher_account(): return get_account(0)
def publisher_account(): os.environ['PARITY_ADDRESS2'] = '0xa99d43d86a0758d5632313b8fa3972b6088a21bb' os.environ['PARITY_PASSWORD2'] = 'secret' os.environ['PARITY_KEYFILE2'] = 'tests/resources/data/publisher2_key_file.json' return get_account(2)
def consumer_account(): os.environ['PARITY_ADDRESS1'] = '0x068ed00cf0441e4829d9784fcbe7b9e26d4bd8d0' os.environ['PARITY_PASSWORD1'] = 'secret' os.environ['PARITY_KEYFILE1'] = 'tests/resources/data/consumer_key_file.json' return get_account(1)
def provider_account(): return get_account(0)
def buy_asset(): """ Requires all Nevermined services running. """ ConfigProvider.set_config(ExampleConfig.get_config()) config = ConfigProvider.get_config() providers = { 'duero': '0xfEF2d5e1670342b9EF22eeeDcb287EC526B48095', 'nile': '0x4aaab179035dc57b35e2ce066919048686f82972' } # make nevermined instance nevermined = Nevermined() Diagnostics.verify_contracts() acc = get_account(1) if not acc: acc = ([acc for acc in nevermined.accounts.list() if acc.password] or nevermined.accounts.list())[0] keeper = Keeper.get_instance() # Register ddo did = '' # 'did:nv:7648596b60f74301ae1ef9baa5d637255d517ff362434754a3779e1de4c8219b' if did: ddo = nevermined.assets.resolve(did) logging.info(f'using ddo: {did}') else: ddo = nevermined.assets.create(example_metadata.metadata, acc, providers=[], authorization_type='SecretStore', use_secret_store=True) assert ddo is not None, f'Registering asset on-chain failed.' did = ddo.did logging.info(f'registered ddo: {did}') # nevermined here will be used only to publish the asset. Handling the asset by the publisher # will be performed by the Gateway server running locally test_net = os.environ.get('TEST_NET', '') if test_net.startswith('nile'): provider = keeper.did_registry.to_checksum_address(providers['nile']) elif test_net.startswith('duero'): provider = keeper.did_registry.to_checksum_address(providers['duero']) else: provider = '0x068Ed00cF0441e4829D9784fCBe7b9e26D4BD8d0' # Wait for did registry event event = keeper.did_registry.subscribe_to_event( keeper.did_registry.DID_REGISTRY_EVENT_NAME, 30, event_filter={ '_did': Web3Provider.get_web3().toBytes(hexstr=ddo.asset_id), '_owner': acc.address}, wait=True ) if not event: logging.warning(f'Failed to get the did registry event for asset with did {did}.') assert keeper.did_registry.get_block_number_updated(ddo.asset_id) > 0, \ f'There is an issue in registering asset {did} on-chain.' keeper.did_registry.add_provider(ddo.asset_id, provider, acc) logging.info(f'is {provider} set as did provider: ' f'{keeper.did_registry.is_did_provider(ddo.asset_id, provider)}') nevermined_cons = Nevermined() consumer_account = get_account(0) # sign agreement using the registered asset did above service = ddo.get_service(service_type=ServiceTypes.ASSET_ACCESS) # This will send the order request to Gateway which in turn will execute the agreement on-chain nevermined_cons.accounts.request_tokens(consumer_account, 10) sa = ServiceAgreement.from_service_dict(service.as_dictionary()) agreement_id = '' if not agreement_id: # Use these 2 lines to request new agreement from Gateway # agreement_id, signature = nevermined_cons.agreements.prepare(did, sa.service_definition_id, # consumer_account) # nevermined_cons.agreements.send(did, agreement_id, sa.service_definition_id, signature, # consumer_account) # assets.order now creates agreement directly using consumer account. agreement_id = nevermined_cons.assets.order( did, sa.index, consumer_account) logging.info('placed order: %s, %s', did, agreement_id) event = keeper.access_template.subscribe_agreement_created( agreement_id, 60, None, (), wait=True ) assert event, "Agreement event is not found, check the keeper node's logs" logging.info(f'Got agreement event, next: lock reward condition') event = keeper.lock_payment_condition.subscribe_condition_fulfilled( agreement_id, 60, None, (), wait=True ) assert event, "Lock reward condition fulfilled event is not found, check the keeper node's logs" logging.info('Got lock reward event, next: wait for the access condition..') event = keeper.access_condition.subscribe_condition_fulfilled( agreement_id, 15, None, (), wait=True ) logging.info(f'Got access event {event}') i = 0 while nevermined.agreements.is_access_granted( agreement_id, did, consumer_account.address) is not True and i < 15: time.sleep(1) i += 1 assert nevermined.agreements.is_access_granted(agreement_id, did, consumer_account.address) nevermined.assets.access( agreement_id, did, sa.index, consumer_account, config.downloads_path, index=0) logging.info('Success buying asset.') event = keeper.escrow_payment_condition.subscribe_condition_fulfilled( agreement_id, 30, None, (), wait=True ) assert event, 'no event for EscrowReward.Fulfilled' logging.info(f'got EscrowReward.FULFILLED event: {event}') logging.info('Done buy asset.')