石佳薇
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # [Project] Blockchain-based Vehicular Data Exchange ## :book: Related Work ### 🌟流程 * **步骤 1:** 车辆将其唯一标识符(如车辆ID、以太坊地址、RSA公钥等)发送给外部网关。 * **步骤 2:** 网关验证车辆的身份是否合法(通过验证车辆的证书或其他身份凭证)。 * **步骤 3:** 验证通过后,网关代表车辆调用智能合约中的 registerVehicle 函数,将该车辆注册到区块链中。 * **步骤 4:** 注册完成后,区块链会记录该车辆的身份,车辆此时成为区块链网络的合法节点,之后可以直接与区块链上的合约交互。 * 每辆车需要拥有一个唯一标识符(如车辆ID、RSA公钥等),作为其身份的凭证。**车辆通过接口提交这些凭证进行注册**【尝试采用HTTP接口】,网络会验证其身份是否有效 * 在验证通过后,外部网关将代表该车辆调用区块链中的智能合约,将该车辆注册到区块链网络中。【网关是作为区块链与外部设备(车辆)之间的中介,因此它需要有一个以太坊地址,通常是用来与智能合约交互的地址】 * 调用智能合约时,网关会传递车辆的地址和身份信息给合约。需要在区块链上,设计一个智能合约来处理车辆的注册和验证逻辑。合约将包含车辆注册、加入网络、认证车辆身份等功能。 * 一旦车辆成功注册,它的信息会被存储在区块链中,网关会收到来自区块链的反馈(注册成功),并将结果返回给车辆,通知它已经成功加入区块链网络,证明车辆已经成为区块链中的合法节点。 ### 🌟 使车辆成为区块链中合法节点的流程 1. 车辆身份准备 * 每辆车所有的身份标识即车辆ID vehicleID:确保每辆车都有唯一的身份,便于追踪和管理。 * 为车辆生成公私钥对(用于身份验证和安全通信):使用加密算法为每辆车生成一堆公钥。(ECDSA) 2. 发起注册请求 * 车辆附带必要的身份信息向区块链网络发送加入请求。 * 内容:VehicleID、公钥、时间戳、请求签名(使用私钥对请求内容签名) * 方法:通过安全的通信渠道(如HTTPS)将注册请求发送到区块链网络的注册服务端点。/或者**直接调用部署在区块链上的注册智能合约的相应函数**。 3. 验证和审核 * 网络中的认证机构(或智能合约)验证车辆提供的身份信息和认证材料 * 确认车辆的合法性和可信度 4. 注册批准和记录 * 一旦验证通过,车辆的信息被记录在区块链上,成为网络中的合法节点 * 通知车辆:车辆收到注册成功的确认信息,包含必要的网络配置信息 5. 后续车辆就可以与区块链网络中的其他节点和智能合约进行交互,提交或获取相关数据。 ### 🌟 测试相关 #### 用Truffle进行合约的部署,可能产生的有用的数据: 1. **Gas 使用量 (Gas Usage):** Gas 是执行合约所需的计算资源。通过查看不同合约操作的 Gas 使用量,你可以评估合约的效率。较高的 Gas 消耗可能表明代码需要优化,尤其是在大规模部署或运行时。 ### 🌟 分布式数据收集 让节点通过处理链上的数据来触发一些逻辑,而不仅仅是智能合约本身来处理这些事情。设计一种机制,使得节点在检测到某些条件时主动采取行动,而不是通过智能合约来处理所有逻辑。 **如果要收集车辆数据并触发智能合约**: 1. 数据采集:在SUMO模拟器中,每个车辆的数据(如位置、速度等)通过一个分布式的数据收集系统进行采集,比如使用分布式消息队列(如Kafka)。 2. 数据上链:每个节点将收集到的数据通过一个共识机制写入区块链。例如,节点将数据广播到区块链网络中,其他节点验证数据的有效性并达成共识。 3. 触发智能合约:当数据被写入区块链后,智能合约根据预定义的规则自动执行。触发智能合约的过程由区块链网络中的节点共同完成,而不是由一个中心化的控制点来触发。 **在Kafka中管理数据的分配和访问控制的实现:** 1. 使用Kafka主题和分区 * 主题分割:可以创建多个Kafka主题,每个主题专门用于不同类型的数据或不同的消费者组。例如,可以创建不同的主题用于不同的节点组,这样每个节点组只订阅自己相关的主题。 * 分区控制:Kafka主题可以分成多个分区。生产者可以将消息发送到特定的分区,消费者组中的每个消费者可以订阅特定的分区。这样可以通过设计分区分配策略来控制每个消费者(节点)读取的数据。 考虑kafka的队列规则 **要实现不同车辆触发不同的智能合约,并确保车辆数据不会被其他合约的车辆看到:** 1. 为每辆车分配一个特定的智能合约。 2. 确保车辆的数据只发送到特定的合约中。 3. 在Kafka中使用不同的主题或为每个车辆或合约定义唯一的标识符。 **接口代码:三部分代码的协同工作** 1. *SUMO和Traci数据收集与发送*: 第一部分代码从SUMO仿真中收集每辆车的实时数据(如位置、速度),并通过Kafka发送到特定的主题(每辆车一个主题)。 这些数据被传输到Kafka消息队列中,等待被消费。 2. *Kafka消费者与区块链交互*: 第二部分代码从Kafka中消费车辆数据。每个车辆数据会通过Kafka消费者读取,并根据车辆ID动态选择一个智能合约,将数据写入区块链。 这部分代码的主要工作是将仿真数据与区块链进行连接。 3. *智能合约事件监听和处理*: 第三部分代码监听区块链上智能合约触发的事件。当车辆数据被记录到区块链时,合约会触发一个事件。这部分代码监控这些事件,并根据事件的内容(例如,哪个车辆的数据被记录)执行相应的操作。 这种监听机制可以用于进一步的处理,例如通知其他系统,触发新的交易,或者记录日志。 ### 🌟 跨链问题 #### :seedling: 该场景下的跨链情况 当一个区块链网络分裂成两个或更多独立的区块链网络时,每个新形成的网络将单独维护其自己的区块链数据和交易信息。在这种情况下,即使原本是同一个网络的车辆之间也将无法直接进行信息交换,因为它们属于不同的区块链网络。 另外,在地面基站参与区块链网络的情况下,地面基站所存储的区块链数据可能会在形成新的区块链网络时成为一个独立的区块链,从而导致跨区块链的情况发生。所以,由于区块链网络的动态变化和分裂合并,可能会跨区块链的情况。 #### :seedling: 具体如何跨链/交换信息 > 尝试使用“公证人机制”跨链技术 > 公证人机制通常包括一组选定的节点,这些节点负责验证和记录区块链上的交易。这些节点可能是通过竞争或投票选举产生的,它们的任务包括确保交易的有效性和不可篡改性。 #### :small_blue_diamond: 使用公证人机制来同步不同区块链里车辆的信息: 1. 信息签名和验证: 车辆所在的区块链上的节点首先将车辆信息进行数字签名,并将信息及其签名发送到本区块链中的公证人节点进行验证。【公证人节点可通过随机选择的方式选举或是领导者节点,确保选择的公平性】 【发送方使用自己的私钥对消息进行签名,公证人节点使用发送的公钥验证签名的有效性。】 2. 跨链信息广播: 公证人节点收到验证通过的车辆信息后,在接收方区块链上进行广播,以确保跨链信息的传递。 3. 信息接收和验证: 在接收方区块链上的公证人节点接收到跨链广播的信息后,对信息进行验证。如果验证通过,公证人节点将在接收方区块链中提交和记录这些信息。 4. 信息确认和执行: 在接收方区块链中的共识机制会对跨链信息进行确认和执行,确保跨链信息被正确记录和执行。 5. 反向验证:相似的过程也会发生在发送方区块链上进行,以确保跨链机制的双向有效性。 #### :small_blue_diamond: 区块链分裂与合并时信息的转移和同步 :question: 如果不同区块链之间的信息会同步,也就是说其他区块链上也会有别的区块链上的信息,那么区块链在合并时/有车辆驶入区块链/路测单元加入区块链时,就不存在信息丢弃、加入或融合的问题? 当两个小的区块链网络移动靠近并准备合并时,公证人节点可以验证两个网络的数据,并确保合并过程中不会丢失或篡改任何信息。 ### 🌟区块链合并问题 合并算法设计: 1. 相对位置检测:车辆通过GPS位置检测判断彼此之间的相对位置,并确定是否足够接近来进行合并(根据两个区块链中的领导者节点的位置判定,如果它们之间的距离≤30米时,判定为接近)。 2. 合并:当两个小的区块链网络足够接近时,它们可以协商进行合并。合并可以包括以下步骤: - 建立连接:两个网络中的车辆需要建立通信连接(车辆可以搭载车载通信设备,比如车载通信模块、Wi-Fi 模块、蓝牙模块等,通过这些设备实现车辆之间的通信连接),以便交换信息。 - 共识达成:车辆可以使用共识算法来决定合并的具体细节,例如合并后的区块链的领导者、合并后的区块链的初始状态等。 - 创世区块选择: a) 网络1的创世区块可以选择成为合并后网络的创世区块。 b) 网c络2的创世区块中的信息成为合并后网络的创世区块信息的一部分。 c) 合并后区块链网络的创世块中将包含网络1和网络2中所有已存储的事件信息。 - 信息合并:在合并之前,车辆需要将彼此的未过期信息进行交换和合并,确保所有数据都得到保留或更新。(使用上述的信息验证机制) - 路测单元加入:当路测单元判断自身与某个区块链网络的距离足够接近时,它可以执行以下步骤加入该区块链网络: a) 该区块链访问路测单元存储的信息。 b) 如果路测单元之前未加入任何区块链网络,则该区块链不加入其他信息。 c) 路测单元将把自身作为参与者加入区块链网络,把云端存储的所有新的关键事件信息提交到该区块链网络。 ### 🌟 车辆距离计算 ### 🌟 区块链分裂问题 #### :seedling: 一个区块链要分裂成两个区块链可能发生在以下情况: 1. 车辆密度增加:如果一个区块链网络中的车辆密度增加到一定程度,超出了当前区块链网络的负载和处理能力,为了减少网络拥堵和提高效率,就可能需要将其分裂成两个或多个区块链网络。 2. 区块大小限制:如果一个区块链的大小达到了系统设定的阈值(此处可由我们自行设置),并且继续增长将导致性能下降,为了维持系统性能和稳定性,需要对现有区块链进行分裂。 #### :seedling: 分裂步骤设计 1. 区块链网络中的每个节点都维护一个计数器,用于跟踪与其相邻的节点数目。 2. 当一个节点检测到它的相邻节点数目超过一个预设的阈值时,它将发出一个分裂请求。 3. 其他节点收到分裂请求后,会进行相应的验证,确保该节点符合分裂条件,并确认同意分裂。 4. 一旦节点收到足够数量的同意分裂的确认消息,它就会将自己的区块链数据分裂为两个独立的区块链。 6. 主链继续保留原有的区块链数据和节点身份,而分支链则只保留与分裂节点相关的未过期数据。 #### :seedling: 附加 8. 如果分支链在后续的操作中发现需要合并回主链,它可以发送合并请求。 9. 主链收到合并请求后,对请求进行验证,并确认同意合并。 10. 一旦主链收到足够数量的同意合并的确认消息,它将与分支链合并,形成一个更大的区块链网络。 11. 当区块链网络中的节点离开时,它们将携带所有未过期数据并存储在本地,准备加入到下一个区块链网络中,这样可以保证数据的连续性。 #### :seedling: 跟踪节点(汽车)的相邻节点的数目: 1. 每个节点维护一个邻居列表,记录与其相邻的其他节点。 2. 当一个节点加入区块链网络时,它会与周围的节点建立连接,并将这些节点添加到其邻居列表中。 3. 当一个节点离开网络时,它会断开与邻居节点的连接,并从邻居列表中删除这些节点。 4. 每个节点会定期广播一个心跳消息到邻居节点,以保持连接的活跃状态。 5. 心跳消息中包含节点的身份信息,其他节点根据这些信息将发送节点添加到自己的邻居列表中。 6. 当节点收到来自邻居节点的心跳消息时,它会更新自己的邻居列表,并根据需要更新计数器的值。 7. 计数器的初始值可以设为0或1,取决于节点在加入网络时是否被视为相邻节点。 #### :seedling: 单个车辆加入区块链 **Algorithm 2 Blockchain merging algorithm (Single vehicle addition)** ### 🌟 共识算法设计 #### :seedling: 领导者选举问题 领导者选举步骤: 1. 评估车辆的信誉度:用一个分数来表示车辆的信誉度,分数越高代表信誉度越高。 可以考虑以下因素来评估车辆的信誉度:历史表现、驾驶记录、交通违规等。 2. 评估车辆的能力:用一个数值来表示车辆的能力,数值越高代表能力越强。 可以考虑以下因素来评估车辆的能力:信号接收传输的能力、计算能力即处理速度、存储容量等。 3. 【待定/随机选择】评估车辆的位置:微调车辆的GPS或者通过车辆之间的相对距离来确定车辆的位置,可选择与其他车辆相对中心的位置。(选择位于该区块链较为中心的位置,防止所选的领导者正好位于区块链的边缘正要离开区块链的位置,容易造成资源浪费、重新选择领导者的成本较高等问题。) 4. 确定算法规则:根据信誉度、计算能力和位置等条件,建立一套规则来确定选举过程中车辆的顺序。 - 首先,给信誉度设置一个阈值,将信誉度在此阈值内的车辆划为候选领导者。 - 其次,给车辆能力设置一个合适的阈值,从第一步筛选后的车辆中,来选择在此计算能力范围内的车辆作为候选领导者。 - 最后,在有多个车辆同时符合信誉度和能力阈值的情况下,随机选择一辆车作为最终领导者。 5. 选举过程:车辆之间通过通信网络进行信息交换,每辆车根据自身的评估结果将自己的信誉度、计算能力和位置等信息发送给其他车辆,其他车辆根据接收到的信息更新自身的选举结果。 6. 最终选出领导者:在选举过程中,根据规则不断更新选举结果,最终选出具有合适信誉度、计算能力的车辆作为领导者。随机选取以保证选取结果公正化。 7. 重新选取领导者:领导者节点会定期向其他节点发送心跳信号以表明自己处于活跃状态,其他节点可以通过监测领导者节点的心跳信号来检测其是否离开了区块链,若在一定时间内没有收到信号,就可以认为领导者节点已经离开区块链,此区块链需要重新选取领导者。 #### :seedling: 车辆能力计算 相关因子: 1. 时间长度加权因子:该因子需要随着时间的增长而递增,以体现长期持有代币的节点应该具有更高的验证权益。 2. 车辆计算能力(处理速度、存储容量):W,车辆计算能力越强,权重应当越大。 3. 信号接收传输的能力:S,车辆接收信号能力越强,所占权重越大。 4. 综合计算公式:计算公式表示为 V = f(W,S,T),其中,W 为车辆计算能力,S 为接收传输信号能力,T 为时间长度。 ① 如果采用对数函数来设计时间长度加权因子,则可以将节点的验证权益计算公式表示为 V = W * S * log(T)。 如果采用对数函数log(T) ,则该函数具有以下特点: 随着时间长度 T 的增加,log(T) 也会增加,但增长速率逐渐减缓。这意味着持有代币时间的增加会对验证权益产生影响,但是影响会随着时间的增长而减弱。 #### :seedling: 领导者选取成功后,需要完成的行为 1. 生成新的区块:收集来自同一区块链内其他车辆的交易数据和信息,将其打包成一个新的区块,添加到区块链上。 2. 其他区块链信息的验证:领导者节点需要验证交易数据的有效性和一致性,包括验证来自其他区块链的每个交易的数字签名、检查交易是否符合事先设定的规则,并与其他领导者节点达成共识。 ### 🌟 创新点 ### 【共识算法】 1. **区域划分**:将整个交通区域划分为若干个小的地理区域,每个区域内的车辆相互之间的通信延迟较低。 2. **局部领导者选举**:在每个小区域内选举一个领导者节点,这样可以减少全网广播的开销,提升选举效率。 3. **分层共识机制**:分层共识机制用来提高车辆网络的扩展性和容错性。 【分层结构】: **局部共识层**:在每个地理区域内部进行局部共识,快速达成一致; **全局共识层**:各区域的领导者节点之间进行全局共识,整合各区域的共识结果; **冗余领导者**:每个区域可以选举多个领导者节点,以备一个领导者节点失效时能够快速切换,保证系统的稳定性。 ### 【安全和隐私保护机制】 **基于差分隐私的车辆数据共享** 创新点:在车辆共享数据时,加入差分隐私机制,使得第三方无法通过分析数据推断出单个车辆的信息。将差分隐私与区块链结合,在区块链中存储的每一笔数据都经过差分隐私处理,确保隐私保护。 1. 实时位置信息共享 **差分隐私处理**:每辆车每隔一段时间采集当前位置,并使用差分隐私算法添加噪声。 **数据发布**:将加噪后的位置信息通过区块链广播,其他车辆可以实时获取并使用这些数据。 ### 【资源管理与优化】 资源分配策略:针对车辆的计算资源和带宽资源进行合理分配,提高整个系统的资源利用率。因为不同的车辆在不同时间和地点可能需要不同的资源支持,例如计算能力和网络带宽。 动态资源分配机制 1. **实时数据共享和处理**: 车辆通过传感器收集实时的交通数据(如位置、速度、路况等),并将这些数据上传到区块链网络中。每个节点(或车辆)接收到数据后,需要进行数据验证、交易处理等操作,消耗计算资源。 2. **带宽需求分析**: 不同地点和时间的车辆可能面临不同的带宽需求。例如,在高密度车流的城市中,需要更多的带宽来处理大量的交通数据。系统通过实时监测数据流量和节点负载来评估带宽需求。 3. **动态调整策略-基于负载平衡的资源分配**: 系统根据节点的负载情况动态调整资源分配。当某些节点负载过高时,系统将额外资源分配给这些节点,以确保数据处理和交易验证的效率。例如,利用负载均衡算法,将新的交易请求分配给空闲节点或资源负载较低的节点,避免资源瓶颈和延迟问题。 **地理位置优化的带宽分配**: 考虑到车辆位置的地理分布,系统可以优化带宽分配策略。在城市中心或高密度车流区域,增加带宽资源以应对更高的数据处理需求。反之,在低密度车流或边缘地区,可以减少带宽资源以节约成本。 ### 【分片】 1. **动态分片适配车辆密度变化**: * 引入动态分片机制,根据车辆密度和通信范围的变化来自动调整分片策略。 * 当车辆密度较高时,可以将区块链分片为更小的子区块链,以处理更频繁的交易和通信需求。 * 当车辆密度减少时,可以合并子区块链或者减少分片数量,以节省资源并提高效率。 2. **分片中的领导者选举与管理**: * 在每个分片内部实现独立的领导者选举机制,确保每个分片都有高效的管理和决策能力。 ## 🌟 笔记 #### :maple_leaf: 不同区块链中的车辆建立连接的方式? 1. Peer-to-Peer Networking: 车辆可以建立对等网络连接,通过无线通信技术如Wi-Fi、蓝牙或者专用的车联网通信协议进行通信。这种方式下,车辆可以直接与附近的其他车辆建立通信连接,并进行信息交换。 2. 基础设施支持:车辆可以利用基础设施支持如车载基站、路边单元(RSU)等设备建立通信连接,通过车载设备与基础设施进行通信,实现车辆之间的信息交换。 3. 区块链节点通信:在区块链网络中,车辆可以作为区块链节点,通过区块链网络本身建立通信连接,进行区块链数据交换和共识算法的执行。 #### :maple_leaf: RSU存储信息的机制 路测试验单元(RSU)与区块链的存储机制有些不同。虽然区块链是一个去中心化的分布式存储系统,但RSU通常不直接参与区块链的存储。 RSU通常会将车辆传输的关键事件信息提交到区块链网络中,以确保数据的可靠性和不可篡改性。然而,RSU自身并不直接存储区块链数据。 相反,RSU通常会将所有的区块链数据存储在云端或中心化的服务器中。这样做可以确保数据的可靠性和容错性,并且允许多个RSU共享同一批数据。当RSU与区块链网络靠近时,RSU会加入该网络,并将云端或服务器中的数据提交到区块链。 区块链用于存储和验证数据的完整性,而RSU则负责数据的收集、传输和提交。这种机制既能确保区块链网络的安全性和去中心化特性,又能提供高效的数据存储和交换能力。 #### :maple_leaf: 区块链本质 *区块链包括三个基本要素,即交易(Transaction,一次操作,导致账本状态的一次改变)、区块(Block,记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识)和链(Chain,由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录)。区块链中每个区块保存规定时间段内的数据记录(即交易),并通过密码学的方式构建一条安全可信的链条,形成一个不可篡改、全员共有的分布式账本。通俗地说,区块链是一个收录所有历史交易的账本,不同节点之间各持一份,节点间通过共识算法确保所有人的账本最终趋于一致。区块链中的每一个区块就是账本的每一页,记录了一个批次记录下来的交易条目。这样一来,所有交易的细节都被记录在一个任何节点都可以看得到的公开账本上,如果想要修改一个已经记录的交易,需要所有持有账本的节点同时修改。同时,由于区块链账本里面的每一页都记录了上一页的一个摘要信息,如果修改了某一页的账本(也就是篡改了某一个区块),其摘要就会跟下一页上记录的摘要不匹配,这时候就要连带修改下一页的内容,这就进一步导致了下一页的摘要与下下页的记录不匹配。如此循环,一个交易的篡改会导致后续所有区块摘要的修改,考虑到还要让所有人承认这些改变,这将是一个工作量巨大到近乎不可能完成的工作。正是从这个角度看,区块链具有不可篡改的特性。* ![1](https://hackmd.io/_uploads/B1E0H8H56.png) ![2](https://hackmd.io/_uploads/H1gTULrcT.png) #### :maple_leaf: 区块链搭建平台 1. Hyperledger Fabric【搭建比较复杂】 Hyperledger Fabric是由Linux基金会提供支持的一个开源平台。它的扩展性、灵活性和性能都非常强大,在搭建私有链时,Hyperledger Fabric的可定制性也很高。而且,它还提供了一些工具来帮助开发者快速构建区块链解决方案。Hyperledger Fabric的区块链技术已经得到了很多的应用,比如供应链金融、物联网和数字标识等行业。 要基于HyperLedger进行区块链开发比想像中简单,有两种途径,一种是基于超能云(IBM中国研究院开发的超能云平台提供了各种云服务),它给区块链爱好者、开发者的区块链开发测试环境,通过超能云平台,用户能够免费、超快速创建基于Hyperledger Fabric的多节点区块链、并在自己的链上调试智能合约。Hyperledger Fabric的合约是基于Go语言的,上手比较简单。 另一种进行Fabric是自己搭建Fabric的区块链网络。安装和运行Hyperledge fabric的运行有几种方式,比较推荐是下载Fabric区块链网络的Docker镜像,运行Docker镜像并启动Fabric区块链网络,但相对于比特币和以太坊,Fabric网络的架构和安装相对复杂,除了区块链服务外,还需要另外安装运行validating peer和Certificate Authority (CA) 服务。 搞定后要真正使用,还需要先用户注册和登记授权,然后才可以通过CLI或REST API进行调试和使用。其中里面智能合约的编写,跟在超能云的区块链云服务的是一样的。此外,除了CLI或REST API,IBM还提供了GRPC API和 SDK的方式进行应用的开发 2. Blockchain as a Service(BaaS) Microsoft、IBM和Amazon等大型云服务提供商已经推出了自己的区块链开发平台。这些平台提供了一种很方便的方法,使得企业和开发者能够轻松地使用区块链技术来构建应用程序。云服务提供商提供强大的安全性、可靠性和高性能的基础设施,以及易于使用的 API 和工具。此外,这些平台还提供了集成其他云服务的能力。 3. Ethereum Ethereum是一个具有智能合约功能的开源平台。Ethereum提供了一种很好的方式,可以帮助企业构建分布式应用程序。同时,它还是可按需扩展的,这意味着用户只需支付用到的资源。 基于以太坊平台之上的应用是智能合约,这是以太坊的核心。每个智能合约有一个唯一的地址,当用户向合约的地址里发送一笔交易后(这个时候就要消耗燃料费用,也就是手续费用),该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果。 以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App),相对于冷冰冰的智能合约代码,DApp拥有一个友好的界面和外加一些额外的东西,配合上图灵完备的语言,可以让用户基于合约搭建各种千变万化的DApp应用。 要写以太坊的智能合约有好几种语言可选,有类Javascript的Solidity,Python接近的Serpent,还有类Lisp的LLL,目前比较主流的是Solidity,推荐大家使用。当Solidity合约编译好并且发送到网络上之后,你可以通过以太坊的Mist客户端对智能合约进行测试和使用,也可以使用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web应用。 #### :maple_leaf: 搭建区块链平台的步骤 如何搭建一个区块链平台 搭建一个区块链平台需要具备一定的技能和知识,可以参考以下步骤: 1、选择合适的区块链平台:首先需要根据自己的需求选择合适的区块链平台,如Hyperledger Fabric、Ethereum等。 2、确定节点配置:确定搭建区块链平台的节点配置,包括物理服务器或云服务、CPU和内存等。 3、安装和配置节点:安装和配置选定的区块链平台节点,确保它们能够顺利运行。 在选择好平台之后,需要下载并安装对应的节点软件。以以太坊为例,可以从官网下载geth软件,并根据官方文档进行安装。 4、 启动节点:安装完成节点软件之后,需要启动节点。可以通过在命令行中输入相应的命令来启动节点,例如在以太坊中,可以输入以下命令启动节点: > geth --datadir /path/to/data init /path/to/genesis.json > geth --datadir /path/to/data --networkid 1234 --nodiscover console > 其中,--datadir表示数据目录的路径,--networkid表示网络ID,--nodiscover表示禁止节点发现。init命令用于初始化一个新的区块链,console命令用于打开一个交互式控制台。 5、配置节点:启动节点后,需要进行相应的配置。例如,在以太坊中,可以使用以下命令配置节点: > admin.nodeInfo.enode >该命令可以获取节点的enode地址,用于与其他节点进行通信。还可以使用其他命令来配置节点,例如添加账户、设置挖矿等。 6、连接其他节点:最后,需要将节点连接到其他节点,以便与其他节点进行通信和共识。可以通过在命令行中输入相应的命令来连接其他节点,例如在以太坊中,可以使用以下命令连接其他节点: >admin.addPeer("enode://<peer_id>@<peer_ip>:<peer_port>") >其中,<peer_id>、<peer_ip>和<peer_port>分别表示其他节点的enode ID、IP地址和端口号。可以通过网络中的其他节点获取这些信息。 7、创建智能合约:根据需求编写智能合约。 8、测试和调试:测试和调试整个平台是否能够正常运行。 总之,区块链平台搭建是一个复杂的过程,需要深入了解区块链技术和智能合约的开发。 #### :maple_leaf: 搭建以太坊私有链 [https://cloud.tencent.com/developer/article/1986267](https://) #### :maple_leaf: 使用Ganache,web3.js和remix在个人区块链上部署并调用合约 https://blog.csdn.net/qq_40261606/article/details/123249473 #### :maple_leaf: 可能用到的工具 1. Ethereum:一个开源的区块链平台,可以用于创建和执行智能合约。 2. Solidity:一种用于编写智能合约的高级编程语言,可以在Ethereum平台上使用。 3. Ganache:一个用于在本地环境中运行Ethereum区块链的快速开发测试工具。 4. Remix:一个基于网页的IDE,可以在浏览器中编写和调试Solidity智能合约。 5. Web3.js:一个用于与以太坊网络进行交互的JavaScript库,可以在前端应用程序中访问和操作区块链数据。 6. Metamask:一个浏览器插件,用于管理以太坊钱包,与DApp进行交互。 7. JMeter:一个用于性能测评的开源工具,可以模拟高负载的场景并测试区块链平台的性能。在进行性能测试时,JMeter会收集关于系统性能的各种数据,如响应时间、处理能力(吞吐量)、错误率等。可以通过JMeter的图形、表格或树形视图来查看这些数据,以便了解系统在不同负载下的表现,以及可能存在的性能问题。https://blog.csdn.net/qq_17496235/article/details/132708673 #### :maple_leaf: 技术路线 1. 安装和配置区块链平台: - 安装并配置Hyperledger Fabric或Ethereum。可以根据具体需求选择其中之一或两者都使用。 2. 开发智能合约: - 使用Solidity编写智能合约代码。可以使用Remix作为在线IDE来编写和调试Solidity代码。 3. 编译和部署智能合约: - 使用Truffle来编译和部署智能合约。Truffle提供了一组命令行工具,可以方便地编译、测试和部署智能合约。 https://www.jianshu.com/p/e9f5d93a2caa?utm_medium=timeline&utm_source=oschina-app 4. 设置测试环境: - 使用Ganache来模拟本地的Ethereum区块链网络。Ganache提供了一个方便的开发测试环境,可以用于快速测试智能合约。 5. 开发应用程序: - 使用Web3.js作为与以太坊区块链网络进行交互的JavaScript库。可以使用Web3.js来访问和操作区块链数据,并将其集成到前端应用程序中。 6. 部署和测试应用程序: - 使用Metamask浏览器插件来管理以太坊钱包,并与DApp进行交互。可以使用Metamask来部署和测试开发的应用程序。 7. 存储和共享数据: - 使用IPFS作为分布式文件系统来存储和共享大量的数据。IPFS提供了一种去中心化的存储方案,可以与区块链平台集成。 8. 性能测评: - 使用JMeter进行性能测试,并模拟高负载的场景。可以对区块链平台进行压力测试,评估其性能和吞吐量。 #### :maple_leaf: 以太坊 1. 以太坊和比特币一样是基于P2P网络与密码学建立起的区块链机制,不同之处是,以太坊在每个运作的节点上都运行着一个以太坊虚拟机(Ethereum VirtualMachine,EVM),可以用来执行完整的程序。这些程序在以太坊中被称为智能合约(Smart Contract)。智能合约除了可以处理数据,还内置转账功能,可以很容易地通过智能合约来交易加密货币。由于智能合约可在每个以太坊的节点上执行并进行验证,所以计算结果被认为是可信任的。 2. 以太坊还开发出了web3.js让开发者可以使用网页技术撰写智能合约的操作界面。这样的网页操作界面又称为分布式应用程序(DAPP)。要使用DAPP,必须在支持DAPP的浏览器中才能使用(如Mist或Parity或者是MetaMask)。 3. 在区块链上运行的程序,通常称为智能合约。所以通常会把写区块链程序改成写智能合约。 ![4fa0968f9ac0a3f2198ece89020c64d](https://hackmd.io/_uploads/B1Yk33gn6.png) #### :maple_leaf: 如何编写智能合约 1. Ethereum上的智能合约需要使用 solidity 语言来编写。之前还有其他能用来编写智能合约的语言如Serpent(类的Python),LLL(类的Fortran),但目前看到所有公开的智能合约都是使用 solidity 编写。官方宣传上说 soidity 是一种类似的 Javascript 的语言,而且围绕着 JavaScript 的各种开发工具链都是使用属于使用Javascript生态系的NPM来提供的。 #### :maple_leaf: 将智能合约部署到区块链的流程 1. 写好 solidity代码(.sol)后,需要先将程序代码编译(编译)成EVM(EthereumVirtual Machine)能读懂的二进制度 contract Bytecode,才能部署到Ethereum的区块链上执行。部署到区块链上的合约会有一个和钱包地址(地址)一样格式的合约地址(ContractAddress)。 ![bb2befcc8b626fa91d23945f2969a0f](https://hackmd.io/_uploads/BJP4yae3a.png) 2. 部署后智能合约可自动执行。后续呼叫智能合约的时候,使用者可以使用部署合约的钱包地址(所有者帐户),或依据编写的智能合约条件,让其他钱包地址也能呼叫这个智能合约。呼叫智能合约,其实就是向这个合约地址发起交易,只是交易的不只是代币,而可以是智能合约提供的呼叫方法。 #### :maple_leaf: 通过Solidity实现一个类 编写智能合约可以直接在【https://remix.ethereum.org】里编写。 #### :maple_leaf: 区块链的主链 区块链主链是指最原始的、最核心的区块链网络。它是整个区块链系统的中心,承载着系统的核心功能和重要数据。主链的作用是确保交易的安全性和完整性,并记录系统中所有交易的顺序。 主链的建立和维护需要大量的计算资源和参与节点,因此主链的扩展性和性能是一个重要的问题。随着区块链技术的普及,主链上的交易量也会越来越大,这可能会导致交易的处理速度变慢。 为了解决主链的扩展性问题,人们开始思考如何将某些交易从主链上分离出来,并在一个独立的侧链上处理。这就引出了侧链的概念。 #### :maple_leaf: 区块链的侧链 区块链侧链是指与主链并行存在的链条。侧链可以理解为一个独立的区块链网络,它具有自己的节点和规则。侧链通常用于处理主链上的一部分交易,以减轻主链的负担。 侧链的建立可以通过分叉主链或通过智能合约机制实现。无论是哪种方式,侧链的操作与主链是相对独立的,它具有自己的交易确认时间和规则,与主链上的交易并行进行。 侧链的引入带来了很多好处。首先,它可以大大提高整个系统的处理能力和吞吐量。通过将一部分交易移至侧链上,主链上的负载减少,从而提高了整体的效率。其次,侧链的引入也为创新提供了机会。人们可以通过自己的侧链实现新的功能或规则,并与主链进行交互。 #### :maple_leaf: 测试工具 1. NS2模拟器:面向对象的网络仿真器 2. Hyperledger Caliper评估区块链网络的性能(在Hyperledger Fabric 平台上开发区块链模块) * Success Rate: Measure all successful and failed transactions for a test cycle. * Transaction & Read Throughput: Measure the flow rate of all transactions through the system, in transactions per second, during the a cycle. * Transaction & Read Latency: Measure the time for an issued transaction to be completed and a response being available to the application that issued the transaction. Maximum, minimum and average latency for the test cycle is provided. * Resource consumption: See the maximum and minimum memory and CPU resource consumption, as well as I/O traffic, during the a cycle for each component process 改变参数,测定最小延迟时间 3. 使用SUMO进行仿真验证(C++):方案进行了SUMO仿真,SUMO是一个用于模拟城市交通流量的开放源代码软件。这种仿真有助于验证方案在实际场景中的可靠性和有效性。 4. Truffle #### :maple_leaf: 评估角度 1. 计算成本和通信成本:这有助于了解方案在实际部署中可能会带来的负担和效率问题。 * 共识算法的评估:计算不同共识算法的通信数量![3](https://hackmd.io/_uploads/r1Ifr8uS0.png) 【通信成本是在分布式系统或通信网络中,为完成某一任务或协议所需的通信次数或通信量。通信数量与系统中节点的数量、节点之间的通信方式以及协议设计等因素有关。】 2. 算法复杂度的比较 3. 执行时间 4. 吞吐量 5. 延迟 6. Execution Cost: The execution cost refers to the over head of invoking the related smart contracts and completing specific functions. Ethereum provides a clear indicator for execution cost, which is gas. The overhead of each operation in Ethereum smart contracts is evaluated by a certain gas value. After successfully invoking a contract, the gas consumption is recorded in the related transaction. #### :maple_leaf: 区块链在车联网上的优势 1. Efficient Transition on Road 去中心化的区块链提供了高度的可靠性,支持快速和有效的电子数据共享和交易。智能合约还使交易更容易自动执行,节省了支付停车、税收、保险和过路费等费用的时间。 2. Vehicles Insurances and audit IoV可以收集有关司机和车辆行为的数据,保险公司可以利用这些数据来确定保费。在这些情况下收集到的信息和数据的完整性是至关重要的。由于区块链技术的不变性,用于审计和评估保险索赔的数据可以保持不变和值得信赖。 3. Security Improvement 随着自动化程度的提高和自动驾驶汽车的部署,利益相关者面临着重大的道路安全挑战。IoV系统非常容易受到黑客攻击和数据盗窃。区块链技术可以为提高当前的物联网系统的安全性提供可靠的解决方案,以应对这些潜在的危险。区块链的分布式和不变的特性使其成为创建一个安全的、不容错的IoV系统的理想选择。 4. Monitoring traffic rule Violations 由于区块链技术的基本特性,可以为IoV系统中的每个实体提供一个可用于全球识别的唯一标识。这些身份证可以被追踪来发现违反交通法律的行为,并促进道路安全。区块链的非腐败性使得违规者改变记录和数据更具挑战性。 5. Data Sharing between self-driving vehicles 车辆、车辆、道路等之间的数据传输均采用加密方式加密,并由所有者的公钥签名,以确保交易的准确性。由于区块链的分布式去中心化特性,所有的IoV系统实体都可以维护整个系统的记录,因此IoV系统更具有容错性和弹性。 —— 《Understanding Fusion of Internet of Vehicles with Blockchain》 #### :maple_leaf: 调查方法:区块链&车联网 在Scopus数据库中设置并搜索搜索。该研究旨在搜索在区块链和IoV领域所做的工作,以及两者与其他最新技术的合作。首先,设置搜索字符串“区块链和IoV”。其次,在Scopus数据库中进行搜索。只选择使用英文语言的论文。接下来,我们将下载并分析论文。首先根据标题和关键词进行分析。然后,对一篇所选论文的摘要进行了分析。最后,阅读选定的论文的全文。这样,就可以清楚地理解区块链技术与汽车互联网以及其他当前和新兴技术之间的关系。 For the research, papers are selected based on selection criteria that can be easily repeated. For this, a search is set and searched in the Scopus database. The study aims to search the work done in the fields of blockchain and IoV and also the collaboration of both with other latest technologies. First, the search string "Blockchain AND IoV" is set. Secondly, the search is done in the Scopus database. Only papers in the English language are selected. Next, papers are downloaded and analysed. The analysis is done firstly based on the titles and keywords. After that, the abstract of a selected paper is analysed. Finally, the whole text is read of selected papers. By that, the relationship between blockchain technology with the Internet of Vehicles and other current and emerging technologies can be clearly understood.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully