コード例 #1
0
    def node_message(self, node, data):
        from node.unl import get_unl_nodes, get_as_node_type

        if str(data) == "sendmefullledger":
            self.send_full_chain(node)
        print("Data Type: " + str(type(data)) + "\n")

        if str(data) == "sendmefullnodelist":
            self.send_full_node_list(node)
        print("Data Type: " + str(type(data)) + "\n")

        try:
            from node.unl import node_is_unl
            if data["fullledger"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullledger" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                print("getting chain")
                self.get_full_chain(data["byte"])
        except:
            pass

        try:
            from node.unl import node_is_unl
            if data["fullnodelist"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullnodelist" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                print("getting node list")
                self.get_full_node_list(data["byte"])
        except:
            pass

        try:
            if data["transactionrequest"] == 1:
                self.get_transaction(data, node)
        except Exception as e:
            print(e)
            pass
        try:
            if data["transactionresponse"] == 1:
                self.get_transaction_response(data, node)
        except Exception as e:
            print(e)
            pass

        print("node_message from " + node.id + ": " + str(data))
コード例 #2
0
    def createTrans(self, sequance_number, signature, fromUser, toUser, transaction_fee, data, amount, transaction_time, transaction_sender=None):

      # Printing the info of tx
      dprint("\nCreating the transaction")
      dprint("***")
      dprint(sequance_number)
      dprint(signature)
      dprint(fromUser)
      dprint(toUser)
      dprint(data)
      dprint(amount)
      dprint("***\n")
      # End

      # Some data
      signature_class = Signature.fromBase64(signature)
      temp_signature = signature_class.toBase64()

      already_got = self.tx_already_got(temp_signature)
      # End

      # Validation
      dprint("\nValidation")
      if Ecdsa.verify((str(sequance_number)+str(fromUser)+str(toUser)+str(data)+str(amount)+str(transaction_fee)+str(transaction_time)), signature_class, PublicKey.fromPem(fromUser)) and not amount < self.minumum_transfer_amount and not transaction_fee < self.transaction_fee and not already_got and not (int(time.time()) - transaction_time) > 60:
        dprint("Signature is valid")

        dprint("Getsequancenumber: "+str(GetSequanceNumber(fromUser, self)+1))
        if sequance_number == (GetSequanceNumber(fromUser, self)+1):
          dprint("Sequance number is valid")

          balance = GetBalance(fromUser, self)

          if balance >= (float(amount)+float(transaction_fee)) and (balance - (float(amount)+float(transaction_fee))) > 2:
            dprint("Amount is valid")

            # Local saving
            the_tx = Transaction(
                sequance_number= sequance_number,
                signature=temp_signature,
                fromUser= fromUser,
                toUser=toUser,
                data = data,
                amount = amount,
                transaction_fee= transaction_fee,
                time_of_transaction = transaction_time
            )
            self.pendingTransaction.append(the_tx)
            self.change_transaction_fee()
            self.save_block()
            # End

            self.propagating_the_tx(the_tx)

            return True

      dprint(" Validation end")
コード例 #3
0
    def get_candidate_block(self, data, node):

        dprint("Getting the candidate block")
        from node.unl import node_is_unl
        if node_is_unl(node.id) and GetBlock(
        ).sequance_number == data["sequance_number"]:
            dprint("is unl")

            signature_list = []
            for element in data["transaction"]:
                signature_list.append(element["signature"])

            dprint("signature_list: " + str(signature_list))

            merkle_root_of_signature_list = MerkleTree(
                signature_list).getRootHash(
                ) if len(signature_list) != 0 else "0"

            dprint("signatureverify: " + str(
                Ecdsa.verify("myblock" + merkle_root_of_signature_list,
                             Signature.fromBase64(data["signature"]),
                             PublicKey.fromPem(node.id))))
            dprint("publickey from pem: " + str(node.id))

            dprint("merkleroot: " + merkle_root_of_signature_list)

            if Ecdsa.verify(
                    "myblock" + merkle_root_of_signature_list +
                    str(data["sequance_number"]),
                    Signature.fromBase64(data["signature"]),
                    PublicKey.fromPem(node.id)):
                dprint("ecdsa true")

                temp_tx = []

                for element in data["transaction"]:
                    temp_tx.append(Transaction.load_json(element))

                data["transaction"] = temp_tx

                node.candidate_block = data
コード例 #4
0
    def get_candidate_block_hash(self, data, node):

        dprint("Getting the candidate block hash")

        from node.unl import node_is_unl
        if node_is_unl(node.id) and GetBlock(
        ).sequance_number == data["sequance_number"]:
            dprint("is unl")

            if Ecdsa.verify(
                    "myblockhash" + data["hash"] +
                    str(data["sequance_number"]),
                    Signature.fromBase64(data["signature"]),
                    PublicKey.fromPem(node.id)):
                dprint("ecdsa true")
                data["sender"] = node.id

                node.candidate_block_hash = data
コード例 #5
0
    def get_transaction_response(self, data, node):
        #burada bu mesaj gönderen adamın bizim istediğimiz node ve pub key olup olmadığına bakacağız. ayrıca eğer unl listemizdeki bir adamdan evet oyu aldıysak o oyu hayıra çeviremeyiz
        from ledger.ledger_main import get_ledger
        dprint("Getting the transactions response")
        system = get_ledger()
        from node.unl import node_is_unl
        if node_is_unl(node.id):
            for tx in system.validating_list:

                if node.id == data["fromUser"] and Ecdsa.verify(
                        data["response"] + str(data["transaction_signature"]),
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(data["fromUser"])):

                    if data["transaction_signature"] == tx.signature:
                        if data["response"] == "TRUE":
                            tx.valid.append({"data": data, "node": node.id})
                            system.Verificate_Pending_Trans()
                        elif data["response"] == "FALSE":
                            tx.invalid.append({"data": data, "node": node.id})
                            system.Verificate_Pending_Trans()
コード例 #6
0
    def createTrans(self,
                    sequance_number,
                    signature,
                    fromUser,
                    toUser,
                    transaction_fee,
                    data=None,
                    amount=None,
                    transaction_sender=None,
                    response=False):

        dprint("\nCreating transaction.")
        signature_class = Signature.fromBase64(signature)
        dprint("***")
        dprint(sequance_number)
        dprint(signature)
        dprint(fromUser)
        dprint(toUser)
        dprint(data)
        dprint(amount)
        dprint("***\n")
        dprint(
            Ecdsa.verify((str(sequance_number) + str(fromUser) + str(toUser) +
                          str(data) + str(amount) + str(transaction_fee)),
                         signature_class, PublicKey.fromPem(fromUser)))

        temp_signature = signature_class.toBase64()
        already_in_pending = False
        for already_tx in (self.pendingTransaction + self.validating_list):
            if already_tx.signature == temp_signature:
                already_in_pending = True
        if Ecdsa.verify((str(sequance_number) + str(fromUser) + str(toUser) +
                         str(data) + str(amount) + str(transaction_fee)),
                        signature_class, PublicKey.fromPem(fromUser)):
            if sequance_number == (self.getSequanceNumber(fromUser) +
                                   1) or already_in_pending:
                dprint("Sign verify is true.")
                if (self.getBalance(fromUser) >=
                    (float(amount) + float(transaction_fee))
                        and float(amount) != float(0)) or response == False:
                    temp_transaction = Transaction(
                        sequance_number=sequance_number,
                        signature=signature_class.toBase64(),
                        fromUser=fromUser,
                        toUser=toUser,
                        data=data,
                        amount=amount,
                        transaction_fee=transaction_fee)
                    dprint("Balance controll is true.")
                    if already_in_pending == False:
                        self.pendingTransaction.append(temp_transaction)
                        self.save_ledger()
                    from node.myownp2pn import MyOwnPeer2PeerNode
                    dprint("imported myownpeer2peernode")
                    if transaction_sender is None:
                        if already_in_pending == False:
                            MyOwnPeer2PeerNode.main_node.send_to_nodes({
                                "transactionrequest":
                                1,
                                "sequance_number":
                                sequance_number,
                                "signature":
                                signature,
                                "fromUser":
                                fromUser,
                                "to_user":
                                toUser,
                                "data":
                                data,
                                "amount":
                                amount,
                                "transaction_fee":
                                transaction_fee,
                                "response":
                                False
                            })
                    else:
                        dprint(str(response))
                        if response:
                            self.send_my_response_on_transaction(
                                temp_transaction=temp_transaction,
                                response="TRUE",
                                transaction_sender=transaction_sender)
                        if already_in_pending == False:
                            MyOwnPeer2PeerNode.main_node.send_to_nodes(
                                {
                                    "transactionrequest": 1,
                                    "sequance_number": sequance_number,
                                    "signature": signature,
                                    "fromUser": fromUser,
                                    "to_user": toUser,
                                    "data": data,
                                    "amount": amount,
                                    "transaction_fee": transaction_fee,
                                    "response": False
                                },
                                exclude=[transaction_sender])
                    self.Verificate_Pending_Trans()
                    return True
                else:
                    if transaction_sender != None and response == True:
                        self.send_my_response_on_transaction(
                            temp_transaction=temp_transaction,
                            response="FALSE",
                            transaction_sender=transaction_sender)
        else:
            if transaction_sender != None and response == True:
                self.send_my_response_on_transaction(
                    temp_transaction=temp_transaction,
                    response="FALSE",
                    transaction_sender=transaction_sender)
コード例 #7
0
    def message_from_node(self, node, data):
        from node.unl import get_unl_nodes, get_as_node_type

        if str(data) == "sendmefullblock":
            self.send_full_chain(node)
        print("Data Type: " + str(type(data)) + "\n")

        if str(data) == "sendmefullnodelist":
            self.send_full_node_list(node)
        print("Data Type: " + str(type(data)) + "\n")

        try:
            from node.unl import node_is_unl
            if data["fullblock"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullblock" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                print("getting chain")
                self.get_full_chain(data, node)
        except Exception as e:
            print(e)

        try:
            from node.unl import node_is_unl
            if data["fullaccounts"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullaccounts" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                print("getting chain")
                self.get_full_accounts(data, node)
        except Exception as e:
            print(e)

        try:
            from node.unl import node_is_unl
            if data["fullblockshash"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullblockshash" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                self.get_full_blockshash(data, node)
        except Exception as e:
            print(e)

        try:
            from node.unl import node_is_unl
            if data["fullnodelist"] == 1 and node_is_unl(
                    node.id) and Ecdsa.verify(
                        "fullnodelist" + data["byte"],
                        Signature.fromBase64(data["signature"]),
                        PublicKey.fromPem(node.id)):
                print("getting node list")
                self.get_full_node_list(data["byte"])
        except Exception as e:
            print(e)

        try:
            if data["transactionrequest"] == 1:
                self.get_transaction(data, node)
        except Exception as e:
            print(e)

        try:
            if data["action"] == "myblock":
                self.get_candidate_block(data, node)
        except Exception as e:
            print(e)

        try:
            if data["action"] == "myblockhash":
                self.get_candidate_block_hash(data, node)
        except Exception as e:
            print(e)

        print("message_from_node from " + node.id + ": " + str(data))