交易所以太坊充值功能的實現

2021-08-28 07:03:24 字數 1735 閱讀 8556

主要開發語言是ruby,流程大概是,錢包生成使用以太坊go-ethereum,生成的keystroe使用py-ethereum解析成private_key,簽名transaction用node,再用ruby封裝的json rpc client傳送到以太坊主網。

雖然聽起來就繞來繞去的,但是目前轉private_key的方法應該只有python的客戶端支援,簽名transaction的方法也只有node的web3有支援,傳送到以太坊主網可以很多辦法,就是post一下,用ruby也就是因為熟悉。

具體步驟:

1. 從使用者註冊開始,需要生成乙個以太坊錢包,需要安裝go-ethereum,安裝方法自行google。生成錢包的命令:

str = `geth --datadir # account new --password #`

datadir是go-ethereum的資料目錄,生成的錢包keystore會存到這個目錄下,file.path是事先準備好的密碼寫進檔案。

2. 通過etherscan的api監聽全部transaction,介面是

url = ""

然後通過判斷返回每個transaction的to欄位是否等於address,來判斷這條記錄是否為轉入記錄,confirmations來判斷確認數,通常大於12個確認數就可以了,iserror來判斷這條記錄是否轉賬異常,再判斷資料庫是否已經存在這條記錄,如果不存在,就存進資料庫,並在使用者餘額上加上這個數字。

3. 通過infura的json rpc監聽錢包餘額,大於0的就把餘額轉入熱錢包,這裡就是比較複雜的一步了。

實現方法有很多,我的方法應該比較爛,僅供參考:

1. 引用gem 'ethereum',配置:

2. 請求檢查錢包餘額

$eth_client.get_balance address, "latest"

3. 獲取錢包nonce

$eth_client.get_transaction_count address, "latest"

4. 通過python把keystore和password轉化成private_key,這裡是把py-ethereum裡轉化private_key的**提取出來了,做成乙個專門的指令碼。

%x(python3 decode_keystore_json.py # #).gsub("\n", "")

5. 通過node簽名transaction拿到raw_data,最後的data為空字串,轉賬erc20的時候才會用到,簽名transaction的node指令碼,隨便在stack overflow上搜一搜答案很多,需要注意的是每個欄位都要轉成16進製制格式,這是以太坊的bug,可能0和1的時候是沒問題的,超過1就會返回奇怪的錯誤,這個坑了我很長時間,加粗提醒。

%x(node sign_transaction.js # # # # # # # #)

6. 發布transaction到以太坊主網,這一步會拿到返回的tx_hash,用於追蹤轉賬情況。

$eth_client.send_raw_transaction(raw_data)

結束了,細節很多,就不仔細寫了,大概就是處理好每個狀態,定時任務去檢查transaction的狀態,因為要做足日誌,給使用者看記錄,顯得我們足夠專業,給後台留條後路,萬一出現問題,得知道怎麼去處理,核心邏輯就上面這些了。

交易所充值ETH的實現

第一版實現,因為伺服器資源有限,業務也是剛起步,就沒浪費資源去自己執行以太坊節點,使用了infura.io的json rpc節點,好處是不需要擔心維護以太坊節點,暫時可以相信這個節點是不會壞掉的,壞處就是以太坊json rpc的節點是不支援根據錢包位址查詢全部轉賬記錄的,所以第一版用了比較hack的...

交易所 數字貨幣 交易所充值ETH的實現

第一版實現,因為伺服器資源有限,業務也是剛起步,就沒浪費資源去自己執行以太坊節點,使用了infura.io的json rpc節點,好處是不需要擔心維護以太坊節點,暫時可以相信這個節點是不會壞掉的,壞處就是以太坊json rpc的節點是不支援根據錢包位址查詢全部轉賬記錄的,所以第一版用了比較hack的...

基於以太坊的快速數字資產交易

raiden 利用鏈下網路狀態技術給以太坊上的數字資產帶來了許多nice的屬性 raiden 1.0 詳解 raiden 1.0 通過合約的方式實現了token 的線下狀態通道支付。registry 合約是系統註冊合約,以太坊上的每一種代幣都可以一次註冊,然後會產生乙個基於該token的狀態通道管理...