Подтверждение существования (POE) входных данных первые 8 цифр

Я пытаюсь реализовать модель POE на основе блокчейна Ethereum. По сути, я получаю хэш sha-256 из документа, затем отправляю транзакцию 0 эфира себе и добавляю хэш документа в поле «Данные». Транзакция проверяется, и я вижу ее: https://ropsten.etherscan.io/tx/0x1f4d3136b16de5ca56e04edfbb5139e902d624a200846374f7cba8b598f6dd82 (в настоящее время я делаю это в тестовой сети)

Однако мои входные данные были 15e2b0d3c3 ..... а в квитанции данные 0x53369b73 15e2b0 ...... Все хорошо, только вот я не понимаю, зачем вставлены эти 8 цифр, что они обозначают? И для чего этот 0x впереди всего?

Если бы кто-то мог объяснить это простыми словами, я был бы очень благодарен.

Ответы (1)

Просто 0xуказывает, что данные в шестнадцатеричном формате. Это просто соглашение о представлении, а не часть данных.

Часть 53369b73интереснее. Это похоже на сигнатуру вызова функции в Ethereum ABI . Когда вы создали транзакцию, похоже, что вы вызвали метод контракта. «Подпись» этого метода всегда формирует первые четыре байта данных вызова в соответствии со спецификацией ABI — именно так контракт может определить, какой из его методов вы вызываете. (Если вы предоставите больше информации о том, как вы создали транзакцию, я, вероятно, смогу расширить это.)

Вы можете отправлять данные как транзакцию без вызова метода. Например web3.js, вы можете использовать sendTransactionи точно указать, какие данные вы хотите отправить, используя dataпараметр. Но если вы работаете с контрактами, написанными в Solidity, вы, вероятно, не захотите делать это напрямую.

спасибо за ваш подробный ответ. Я просто использую myetherwallet для отправки транзакций. У меня нет развернутого контракта. Также я попробовал POE-сервис stamp.io , и кажется, что они делают это таким же образом и получают тот же результат (результат также имеет этот префикс 53369b73), поэтому мне до сих пор неясно, как/почему формируются эти 8 чисел...
Хм. Я только что отправил вам щедрую транзакцию Ropsten Eth в размере 0,0001 через вкладку MyEtherWallet «Отправить Ether & Tokens». В качестве данных транзакции я только что ввел «0x15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225» (без кавычек) — как вы можете видеть, в самой транзакции они не изменились, поэтому я не знаю, почему они отличаются для вас. Убедитесь, что вы отправляете Ropsten Eth (любая сумма, 0 в порядке), а не токен, поскольку передача токена на самом деле является замаскированным вызовом функции.
Не могли бы вы также попробовать загрузить файл на штамп.io (просто создайте простой файл .txt, например) и использовать их службу подтверждения существования. Как только вы загрузите файл, вы увидите его код SHA-256. Когда существование вашего документа будет подтверждено, вы можете щелкнуть ссылку (код транзакции), чтобы просмотреть подробности. Являются ли «Входные данные» такими же, как код sha-256 вашего файла, или они имеют эти 8 чисел впереди?
ОК - сделал это. Я вижу префикс "53369B73". Их страница сертификата для документа (часть технических деталей) говорит, что они добавляют этот префикс, так что это разумно (хотя я не знаю почему). Однако я не понимаю, откуда это может взяться, если вы используете MyEtherWallet для создания своей транзакции.
Большое спасибо! Этот префикс действительно исходит от их службы, поэтому (я думаю) в нем нет необходимости при реализации моей собственной службы POE. Вы настоящий гений, ваши объяснения помогли мне понять много нового (что происходит за кулисами)
Всегда пожалуйста. Я немного отредактировал свой ответ выше, чтобы сказать, что это «похоже» на сигнатуру функции - в данном случае, вероятно, это не так. В любом случае, это может помочь кому-то еще в будущем. Удачи, чтобы все заработало.