Solidity

呼叫不使用松露契約中聲明的變數

  • July 28, 2017

我與 Truffle 創建了一個簡單的契約來測試。我正在使用 testrpc 。

pragma solidity ^0.4.11;

contract HelloSystem {

   address owner;

   function HelloSystem() {
       owner = msg.sender;
   }

   function remove() {
       if (msg.sender == owner) {
           selfdestruct(owner);
       }
   }
}

部署此合約後,雖然我可以remove從 truffle 控制台呼叫,但我無法呼叫在合約啟動時設置的所有者。

試過:

truffle(development)> HelloSystem.deployed().then(function(instance){HS = HelloSystem.at(instance.address)})
HS.owner.call().then(console.log)
HS.owner
HS.owner.call()

我非常能夠在我的契約上呼叫刪除功能並將其刪除。但業主不工作。我確信我錯過了一些簡單的東西,如果有人能指出它,將非常感謝。

我創建了另一個帶有數字 uint balance 的簡單合約並將其公開。

contract helloWorld {    
   uint public balance;    

   function helloWorld() {
       balance = 1000;
   }
} 

現在,我的平衡呼籲工作正常。

truffle(development)> helloWorld.deployed().then(function(instance){HW = helloWorld.at(instance.address)})
truffle(development)> HW.balance
{ [Function]
 call: [Function],
 sendTransaction: [Function],
 request: [Function: bound ],
 estimateGas: [Function] }
truffle(development)>

這會是因為聲明 public/private 嗎?

根據我的公開聲明論點更新 內聯,我嘗試聲明address public owner仍然不起作用。因此對你們的人開放。請幫忙。

在您的契約中,變數owner不是公開的,因此 HS.owner 將是未定義的。

為了克服這個問題,您可以將所有者變數聲明為公共變數,或者創建一個 getter 函式來獲取所有者,如下所示:

address public owner;

或者

function getOwner() returns (address owner) {
   return owner;
}

據我了解,這應該是不斷返回以避免任何氣體使用。如下所示:

function getOwner() constant returns (address owner) {
   return owner;
}

希望這可以幫助..!

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