区块链核心技术-智能合约.pptx
Day 6 区块链核心技术,智能合约,智能合约的概念 Fabric智能合约 Fabric开发支持 链代码运行原理 如何编写 如何调试,Contents,链码(智能合约)的基本概念,智能合约是由事件驱动的、具有状态的、存储和运行在区块链上的程序,智能合约例子,发布一个智能合约,皇马赢,小明给我1000元;拜仁赢,我给小明1000元,比赛结果发布,皇马42拜仁。触发智能合约响应条件,履行智能合约,将小明的1000元打入我的账户,,今天凌晨245,欧冠皇马VS拜仁慕尼黑,,用户积分商户A token 商户B token 兑换比例 11001,华为链代码的安装、调用和实例化,Fabric链码基本概念,Channel 通道,子链 同一peer可加入不不同channel 链码的操作基于Channel进行 同一channel上的peer结点同步其上链码执行的结果 Endorser 模拟执行链码 分离计算任务,减轻共识节点负担,增加吞吐量 支持endorsement policy,Orderer 对链码执行结果共识 支持solo/kafka/FBFT不同的ordering策略 Committer 将链码执行结果写进账本ledger,交易执行的流程,,,Fabric CA,APP,SDK,sync,Fabric Orders,0. Enroll/login,2.a 校验签名 2.b 比对多个Endorser的回复结果 2.c 检查是否收集了足够的Endorsement,5. 发送交易区块,2.回复Proposal Response,1.a 校验Proposal签名 1.b 检查是否满足Channel ACL 1.c 模拟执行交易并对结果签名,TX Proposal channel id chaincode arguments user signature Proposal Response r/w sets endorsement statement endorser signature TX r/w sets endorser signatures channel id,3. 发送交易TX,4. 对交易进行排序,构造区块,1. 发送TX Proposal,5.a 检查交易结构完整性、签名、是否重复 5.b 校验交易是否符合Endorsement策略 5.c 检查读集合中版本跟账本是否一致 5.d 执行区块中的合法交易,更新账本状态,链码的开发,必须要实现的接口 type Chaincode interface { // 初始化工作,一般情况下仅被调⽤用一次 Initstub ChaincodeStubInterface pb.Response // 查询或更新world state,可多次被调⽤ Invokestub ChaincodeStubInterface pb.Response },账本状态数据的读写 GetState PutState DelState GetStateByRange GetStateByPartialCompositeKey GetQueryResult GetHistoryForKey CreateCompositeKey SplitCompositeKey,链码示例和Demo-注册会员,链码示例和Demo-申请帮助,交易内容的区块结构,交易具体内容,区块头,区块体,,,,交易数据包括事件编号,用户电话号码等信息,,系统处理过程信息记录,如何调试,一般模式下开发调试过程 本地启动一个orderer节点,solo模式orderer 本地启动一个peer节点CORE_PEER_ID peer0 peer node start Install Chaincode程序peer chaincode install –p -n mycc –v 1.0,如何调试,实例化连码程序peer chaincode instantiate –n mycc –v 1.0 –c ‘{“Args”[“ init“,”a”,”100”,”b”,”100”]}’ 提交invoke transactionpeer chaincode invoke –n mycc –c ‘{“Args”[“invoke”,”A”,”B”,”10”]}’ 提交query transaction Peer chaincode query –n mycc –c ‘{“Args”[“query”,”A”]}’,