Access
合約中合約的可訪問性和安全性作為變數
假設我有一份契約:
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(); } }
我想知道Token
mint
的功能是否可以從外部訪問?當我嘗試在 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 的契約。我不隸屬於他們。