Solidity

如何將函式限制為只能從一個外部合約呼叫?

  • March 5, 2021

我有一份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;
}

希望能幫助到你。

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