Access

合約中合約的可訪問性和安全性作為變數

  • April 3, 2018

假設我有一份契約:

contract Token {
   uint totalSupply;

   function Token() public {
       totalSupply = 0;
   }

   function mint() public{
       //Do minting
   }
}

然後是另一個契約,其中第一個契約是公共變數:

contract CrowdSale {

   Token public token;

   function Test() public{

   }

   function buyTokens() external payable {
       token.mint();
   }
}

我想知道Tokenmint的功能是否可以從外部訪問?當我嘗試在 Remix 中執行此操作時,我只從公共令牌中獲得,但是有沒有辦法呼叫該函式,或者它實際上是安全的,人們只能呼叫該函式?"0": "address: 0x0000000000000000000000000000000000000000"``mint``buyTokens

好吧,根據你的mint()函式的簽名,人們將能夠直接呼叫它,直接與代幣合約互動。

通常,進行 ICO 的項目傾向於在一份契約中進行代幣和眾籌。如果您不想這樣做,您可以這樣做,這樣只有您的眾籌合約才能通過限制其訪問權限來呼叫該函式。

contract Token {
   uint totalSupply;
   address crowdsaleContract;

   function Token() public {
       totalSupply = 0;
   }

   function mint() public{
       require(msg.sender == crowdsaleContract);
       //Do minting
   }
}

另一種選擇是預先鑄造代幣,並將它們記入你的眾籌地址,這樣你就可以直接分發它們。

PS:你應該為這種東西使用經過實戰考驗的契約,而不是自己製作。您可以使用Zeppelin 的契約。我不隸屬於他們。

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