def create_holding(txn_key,
                   batch_key,
                   identifier,
                   label,
                   description,
                   asset,
                   quantity):
    """Create a CreateHolding txn and wrap it in a batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The txn signer key pair.
        batch_key (sawtooth_signing.Signer): The batch signer key pair.
        identifier (str): The identifier of the Holding.
        label (str): The label of the Holding.
        description (str): The description of the Holding.
        quantity (int): The amount of the Asset.

    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [
        addresser.make_account_address(
            account_id=txn_key.get_public_key().as_hex()),
        addresser.make_asset_address(asset_id=asset),
        addresser.make_holding_address(holding_id=identifier)
    ]

    outputs = [addresser.make_holding_address(holding_id=identifier),
               addresser.make_account_address(
                   account_id=txn_key.get_public_key().as_hex())]

    holding_txn = payload_pb2.CreateHolding(
        id=identifier,
        label=label,
        description=description,
        asset=asset,
        quantity=quantity)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.CREATE_HOLDING,
        create_holding=holding_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)
def create_holding(txn_key,
                   batch_key,
                   identifier,
                   label,
                   description,
                   asset,
                   quantity):
    """Create a CreateHolding txn and wrap it in a batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The txn signer key pair.
        batch_key (sawtooth_signing.Signer): The batch signer key pair.
        identifier (str): The identifier of the Holding.
        label (str): The label of the Holding.
        description (str): The description of the Holding.
        quantity (int): The amount of the Asset.

    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [
        addresser.make_account_address(
            account_id=txn_key.get_public_key().as_hex()),
        addresser.make_asset_address(asset_id=asset),
        addresser.make_holding_address(holding_id=identifier)
    ]

    outputs = [addresser.make_holding_address(holding_id=identifier),
               addresser.make_account_address(
                   account_id=txn_key.get_public_key().as_hex())]

    holding_txn = payload_pb2.CreateHolding(
        id=identifier,
        label=label,
        description=description,
        asset=asset,
        quantity=quantity)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.CREATE_HOLDING,
        create_holding=holding_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)
    def set_holding(self,
                    identifier,
                    label,
                    description,
                    account,
                    asset,
                    quantity):
        address = addresser.make_holding_address(holding_id=identifier)
        container = _get_holding_container(self._state_entries, address)

        try:
            holding = _get_holding_from_container(container, identifier)
        except KeyError:
            holding = container.entries.add()

        holding.id = identifier
        holding.label = label
        holding.description = description
        holding.account = account
        holding.asset = asset
        holding.quantity = quantity

        state_entries_send = {}
        state_entries_send[address] = container.SerializeToString()
        return self._context.set_state(
            state_entries_send,
            self._timeout)
    def test_holding_address(self):
        holding_address = addresser.make_holding_address(uuid4().hex)

        self.assertEqual(len(holding_address), 70, "The address is valid.")

        self.assertEqual(addresser.address_is(holding_address),
                         addresser.AddressSpace.HOLDING,
                         "The address is correctly identified as an Holding.")
 def _return_offer_rules(
     self,
     holding_id,
 ):
     holding_addr = addresser.make_holding_address(holding_id)
     holding = self._get_holding(holding_addr, holding_id)
     asset = self.get_asset(holding.asset)
     return [r for r in asset.rules if r.type in OFFER_RULES]
    def get_holding(self, identifier):
        address = addresser.make_holding_address(holding_id=identifier)

        self._state_entries.extend(self._context.get_state(
            addresses=[address],
            timeout=self._timeout))

        return self._get_holding(address=address, identifier=identifier)
    def get_holding(self, identifier):
        address = addresser.make_holding_address(holding_id=identifier)

        self._state_entries.extend(
            self._context.get_state(addresses=[address],
                                    timeout=self._timeout))

        return self._get_holding(address=address, identifier=identifier)
    def test_holding_address(self):
        holding_address = addresser.make_holding_address(uuid4().hex)

        self.assertEqual(len(holding_address), 70, "The address is valid.")

        self.assertEqual(addresser.address_is(holding_address),
                         addresser.AddressSpace.HOLDING,
                         "The address is correctly identified as an Holding.")
    def change_holding_quantity(self, identifier, new_quantity):
        address = addresser.make_holding_address(holding_id=identifier)
        container = _get_holding_container(self._state_entries, address)

        try:
            holding = _get_holding_from_container(container, identifier)
        except KeyError:
            holding = container.entries.add()

        holding.quantity = new_quantity

        state_entries_send = {}
        state_entries_send[address] = container.SerializeToString()

        return self._context.set_state(state_entries_send, self._timeout)
Ejemplo n.º 10
0
    def get_holding(self, identifier):
        address = addresser.make_holding_address(holding_id=identifier)

        self._state_entries.extend(
            self._context.get_state(addresses=[address],
                                    timeout=self._timeout))

        container = _get_holding_container(self._state_entries, address)

        holding = None
        try:
            holding = _get_holding_from_container(container, identifier)
        except KeyError:
            # Fine with returning None
            pass
        return holding
    def change_holding_quantity(self,
                                identifier,
                                new_quantity):
        address = addresser.make_holding_address(holding_id=identifier)
        container = _get_holding_container(self._state_entries, address)

        try:
            holding = _get_holding_from_container(container, identifier)
        except KeyError:
            holding = container.entries.add()

        holding.quantity = new_quantity

        state_entries_send = {}
        state_entries_send[address] = container.SerializeToString()

        return self._context.set_state(
            state_entries_send,
            self._timeout)
    def set_holding(self, identifier, label, description, account, asset,
                    quantity):
        address = addresser.make_holding_address(holding_id=identifier)
        container = _get_holding_container(self._state_entries, address)

        try:
            holding = _get_holding_from_container(container, identifier)
        except KeyError:
            holding = container.entries.add()

        holding.id = identifier
        holding.label = label
        holding.description = description
        holding.account = account
        holding.asset = asset
        holding.quantity = quantity

        state_entries_send = {}
        state_entries_send[address] = container.SerializeToString()
        return self._context.set_state(state_entries_send, self._timeout)
def accept_offer(txn_key,
                 batch_key,
                 identifier,
                 offerer,
                 receiver,
                 count):
    """Create an AcceptOffer txn and wrap it in a Batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The Txn signer key pair.
        batch_key (sawtooth_signing.Signer): The Batch signer key pair.
        identifier (str): The identifier of the Offer.
        offerer (OfferParticipant): The participant who made the offer.
        receiver (OfferParticipant): The participant who is accepting
            the offer.
        count (int): The number of units of exchange.

    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [addresser.make_holding_address(receiver.target),
              addresser.make_holding_address(offerer.source),
              addresser.make_asset_address(receiver.target_asset),
              addresser.make_asset_address(offerer.source_asset),
              addresser.make_offer_history_address(offer_id=identifier),
              addresser.make_offer_account_address(
                  offer_id=identifier,
                  account=txn_key.get_public_key().as_hex()),
              addresser.make_offer_address(identifier)]

    outputs = [addresser.make_holding_address(receiver.target),
               addresser.make_holding_address(offerer.source),
               addresser.make_offer_history_address(offer_id=identifier),
               addresser.make_offer_account_address(
                   offer_id=identifier,
                   account=txn_key.get_public_key().as_hex())]

    if receiver.source is not None:
        inputs.append(addresser.make_holding_address(receiver.source))
        inputs.append(addresser.make_asset_address(receiver.source_asset))
        outputs.append(addresser.make_holding_address(receiver.source))

    if offerer.target is not None:
        inputs.append(addresser.make_holding_address(offerer.target))
        inputs.append(addresser.make_asset_address(offerer.target_asset))
        outputs.append(addresser.make_holding_address(offerer.target))

    accept_txn = payload_pb2.AcceptOffer(
        id=identifier,
        source=receiver.source,
        target=receiver.target,
        count=count)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.ACCEPT_OFFER,
        accept_offer=accept_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)
def create_offer(txn_key,
                 batch_key,
                 identifier,
                 label,
                 description,
                 source,
                 target,
                 rules):
    """Create a CreateOffer txn and wrap it in a batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The Txn signer key pair.
        batch_key (sawtooth_signing.Signer): The Batch signer key pair.
        identifier (str): The identifier of the Offer.
        label (str): The offer's label.
        description (str): The description of the offer.
        source (MarketplaceHolding): The holding id, quantity, asset to be
            drawn from.
        target (MarketplaceHolding): The holding id, quantity, asset to be
            paid into.
        rules (list): List of protobuf.rule_pb2.Rule


    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [
        addresser.make_account_address(
            account_id=txn_key.get_public_key().as_hex()),
        addresser.make_holding_address(
            holding_id=source.holding_id),
        addresser.make_offer_address(offer_id=identifier),
        addresser.make_asset_address(asset_id=source.asset)
    ]
    if target.holding_id:
        inputs.append(addresser.make_holding_address(
            holding_id=target.holding_id))
        inputs.append(addresser.make_asset_address(target.asset))

    outputs = [addresser.make_offer_address(offer_id=identifier)]

    offer_txn = payload_pb2.CreateOffer(
        id=identifier,
        label=label,
        description=description,
        source=source.holding_id,
        source_quantity=source.quantity,
        target=target.holding_id,
        target_quantity=target.quantity,
        rules=rules)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.CREATE_OFFER,
        create_offer=offer_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)
 def _return_offer_rules(self, holding_id,):
     holding_addr = addresser.make_holding_address(holding_id)
     holding = self._get_holding(holding_addr, holding_id)
     asset = self.get_asset(holding.asset)
     return [r for r in asset.rules if r.type in OFFER_RULES]
def accept_offer(txn_key,
                 batch_key,
                 identifier,
                 offerer,
                 receiver,
                 count):
    """Create an AcceptOffer txn and wrap it in a Batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The Txn signer key pair.
        batch_key (sawtooth_signing.Signer): The Batch signer key pair.
        identifier (str): The identifier of the Offer.
        offerer (OfferParticipant): The participant who made the offer.
        receiver (OfferParticipant): The participant who is accepting
            the offer.
        count (int): The number of units of exchange.

    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [addresser.make_holding_address(receiver.target),
              addresser.make_holding_address(offerer.source),
              addresser.make_asset_address(receiver.target_asset),
              addresser.make_asset_address(offerer.source_asset),
              addresser.make_offer_history_address(offer_id=identifier),
              addresser.make_offer_account_address(
                  offer_id=identifier,
                  account=txn_key.get_public_key().as_hex()),
              addresser.make_offer_address(identifier)]

    outputs = [addresser.make_holding_address(receiver.target),
               addresser.make_holding_address(offerer.source),
               addresser.make_offer_history_address(offer_id=identifier),
               addresser.make_offer_account_address(
                   offer_id=identifier,
                   account=txn_key.get_public_key().as_hex())]

    if receiver.source is not None:
        inputs.append(addresser.make_holding_address(receiver.source))
        inputs.append(addresser.make_asset_address(receiver.source_asset))
        outputs.append(addresser.make_holding_address(receiver.source))

    if offerer.target is not None:
        inputs.append(addresser.make_holding_address(offerer.target))
        inputs.append(addresser.make_asset_address(offerer.target_asset))
        outputs.append(addresser.make_holding_address(offerer.target))

    accept_txn = payload_pb2.AcceptOffer(
        id=identifier,
        source=receiver.source,
        target=receiver.target,
        count=count)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.ACCEPT_OFFER,
        accept_offer=accept_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)
def create_offer(txn_key,
                 batch_key,
                 identifier,
                 label,
                 description,
                 source,
                 target,
                 rules):
    """Create a CreateOffer txn and wrap it in a batch and list.

    Args:
        txn_key (sawtooth_signing.Signer): The Txn signer key pair.
        batch_key (sawtooth_signing.Signer): The Batch signer key pair.
        identifier (str): The identifier of the Offer.
        label (str): The offer's label.
        description (str): The description of the offer.
        source (MarketplaceHolding): The holding id, quantity, asset to be
            drawn from.
        target (MarketplaceHolding): The holding id, quantity, asset to be
            paid into.
        rules (list): List of protobuf.rule_pb2.Rule


    Returns:
        tuple: List of Batch, signature tuple
    """

    inputs = [
        addresser.make_account_address(
            account_id=txn_key.get_public_key().as_hex()),
        addresser.make_holding_address(
            holding_id=source.holding_id),
        addresser.make_offer_address(offer_id=identifier),
        addresser.make_asset_address(asset_id=source.asset)
    ]
    if target.holding_id:
        inputs.append(addresser.make_holding_address(
            holding_id=target.holding_id))
        inputs.append(addresser.make_asset_address(target.asset))

    outputs = [addresser.make_offer_address(offer_id=identifier)]

    offer_txn = payload_pb2.CreateOffer(
        id=identifier,
        label=label,
        description=description,
        source=source.holding_id,
        source_quantity=source.quantity,
        target=target.holding_id,
        target_quantity=target.quantity,
        rules=rules)

    payload = payload_pb2.TransactionPayload(
        payload_type=payload_pb2.TransactionPayload.CREATE_OFFER,
        create_offer=offer_txn)

    return make_header_and_batch(
        payload=payload,
        inputs=inputs,
        outputs=outputs,
        txn_key=txn_key,
        batch_key=batch_key)