Solidity - результат функции "сейчас"

Я хотел бы, чтобы вы знали, какой формат возвращает функция now.

Я вызываю эту функцию в контракте и отправляю результат как событие в свой файл .js. Структура, которую я вижу, выглядит так:

функция вывода "сейчас"

Я хотел бы сравнить это время с полученным new Date().getTime();в javascript, но я не знаю значения «c, e, s» и я не уверен, что это тот же формат (длина числа результата отличается ), или я должен сначала справиться с этим. В этом случае, как я могу изменить его?

Ответы (1)

Я предполагаю, что вы используете web3.js. Тип числовых значений, возвращаемых контрактом, — BNили BigNumber, в зависимости от версии web3.js.

В обоих случаях .toString()вы получите строковое представление числа и .toNumber()выдаст вам число, но будьте осторожны с точностью! JavaScript не может безопасно обрабатывать числа больше 2 53 -1.

Для метки времени вы должны быть в порядке, просто используя .toNumber().

Ибо nowэто, вероятно, то же самое, но вообще говоря, toFixedдает "лучшие результаты", чем toString(лучше тем, что вы всегда получаете строку в чистом формате).
Когда я применяю toNumber(), я получаю 1535277654(аргумент «c» на изображении), но когда я применяю new Date().getTime()результат 1535277681189. Они имеют разный размер, поэтому я не могу ими правильно управлять. В чем разница? Есть ли способ получить ту же длину? @smarx
Временная метка блока указана в секундах с эпохи Unix. Временные метки JavaScript указаны в миллисекундах с эпохи Unix. Просто разделите отметку времени JavaScript на 1000. напр Math.floor(new Date() / 1000).