拜占庭共识机制Aardvark介绍

Aardvark是构建BFT系统的新方法,旨在改善传统系统在面对拜占庭错误时的性能。该机制通过签名的客户端请求、资源隔离和定期视图更换来提高系统的鲁棒性。Aardvark的特点在于采用数字签名、独立的网络资源和视图更换策略,确保在有或无拜占庭错误时,系统性能保持相对稳定。
摘要由CSDN通过智能技术生成

撸了一整天Aardvark,总结记录一下,可能有些地方理解的也不是很到位。

Aardvark: http://static.usenix.org/events/nsdi09/tech/full_papers/clement/clement.pdf

摘要:

提出了构建BFT系统的新方法。目前的BFT系统运行的很快,但是都不能很好的应对拜占庭错误。只要一个坏的client就能让包括PBFT、Q/U/、HQ、Zyzzyva等系统不可用。所以论文提出了1、现有协议的缺点;2、在拜占庭错误发生时系统可用的原则。3、提出构建BFT系统的新方法:Aardvark。其性能在无拜占庭错误和有拜占庭错误差异不大。

介绍:

Aardvark的性能在有没有拜占庭错误基本一致。而其他的就不行啦,在primary坏掉或者副本恢复的时候都可能造成如此严重的情况。本文提出的算法,更改了以往的思路,不注重极限的性能,在保证可以接收的吞吐量的情况下更广泛的去处理错误发生的情况。Aardvark在某些方面跟其他的BFT算法类似,都是client请求primary,但是其他的方面却很大不同。
Aardvark采用签名认证而之前的系统尽力避免它、采用常规的view-change而之前的技术则是做为最后的选择,p2p技术而之前的系统多采用IP广播。看起来Aardvark这些选择都会降低了吞吐,但是实际看来降低的有限却在容错上有很好的表现。
在这里插入图片描述

系统模型:

节点N=3f+1 f为最大拜占庭错误节点数。 客户端可以任意多为恶意节点。恶意节点可以串谋但无法解决密码学加密问题。异步网络条件下有个同步时间间隔,消息会在有限的延迟时间里提交。
定义1:(Synchronous interval):同步时间间隔里,任意消息会在一个有限的时间T内得到执行(有重发策略)。
定义2:(Gracious execution):所有的节点以及客户端都是好的。
定义3:(Uncivil execution):最多f个节点是拜占庭节点、可以有任意多个恶意client。
目前的BFT系统具有着误导性、危险性、徒劳性。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Aardvark I2C主机适配器接收数据的示例代码: ```c #include <stdio.h> #include "aardvark.h" #define SLAVE_ADDR 0x50 #define BUFFER_SIZE 256 int main(void) { Aardvark handle; int result; u08 buffer[BUFFER_SIZE]; int num_bytes; // 打开Aardvark设备 handle = aa_open(0); if (handle <= 0) { printf("Unable to open Aardvark device\n"); return 1; } // 设置Aardvark设备为I2C主机模式 result = aa_configure(handle, AA_CONFIG_SPI_I2C); if (result != AA_OK) { printf("Unable to configure Aardvark device\n"); aa_close(handle); return 1; } // 发送START信号 result = aa_i2c_start(handle, SLAVE_ADDR, AA_I2C_WRITE); if (result != AA_OK) { printf("Error sending I2C start\n"); aa_close(handle); return 1; } // 发送数据 buffer[0] = 0x00; // 指定要读取的寄存器地址 result = aa_i2c_write(handle, buffer, 1); if (result != AA_OK) { printf("Error writing I2C data\n"); aa_close(handle); return 1; } // 发送RESTART信号 result = aa_i2c_start(handle, SLAVE_ADDR, AA_I2C_READ); if (result != AA_OK) { printf("Error sending I2C restart\n"); aa_close(handle); return 1; } // 读取数据 num_bytes = aa_i2c_read(handle, buffer, BUFFER_SIZE); if (num_bytes < 0) { printf("Error reading I2C data\n"); aa_close(handle); return 1; } // 打印接收到的数据 printf("Received %d bytes of data:\n", num_bytes); for (int i = 0; i < num_bytes; i++) { printf("0x%02X ", buffer[i]); } printf("\n"); // 发送STOP信号 aa_i2c_stop(handle); // 关闭Aardvark设备 aa_close(handle); return 0; } ``` 该代码通过Aardvark I2C主机适配器向从设备发送START信号和数据,并通过发送RESTART信号和读取数据来接收从设备发送的数据。在接收到数据后,该代码将数据打印到控制台,并发送STOP信号以结束通信。请注意,此代码假定从设备在地址0x50处,并且要读取的寄存器地址为0x00。您需要根据您的具体情况进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值