當前位置:
首頁 > 最新 > EOS代幣交易與提幣開發教程第二部分

EOS代幣交易與提幣開發教程第二部分

投票帳戶歷史記錄

賬戶歷史記錄包括由賬戶授權或賬戶收到的所有操作。 由於交易所收到了eosio.token :: transfer操作,它已在歷史記錄中列出。 如果您使用控制台,確認和不可逆轉的交易以「綠色」列印,而未確認的交易以「黃色」列印。 您可以通過事務日誌中的第一個字元確定事務是否被確認:"#"用於不可逆轉,"?" 為潛在可逆的。

$ cleos get actions tokenxchange

# seq when contract::action => receiver trx id... args

================================================================================================================

# 0 2018-06-03T15:24:34.500 eosio.token::transfer => tokenxchange ce32ac1f... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

操作大量的資產轉移:

$ cleos transfer scott tokenxchange"1.0000 SYS"12345

executed transaction:9d9f981674073065d81491dc53a6d436fc383ff26eb34189f414f63481463822136bytes549us

# eosio.token

# scott

# tokenxchange

現在看看事務日誌:

$ cleos get actions tokenxchange

# seq when contract::action => receiver trx id... args

================================================================================================================

# 0 2018-06-03T15:24:34.500 eosio.token::transfer => tokenxchange ce32ac1f... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

# 1 2018-06-03T15:28:12.000 eosio.token::transfer => tokenxchange 9d9f9816... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

?22018-06-03T15:29:33.000eosio.token::transfer => tokenxchange05fd45b6... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

最後一次轉賬仍在等待中,等待不可逆轉。

「seq」列代表您的特定帳戶的操作索引。 隨著新的相關操作的添加,它會一直增加。

cleos get actions命令允許您對取回哪些操作進行一些控制。 您可以使用-h查看此命令的幫助

$ cleos get actions -h

ERROR: RequiredError: account_name

Retrieve all actions with specific account name referencedinauthorization or receiver

Usage: cleos get actions [OPTIONS] account_name [pos] [offset]

Positionals:

account_name TEXT name of account to query on (required)

pos INT sequence number of actionforthisaccount,-1forlast

offset INT get actions [pos,pos+offset]forpositive offset or [pos-offset,pos)fornegative offset

Options:

-j,--json print full json

--full don"t truncate action json

--pretty pretty print full action json

--console print console output generated by action

為了只獲得最後一個動作,你需要做以下的事情:

$ cleos get actions tokenxchange-1-1

# seq when contract::action => receiver trx id... args

================================================================================================================

# 2 2018-06-03T15:29:33.000 eosio.token::transfer => tokenxchange 05fd45b6... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

這個命令說到最後一個序列號(由pos = -1表示),然後在它之前(偏移量= -1)獲取「1」項。 使用上面的例子,這將返回僅在第2行的[3-1,3)或[2,3)範圍內的序列。在這種情況下,「-1」位置意味著「一個超過最後一個序列」和 像C ++容器的末端迭代器一樣運行。

僅提取「新」操作

由於我們假定您的交易所正在運行輪詢微服務,因此它會想要獲取「未處理的下一筆存款」。 在這種情況下,微服務將需要跟蹤「最後處理的seq」的seq編號。 為了這個例子,我們將假設「seq 0」已經被處理,並且我們想要獲取「seq 1」(如果有的話)。

我們通過pos = 1和offset = 0得到範圍[1,1 + 0]或[1,1]。

$ cleos get actions tokenxchange1

# seq when contract::action => receiver trx id... args

================================================================================================================

# 2 2018-06-03T15:29:33.000 eosio.token::transfer => tokenxchange 05fd45b6... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

我們可以在一個循環中調用它,處理每個確認的動作(以#開始的動作),直到我們耗盡事件或找到未確認的動作(以?開頭)。

$ cleos get actions tokenxchange3

# seq when contract::action => receiver trx id... args

================================================================================================================

機器可讀帳戶歷史記錄(JSON)

到目前為止,本教程著重介紹如何使用cleos來獲取並顯示歷史記錄。 但是,cleos僅僅是一個JSON-RPC介面的輕量級包裝器。 cleos可以轉儲從JSON-RPC請求返回的原始JSON,或者您可以創建自己的JSON-RPC請求。

這是查詢序列2時返回的JSON。

$ cleos get actions tokenxchange2-j

{

"actions": [{

"global_action_seq":2132,

"account_action_seq":2,

"block_num":2099,

"block_time":"2018-06-03T15:29:33.000",

"action_trace": {

"receipt": {

"receiver":"tokenxchange",

"act_digest":"3a49a62f23db41c4ed8a8fa52509a04056c8afdcb15de7544a430b2cadfbaf68",

"global_sequence":2132,

"recv_sequence":3,

"auth_sequence": [[

"scott",

9

]

],

"code_sequence":1,

"abi_sequence":1

},

"act": {

"account":"eosio.token",

"name":"transfer",

"authorization": [{

"actor":"scott",

"permission":"active"

}

],

"data": {

"from":"scott",

"to":"tokenxchange",

"quantity":"1.0000 SYS",

"memo":"12345"

},

"hex_data":"00000000809c29c2a0d8340df5a920cd10270000000000000453595300000000053132333435"

},

"elapsed":2,

"cpu_usage":,

"console":"",

"total_cpu_usage":,

"trx_id":"05fd45b61df815a4cdeb768e732adb292500b2399517fc9c98b6e6b136d7a4d1",

"inline_traces": []

}

}

],

"last_irreversible_block":2543

}

鑒於此JSON,如果其「block_num」

您可以通過以下方式識別不可逆轉的存款:

actions[].action_trace.act.account =="eosio.token"&&

actions[].action_trace.act.name =="transfer"&&

actions[].action_trace.act.data.quantity =="X.0000 SYS"&&

actions[].action_trace.to =="tokenxchange"&&

actions[].action_trace.memo =="KEY TO IDENTIFY INTERNAL ACCOUNT"&&

actions[].action_trace.receipt.receiver =="tokenxchange"&&

actions[].block_num

警告

驗證上述所有條件(包括令牌符號名稱)至關重要。 用戶可以通過「轉賬」操作創建其他合同,以「通知」您的賬戶。 如果您沒有驗證上述所有屬性,那麼您可能會處理「虛假存款」。

actions[].action_trace.act.account =="eosio.token"&&

actions[].action_trace.receipt.receiver =="tokenxchange"

驗證餘額

現在我們已經收到三筆存款,我們應該看到交易所的餘額為3.0000 SYS。

$ cleos get currency balance eosio.token tokenxchange SYS

3.0000SYS

處理提款

當用戶向您的交易所申請退出時,他們需要向您提供他們的eosio賬戶名稱和金額。 然後您可以運行cleos命令來執行提取。 cleos將與在nodeos上運行的「解鎖」錢包進行交互,該應用只能啟用本地主機連接。

假設scott想撤回1.0000 SYS:

$ cleos transfer tokenxchange scott"1.0000 SYS"

executed transaction:26a1d1f1601c35a1d97c294974ba26f3eea3b76f3c3df736c7bbab930df24c9f128bytes514us

# eosio.token

# tokenxchange

# scott

在這個階段,您的本地nodeos客戶端接受了該事務並可能將其廣播到更廣泛的網路。

我們可以獲取歷史記錄,並看到列出了三項新操作,所有操作都使用事務ID 26a1d1f1 ...,正如我們的傳輸命令所報告的那樣。 因為tokenxchange授權交易,所以會通知所有處理並接受轉賬的賬戶。 在這種情況下,合同eosio.token處理的轉移並更新餘額,發送者(tokenxchange)處理它,象接收器上(Scott)。 所有這三份合同/賬戶都基於該行動批准了它和/或進行了狀態轉換。

$ cleos get actions tokenxchange-1-9

# seq when contract::action => receiver trx id... args

================================================================================================================

# 0 2018-06-03T15:24:34.500 eosio.token::transfer => tokenxchange ce32ac1f... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

# 1 2018-06-03T15:28:12.000 eosio.token::transfer => tokenxchange 9d9f9816... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

# 2 2018-06-03T15:29:33.000 eosio.token::transfer => tokenxchange 05fd45b6... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

# 3 2018-06-03T15:37:35.500 eosio.token::transfer => tokenxchange 3d89c983... {"from":"scott","to":"tokenxchange","quantity":"1.0000 SYS",...

# 4 2018-06-03T15:38:44.500 eosio.token::transfer => tokenxchange f13ea506... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

# 5 2018-06-04T00:18:11.500 eosio.token::transfer => tokenxchange 95cbb1ce... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

# 6 2018-06-04T00:18:11.500 eosio.token::transfer => scott 95cbb1ce... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

# 7 2018-06-04T01:09:53.500 eosio.token::transfer => eosio.token 26a1d1f1... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

# 8 2018-06-04T01:09:53.500 eosio.token::transfer => tokenxchange 26a1d1f1... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

# 9 2018-06-04T01:09:53.500 eosio.token::transfer => scott 26a1d1f1... {"from":"tokenxchange","to":"scott","quantity":"1.0000 SYS",...

通過處理歷史記錄,我們可以在我們的交易確認時得到通知。在實踐中,我們希望您將保持私人資料庫狀態以跟蹤退出流程。為了映射到私有資料庫狀態,在撤銷請求中嵌入交換專用備忘錄可能很有用。另一種方法是簡單地為您的映射使用交易ID。當您的帳戶歷史記錄微服務遇到seq 5並且看到它不可逆轉時,它可以將您的提款標記為完成。

處理錯誤

有時,網路問題會導致事務失敗,並且永遠不會包含在塊中。您的內部資料庫需要知道何時發生,以便它可以通知用戶和/或再次嘗試。如果您在提交本地轉帳時沒有立即發生錯誤,則必須等待交易過期。每筆交易都有一個「到期」,之後交易永遠不能應用。一旦最後一個不可逆轉的塊超過了到期時間,您就可以安全地將您嘗試的提取標記為失敗,而不用擔心在最不經意的時候「浮動在以太」。

默認情況下,cleos會設置2分鐘的到期窗口。這足以讓所有21個生產者有機會包含交易。

$ cleos transfer tokenxchange scott"1.0000 SYS"-j -d

{

"expiration":"2018-06-04T00:36:39",

"ref_block_num":8209,

"ref_block_prefix":2405809535,

"max_net_usage_words":,

"max_cpu_usage_ms":,

"delay_sec":,

"context_free_actions": [],

...

你的微服務可以使用cleos來查詢最後一個不可逆塊號和區塊頭時間。

$ cleos get info

{

"server_version":"0961a560",

"chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",

"head_block_num":8356,

"last_irreversible_block_num":8355,

"last_irreversible_block_id":"000020a3df1d1a2e963f8586347839bc9425d8b613c315fa7005e2336ec6b35a",

"head_block_id":"000020a4f9fb2371f04cd2c3cd05dbf63eb7005564d75abe787bd990b50f9348",

"head_block_time":"2018-06-04T00:37:22",

"head_block_producer":"producer2"

...

}

(Exchange)交易安全

本教程顯示最小可行的存款/提款處理程序,並假設一個包含授權存款和提款所需的所有密鑰的錢包。以安全為重點的交換將採取以下附加步驟:

將絕大部分資金保留在一個時間延遲,多重簽名控制賬戶

使用多個獨立流程/伺服器對熱錢包進行雙重檢查

部署一個自定義合同,只允許提款到KYC賬戶,並要求多重簽署白名單賬戶

部署一個只接受來自KYC賬戶的已知代幣存款的自定義合約

部署一個自定義合同,強制所有提款必須24小時等待

利用硬體錢包進行所有簽名,甚至自動取款

客戶希望立即取款,但他們也希望交易所受到保護。區塊鏈強制執行的24小時讓客戶知道資金「轉賬中」,同時通知潛在黑客,交易所有24小時響應未經授權的訪問。此外,如果交換電子郵件/簡訊用戶開始提款,用戶有24小時聯繫交易所並修復任何未經授權的訪問他們的個人帳戶。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 鏈三豐 的精彩文章:

HTC的區塊鏈Exodus手機將在第三季度上市

TAG:鏈三豐 |