第一次知道迅雷鏈,覺得迅雷鍊是一個不錯的選擇。於是覺得可以在上面進行開發來進行應用.迅雷鏈提供測試的沙盒環境,官方文檔寫的也比較詳細。但是自己在這個沙盒環境又做了相關的部署,調用那就提供一個教程吧。
要用到測試環境,必須要準備好測試環境的東西,例如測試用的開發者賬號,測試用的鏈克錢包。官方文檔提供很多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。
https://sandbox-walletapi.onethingpcs.com/api/linktest/contract/deploy接口
https://sandbox-walletapi.onethingpcs.com/api/linktest/contract/deploy接口
參數說明:
在準備好上面的東西之後,就可以開發並且部署合約了。合約得開發可以用truffle進行開發。
用truffles開發一個Simplestorege合約,注意這裡得bytecode為16進制得數,如果合約引用了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;
}
}
得到json:
得到json:
{
"email": "1191094115@qq.com",
"bytecode": "0x608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820101eb74d2d65698a7fd1e63666842673ffb013a500c768f84643fc6b896519430029",
"params": "",
"sign": "0d0734ca430c7b79d332d700b0b44cd9"
}
得到結果:
獲得id後就可以通過id來查詢合約得地址了。
方法:POST
方法:POST
URL: /api/linktest/contract/address
BODY: JSON
參數說明:
參數名
是
說明
說明
string
是
是
Id
int
是
是
Sign
string
是
簽名md5(email=xxx&id=xxx&secret=xxx), xxx填寫請求的實際值
響應
參數名
是
說明
說明
Code
int
是
是
Msg
string
是
否
Data
object
否
得出sign:
得出sign:
後面可以得出合約地址
得到合約地址後就可以進行合約調用。
根據上面的流程圖可以知道如果要進行合約調用,要在第三方使用鏈克口袋要先獲取prepay_id,這裡展現一下第三方獲取prepay_id的流程,但只是展示。
測試環境:
https://sandbox-walletapi.onethingpcs.com/getPrepayId
請求方式: post
在獲取prepay_id時,其輸入得私鑰是之前郵件發過來的secret:
這樣求得sign
因為參數相同,所以每一次該請求的json都相同,此時得到響應:
方法:POST
方法:POST
URL: /call
BODY: JSON
參數說明:
params 詳細
object 詳細
object - 交易調用對象
其中data就是調用函數的一個hash字符串
其計算方法如下;
假設方法function bar(fixed[2] x,bool y),其中x為1,y為2
此時其計算出的data為:
1.將bar(fixed[2],bool)的ascii碼進行sha3,並將其結果的16進製表示取前8位
2.將x的值轉為uint32的數,將y的值轉為uint32的數
3.將1,2步驟得到的字符串進行拼湊得到data
取其前8位
6d4ce63caa65600744ac797760560da39ebd16e8240936b51f53368ef9e0e01f
取其前8位
因為沒有參數,所以可以構建json
此時得到結果為
因為合約部署上去get方法得到的東西就是0,所以返回0。
調用完constant方法,可以調用需要gas的方法了
這次調用set(uint x)函數,因為雖寫的是uint 但其會轉化為uint256,所以
根據json格式,此時要得出set(uint256)的sha3-256的hash值並取其前8位:
cccdda2c
此時可以構造json。
同時我們使x為256,我們算出十進制的256的16進制為100,之後將100填充到32位得出
0x00000000000000000000000000000100
再拼湊得
0x60fe47b100000000000000000000000000000100
這個就是調用得data了。
這裡得地址,可以直接選擇鏈克口袋的回調地址。至於json中的gas_limit,可以通過這樣的請求獲得,當然要想合約成功,gas可以盡量大點。
得到返回得是一個16進制數,將其轉為10進制即可。
轉為10進制為:26477,而事實上,該合約用了41605,所以gas大點是沒錯得
構建json
得到結果:
此時獲取得回調為鏈克口袋得回調url。將url轉為二維碼。
如果成功:
如果成功:
如果合約執行成功
如果失敗:這裡我調用一個錯誤方法(構造錯誤的data)
至此,一個合約調用的流程已經結束。
我們將合約的變量從0變為了256,那麼現在通過get方法查看吧。
通過前面的constant方法此時響應為:ps對constant方法也可以通過虛擬機用交易費來運行,但是沒有這個必要。
將該16進制轉為十進制,就為256了!
上面是初體驗迅雷鏈部署合約的流程,希望能給後面的童鞋一些幫助^.^喜歡的同學。
