Вызов не работает с объявленной переменной в контракте с трюфелем

Я создал простой контракт с 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(development)> HelloSystem.deployed().then(function(instance){HS = HelloSystem.at(instance.address)})
HS.owner.call().then(console.log)
HS.owner
HS.owner.call()

Я очень хорошо могу вызвать функцию удаления в моем контракте и удалить ее. Но хозяин не работает. Я уверен, что мне не хватает чего-то простого, если кто-нибудь может указать на это, было бы очень вау большое спасибо.

Я создал еще один простой контракт с числовым балансом uint и сделал его общедоступным.

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?

Обновите Inline с моим аргументом публичного объявления, я попытался объявить, что address public ownerвсе еще не работает. Поэтому открыты для ваших парней. Пожалуйста помоги.

Ответы (1)

В вашем контракте переменная ownerне является общедоступной, поэтому HS.owner не будет определен.

Чтобы решить эту проблему, вы можете либо объявить переменную владельца общедоступной, либо создать функцию получения, чтобы получить владельца, как показано ниже:

address public owner;

или

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

Насколько я понимаю, это должен быть постоянный возврат, чтобы избежать использования газа. как показано ниже:

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

Надеюсь это поможет..!

Да, это работает. Как ни странно, позже я объявил адрес общедоступным, когда понял, что причина, которую вы указали, должна быть причиной. Как-то возможно, потому что я не сохранил код, новое изменение не было скомпилировано :)
возможно, файл не был сохранен, не скомпилирован или не перенесен. :)