作為一名加密貨幣愛好者和區(qū)塊鏈行業(yè)建設(shè)者的一員,我將盡我最大的努力來更好地構(gòu)建加密貨幣生態(tài)系統(tǒng)。在這篇文章中,我將分享我的經(jīng)驗,如何為數(shù)字資產(chǎn)交易設(shè)計一個安全的加密貨幣錢包。希望對建立基于區(qū)塊鏈和加密貨幣經(jīng)濟的業(yè)務(wù)基礎(chǔ)有所幫助。
數(shù)字資產(chǎn)管理是至關(guān)重要的,尤其是對于那些建立在區(qū)塊鏈基礎(chǔ)上的機構(gòu)。一個典型的使用案例是加密貨幣交易所或場外交易平臺(OTC),使成千上萬的交易者在不受時間和空間限制的情況下提取或剝離他們的數(shù)字資產(chǎn),銀行級別的安全性和高可用架構(gòu)是這類創(chuàng)業(yè)公司要獲取的基本要求。
熱錢包,暖錢包和冷錢包
關(guān)于錢包的常識不會在文章中介紹,但是我們應(yīng)該學(xué)習(xí)三種錢包之間的交易業(yè)務(wù)系統(tǒng)。
· 熱錢包:僅用于從系統(tǒng)發(fā)送交易,應(yīng)保留足夠但不太多的資金來服務(wù)取款。它應(yīng)該有嚴格的政策限制硬幣的數(shù)量,也就是說,小額取款應(yīng)該盡可能自動化,但大額提款應(yīng)該在提款前得到行政部門的批準。
· 暖錢包:用于所有存款到系統(tǒng),請求一個地址發(fā)送資金到新用戶加入時??蛻舫渲档脚X包的資金應(yīng)自動或定時提取到冷錢包。
· 冷錢包:用于系統(tǒng)大部分資金的存儲,我想至少是7/10,用于暖錢包的充值。冷錢包也被稱為離線錢包,因為它打算在不連接任何網(wǎng)絡(luò)的設(shè)備上運行。
因此,在討論加密貨幣錢包系統(tǒng)體系結(jié)構(gòu)的設(shè)計思想時,需要考慮安全存儲私鑰、智能風(fēng)險控制取款系統(tǒng)和存款鏈確認三個關(guān)鍵問題。如果我們必須優(yōu)先考慮這些安全因素的發(fā)展,這些密鑰的重要性逐步減少,因為最重要的是私鑰存儲。
基于實際用例的體系結(jié)構(gòu)
持有自己的私鑰是采用加密貨幣的主要原因。傳統(tǒng)的金融方式,尤其是跨境匯款,使得貨幣的轉(zhuǎn)移十分繁瑣。在使用數(shù)字資產(chǎn)錢包時,個人或機構(gòu)之間的業(yè)務(wù)邏輯存在許多差異。
如何設(shè)計數(shù)字資產(chǎn)錢包取決于您存儲的私鑰的位置。主要有三種模式:在手機中存儲私鑰、區(qū)塊鏈全節(jié)點或安全的網(wǎng)絡(luò)程序環(huán)境。
1. 分散式移動應(yīng)用錢包持有密鑰并簽署原始交易。當手機app創(chuàng)建錢包時,pubkic key注冊到網(wǎng)絡(luò)程序(主要是webservices)。網(wǎng)絡(luò)程序與p2p網(wǎng)絡(luò)交互,從區(qū)塊鏈臺賬中獲取信息(維護UTXO,查詢以太坊賬戶余額, nonce值,交易歷史等),并廣播新的交易。這些鏈能夠錢包滿足大多數(shù)人使用。
2. 帶錢包的區(qū)塊鏈節(jié)點提供全方位服務(wù),直接在網(wǎng)絡(luò)環(huán)境中創(chuàng)建和簽署原始交易。與全服務(wù)節(jié)點的系統(tǒng)集成通過JSON-RPC與區(qū)塊鏈全服務(wù)節(jié)點交互來管理錢包。錢包私鑰與區(qū)塊鏈分類賬一起存儲,同時暴露在不太安全的開放網(wǎng)絡(luò)環(huán)境中。有許多黑客入侵案件引起的json - rpc連接。我認為使用區(qū)塊鏈節(jié)點實現(xiàn)的原始錢包是不好的做法。有人建議比特幣內(nèi)核應(yīng)該將節(jié)點和錢包從功能中分離出來
3. 為了提高安全性,可以通過在更安全的環(huán)境中運行的一個單獨的錢包程序生成私鑰,我們稱之為簽名程序。全服務(wù)的另一部分是網(wǎng)絡(luò)程序,它構(gòu)造原始交易和廣播簽名交易。整個過程是,網(wǎng)絡(luò)程序創(chuàng)建未簽名的交易,并以成功的方式將未簽名的交易轉(zhuǎn)移到簽名程序(然后簽名程序?qū)⒑灻蟮慕灰追祷亟o網(wǎng)絡(luò)程序,最后由網(wǎng)絡(luò)程序?qū)⒑灻慕灰讖V播到對等網(wǎng)絡(luò)。
簽名程序和網(wǎng)絡(luò)程序
錢包全方位服務(wù)包括四個部分。
· 首先是錢包管理,私鑰由wallet-core(簽名程序)程序生成,并由levelDB存儲
· 第二是外部端點,取款流程和錢包生成,wallet-gateway(網(wǎng)絡(luò)程序)構(gòu)建原始交易,為業(yè)務(wù)系統(tǒng)提供外部端點,使用wallet-core和wallet-gateway組件之間的gRPC協(xié)議傳輸數(shù)據(jù)。
· 第三個是ledger-monitor程序,它訂閱最佳塊事件并推送到MQ(RabbitMQ)。
· 最后一個是ledger-consumer,它與兩個MQ消費者相結(jié)合,一個是為我們的系統(tǒng)錢包維護UTXO區(qū)塊鏈,另一個是處理消費者(用戶通知)的存款。