Анонс SDK ботов. Создавайте собтвенных торговых ботов для управления пулами в dHedge.

Artyom Lyulkovich
dHEDGE_ORG
Published in
4 min readNov 4, 2020

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

В этом уроке мы покажем вам, как реализовать пользовательскую стратегию, которая будет автоматически выполняться ботом. Для наглядности, мы продемонстрируем стратегию ребалансировки, которая удерживает активы пула в предопределенных пропорциях: 50% ETH и 50% USD и ребалансирует только тогда, когда разница составляет более 5%.

Один из разработчиков dHEDGE, Видор, разработал Node.js SDK как npmpackage чтобы вам было удобно импортировать его.

“dependencies”: { “dhedge-sdk”: “0.0.1” }

Для начала давайте сначала клонируем этот репозиторий:

https://github.com/dhedge/dhedge-sdk-examples

Создайте учетную запись с seed-фразой (например, вы можете использовать приложение MyCrypto app). Позже скопируйте файл .env.example в файл .env и предварительно заполните переменные:

MNEMONIC=”magna volatile mice juggle ubiquitous nudist …”
ACCOUNT_ID=”0"
PROVIDER=”https://ropsten.infura.io/v3/your-code-here"
FACTORY_ADDRESS=”0xdd1Ee9e21bbd0012d1C710Ed94057A3CBE3E02D7"

Прямо над FACTORY_ADDRESS находится Ropsten, провайдер кода. Вот его адрес: “0x03d20ef9bdc19736f5e8baf92d02c8661a5941f7”.

Вы можете запросить тест либо из следующих “кранов”:

Как только у Вас на счете будет достаточное кол-во ETH, Вы можете получить sUSD от Ropsten Synthetix Depot, просто зайдите на:
https://ropsten.etherscan.io/address/0x6E6624355D4c1DE475EB48677fce6025d69aAf22#writeContract.
Привяжите свой кошелек и в качестве теста, попробуйте обменять небольшое количество ETH на sUSD с помощью функции exchangeEtherForSynths.

Наиболее простой способ получить тестовые sUSD в Ropsten — использовать Synthetix Depot

Теперь вы готовы протестировать бота. Давайте посмотрим на пример кода в rebalance.js. Здесь находится строка, отвечающая за импорт кода.

const { Factory } = require(‘dhedge-sdk’)

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

pool = await factory.createPool(false, ‘Manager Name’, ‘Pool Name’, [‘sETH’])

Отредактируйте Имя менеджера и название пула, а также список исходных поддерживаемых активов в этом пуле, если вы этого не сделаете, то получите имена по умолчанию. Если вы хотите создать частный пул, измените первый параметр на true.

Если вы хотите создать пул как из примера, просто оставьте следующие параметры равнымиtrue

const CREATE_POOL = true

Запустите бота следующим образом:

npm i
node rebalance.js

Это создаст пул и выдаст общую информацию о нем.

Default debug output for pool summary

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

Новый пул появился в пользовательском интерфейсе

Теперь, когда у нас есть пул, давайте обновим файл следующим образом:

const CREATE_POOL = false
const POOL_ADDRESS = ‘0x77b75f942fee478f58c67b94483b5a8a66c166bf’

Экземпляр пула будет загружен при вызове метода factory

pool = await factory.loadPool(POOL_ADDRESS)

После запуска бота с пулом в первый раз вы увидите что-то вроде этого:

Требуется и выполняется ребалансировка

Пример кода был первоначально одобрен и внес 100 sUSD в пул:

let sUSD = await pool.getAsset(‘sUSD’)
await sUSD.approve(pool.getAddress(), '100000000000000000000')
await pool.deposit(‘100000000000000000000’)

Затем он проверил текущий состав пула, представленный в долларах США:

let composition = await pool.getComposition()let sUsdEffectiveValue = composition[‘sUSD’].balance
let sEthEffectiveValue = await exchangeRates.getEffectiveValue(
‘sETH’,
composition[‘sETH’].balance.toString(),
‘sUSD’
)

Поскольку стоимость доллара США между активами превышает 5%, он решил, что необходим перебалансировка:

let totalValue = await pool.getPoolValue()
let balanceThreshold = totalValue
.mul(BigNumber.from(5))
.div(BigNumber.from(100)) // 5%if (sUsdEffectiveValue.sub(sEthEffectiveValue).abs()
.gte(balanceThreshold))
{
console.log(‘Rebalance needed’)
...
}

и он обменял половину sUSD на sETH:

let target = sUsdEffectiveValue.sub(sEthEffectiveValue).abs().div(2)
...
await pool.exchange('sUSD', target, 'sETH')

При запуске во второй раз (с еще одним депонированным 100 sUSD) он снова восстановил равновесие:

Требуется и выполняется ребалансировка

Пользовательский интерфейс показывает обе эти сделки ребалансировки:

история показывает две сделки ребалансировки

Теперь мы прокомментируем строки депозита:

// await sUSD.approve(pool.getAddress(), ‘100000000000000000000’) 
// await pool.deposit(‘100000000000000000000’)

И на этот раз запуск сценария ребалансировки снова оставляет пул неизменным, как и ожидалось:

Никакой перебалансировки не требуется
Состав пула сбалансирован

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

Мы надеемся, что эта инструкция поможет вам начать создавать новые или адаптировать ваши старые торговые боты под dHedge.
Поскольку это первая версия bot SDK, мы будем очень благодарны, если Вы оставите свой отзыв в нашей группе телеграм или дискорд!

Власть переходит к вам.

--

--