區塊鏈金融應用(手把手教你,一文教會你構建區塊鏈金融應用)
無論你是一個初創公司的創始人,還是一個計劃推出金融服務應用的企業領導人,可能你都需要知道如何將區塊鏈用于金融服務。
行業觀察家強調了區塊鏈在金融服務市場的穩定增長。Markets and Markets的一份報告指出,金融科技區塊鏈市場將從2017年的2.3億美元增長到2023年的62.82億美元。該報告預計,在2018-2023年期間,年復合增長率為75.9%。
在當前的經濟趨勢發展下,你一定想知道如何構建區塊鏈金融服務應用,請繼續閱讀本文,我將回答這個問題。
你可以使用哪種區塊鏈:公共與私有
你需要決定使用哪種區塊鏈。這取決于你的商業模式。考慮以下場景:
1. 你的金融產品或服務僅限于注冊客戶
你是否想將產品或服務限制為在你業注冊的客戶?你可能已經按照相關的 KYC(了解你的客戶)流程來注冊客戶。你可能會選擇只有此類客戶才能訪問新金融服務應用程序。
如果是這樣,那么你需要在這種情況下使用許可的區塊鏈。企業區塊鏈符合你的要求。它們允許你實施訪問控制,并且只允許受信任方查看敏感信息。
你可以使用以下任何企業區塊鏈框架/平臺:
Hyperledger Fabric:這是來自 Hyperledger Consortium 的開源企業區塊鏈框架。你需要找一個區塊鏈網絡主機,比如 AWS、IBM 等。
R3 Corda:這是來自 R3 的企業區塊鏈平臺。
ConsenSys Quorum:摩根大通是最初開發 Quorum 的公司。 ConsenSys 收購了它,現在該公司提供 Quorum 作為企業區塊鏈平臺。
2. 產品或服務可以向任何人提供
這種情況甚至包括匿名或假名用戶。任何人都可以查看交易,并且沒有訪問控制。如果你想啟動一個去中心化的金融服務應用程序,需要一個公共區塊鏈。
許多企業家使用以太坊區塊鏈平臺構建了DeFi(去中心化金融)應用程序。以太坊為此提供了以下內容:
EVM(以太坊虛擬機):這是一臺去中心化的計算機。開發者可以使用這個計算引擎來構建 DApps(去中心化應用程序)。
Solidity:它是一種用于編碼以太坊智能合約的語言。智能合約是帶有“If-Then-Else”語句的開源代碼。它們自主執行,并根據預定義的條件轉移加密資產。智能合約是不可變的。他們的執行結果是不可逆的。
以太坊區塊鏈開發工具:以太坊生態系統提供IDE(集成開發環境)、測試網(測試網絡)、API、部署工具等。我將在稍后討論它們。
注 1:我在這里提供了一個DApp的快速概述,如下所示:
DApps是網絡應用程序。
你可以使用任何標準的前端開發技術來開發他們的前端。
DApp的后端必須由智能合約組成。
DApp運行在像以太坊這樣的去中心化區塊鏈網絡上。
DApp將數據存儲在去中心化的區塊鏈上。他們必須遵守既定的加密標準才能做到這一點。
DApp需要一個加密令牌。你需要使用已建立的加密標準來創建它。
DApp是開源程序。
沒有用戶社區的共識,你無法更改DApp。
沒有一個用戶可以控制大多數加密代幣。
注意 2:在本指南中,我假設你將在以太坊上構建一個DeFi應用程序。
如何在以太坊網絡上構建區塊鏈金融服務應用程序
你需要采取以下步驟:
1.成立軟件開發團隊并以動態的方式加入
你需要在以太坊區塊鏈開發團隊中擔任以下角色:
項目經理(PM)、建筑師、業務分析師、用戶界面設計師、網絡開發人員、以太坊區塊鏈開發者、測試人員。
注 3:我假設你將提供一個網絡應用程序。如果你計劃提供移動應用程序,則需要聘請移動開發人員。
我推薦以下內容:
聘請在領導區塊鏈開發項目方面具有豐富經驗的 PM。
尋找能夠將可擴展性措施納入技術解決方案的架構師。你需要一個計劃,以便在時機成熟時擴展你的以太坊區塊鏈應用程序。
聘請對以太坊 DeFi 生態系統有深入了解的業務分析師。
聘請 JavaScript 開發人員來開發 Web 應用程序的前端。許多 Web 開發人員都知道 JavaScript,并且有豐富的框架和庫生態系統。
為什么我建議你以錯列的方式加入團隊?原因如下:
你需要足夠的時間來定義區塊鏈開發項目的范圍。
計劃工作也需要時間。
你應該首先加入 PM、架構師和一些業務分析師。
他們需要定義項目的范圍并收集需求。
這個團隊還需要計劃項目。
在此期間,開發人員將沒有足夠的工作。區塊鏈開發人員的成本可能很高,因此,當你工作量達到一定程度時,需要雇傭他們。
在進入編碼階段之前加入其他角色。你可以在規劃階段加入開發和測試負責人。
2. 定義項目范圍并規劃項目
向你的團隊指定你的目標。指出你想要構建的 DeFi 類型以及它應該能夠做什么。
以下是幾種 DeFi 類型:
跨境支付應用程序:這些應用程序促進全球支付交易。
穩定幣:這些是加密代幣,旨在維持穩定的價格。穩定幣的價格通常與美元等現實世界資產掛鉤。
去中心化借貸應用程序:這些 DeFi 應用程序讓借款人無需任何第三方干預即可直接從貸方借款。
DEX(去中心化交易所):這些是沒有集中管理員的加密交易所。
DeFi 的種類還有很多。
業務分析師需要與業務利益相關者交談并收集需求。 PM 和架構師需要計劃項目,他們需要關注以下內容:
開發工具;
可擴展性解決方案;
項目任務和時間表;
資源加載;
開發、審查、測試;
其他項目管理方面,如溝通、風險管理等。
3. 安裝所需的開發和測試工具
現在你可以整合開發團隊的其他成員了。該團隊需要安裝和配置以下工具。
3a. MetaMask
MetaMask是一個加密貨幣錢包。它還提供了一種簡單的方式來連接到基于區塊鏈的應用程序。你可以用它來連接到以太坊區塊鏈網絡。
MetaMask可作為瀏覽器擴展和移動應用程序。你的開發團隊需要下載瀏覽器擴展。
你可以在你的MetaMask錢包中購買和存儲以太幣(ETH)。為了測試你的以太坊區塊鏈應用,你需要假的以太幣。你可以在MetaMask上得到它們。
3b. Ganache
Ganache是一個區塊鏈客戶端。你可以用它來開發Ethereum DApp,它是更大的Truffle工具套件的一部分。程序員可以用它來運行測試和執行命令。
你可以使用Ganache UI。它是一個桌面應用程序。你也可以使用Ganache CLI(命令行界面),它早期被稱為TestRPC。閱讀Ganache文檔來使用它。
3c. Web3.js
Web3.js是一個Ethereum JavaScript API。它也是一個重要庫的集合。以太坊區塊鏈開發人員可以使用Web3.js與本地或遠程以太坊節點進行交互。通過使用Web3.js文檔來安裝和配置它。
3d. Truffle套件
Truffle套件是一個用于Ethereum區塊鏈開發的工具集合。它包括一個開發環境和測試框架。你可以使用Truffle部署Ethereum智能合約,而且有大量的Truffle文檔。
注4:你需要使用更多的工具來開發Ethereum DApp。然而,你不需要安裝它們。這些工具如下。
Remix IDE(集成開發環境):你需要使用Remix IDE來編碼Solidity智能合約。它是一個DApp,因此,你不需要安裝它。
Ropsten:這是一個用于測試以太坊智能合約的testnet(測試網絡)。你需要使用假的以太幣來測試Ropsten上的智能合約。
4. 配置工具
你現在需要配置這些工具。
注5:我建議你閱讀兩篇詳細的文章,說明如何配置這些以太坊區塊鏈開發工具。Alex Miller寫了第一篇(https://hackernoon.com/getting-started-as-an-ethereum-web-developer-9a2a4ab47baf)。這是一篇關于以太坊DApp開發的指南。我把它稱為 "參考文章1"。Merunas Grincalaitis寫了第二篇(https://medium.com/ethereum-developers/ultimate-guide-to-convert-a-web-app-to-a-decentralized-app-dapp-f6112a079509),這是一份將網絡應用轉換為DApps的指南。我們把它稱為 "參考文章2"。
做好以下工作:
4a. 配置MetaMask加密錢包和瀏覽器擴展
你需要采取以下步驟。
創建一個賬戶,并確保你的密鑰。
以 "開發者模式 "連接到Ethereum區塊鏈。
建立與Ropsten testnet的連接。
使用MetaMask指南和 "參考文章2 "獲取更多信息。
4b. 配置Ganache、Web3.js和Truffle
采取以下步驟來配置Ganache、Web3.js和Truffle。
閱讀Ganache的GitHub文檔(https://github.com/trufflesuite/ganache-ui)來配置它。打開一個Ganache實例。
按照Web3.js的 "入門 "指南(https://web3js.readthedocs.io/en/v1.5.2/getting-started.html)來配置它。
閱讀Truffle文檔(https://trufflesuite.com/docs/truffle/overview)來配置它。
查看 "參考文章2 "(https://medium.com/ethereum-developers/ultimate-guide-to-convert-a-web-app-to-a-decentralized-app-dapp-f6112a079509)以獲得更多指導。
5. 設計和開發DApp的前端
在安裝和配置好工具后,你可以開始編碼了。首先設計和開發DApp的前端。做好以下工作。
遵循既定的用戶界面(UI)設計指南。
使用JavaScript、HTML和CSS來開發用戶界面的前端。或者也可以使用前端網絡框架,如Angular或React.js。
6. 編碼智能合約
現在是對智能合約進行編碼的時候了,智能合約是后端的構建塊。采取以下步驟。
6a. 回顧相關的智能合約以獲得有用的想法
以太坊DApp開發項目是開源的。軟件工程師可以審查其他項目的智能合約以獲得想法,這是一個優勢。
你也可以審查相關項目的智能合約。選擇與你的項目相似的DApp項目,例如:
如果你打算建立一個穩定幣,就審查Dai穩定幣(https://github.com/makerdao/dss)的智能合約。
如果你想一個創建DeFi協議,研究Uniswap DeFi協議的智能合約(https://github.com/Uniswap)。
如果你計劃建立一個去中心化的借貸平臺,請查看Aave協議的智能合約(https://github.com/aave/protocol-v2)。
6b. 編碼智能合約
使用Remix IDE來編碼智能合約。我建議你保持代碼簡單。我這樣說是出于以下原因。
成本:一個具有復雜邏輯的智能合約需要更多的計算。如果你的智能合約有復雜的處理邏輯,你會支付更多的 "汽油費"。通過保持邏輯簡單,你可以控制你的成本。
維護:調試具有復雜處理邏輯的智能合約更難。你可以通過保持邏輯簡單來提高你的智能合約的可維護性。
好好記錄你的智能合約,使用Truffle來管理它們。
7. 實施結構化的智能合約審計流程
你需要對你的智能合約進行徹底的審計。記住,你不能在部署智能合約后修改它,這使得測試和代碼審查變得加倍重要。
然而,測試不可能找出所有的bug。這使得智能合約的代碼審查非常重要。如果你實施一個結構化的代碼審查過程,你可以更早發現錯誤。
在任何項目中,找到有經驗的代碼審查員都是很難的。以太坊DApp開發項目涉及利基技能,因此,找到專業的審查員可能更難。
有足夠的預算。計劃好聘請獨立智能合約審計師的準備時間。
有經驗的智能合約審計師應該關注以下內容:
7a. 進行結構化的智能合約審計
智能合約審計不應該是臨時性的。獨立審查員應該遵循一個系統的方法。他們需要做到以下幾點:
審核人員應該堅持獲得源代碼的鎖定版本。
審查員必須徹底了解項目。
他們需要系統地審查項目文件。
專業的合同審查員應該進行初步的代碼審查。
隨后應該進行靜態代碼分析。
審核人員應進行代碼質量分析。
審核人員應該尋找已知的智能合約漏洞。
他們應該分析代碼是否能提供正確的功能。
審核人員應確定代碼優化機會。
智能合約審核人員應跟蹤所有問題,并系統地報告它們。
你需要確保關閉智能合約審計中發現的任何問題。
7b. 識別已知的智能合約漏洞
審查人員應留意已知的智能合約漏洞。以下是突出的智能合約漏洞的例子:
重入性:這也被稱為 "遞歸調用漏洞"。它發生在外部智能合約調用可以對調用合約進行新的調用。
訪問控制:訪問控制問題會影響到所有種類的軟件系統。當智能合約實現允許特權角色采取單邊行動的功能時,就會出現這種問題。例如,一個有特權的用戶可以從合同中提取資金。
算法錯誤:程序員可能在智能合約中編碼無符號整數。這可能會導致 "整數溢出 "和 "整數下溢 "等錯誤。
智能合約可能不檢查低級別調用的返回值。Solidity 允許低級別的函數調用。在執行過程中,這種調用可能會返回一個布爾值 "false"。不對此進行檢查的智能合約將繼續運行。這可能會產生漏洞。
"拒絕服務"(DoS):黑客可以審查智能合約,并找到發起DoS攻擊的漏洞。以 "for "循環為例。黑客可以給這樣的智能合約輸入太大的數字。以太坊網絡與氣體有關的限制將阻止這樣的合同迭代這么多次。因此,智能合約將停止運作。黑客可以發動不同類型的DoS攻擊,永久阻止智能合約的運作。
編碼不正確的函數來生成隨機數。黑客可以利用Solidity中的函數和變量來創建隨機數。他們可以預測將由智能合約創建的隨機數。然后黑客可以操縱DApp。
前端運行:智能合約可能會發布敏感信息。黑客可能會復制它,并提交一個具有較高費用的交易。這將優先考慮交易,黑客將得到操縱系統的機會。
8. 測試智能合約
你現在需要測試你的智能合約。在一開始應創建一個全面的測試計劃。測試計劃應該有足夠的測試案例來覆蓋智能合約的所有路徑和分支。你需要對測試計劃進行結構化審查。
隨后,做以下工作:
使用MetaMask購買假的以太幣。為此,請訪問MetaMask上的測試以太坊龍頭。
你已經將MetaMask連接到Ropsten。檢查連接是否仍然開放。
導航到Remix IDE。使用相關菜單選項,將你的智能合約部署到Ropsten。
使用MetaMask確認此操作。
按照你的測試計劃,測試智能合約。
9. 部署智能合約
現在你已經測試了智能合約,你需要部署它們。做好以下工作:
從Binance等加密貨幣交易所購買真正的以太幣。把它們儲存在你的MetaMask錢包里。你需要真實的以太幣來在以太坊主網上部署智能合約。
檢查Ganache實例,確保它仍在運行。
導航到Truffle。導航到你組織智能合約的Truffle目錄。
使用 "truffle deploy "命令將你的智能合約部署到Ethereum主網上。
注意部署后的智能合約地址。
10. 將你的智能合約連接到網絡應用程序的前端
你已經對你的網絡應用程序的前端進行了編碼,現在你需要將智能合約連接到它。請采取以下步驟:
在你選擇的IDE中打開Web應用項目。
創建一個空文件,并將其命名為 "web3.min.js"。你將需要這個文件在Web3.js的幫助下將智能合約連接到前端。
訪問GitHub上的Web3.js ChainSafe資源庫。復制 "web3 min代碼"。
將整個代碼粘貼到你在web應用項目中創建的web3.min.js文件中。
保存web3.min.js文件。
把它導入到你的Web應用項目的主HTML文件中。
11. 初始化你的智能合約
你現在需要初始化你已經部署的智能合約。這涉及到以下步驟:
11a. 獲取合同ABI(應用二進制接口)
以太坊使用稱為ABI的數據編碼方案來與智能合約進行通信。做好以下工作,以獲得ABI:
導航到Remix IDE的 "編譯 "選項卡。導航到ABI部分,在一個文本文件中記下ABI信息。
你需要對ABI信息進行清理。它是JSON格式的,而且有空格。使用JSON minify來刪除空格。為此,將ABI信息粘貼在JSON minify面板上。隨后,點擊 "JSON minify "按鈕。
復制輸出的數據。
把它粘貼到你的代碼中的 "const contractABI "變量中。
11b. 獲取合同地址
導航到Remix IDE的 "Run "標簽。獲取合同地址,并將其粘貼到代碼中一個名為 "const contractAddress "的變量中。
11c. 更新網絡應用的不同功能以使用智能合約
你已經編碼了你的智能合約以滿足你的DApp中的不同功能。你用JavaScript編碼了前端,現在你需要用相應的智能合約更新這些功能。
做好以下工作:
為每個智能合約創建一個合約實例。
用相應的 "const contract ABI "和 "const contractAddress "變量更新它。
打開一個函數的JavaScript文件。
用該函數的合同實例代碼更新它。
對所有的函數重復這一步驟。
總結
我已經介紹了用于構建金融服務應用程序的不同種類的區塊鏈網絡,你可以根據需要選擇最合適的一種,還一并介紹了如何使用以太坊區塊鏈平臺構建一個去中心化的金融服務應用程序,以及如何去構建你自己的基于區塊鏈的金融服務應用程序。祝你的項目取得好成績。