6.1 调用合约方法

合约调用指需要改变合约状态的函数调用,执行函数的同时也可以转账到合约账户。用户界面输入用户请求后,触发合约调用。
合约调用当前分为两种形式:通过迅雷链助手App扫描二维码发送合约调用的交易;通过业务方App唤起迅雷链助手发起合约调用的交易。  典型的第三方合约应用的调用流程如下(分为面向C端的调用和面向B端的运营调用):
contract_interactive

contract_interactive

测试环境迅雷链助手下载地址

6.1.1 唤起迅雷链助手方式调用合约

步骤如下:

  1. 第三方应用接受用户输入,启动合约调用流程
  2. 用户使用迅雷链链分配的service_id,到区块链后台请求,分配一个prepay_id。
  3. 后台收到请求后,产生一个prepay_id给第三方应用。
  4. 第三方应用打包交易,主要包括合约地址、gas_limit、转账金额、执行的函数和参数编码(data)、签名等信息。
  5. 唤醒迅雷链助手app,将交易信息发送给迅雷链助手。
  6. 迅雷链助手打包交易发送给区块链交易处理中心,同时将支付过程结果回调给第三方应用,最终交易转发给区块链处理。
  7. 区块链交易完成后将根据第三方请求信息的callback回调第三方后台。
  8. 第三方后台根据回调和prepayid交易查询,确认交易状态和合约数据,刷新应用交互数据(合约调用交互完成)。

第三方应用可以同步数据到其后台服务。(第三方功能)

区块链后台将合约调用请求处理完后,如果用户有填写回调信息,回调中心通知第三方应用后台(参考 回调协议)。第三方应用界面会同第三方应用后台同步信息,展示交易后的结果。

例:从玩客云调用迅雷链助手

  1. 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回调返回

  1. (http://www.xx.com|scheme://host)?hash=交易回执&msg=错误描述(base64)&code=错误码&cb-data=透传信息&result=(success|fail|cancel)

6.1.2 使用迅雷链助手扫描二维码调用合约

步骤如下:

  1. 第三方应用接受用户输入,启动合约调用流程
  2. 用户使用迅雷链分配的service_id,到区块链后台请求,分配一个prepay_id。
  3. 后台收到请求后,产生一个prepay_id给第三方应用。
  4. 第三方应用打包交易,主要包括合约地址、gas_limit、转账金额、执行的函数和参数编码(data)、签名等信息,按照规则拼接成tx-data。
  5. 第三方通过web服务接受url请求,请求链接返回上述生成的tx-data作为response.body,结构如下请求url返回的结构
  6. 使用链接 http://fe-blockchain.xunlei.com/#/?action=**url** 生成二维码。
  7. 使用迅雷链助手扫描二维码。

请求url返回的结构

  1. {
  2. "iRet":0,
  3. "sMsg": "ok",
  4. "data": {
  5. "tx_data": ""
  6. }
  7. }