В этом руководстве, состоящем из двух частей, вы узнаете, как быстро настроить производитель для AirSwap Instant с помощью нового AirSwap Maker Kit и развертывания без конфигурации с помощью Vercel.

AirSwap - одноранговая торговая сеть для токенов Ethereum. Трейдеры подключаются друг к другу на основе общих интересов, согласовывают цену посредством взаимных криптографических подписей и совершают сделки без посредников. Это хорошая система для производителей, без депозита или дорогостоящих обновлений цен в книгах заказов в цепочке.

Протокол свопа безотказно упрощает использование самых разнообразных торговых методов. Самым популярным методом на сегодняшний день является система стиля RFQ, на которой работает AirSwap Instant. Когда вы запрашиваете цену в Instant, ответы приходят от автоматических ботов, созданных разработчиками. Это руководство покажет вам, как быстро вы можете начать работу с собственным ботом!

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

Бессерверная версия с Vercel

До недавнего времени одноранговые узлы AirSwap Instant общались только с помощью JSON-RPC через веб-сокеты. Это было нормально, но, честно говоря, не очень хорошо. Веб-сокеты могут быть хрупкими, и с ними сложно работать, к тому же у большинства разработчиков нет большого опыта их использования. С AirSwap 2.0 одноранговые узлы теперь могут связываться с JSON-RPC через HTTP. Это означает, что разработчики AirSwap могут использовать все новейшие и лучшие веб-инструменты, такие как Vercel!

Конечно, мы всегда могли бы создать обычный веб-сервер, но тогда нам нужно было бы поместить его в контейнер, разместить в облаке и настроить некоторые инструменты для проверки работоспособности или мониторинга процессов на случай, если что-то пойдет не так. Это большая работа, и именно поэтому здесь действительно выделяется Serverless. Все, что вам нужно сделать, это написать свой код, а Vercel позаботится обо всем остальном.

Быстрый старт с помощью интерфейса командной строки AirSwap

Недавно мы выпустили AirSwap CLI. Этот инструмент командной строки предоставляет полезные утилиты, помогающие разработчикам в построении поверх протокола Swap. CLI также включает несколько полезных сценариев для административных задач. Мы будем использовать эти скрипты для утверждения токенов, взаимодействия с индексаторами и локального тестирования нашего производителя.

Настраивать

Прежде чем мы начнем, вам необходимо убедиться, что у вас установлены Node.js ›= v10.13.0 и Yarn . Вам также понадобится последняя версия Google Chrome с установленным расширением MetaMask. Если вы когда-нибудь застрянете или заблудитесь, вы можете найти полный исходный код этого руководства здесь.

Скопируйте репозиторий airswap-vercel-example и проверьте ветку начальной точки учебника.

Https://github.com/airswap/airswap-vercel-example/tree/zeit-tutorial-starting-point

$ git clone [email protected]:airswap/airswap-vercel-example.git
$ git checkout zeit-tutorial-starting-point

Затем установите зависимости.

$ yarn

Создание Создателя

Мы собираемся начать с настройки переменной среды. Vercel имеет отличную встроенную поддержку переменных окружения с их системой Секреты.

Единственная переменная среды, которая нам нужна для этого руководства, - это ETHEREUM_ACCOUNT, которая должна быть 64-символьным закрытым ключом учетной записи Ethereum. Если вы хотите сгенерировать новый закрытый ключ для целей этого руководства, вы можете выполнить следующие шаги. Если вы уже знаете, как создать закрытый ключ или у вас есть запасной, перейдите к разделу под названием «Настроить Vercel Secret и файл .env».

Создание нового закрытого ключа

Интерфейс командной строки AirSwap предоставляет множество полезных утилит, включая создание учетной записи Ethereum. Следуйте инструкциям ниже, чтобы получить свой закрытый ключ.

Сначала установите интерфейс командной строки AirSwap.

$ yarn global add airswap

Теперь сгенерируйте закрытый ключ.

$ airswap account:generate

Ваш результат должен выглядеть так:

ВНИМАНИЕ! Никогда не используйте этот закрытый ключ повторно за пределами этого руководства. Любой, у кого есть доступ к вашему закрытому ключу, может получить доступ ко всем средствам, связанным с аккаунтом.

Настроить Vercel Secret и файл .env

Мы собираемся использовать Vercel CLI для настройки нашего секрета. Введите следующую команду, не забудьте заменить шаблон вашим фактическим закрытым ключом:

$ vercel secrets add ethereum-account 64_CHAR_PRIVATE_KEY_HERE

Нам также необходимо добавить файл .env для локальной разработки. Вы можете обратиться к файлу .env.example для справки. В вашем .env файле должна быть только одна строка, которая выглядит так:

ETHEREUM_ACCOUNT=64_CHAR_PRIVATE_KEY_HERE

Это все, что нам нужно сделать. Теперь секрет будет доступен нашему создателю в виде переменной окружения с именем ETHEREUM_ACCOUNT. Это настраивается файлом now.json, предоставленным в шаблоне учебного пособия. Вы можете узнать больше, прочитав документацию Vercel.

Получение токенов тестовой сети

Наш производитель примеров собирается обслуживать заказы на DAI в тестовой сети Rinkeby, поэтому нам нужно будет приобрести несколько тестовых DAI, прежде чем мы начнем. Следуйте инструкциям ниже:

Сначала импортируйте закрытый ключ, созданный для этого руководства, в MetaMask.

Затем посетите Rinkeby ETH Faucet и следуйте инструкциям, чтобы получить немного ETH.

Наконец, посетите Compound Rinkeby DAI Faucet, чтобы получить DAI. Вам нужно будет нажать кнопку FAUCET, как на фотографии ниже.

Код

Теперь мы готовы написать код. Мы собираемся перейти в каталог api/, где система сборки Vercel ищет файлы. Откройте файл api/index.ts в текстовом редакторе, и приступим.

Начнем с импорта некоторых зависимостей.

import jayson from 'jayson' // JSON-RPC helper
import winston from 'winston' // logger
import connect from 'connect' // expressJS-like middleware helper
import cors from 'cors' // CORS middleware
import bodyParser from 'body-parser' // body parsing middleware
import initHandlers from './handlers' // airswap maker logic

Давайте также добавим проверку переменной окружения, поскольку наш производитель не может работать без нее.

// Make sure environment variables are ready
if (!process.env.ETHEREUM_ACCOUNT) {
   throw new Error('ETHEREUM_ACCOUNT must be set')
}

Мы также настроим наш регистратор. Это будет полезно позже, если мы захотим отладить наш производитель в режиме реального времени, используя встроенные функции мониторинга журналов Vercel.

// Setup logger
const logger = winston.createLogger({
    level: 'info',
    transports: [new winston.transports.Console()],
    format: winston.format.printf(({ level, message }) => {
      return `${level}: ${message}`
    }),
})

Затем мы собираемся создать экземпляры примеров обработчиков заказов и цен из AirSwap Maker Kit. По умолчанию Maker Kit предоставляет несколько жестко запрограммированных обработчиков, которые помогут вам быстро приступить к работе. Когда вы дойдете до конца учебника, вам следует вернуться сюда и попробовать настроить handlers с вашими собственными стратегиями ценообразования.

// Initialize pricing handlers with our private key
const handlers = initHandlers(process.env.ETHEREUM_ACCOUNT)

Эти обработчики теперь используются для питания сервера JSON-RPC с помощью пакета jayson. Это означает, что когда потенциальный контрагент вызывает у нашего создателя метод, такой как getMaxQuote или getSenderSideOrder, он будет обработан и получен ответ автоматически.

// Listen and respond to incoming JSON-RPC over HTTP requests
const server = new jayson.Server(handlers, {
  router: function(method) {
    try {
      logger.info(`Received ${method} request`)
      return this._methods[method]
    } catch (e) {
      return new jayson.Method((params, callback) => {
        callback(true, null)
      })
    }
  },
})

Наконец, нам просто нужно добавить промежуточное ПО и экспортировать наш код. Нам не нужно беспокоиться о настройке портов или переносе TypeScript. Система сборки Vercel позаботится обо всем остальном.

// Instantiate our express-style middleware helper
const app = connect()
// Parse JSON request body
app.use(bodyParser.json())
// Do preflight OPTIONS check before the jayson middleware
app.use(cors())
// Apply our order handlers
app.use(server.middleware())
export default app

Теперь, когда у нас есть index.ts файл, давайте попробуем его. Для этой части нам понадобятся две клеммные коробки.

В первом окне перейдите в каталог airswap-vercel-example/, если вы еще не там. Затем запустите свой производитель локально, запустив:

$ vercel dev

Во втором окне запустите airswap quote:get. Этот скрипт позволяет нам запрашивать любого производителя. Обязательно запросите своего создателя, набрав http: // localhost: 3000 в строке поиска. Спросите ценовое предложение, чтобы купить 100 DAI в обмен на WETH.

Вы должны увидеть, как ваш создатель регистрирует запрос в первом окне, а котировка вернется во втором окне. Все работает!

Теперь, когда у нас есть наш производитель, работающий локально, последний этап - его развертывание и предоставление доступа к нему другим трейдерам в AirSwap Instant. Чтобы это произошло, требуется всего несколько заключительных шагов: утверждение баланса DAI для передачи по контракту Swap, установка намерения торговать по контракту индексатора и развертывание нашего мейкера в Vercel. Эти шаги описаны в Части 2 серии руководств по развертыванию бессерверного бота-создателя в AirSwap.

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

Об AirSwap

AirSwap позволяет осуществлять одноранговую торговлю на блокчейне Ethereum. Основанный на децентрализованном протоколе, трейдеры могут добавлять или удалять ликвидность с помощью набора надежных продуктов, которые просты в использовании и бесплатны. Наша миссия - предоставить миру возможность беспрепятственной торговли.

Блог | Твиттер | Раздор | Разработчики | Создатели | Reddit | Facebook | Linkedin | Подписаться | Поддержка | Запросить функцию | FAQ | Торгуй сейчас