Solidity

有沒有辦法寫出只能通過DAPP呼叫的智能合約功能?

  • January 15, 2022

我想創建一個外部/公共的solidity函式,只能通過dapp而不是etherscan.io呼叫。有沒有辦法,比如修改器或第三方?

區塊鏈背後的理念是無需許可且透明。任何人都可以隨時驗證區塊鏈狀態。Etherscan 就是這樣一種 UI,任何人都可以創建一個前端來讀取狀態(呼叫視圖函式)。

關於寫入區塊鏈,任何具有有效簽名的人都可以呼叫外部/公共函式。因此,無論你可以通過你的 dapp 做什麼,都可以通過任何其他方法來完成,因為最終,dapp 只是通過 PRC 提供商與區塊鏈互動的程式碼片段。

但是,如果你真的想控制訪問,你可以做的是讓合約需要多重簽名。假設您有一個可由使用者呼叫以更改狀態的函式。您可以修改它以要求來自您控制的另一個批准者地址的有效簽名,這也是函式呼叫的一部分。然後,您可以配置您的 dapp 以在您的使用者想要與合約互動時從您的後端提供所需的簽名。這樣,即使任何人都可以呼叫這些函式(比如在 etherscan 上),只有那些從你的 dapp 呼叫的函式才會觸發該批准者地址簽名。

這只是一個關於如何實施的理論想法。但實際上你應該避免使用這種模式,因為它使整個智能合約互動集中化,從而打敗了區塊鏈意識形態的一部分。

有一個修飾符 onlyOwner/OnlybyOwner 只允許部署合約的人呼叫該函式。原始所有者可以添加其他所有者。(在這裡查看 OpenZeppelin

但是您也可以創建一個自定義的,以更好地滿足您的要求。

ShortAnswer:您可以創建一個修飾符來限制誰可以呼叫函式。您甚至可以硬編碼地址,這些地址將是唯一允許呼叫所述函式的地址。

引用自:https://ethereum.stackexchange.com/questions/118900