پرش به مطلب اصلی

حافظ بازارساز

حافظ بازارساز رباتی است که پیوسته موقعیت‌های بازارسازی توکن زر را تحلیل می‌کند و از آن‌ها بهره می‌برد. این ربات فرض را بر آن می‌گذارد که ارزش هر زر باید هزار تومان باشد و بر همین پایه، در بازارهای گوناگون دنبال ناهماهنگی قیمت می‌گردد.

ربات قیمت‌ها را با هم می‌سنجد و موقعیت‌هایی را پیدا می‌کند که قیمت زر در یک بازار پایین‌تر از مقدار هدف و در بازار دیگر بالاتر از آن است؛ سپس از بازار ارزان‌تر می‌خرد، در بازار گران‌تر می‌فروشد و سود می‌کند.

افزون بر این، ربات می‌تواند با خرید و فروش مستمر زر در یک بازار مشخص، قیمت زر را در آن بازار پایدار نگه دارد و نوسان قیمت را کاهش دهد.

قرارداد هوشمند حافظ بازارساز

قرارداد هوشمند حافظ بازارساز، دارایی‌های روی زنجیره را مدیریت می‌کند و دو نقش جدا از هم دارد:

۱. اجراکننده: عملیات معاملاتی را روی زنجیره اجرا می‌کند. می‌تواند با دارایی‌های داخل قرارداد معامله کند، اما نمی‌تواند دارایی را از قرارداد بیرون بکشد. اختیار این نقش تنها تا اجرای معامله در چارچوب قواعد از پیش تعیین‌شده می‌رسد. ۲. مالک: دارایی‌های قرارداد را به‌طور کامل کنترل می‌کند. می‌تواند دارایی واریز کند و تنها نقشی است که اجازه دارد دارایی را از قرارداد بردارد.

با جدا کردن این دو نقش، اختیار معامله و اختیار برداشت در دو کلید متفاوت می‌نشیند.

نصب قرارداد هوشمند

اول مخزن گیت پروژه را با این دستور بگیرید:

git clone git@github.com:zarbanio/market-maker-keeper.git && cd market-maker-keeper/dextrader

برای استقرار قرارداد هوشمند روی زنجیره به یک حساب آربیتروم نیاز دارید. با دستور زیر یک کلید خصوصی بسازید و آن را در متغیر محیطی PRIVATE_KEY نگه دارید:

echo "export PRIVATE_KEY=$(openssl rand -hex 32)" >> ~/.zshrc
source ~/.zshrc

با دستور زیر کلید خصوصی را می‌بینید. این کلید به کار اجرای آزمون‌ها و استقرار قرارداد هوشمند می‌آید:

env | grep PRIVATE_KEY
هشدار

کلید خصوصی خود را با کسی در میان نگذارید. هر که این کلید را داشته باشد، به حساب آربیتروم شما دسترسی کامل دارد.

وابستگی‌های پروژه را نصب کنید:

npm install

سپس در زبانه‌ای جداگانه از پایانه، شبکه آربیتروم را روی یک گره محلی اجرا کنید:

npx hardhat node --fork https://1rpc.io/arb

اکنون می‌توانید آزمون‌های پروژه را اجرا کنید:

npx hardhat test --network localhost

خروجی:

DexTrader
Deployment
✔ Should set executor correctly (257ms)
✔ Should set swapRouter correctly
✔ Should set owner correctly
✔ Should update executor correctly
✔ Should update swapRouter correctly
Withdrawals
✔ Should withdraw ERC20 tokens (251ms)
Create Pool and Position and Trade
* Should create pool
Dai is Token0
* Should create position
* Should trade tokens correctly
DexTrader balance after trade: 52809598758326068841 ZAR
✔ (14404ms)
✔ should only executor trade

8 passing (20s)

برای آزمودن فرایند استقرار، اول قرارداد را روی گره محلی مستقر کنید:

npx hardhat run scripts/deploy.js --network localhost

اگر این مرحله موفق بود، می‌توانید قرارداد را روی شبکه آربیتروم مستقر کنید. اول دستور زیر را اجرا کنید تا آدرس حساب را ببینید و بتوانید به آن اتر بفرستید. این واریز هزینه استقرار قرارداد را می‌پردازد و مبلغش با شرایط شبکه تغییر می‌کند؛ معمولاً حدود ۰٫۰۱ اتر کافی است.

npx hardhat run scripts/account.js --network arb

خروجی:

Deploying contracts with the account: 0xCe7ec4A2A8c6d0cC98ae9f36ccFEDEeD87ec6ab9
Account balance: 0.0004923793 ETH

Account Address QR Code:

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▀█ █▄█▀▀ ▄▀▄▀█ ▄▄▄▄▄ █
█ █ █ █▀▀▀█ ▀ ▀ ▀██▄█ █ █ █
█ █▄▄▄█ █▀ █▀▀▀█▀█▀▄▄ █ █▄▄▄█ █
█▄▄▄▄▄▄▄█▄▀ ▀▄█ ▀▄█ █▄█▄▄▄▄▄▄▄█
█▄▄▄▄ ▀▄▄▄▄▀▄▀▄▀█▄▄▄▀▀ ▀ ▀ █ ▀█
█ ▀ ▀▀▄█ █▄█▀▄▄ ▀▄▄██▄▀█▄▄██▀█
██▀▄█ ▀▄▀█ ▄█▄▄▄ ▀▄▄ ▄▄▀▄▀ ▄ ██
██▄▄ ▄█▄█▀▀█ ▄█▀ ▄▀█▄▀▀▄ ▄▀██
█▀▀ ▀▄▄▄ ▄██▄▀▄▄▄▀▄▀ ▄▀▀▀ ▀▄▄ █
█ █▀ ▄▀▄▄▄█▀▄█ ▄▄▀▄▀██▀ █▀██
█▄██▄▄█▄█▀▀██▄ ▀ ▀▄▀█ ▄▄▄ █▄▄▀█
█ ▄▄▄▄▄ █▄▀ ▄█▀ ▀▄▄▀ █▄█ ▄▄ ▀█
█ █ █ █ ▀▄▀▀█ ▀█▀▀ ▄ ▄ ▄ █
█ █▄▄▄█ █ ▀▄█▀ ▄ ▄▀█▀▀▄▀ ▀█ ██
█▄▄▄▄▄▄▄█▄▄▄█▄█▄▄███▄█▄██▄█████

Caution!
To fund this account, transfer ETH to the following address on the Arbitrum network:

0xCe7ec4A2A8c6d0cC98ae9f36ccFEDEeD87ec6ab9

Scan the QR code above with your wallet to send ETH.
Ensure you are connected to the Arbitrum network when making the transfer.
Do not send ETH to this address on any other network.

سرانجام با دستور زیر قرارداد هوشمند را روی شبکه آربیتروم مستقر کنید. اجرای این دستور شاید چند دقیقه طول بکشد:

npx hardhat run scripts/deploy.js --network arb
نکته

پس از استقرار، آدرس قرارداد هوشمند را می‌بینید. این آدرس را برای استقرار ربات بازارساز نگه دارید.

نصب و پیکربندی ربات بازارساز در هم‌روش

گام ۱ — ورود به حساب کاربری

به حساب کاربری خود در هم‌روش وارد شوید. اگر حساب ندارید، از صفحه ثبت‌نام بسازید.

گام ۲ — ساخت اپ جدید

گزینه ساخت اپ جدید و سپس داکر ایمیج را انتخاب کنید.

گام ۳ — تعیین ایمیج

در صفحه‌ای که باز می‌شود، آدرس و برچسب ایمیج حافظ بازارساز را وارد کنید. آخرین برچسب‌های منتشرشده را در مخزن داکر هاب می‌بینید.

گام ۴ — پیکربندی اپ

نامی دلخواه برای اپ بگذارید و درگاهش را روی ۸۰۸۰ تنظیم کنید.

گام ۵ — تعیین متغیرهای محیطی

روی زبانه متغیرهای محیطی (Environment Variables) بزنید. تنها متغیری که لازم دارید همان کلید خصوصی مرحله نصب قرارداد هوشمند است؛ آن را در PRIVATE_KEY وارد کنید.

گام ۶ — تنظیمات ربات

روی زبانه پیکربندی سفارشی (Custom Config) بزنید و تنظیمات زیر را وارد کنید. مقادیر نمونه را با مقادیر متناسب با شرایط خودتان جایگزین کنید.

configmap:
enabled: true
path: /etc/app/
value:
config.yaml: |

Chain:
Url: 'your arbitrum chain websocket url'
Nobitex:
Key: 'your nobitex api key'
Indexer:
StartBlock: 'your dex trader contract deployment block'
Contracts:
DexTrader: 'your dex trader contract address'
Postgres:
Host: 'your postgres host'
Port: 'your postgres port'
User: 'your postgres user'
Password: 'your postgres password'
DB: 'your postgres db'

گام ۷ — استقرار

پلن مناسب محل استقرار را که انتخاب کنید، پیش‌نمایش هزینه را می‌بینید. روی گزینه ساخت اپ بزنید تا اپ در هم‌روش مستقر شود. این مرحله شاید چند دقیقه طول بکشد.

گام ۸ — بررسی لاگ‌ها

پس از استقرار، لاگ‌های اپ را از کنسول هم‌روش می‌بینید.

نکته

ربات تنها وقتی درست کار می‌کند که هم حساب کاربری صرافی و هم قرارداد هوشمند موجودی کافی داشته باشند.