第一版實現,因為伺服器資源有限,業務也是剛起步,就沒浪費資源去自己執行以太坊節點,使用了infura.io的json rpc節點,好處是不需要擔心維護以太坊節點,暫時可以相信這個節點是不會壞掉的,壞處就是以太坊json rpc的節點是不支援根據錢包位址查詢全部轉賬記錄的,所以第一版用了比較hack的手段監聽餘額數字。
同樣是定時指令碼,監聽餘額,發現有餘額大於0的錢包位址,就把錢包裡的錢轉入熱錢包,並在對應使用者的餘額上加對應的數字。這樣做會出問題,一開始的想法是,每次監聽都把錢包裡的餘額全都轉到熱錢包,這樣保證錢包裡的餘額永遠是0,每次充值都是加上錢包裡的餘額就好,這樣做的前提是,要把gaslimit設定成21000,轉賬amount為錢包裡的餘額減去gas費用,但是這筆轉賬很容易因為gas不足就失敗了,為了保證每筆轉賬能盡可能成功,要把gaslimit設定的大一點,這樣做就會導致沒用完的gas會返還給錢包,錢包裡的餘額就不再是0,所以又加了一段hack的**,每次監聽都會把餘額的數字快取起來,並且每次監聽,如果監聽到的餘額小於這個快取,就快取這個小的數字,而邏輯上錢包裡的餘額是,以太坊錢包真實餘額減去這個快取的數字,這樣做一看就漏洞百出,但是在充值頻率正常的情況下,是work了。進度原因,用這種心驚肉跳的邏輯執行了很長一段時間。
第二版,就是用etherscan的api,拿到錢包位址的轉賬記錄,提出轉入的記錄,寫進資料庫,不會同步進行鏈上轉賬,每天跑一次集中到熱錢包的指令碼就夠了,這樣的好處是不會出現充值出錯的問題,邏輯也比較清晰,不需要hack,可能的壞處就是,etherscan掛掉了,我們的服務也就不能用了,可能etherscan壞掉的概率和infura壞掉的概率差不多吧。我想最好的解決辦法就是自己執行乙個以太坊節點吧,做etherscan相同的事兒,就能自己監控記錄了,這就不會讓自己的服務依賴別人的東西了。
本來打算這篇就寫具體實現,包括**,但是仔細回顧一下,也挺麻煩的,還是單開一篇寫**吧,下篇會記錄如何實現轉賬功能
交易所 數字貨幣 交易所充值ETH的實現
第一版實現,因為伺服器資源有限,業務也是剛起步,就沒浪費資源去自己執行以太坊節點,使用了infura.io的json rpc節點,好處是不需要擔心維護以太坊節點,暫時可以相信這個節點是不會壞掉的,壞處就是以太坊json rpc的節點是不支援根據錢包位址查詢全部轉賬記錄的,所以第一版用了比較hack的...
交易所以太坊充值功能的實現
主要開發語言是ruby,流程大概是,錢包生成使用以太坊go ethereum,生成的keystroe使用py ethereum解析成private key,簽名transaction用node,再用ruby封裝的json rpc client傳送到以太坊主網。雖然聽起來就繞來繞去的,但是目前轉pri...
交易所錢包的誤解
我一直想著要研究一下peatio那裡的充幣,提幣,錢包等,怎麼保證大家安全的,黑客如果入侵 把私鑰盜走怎麼辦,簡單花了半天看了peatio原始碼,現在認為是大錯特錯。交易 和錢包管理是分開的,通過資料庫通訊各個賬戶餘額就可以了。它們在不同的網路上,每個賬戶的錢包就是乙個位址,如果使用者充幣,錢包管理...