DAPPS - 放入智能合約的範圍
隨著我對開發 Dapps 的了解越來越多,我無法理解智能合約中需要儲存的內容(通過我們的數據庫等)。
讓我們以一個簡單的博彩網站為例。我想像創建一個博彩網站的 Dapp 的方式如下,如果我錯了,請糾正我。
使用的技術:Ruby on Rails(後端)、React(前端)、Solidity(智能合約)
1)我會在我的數據庫中儲存以下資訊:
- 使用者(姓名、電子郵件等)
- 可用投注列表
- 使用者投注列表
2)創建使用者後,我將創建一個新的乙太坊錢包,其密碼與他的憑據相同,並將他的錢包的公共地址儲存在數據庫中。
3)我將儲存在智能合約中:
- 使用者 ID(來自數據庫)
- 投注 ID(來自數據庫)
- 投注金額
- 投注結果/狀態
- 使用者乙太坊錢包地址
- 我的網站乙太坊錢包地址
- 以及根據投注結果執行交易的程式碼(贏:將他的獎金轉移到使用者錢包,輸:將他的投注金額轉移到我的網站錢包)
因此,智能合約將僅包含與投注交易相關的資訊(投注結果、投注金額),而數據庫將包含其餘資訊。為了檢索使用者的投注歷史,我將從數據庫中檢索列表並從智能合約中檢索結果(通過投注和使用者的 ID 連結)。
我是否完全誤解了 Dapps/智能合約的概念?請指教,謝謝!!
首先,很高興您能更多地了解 DApp,看到社區不斷發展總是很高興。但是,您確實對 DApp 的設計方式存在一些誤解,因此我將嘗試為您指出有用的方向。
使用的技術:Ruby on Rails(後端)、React(前端)、Solidity(智能合約)
正如這個答案所指出的:
DApp 的後端程式碼在分散的點對點網路上執行。
根據定義,DApp 沒有像 RoR 那樣的經典後端。這意味著,為了讓你的應用程序被稱為 DApp,智能合約應該包含你所有的後端邏輯。實際上,前端可以是任何 JavaScript,以及為您提供與智能合約後端通信的 API 的web3 庫。
這是一個完全不同的範例,我在很長一段時間內都遇到了問題。一些經典技術有去中心化的替代方案,例如用於儲存或託管您的 DApp 網站的IPFS或Swarm,“使用者”應該與區塊鏈地址綁定,您可以使用PouchDB等。DApp 應該是完全開源的和自主。
如果您希望建構投注 DApp,您真的不需要將使用者資訊儲存在數據庫中 - 您可以對前端進行程式,例如,通過將任何投注的百分比發送到您控制的契約的契約進行互動,並擁有良好的商業模式,同時為 DApp 使用者提供良好的服務。但是,如果您希望每次都在區塊鏈上下注,交易成本有時會被證明太高。然而,這並不意味著你不能擁有混合應用程序——目前狀態下的真正 DApp確實有一些限制。
在開發 Lemon Email 時,我們必須權衡現有技術(例如 SMTP 伺服器)的一些好處以及去中心化應用程序的好處——因此我們決定創建適合所有人的 DApp。我們使用乙太坊區塊鏈來儲存我們互動的元數據,並使用 IPFS 作為我們的儲存。如果您願意,可以**在此處閱讀有關我們架構的更多資訊**。
一些額外的閱讀:
https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide/
https://www.packtpub.com/big-data-and-business-intelligence/mastering-blockchain