コード例 #1
0
def generate_block(difficulty, merkle_root, transactions):

    try:
        'set block header info'

        monitoring.log("log.=================================")
        monitoring.log("log.Generate Block.")

        start_time = time.time()


        prev_block_height, prev_hash = file_controller.get_last_block() # TODO: type error 발생 must be str , not int

        # if type(prev_block_height) is not int:
        #     prev_block_height = int(prev_block_height)
        # if type(prev_hash) is not str:
        #     prev_hash = str(prev_hash)

        block_info = merkle_root + prev_hash
        vote_result = difficulty

        monitoring.log("log.Mining Block.")
        block_hash, nonce, tryanderror = proof_of_work.proof_of_work(
            block_info, difficulty)

        timestamp = int(round(time.time()*1000.0))     # UTC timestamp rule

        monitoring.log("log.Create Block Header.")
        block_header = block.BlockHeader(
            prev_hash, nonce, merkle_root, vote_result, str(timestamp))
        block_header.block_id = "test_block_id"
        block_header.block_number = int(prev_block_height) + 1
        block_header.block_hash = block_hash
        block_header.block_info = block_info
        block_header.miner = nodeproperty.Total_peer_num
        block_header.num_tx = len(transactions)  

        monitoring.log("log.Create Block.")
        new_block = block.Block(block_header, transactions)
        json_new_block = json.dumps(
            new_block, indent=4, default=lambda o: o.__dict__, sort_keys=True)
        monitoring.log("log.Generate block complete")
        monitoring.log("log. ")

        # end_time = time.time()
        # elapsed_time = end_time - start_time

        # monitoring.log("log.Block Generate Time Time: "+str(elapsed_time)+" seconds")
        # tps = voting.TransactionCountForConsensus / elapsed_time
        # print("log.Transaction per second : "+ str(tps))
        file_controller.remove_all_transactions()
        file_controller.remove_all_voting()

        sender.send_to_all_peers(json_new_block,nodeproperty.My_receiver_port)
        # sender.send_to_all(json_new_block)
        monitoring.log("log.Send block complete")


    except TypeError as te:
        print("@generate block", te)
コード例 #2
0
def initialize():
    logging.info('Start the blockchain initialization process...')
    file_controller.remove_all_transactions()
    file_controller.remove_all_blocks()
    file_controller.remove_all_voting()
    logging.info('Complete the blockchain initialization process...')
    set_peer.init_myIP()
def initialize():
    monitoring.log('log.Start the blockchain initialization process...')
    file_controller.remove_all_transactions()
    file_controller.remove_all_blocks()
    file_controller.remove_all_voting()
    monitoring.log('log.Complete the blockchain initialization process...')
    set_peer.init_myIP()
コード例 #4
0
def generate_block(difficulty, merkle_root, transactions):

    try:
        'set block header info'


        print("=================================")
        print("Generate Block")

        start_time = time.time()


        prev_block_height, prev_hash = file_controller.get_last_block()
        block_info = merkle_root + prev_hash
        vote_result = difficulty

        'mining block'
        block_hash, nonce, tryanderror = proof_of_work.proof_of_work(
            block_info, difficulty)
        timestamp = time.strftime('%Y%m%d%H%M%S', time.localtime())


        'create block header'
        block_header = block.BlockHeader(
            prev_hash, nonce, merkle_root, vote_result, timestamp)
        block_header.block_id = "test_block_id"
        block_header.block_number = int(prev_block_height) + 1
        block_header.block_hash = block_hash
        block_header.block_info = block_info
        block_header.miner = nodeproperty.Total_peer_num
        block_header.num_tx = len(transactions)


        'create block'
        new_block = block.Block(block_header, transactions)
        json_new_block = json.dumps(
            new_block, indent=4, default=lambda o: o.__dict__, sort_keys=True)
        print("Generate block complete")
        print(" ")

        end_time = time.time()
        elapsed_time = end_time - start_time

        print("Block Generate Time Time: %.8f seconds" % elapsed_time)
        print("   ")
        print("Transaction per second : ", 30 / elapsed_time)
        print("")
        file_controller.remove_all_transactions()
        file_controller.remove_all_voting()

        sender.send_to_all(json_new_block)
        print("send block complete")


    except TypeError as te:
        print("@generate block", te)
コード例 #5
0
def receive_event(p_thrd_name, p_inq, p_socketq):
    while True:
        logging.debug("Waiting for B type msg")
        recv_data = p_inq.get()
        request_sock = p_socketq.get()

        file_controller.create_new_block(
            str(receiver.Data_jobj['block_header']['block_number']), recv_data)

        print("End create _new block")
        file_controller.remove_all_transactions()
        file_controller.remove_all_voting()

        request_sock.close()
コード例 #6
0
def receive_event(p_thrd_name, p_inq, p_socketq):
    while True:
        monitoring.log("log.Waiting for B type msg")
        recv_data = p_inq.get()
        Data_jobj = json.loads(recv_data)
        request_sock = p_socketq.get()
        monitoring.log("log.B type msg rcvd: " + recv_data)

        file_controller.create_new_block(
            str(Data_jobj['block_header']['block_number']), recv_data)

        monitoring.log("log.End create _new block")
        file_controller.remove_all_transactions()
        file_controller.remove_all_voting()

        request_sock.close()
コード例 #7
0
def main():
    'Remove all transaction in mempool'
    file_controller.remove_all_transactions()
    # file_controller.remove_all_Block()
    file_controller.remove_all_voting()

    print("Web Server Start")

    'Peer setting'
    nodeproperty.My_IP_address = file_controller.get_my_ip()
    set_peer.set_peer()
    print("my peer : " + nodeproperty.My_peer_num)

    # node_mapping_table.set_node()와 set_peer()는 중복 기능이나, 일단 디버깅용으로 중복으로 유지함
    node_mapping_table.set_node()

    'Send to all node 10 transaction for one iteration'

    while True:
        transaction_count = 0
        # socket open

        while transaction_count < 30:
            # recv_addr = "1AVsffe"
            extra = "Coldchain service rule event"
            tx = transaction.Transaction(extra, transaction_count + 1)
            temp = json.dumps(tx,
                              indent=4,
                              default=lambda o: o.__dict__,
                              sort_keys=True)

            # send_to_all은 mapping table에 있는 정보로 broadcasting
            # send_to_all_node는 file_controller로 부터 IP List 가지고 와서 broadcasting
            # 테스트 후에 안전한 방식으로 선택
            sender.send_to_all(temp)
            #sender.send_to_all_node(temps, nodeproperty.my_ip_address, nodeproperty.port)

            transaction_count += 1

        'For block mining, time sleep'
        time.sleep(120)
コード例 #8
0
def receive_event(p_thrd_name, p_inq):
    while True:
        monitoring.log("log.Waiting for B type msg")
        (recv_data, request_sock) = p_inq.get()
        Data_jobj = json.loads(recv_data)
        monitoring.log("log.B type msg rcvd: " + recv_data)

        file_controller.create_new_block(
            str(Data_jobj['block_header']['block_number']), recv_data)

        block_verify.verify_tx_list(Data_jobj['tx_list'])

        monitoring.log("log.End create _new block")
        monitoring.log("block." +
                       str(Data_jobj['block_header']['block_number']))

        # try
        file_controller.remove_all_transactions()
        file_controller.remove_all_voting()
        # try

        request_sock.close()
コード例 #9
0
def initialize_blockdbinfo():
    logging.info('Remove all transactions in mempool')
    file_controller.remove_all_transactions()
    file_controller.remove_all_blocks()
    logging.info('Remove all voting info ')
    file_controller.remove_all_voting()