迅雷链开放平台链克兑换开发指南

新手指南

1.1 迅雷链介绍

1.1.1 什么是迅雷链?

迅雷链(ThunderChain)是迅雷旗下网心科技创新打造了具备百万tps高并发、秒级确认能力的高性能区块链,并在此基础上,搭建了迅雷链开放平台,助力开发者快速开发、部署智能合约,企业或个人可以轻松将自己的产品和服务上链,更加便捷地开发区块链应用。

1.1.2 什么是迅雷链开放平台?

迅雷链开放平台是网心科技基于“迅雷链”倾力打造的区块链服务开放平台。开放迅雷十余年的分布式技术沉淀和上亿用户基础,共享链克生态数百万活跃人群,以高起点领跑行业,共同构建全球领先的区块链生态。

1.1.3 什么是链克兑换?

让链克口袋用户通过扫一扫或者在商户APP中跳转的方式,调起链克口袋兑换模块,轻松兑换相应服务。

1.1.4 什么是合约开放平台?

基于迅雷链,提供稳定、快速、低成本的智能合约区块链服务,支持金融、电商、游戏、社交等各种行业应用场景。助力开发者快速部署智能合约,企业可以轻松将自己的产品和服务上链,更加便捷地开发区块链应用。

1.2 如何注册账号及认证

1.2.1 用户注册登录

个人或者企业开发者要使用链克兑换、智能合约功能前,必须先注册为平台的用户。手机号码是用户唯一标识。注册成功后,可以绑定邮箱。登录

注册流程如下:

用户注册流程

1.2.2 邮箱绑定

绑定邮箱后,方便接收消息通知,方便与官方联系。在忘记密码的情况下,可以通过邮箱重置密码。立即绑定

1.2.3 忘记密码

用户忘记密码后,无法登陆系统。可以通过手机号或者邮箱地址重置密码。

通过手机号验证重置密码

通过邮箱验证重置密码

1.2.4 个人认证

个人开发者要提交合约或者使用链克兑换功能,必须先进行个人信息认证。在进行个人认证前,请先注册为平台用户。请准备好身份证,以及身份证正反面照片(必须包含本人头像,照片清晰)。

立即认证

1.2.5 企业认证

企业开发者需要进行企业认证,认证信息包括企业名称、营业执照扫描件、法人代表身份证扫描件或者授权书扫描件。企业认证通过后,可以进行链克兑换、智能合约功能使用。

立即认证

1.3 如何创建应用

链克兑换、智能合约是和应用关联的,在使用这些功能之前,必须创建一个应用,否则不能使用这些功能。用户需要将应用信息提交开放平台审核。
应用分为两种类型,移动应用和web应用。移动应用需要提供可下载或验证的软件包。web应用必须提供可访问的网址以及网站注册信息。

创建移动应用

创建web应用

1.4 如何接入合约开放平台

1.4.1 如何接入测试环境

平台方提供一个独立运行的沙盒区块链环境,用于开发者的合约测试和调试。

  1. 注册开发者账号
  • 开发者根据测试接入API调用 开发者注册 接口。
  • 测试平台根据开发者接口提交的邮箱地址(必须)和回调地址(非必须),向开发者邮箱发送一份邮件,内含servce_id和secret。
  • 后续所有的测试接口请求,都需要带上此邮箱地址以及由邮箱地址、service_id和secret拼接字符串的md5值。测试平台的所有接口都将校验此md5。
  • 此接口不提供额外查询功能,如开发者信息遗失,需走客服流程找回。
  1. 调用充值接口
  • 开发者根据测试接入API调用 测试账号充值 接口。
  • 调用充值接口成功后,测试平台会向接口所提交的address账户转入1个链克。
  • 测试平台的区块链环境完全独立,所以此测试链克只能用于测试环境,转入其他区块链环境无效。
  • 每个email地址每天最多发起10此转账申请。
  1. 开发合约应用和上层业务
  • 开发者开发合约应用,并通过上层业务(App, H5等实现)功能封装对合约的调用。
  • 合约的开发可参考《迅雷区块链大赛合约开发指南》。
  1. 部署合约到迅雷链测试环境
  • 迅雷链测试和正式环境不提供直接RPC连接执行合约发送交易的过程,合约的发布和调用都需要通过调用API接口实现。
  • 开发者通过调用合约发布接口,部署合约到迅雷链测试环境。
  • 由于合约的部署是由平台方执行的,所以在合约的constructor方法里,避免使用msg.sender,如有权限和调用者限制需用到msg.sender,可通过参数传入用户的address代替。

例:

contract HelloWorld {
  address owner;
  constructor(address ownerArg) public {
    //owner = msg.sender; 使用ownerArg代替msg.sender
    owner = ownerArg;
  }
}
  • 发布合约API接口需要提供合约bytecode和params,byetecode为合约编译的bytecode,params是构造函数的参数经过sign后可直接拼接在bytecode后用于部署的编码。 这里可以使用 remix create合约,控制台里的这一条交易的detail里input即合约部署的data。但为了兼容测试环境和正式环境的输入,需要将input里的合约bytecode和最后的params sign分开传入。 constructor
  1. 调用合约方法

合约调用当前分为两种形式:通过链克口袋App扫描二维码发送合约调用的交易;通过业务方App唤起链克口袋发起合约调用的交易。

测试环境链克口袋下载地址 https://www.pgyer.com/ALuZ

  1. 唤起链克口袋

根据API实现业务APP唤起链克口袋,并传入合约调用的交易。

从玩客云App调用链克口袋

otst://contract/?tx-data=ZGVzYz3nlLXlvbFYWFhYJnRvPTB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAmdmFsdWU9MTIzLjQwJmdhc2xpbWl0PTUwMDAwJmRhdGE9MHgwMTAyMDMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEmc2lnbj0wNEI3QTU1QzQ3NDQwRDk4NUE0NDgzNkZENTVFQkVCNw==&resource=d2t5&x-source=wky&x-success=wky://x-callback-url/contractSuccess&x-error=wky://x-callback-url/contractError&x-cancel=wky://x-callback-url/contractCancel&&cb-data=base64编码后的回调透传参数

具体解析

  • 合约执行业务 otst://contract
  • 源app名字,resource=d2t5, 解码后是wky
  • 源app回调前缀,x-source=wky
  • 成功回调 &x-success=wky://x-callback-url/contractSuccess
  • 失败回调 &x-error=wky://x-callback-url/contractError
  • 取消回调 &x-cancel=wky://x-callback-url/contractCancel
  • 回调时,直接回传 &cb-data=abcdefg
  • 交易信息tx-data=ZGVzYz3nlLXlvbFYWFhYJnRvPTB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAmdmFsdWU9MTIzLjQwJmdhc2xpbWl0PTUwMDAwJmRhdGE9MHgwMTAyMDMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEmc2lnbj0wNEI3QTU1QzQ3NDQwRDk4NUE0NDgzNkZENTVFQkVCNw==

解码后包含如下信息

  • 支付地址 &to=0x12345678901234567890
  • 支付链克数量 &value=123.4
  • 最大支付费用 &gaslimit=50000
  • 调用代码 &data=0x010203040000000000000000000000000000000000000000000000000000000000000001
  • 用于标题 &desc=电影XXXX
  • sign交易签名 &sign=04B7A55C47440D985A44836FD55EBEB7

返回(成功)

wky://x-callback-url/contractSuccess?cb-data=abcdefg&hash=0x12345678901234567890123456789012&data=base64编码后的回调透传参数

返回(失败)

wky://x-callback-url/contractError?x-source=otc&errorCode=1&errorMessage=message&data=base64编码后的回调透传参数

返回(取消)

wky://x-callback-url/contractCancel?x-source=otc&data=base64编码后的回调透传参数

  1. 合约调用

合约调用指需要改变合约状态的函数调用,执行函数的同时也可以转账到合约账户。用户界面输入用户请求后,触发合约调用。 contract_interactive 步骤如下:

  • 第三方应用接受用户输入,启动合约调用流程
  • 用户使用链克区块链分配的service_id,到区块链后台请求,分配一个prepay_id。
  • 后台收到请求后,产生一个prepay_id给第三方应用。
  • 第三方应用打包交易,主要包括合约地址、gas_limit、转账金额、执行的函数和参数编码(ABI)、签名等信息。
  • 唤醒链克口袋app,将交易信息发送给链克口袋。
  • 链克口袋打包交易发送给区块链交易处理中心,最终交易转发给区块链服务器处理。
  • 返回请求结果给链克口袋。
  • 链克口袋将结果通知给第三方APP。(合约调用交互完成)

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

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

  1. 查询 constant 合约方法

查询合约constant状态和方法,不消耗gas,使用eth_call API方法直接调用。

curl -k -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{"from":"0x7eff122b94897ea5b0e2a9abf47b86337fafebdc","to":"0xe0e39a57a044451a00e4c73a2ea6bf83bd229a68","data":"0xb0f0c96a0000000000000000000000000000000000000000000000000000000000000005"}, "latest"],"id":1}' https://sandbox-walletapi.onethingpcs.com/call
{"jsonrpc":"2.0","id":1,"result":"0x0000000000000000000000007eff122b94897ea5b0e2a9abf47b86337fafebdc0000000000000000000000000000000000000000000000000000000000000005"}

参数说明

to: 部署合约成功之后,获得的合约地址

data: 计算方法

abi=[{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"uint256"}],"name":"hello","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

ctx=eth.contract(abi).at('0xc197e61edcbccc4bf7a0f76250ca7246de03e773')

ctx.hello.getData.call(null, 5, {from:from})
"0xb0f0c96a0000000000000000000000000000000000000000000000000000000000000005"
  1. 查询合约地址

参考测试环境API文档

2.3.2 如何接入正式环境

在接入正式环境之前,需要将合约在测试环境部署并经过完善的功能测试,才能提交正式环境的审核。 提交开放平台正式审核时,需要提交合约在测试环境的地址,平台方将根据测试环境的合约bytecode与提交到正式环境的bytecode做校验审核。

提交(创建)合约

  • 接入正式环境时,平台方将审核合约应用的App或Web应用,并检查合约代码是否符合平台使用规范。

  • 若合约审核未通过,将在合约列表里展示对应的合约状态,并通过邮件通知开发者。用户的修改需要通过测试环境的重新部署调试才能提交到正式环境。

  • 若合约审核通过,开发者可选择将合约正式发布上架,上架后将生成正式环境的合约地址。

  • 正式环境的合约执行调用和查询与测试环境方法一致,域名不同。

  • 提交正式环境 truffle 工程基本文件结构:

      build
      contracts
      migrations
      test
      package.json
      truffle.js
      truffle-config.js
      README.md // 工程文档说明
      不需要node_modules

1.5 如何接入链克兑换

链克兑换开发指南