Как сериализовать числа и байты для Ethereum RPC
Универсальное добавление нуля слева может правильно закодировать данные вызова и одновременно испортить номер блока. Тип параметра определяет формат.
Проверьте ноль и нечётное число цифр
Добавьте в проверку сериализатора три границы. Номер нулевого блока — число. Один нулевой байт — данные. Для пустой последовательности есть отдельная запись.
quantity(0) = 0x0
data([0]) = 0x00
data([]) = 0x
Число пятнадцать передавайте как 0xf, а один байт с таким значением — как 0x0f. У чисел ведущие нули отбрасывают, в последовательности байтов на каждый байт приходится ровно две цифры.
Сохраните исходный тип параметра
Смотрите тип в схеме метода до преобразования. Если ключ передаётся как байтовая строка фиксированной ширины, старшие нулевые байты нужно оставить. Преобразование всех строк через целое число уничтожает эту информацию. eips.ethereum.org EIP-1474