手擼一款第三方鏈克錢包

很久沒更新博客了。主要是最近在研究區塊鏈技術(炒幣),固然也成爲了一個小礦工,挖迅雷的玩客幣。不過前不久,迅雷宣佈將中止國內轉帳,而在31號的時候,大陸ip就沒法進行轉帳。嗨呀我這個暴脾氣啊。不讓轉那我就只能分析下錢包了java

更多精彩文章請關注:www.wrbug.comgit

鏈克介紹

鏈克(英文名LinkToken)(原來叫玩客幣)是玩客雲共享計算生態下的基於區塊鏈技術的原生數字資產,它的產生過程與玩客雲智能硬件、共享CDN的經濟應用有強關聯,必須經過玩客雲智能硬件分享網絡帶寬、存儲空間等資源來得到。在玩客雲共享計算生態系統中,它將成爲用戶交換可共享計算資源的媒介,保證用戶的權益和提供的計算資源對等。github

鏈克是基於以太坊的一種代幣,交易相關的和以太坊相似,只是鏈克並不在以太坊公鏈上。因此沒法使用以太坊的協議進行轉帳,經過抓包發現鏈克使用迅雷自有的服務器轉帳,可是協議和以太坊類似,算法也基本一致,本文只簡單分析流程。算法使用以太坊的開源庫。想更深刻了解,能夠研究以太坊的協議算法

給你們推薦一個視頻。很好的介紹了區塊鏈,看過了就很好理解下面的加密了json

前往觀看api

開源項目

github.com/WrBug/wkcwa…bash

後面的算法將結合這個項目服務器

START

轉帳流程

轉帳分析

轉帳須要錢包文件,錢包密碼,轉帳地址和轉帳數量 轉帳前,須要對錢包文件進行解密,密碼錯誤沒法獲取。解密成功,獲取到wallet對象。網絡

wallet = CommonWallet.fromV3(keystore, password);
複製代碼

鏈克錢包使用的是v3版本,獲取成功後,請求獲取交易次數的接口,獲取到該錢包地址的交易次數,將交易次數+1做爲加密的一個參數,代碼中參數爲 txInd ,接下來獲取gas和gasLimit,在鏈克轉帳中。這兩個爲固定參數app

BigInteger gasLimit = new BigInteger("186a0", 16);
BigInteger gasPrice = new BigInteger("174876e800", 16);
複製代碼

其餘幣種能夠經過 eth_gasPrice 接口獲取,通常狀況gas跟轉帳速度有直接關係。而後將轉帳數量進行一次轉換

BigInteger amount = Unit.valueOf(Unit.ether.toString()).toWei(String.valueOf(tradeAmount));
複製代碼

獲取到這些參數後。須要對其進行加密。獲取到Transaction的一個對象,並用wallet進行簽名

Transaction tx = Transaction.create(toAddress.replace("0x", ""), amount, nonce, gasPrice, gasLimit, null);
tx.sign(wallet);
byte[] encoded = tx.getEncoded();
複製代碼

最後調用tx.getEncoded方法獲取到加密的hash,請求服務器進行支付便可

[附錄]鏈克協議

鏈克餘額

請求地址

https://walletapi.onethingpcs.com

Method

POST

Header

Content-Type:application/json

Body
{
	"jsonrpc": "2.0",
	"method": "eth_getBalance",
	"params": ["0xe6637d20b74b7cce17d8eacf8516e85ee646fe74", "latest"],
	"id": 1
}
//0xe6637d20b74b7cce17d8eacf8516e85ee646fe74 爲錢包地址
複製代碼
Response
{
	"jsonrpc": "2.0",
	"id": 1,
	"result": "0x0"
}
//result 爲16進制餘額,須要處理,祥見代碼
複製代碼

鏈克交易記錄

請求地址

https://walletapi.onethingpcs.com

Method

POST

Header

Content-Type:application/json

Body
["0xe6637d20b74b7cce17d8eacf8516e85ee646fe74", "0", "0", "1", "10"]
//0xe6637d20b74b7cce17d8eacf8516e85ee646fe74 爲錢包地址
複製代碼
Response
{
	"totalnum": 73646,
	"result": [{
		"timestamp": "1517381448",
		"type": 1,
		"tradeAccount": "0x625251ec47f46e35edb1c2dde31c1711d7c3e4ce",
		"amount": "0xa80d24677efef00000",
		"cost": "0x0",
		"hash": "0x5c9d52cba04dce07fa7fe63a9d7c1fd50bf0f72392309fb1d44dd9a3de4797a7",
		"title": "",
		"extra": "",
		"order_id": "20180131145048tppfbj0qty8odx5v"
	}]
}
//result 爲每條交易記錄
複製代碼

鏈克交易次數

請求地址

https://walletapi.onethingpcs.com

Method

POST

Header

Content-Type:application/json

Body
{
	"jsonrpc": "2.0",
	"method": "eth_getTransactionCount",
	"params": ["0xe6637d20b74b7cce17d8eacf8516e85ee646fe74", "pending"],
	"id": 1
}
//0xe6637d20b74b7cce17d8eacf8516e85ee646fe74 爲錢包地址
複製代碼
Response
{
	"jsonrpc": "2.0",
	"id": 1,
	"result": "0x9"
}
複製代碼

發起一次交易

請求地址

https://walletapi.onethingpcs.com

Method

POST

Header

Content-Type: application/json NC: IN

Body
{
	"jsonrpc": "2.0",
	"method": "eth_sendRawTransaction",
	"params": ["0xf86d0985174876e...c3a7753869946bfe21ef822ee72d3a8218d4"],
	"id": 1,
	"Nc": "IN"
}
//0xf86d0985174876e...c3a7753869946bfe21ef822ee72d3a8218d4 一次交易的hash複製代碼
Response
{
	"jsonrpc": "2.0",
	"id": 1,
	"result": "0x****"
}

//成功後返回 交易成功的hash複製代碼
相關文章
相關標籤/搜索