У меня проблема, мне нужна помощь в устранении неполадок: у меня развернут базовый смарт-контракт, и все его методы всегда возвращают ноль. Конструктор работает нормально, и использование web3.getStorateAt позволяет мне доказать, что это так
Сначала я думал, что с моими функциями не все в порядке, но даже простой идентификационный вызов, помеченный как view и сделанный из web3, встроенного в geth, не работает.
constructor(address ca, uint256 zkp, bytes32 uid) public {
creator = tx.origin;
coinAddress = ca;
secret = zkp;
userId = uid;
seed = block.timestamp;
}
function f(uint256 a) public view returns (uint256) {return a;}
function ff(uint256 a) public view returns (uint256, uint256) {return (a, a & (2**128 - 1));}
function fff(uint256 a) public view returns (uint256, uint256, uint256) {return (seed, a, a & (2**128 - 1));}
Конструктор работает нормально, но даже простые функции f возвращают ноль.
На самом деле, даже если getStorageAt доказывает, что вещи были сохранены, когда я пытаюсь прочитать их с помощью сгенерированных методов (я опубликую некоторое состояние public), он также возвращает 0!
Я назвал это так:
contract = web3.eth.contract([{"constant":false,"inputs":[{"name":"claim","type":"uint256"},{"name":"proof","type":"uint256"},{"name":"command","type":"bytes"}],"name":"storeTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"ffff","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"commandHash","type":"uint256"}],"name":"createChallenge","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"fff","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"f","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"ff","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"ca","type":"address"},{"name":"zkp","type":"uint256"},{"name":"uid","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}])
contract.eth.defaultAccount=contract.eth.coinbase
ct = contract.at('0x3d262eb4a0986def5d5340c0e1251b297165c1b3')
ct.f(3333, console.log)
ct.creator(console.log)
который печатает:
ноль 0
ноль 0x
Если у вас есть идеи, что не так, я бы очень хотел
Спасибо уже,