主要步骤:
长安链调度模块将所有交易并行执行,并在执行中将所有交易的写操作都记录在内存缓存中;
每笔交易执行结束后,检查自己读集中所有的key是否被其他交易修改,若无则将该交易写集生效(ApplyTxSimContext),若被其他交易修改则将该交易重新加入待执行队列重新执行;
待所有交易执行完毕后,通过分析所有交易的读写集构建DAG。若交易间存在“读-写”、“写-读”、“写-写”冲突,根据执行时的先后顺序构建DAG中的边。
因存在冲突的交易执行时间存在随机性,最终构建的DAG也无法预测,所以此算法为随机性调度算法。在进行冲突检测时,长安链应用了位图等数据结构进行工程优化,极大地提升了交易的执行效率。
在长安链中,交易池负责接收、校验、转发和缓存节点收到的待处理交易,并在共识提案时为核心引擎模块提供一批有效的交易进行区块构造。
具体来说,交易池具有如下功能:
接收客户端发送过来的交易,并将有效的交易广播给其他的节点;
对交易ID、时间戳、签名等进行有效性检查以及交易是否存在“双花”的防重检查;
缓存交易,并在共识提案时为核心引擎模块提供一批有效的交易;
Fabric SDK配置文件
fabric_sdk.yml配置文件如下:
注意:SDK配置文件中的路径请使用绝对路径。
#版本version:1.0.0#client配置client:#客户端默认使用的组织organization:Org1 logging:#sdk日志级别level:info tlsCerts:systemCertPool:false client:#用户TLS私钥路径 key:path:/release_path/config/fabric/crypto-config/peerOrganizations/org1.example.com/users/User1 org1.example.com/tls/client.key#用户TLS证书路径cert:
path:/release_path/config/fabric/crypto-config/peerOrganizations/org1.example.com/users/User1 org1.example.com/tls/client.crt#通道信息channels:#通道名mychannel:#peer节点列表peers:#peer节点名peer0.org1.example.com:endorsingPeer:true chaincodeQuery:true ledgerQuery:true eventSource:true peer1.org1.example.com:
endorsingPeer:true chaincodeQuery:true ledgerQuery:true eventSource:true#组织信息organizations:#组织名org1:#组织mspId mspid:Org1MSP#该组织下的节点列表peers:-peer0.org1.example.com-peer1.org1.example.com#组织用户
users:#用户名,固定为user,user:#用户私钥路径key:path:/release_path/config/fabric/crypto-config/peerOrganizations/org1.example.com/users/User1 org1.example.com/msp/keystore/8cc7e53b2b2f3095b985139f667b260988afa3dad2c0ff24cb9e45fb93d77970_sk cert:path:/release_path/config/fabric/crypto-config/peerOrganizations/org1.example.com/users/User1 org1.example.com/msp/signcerts/User1 org1.example.com-cert.pem#节点信息peers:#peer节点名
peer0.org1.example.com:#peer节点url url:grpcs://localhost:7051 grpcOptions:#peer节点TLS中的SNI,使用节点名ssl-target-name-override:peer0.org1.example.com keep-alive-time:0s keep-alive-timeout:20s keep-alive-permit:false fail-fast:false allow-insecure:false tlsCACerts:path:/release_path/config/fabric/crypto-
config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem#peer节点名peer1.org1.example.com:#peer节点url url:grpcs://localhost:8051 grpcOptions:#peer节点TLS中的SNI,使用节点名ssl-target-name-override:peer1.org1.example.com keep-alive-time:0s keep-alive-timeout:20s keep-alive-permit:false fail-fast:false
config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pementityMatchers:peer:-pattern:(w)peer0.org1.example.com(w)mappedHost:peer0.org1.example.com-pattern:(w)peer1.org1.example.com(w)mappedHost:peer1.org1.example.com