Проверяемые случайные функции и способы их использования.

Chainlink (ChainLink на Medium) постепенно интегрируется во все большее количество блокчейнов, децентрализованных приложений, децентрализованных игр и даже в приложения de-fi. Но что это такое и, что более важно, как мне его использовать? Я постараюсь объяснить оба этих вопроса в этой статье.

Что такое Chainlink VRF

Одной из основных особенностей Chainlink является его VRF или проверяемая случайная функция. Это примерно означает, что вы можете получать случайные значения из контрактов Chainlinks, и что пользователи могут убедиться, что ваша программа не дает вам большей случайности, чем вы утверждаете.

Пример

Например, вы подбрасываете онлайн-монету, вводя «подбросить монету» или используя приложение. Вы ожидаете, что шанс выпадения орла или решки составит 50%, или, по крайней мере, после того, как вы подбросите миллион монет, он должен быть очень близок к этому. Но что, если я искажу случайность в свою пользу?

Я выигрываю у вас 10 евро каждый раз, когда программа выпадает решкой. Но если я также запрограммирую его так, чтобы он выпадал «решкой» в 51% случаев, это даст мне огромное преимущество по сравнению с 1 миллионом подбрасываний монеты.

Чтобы быть честным, я должен предоставить документы, подтверждающие, что я не менял случайность. А в верифицированном смарт-контракте с использованием VRF вы можете доказать, что предоставляете справедливую случайность.

Как реализовать Chainlink VRF в смарт-контракте

Теперь о технической стороне дела. Мы собираемся заключить контракт Solidity (например, для Ethereum или Polygon) для имитации подбрасывания монеты. Я собираюсь использовать Truffle в качестве набора для разработки и Remix для быстрого развертывания и визуального тестирования контракта. Вы также можете использовать HardHat.

Примечание. Мы будем тестировать в тестовой сети Ринкеби. Вам понадобятся как Rinkeby ETH, так и LINK, которые вы можете получить через сборщик Chainlink. Вы можете найти в Google ссылку на сборщики, так как их несколько.

Настройка вещей

Давайте начнем с добавления некоторых основных файлов, инициализации Truffle и установки контрактов Chainlink из NPM.

truffle init
truffle create contract CoinToss
npm install @chainlink/contracts --save

Это инициализирует Truffle и создаст новый пустой контракт с именем CoinToss.sol, который мы будем использовать для нашего проверяемого децентрализованного приложения подбрасывания монеты. Импортируйте контракт VRFConsumerBase от Chainlink в свой собственный. Ваш код должен выглядеть примерно так:

Совет. Запустите truffle compile, чтобы проверить, все ли в порядке.

Реализация VRFConsumerBase

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

Таким образом, теоретически, когда мы развернем это, финансируем адрес контракта с помощью LINK и ETH и вызовем функцию getRandomNumber и переменную randomResult, мы должны получить большое случайное число.

Итак, как мы можем использовать это число для проверки конкретных значений, например, какое число выпадает на одном кубике или какое значение возвращается при подбрасывании монеты?

Оператор по модулю, конечно!

Вы, конечно, можете изменить число 2 на 6 для костей или на 100 для случайного процента. Вы можете прочитать об этом в разделе Лучшие практики Chainlink VRF.

Контракт сейчас закончен. Его можно отшлифовать гораздо больше, мы можем вернуть строку «орел» или «решка» вместо числа, но это то, что вы можете попробовать сами.

Запуск контракта в Remix

Откройте Remix и создайте новый файл CoinToss.sol, в который можно скопировать-вставить контракт. Просто вставьте его и скомпилируйте, он не должен возвращать никаких ошибок, хотя может возвращать предупреждение, которое вы можете игнорировать.

Перейдите на вкладку развертывания и разверните контракт, используя injected Web3 . Убедитесь, что вы подключены к MetaMask и используете правильную сеть. Ринкеби в моем случае.

Вы получите всплывающее окно MetaMask для развертывания тестового контракта, просто примите его и дождитесь завершения tx.

Финансирование контракта

Теперь нам нужно профинансировать контракт с помощью LINK, который есть у вас в кошельке тестовой сети. Сначала скопируйте адрес контракта.

Откройте MetaMask и отправьте ССЫЛКУ на контракт. 1 ССЫЛКИ более чем достаточно. Когда вы профинансировали контракт, вы можете использовать Remix для вызова функции getRandomNumber, а после этого вы можете получить переменную randomResult для проверки результата. Вам также нужно будет отправить tx для вызова функции.

Теперь вы должны получить случайное число. Вы можете снова позвонить getRandomNumber, чтобы получить новый номер.

Распространенные подводные камни

Если у вас возникли проблемы с каким-либо из шагов, обязательно выполните следующие действия:

  • Финансируйте свой контракт с помощью LINK.
  • Проверьте адреса, комиссию и хэш ключа в договоре. Они должны совпадать с данными для выбранной вами сети.
  • Убедитесь, что вы тестируете нужную сеть.

Если у вас больше нет проблем, теперь вы можете научиться создавать еще более удивительные dApps с помощью проверяемой случайной функции Chainlink.

Заключение

Для децентрализованных игр VRF от Chainlink является важной частью. У вас не может быть игры без случайности (в большинстве случаев), а настоящей случайности в Ethereum не существует. По крайней мере, без Chainlink.

Теперь вы изучили самые основы использования VRF в смарт-контракте. И я уверен, что вы будете использовать эту информацию для создания потрясающих децентрализованных приложений.

Большое спасибо за чтение и хорошего дня.

Поддержите меня, поддержав Medium и став участником. Это очень помогает мне, не требует дополнительных затрат, и вы можете читать столько статей на Medium, сколько захотите!

Подписывайтесь на меня в Twitter и gm.xyz, чтобы не отставать от меня.

Посмотрите проект, автором которого я являюсь здесь.

Посмотрите мою последнюю коллекцию NFT на Polygon.