6.1 调用合约方法
合约调用指需要改变合约状态的函数调用,执行函数的同时也可以转账到合约账户。用户界面输入用户请求后,触发合约调用。合约调用当前分为两种形式:通过迅雷链助手App扫描二维码发送合约调用的交易;通过业务方App唤起迅雷链助手发起合约调用的交易。典型的第三方合约应用的调用流程如下(分为面向C端的调用和面向B端的运营调用):
6.1.1 唤起迅雷链助手方式调用合约
步骤如下:
- 第三方应用接受用户输入,启动合约调用流程
- 用户使用迅雷链链分配的service_id,到区块链后台请求,分配一个prepay_id。
- 后台收到请求后,产生一个prepay_id给第三方应用。
- 第三方应用打包交易,主要包括合约地址、gas_limit、转账金额、执行的函数和参数编码(data)、签名等信息。
- 唤醒迅雷链助手app,将交易信息发送给迅雷链助手。
- 迅雷链助手打包交易发送给区块链交易处理中心,同时将支付过程结果回调给第三方应用,最终交易转发给区块链处理。
- 区块链交易完成后将根据第三方请求信息的callback回调第三方后台。
- 第三方后台根据回调和prepayid交易查询,确认交易状态和合约数据,刷新应用交互数据(合约调用交互完成)。第三方应用可以同步数据到其后台服务。(第三方功能)
区块链后台将合约调用请求处理完后,如果用户有填写回调信息,回调中心通知第三方应用后台(参考 回调协议)。第三方应用界面会同第三方应用后台同步信息,展示交易后的结果。
例:从玩客云调用迅雷链助手
vchouyi://payment/?tx-data=ZGVzYz3nlLXlvbFYWFhYJnRvPTB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAmdmFsdWU9MTIzLjQwJmdhc2xpbWl0PTUwMDAwJmRhdGE9MHgwMTAyMDMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEmc2lnbj0wNEI3QTU1QzQ3NDQwRDk4NUE0NDgzNkZENTVFQkVCNw==&resource=d2t5&x-source=wky&callback=wky://x-callback-url/&cb-data=base64编码后的回调透传参数
具体解析
- 合约执行业务 vchouyi://payment
- 源app名字,resource=d2t5, 解码后是wky
- 源app回调前缀,x-source=wky
- callback=www.bai.com||schema://host/,app回调url或schema
- 回调时,直接回传 &cb-data=abcdefg
- 交易信息tx-data=ZGVzYz3nlLXlvbFYWFhYJnRvPTB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAmdmFsdWU9MTIzLjQwJmdhc2xpbWl0PTUwMDAwJmRhdGE9MHgwMTAyMDMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEmc2lnbj0wNEI3QTU1QzQ3NDQwRDk4NUE0NDgzNkZENTVFQkVCNw==
解码后包含如下信息
- 支付地址 &to=0x12345678901234567890
- 支付token数量 &value=123
- 最大支付费用 &gaslimit=50000
- 调用代码 &data=0x010203040000000000000000000000000000000000000000000000000000000000000001
- 用于标题 &desc=电影XXXX
- sign交易签名 &sign=04B7A55C47440D985A44836FD55EBEB7
APP回调返回
(http://www.xx.com|scheme://host)?hash=交易回执&msg=错误描述(base64)&code=错误码&cb-data=透传信息&result=(success|fail|cancel)
6.1.2 使用迅雷链助手扫描二维码调用合约
步骤如下:
- 第三方应用接受用户输入,启动合约调用流程
- 用户使用迅雷链分配的service_id,到区块链后台请求,分配一个prepay_id。
- 后台收到请求后,产生一个prepay_id给第三方应用。
- 第三方应用打包交易,主要包括合约地址、gas_limit、转账金额、执行的函数和参数编码(data)、签名等信息,按照规则拼接成tx-data。
- 第三方通过web服务接受url请求,请求链接返回上述生成的tx-data作为response.body,结构如下请求url返回的结构。
- 使用链接 http://fe-blockchain.xunlei.com/#/?action=**url** 生成二维码。
- 使用迅雷链助手扫描二维码。请求url返回的结构
{
"iRet":0,
"sMsg": "ok",
"data": {
"tx_data": ""
}
}