diff --git a/blockDB_1408/000071.log b/blockDB_1408/000071.log deleted file mode 100644 index 20f94a0..0000000 Binary files a/blockDB_1408/000071.log and /dev/null differ diff --git a/blockDB_1408/000073.ldb b/blockDB_1408/000073.ldb new file mode 100644 index 0000000..31ed458 Binary files /dev/null and b/blockDB_1408/000073.ldb differ diff --git a/blockDB_1408/000074.log b/blockDB_1408/000074.log new file mode 100644 index 0000000..00212fe Binary files /dev/null and b/blockDB_1408/000074.log differ diff --git a/blockDB_1408/CURRENT b/blockDB_1408/CURRENT index f74be16..d2ea14c 100644 --- a/blockDB_1408/CURRENT +++ b/blockDB_1408/CURRENT @@ -1 +1 @@ -MANIFEST-000072 +MANIFEST-000075 diff --git a/blockDB_1408/CURRENT.bak b/blockDB_1408/CURRENT.bak index 5893b8f..f74be16 100644 --- a/blockDB_1408/CURRENT.bak +++ b/blockDB_1408/CURRENT.bak @@ -1 +1 @@ -MANIFEST-000069 +MANIFEST-000072 diff --git a/blockDB_1408/LOG b/blockDB_1408/LOG index 417f950..a7424d8 100644 --- a/blockDB_1408/LOG +++ b/blockDB_1408/LOG @@ -314,3 +314,15 @@ 20:00:01.520372 db@open done T·23.644ms 20:00:02.325750 db@close closing 20:00:02.326281 db@close done T·530.5µs +=============== Apr 24, 2024 (CST) =============== +20:04:35.321680 log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed +20:04:35.323680 version@stat F·[2 1] S·159KiB[107KiB 51KiB] Sc·[0.50 0.00] +20:04:35.323680 db@open opening +20:04:35.324690 journal@recovery F·1 +20:04:35.327680 journal@recovery recovering @71 +20:04:35.332680 memdb@flush created L0@73 N·20 S·54KiB "blo..9\xc2\xf4,v422":"blo..n\x01\x04,d418" +20:04:35.332680 version@stat F·[3 1] S·213KiB[162KiB 51KiB] Sc·[0.75 0.00] +20:04:35.348696 db@janitor F·6 G·0 +20:04:35.348696 db@open done T·25.0151ms +20:04:36.051582 db@close closing +20:04:36.052583 db@close done T·1.0012ms diff --git a/blockDB_1408/MANIFEST-000072 b/blockDB_1408/MANIFEST-000072 deleted file mode 100644 index 10f1606..0000000 Binary files a/blockDB_1408/MANIFEST-000072 and /dev/null differ diff --git a/blockDB_1408/MANIFEST-000075 b/blockDB_1408/MANIFEST-000075 new file mode 100644 index 0000000..773dbbd Binary files /dev/null and b/blockDB_1408/MANIFEST-000075 differ diff --git a/peer节点处理提案请求.md b/peer节点处理提案请求.md new file mode 100644 index 0000000..524abaa --- /dev/null +++ b/peer节点处理提案请求.md @@ -0,0 +1,11 @@ +### peer节点处理提案请求 + +1.根据ChaincodeMessage生成链码存根(ChaincodeStub) + +2.根据ChaincodeMessage结构体中Proposal *SignedProposal验证客户端签名 + +2.解析ChaincodeMessage中的链码参数并调用链码,返回背书结果(Response) + +3.获取事务的读写集并检测其是否存在重复地址,以及是否为不可序列化的事务 + +4.根据序列化的字节数组创建提案回复(ProposalResponse),并将序列化后的提案回复写入ChaincodeMessage结构体中的Payload字段 \ No newline at end of file diff --git a/peer节点返回消息.md b/peer节点返回消息.md new file mode 100644 index 0000000..a6198f4 --- /dev/null +++ b/peer节点返回消息.md @@ -0,0 +1,29 @@ +### peer节点返回背书结果 + +#### 将接收到的提案响应按照交易 ID 进行归类,并将它们存储到一个映射结构中 + +1.获取ChainCodeMessage结构体对象Payload字段的内容,并进行反序列化,得到pb.ProposalResponse对象 + +2.定义一个将交易ID与提案相应关联的map对象proposalResponse (cmap.ConcurrentMap[string, []*pb.ProposalResponse]) + +3.定义了一个类型为 []*pb.ProposalResponse的变量prs,用于存储提案响应。检查 proposalResponse中是否已经存在了与当前消息的交易 ID(msg.TxID)对应的提案响应数组。如果不存在,则创建一个空的数组,并将其与交易 ID 关联起来 + +4.从 proposalResponse 中获取与当前消息的交易 ID 关联的提案响应数组 prs,将当前接收到的提案响应 pr添加到 prs 数组中。将更新后的 prs数组重新关联到交易 ID 上,更新proposalResponse中的值 + +#### 解析提案请求 + +1.验证msg.Proposal.Signature字段,检查提案的签名是否正确 + +2.反序列化ChaincodeMessage类型消息(msg)的个各字段,得到签名后的提案(SignedProposal)、提案响应(ProposalResponse)等信息 + +3.验证签名头(SignatureHeader)信息与客户端身份信息是否一致 + +4.校验提案响应负载的Hash值、提案响应的状态信息和背书结果,以及背书者的签名是否有效 + +#### 生成交易(事务)并打包 + +1.将背书者存储至背书者集合([]*pb.Endorsement)中 + +2.获取交易的字节数组(txBytes),与签名头信息共同实例化Payload结构体 + +3.反序列化Payload结构体对象得到payloadBytes,并使用客户端的私钥进行签名,将签名值放入Envelope结构体中的Signature字段 \ No newline at end of file diff --git a/客户端至peer节点.md b/客户端至peer节点.md new file mode 100644 index 0000000..259e2b7 --- /dev/null +++ b/客户端至peer节点.md @@ -0,0 +1,19 @@ +### 客户端至peer节点 + +1.生成随机的交易提案参数args(模拟客户端的交易提案) + +2.把args放入pb.ChaincodeInput结构体中 + +3.获取链码ID,根据链码ID实例化pb.ChaincodeSpec结构体 + +4.获取一个随机数,对随机数nonce和序列化后的用户身份creator进行hash运算,得到txid + +5.根据nonce和creator实例化pb.SignatureHeader结构体 + +6.序列化pb.ChaincodeSpec结构体对象和pb.SignatureHeader结构体对象分别得到得到cisBytes,hdrBytes + +7.根据cisBytes和hdrBytes实例化pb.Proposal结构体 + +8.序列化pb.Proposal结构体对象,并对该对象签名,实例化pb.SignedProposal结构体 + +7.实例化pb.ChaincodeMessage结构体 \ No newline at end of file diff --git a/将封装好的交易交给Order节点排序.md b/将封装好的交易交给Order节点排序.md new file mode 100644 index 0000000..f28145f --- /dev/null +++ b/将封装好的交易交给Order节点排序.md @@ -0,0 +1,13 @@ +### 将封装好的交易交给Order节点排序 + +1.分析交易直接的依赖关系,将有依赖关系的两笔交易添加到事务组中(TransactionGroup),并删除不可序列化的交易 + +2.判断当前区块大小是否达到阈值、时间间隔是否超出阈值,确定是否满足成块条件 + +3.通过交易之间的依赖关系创建拓扑图,并对交易进行拓扑排序,将每10笔交易封装至信封中(Envelope),并返回信封切片 + +4.将信封切片序列化并填充至Block结构体中的BlockData字段,将负载(Block.Data)的内容使用用SHA256算法生成摘要值 + +5.获得区块头(Block.Header)的字节数组,并使用Order节点的私钥对该字节数组签名,得到的签名结果以及签名者的身份信息放入区块的元数据(BlockMetadata)中 + +6.将区块写入到账本数据库中(leveldb) \ No newline at end of file