Может ли какая-либо информация помимо адреса быть закодирована в QR-код?

  1. Я хочу создать контракт.
  2. Я хочу сгенерировать QR-код для вызова этого контракта.
  3. Я хочу представить этот QR-код пользователю.

Есть ли способ встроить в QR-код какую-либо дополнительную информацию (например, имя пользователя, начальное число или любой другой небольшой фрагмент данных)? Другими словами, я хочу передать в контракт некоторые значения, закодировав их в QR-код. Каждый сгенерированный QR-код будет выглядеть по-разному, но вызывать один и тот же контракт.

Благодарю вас!

Ответы (3)

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

QR-коды могут быть сгенерированы для любых данных. Они могут быть довольно большими и подробными для больших наборов данных, но мы в MyEtherWallet успешно используем QR-коды для перемещения подписанных транзакций с автономного компьютера на онлайн на вкладке офлайн-транзакций .

Примечание. QR-коды имеют максимальный размер. Только цифры: 7089 символов. Буквенно-цифровой: 4296 символов. Двоичный/байтовый: 2953 символа (8-битные байты). Вы можете узнать больше здесь .

Итак, вопрос сводится к следующему: какую информацию вы хотите поместить в QR-код и что делает пользователь?

Вот одно из решений:

  1. Найдите платформу, которая принимает параметры для контракта через строки запроса или другим способом.

  2. Создайте URI с этими параметрами для пользователя и превратите его в QR-код.

  3. Предложите пользователю использовать QR-код, чтобы перейти по этому URL-адресу, и использовать свою учетную запись для совершения транзакции (т. е. взаимодействия со смарт-контрактом).

Давайте рассмотрим пример того, как вы можете сделать это прямо сейчас, используя MyEtherWallet, который имеет возможность принимать адрес, сумму, данные и газ на странице отправки транзакции.

Допустим, вы хотите, чтобы пользователь отправлял 1 ETHна адрес 0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8с simple text string, и небольшое увеличение газа, 23000чтобы покрыть стоимость дополнительных данных. URL-адрес, с которого вы должны начать, будет таким:

https://www.myetherwallet.com/?gaslimit=23000&data=4d79457468657257616c6c657420697320746865206265737421&to=0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8&value=1.0#send-value=1.0#send-value=1.0#send-value=1.0#send-value=1.0#

Если бы пользователь перешел на эту вкладку и разблокировал свою учетную запись, вся эта информация была бы заполнена. Затем им просто нужно сгенерировать подписанную транзакцию и отправить ее. Если вы хотите протестировать и посмотреть, что произойдет, когда вы перейдете по этому URL-адресу, вы можете использовать тестовый приватный ключ, 92aa647439f9300d214f9264141931627082364f4c081a646d72e067e04e0e1bчтобы разблокировать кошелек и посмотреть.

Данные могут быть какими угодно, и это отдельная проблема, с которой вам придется иметь дело. Все данные должны быть в шестнадцатеричном формате. В приведенном выше примере я использовал онлайн-конвертер ascii в hex для отправки сообщения «MyEtherWallet — лучший!» В этом случае принимающий адрес ничего не делает с этими данными. Очевидно, что если бы адрес получателя был контрактом, его можно было бы настроить для чтения и выполнения с ним каких-либо действий в зависимости от значения этих данных.

Я не знал, что MEW может обрабатывать URL такого типа. Хорошо сделано ! Продолжайте кодировать!
Одно из преимуществ отсутствия необходимости начинать дискуссию о потенциальных опасностях URI. Я уверен, что EIP пройдет... в какой-то момент. 😣

Вам следует ознакомиться с предложением Алекса Ван Де Санда для URL-адреса ERC из проекта EIP (Предложения по улучшению Ethereum), целью которого является создание системы, позволяющей приложениям выполнять транзакцию, включая поле данных. Поле данных — это то, что вам нужно заполнить, чтобы вызвать контрактную функцию. Если у вас есть эта строка URL, вам нужно будет только сгенерировать для нее QRCode.

Это предложение основано на BIP 21 и может применяться к формату адреса IBAN, но может быть расширено и на другие предлагаемые форматы адресов. Представьте себе эти сценарии:

  • Биржа или мгновенный конвертер, такой как изменение формы, хочет создать единый адрес Ethereum для платежей, которые будут конвертированы в кредит в их внутренней системе или выводить биткойны на адрес.

  • Магазин хочет показать клиенту QR-код, который выведет платеж ровно на 12,34 эфира, который содержит метаданные о покупаемом продукте.

  • Сайт ставок хочет предоставить ссылку, по которой пользователь может щелкнуть на своем сайте, и он откроет кошелек Ethereum по умолчанию и выполнит определенный контракт с заданными параметрами.

  • Децентрализованное приложение в Mist хочет просто попросить пользователя подписать транзакцию с определенным abi за один вызов.

Но, насколько мне известно, ни один мобильный кошелек не может пока назвать произвольный контракт (держу пари, что первым, кто даст такую ​​возможность, будет Jaxx, так как они очень усердно работают над улучшением своего кошелька), и это предложение до сих пор не принято и не реализовано ни в мобильные и настольные кошельки.

«Конечно, можно», в теории и на практике. Вы можете использовать эту технику .

Если у вас хватит терпения посмотреть его целиком, подробное объяснение можно найти в этом видео .

Добро пожаловать в Эфириум! Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.
Кроме того, даже прочитав статью, я не понимаю, где вы считаете полезным выполнить то, о чем просит ОП. Объясните пожалуйста ?
С помощью алгоритмов стеганографии и сжатия вы можете кодировать информацию в виде двоичных пикселей данных без изменения рабочего QR. Идея состоит в том, чтобы иметь небольшую картинку (данные) в QR, которая может делать все, что хочет пользователь. Должен ли я добавить это в ответ?
Однако есть много возможностей, которые следует рассматривать как жизнеспособный пример.