智能合約中如何處理授權
我在 Azure 區塊鏈服務上部署了 Quorum 網路,供聯盟的特定受邀成員使用。我還沒有探索 Quorum 在乙太坊之上提供的隱私功能。但我注意到某些行為讓我想知道在任何基於乙太坊的區塊鏈中如何處理授權。
- 網際網路上任何知道網路中任何節點的 RPC URL(HTTPS 訪問密鑰)並擁有已部署的合約地址和 ABI 的人,都可以在他們的筆記型電腦上使用
web3.eth.accounts.create()
並開始發送簽名消息來讀取狀態變數並執行任何部署在網路上的任何智能合約的功能。- 網際網路上任何知道網路中任何節點的 RPC URL(HTTPS 訪問密鑰)並擁有已部署的合約地址和 ABI 的人,都可以讀取狀態變數並執行部署在網路上的任何智能合約的獲取功能,而無需簽名,通過使用儲存在 geth 節點本身上的帳戶。
授權是通過將授權賬戶硬編碼到合約中並在每個函式中檢查它們來完成的嗎?如果是這樣,當帳戶的私鑰失去時會發生什麼?智能合約會變得無法使用嗎?
Azure 提供了一個 RPC 安全層,用於強制對網路進行訪問控制。為了向您的 RPC 介面提供身份驗證,您可以使用基本身份驗證、基於證書的身份驗證,或者您可以連結到您的身份提供者。
在您成為網路的一部分(rpc auth passe)之後,您將擁有 Quorum 狀態授權層(所謂的許可模型),該授權層將強制分離私有和公共狀態(通過說私有與公共契約更容易理解) . 然而,除了私有和公共狀態之間的分離之外,該層不強制執行授權。
目前,智能合約開發人員需要提供適合其應用的基於功能的授權模型(最常用的一種是“所有者模式”),
正確看待它;RPC 安全 -> 仲裁狀態授權層 -> 自定義建構的智能合約授權層。
基於Quorum智能合約的許可框架提供了一種管理許可網路的通用方式,但它在私有/公共狀態授權層而不是智能合約功能級別執行。
網際網路上任何知道網路中任何節點的 RPC URL 並擁有已部署合約地址和 ABI 的人,都可以使用 web3.eth.accounts.create() 在他們的筆記型電腦上創建一個帳戶,並開始發送簽名消息以讀取狀態變數並執行部署在網路上的任何智能合約的任何功能。
如果您的 RPC 介面不安全(不需要身份驗證並綁定到 0.0.0.0),那麼是的,任何人都可以與網路互動並詢問網路,但這並不意味著他們將能夠與私有狀態進行互動。只有當暴露的節點是特定合約的私有電路的一部分時,才會發生這種情況。
網際網路上任何知道網路中任何節點的 RPC URL 並擁有已部署的合約地址和 ABI 的人,都可以通過使用帳戶讀取狀態變數並執行部署在網路上的任何智能合約的獲取功能,而無需簽名儲存在 geth 節點本身。
不,必須解鎖帳戶,並且要解鎖帳戶,您需要密碼。
授權是通過將授權賬戶硬編碼到合約中並在每個函式中檢查它們來完成的嗎?
是,如果使用“所有者模式”
當帳戶的私鑰失去時會發生什麼?智能合約會變得無法使用嗎?
如果您失去了帳戶的私鑰並且您擁有依賴於該帳戶簽名的資源,那麼遊戲就結束了。
我建議您閱讀以下內容:
http://docs.goquorum.com/en/latest/Security/Framework/Overview/ https://solidity.readthedocs.io/en/v0.4.24/common-patterns.html#restricting-access https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/