web3 мгновенно перезванивает - PullRequest
0 голосов
/ 26 мая 2018

не уверен, стоит ли публиковать это на Ethereum SE, но у меня такое ощущение, что это больше связано с javascript, поэтому я попробую здесь:

У меня очень простой умный контракт, который состоит по существу из простогоgetNum функция и setNum функция.Смарт-контракт можно посмотреть здесь: https://pastebin.com/ci6mbPDq

Я пытаюсь создать простой интерфейс для его вызова.По сути, я следую этому руководству .Рабочий код моего интерфейса (демонстрирующий функциональность janky) можно найти здесь: https://codepen.io/heh/pen/PeMmKe Как вы можете видеть в моем коде, я называю свою функцию getNum следующим образом:

BasicToken.getNum(0x64319ca297239d8652a0b5f0f12dd6666cb0e05b,

        function(error, result)
        {
            console.log(result.toNumber());
            document.getElementById("target").innerText = result.toNumber();

        }
    );

ОднакоЯ получаю «0» в результате.С другой стороны, моя функция setNum может публиковать результаты в блокчейне Ropsten.Тем не менее, я замечаю, что оба вызова функций, похоже, мгновенно запускают свой обратный вызов.

Может ли кто-нибудь помочь мне понять, почему вызовы функций возвращаются мгновенно?

Спасибо!

1 Ответ

0 голосов
/ 26 мая 2018

Обратный вызов вызывается не сразу, проблема в том, что вы не отправляете фактический адрес, который должен быть строкой, а отправляете номер:

0x64319ca297239d8652a0b5f0f12dd6666cb0e05b == 5.720054584403591e+47

И вы получаете 0 потому что этот неверный адрес, который вы отправляете, не существует в отображении:

mapping (address=>uint) map23;

И если он не существует, он вернет значение по умолчанию для uint, которое равно нулю.

Отправьте строку, и она будет работать:

BasicToken.getNum('0x64319ca297239d8652a0b5f0f12dd6666cb0e05b', () => {})

Более того, если вы хотите, чтобы текущий пользователь только извлекал их собственное значение, и не позволяли другим пользователям извлекать эти данные (они могут, так как этопублично, но не так просто), вы должны использовать msg.sender и удалить параметр функции.

function getNum() public view returns (uint) {
   return map23[msg.sender];
}
...