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