Ejemplo n.º 1
0
def draw_extra4():
    n = np.arange(10, 60, 10)
    datas = [(n, 2 * n**2 - n - 1, 'kPBFT'), (n, n**2 + n * 3 - 2, '本协议')]

    draw_plt(datas=datas,
             xlabel='共识节点的数量',
             ylabel='通信量',
             mode='save',
             save_name='node & communication')
Ejemplo n.º 2
0
def draw_extra3_1():
    """写链错误率对好写链比例的影响."""
    MESSAGE_POOL_SIZE = 100
    NODES = 30
    ROUND = 50
    P_N = 0.1
    STRATEGY = 1
    W = 5
    P_WRITE_WRONG = np.arange(0.1, 0.5001, 0.05)
    P_VOTE_WRONG = [0.2, 0.3, 0.4, 0.5]

    res = {rate: dict() for rate in P_VOTE_WRONG}

    for pvw in P_VOTE_WRONG:
        print(f'P_VOTE_WRONG rate {pvw}')
        for pww in P_WRITE_WRONG:
            tmp = []
            for _ in range(5):
                bc = BlockChain(message_pool_size=MESSAGE_POOL_SIZE,
                                n=NODES,
                                p_n=P_N,
                                rd=ROUND,
                                strategy=STRATEGY,
                                w=W,
                                p_write_wrong=pww,
                                p_vote_wrong=pvw,
                                verbose=False)
                write_stat = bc.start()
                tmp.append(write_stat['bc_good_prob_in_append'])
            res[pvw][pww] = np.mean(tmp)

    # 绘制结果曲线
    draw_plt(datas=[(res[k].keys(), res[k].values(), f'投票错误的概率={k}') for k in P_VOTE_WRONG],
             xlabel='领导节点发布错误区块的概率',
             ylabel='正确区块所占比例',
             mode='save',
             save_name='Block Chain pww & writerate')
Ejemplo n.º 3
0
def draw_extra1_1():
    """全节点转共识节点概率对上链比例的影响."""
    MESSAGE_POOL_SIZE = 1000
    NODES = 30
    ROUND = [20, 50, 100]
    P_N = np.arange(0.1, 1.01, 0.1)
    STRATEGY = 1
    W = 5
    P_WRITE_WRONG = 0.2
    P_VOTE_WRONG = 0.2

    res = {rd: dict() for rd in ROUND}

    for rd in ROUND:
        print(f'Round {rd}')
        for pn in P_N:
            tmp = []
            for _ in range(5):
                bc = BlockChain(message_pool_size=MESSAGE_POOL_SIZE,
                                n=NODES,
                                p_n=pn,
                                rd=rd,
                                strategy=STRATEGY,
                                w=W,
                                p_write_wrong=P_WRITE_WRONG,
                                p_vote_wrong=P_VOTE_WRONG,
                                verbose=False)
                write_stat = bc.start()
                tmp.append(write_stat['bc_good_prob'])
            res[rd][pn] = np.mean(tmp)

    # 绘制结果曲线
    draw_plt(datas=[(res[k].keys(), res[k].values(), f' ={k}') for k in ROUND],
             xlabel='Probability of Consensus Nodes from Full Nodes',
             ylabel='Good Write Probability',
             mode='show',
             save_name='Block Chain p_n & goodwriterate & round')
Ejemplo n.º 4
0
def draw3():
    params = {
        'message_pool_size': 10000,
        'n': 60,
        'rd': [2000, 5000, 10000],
        'p_n': np.arange(0.1, 1.01, 0.1),
        'strategy': 1,
        'w': 5,
    }
    res = dict()
    for rd in params['rd']:
        res[rd] = dict()

    for rd in params['rd']:
        print('rd %d' % rd)
        for p_n in params['p_n']:
            p_n = round(p_n, 2)
            tmp = []
            for _ in range(5):
                bc = BlockChain(message_pool_size=params['message_pool_size'],
                                n=params['n'],
                                p_n=p_n,
                                rd=rd,
                                strategy=params['strategy'],
                                w=params['w'],
                                verbose=False)
                tmp.append(bc.start()['bc_size'])
            res[rd][p_n] = np.mean(tmp) / (3 * params['n'] * p_n - 2)

    # 绘制结果曲线
    draw_plt(datas=[(res[k].keys(), res[k].values(), f'通信量={k}')
                    for k in [2000, 5000, 10000]],
             xlabel='全节点的活跃度',
             ylabel='领导节点产生的轮数',
             mode='save',
             save_name='Block Chain p_n & Leader Node Counts n=60')