订阅业界RSS CSDN首页> 业界

干货 | 超详细讲解,初体验迅雷链部署应用

发表于2018-09-19 16:39| 来源互联网| 作者互联网

摘要:第一次知道迅雷链,觉得迅雷链是一个不错的选择。于是觉得可以在上面进行开发来进行应用.迅雷链提供测试的沙盒环境,官方文档写的也比较详细。但是自己在这个沙盒环境又做了相关的部署,调用那就提供一个教程吧。

第一次知道迅雷链,觉得迅雷链是一个不错的选择。于是觉得可以在上面进行开发来进行应用.迅雷链提供测试的沙盒环境,官方文档写的也比较详细。但是自己在这个沙盒环境又做了相关的部署,调用那就提供一个教程吧。

要用到测试环境,必须要准备好测试环境的东西,例如测试用的开发者账号,测试用的链克钱包。官方文档提供很多api来满足开发者的需要。要使用迅雷链开发自己的合约应用第一步就是注册开发者邮箱。

开发者如果要其app使用迅雷链开放平台的合约服务,只需进行构建url调用即可,通过官方文档可以看到相关的接口,例如,邮箱注册可以命令行curl命令,其中json的邮箱填自己的邮箱就可以了:

curl -H "Content-Type:application/json" -X POST -d 

'{"email":"1191094115@qq.com"}' https://sandbox-

walletapi.onethingpcs.com/api/linktest/email_code

如果邮箱还没注册,此时会返回:

{"code":0,"data":{},"msg":""}

同时,此时邮箱会收到一个邮件:

这只是在进行迅雷链开发的第一步。当然除了直接在命令行敲命令,也可以通过官方提供的一个api调用网页进行api调用。

网页地址:

https://thunderchain.docs.apiary.io/#reference/0

打开网页可以看到:

点击获取邮箱验证码就可以提供。

用网页进行api调用或者通过命令行进行调用就看自己的喜好吧。

点击获取邮箱验证码按钮:页面将会变化。


此时需要填入Body即可,其他选项URL Parameters,Headers可以不用管

填入之后,点击call Resource按钮,post请求就发送成功

此时会在respond窗口看到相关信息:

上面是熟悉了api基本调用操作,为了更简单描述整个流程,现在就完整地通过网页来部署,调用一个合约吧。 当然,实际应用是用开发者在其软件利用网络库进行api调用来实现合约的部署和调用的。

获取邮箱验证码之后,就可以进行注册邮箱了。

在之前网页点击开发者邮箱注册的regist按钮:可以看到

 

此时填入之前注册的email还有邮箱收到的验证码就可以了。

注册后可以得到邮件:

这就是之后进行合约各种操作的两个签名了。

要调用合约,得向迅雷链合约虚拟机提供燃料,这就是交易费,可以通过测试账号充值接口进行实现得到一些测试环境的token(该接口一天只能调用10次)。在这里可能有童鞋不明白合约开发者与迅雷链开发平台得调用逻辑逻辑,这里就列一下官方文档的流程图吧。

 

上图比较明了,需要明确:

首先链克口袋是整个合约调用不能脱离,口袋保存的链克私钥将签发交易,而其链克地址将作为合约运行的sender

所以,第一步是向测试用的链克口袋进行充值,充值的测试接口为:

https://sandbox-walletapi.onethingpcs.com/api/linktest/recharge

参数说明:


要充值,得先有一个链克地址,通过链克口袋生成一个账户。

 


构建json数据,该账户就是地址

而签名为:

md5(email=xxx&address=xxx&secret=xxx)

这里得xxx代替为个人得信息:如下图所示,个人信息已打马赛克了。通过这个可以得出签名,此时就可以调用api接口进行接口调用了

 


构建json如图所示:

 

 

其中一个开发者一天只能调用10次该接口调用完,进行刷新链克口袋:

 

此时1个链克已经到账!

有了链克后,就可以将自己的合约部署到迅雷链上了,要合约部署成功,就需要提供基本的gas。

正如上面的流程图一样,部署合约得先构建相应得json数据,并将其发送到

https://sandbox-walletapi.onethingpcs.com/api/linktest/contract/deploy接口

参数说明:

在准备好上面的东西之后,就可以开发并且部署合约了。合约得开发可以用truffle进行开发。


truffles开发一个Simplestorege合约,注意这里得bytecode16进制得数,如果合约引用了Library的合约,需要将Library合约部署迅雷链上,并将真正的合约的引用Library的字段改变为Library的地址。这样bytecode才是全为二进制通过truffle compile命令就可以获得build文件夹。在需要调用得合约中找到bytecode字段信息


这里的合约为:

pragma solidity ^0.4.21;

 contract SimpleStorage {

     uint myVariable;

 

     function set(uint x) public {

         myVariable = x;

     }

 

     function get() constant public returns (uint) {

         return myVariable;

     }

 }

之后构建sign

 

得到json:

{

    "email": "1191094115@qq.com",

    "bytecode": "0x608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820101eb74d2d65698a7fd1e63666842673ffb013a500c768f84643fc6b896519430029",

    "params": "",

    "sign": "0d0734ca430c7b79d332d700b0b44cd9"

}


得到结果:

 

获得id后就可以通过id来查询合约得地址了。

其请求信息是:

方法:POST
URL: /api/linktest/contract/address
BODY: JSON

参数说明:

参数名

参数类型

必须

说明

Email

string

测试使用的email,主要用于接收测试消息

Id

int

合约部署返回的id

Sign

string

签名md5(email=xxx&id=xxx&secret=xxx),   xxx填写请求的实际值


响应

参数名

参数类型

必须

说明

Code

int

错误码,0:成功 0:失败

Msg

string

错误提示信息

Data

object

请求返回数据


得出sign:

 


后面可以得出合约地址

 


得到合约地址后就可以进行合约调用。

 

 

根据上面的流程图可以知道如果要进行合约调用,要在第三方使用链克口袋要先获取prepay_id,这里展现一下第三方获取prepay_id的流程,但只是展示。


测试环境:

https://sandbox-walletapi.onethingpcs.com/getPrepayId


请求方式: post

在获取prepay_id时,其输入得私钥是之前邮件发过来的secret:

 


这样求得sign

因为参数相同,所以每一次该请求的json都相同,此时得到响应:


合约方法有两种,一种是constant方法,一个是需要gas的方法这次我们调用Simplestoregeget()方法。那么就需要满足:

方法:POST
URL: /call
BODY: JSON

参数说明:

 

params 详细

object 详细

object - 交易调用对象

其中data就是调用函数的一个hash字符串

其计算方法如下;

假设方法 function bar(fixed[2] x,bool y),其中x1y2

此时其计算出的data为:

1.bar(fixed[2],bool)ascii码进行sha3,并将其结果的16进制表示取前8

2.x的值转为uint32的数,将y的值转为uint32的数

3.12步骤得到的字符串进行拼凑得到data

可以得到get()sha3-256的值为

6d4ce63caa65600744ac797760560da39ebd16e8240936b51f53368ef9e0e01f

取其前8

因为没有参数,所以可以构建json

 

此时得到结果为

 

因为合约部署上去get方法得到的东西就是0,所以返回0

调用完constant方法,可以调用需要gas的方法了

这次调用set(uint x)函数因为虽写的是uint 但其会转化为uint256,所以

根据json格式,此时要得出set(uint256)sha3-256hash值并取其前8位:

cccdda2c

 

此时可以构造json。

 

同时我们使x256,我们算出十进制的25616进制为100,之后将100填充到32位得出

0x00000000000000000000000000000100

再拼凑得

0x60fe47b100000000000000000000000000000100

这个就是调用得data了。

这里得地址,可以直接选择链克口袋的回调地址。至于json中的gas_limit,可以通过这样的请求获得,当然要想合约成功,gas可以尽量大点。

 

得到返回得是一个16进制数,将其转为10进制即可。

 

转为10进制为:26477,而事实上,该合约用了41605,所以gas大点是没错得

构建json


得到结果:

 

此时获取得回调为链克口袋得回调url。将url转为二维码。

 

然后用链克口袋扫描:

如果成功:

 


如果合约执行成功

 

如果失败:这里我调用一个错误方法(构造错误的data

至此,一个合约调用的流程已经结束。

我们将合约的变量从0变为了256,那么现在通过get方法查看吧。

通过前面的constant方法此时响应为:psconstant方法也可以通过虚拟机用交易费来运行,但是没有这个必要。

将该16进制转为十进制,就为256了!

上面是初体验迅雷链部署合约的流程,希望能给后面的童鞋一些帮助^.^喜欢的同学。

 

【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及中文陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。凡注明为其他媒体来源的信息,均为转载自其他媒体,转载并不代表本网赞同其观点,也不代表本网对其真实性负责。您若对该稿件由任何怀疑或质疑,请即与CSDN联系,我们将迅速给您回应并做处理。】

 

 

0
0