Go-Ethereum
智能合約 - 區塊鏈上的權限和使用者分組
我正在嘗試了解 SMART 契約,並希望對我的理解有所幫助。我認為回答我的問題的最佳方法是使用範例場景。
- 如果我在區塊鏈上有一個公證服務,我將有一個名為 Notary.sol 的合約。這將包含所有者、收件人、文件等詳細資訊。一旦所有各方都簽署了文件,就會在某處發送確認。我的問題是,每次新文件需要公證時,我是否需要再次向區塊鏈送出新契約,以便有一個具有新狀態的新“實例”等?
- 除了公證人的例子,我希望智能合約在其他方被允許簽署之前檢查他們的額外細節。例如,檢查他們的權限,甚至只是獲取他們的名字。要做到這一點,我會呼叫另一個智能合約作為事件來獲取結果,然後再繼續執行合約的其餘部分嗎?
- 在衛生部門,有醫生和病人。例如,一個醫生可以有很多病人。一個病人可以有一個主治醫生。類似的關係適用於教師和學生(多對多關係)。儲存學生成績可能會變得更加複雜。這似乎更適合在關係數據庫中進行管理,但區塊鏈用於管理記錄交易的信任。以醫生患者為例。如果他們目前的醫生離開/退休,我可能想要一份契約,將所有患者轉移到另一位醫生。這需要區塊鏈知道哪些患者屬於醫生。我如何在區塊鍊或合約中控制它?
- 如何確保只有特定使用者才能執行契約?合約是否有我們可以在執行前驗證的地址?
希望這些是明確的問題,我很感激你的回答
謝謝
- 最簡單(也是最便宜)的選擇可能是對所有文件使用相同的契約。您的契約中會有邏輯使一方能夠創建文件(可能通過使用文件的散列)並指定需要簽署它的各方。
- 任何一種解決方案都可以正常工作。這完全取決於您的架構。如果您覺得使用單獨的契約進行權限管理,實現更簡單,那就去做吧。
- 你認為有些東西最好不要放在區塊鍊和關係數據庫中是對的。一方面,您不能廉價(或有時根本)對數據進行複雜查詢。我的建議是讓事情盡可能簡單。您可以用於將醫生與患者聯繫起來的一個範例資料結構是患者地址到醫生地址的簡單映射:
// map of patients to doctors mapping (address => address) patientsDoctors;
- 是的,合約需要知道使用者的地址,但這並不意味著你必須在創建合約時知道地址。例如,您的合約可以有一個
admin
,在創建合約時分配,它可以改變agents
.msg.sender
如果未包含在agents
地圖中,則某些功能將需要失敗。