Solidity
如何將函式限制為只能從一個外部合約呼叫?
我有一份
Reputation
契約,它有一個foo()
設定點的功能。
Market
在另一個名為我想使用該foo()
功能的契約中。但我不希望任何人能夠在foo()
外面打電話Market
。問題是我需要先部署
Reputation
並在市場上創建實例。我不知道如何在部署之前使修飾符Reputation
限制。foo()``Market
檢查
msg.sender
並拒絕不可接受的演員。在
Market
保護foo()
- 確保msg.sender == reputation
。同樣在
Market
-reputation
當您知道地址時更新的功能。這裡有一個小塗鴉,可以給你一些想法。
contract Market { address reputation; modifier onlyReputation { require(msg.sender == reputation, "403"); _; } constructor(address reputation_) { reputation = reputation_; } function foo() public onlyReputation { // carry on } }
這是一般的想法。
reputation
您可以添加功能以不時編輯/更新可接受的內容。您可能需要另一個變數,例如address owner
指定允許執行此操作的人員。最後,如果您想協調部署並且每個 Reputation 都有一個市場,請使用 動態
constructors
配置所有內容。在
Reputation
:Market market;); constructor () { market = new Market(); }
這樣它就會創建一個並知道它在哪裡。在
Market
中,承認“創造者”是值得信賴的人。address reputation; constructor () { reputation = msg.sender; }
希望能幫助到你。