摘要:交易所及第三方平臺充提網(wǎng)關(guān)接入指南本指南主要目的是幫助交易所和其它第三方平臺包括但不限于非應(yīng)用中心化應(yīng)用等搭建充提網(wǎng)關(guān)接入主網(wǎng),上線主資產(chǎn)及基于區(qū)塊鏈發(fā)行的,例如等?;驹泶蟛糠纸灰姿暗谌狡脚_使用的網(wǎng)關(guān)充值提現(xiàn)是一個中心化的應(yīng)用服務(wù)。
SEER交易所及第三方平臺充提網(wǎng)關(guān)接入指南
本指南主要目的是幫助交易所和其它第三方平臺(包括但不限于非SEER DAPPs應(yīng)用、中心化應(yīng)用等)搭建充提網(wǎng)關(guān)接入SEER主網(wǎng),上線SEER主資產(chǎn)及基于SEER區(qū)塊鏈發(fā)行的token,例如PFC、OPC等。
使用SEER主網(wǎng)進(jìn)行充提等操作,手續(xù)費(fèi)遠(yuǎn)遠(yuǎn)低于SEER的ERC-20token和BTS資產(chǎn),且不受以太坊擁堵等事件的影響。
基本原理大部分交易所及第三方平臺使用的網(wǎng)關(guān)(充值提現(xiàn))是一個中心化的應(yīng)用服務(wù)。
以交易所充提為例,交易所為每位用戶提供有一個平臺id,任何用戶向交易所的SEER主網(wǎng)賬戶轉(zhuǎn)賬,并在MEMO中填寫該id,當(dāng)交易所的SEER主網(wǎng)賬戶收到一筆轉(zhuǎn)賬時(shí),可以根據(jù)MEMO中填寫的信息確定是來自哪位用戶的充值,從而在交易所平臺內(nèi)為用戶上賬。
舉例:
1、小明從自己的SEER主網(wǎng)賬戶xiaoming充值1000SEER到交易所賬戶seerdex,MEMO中填寫10010,交易所檢測到主網(wǎng)賬戶seerdex收到一筆1000SEER的轉(zhuǎn)賬,MEMO為10010,則在小明的交易所賬戶10010中上賬1000SEER;
2、小明請朋友小花幫自己充值,小花從自己的SEER主網(wǎng)賬戶xiaohua充值1000SEER到交易所賬戶seerdex,MEMO中填寫10010,交易所檢測到主網(wǎng)賬戶seerdex收到一筆1000SEER的轉(zhuǎn)賬,MEMO為10010,則在小明的交易所賬戶10010中上賬1000SEER;
3、小明將自己玩大富翁游戲中贏得的SEER充值交易所,小明在大富翁游戲的提現(xiàn)頁面中填寫提現(xiàn)1000SEER到交易所賬戶seerdex,并填寫MEMO10010,大富翁游戲在平臺內(nèi)扣除小明賬戶余額1000SEER,同時(shí)通過大富翁的SEER主網(wǎng)賬戶dafuweng向交易所賬戶seerdex轉(zhuǎn)賬1000SEER,MEMO為10010,交易所檢測到主網(wǎng)賬戶seerdex收到一筆1000SEER的轉(zhuǎn)賬,MEMO為10010,則在小明的交易所賬戶10010中上賬1000SEER。
例子3中,我們舉例了用戶從第三方平臺提現(xiàn)到交易所的流程,從交易所提現(xiàn)到另一家交易所也是如此,這就需要交易所及第三方平臺在設(shè)計(jì)提現(xiàn)功能時(shí)提供MEMO功能。為了資金安全,您可以部署兩個或多個賬號,其中一個賬號負(fù)責(zé)用戶充值,其它賬號負(fù)責(zé)提現(xiàn)。
準(zhǔn)備工作 運(yùn)行環(huán)境推薦服務(wù)器配置為:2vCPUs 4G內(nèi)存 20G以上硬盤,Ubuntu 16.04.4 x64 系統(tǒng)。
獲得賬號及私鑰 注冊賬號您可以通過SEER網(wǎng)頁錢包 https://wallet.seer.best 注冊賬號,其中賬號中帶有橫杠或數(shù)字的賬號為普通賬號名,可以直接免費(fèi)注冊(點(diǎn)擊了解方法) ,例如seer-exchange或seerdex01 ,而由純英文字母構(gòu)成的賬號名為高級用戶名,例如seerdex,則需通過一個終身會員賬戶繳納注冊手續(xù)費(fèi)來注冊。
獲得私鑰在充提網(wǎng)關(guān)等功能中,我們需要賬戶的至少兩對密鑰,即當(dāng)前資金密鑰(Active key)和當(dāng)前備注密鑰(memo key),資金密鑰讓您擁有資金的轉(zhuǎn)賬及其他鏈上操作權(quán)限,備注密鑰讓您能生成和讀取和該賬號相關(guān)的MEMO信息。點(diǎn)擊這里了解獲取私鑰的方法 。
配置一個SEER全節(jié)點(diǎn)1、在服務(wù)器新建一個名叫seer的窗口;
screen -S seer
2、在root目錄下新建一個名叫seer的目錄,下載v0.0.5版本的程序包到此目錄,并更名為seer.tar.gz。(請到SEER軟件發(fā)布頁https://github.com/seer-proje... 復(fù)制最新的ubuntu版本程序包鏈接替換掉此下載鏈接。)
mkdir seer curl -Lo seer/seer.tar.gz https://github.com/seer-project/seer-core-package/releases/download/v0.05/seer-ubuntu-0.0.5.tar.gz
3、進(jìn)入seer目錄,解壓此軟件包。
cd seer tar xzvf seer.tar.gz
4、帶websocket參數(shù)啟動witness_node:
witness_node --rpc-endpoint=127.0.0.1:9090 partial-operations=true --track-account=""seerdex-withdraw"" --track-account=""seerdex-deposit"" max-ops-per-account=1000
其中的--rpc-endpoint參數(shù)為節(jié)點(diǎn)監(jiān)聽的websocket RPC IP地址和端口號,需要您替換,此處127.0.0.1為本機(jī),9090是為節(jié)點(diǎn)指定的WS端口。
對于處理充提業(yè)務(wù)的節(jié)點(diǎn),我們并不需要保存全部數(shù)據(jù),僅需要保存和交易所賬戶相關(guān)的賬戶數(shù)據(jù)以節(jié)省內(nèi)存開支,因此我們需要設(shè)置partial-operations參數(shù)和--track-account參數(shù),此處partial-operations=true 表示只需要部分的數(shù)據(jù),""seerdex-withdraw""和""seerdex-deposit"" 表示要追蹤的一個或多個賬戶id,需要您替換。
--max-ops-per-account參數(shù)設(shè)定內(nèi)存中保留賬戶的多少條操作記錄,此處1000表示保留追蹤賬戶的1000條操作記錄,需要您按需求填寫。
5、觀察節(jié)點(diǎn)運(yùn)行正常后,ctrl+A d隱藏screen,斷開服務(wù)器。之后要再打開運(yùn)行有節(jié)點(diǎn)的Sreeen,則使用 screen -R ,或 screen -r seer。
節(jié)點(diǎn)正常啟動后,會顯示像下面一樣的3秒一個的出塊信息。
如果要關(guān)閉節(jié)點(diǎn),則使用control + C 。
配置一個SEER命令行錢包1、在服務(wù)器新建一個名叫cli的窗口,運(yùn)行seer目錄中的命令行錢包程序;
screen -S cli cd~ seer/cli_wallet -s ws://127.0.0.1:9090 -r 127.0.0.1:9191 -H 127.0.0.1:9192
-s參數(shù)可以設(shè)置要連接的節(jié)點(diǎn)api地址及端口,此處ws://127.0.0.1:9090為上一步中運(yùn)行的本地節(jié)點(diǎn)的websocket RPC地址和端口,您也可以在此處使用局域網(wǎng)或公網(wǎng)中的其他公共api地址,不過有因外部api無法提供服務(wù)而導(dǎo)致命令行錢包異常退出的風(fēng)險(xiǎn);
-r參數(shù)可以設(shè)置命令行錢包要監(jiān)聽的websocket RPC地址和端口,此處設(shè)為127.0.0.1:9191,負(fù)責(zé)充提業(yè)務(wù)的程序可以使用此端口調(diào)用命令行錢包進(jìn)行操作;
-H參數(shù)可以設(shè)置命令行錢包要監(jiān)聽的Http-RPC地址和端口,此處設(shè)為127.0.0.1:9192,負(fù)責(zé)充提業(yè)務(wù)的程序也可以使用此端口調(diào)用命令行錢包進(jìn)行操作。
2、錢包啟動成功后,會顯示:
Please use the set_password method to initialize a new wallet before continuing 3564395ms th_a main.cpp:227 main ] Listening for incoming RPC requests on 127.0.0.1:9191 3564396ms th_a main.cpp:252 main ] Listening for incoming HTTP RPC requests on 127.0.0.1:9192 new >>>
先設(shè)置錢包解鎖密碼,123替換為你想設(shè)置的密碼
set_password 123
解鎖錢包
unlock 123
導(dǎo)入賬號資金私鑰和備注私鑰
import_key seerdex-withdraw 5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ import_key seerdex-withdraw 5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd
顯示如下:
new >>> set_password 123 set_password 123 null locked >>> unlock 123 unlock 123 null unlocked >>> import_key seerdex-withdraw 5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ import_key okok 5JkbV8aTaYRVaarTUJQ9Y56cr4QajxNFfCoQj6Q9JFL8XvUZ5CQ 3572083ms th_a wallet.cpp:793 save_wallet_file ] saving wallet to file wallet.json 3572084ms th_a wallet.cpp:467 copy_wallet_file ] backing up wallet wallet.json to after-import-key-1cd0784e.wallet true unlocked >>> import_key seerdex-withdraw 5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd import_key else 5KiSC6rRAEkTj72fg3G3zF8RHmCEgZw7aSXBjKqDfvY2XN1qvyd 3572941ms th_a wallet.cpp:467 copy_wallet_file ] backing up wallet wallet.json to before-import-key-1bece5d8.wallet 3573189ms th_a wallet.cpp:793 save_wallet_file ] saving wallet to file wallet.json 3573191ms th_a wallet.cpp:467 copy_wallet_file ] backing up wallet wallet.json to after-import-key-1bece5d8.wallet true unlocked >>>接入命令行錢包
可以使用Http-RPC或websocket RPC方式接入命令行錢包。使用JSON-RPC遠(yuǎn)程調(diào)用協(xié)議傳入相應(yīng)的指令,即可讓命令行錢包進(jìn)行相關(guān)操作或返回需要的信息。
格式如下(實(shí)際使用時(shí)不換行無注釋):
{ "jsonrpc" : 2.0,//定義JSON-RPC版本 "method" : "get_block",//調(diào)用的方法名,例如轉(zhuǎn)賬 transfer ,列出賬戶余額 list_account_balances 等,此處get_block為返回指令塊號的區(qū)塊信息 "params" : [1], //方法傳入的參數(shù),若無參數(shù)則為null,此處1表示塊號 "id" : 1//調(diào)用標(biāo)識符 }Http-RPC接入示例
可以使用curl命令來測試Http-RPC連接命令行錢包實(shí)現(xiàn)獲取指定賬戶的各資產(chǎn)余額:
curl http://127.0.0.1:9192 -d "{"jsonrpc": "2.0", "method": "list_account_balances", "params": ["seerdex-withdraw"], "id": 1}" {"id":1,"result":[{"amount":"7861151753754","asset_id":"1.3.0"},{"amount":97099800,"asset_id":"1.3.8"}]}websocket RPC接入示例
首先在服務(wù)器上安裝使用wscat測試ws:
apt install node-ws
測試通過websocket RPC連接命令行錢包實(shí)現(xiàn)一筆轉(zhuǎn)賬:
wscat -c ws://127.0.0.1:9191 > {"jsonrpc": "2.0", "method": "transfer", "params": ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true], "id": 1} < {"id":1,"jsonrpc":"2.0","result":{"ref_block_num":64292,"ref_block_prefix":1517346144,"expiration":"2018-10-12T07:33:12","operations":[[0,{"fee":{"amount":2136718,"asset_id":"1.3.0"},"from":"1.2.105","to":"1.2.138","amount":{"amount":"50000000000","asset_id":"1.3.0"},"memo":{"from":"SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH","to":"SEER6QbqUZF6xzjdceVoLHS7K1KwvLyszVTZS8bbsQQQXcAm8L3aZp","nonce":"4469110159915322318","message":"482a7d070d298fe2a79d5f528f55778c62584d242274a7d697dae1ec63d7038b5a0b80dc9ba524e3f5f528bc717c60a635f89ff8af1cccbd1b4189f8ddc92e39"},"extensions":[]}]],"extensions":[],"signatures":["204e8746aac14a05fb3c66ac653429dead34bddac58911c53346feb365f0c7b5767ea870c1e5da6a104d8364e42f504fc1bdcfc442652f5c2e9bb9b26a858b0ccd"]}}
切換回命令行錢包所在窗口,可以看到錢包內(nèi)有如下信息:
2230368ms th_a websocket_api.cpp:109 on_message ] API call execution time limit exceeded. method: transfer params: ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true] time: 2310335
實(shí)現(xiàn)了讓錢包進(jìn)行了一次轉(zhuǎn)賬操作。
常用指令 get_dynamic_global_properties作用:列出鏈的當(dāng)前全局動態(tài)參數(shù)
示例:{"jsonrpc": "2.0", "method": "get_dynamic_global_properties", "params": [], "id": 1}
返回信息示例:
{ "id": 1, "result": { "id": "2.1.0", "head_block_number": 3678309,//當(dāng)前區(qū)塊高度 "head_block_id": "00382065d1057b13415518f913ce26e46fe45cac",//當(dāng)前塊號 "time": "2018-10-12T16:37:30",//鏈上時(shí)間(格林尼治時(shí)間) "current_witness": "1.5.4",//當(dāng)前出塊的見證人 "next_maintenance_time": "2018-10-13T00:00:00",//下次維護(hù)更新時(shí)間 "last_budget_time": "2018-10-12T00:00:00",//上次維護(hù)時(shí)間 "witness_budget": 3398400000,//本期見證人預(yù)算總額 "accounts_registered_this_interval": 1,//賬戶注冊間隔 "recently_missed_count": 0,//最近缺失區(qū)塊數(shù) "current_aslot": 4762199,//當(dāng)前總塊(丟掉的塊加實(shí)際塊高) "recent_slots_filled": "340240787892099949526793007880921399231",//用于計(jì)算見證人參與度的參數(shù) "dynamic_flags": 0, "last_irreversible_block_num": 3678305//最近一個不可逆塊塊號 } }
充提業(yè)務(wù)需關(guān)注 head_block_number 當(dāng)前區(qū)塊高度, last_irreversible_block_num 最近一個不可逆塊塊號。用于判斷是否是可信充值操作以及提現(xiàn)是否已處理。
info作用:顯示當(dāng)前Seer區(qū)塊鏈的狀態(tài)
示例:{"jsonrpc": "2.0", "method": "info", "params": [], "id": 1}
返回信息示例:
{"id":1, "result": { "head_block_num":3678258,//當(dāng)前塊高 "head_block_id":"00382032d0bfee243b0c5f6b37e3fd6f29682e6e",//當(dāng)前塊號 "head_block_age":"0 second old",//上一個區(qū)塊生成時(shí)間 "next_maintenance_time":"7 hours in the future",//維護(hù)更新時(shí)間 "chain_id":"da68a9c5f2fd9ed48e626ea301db1c77505523884ba0dd409e779246c6ea26cf",//鏈號 "participation":"88.28125000000000000",//區(qū)塊生產(chǎn)參與率 "active_witnesses"://活躍見證人ID ["1.5.1","1.5.2","1.5.3","1.5.4","1.5.5","1.5.6","1.5.7","1.5.8"], "active_committee_members"://活躍理事會成員ID ["1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7"] } }
充提業(yè)務(wù)需關(guān)注 head_block_age 上一個區(qū)塊生成時(shí)間,participation 區(qū)塊生產(chǎn)參與率。 提現(xiàn)操作前判斷區(qū)塊鏈?zhǔn)欠裾_\(yùn)行。
list_account_balances格式:list_account_balances name
參數(shù):name可以是賬戶名,也可以是賬戶的id
作用:列出賬號為id的賬戶的各資產(chǎn)余額
示例:{"jsonrpc": "2.0", "method": "list_account_balances", "params": ["abc"], "id": 1}
返回信息示例:
{ "id": 1, "result": [{ "amount": "7861177753754",//余額,精度5,amount沒有小數(shù)點(diǎn),其數(shù)值被乘以了10000 此處即78611777.53754 "asset_id": "1.3.0"http://資產(chǎn)類型 此處為SEER }, { "amount": 97099800,//余額,精度5,amount沒有小數(shù)點(diǎn),其數(shù)值被乘以了10000 "asset_id": "1.3.8"http://資產(chǎn)類型 此處為測試鏈上的ABC資產(chǎn) }] }
充提業(yè)務(wù)需關(guān)注asset_id為1.3.0(即SEER)的amount (余額)是否足夠并支付網(wǎng)絡(luò)手續(xù)費(fèi),若涉及SEER鏈上其他資產(chǎn)的充提業(yè)務(wù),則還需要關(guān)注相應(yīng)資產(chǎn)的余額是否足夠。
transfer2格式:transfer2 from to amount asset_symbol memo broadcast(true/false)
參數(shù):from為轉(zhuǎn)出賬戶,to為接收賬戶,amount為轉(zhuǎn)賬數(shù)量, asset_symbol為資產(chǎn)名,memo為備注。from/to 可以是用戶名或者id,broadcast設(shè)置是否廣播。
作用:轉(zhuǎn)賬
示例:{"jsonrpc": "2.0", "method": "transfer2", "params": ["seerdex-withdraw","ffffff","500000","SEER","Welcome to SEERTALK. https://forum.seerchain.org",true], "id": 1}
返回信息示例:
{ "id": 1, "jsonrpc": "2.0", "result":[ "7ab0e58b6391a770cb62f432e0f2aef93de4d18e",//交易id { "ref_block_num": 64292,//引用的區(qū)塊號 "ref_block_prefix": 1517346144,//引用的區(qū)塊頭 "expiration": "2018-10-12T07:33:12",//交易過期時(shí)間 "operations": [ [0, {//0表示轉(zhuǎn)賬 "fee": {//手續(xù)費(fèi) "amount": 2136718,//金額 ,amount沒有小數(shù)點(diǎn),其數(shù)值被乘以了10000 "asset_id": "1.3.0"http://資產(chǎn) 此處表示SEER }, "from": "1.2.105",//轉(zhuǎn)出賬戶id "to": "1.2.138",//轉(zhuǎn)入賬戶id "amount": { "amount": "50000000000",//金額 amount沒有小數(shù)點(diǎn),其數(shù)值被乘以了10000 "asset_id": "1.3.0"http://資產(chǎn) 此處表示SEER }, "memo": {//memo權(quán)限相關(guān) "from": "SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH", "to": "SEER6QbqUZF6xzjdceVoLHS7K1KwvLyszVTZS8bbsQQQXcAm8L3aZp", "nonce": "4469110159915322318", "message": "482a7d070d298fe2a79d5f528f55778c62584d242274a7d697dae1ec63d7038b5a0b80dc9ba524e3f5f528bc717c60a635f89ff8af1cccbd1b4189f8ddc92e39" }, "extensions": [] }] ], "extensions": [], "signatures": ["204e8746aac14a05fb3c66ac653429dead34bddac58911c53346feb365f0c7b5767ea870c1e5da6a104d8364e42f504fc1bdcfc442652f5c2e9bb9b26a858b0ccd"] } ] }
充提業(yè)務(wù)需關(guān)注返回信息的第一個字符串,即交易id,另expiration 交易過期時(shí)間。
get_account_id格式:get_account_id name
參數(shù):name是賬戶名
作用:列出賬戶name的賬戶id
示例:{"jsonrpc": "2.0", "method": "get_account_id", "params": ["seerdex-withdraw"], "id": 1}
返回信息示例:
{"id":1,"result":"1.2.105"}get_relative_account_history
格式:get_relative_account_history name start limit end
參數(shù):name可以是賬戶名或id,start為返回結(jié)果的最小編號,limit 為返回結(jié)果的數(shù)量上限,end為返回結(jié)果的最大編號;
返回?cái)?shù)據(jù)排序方式為按時(shí)間順序,越新的越靠前;
編號從1開始,若end = 0,則返回最新的limit條操作信息;
若end - start > limit,則返回滿足條件的最新的limit條操作信息。
作用:列出賬戶name的操作歷史記錄
請避免一次性返回超過100條數(shù)據(jù),以免節(jié)點(diǎn)或錢包報(bào)錯。同時(shí),在命令行錢包中使用此命令時(shí)只會返回 "description"中的數(shù)據(jù),用RPC調(diào)用方能返回完整數(shù)據(jù)。
示例:{"jsonrpc": "2.0", "method": "get_relative_account_history", "params": ["seerdex-withdraw",15,1,30], "id": 1}
返回信息示例:
{ "id": 1, "result": [ { "memo": "give you 980 SEER",//解鎖并有相應(yīng)私鑰的錢包方能顯示MEMO "description": "Transfer 980 SEER from alice to okok -- Memo: give you 980 SEER (Fee: 21.05468 SEER)",//錢包一般只顯示此內(nèi)容 "op": { "id": "1.9.703568",//該操作的對象id,可通過get_object 1.9.703568查看此操作 "op": [ 0, //操作類型,0表示轉(zhuǎn)賬 { "fee": {//手續(xù)費(fèi) "amount": 2105468,//數(shù)額 "asset_id": "1.3.0"http://資產(chǎn)類型 }, "from": "1.2.109",//轉(zhuǎn)出id "to": "1.2.105",//接收id "amount": { "amount": 98000000,//轉(zhuǎn)賬數(shù)額 "asset_id": "1.3.0"http://資產(chǎn)類型 }, "memo": {//MEMO權(quán)限相關(guān) "from": "SEER6sJwPuSSayEzHXLbVgw9HJsDnGBk5Dup5bq3ns1YziZEDMKMgU", "to": "SEER8UAbnsAnXY1qr3CD6uzKaRuewsyPF9ynYJJGrdvSfDANxsGNxH", "nonce": "394073041834538", "message": "485e630438b9a38c94c12afd9b15007845484d7f0c8c2c29c135f4f9a155a1ee" }, "extensions": [] }], "result": [//操作返回結(jié)果 0, { } ], "block_num": 3674099,//入塊高度 "trx_in_block": 0,//操作所屬交易在區(qū)塊內(nèi)的位置 "op_in_trx": 0,//操作在交易內(nèi)的位置 "virtual_op": 52924//虛擬操作編號 } }] }
get_relative_account_history會列出和此賬戶有關(guān)的所有操作,例如自己轉(zhuǎn)賬給別人(包括提現(xiàn))、別人轉(zhuǎn)賬給自己(包括充值)、賬號注冊、參與預(yù)測等;
充提業(yè)務(wù)只需關(guān)注op.op.N(操作類型)為0,即轉(zhuǎn)賬的操作;
當(dāng)然最重要的是memo(轉(zhuǎn)賬MEMO)和op.op.amount.amount(轉(zhuǎn)賬數(shù)額)以及op.op.amount.asset_id(資產(chǎn)類型);
以及op.op.from(轉(zhuǎn)出id),若同一個賬號即負(fù)責(zé)充值又負(fù)責(zé)提現(xiàn),則判斷op.op.from是否和get_account_id獲得的當(dāng)前賬戶一樣來區(qū)分該筆操作是否是本帳戶發(fā)起的提現(xiàn)操作;
op.id為該操作的對象id,也是該轉(zhuǎn)賬操作的唯一id;
另外,還需要關(guān)注op.block_num,即該操作的入塊高度,
op.trx_in_block 該操作所屬交易在該區(qū)塊內(nèi)的位置,
op.op_in_trx 該操作在該交易內(nèi)的位置,
以及op.virtual_op 該操作的虛擬操作編號。
以上四個數(shù)據(jù)可以和其他指令配合獲得該操作所屬的txid及判斷該操作的唯一性。
get_block格式:get_block num
參數(shù):塊號
作用:顯示第num個塊的概況
示例:get_block 2090482
返回信息示例:
get_block 2090482 { "previous": "001fe5f1e1dd8d195af805484ee8038a09866b76",//上一個塊的塊號 "timestamp": "2018-07-30T07:31:54",//時(shí)間戳 "witness": "1.5.22",//見證人 "transaction_merkle_root": "72756b0f1f1711622c8030eae65e6db055200320", "extensions": [], "witness_signature": "200d202d735de10f4f8213d71a8f946a2cc49bc02e930f682bea74321819b4bc7c4d436e366f1cad962f214eeaa42b5030fd716f692077f135b3cf33c688f68f1f",//見證人簽名 "transactions": [{ "ref_block_num": 58864,//引用的區(qū)塊號 "ref_block_prefix": 2207768636,//引用的區(qū)塊頭 "expiration": "2018-07-30T07:33:51",//交易過期時(shí)間 "operations": [[ 0,{ "fee": { "amount": 200000,//手續(xù)費(fèi) "asset_id": "1.3.0"http://資產(chǎn)類型 1.3.0指SEER }, "from": "1.2.1250",//發(fā)起用戶ID "to": "1.2.1292",//接收用戶ID "amount": { "amount": 2000000000,//金額20000 "asset_id": "1.3.0"http://資產(chǎn)類型 1.3.0指SEER }, "extensions": [] } ] ], "extensions": [], "signatures": [ "205c1f92cd9eebba507094c0fe4a05be47d301b6b2e989f4f0fdcfc8acef69ceec5356faf1667b5576629bfbc29ee5a257dbfac935c5a8fef588e32d7a7902c2b3"http://交易簽名集合 ], "operation_results": [[ 0,{} ] ] } ], "block_id": "001fe5f26d0f3ee5b1569a1618fe903e4dc5aef0",//塊號 "signing_key": "SEER5oyAoCzw5GRD9unKK6vsLXkPVx1aKU7i3hX19E8BRU5u3FoAoA",//見證人簽名公鑰 "transaction_ids": [ "30e73f68d163398005557a21c58bd751db22eb53"http://交易id集 ] }
充提業(yè)務(wù)需需配合get_relative_account_history中獲取的op.block_num來關(guān)注get_block獲取的transaction_ids數(shù)據(jù),若同一個塊里有多筆交易,則會有多個transaction_id,需配合get_relative_account_history中獲取到的op.trx_in_block來得到該操作所對應(yīng)的txid。
處理充值業(yè)務(wù)1、通過get_relative_account_history查詢賬戶相關(guān)歷史。
返回結(jié)果中并沒有直接顯示每條記錄的序號,需要自行獲取和記錄。
建議:從start = 1,limit = 1, end = 2開始以一定時(shí)間間隔發(fā)送請求,每次start 和 end 各自 +1,limit恒等于1,若返回信息不為空,則將該條信息編號并存儲。若返回信息為空:{"id":1,"jsonrpc":"2.0","result":[]},則表示沒有新的操作,等待有新的操作信息時(shí)繼續(xù)記錄存儲。
2、判斷是否為充值業(yè)務(wù)。
get_relative_account_history會列出和此賬戶有關(guān)的所有操作,例如自己轉(zhuǎn)賬給別人(包括提現(xiàn))、別人轉(zhuǎn)賬給自己(包括充值)、賬號注冊、參與預(yù)測等,充提業(yè)務(wù)只需要op.op.N(操作類型)為0(轉(zhuǎn)賬)的操作數(shù)據(jù);
若同一個賬號即負(fù)責(zé)充值又負(fù)責(zé)提現(xiàn),則需要區(qū)分op.op.from是否和當(dāng)前賬戶id一樣,,若一樣,則是本帳戶發(fā)起的提現(xiàn)操作,需要排除掉;
剩下的便是待處理的充值操作。
3、獲得相關(guān)充值數(shù)據(jù)。
通過Http-RPC或websocket-RPC連接的命令行錢包在unlocked狀態(tài)時(shí),在get_relative_account_history返回的信息中可以查看memo內(nèi)容,用戶填寫的交易所ID等入賬信息便從此處獲?。?/p>
通過op.op.amount.amount(轉(zhuǎn)賬數(shù)額)加上小數(shù)點(diǎn),便是充值數(shù)額;
通過op.op.amount.asset_id(資產(chǎn)類型)來判斷是否是平臺支持的正確資產(chǎn)類型。
4、判斷是否為可信操作。
不同于比特幣和以太坊采用確認(rèn)數(shù)來從概率上降低交易被退回的可能性,像SEER這樣的石墨烯項(xiàng)目中有不可逆塊的概念,不可逆塊及更早區(qū)塊中的交易,可以保證不會發(fā)生回退。
get_relative_account_history會返回該筆操作所屬的op.block_num(入塊高度),但即使交易未入塊,仍然可能出現(xiàn)在賬戶歷史中,因此需要和通過get_dynamic_global_properties獲取到的last_irreversible_block_num(最近一個不可逆塊塊號)比較,op.block_num必須小于或等于last_irreversible_block_num,才能被視為可信操作。
5、記錄下該操作的相關(guān)信息。
get_relative_account_history中獲取到的op.block_num+op.trx_in_block + op.op_in_trx + op.virtual_op 組合到一起,標(biāo)識該操作的唯一性,可識別避免重復(fù)操作;
get_relative_account_history中獲取到的op.id也是該轉(zhuǎn)賬操作的唯一id;
可以通過get_object op.block_num 獲取該轉(zhuǎn)賬操作所在塊的信息,再通過op.trx_in_block的數(shù)值來獲取到塊信息中transaction_ids數(shù)組里該轉(zhuǎn)賬操作對應(yīng)的txid,同一個txid可能對應(yīng)多個操作。
6、如果有充值的MEMO或資產(chǎn)類型不正確,建議不要直接退回,而是等待用戶主動聯(lián)系確認(rèn)退回路徑,因?yàn)橛脩艨赡苁峭ㄟ^交易所或第三方平臺提現(xiàn)過來充值的,直接退回但沒有對方MEMO可能會造成處理困難甚至資產(chǎn)損失。
處理提現(xiàn)業(yè)務(wù)1、提現(xiàn)操作前檢查區(qū)塊鏈網(wǎng)絡(luò)是否正常運(yùn)行
提現(xiàn)業(yè)務(wù)需關(guān)注區(qū)塊鏈網(wǎng)絡(luò)是否正常運(yùn)行狀態(tài),只在網(wǎng)絡(luò)正常時(shí)處理提現(xiàn)。
通過info指令獲取到head_block_age(上一個區(qū)塊生成時(shí)間),須在1分鐘以內(nèi),participation(區(qū)塊生產(chǎn)參與率)須在80以上,表示80%的區(qū)塊生產(chǎn)者在正常工作。
同時(shí)get_dynamic_global_properties指令獲取到的 head_block_number(當(dāng)前區(qū)塊高度)和 last_irreversible_block_num(最近一個不可逆塊)相差不會太大,一般在30以內(nèi)。
2、檢查提現(xiàn)賬戶余額
通過list_account_balances列出賬戶各資產(chǎn)余額,檢查asset_id為1.3.0(即SEER)的amount (余額)是否足夠并支付網(wǎng)絡(luò)手續(xù)費(fèi),若涉及SEER鏈上其他資產(chǎn)的充提業(yè)務(wù),則還需要關(guān)注相應(yīng)資產(chǎn)的余額是否足夠。
3、轉(zhuǎn)賬并跟蹤操作是否成功
通過transfer2向用戶轉(zhuǎn)賬相應(yīng)數(shù)額的指定資產(chǎn)。
需關(guān)注返回信息中的交易id,向用戶提供此信息可以讓用戶在區(qū)塊瀏覽器查詢自己的提現(xiàn)操作在區(qū)塊鏈上的狀態(tài)和信息,在轉(zhuǎn)出目標(biāo)未到賬的情況下確定該筆操作是否已出賬;
關(guān)注transfer2返回信息中的expiration(交易過期時(shí)間),轉(zhuǎn)賬操作發(fā)出后,一般很快可以從get_relative_account_history中獲取到該筆轉(zhuǎn)賬操作的信息,并通過op.block_num和last_irreversible_block_num比較來確認(rèn)入塊;
(1)若確認(rèn)入塊,則返回信息中的交易id應(yīng)該已經(jīng)存在于get_object op.block_num 獲取該轉(zhuǎn)賬操作所在塊信息的transaction_ids數(shù)組中。
(2)若發(fā)出的轉(zhuǎn)賬操作超過了expiration還未確認(rèn)入塊,則這筆交易可能由于您同時(shí)廣播的操作太多等各種原因未被區(qū)塊鏈打包并已經(jīng)被丟棄,此時(shí)重新發(fā)起轉(zhuǎn)賬是安全的。
本文由seer愛好者提供,可能理解有誤,歡迎到github指出:https://github.com/akirasen/s...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98362.html
摘要:目前,新網(wǎng)頁錢包的設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)個頁面,隨后的幾天將向社區(qū)征集建議。目前的設(shè)計(jì),不包括正在同步開發(fā)的賽事眾籌功能,等主網(wǎng)賽事眾籌功能上線以后,將進(jìn)行相應(yīng)前端的開發(fā)。 目前,SEER新網(wǎng)頁錢包的UI設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)96個頁面,隨后的幾天將向社區(qū)征集建議。 https://org.modao.cc/app/2da4... 目前的UI設(shè)計(jì),不包括正在同步開發(fā)的賽...
摘要:目前,新網(wǎng)頁錢包的設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)個頁面,隨后的幾天將向社區(qū)征集建議。目前的設(shè)計(jì),不包括正在同步開發(fā)的賽事眾籌功能,等主網(wǎng)賽事眾籌功能上線以后,將進(jìn)行相應(yīng)前端的開發(fā)。 目前,SEER新網(wǎng)頁錢包的UI設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)96個頁面,隨后的幾天將向社區(qū)征集建議。 https://org.modao.cc/app/2da4... 目前的UI設(shè)計(jì),不包括正在同步開發(fā)的賽...
摘要:目前,新網(wǎng)頁錢包的設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)個頁面,隨后的幾天將向社區(qū)征集建議。目前的設(shè)計(jì),不包括正在同步開發(fā)的賽事眾籌功能,等主網(wǎng)賽事眾籌功能上線以后,將進(jìn)行相應(yīng)前端的開發(fā)。 目前,SEER新網(wǎng)頁錢包的UI設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)96個頁面,隨后的幾天將向社區(qū)征集建議。 https://org.modao.cc/app/2da4... 目前的UI設(shè)計(jì),不包括正在同步開發(fā)的賽...
摘要:目前,新網(wǎng)頁錢包的設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)個頁面,隨后的幾天將向社區(qū)征集建議。目前的設(shè)計(jì),不包括正在同步開發(fā)的賽事眾籌功能,等主網(wǎng)賽事眾籌功能上線以后,將進(jìn)行相應(yīng)前端的開發(fā)。 目前,SEER新網(wǎng)頁錢包的UI設(shè)計(jì)工作已基本完成,目前已設(shè)計(jì)96個頁面,隨后的幾天將向社區(qū)征集建議。 https://org.modao.cc/app/2da4... 目前的UI設(shè)計(jì),不包括正在同步開發(fā)的賽...
閱讀 2984·2023-04-26 01:49
閱讀 2106·2021-10-13 09:39
閱讀 2322·2021-10-11 11:09
閱讀 951·2019-08-30 15:53
閱讀 2844·2019-08-30 15:44
閱讀 950·2019-08-30 11:12
閱讀 3023·2019-08-29 17:17
閱讀 2407·2019-08-29 16:57