Example #1
0
def make_create_item_transaction(transaction_signer, batch_signer, item_id,
                                 latitude, longitude, timestamp):
    fprint('=== makde create item transaction ===')
    agent_address = addresser.get_agent_address(
        transaction_signer.get_public_key().as_hex())
    fprint(f'=== itemid: {item_id}')
    item_address = addresser.get_item_address(item_id)
    inputs = [agent_address, item_address]
    outputs = [item_address]

    action = payload_pb2.CreateItemAction(item_id=item_id,
                                          latitude=latitude,
                                          longitude=longitude)
    payload = payload_pb2.SupplyPayload(
        action=payload_pb2.SupplyPayload.CREATE_ITEM,
        create_item=action,
        timestamp=timestamp)

    payload_bytes = payload.SerializeToString()

    return _make_batch(payload_bytes=payload_bytes,
                       inputs=inputs,
                       outputs=outputs,
                       transaction_signer=transaction_signer,
                       batch_signer=batch_signer)
Example #2
0
    def tranfer_item(self, received_agent, item_id, timestamp):
        fprint(f'{received_agent}, {item_id}, {timestamp}')

        fprint('start share item in state 1')
        item_address = addresser.get_item_address(item_id)
        received_agent_address = addresser.get_agent_address(received_agent)
        shared_owner = item_pb2.Item.Owner(
            public_key=received_agent_address,
            timestamp=timestamp
        )
        container = item_pb2.ItemContainer()
        state_entries = self._context.get_state(addresses=[item_address], timeout=self._timeout)
        fprint('start update document in state 2')
        if state_entries:
            container.ParseFromString(state_entries[0].data)
    
            for item in container.entries:
                if item.item_id == item_id:
                    item.owners.extend([shared_owner])
        fprint('start update document in state 3')
        data = container.SerializeToString()
        updated_state = {}
        updated_state[item_address] = data

        self._context.set_state(updated_state, timeout=self._timeout)
        fprint('start update document in state 4')
        pass
Example #3
0
def make_tranfer_item_transaction(transaction_signer, batch_signer, item_id,
                                  received_agent, timestamp):
    agent_address = addresser.get_agent_address(
        transaction_signer.get_public_key().as_hex())
    received_agent_address = addresser.get_agent_address(received_agent)
    item_address = addresser.get_item_address(item_id)

    inputs = [agent_address, item_address, received_agent_address]
    outputs = [item_address]
    action = payload_pb2.TranferItemAction(
        item_id=item_id, received_agent=received_agent_address)
    payload = payload_pb2.SupplyPayload(
        action=payload_pb2.SupplyPayload.TRANFER_ITEM,
        tranfer_item=action,
        timestamp=timestamp)
    payload_bytes = payload.SerializeToString()
    return _make_batch(payload_bytes=payload_bytes,
                       inputs=inputs,
                       outputs=outputs,
                       transaction_signer=transaction_signer,
                       batch_signer=batch_signer)
Example #4
0
    def get_agent(self, public_key):
        address = addresser.get_agent_address(public_key)

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

        if state_entries:
            container = agent_pb2.AgentContainer()
            container.ParseFromString(state_entries[0].data)

            for user in container.entries:
                if user.public_key == public_key:
                    return user
Example #5
0
    def set_agent(self, public_key, name, role, timestamp):
        user_address = addresser.get_agent_address(public_key)

        agent = agent_pb2.Agent(
            public_key=public_key,
            name=name,
            role=role
        )
        container = agent_pb2.AgentContainer()
        state_entries = self._context.get_state(
            addresses=[user_address], timeout=self._timeout)
        if state_entries:
            container.ParseFromString(state_entries[0].data)

        container.entries.extend([agent])
        data = container.SerializeToString()

        updated_state = {}
        updated_state[user_address] = data
        self._context.set_state(updated_state, timeout=self._timeout)
Example #6
0
def make_update_item_transaction(transaction_signer, batch_signer, item_id,
                                 latitude, longitude, timestamp):
    agent_address = addresser.get_agent_address(
        transaction_signer.get_public_key().as_hex())
    item_address = addresser.get_item_address(item_id)

    inputs = [agent_address, item_address]
    outputs = [item_address]

    action = payload_pb2.UpdateItemAction(item_id=item_id,
                                          latitude=latitude,
                                          longitude=longitude)
    payload = payload_pb2.SupplyPayload(
        action=payload_pb2.SupplyPayload.UPDATE_ITEM,
        update_item=action,
        timestamp=timestamp)

    payload_bytes = payload.SerializeToString()
    return _make_batch(payload_bytes=payload_bytes,
                       inputs=inputs,
                       outputs=outputs,
                       transaction_signer=transaction_signer,
                       batch_signer=batch_signer)
Example #7
0
def make_create_agent_transaction(transaction_signer, batch_signer, name, role,
                                  timestamp):
    print('=== make create agent transaction ===')
    agent_address = addresser.get_agent_address(
        transaction_signer.get_public_key().as_hex())

    inputs = [agent_address]

    outputs = [agent_address]

    action = payload_pb2.CreateAgentAction(name=name, role=role)

    payload = payload_pb2.SupplyPayload(
        action=payload_pb2.SupplyPayload.CREATE_AGENT,
        create_agent=action,
        timestamp=timestamp)
    payload_bytes = payload.SerializeToString()

    return _make_batch(payload_bytes=payload_bytes,
                       inputs=inputs,
                       outputs=outputs,
                       transaction_signer=transaction_signer,
                       batch_signer=batch_signer)