def setup_agreements_environment(): consumer_acc = get_consumer_account() publisher_acc = get_publisher_account() keeper = Keeper.get_instance() ddo = get_ddo_sample() ddo._did = DID.did({"0": "0x12341234"}) keeper.did_registry.register( ddo.asset_id, checksum=Web3Provider.get_web3().toBytes(hexstr=ddo.asset_id), url='aquarius:5000', account=publisher_acc, providers=None) registered_ddo = ddo asset_id = registered_ddo.asset_id service_agreement = ServiceAgreement.from_ddo(ServiceTypes.ASSET_ACCESS, ddo) agreement_id = ServiceAgreement.create_new_agreement_id() price = service_agreement.get_price() (lock_cond_id, access_cond_id, escrow_cond_id) = service_agreement.generate_agreement_condition_ids( agreement_id, asset_id, consumer_acc.address, publisher_acc.address, keeper) return ( keeper, publisher_acc, consumer_acc, agreement_id, asset_id, price, service_agreement, (lock_cond_id, access_cond_id, escrow_cond_id), )
def test_agreement_hash(publisher_ocean_instance): """ This test verifies generating agreement hash using fixed inputs and ddo example. This will make it easier to compare the hash generated from different languages. """ w3 = Web3Provider.get_web3() did = "did:op:cb36cf78d87f4ce4a784f17c2a4a694f19f3fbf05b814ac6b0b7197163888865" template_id = w3.toChecksumAddress( "0x00bd138abd70e2f00903268f3db08f2d25677c9e") agreement_id = '0xf136d6fadecb48fdb2fc1fb420f5a5d1c32d22d9424e47ab9461556e058fefaa' ddo = get_ddo_sample() sa = ServiceAgreement.from_service_dict( ddo.get_service(service_type='Access').as_dictionary()) sa.service_agreement_template.set_template_id(template_id) assert template_id == sa.template_id, '' assert did == ddo.did # Don't generate condition ids, use fixed ids so we get consistent hash # (access_id, lock_id, escrow_id) = sa.generate_agreement_condition_ids( # agreement_id, ddo.asset_id, consumer, publisher, keeper) access_id = '0x2d7c1d60dc0c3f52aa9bd71ffdbe434a0e58435571e64c893bc9646fea7f6ec1' lock_id = '0x1e265c434c14e668695dda1555088f0ea4356f596bdecb8058812e7dcba9ee73' escrow_id = '0xe487fa6d435c2f09ef14b65b34521302f1532ac82ba8f6c86116acd8566e2da3' print(f'condition ids: \n' f'{access_id} \n' f'{lock_id} \n' f'{escrow_id}') agreement_hash = ServiceAgreement.generate_service_agreement_hash( sa.template_id, (access_id, lock_id, escrow_id), sa.conditions_timelocks, sa.conditions_timeouts, agreement_id) print('agreement hash: ', agreement_hash.hex()) expected = '0x96732b390dacec0f19ad304ac176b3407968a0184d01b3262687fd23a3f0995e' print('expected hash: ', expected) assert agreement_hash.hex() == expected, 'hash does not match.'
def test_agreement_hash(): """ This test verifies generating agreement hash using fixed inputs and ddo example. This will make it easier to compare the hash generated from different languages. """ did = "did:op:0bc278fee025464f8012b811d1bce8e22094d0984e4e49139df5d5ff7a028bdf" template_id = '0x34219511357c43f4af90a4896b972a32809379bfbe8148eab3878e8406e75836' agreement_id = '0xf136d6fadecb48fdb2fc1fb420f5a5d1c32d22d9424e47ab9461556e058fefaa' ddo = get_ddo_sample() sa = ServiceAgreement.from_json( ddo.get_service(ServiceTypes.ASSET_ACCESS).as_dictionary()) assert did == ddo.did # Don't generate condition ids, use fixed ids so we get consistent hash # (access_id, lock_id, escrow_id) = sa.generate_agreement_condition_ids( # agreement_id, ddo.asset_id, consumer, publisher, keeper) access_id = '0x2d7c1d60dc0c3f52aa9bd71ffdbe434a0e58435571e64c893bc9646fea7f6ec1' lock_id = '0x1e265c434c14e668695dda1555088f0ea4356f596bdecb8058812e7dcba9ee73' escrow_id = '0xe487fa6d435c2f09ef14b65b34521302f1532ac82ba8f6c86116acd8566e2da3' print(f'condition ids: \n' f'{access_id} \n' f'{lock_id} \n' f'{escrow_id}') agreement_hash = ServiceAgreement.generate_service_agreement_hash( template_id, (access_id, lock_id, escrow_id), sa.conditions_timelocks, sa.conditions_timeouts, agreement_id, generate_multi_value_hash ) print('agreement hash: ', agreement_hash.hex()) expected = '0xc1bc6cdb161b9d04d5b48bceba51b9092c4da8db08003b96b93647fbe86e330c' print('expected hash: ', expected) assert agreement_hash.hex() == expected, 'hash does not match.'
def test_find_service(): ddo = get_ddo_sample() service = ddo.get_service_by_index(0) assert service and service.type == ServiceTypes.METADATA, 'Failed to find service by integer ' \ 'id.' service = ddo.get_service_by_index('0') assert service and service.type == ServiceTypes.METADATA, 'Failed to find service by str(int)' \ ' id.' service = ddo.get_service_by_index(3) assert service and service.type == ServiceTypes.ASSET_ACCESS, 'Failed to find service by ' \ 'integer id.' service = ddo.get_service_by_index('3') assert service and service.type == ServiceTypes.ASSET_ACCESS, 'Failed to find service by str(' \ 'int) id.' service = ddo.get_service(ServiceTypes.ASSET_ACCESS) assert service and service.type == ServiceTypes.ASSET_ACCESS, 'Failed to find service by id ' \ 'using service type.' assert service.index == 3, 'index not as expected.' service = ddo.get_service(ServiceTypes.METADATA) assert service and service.type == ServiceTypes.METADATA, 'Failed to find service by id using ' \ '' \ 'service ' \ 'type.' assert service.index == 0, 'index not as expected.'
def agreements(): publisher_acc = get_publisher_account() keeper = Keeper.get_instance() w3 = Web3Provider.get_web3() did_resolver = Mock() ddo = get_ddo_sample() service = ddo.get_service(ServiceTypes.ASSET_ACCESS) service.update_value(ServiceAgreementTemplate.TEMPLATE_ID_KEY, w3.toChecksumAddress(publisher_acc.address)) did_resolver.resolve = MagicMock(return_value=ddo) return Agreements(keeper, did_resolver, AssetConsumer, AssetExecutor, ConfigProvider.get_config())
def ocean_agreements(): keeper = Keeper.get_instance() w3 = Web3Provider.get_web3() did_resolver = Mock() ddo = get_ddo_sample() service = ddo.get_service(ServiceTypes.ASSET_ACCESS) service.update_value( ServiceAgreementTemplate.TEMPLATE_ID_KEY, w3.toChecksumAddress("0x00bd138abd70e2f00903268f3db08f2d25677c9e")) did_resolver.resolve = MagicMock(return_value=ddo) # consumer_class = Mock # consumer_class.download = MagicMock(return_value='') return OceanAgreements(keeper, did_resolver, AssetConsumer, AssetExecutor, ConfigProvider.get_config())
def setup_agreements_environment(): consumer_acc = get_consumer_account() publisher_acc = get_publisher_account() keeper = Keeper.get_instance() ddo = get_ddo_sample() did_seed = generate_prefixed_id() asset_id = keeper.did_registry.hash_did(did_seed, publisher_acc.address) ddo._did = DID.did(asset_id) keeper.did_registry.register( did_seed, checksum=Web3Provider.get_web3().toBytes(hexstr=ddo.asset_id), url='http://172.17.0.1:5000', account=publisher_acc, providers=None) service_agreement = ServiceAgreement.from_ddo(ServiceTypes.ASSET_ACCESS, ddo) agreement_id = ServiceAgreement.create_new_agreement_id() price = service_agreement.get_price() (access_cond_id, lock_cond_id, escrow_cond_id) = service_agreement.generate_agreement_condition_ids( agreement_id, asset_id, consumer_acc.address, keeper) return ( keeper, ddo, publisher_acc, consumer_acc, agreement_id, asset_id, price, service_agreement, (lock_cond_id, access_cond_id, escrow_cond_id), )
def setup_things(): config = ConfigProvider.get_config() consumer_acc = get_consumer_account(config) publisher_acc = get_publisher_account(config) keeper = Keeper.get_instance() service_definition_id = 'Access' ddo = get_ddo_sample() ddo._did = DID.did() keeper.did_registry.register(ddo.did, checksum=Web3Provider.get_web3().sha3( text=ddo.metadata['base']['checksum']), url='aquarius:5000', account=publisher_acc, providers=None) registered_ddo = ddo asset_id = registered_ddo.asset_id service_agreement = ServiceAgreement.from_ddo(service_definition_id, ddo) agreement_id = ServiceAgreement.create_new_agreement_id() price = service_agreement.get_price() access_cond_id, lock_cond_id, escrow_cond_id = \ service_agreement.generate_agreement_condition_ids( agreement_id, asset_id, consumer_acc.address, publisher_acc.address, keeper ) return ( keeper, publisher_acc, consumer_acc, agreement_id, asset_id, price, service_agreement, (lock_cond_id, access_cond_id, escrow_cond_id), )
def ddo_sample(): return get_ddo_sample()
def ddo_sample(): ddo = get_ddo_sample() ddo.metadata['main']['files'][0]['checksum'] = str(uuid.uuid4()) return ddo