Есть ли способ встроить в QR-код какую-либо дополнительную информацию (например, имя пользователя, начальное число или любой другой небольшой фрагмент данных)? Другими словами, я хочу передать в контракт некоторые значения, закодировав их в QR-код. Каждый сгенерированный QR-код будет выглядеть по-разному, но вызывать один и тот же контракт.
Благодарю вас!
Вы вызываете тот же контракт через поле адреса, используя транзакцию. Вы можете добавить данные, используя поле данных.
QR-коды могут быть сгенерированы для любых данных. Они могут быть довольно большими и подробными для больших наборов данных, но мы в MyEtherWallet успешно используем QR-коды для перемещения подписанных транзакций с автономного компьютера на онлайн на вкладке офлайн-транзакций .
Примечание. QR-коды имеют максимальный размер. Только цифры: 7089 символов. Буквенно-цифровой: 4296 символов. Двоичный/байтовый: 2953 символа (8-битные байты). Вы можете узнать больше здесь .
Итак, вопрос сводится к следующему: какую информацию вы хотите поместить в QR-код и что делает пользователь?
Вот одно из решений:
Найдите платформу, которая принимает параметры для контракта через строки запроса или другим способом.
Создайте URI с этими параметрами для пользователя и превратите его в QR-код.
Предложите пользователю использовать QR-код, чтобы перейти по этому URL-адресу, и использовать свою учетную запись для совершения транзакции (т. е. взаимодействия со смарт-контрактом).
Давайте рассмотрим пример того, как вы можете сделать это прямо сейчас, используя MyEtherWallet, который имеет возможность принимать адрес, сумму, данные и газ на странице отправки транзакции.
Допустим, вы хотите, чтобы пользователь отправлял 1 ETH
на адрес 0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8
с simple text string
, и небольшое увеличение газа, 23000
чтобы покрыть стоимость дополнительных данных. URL-адрес, с которого вы должны начать, будет таким:
Если бы пользователь перешел на эту вкладку и разблокировал свою учетную запись, вся эта информация была бы заполнена. Затем им просто нужно сгенерировать подписанную транзакцию и отправить ее. Если вы хотите протестировать и посмотреть, что произойдет, когда вы перейдете по этому URL-адресу, вы можете использовать тестовый приватный ключ, 92aa647439f9300d214f9264141931627082364f4c081a646d72e067e04e0e1b
чтобы разблокировать кошелек и посмотреть.
Данные могут быть какими угодно, и это отдельная проблема, с которой вам придется иметь дело. Все данные должны быть в шестнадцатеричном формате. В приведенном выше примере я использовал онлайн-конвертер ascii в hex для отправки сообщения «MyEtherWallet — лучший!» В этом случае принимающий адрес ничего не делает с этими данными. Очевидно, что если бы адрес получателя был контрактом, его можно было бы настроить для чтения и выполнения с ним каких-либо действий в зависимости от значения этих данных.
Вам следует ознакомиться с предложением Алекса Ван Де Санда для URL-адреса ERC из проекта EIP (Предложения по улучшению Ethereum), целью которого является создание системы, позволяющей приложениям выполнять транзакцию, включая поле данных. Поле данных — это то, что вам нужно заполнить, чтобы вызвать контрактную функцию. Если у вас есть эта строка URL, вам нужно будет только сгенерировать для нее QRCode.
Это предложение основано на BIP 21 и может применяться к формату адреса IBAN, но может быть расширено и на другие предлагаемые форматы адресов. Представьте себе эти сценарии:
Биржа или мгновенный конвертер, такой как изменение формы, хочет создать единый адрес Ethereum для платежей, которые будут конвертированы в кредит в их внутренней системе или выводить биткойны на адрес.
Магазин хочет показать клиенту QR-код, который выведет платеж ровно на 12,34 эфира, который содержит метаданные о покупаемом продукте.
Сайт ставок хочет предоставить ссылку, по которой пользователь может щелкнуть на своем сайте, и он откроет кошелек Ethereum по умолчанию и выполнит определенный контракт с заданными параметрами.
Децентрализованное приложение в Mist хочет просто попросить пользователя подписать транзакцию с определенным abi за один вызов.
Но, насколько мне известно, ни один мобильный кошелек не может пока назвать произвольный контракт (держу пари, что первым, кто даст такую возможность, будет Jaxx, так как они очень усердно работают над улучшением своего кошелька), и это предложение до сих пор не принято и не реализовано ни в мобильные и настольные кошельки.
«Конечно, можно», в теории и на практике. Вы можете использовать эту технику .
Если у вас хватит терпения посмотреть его целиком, подробное объяснение можно найти в этом видео .
Николя Массар
тайвано