Example #1
0
    def release_reward(self, agreement_id, asset_id, amounts, receivers,
                       token_address, account):
        """
        Release reward condition.

        :param agreement_id: id of the agreement, hex str
        :param asset_id: asset id, str
        :param amounts: Amounts of tokens, int[]
        :param receivers: Token receivers, str[]
        :param token_address: ERC20 address or 0x0 if ETH payment
        :param account sending the transaction
        :return:
        """
        agreement_values = self._keeper.agreement_manager.get_agreement(
            agreement_id)
        consumer, provider = self._keeper.access_template.get_agreement_data(
            agreement_id)
        owner = agreement_values.owner
        access_id, lock_id = agreement_values.condition_ids[:2]
        tx_hash = self._keeper.escrow_payment_condition.fulfill(
            agreement_id, asset_id, amounts, to_checksum_addresses(receivers),
            self._keeper.escrow_payment_condition.address, token_address,
            lock_id, access_id, account)
        receipt = self._keeper.escrow_payment_condition.get_tx_receipt(tx_hash)
        return bool(receipt and receipt.status == 1)
Example #2
0
    def lock_payment(self, agreement_id, asset_id, amounts, receivers,
                     token_address, account):
        """
        Lock reward condition.

        :param agreement_id: id of the agreement, hex str
        :param asset_id: asset identifier, str
        :param amounts: Amount of tokens, str[]
        :param receivers: Tokens receivers, str[]
        :param token_address: ERC20 token address or 0x0 if ETH
        :param account: Account
        :return: bool
        """
        total_price = 0
        for amount in amounts:
            total_price = total_price + int(amount)
        self._keeper.token.token_approve(
            self._keeper.lock_payment_condition.address, total_price, account)

        tx_hash = self._keeper.lock_payment_condition.fulfill(
            agreement_id, asset_id,
            self._keeper.escrow_payment_condition.address, token_address,
            amounts, to_checksum_addresses(receivers), account)

        receipt = self._keeper.lock_payment_condition.get_tx_receipt(tx_hash)
        return bool(receipt and receipt.status == 1)
Example #3
0
def get_registered_ddo(account,
                       providers=None,
                       auth_service='PSK-RSA',
                       url=get_file_url()):
    ddo = get_sample_ddo()
    metadata = ddo['service'][0]['attributes']
    metadata['main']['files'][0]['url'] = url
    metadata['main']['files'][0]['checksum'] = str(uuid.uuid4())

    escrow_payment_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][2]
    _amounts = get_param_value_by_name(escrow_payment_condition['parameters'],
                                       '_amounts')
    _receivers = to_checksum_addresses(
        get_param_value_by_name(escrow_payment_condition['parameters'],
                                '_receivers'))

    access_service_attributes = {
        "main": {
            "name": "dataAssetAccessServiceAgreement",
            "creator": account.address,
            "price": metadata[MetadataMain.KEY]['price'],
            "timeout": 3600,
            "datePublished": metadata[MetadataMain.KEY]['dateCreated'],
            "_amounts": _amounts,
            "_receivers": _receivers
        }
    }

    access_service_descriptor = ServiceDescriptor.access_service_descriptor(
        access_service_attributes, 'http://localhost:8030')

    return register_ddo(metadata, account, providers, auth_service,
                        [access_service_descriptor])
Example #4
0
def get_nft_ddo(account, providers=None, auth_service='PSK-RSA'):
    ddo = get_sample_nft_ddo()
    metadata = ddo['service'][0]['attributes']
    metadata['main']['files'][0][
        'url'] = "https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos" \
                 "/CoverSongs/shs_dataset_test.txt?" + str(uuid.uuid4())
    metadata['main']['files'][0]['checksum'] = str(uuid.uuid4())

    escrow_payment_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][2]
    _number_nfts = 1
    # _amounts = get_param_value_by_name(escrow_payment_condition['parameters'], '_amounts')
    # _receivers = to_checksum_addresses(
    #     get_param_value_by_name(escrow_payment_condition['parameters'], '_receivers'))
    _amounts = ['9']
    _receivers = to_checksum_addresses([account.address])

    transfer_nft_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][1]
    # _nftHolder = get_param_value_by_name(transfer_nft_condition['parameters'], '_nftHolder')
    _nftHolder = to_checksum_address(account.address)
    _total_price = sum(int(x) for x in _amounts)

    asset_rewards = {"_amounts": _amounts, "_receivers": _receivers}

    metadata['main']['price'] = _total_price

    access_service_attributes = {
        "main": {
            "name": "nftAccessAgreement",
            "creator": account.address,
            "timeout": 3600,
            "price": _total_price,
            "_amounts": _amounts,
            "_receivers": _receivers,
            "_numberNfts": str(_number_nfts),
            "_tokenAddress": "",
            "datePublished": metadata['main']['dateCreated']
        }
    }

    sales_service_attributes = copy.deepcopy(access_service_attributes)
    sales_service_attributes['main']['name'] = 'nftSalesAgreement'
    sales_service_attributes['main']['_nftHolder'] = _nftHolder

    nft_sales_service_descriptor = ServiceDescriptor.nft_sales_service_descriptor(
        sales_service_attributes, 'http://localhost:8030')
    nft_access_service_descriptor = ServiceDescriptor.nft_access_service_descriptor(
        access_service_attributes, 'http://localhost:8030')

    return register_ddo(
        metadata,
        account,
        providers,
        auth_service,
        [nft_access_service_descriptor, nft_sales_service_descriptor],
        royalties=0,
        cap=10,
        mint=10)
Example #5
0
    def get_receivers(self):
        """
        Return the list of receivers addresses

        :return: str[]
        """
        return to_checksum_addresses(
            self.get_param_value_by_name('_receivers'))
Example #6
0
def get_registered_ddo_nft(nevermined_instance, account):
    ddo = get_sample_nft_ddo()
    metadata = ddo['service'][0]['attributes']
    metadata['main']['files'][0][
        'url'] = "https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos" \
                 "/CoverSongs/shs_dataset_test.txt?" + str(uuid.uuid4())
    metadata['main']['files'][0]['checksum'] = str(uuid.uuid4())

    escrow_payment_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][2]
    _number_nfts = 1
    _amounts = get_param_value_by_name(escrow_payment_condition['parameters'],
                                       '_amounts')
    _receivers = to_checksum_addresses(
        get_param_value_by_name(escrow_payment_condition['parameters'],
                                '_receivers'))

    _total_price = 0
    for i in _amounts:
        _total_price += int(i)

    asset_rewards = {"_amounts": _amounts, "_receivers": _receivers}

    metadata['main']['price'] = _total_price

    access_service_attributes = {
        "main": {
            "name": "nftAccessAgreement",
            "creator": account.address,
            "timeout": 3600,
            "price": _total_price,
            "_amounts": _amounts,
            "_receivers": _receivers,
            "_numberNfts": str(_number_nfts),
            "datePublished": metadata['main']['dateCreated']
        }
    }

    sales_service_attributes = access_service_attributes
    sales_service_attributes['main']['name'] = 'nftSalesAgreement'

    nft_sales_service_descriptor = ServiceDescriptor.nft_sales_service_descriptor(
        sales_service_attributes, 'http://localhost:8030')
    nft_access_service_descriptor = ServiceDescriptor.nft_access_service_descriptor(
        access_service_attributes, 'http://localhost:8030')
    ddo = nevermined_instance.assets.create(
        metadata,
        account, [nft_sales_service_descriptor, nft_access_service_descriptor],
        asset_rewards=asset_rewards,
        royalties=0,
        cap=10,
        mint=10)
    return ddo
Example #7
0
def get_proof_ddo(account,
                  providers=None,
                  auth_service='PSK-RSA',
                  key=get_key()):
    ddo = get_sample_ddo()
    metadata = ddo['service'][0]['attributes']
    metadata['main']['files'][0]['url'] = key
    metadata['main']['files'][0]['checksum'] = str(uuid.uuid4())
    hash = poseidon_hash(key)
    providerKey = get_provider_public_key()
    metadata['additionalInformation'] = {
        "providerKey": {
            "x": providerKey[0],
            "y": providerKey[1]
        },
        "poseidonHash": hash
    }

    escrow_payment_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][2]
    _amounts = get_param_value_by_name(escrow_payment_condition['parameters'],
                                       '_amounts')
    _receivers = to_checksum_addresses(
        get_param_value_by_name(escrow_payment_condition['parameters'],
                                '_receivers'))
    access_service_attributes = {
        "main": {
            "name": "dataAssetAccessProofServiceAgreement",
            "creator": account.address,
            "price": metadata[MetadataMain.KEY]['price'],
            "timeout": 3600,
            "datePublished": metadata[MetadataMain.KEY]['dateCreated'],
            "_amounts": _amounts,
            "_tokenAddress": "",
            "_hash": hash,
            "_providerPub": providerKey,
            "_receivers": _receivers
        }
    }

    access_service_descriptor = ServiceDescriptor.access_proof_service_descriptor(
        access_service_attributes, 'http://localhost:8030')

    return register_ddo(metadata, account, providers, auth_service,
                        [access_service_descriptor])
Example #8
0
def fulfill_escrow_payment_condition(keeper,
                                     agreement_id,
                                     cond_ids,
                                     asset,
                                     provider_acc,
                                     service_type=ServiceTypes.ASSET_ACCESS):
    escrow_condition_status = keeper.condition_manager.get_condition_state(
        cond_ids[2])

    if escrow_condition_status != ConditionState.Fulfilled.value:
        logger.debug('Fulfilling EscrowPayment condition %s' % agreement_id)
        service_agreement = asset.get_service(service_type)
        # did_owner = keeper.agreement_manager.get_agreement_did_owner(agreement_id)
        access_id, lock_id = cond_ids[:2]

        amounts = list(
            map(int, service_agreement.get_param_value_by_name('_amounts')))
        receivers = to_checksum_addresses(
            service_agreement.get_param_value_by_name('_receivers'))
        token_address = service_agreement.get_param_value_by_name(
            '_tokenAddress')
        if token_address is None or len(token_address) == 0:
            token_address = keeper.token.address

        try:
            keeper.escrow_payment_condition.fulfill(
                add_0x_prefix(agreement_id), asset.asset_id, amounts,
                receivers, keeper.escrow_payment_condition.address,
                token_address, lock_id, access_id, provider_acc)
        except Exception:
            escrow_condition_status = keeper.condition_manager.get_condition_state(
                cond_ids[2])
            if escrow_condition_status != ConditionState.Fulfilled.value:
                logger.error('Error in escrowReward fulfill')
            else:
                logger.info('The escrowReward condition was already fulfilled')

    escrow_condition_status = keeper.condition_manager.get_condition_state(
        cond_ids[2])
    return escrow_condition_status == ConditionState.Fulfilled.value
Example #9
0
def get_registered_compute_ddo(account,
                               providers=None,
                               auth_service='PSK-RSA'):
    ddo = get_sample_ddo()
    metadata = ddo['service'][0]['attributes']
    metadata['main']['files'][0][
        'url'] = "https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos" \
                 "/CoverSongs/shs_dataset_test.txt"
    metadata['main']['files'][0]['checksum'] = str(uuid.uuid4())

    escrow_payment_condition = ddo['service'][1]['attributes'][
        'serviceAgreementTemplate']['conditions'][2]
    _amounts = get_param_value_by_name(escrow_payment_condition['parameters'],
                                       '_amounts')
    _receivers = to_checksum_addresses(
        get_param_value_by_name(escrow_payment_condition['parameters'],
                                '_receivers'))

    compute_service_attributes = {
        "main": {
            "name": "dataAssetComputeServiceAgreement",
            "creator": account.address,
            "dataPublished": metadata[MetadataMain.KEY]["dateCreated"],
            "price": metadata[MetadataMain.KEY]["price"],
            "timeout": 86400,
            "_amounts": _amounts,
            "_receivers": _receivers,
            "provider": {}
        }
    }

    compute_service_descriptor = ServiceDescriptor.compute_service_descriptor(
        compute_service_attributes, "http://localhost:8050")

    return register_ddo(metadata, account, providers, auth_service,
                        [compute_service_descriptor])
Example #10
0
from nevermined_gateway import constants
from nevermined_gateway import version
from nevermined_gateway.constants import BaseURLs, ConditionState
from nevermined_gateway.util import (build_download_response, check_auth_token,
                                     generate_token, get_buyer_secret_key,
                                     get_provider_account, is_token_valid,
                                     keeper_instance, verify_signature, web3)
from tests.utils import get_registered_ddo, get_proof_ddo, place_order, lock_payment, generate_new_id

PURCHASE_ENDPOINT = BaseURLs.BASE_GATEWAY_URL + '/services/access/initialize'
SERVICE_ENDPOINT = BaseURLs.BASE_GATEWAY_URL + '/services/consume'

amounts = [10, 2]
receivers = to_checksum_addresses([
    '0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e',
    '0x068ed00cf0441e4829d9784fcbe7b9e26d4bd8d0'
])


def dummy_callback(*_):
    pass


def grant_access(agreement_id, ddo, consumer_account, provider_account):
    keeper = keeper_instance()
    tx_hash = keeper.access_condition.fulfill(agreement_id, ddo.asset_id,
                                              consumer_account.address,
                                              provider_account)
    keeper.access_condition.get_tx_receipt(tx_hash)