1. Market-maker Bot Genius Yield có thể được sử dụng để:
- Tạo ra thanh khoản cho các cặp giao dịch trên sàn Genius Yield, giúp cải thiện tính thanh khoản của sàn giao dịch và giảm chênh lệch giá.
- Kiếm được lợi nhuận từ hoạt động tạo lập thị trường.
- Giảm rủi ro cho các nhà đầu tư bằng cách cung cấp một nguồn thanh khoản ổn định.
2. Chiến lược chênh lệch cố định so với giá thị trường.
Trong phần này, chúng ta sẽ gọi bất kỳ token nào không phải ADA là hàng hóa, và gọi ADA là đồng tiền cơ sở. Một lệnh đề nghị mua hàng hóa bằng đồng tiền cơ sở được gọi là lệnh mua, trong khi một lệnh đề nghị bán hàng hóa để đổi lấy đồng tiền cơ sở được gọi là lệnh bán.
Giá được mô tả theo đơn vị hiển thị của ADA trên mỗi đơn vị hiển thị của hàng hóa.
Với một mức giá thị trường M và một biến δ được định nghĩa là chênh lệch giá, bot sẽ đặt các lệnh sau, với số lượng và khối lượng chính xác được xác định bởi cấu hình:
Lệnh mua ở mức giá:
- M * (1 – δ)
- M * (1 – δ – δ / 2)
- M * (1 – δ – δ / 2 – δ / 2)
- Và tiếp tục như vậy, trong đó giá của lệnh mua thứ n được tính bằng M * (1 – δ – (n – 1) * δ / 2).
Ví dụ: Giá Token GENS là 0.3 và chênh lệch giá δ là 0.05 thì giá của các lệnh mua sẽ như sau:
- Giá của lệnh mua thứ 1 =0.3 * (1 – 0.05) = 0.285
- Giá của lệnh mua thứ 2 = 0.3 * (1 – 0.05 – 0.05 / 2) = 0.2775
- Giá của lệnh mua thứ 3 = 0.3 * (1 – 0.05 – 0.05 / 2 – 0.05 / 2) = 0.27
Lệnh bán ở mức giá:
- M * (1 + δ)
- M * (1 + δ + δ / 2)
- M * (1 + δ + δ / 2 + δ / 2)
- Và tiếp tục như vậy, trong đó giá của lệnh bán thứ n được tính bằng M * (1 + δ + (n – 1) * δ / 2).
Ví dụ: Giá Token GENS là 0.3 và chênh lệch giá δ là 0.05 thì giá của các lệnh bán sẽ như sau:
- Giá của lệnh bán thứ 1 = 0.3 * (1 + 0.05) = 0.315
- Giá của lệnh bán thứ 2 = 0.3 * (1 + 0.05 + 0.05 / 2) = 0.3225
- Giá của lệnh bán thứ 3 = 0.3 * (1 + 0.05 + 0.05 / 2 + 0.05 / 2) = 0.33
Nếu giá thị trường đã biến động cao hơn nhiều (cao hơn nhiều theo chỉ định của cấu hình) so với giá mà lệnh mua được đặt, các lệnh mua sẽ bị hủy. Tương tự như vậy, nếu giá đã biến động thấp hơn nhiều so với giá mà lệnh bán được đặt, các lệnh bán đó sẽ bị hủy.
3 . Yêu Cầu hệ Thống.
Yêu cầu hệ thống tối thiểu:
- Bộ nhớ: 500 MB
- CPU: 0,5vCPU (xung nhịp cơ bản CPU 2,25 GHz)
- Kết nối internet đáng tin cậy và nhanh chóng
Yêu cầu hệ thống được đề xuất:
- Bộ nhớ: 1GB
- CPU: 1vCPU (xung nhịp cơ bản CPU 2,25 GHz)
- Kết nối internet đáng tin cậy và nhanh chóng
4. Cài Đặt.
a. Cài đặt Docker
- Đầu tiên, cài đặt các package cần thiết để chuẩn bị cho việc cài đặt Docker.
sudo apt update -y && sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- Thêm Docker’s official GPG key vào hệ thống
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Thiết lập Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Sử dụng apt-get (hoặc apt) để cài đặt Docker Engine vào máy.
sudo apt update
sudo apt-cache policy docker-ce
sudo apt install docker-ce -y
- Để xác nhận Docker đã được cài đặt và hoạt động ổn định, kiểm tra bằng cách sau.
sudo docker run hello-world
- Nếu nhận được thông báo Hello from Docker! như hình dưới đây thì Docker đã sẵn sàng hoạt động
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
<https://hub.docker.com/>
For more examples and ideas, visit:
<https://docs.docker.com/get-started/>
- Để quản lý Docker dưới tài khoản non-root (không cần phải chèn sudo khi gõ lệnh), bạn cần gán tài khoản hiện tại vào user group Docker như sau
sudo groupadd docker
sudo usermod -aG docker $USER
b. Cài đặt Docker Compose
- Tải Docker Compose phiên bản mới nhất về máy
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Thiết lập quyền thực thi cho docker-compose và tạo symlink
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- Để xác nhận Docker đã được cài đặt và hoạt động ổn định, kiểm tra bằng cách sau
docker-compose --version
- Nếu nhận được thông báo tương tự như bên dưới thì docker-compose đã sẵn sàng hoạt động
docker-compose version 1.29.2, build 5becea4c
C. Chạy Market-maker bot.
Sau khi sao chép kho lưu trữ, chỉ cần thiết lập một vài biến môi trường. Ngay sau khi hoàn tất, Market Maker có thể được khởi động bằng cách sử dụng docker compose:
# Clone the repository:
git clone https://github.com/geniusyield/market-maker.git
cd market-maker
# TODO: update the following values with your own configuration.
export MAESTRO_API_KEY=aBcDefghijoXj3v0LB3txySofSPrP3Vf2
export PAYMENT_SIGNING_KEY='{ "type": "PaymentSigningKeyShelley_ed25519", "description": "Payment Signing Key", "cborHex": "4210268dsb870d08s83a4cf6a4408240248ea551a35bb22bf443586c233ae56bc340" }'
export COLLATERAL_UTXO=d235edd34566a425668a4751233dfc2c1cs23b11287340b202c35093433491df#0
# Update the docker images:
docker compose pull
# Start the MM bot with your config:
docker compose up
Như trong ví dụ ở trên; các biến môi trường sau đây phải được chỉ định trước khi gọi docker compose up:
- MAESTRO_API_KEY: Khóa API MAINNET sẽ được sử dụng để truy cập các dịch vụ Maestro.
- PAYMENT_SIGNING_KEY: Khóa ký thanh toán sẽ được sử dụng. Vui lòng xem trình tạo khóa ký để biết chi tiết.
- COLLATERAL_UTXO: Một UTxO phù hợp với 5 ADA sẽ được sử dụng làm UTxO bảo đảm.
Các giá trị cấu hình được sử dụng cho các biến môi trường này trong ví dụ ở trên chỉ là các giá trị tạm thời. Chúng phải được thay thế bằng các giá trị cấu hình của riêng bạn. Bạn cần một khóa API MAINNET Maestro trả phí với giá rẻ nhất 9$/tháng. Tham khảo tại đây , một khóa ký thanh toán phải được tạo ra và một UTxO bảo đảm phải được cung cấp sau khi gửi tiền đến địa chỉ được cung cấp bởi khóa ký thanh toán và địa chỉ stake (tùy chọn).
Để xác định địa chỉ này, bạn có thể sử dụng cardano-cli address build, nhưng bạn cũng có thể chỉ cần chạy bot market-maker địa chỉ sẽ được in ra màn hình console ở dòng đầu tiên của đầu ra:
Hướng dẫn đăng ký và lấy khóa API Maestro: https://docs.gomaestro.org/Getting-started/Sign-up-login
d. Cấu Hình Bot Market-maker
Bạn có thể xem cấu hình bot Preprod và Mainnet tại file sample-preprod-maker-bot-config-gens.json và sample-mainnet-maker-bot-config-gens.json để cấu hình cho bot chạy ở mạng testnet Preprod hoặc Mainnet một cách tương ứng.
Với cách chạy bot bằng docker compose ta sẽ cấu hình bot bằng cách chỉnh sửa file docker-compose.yml như sau.
sudo nano docker-compose.yml
- File config sẽ trông như thế này:
version: '3.8'
services:
mm:
image: ghcr.io/geniusyield/market-maker:latest
container_name: mm
environment:
# Supported modes: MM for market making and CANCEL for canceling ALL the orders.
MODE: ${MODE:-MM}
PAYMENT_SIGNING_KEY: ${PAYMENT_SIGNING_KEY}
PROVIDER_CONFIG: |
{
"coreProvider": {
"maestroToken": "${MAESTRO_API_KEY}"
},
"networkId": "${NETWORK:-mainnet}",
"logging": [
{
"type": {
"tag": "stderr"
},
"severity": "Debug",
"verbosity": "V2"
}
]
}
MARKET_MAKER_CONFIG: |
{
"mbc_user": {
"ur_s_key_path": "/root/payment-signing-key.skey",
"ur_coll": "${COLLATERAL_UTXO}"
},
"mbc_fp_nft_policy": "compiled-scripts/minting-policy",
"mbc_fp_order_validator": "compiled-scripts/partial-order",
"mbc_po_config_addr": "addr1w9zr09hgj7z6vz3d7wnxw0u4x30arsp5k8avlcm84utptls8uqd0z",
"mbc_po_refs": {
"por_ref_nft": "fae686ea8f21d567841d703dea4d4221c2af071a6f2b433ff07c0af2.4aff78908ef2dce98bfe435fb3fd2529747b1c4564dff5adebedf4e46d0fc63d",
"por_val_ref": "062f97b0e64130bc18b4a227299a62d6d59a4ea852a4c90db3de2204a2cd19ea#2",
"por_mint_ref": "062f97b0e64130bc18b4a227299a62d6d59a4ea852a4c90db3de2204a2cd19ea#1"
},
"mbc_delay": 120000000,
"mbc_price_config": {
"pc_api_key": "${MAESTRO_API_KEY}",
"pc_resolution": "15m",
"pc_network_id": "${NETWORK:-mainnet}",
"pc_dex": "genius-yield"
},
"mbc_strategy_config": {
"sc_spread": {
"numerator": 1,
"denominator": 100
},
"sc_token_volume": {
"tv_sell_min_vol": 1000000000,
"tv_buy_min_vol": 2000000000,
"tv_sell_budget": 3500000000,
"tv_buy_budget": 6600000000,
"tv_sell_vol_threshold": 10000000000,
"tv_buy_vol_threshold": 20000000000
},
"sc_price_check_product": 9,
"sc_cancel_threshold_product": 4
},
"mbc_token": {
"ac": "dda5fdb1002f7389b33e036b6afee82a8189becb6cba852e8b79b4fb.0014df1047454e53",
"precision": 6
}
}
restart: always
Trường networkId: Có thể sửa thành mainnet hoặc preprod theo mạng lưới mình muốn chạy bot
Các trường mbc_fp_nft_policy, mbc_fp_order_validator, mbc_po_config_addr và mbc_po_refs có liên quan đến các hợp đồng thông minh của sàn giao dịch phi tập trung (DEX) có thể được giữ nguyên như hiện tại (Mainnet). Hoặc thay đổi tương ứng với mạng Preprod như file sample bên trên.
mc_delay: Bot sẽ hoạt động theo chu kỳ. Trong mỗi chu kỳ, nó sẽ xác định lệnh cần đặt, lệnh cần hủy, tạo giao dịch và gửi chúng lên mạng lưới. Thiết lập này quy định thời gian chờ (tính bằng micro giây) giữa các chu kỳ lặp lại, cho phép bot tạm nghỉ trước khi bắt đầu chu kỳ tiếp theo.
mbc_price_config: Cấu hình này cho biết cách bot lấy giá thị trường của token từ Maestro endpoint, sử dụng URL https://docs.gomaestro.org/DefiMarketAPI/mkt-dex-ohlc
Các thiết lập trong mbc_price_config bao gồm:
- pc_api_key: Khóa API Maestro.
- pc_resolution: Là độ phân giải cho điểm cuối Maestro được đề cập. Vui lòng xem tài liệu ở đây về cách độ phân giải giúp xác định giá. Các giá trị của độ phân giải có thể được xem ở đây.
- pc_network_id: Mạng lưới Cardano đang sử dụng.
- pc_dex: Sàn giao dịch phi tập trung (DEX) được sử dụng để lấy giá thị trường (hiện hỗ trợ minswap & genius-yield).
Các thiết lập mbc_strategy_config quy định các thông số cho chiến lược của bot bao gồm:
sc_spread: Tỷ lệ thể hiện δ (độ chênh lệch giá) như đã mô tả trước đó.
- denominator: Biểu thị giá thị trường của hàng hóa.
- numerator: Là % chênh lệch giá để thực hiện lệnh mua hoặc bán. Theo cấu hình trên là 1%. Lệnh mua và bán sẽ được đặt theo công thức như ở mục “2. Chiến lược chênh lệch cố định so với giá thị trường.“
sc_token_volume quy định các thông số sau:
- tv_sell_min_vol: Số lượng tối thiểu của token hàng hóa (theo đơn vị nhỏ nhất có thể) mà mỗi lệnh đặt bán phải có.
- tv_buy_min_vol: Số lượng tối thiểu của token tiền tệ (theo đơn vị lovelace) mà mỗi lệnh đặt mua phải có.
- tv_sell_budget: Tổng số token hàng hóa mà bot có thể dùng để đặt lệnh bán. Trong mỗi chu kỳ, bot sẽ tính toán số token hàng hóa đang bị khóa trong các lệnh và trừ nó khỏi tv_sell_budget. Số token còn lại được gọi là asb (viết tắt của available sell budget). Sau đó, bot sẽ tính số lệnh bán cần đặt bằng cách lấy [ asb / tv_sell_min_vol ] = ns, với ns là số lệnh bán. Bot sẽ đặt ns lệnh bán, mỗi lệnh có số lượng token hàng hóa là [asb / ns].
- tv_buy_budget: Tổng số token tiền tệ mà bot có thể dùng để đặt lệnh mua. Nó hoạt động tương tự như tv_sell_budget.
- tv_sell_vol_threshold: Thiết lập này liên quan đến sc_price_check_product. Bot sẽ xây dựng một sổ lệnh từ tất cả các lệnh cho cặp token đang giao dịch trên sàn GeniusYield DEX. Nó sẽ tính tổng số token hàng hóa được rao bán trong các lệnh bán có giá thấp hơn M * (1 + sc_price_check_product * δ) để có được SV (viết tắt của sell volume). Đồng thời, nó cũng tính tổng số token hàng hóa được yêu cầu trong các lệnh mua có giá cao hơn M * (1 + sc_price_check_product * δ) để có được BV (viết tắt của buy volume theo token hàng hóa). Ta sẽ nhân BV với M để có được BV, đại diện cho khối lượng mua theo token tiền tệ. Nếu tv_sell_vol_threshold nhỏ hơn hoặc bằng SV, bot sẽ không đặt lệnh bán mới. Ý tưởng là nếu đã có đủ thanh khoản thì bot không cần phải đặt thêm lệnh. Tương tự, bot sẽ không đặt lệnh mua mới nếu tv_buy_vol_threshold nhỏ hơn hoặc bằng BV.
sc_cancel_threshold_product: Nếu giá đặt mua thấp hơn (1 – sc_cancel_threshold_product * δ) * M, lệnh đó sẽ bị hủy. Tương tự, nếu giá đặt bán cao hơn (1 + sc_cancel_threshold_product * δ) * M, lệnh đó cũng sẽ bị hủy.
mbc_token: Chỉ định mã hàng hóa. Lưu ý rằng đây không được là ADA!
- Trường ac: Trường ac thể hiện Policy Id của token với cú pháp “Policy Id.Asset Name”
Ví dụ với GENS:
“ac”: “dda5fdb1002f7389b33e036b6afee82a8189becb6cba852e8b79b4fb.0014df1047454e53”,
e. Hủy tất cả các đơn đặt hàng bằng docker
Nếu muốn hủy TẤT CẢ các lệnh đặt do Market Maker Bot chạy trong Docker của bạn đặt, bạn có thể thực hiện việc này bằng cách thực hiện các lệnh sau:
#Stop the market maker (in case it is still running):
docker compose down
#TODO: update the following values with your own configuration:
export MAESTRO_API_KEY=aBcDefghijoXj3v0LB3txySofSPrP3Vf2
export PAYMENT_SIGNING_KEY='{ "type": "PaymentSigningKeyShelley_ed25519", "description": "Payment Signing Key", "cborHex": "4210268dsb870d08s83a4cf6a4408240248ea551a35bb22bf443586c233ae56bc340" }'
export COLLATERAL_UTXO=d235edd34566a425668a4751233dfc2c1cs23b11287340b202c35093433491df#0
export MODE=CANCEL
#Update the docker images:
docker compose pull
#Start the MM bot in 'CANCEL' mode:
docker compose up
Bạn sẽ thấy các mục nhật ký có nội dung “X orders to cancel !” và cuối cùng “No more orders to cancel!”. Đây là các thông báo xác nhận rằng tất cả các lệnh được đặt bởi phiên bản Market Maker Bot của bạn đã bị hủy.
Cuối cùng “ExitSuccess” và “mm exited with code 0” đầu ra xác nhận rằng tất cả đã diễn ra tốt đẹp.
f. Chi phí hoạt động của Market Maker Bot
Đặt lệnh
Việc đặt lệnh sẽ phải chịu các phí sau ngoài phí giao dịch thông thường:
- Phí cố định: Mỗi lệnh sẽ bị tính phí 1 ADA phí maker cố định khi tạo, nhưng người tạo lệnh chỉ nhận lại khoản phí này nếu lệnh không bị hủy bỏ một phần nào.
- Phí phần trăm: Mỗi lệnh sẽ bị tính phí 0,3% của token được cung cấp khi tạo. Nếu lệnh bị hủy sau đó, 0,3% sẽ chỉ được tính trên số lượng thực sự được khớp và phần còn lại sẽ được hoàn lại. Ví dụ, giả sử một lệnh được tạo, cung cấp 100 GENS. 0,3% của nó là 0,3 GENS, sẽ được tính ban đầu. Bây giờ, nếu lệnh này bị hủy sau khi 60 GENS từ nó được khớp, thì người tạo lệnh sẽ nhận lại 0,3% của 40 GENS, tức là 0,12 GENS.
Hủy lệnh
tl;dr: Chúng tôi nhóm tối đa 6 hủy lệnh trong một giao dịch, phí phát sinh là phí giao dịch thông thường cộng thêm ADA bổ sung lên đến 0,5 trong trường hợp xấu nhất.
Hủy lệnh phức tạp.
- Lệnh không được khớp: Chỉ tính phí giao dịch mạng thông thường.
- Lệnh được khớp một phần: Trong trường hợp này, phí ADA có thể được thêm vào lệnh này hay không. Nếu được thêm, chỉ tính phí giao dịch mạng thông thường. Tuy nhiên, nếu không được thêm thì việc hủy lệnh này sẽ yêu cầu tạo ra đầu ra phí cho địa chỉ GeniusYield, yêu cầu ADA tối thiểu của đầu ra phí này phải được đáp ứng, hiện tại trong trường hợp xấu nhất là ít hơn 1,5 ADA. Bây giờ, vì maker chắc chắn đã thêm 1 ADA do phí maker cố định ADA, trong trường hợp xấu nhất, nó sẽ cần thêm 0,5 ADA. Lưu ý rằng chúng tôi chia các lệnh cần hủy thành các tập có kích thước 6 và sau đó gửi giao dịch hủy cho mỗi tập này. Do đó, nếu có 6 lệnh cần hủy trong một tập, thì khoản phí ADA 0,5 bổ sung này, nếu cần, sẽ được chia sẻ giữa 6 lệnh này vì đầu ra phí sẽ được tạo một lần cho mỗi giao dịch chứ không phải một lần cho mỗi lệnh. Như một minh họa thêm, nếu bot có 13 lệnh cần hủy, chúng tôi sẽ tạo 3 tập có kích thước 6, 6 & 1 và do đó gửi 3 giao dịch hủy.
Theo dõi vốn chủ sở hữu
Bot liên tục ghi lại “vốn chủ sở hữu” bằng ADA, trong đó giá trị ADA tương đương của token hàng hóa được lấy bằng cách sử dụng nhà cung cấp giá. Ví dụ, nếu ví có 500 ADA và 500 GENS và nếu giá của 1 GENS là 2 ADA, thì vốn chủ sở hữu của bot là 500 ADA + (500 GENS * 2 ADA/GENS) = 1500 ADA.
Nguồn: https://github.com/geniusyield/market-maker/blob/main/README.md