コード例 #1
0
 def To(self, request, context):
     # => Block
     # <= 如果高度增加 回傳 SYNCHRONIZATION ,否則 NOT_SYNCHRONIZATION
     global __BranchTarget,flag
     b = block.block.Block()
     b.pb2 = request
     print("=> [To] Block:%s" % b.pb2.blockhash)
     status = block.block.Chain.addBlock(b.pb2.blockhash,b)
     print("<= [To] Response:%sSYNCHRONIZATION" % ("" if "HEIGHT_ADD" == status else "NOT_") )
     if "HEIGHT_ADD" == status:
         flag = False
         __BranchTarget = ""
         return grpc_pb2.Message(value = "SYNCHRONIZATION")
     return grpc_pb2.Message(value = "NOT_SYNCHRONIZATION")
コード例 #2
0
ファイル: p2p.py プロジェクト: tmust/mini_python_blockchain
 def Hello(self, request, context):
     global PORT, selfipport
     selfIP = request.value[0:request.value.index('|')]
     Node.add((selfIP, PORT))
     selfipport = "%s:%s" % (selfIP, PORT)
     nodePort = request.value[request.value.index('|') +
                              1:len(request.value)]
     print("=> Node Port:%s" % nodePort)
     port = talkYouIP(nodePort)
     return grpc_pb2.Message(value=str(port))
コード例 #3
0
ファイル: block.py プロジェクト: tmust/mini_python_blockchain
    def BlockBroadcast(self, request, context):
        # => 區塊
        # <= Status
        block = Block()
        block.pb2 = request
        print("=> [Transaction]Block:%s" % block.pb2.blockhash)

        status = Chain.addBlock(block.pb2.blockhash, block)
        print("<= [Transaction]Status:%s" % status)
        return grpc_pb2.Message(value=status)
コード例 #4
0
ファイル: block.py プロジェクト: tmust/mini_python_blockchain
 def From(node, info):
     # <= 給予區塊資訊
     # => 返回高度
     block = Block()
     info = grpc_pb2.Message(value=str(info))
     print("<= [From]info:%s" % str(info))
     response = p2p.p2p.Node.send(node, SERVICE * SYNCHRONIZATION + FROM,
                                  info)
     print("=> [From]Block:%s" % str(response.blockhash))
     block.pb2 = response
     v = block.vertify()
     if v == SUCCESS_VERTIFY:
         Chain.addBlock(block.pb2.blockhash, block)
         return int(block.pb2.height)
     elif v == WARNING_PREVIOUS_HASH_NOT_EQUAL:
         return -1
     raise Exception("Error Block.py From()")
コード例 #5
0
ファイル: p2p.py プロジェクト: tmust/mini_python_blockchain
def grpcJoinNode(target):
    global PORT, GET_SELFNODE_FALG, selfipport
    target = str(target)
    compi = re.compile('^(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}):(\d{1,5})$')
    result = compi.match(target)

    # 判斷是否存在且曾加入過
    if result == None or (target in Node.getNodesList()):
        return False
    Node.add(target)

    # 判斷是否已取得自己IP
    if GET_SELFNODE_FALG:
        return True
    # Discovery.Hello()
    ip = result.group(1)
    print("<= grpc link to %s" % target)

    channel = grpc.insecure_channel(target)
    stub = grpc_pb2_grpc.DiscoveryStub(channel)
    HelloResponse = None
    try:
        HelloResponse = stub.Hello(grpc_pb2.Message(
            value="%s|%s" % (ip, PORT)))  #target ip & self port
    except:
        return False
    helloPort = HelloResponse.value

    time.sleep(1)

    # 因不知道自己IP 故需要請對方告知自己
    # socket get my ip

    print("=> hello port:%s" % helloPort)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("<= connect to socket will get myIP")
    sock.connect((ip, int(helloPort)))
    myIP = sock.recv(1024)
    print("=> get myIP:%s" % myIP)
    Node.add((myIP, PORT))
    selfipport = "%s:%s" % (myIP, PORT)
    GET_SELFNODE_FALG = True

    return True