WeCross链码间跨链逻辑---以fabric端为例
2021-12-14 15:41:52 1 举报
WeCross链码间跨链逻辑的细节捋历
作者其他创作
大纲/内容
调用registerCallbackResult1.构建seq、result到TransactionRequest中2.asyncSendTransaction发送异步消息到WeCrossHub链码3.判断返回状态,成功则将callback的exceptionwei设置为null
将Args[1]以\"data\"为key]put到链上
getXATransactionState
获得目标资源的锁定状态isLocked
registerCallbackResult
调用handleRequest()
1.在路由服务启动的时候,已经初始化了InterchainManager到PollingManager上2.在InterchainManager上调用registerTask:加载InterchainJob然后注册到轮询任务里
桥接合约 WeCrossHub
跨链路由 WeCross-1.2.0
interchain 函数
代理合约 WeCrossProxy
callback 函数
业务合约 interchainSample
start end
execute end
将uid和5个参数添加到一个string数组中 为request 并编码为json格式的 requestData
3
T
InterchainJob
fabric
execute-> handleInterchainRequests(systemResource)开始执行定时轮询任务
开始调用
1.interchainRequest.build(request)//构建请求(interchainRequest.build(request)即WeCrossHub设置的requestData)2.初始化InterchainScheduler,并将interchainRequest,systemResource,adminUA设置到调度器上3.interchainScheduler.start
1.判断参数Args长度是否为22.判断Args[0]是否为true
根据业务合约的参数,调用了已安装在通道channel的智能合约WecrossHub
4
调用GetState根据对应的key获取init时设置的channel和hub名称其中 channel为通道名称hub为桥接合约名称 WecrossHub
callTargetChain1.对原uid进行sha256,构建新的事务uid为realUid2.如果事务id有效(非0非空)则将其设置到新建的transactionRequest3.将args作为string设置到transactionRequest中4.asyncSendTransaction发送异步消息到指定资源的路由5.接收返回值transactionResponse,并取transactionResponse.getResult()[0]为callTargetChainResult
将5个参数依次添加到新建的trans二元数组中
NullFlag
com/webank/wecross/interchain/InterchainManager.java
5
准备参数: path : 目标链资源路径] method: 目标接口 args : 调用参数 callbackPath: 回调资源路径 callbackMethod: 回调接口
在实际开发中此处逻辑应该随invoke逻辑进行修改
systemResource
以seq为key,result为value,将结果写到链上
return shim.Success(nil)
F
updateCurrentRequestIndex
return Response
按照hub,trans,channel的顺序传参调用fabric跨通道合约InvokeChaincode
返回已存在事务的事务id和seq
调用合约的interchainInvoke方法
start里是一系列的回调函数
此处跨链到目标链调用invoke
return uid
调用GetState查出increment设置 uid=increment+1
2
start
更新最新的index
调用PutState1.设置uid为新的Increment2.设置requestData到以新得的uid设置的key里
0 条评论
回复 删除
下一页