Modifiers

加密殭屍外部修飾符

  • July 28, 2018

加密殭屍中的一篇教程提到了external函式。

contract KittyInterface {
 function getKitty(uint256 _id) external view returns (
   bool isGestating,
   bool isReady,
   uint256 cooldownIndex,
   uint256 nextActionAt,
   uint256 siringWithId,
   uint256 birthTime,
   uint256 matronId,
   uint256 sireId,
   uint256 generation,
   uint256 genes
 );
}

contract ZombieFeeding is ZombieFactory {

 KittyInterface kittyContract;

 function setKittyContractAddress(address _address) external onlyOwner {
   kittyContract = KittyInterface(_address);
 }

在這裡,setKittyContractAddress用於在緊急情況下更改地址。為什麼必須聲明為external

因為聽起來您必須部署另一個合約才能更改 kitty 合約地址。

前任:

contract ZombieFeedingInterface {
 function setKittyContractAddress(address _address) external;
}

contract Test {
   address zfAddress = 0x......;
   ZombieFeeding zombieFeeding = ZombieFeedingInterface(zfAddress);

   function changeKittyContractAddress(address _address) private onlyOwner {
       zombieFeeding.setKittyContractAddress(_address);
   }
}

並且還創建一個單獨的 html 頁面 (UI) 來傳遞 newaddress給這個函式。

setKittyContractAddress聲明為internalor不是更好private,因此所有者不必創建另一個契約,因此可以使用現有契約輕鬆處理它?

external在這種情況下有什麼好處?

已標記privateinternal只能從合約本身中的另一個函式呼叫的函式(或在 的情況下為派生合約internal)。

如果您希望能夠自己呼叫該函式,則需要將其標記為publicexternal。是的,你可以從另一個合約中呼叫它,但更常見的是你會通過發送交易直接呼叫它。

https://solidity.readthedocs.io/en/v0.4.24/contracts.html#visibility-and-getters可能會有所幫助。

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