Solidity
呼叫不使用松露契約中聲明的變數
我與 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; }
希望這可以幫助..!