Как сериализовать числа и байты для Ethereum RPC

Универсальное добавление нуля слева может правильно закодировать данные вызова и одновременно испортить номер блока. Тип параметра определяет формат.

Проверьте ноль и нечётное число цифр

Добавьте в проверку сериализатора три границы. Номер нулевого блока — число. Один нулевой байт — данные. Для пустой последовательности есть отдельная запись.

quantity(0) = 0x0
data([0])   = 0x00
data([])    = 0x

Число пятнадцать передавайте как 0xf, а один байт с таким значением — как 0x0f. У чисел ведущие нули отбрасывают, в последовательности байтов на каждый байт приходится ровно две цифры.

Сохраните исходный тип параметра

Смотрите тип в схеме метода до преобразования. Если ключ передаётся как байтовая строка фиксированной ширины, старшие нулевые байты нужно оставить. Преобразование всех строк через целое число уничтожает эту информацию. eips.ethereum.org EIP-1474