Пример #1
0
    def __init__(self):
        self.NODE_ID = None
        self.NODE_NAME = None
        self.NODE_TYPE = None
        self.setup_node()
        # Create the blockchain instance for this node if one doesn't exist
        if not os.path.exists("blockchain.pickle"):
            self.blockchain = Blockchain.instance(node_id=self.NODE_ID, node_name=self.NODE_NAME,
                                                  node_type=self.NODE_TYPE)
            print("First time booting! Creating genesis block...")
            self.blockchain.create_genesis()
        else:
            print("Successfully identified blockchain on this device. Loading into memory...")
            loaded_blockchain = self.load_blockchain()
            loaded_pending_transactions = self.load_pending_transactions()
            self.blockchain = Blockchain.instance(loaded_blockchain, loaded_pending_transactions, self.NODE_ID,
                                                  self.NODE_NAME, self.NODE_TYPE)
        API.instance()
        Consensus.instance(self.NODE_NAME)

        self.node_comm = Communication.instance(self.NODE_ID, self.NODE_NAME, self.blockchain, self.NODE_TYPE)
        self.blockchain.set_communication(self.node_comm)
        print(self.NODE_ID, self.NODE_NAME)
        # Send a connection request to other distributor nodes in network
        if self.NODE_TYPE == 'DISTRIBUTOR':
            self.node_comm.notify_connection('connect')
Пример #2
0
    def __addshipment(self, params):
        if len(params) == 0 or params[0] in ["?", "HELP"]:
            self.__show_command_help(
                usage="addshipment id srclocation destlocation qty",
                description="Enters a shipment into the network."
            )
        elif len(params) == 3:
            shipment_id = params[0]
            src = params[1]
            dest = params[2]
            qty = params[3]

            confirmation = input(
                "Are you sure you want to add this shipment to the blockchain? This action is irreversible without the agreement of all network nodes (y/n): ").upper()

            if confirmation == "Y":
                print("\nAdding to blockchain...")
                blockchain = Blockchain.instance()

                self.node_comm = Communication.instance()

                transaction = blockchain.create_distributor_transaction(shipment_id, blockchain.get_node_id(), src, dest, qty,
                                                                        blockchain.get_node_type(),
                                                                        blockchain.get_node_name())
                self.node_comm.broadcast_transaction(transaction)
                print("Shipment is now pending.\n> ", end="")
Пример #3
0
    def request_shipment():
        response = jsonify(success=False, status_code=500)
        if request.method == "POST":
            dest = request.form["dest-location"]
            qty = request.form["qty"]
            distributor = request.form["distributor"]

            print("\nAdding to blockchain...")

            blockchain = Blockchain.instance()
            node_comm = Communication.instance()
            transaction = blockchain.create_client_transaction(
                blockchain.get_node_name(), dest, qty, distributor,
                blockchain.get_node_type())
            node_comm.broadcast_transaction(transaction)

            print("Request has been received and is now pending.\n> ", end="")
            response = jsonify(success=True, status_code=200)
        return response
Пример #4
0
    def add_shipment():
        response = jsonify(success=False, status_code=500)
        if request.method == "POST":
            shipment_id = request.form["shipment-id"]
            src = request.form["src-location"]
            dest = request.form["dest-location"]
            qty = request.form["qty"]

            print("\nAdding to blockchain...")

            blockchain = Blockchain.instance()
            node_comm = Communication.instance()
            transaction = blockchain.create_distributor_transaction(
                shipment_id, blockchain.get_node_id(), src, dest, qty,
                blockchain.get_node_type(), blockchain.get_node_name())
            node_comm.broadcast_transaction(transaction)
            print("Shipment is now pending.\n> ", end="")

            response = jsonify(success=True, status_code=200)
        return response
Пример #5
0
    def __requestshipment(self, params):
        if len(params) == 0 or params[0] in ["?", "HELP"]:
            self.__show_command_help(
                usage="requestshipment destlocation qty distributor",
                description="Requests a shipment of vaccines from a given distributor."
            )
        elif len(params) == 3:
            dest = params[0]
            qty = params[1]
            distributor = params[2]

            confirmation = input(
                "Are you sure you want to request this shipment? This action is irreversible without the agreement of all network nodes (y/n): ").upper()

            if confirmation == "Y":
                print("\nAdding to blockchain...")
                blockchain = Blockchain.instance()

                self.node_comm = Communication.instance()

                transaction = blockchain.create_client_transaction(blockchain.get_node_name(), dest, qty, distributor, blockchain.get_node_type())

                self.node_comm.broadcast_transaction(transaction)
                print("Request has been received and is now pending.\n> ", end="")