Что такое 0x, который я вижу вокруг Ethereum? Например, я вижу адреса, начинающиеся с 0x.

Я вижу, что некоторые вещи в Ethereum начинаются с 0x, например, адреса. Другие примеры есть в консоли Geth, JSON-RPC, web3.js. Что такое 0x и какова его цель?

Ответы (1)

Префикс «0x» означает шестнадцатеричный , и это способ сообщить программам, контрактам, API, что ввод следует интерпретировать как шестнадцатеричное число (мы сократим до шестнадцатеричного).

Например, (десятичное) число 18 равно "12" в шестнадцатеричном формате. Чтобы исключить возможную путаницу с числом 12, добавление 0x в начале дает понять, что 0x12 является шестнадцатеричным.

Hex в некоторых отношениях менее удобен для человека, но помогает в других отношениях, например, hex — это более короткий способ выражения больших чисел.

Адрес Ethereum, который у вас есть, — это просто число, но «за» ним у вас есть закрытый ключ, так что только вы можете тратить свой эфир. У каждого контракта тоже есть адрес. Все они могут быть преобразованы в десятичные числа, попробуйте, и вы увидите, что десятичные числа намного длиннее: представьте, насколько сложнее было бы взглянуть на исследователей блокчейна, если бы они использовали десятичные числа вместо шестнадцатеричных.

Таким образом, цель 0x в первую очередь состоит в том, чтобы сообщить программам, что ввод является шестнадцатеричным. Но 0x также может сказать людям, что то, что они читают, является шестнадцатеричным. Поскольку адреса и хэши транзакций отображаются в шестнадцатеричном формате, исследователи блокчейна могут везде указывать 0x, чтобы было понятнее, что они шестнадцатеричные. Но поскольку обычным пользователям на самом деле не нужно знать, является ли адрес шестнадцатеричным или нет, проводники опускают их в своих пользовательских интерфейсах. Однако для результатов API может потребоваться использование 0x: когда Geth возвращает ваш баланс как 0x12, это делается для того, чтобы было ясно, что ваш баланс на самом деле составляет 18 wei.

Еще одно замечание: некоторые данные, такие как баланс, могут иметь больше смысла в виде десятичного числа, поэтому всякий раз, когда они представлены в шестнадцатеричном формате, обязательно следует использовать 0x. Но такие данные, как хэши и адреса транзакций, не имеют смысла предоставлять в виде десятичного числа. Поскольку единственный практичный способ предоставить их - в шестнадцатеричном формате, вы можете опустить 0x. Например, попробуйте предоставить хэш транзакции с 0x и без него в eth.getTransactionAPI в Geth, и вы получите те же результаты.