Web3 мгновенно запускает обратный вызов

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

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

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

BasicToken.getNum(0x64319ca297239d8652a0b5f0f12dd6666cb0e05b,

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

        }
    );

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

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

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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];
}

Спасибо! Это было именно то! И спасибо за подсказку, я учту это

information_interchange 26.05.2018 18:35

Пожалуйста :), шестнадцатеричные числа тебя кусают, так как синтаксис валидный :)

Marcos Casagrande 26.05.2018 18:36

Ага, да, думал, что у javascript почему-то есть тип "адрес" :)

information_interchange 26.05.2018 18:38

Другие вопросы по теме