Type/to search
3
Follow
1505
Followers
বিকেন্দ্রীভূত এক্সচেঞ্জে অর্ডার প্লেসমেন্ট কীভাবে বাস্তবায়ন করবেন — কার্ভকে উদাহরণ হিসেবে নেওয়া
Original
Created 2025-03-13 14:28:33  Updated 2025-03-14 17:27:53
 1
 1297

আমি কেন অর্ডার দেব?

ক্রিপ্টোকারেন্সি বাজারে, ট্রেডিং সুযোগগুলি প্রায়শই ক্ষণস্থায়ী হয়, বিশেষ করে আরবিট্রেজ সুযোগ, যা কেবল কয়েক মিনিট স্থায়ী হতে পারে। আপনি যদি ম্যানুয়াল অপারেশনের উপর নির্ভর করেন, তাহলে ব্যবহারকারীরা সময়মতো সেরা সুযোগটি কাজে লাগাতে পারবেন না বা সেরা মূল্য মিস করতে পারবেন না। উদাহরণস্বরূপ, কিছু সময় আগে, Bybit-এ হ্যাকার আক্রমণের কারণে, USDe-কে আলাদা করা হয়েছিল, যার ফলে এর দাম ব্যাপকভাবে ওঠানামা করেছিল। সেই সময়ে, sUSDe কিনে তা খালাসের মাধ্যমে বার্ষিক লাভের হার 300% ছাড়িয়ে গিয়েছিল। এই উচ্চ-ফলনশীলতা সাধারণত খুব অল্প সময়ের জন্য স্থায়ী হয় এবং আগে থেকে অর্ডার সেট না করে ম্যানুয়াল ট্রেডিংয়ের জন্য বাজারের ছন্দের সাথে তাল মিলিয়ে চলা কঠিন। অতএব, অর্ডার প্লেসমেন্ট ফাংশন বিকেন্দ্রীভূত বিনিময় (DEX) ব্যবহারকারীদের জন্য একটি গুরুত্বপূর্ণ হাতিয়ার হয়ে উঠেছে, যা লেনদেনের দক্ষতা উল্লেখযোগ্যভাবে উন্নত করেছে।

DEX অর্ডারের নীতি এবং ত্রুটিগুলি

একাধিক DEX লিমিট অর্ডার কার্যকারিতা প্রদান করে, প্রতিটিরই আলাদা বাস্তবায়ন এবং ফি কাঠামো রয়েছে। উদাহরণ হিসেবে গরুর অদলবদল এবং ওডোস নিন। মূল নীতি হল এর অ্যাগ্রিগেটর ফাংশন ব্যবহার করে রিয়েল টাইমে একাধিক DEX-এর তারল্য এবং মূল্য পর্যবেক্ষণ করা। যখন বাজার মূল্য সীমার শর্ত পূরণ করে, তখন অর্ডারটি গ্রহণকারী দ্বারা ট্রিগার করা হবে এবং স্মার্ট চুক্তি স্বয়ংক্রিয়ভাবে লেনদেনটি সম্পাদন করবে এবং গ্যাস ফি প্রদান করবে। কাউ ব্যবহারকারীদের অর্ডারগুলি অফ-চেইনও সংরক্ষণ করে, যা পরে "সলভার্স" নামক বিকেন্দ্রীভূত নোডের একটি গ্রুপ দ্বারা প্রতিযোগিতামূলকভাবে মিলিত হয়, কিন্তু শেষ পর্যন্ত অন-চেইন কার্যকর করা হয়। সংক্ষেপে, যদিও GAS অব্যাহতিপ্রাপ্ত, এই DEX গুলি দ্বারা সম্পন্ন লেনদেনের মাধ্যমে আপনার জন্য যে অতিরিক্ত মুনাফা তৈরি হবে তা GAS ফি বহন করতে পারে।

কিন্তু এটি একটি সমস্যা তৈরি করে: যদি আপনার কোনও অর্ডার 90U মূল্যে পেন্ডিং থাকে এবং অ্যাগ্রিগেটর পর্যবেক্ষণ করে যে একটি নির্দিষ্ট DEX এর দাম 80U তে নেমে এসেছে, তাহলে এটি আপনার জন্য লেনদেনটি কার্যকর করবে। আপনার অর্ডারটি অবশেষে 90U মূল্যে কার্যকর করা হবে, যার ফলে 10U মুনাফা হবে। এই লাভ কীভাবে বিতরণ করা হয়? প্রকৃত পরিচালনায়, বিভিন্ন প্ল্যাটফর্ম এটিকে ভিন্নভাবে পরিচালনা করে। কাউ সোয়াপকে উদাহরণ হিসেবে নিলে, এর প্রক্রিয়াটি স্পষ্টভাবে উল্লেখ করে যে যখন এক্সিকিউশন মূল্য সীমা মূল্যের চেয়ে ভালো হয়, তখন উৎপন্ন উদ্বৃত্ত (অর্থাৎ, 10U) প্ল্যাটফর্ম এবং ব্যবহারকারীর মধ্যে ভাগ করা হবে, কাউ সোয়াপ 50% পাবে এবং ব্যবহারকারী বাকি 50% পাবে। ওডোস যেকোনো উদ্বৃত্ত ভল্টে জমা করবে। মূলত, আপনার অর্ডার DEX এক্সচেঞ্জ দ্বারা ঝুঁকিমুক্তভাবে নিষ্পত্তি করা হয়।

এছাড়াও, লেনদেনের ফি বাঁচানোর জন্য, DEX অর্ডারগুলিকে একত্রিত লেনদেন বলা হয়, অর্থাৎ, মাঝে মাঝে অনেক লেনদেন একসাথে প্যাকেজ করা হয় এবং ETH-এর একটি ব্লক থাকে 12 সেকেন্ড, যার ফলে কিছু সম্ভাব্য সুযোগ হাতছাড়া হবে। অবশ্যই, DEX-এর এখনও অনেক সুবিধা রয়েছে, যেমন আরও পাথ অনুসন্ধান করা, অফলাইনে ম্যাচিং করা, GAS সংরক্ষণ করা ইত্যাদি, যা বেশিরভাগ ব্যবহারকারীর জন্য যথেষ্ট।

আপনার নিজস্ব প্রোগ্রামের মাধ্যমে অর্ডার দেওয়ার সুবিধা

DEX-এর সমষ্টিগত অর্ডারের উপর নির্ভর করার তুলনায়, স্মার্ট চুক্তির মাধ্যমে সরাসরি ট্রেডিংয়ের অনন্য সুবিধা রয়েছে। প্রথমত, ব্যবহারকারীদের অর্ডার এক্সিকিউশন লজিক এবং সমস্ত উপার্জনের উপর সম্পূর্ণ নিয়ন্ত্রণ থাকে। দ্বিতীয়ত, আপনার নিজস্ব অর্ডার দেওয়ার ফলে সমষ্টিগত লেনদেনের প্যাকেজিং বিলম্ব এড়ানো যায় এবং বাজারের পরিবর্তনগুলিতে আরও দ্রুত সাড়া দেওয়া যায়, বিশেষ করে উচ্চ অস্থিরতার সময় 12 সেকেন্ডের মধ্যে সুযোগগুলি দখল করা। এছাড়াও, কাস্টম পেন্ডিং অর্ডারগুলি প্ল্যাটফর্মের প্রিসেট ফাংশন দ্বারা সীমাবদ্ধ না হয়েই নমনীয়ভাবে জটিল শর্ত (যেমন মাল্টি-অ্যাসেট পোর্টফোলিও ট্রেডিং বা স্টপ প্রফিট এবং স্টপ লস) সেট করতে পারে। তবে, এর জন্য নির্দিষ্ট প্রোগ্রামিং দক্ষতা প্রয়োজন, এবং গ্যাস ফি নিজেই পরিশোধ করতে হবে, এবং চেইনে নিরাপত্তা ঝুঁকি থাকতে পারে। অতএব, নিজের অর্ডার দেওয়া তাদের জন্য উপযুক্ত যারা উন্নত প্রযুক্তিগত দক্ষতা সম্পন্ন এবং সর্বোচ্চ রিটার্নের জন্য প্রচেষ্টা করেন।

ব্যক্তিগত কীগুলির সুরক্ষা

আপনি যদি আপনার নিজস্ব প্রোগ্রামের মাধ্যমে স্মার্ট চুক্তি পরিচালনা করতে চান, তাহলে আপনার ব্যক্তিগত কীগুলির নিরাপত্তা নিঃসন্দেহে আপনার সবচেয়ে বড় উদ্বেগের বিষয়। আমি যে সমাধানটি নিয়ে এসেছি তা হল পাইথন ব্যবহার করে আমার নিজস্ব প্রাইভেট কী অফলাইনে এনক্রিপ্ট করা এবং এনক্রিপ্ট করা সাইফারটেক্সট হোস্ট চালানোর সার্ভারে সংরক্ষণ করা। ডিক্রিপ্ট করা পাসওয়ার্ডটি FMZ প্ল্যাটফর্ম রোবটের প্যারামিটার ব্যবহার করে পাস করা হয় এবং প্রোগ্রামটি হোস্টে চলে এবং এটি পড়ে এবং ডিক্রিপ্ট করে (প্রোগ্রামটি চালানোর পরে এটি মুছে ফেলা যেতে পারে)। এইভাবে, আপনার সার্ভার হ্যাক হলেও, কোনও সমস্যা হবে না, তবে আপনার FMZ অ্যাকাউন্টটি যাতে ফাঁস না হয় সেদিকেও আপনাকে সতর্ক থাকতে হবে। যেহেতু এতে কেবল একটি অফ-নেটওয়ার্ক প্লেইন টেক্সট জড়িত, তাই নিরাপত্তা গ্রহণযোগ্য।
নির্দিষ্ট কোডটি নিম্নরূপ, যা স্থানীয়ভাবে অফ-গ্রিড চালানো যেতে পারে

from web3 import Web3 # Web3.py 是与以太坊区块链交互的Python库 import json # 用于处理JSON数据 import time # 用于设置时间间隔 import requests # 用于发送HTTP请求 from cryptography.fernet import Fernet import base64 import hashlib from datetime import datetime from hexbytes import HexBytes def generate_key(password: str) -> bytes: """通过用户密码生成 AES 密钥""" return base64.urlsafe_b64encode(hashlib.sha256(password.encode()).digest()) def encrypt_private_key(private_key: str, password: str) -> str: """使用密码加密私钥""" key = generate_key(password) cipher = Fernet(key) return cipher.encrypt(private_key.encode()).decode() def decrypt_private_key(encrypted_key: str, password: str) -> str: """使用密码解密私钥""" key = generate_key(password) cipher = Fernet(key) return cipher.decrypt(encrypted_key.encode()).decode() def save_key_to_file(key, file_path): # 将加密密钥保存到txt文件 with open(file_path, 'w') as file: file.write(key) def load_key_from_file(file_path): # 从txt文件读取加密密钥 with open(file_path, 'r') as file: return str(file.read()) def main(): encrypt_key = encrypt_private_key('my_private_key', 'password') # my_private_key是自己的私钥,password是自己设置的密码 save_key_to_file(encrypt_key,'encrypt_key.txt') print("加密后的私钥", encrypt_key) decrypt_key = decrypt_private_key(load_key_from_file('encrypt_key.txt'), 'password') print("解密的私钥", decrypt_key)

ETH লিঙ্ক করার আগে প্রস্তুতি

Web3.py হল ইথেরিয়াম নেটওয়ার্কের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি শক্তিশালী পাইথন লাইব্রেরি। নিম্নলিখিত কমান্ড দিয়ে এটি ইনস্টল করুন: pip install web3। এর কাজ হল ডেভেলপার এবং ইথেরিয়াম নোডের মধ্যে যোগাযোগ সহজ করা এবং ব্যালেন্স অনুসন্ধান, স্মার্ট চুক্তি কল করা এবং লেনদেন পাঠানোর মতো ক্রিয়াকলাপগুলিকে সমর্থন করা। উদাহরণস্বরূপ, একটি অ্যাকাউন্ট ব্যালেন্স চেক করতে মাত্র কয়েকটি লাইন কোড লাগে, যা Web3.py কে DApps তৈরি বা লেনদেন স্বয়ংক্রিয় করার জন্য একটি আদর্শ হাতিয়ার করে তোলে।

python from web3 import Web3 w3 = Web3(Web3.HTTPProvider('你的RPC地址')) balance = w3.eth.get_balance('0x某个地址') print(w3.from_wei(balance, 'ether'))

RPC (রিমোট প্রসিডিউর কল) হল ইথেরিয়াম নোড দ্বারা প্রদত্ত একটি যোগাযোগ ইন্টারফেস, যা HTTP বা WebSocket প্রোটোকলের মাধ্যমে JSON অনুরোধ পাঠিয়ে ব্লকচেইনের সাথে যোগাযোগ করে। উদাহরণস্বরূপ, eth_blockNumber সর্বশেষ ব্লকের উচ্চতা জিজ্ঞাসা করতে পারে। স্থানীয় নোড পরিচালনার উচ্চ খরচের কারণে, ডেভেলপাররা সাধারণত তৃতীয় পক্ষের RPC প্রদানকারীদের উপর নির্ভর করে। সাধারণ পছন্দগুলির মধ্যে রয়েছে:

  • ইনফুরা: মেটামাস্কের ডিফল্ট পরিষেবা, ব্যবহার করা সহজ কিন্তু কম বিনামূল্যের কোটা (প্রতিদিন ১০০,০০০ অনুরোধ)।
  • আলকেমি: উন্নত কর্মক্ষমতা, উচ্চ বিনামূল্যের কোটা এবং আরও বৈশিষ্ট্যের জন্য সমর্থন।
  • কুইকনোড: উচ্চ কর্মক্ষমতা প্রয়োজনীয়তার জন্য উপযুক্ত, কিন্তু অর্থপ্রদানকারী ব্যবহারকারীদের প্রতি পক্ষপাতদুষ্ট।
from web3 import Web3 w3 = Web3(Web3.HTTPProvider('https://eth-mainnet.g.alchemy.com/v2/你的API密钥')) print(w3.is_connected())

Alchemy ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। MetaMask-এর Infura-এর তুলনায়, Alchemy উচ্চতর বিনামূল্যের কোটা প্রদান করে। নিবন্ধনের পরে, আপনি RPC ঠিকানা পেতে পারেন, যেমন https://eth-mainnet.g.alchemy.com/v2/your API কী, এবং ব্যবহারের জন্য এটি Web3.py-তে কনফিগার করতে পারেন।

কার্ভ চুক্তি ঠিকানা এবং ABI

উদাহরণ হিসেবে sDAI/sUSDe এর Crve পুল https://curve.fi/dex/ethereum/pools/factory-stable-ng-102/swap/ নিলে, আপনি সহজেই দুটি টোকেনের ঠিকানা এবং পুলের ঠিকানা খুঁজে পেতে পারেন।
img

ABI চুক্তির সাথে কীভাবে ইন্টারঅ্যাক্ট করতে হবে তা সংজ্ঞায়িত করে, তাই এটি অর্জন করাও প্রয়োজনীয়। ethscan https://etherscan.io/address/0x167478921b907422f8e88b43c4af2b8bea278d3a#code-এ চুক্তিটি দেখুন। আপনি চুক্তির পৃষ্ঠায় abi দেখতে পারেন এবং সরাসরি এটি অনুলিপি করতে পারেন।

দাম পেতে চুক্তি লিঙ্ক করুন

প্রথমে, ETH ওয়ালেটটি লিঙ্ক করুন। যদি আপনার ওয়ালেটের ঠিকানা প্রিন্ট করা থাকে, তাহলে এর অর্থ হল এটি সফল।

def main(): # 文件路径 file_path = 'encrypted_key.txt' # 从文件中读取加密的私钥 encrypted_private_key = load_key_from_file(file_path) private_key = decrypt_private_key(encrypted_private_key, Password) #Password为密码,定义为策略的参数 web3 = Web3(Web3.HTTPProvider(HTTPProvider)) # HTTPProvider为RPC的链接,定义为参数 account = web3.eth.account.from_key(private_key) address = account.address # 获取账户的公开地址 Log('链接账户', address)

দাম পাওয়ার প্রক্রিয়াটি নিম্নরূপ। পরিশেষে, GAS ফি বিবেচনা না করে, 100,000 SDAI এর বর্তমান বিনিয়োগ এক সপ্তাহ পরে 335U লাভ করবে। এটা একটু জটিল মনে হতে পারে, কিন্তু আসলে এটা বোঝা কঠিন নয়।

# --------------- 合约设置 --------------- # Curve.fi sDAI/sUSDe 池合约地址和ABI pool_address = '0x167478921b907422F8E88B43C4Af2B8BEa278d3A' # Curve池子的合约地址 # 以下是简化的ABI,仅包含我们需要的函数 pool_abi = json.loads('''[{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"i","type":"int128"},{"name":"j","type":"int128"},{"name":"dx","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]}]''') # 创建池子合约对象 pool_contract = web3.eth.contract(address=pool_address, abi=pool_abi) # ERC20 代币标准合约ABI erc20_abi = json.loads('''[ {"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"}, {"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"}, {"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"} ]''') sdai_address = '0x83F20F44975D03b1b09e64809B757c47f942BEeA' # sDAI代币的合约地址 susde_address = '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497' # sUSDE代币的合约地址 # 池子中代币的索引 SDAI_INDEX = 0 # sDAI代币在池子中的索引 SUSDE_INDEX = 1 # sUSDE代币在池子中的索引 # 创建代币合约对象 sdai_contract = web3.eth.contract(address=sdai_address, abi=erc20_abi) susde_contract = web3.eth.contract(address=susde_address, abi=erc20_abi) SUSDE_PRICE = 1.1623 #这个价格是ethena官网价格,1周后可赎回 SDAI_PRICE = 1.15 #sDAI是收益代币,价值会累计,目前价格1.15 try: SDAI_DECIMALS = sdai_contract.functions.decimals().call() SUSDE_DECIMALS = susde_contract.functions.decimals().call() except: # 如果无法获取,假设为标准的18位精度 SDAI_DECIMALS = 18 SUSDE_DECIMALS = 18 amount_in = 100000 amount_out = pool_contract.functions.get_dy( SDAI_INDEX, # 输入代币索引 SUSDE_INDEX, # 输出代币索引 int(amount_in * 10**SDAI_DECIMALS) # 输入数量(wei) ).call() profit = SUSDE_PRICE * amount_out / 10**SUSDE_DECIMALS - amount_in * SDAI_PRICE Log(round(profit, 2), round(amount_out / 10**SUSDE_DECIMALS, 2))

সম্পূর্ণ প্রোগ্রাম

অবশেষে, আমরা ক্রমাগত দাম পেতে পোলিং ব্যবহার করি, এবং প্রত্যাশিত লাভে পৌঁছানোর পরে অর্ডার দিই। এই কোডটি লক্ষ্য করুন।**এটি কেবল একটি নমুনা কোড, এটি সরাসরি ব্যবহার করবেন না।**পাঠকরা অনুশীলনে বিভিন্ন সমস্যার সম্মুখীন হতে পারেন, কিন্তু AI বর্তমানে খুবই শক্তিশালী এবং মূলত বিভিন্ন প্রশ্নের উত্তর দিতে পারে। এটি সরাসরি কোড লিখতেও সাহায্য করতে পারে। FMZ এর কোড এডিটর ChatGPT-কেও একীভূত করে, যা আরও ঘন ঘন ব্যবহার করা যেতে পারে।

def execute_trade(amount_in, min_amount_out, direction): gas_price = web3.eth.gas_price index_in = SUSDE_INDEX index_out = SDAI_INDEX if direction == 'buy': index_in = SDAI_INDEX index_out = SUSDE_INDEX # 第二步:执行代币交换交易 swap_tx = pool_contract.functions.exchange( index_in, # 输入代币索引 index_out, # 输出代币索引 int(amount_in*10**SDAI_DECIMALS), # 输入数量 int(min_amount_out*10**SUSDE_DECIMALS) # 最小输出数量(考虑滑点) ).build_transaction({ 'from': address, # 交易发送方 'gas': 600000, # gas限制 'gasPrice': int(2*gas_price) , 'nonce': web3.eth.get_transaction_count(address), # 获取新的nonce值 }) # 签名并发送交换交易 signed_swap_tx = web3.eth.account.sign_transaction(swap_tx, private_key) swap_tx_hash = web3.eth.send_raw_transaction(signed_swap_tx.rawTransaction) Log(f"交换交易已提交,交易哈希: {swap_tx_hash.hex()}") def get_buy_profit(amount_in): amount_out = pool_contract.functions.get_dy( SDAI_INDEX, # 输入代币索引 SUSDE_INDEX, # 输出代币索引 int(amount_in * 10**SDAI_DECIMALS) # 输入数量(wei) ).call() return SUSDE_PRICE * amount_out / 10**SUSDE_DECIMALS - amount_in * SDAI_PRICE, amount_out / 10**SUSDE_DECIMALS def main(): while True: try: sdai_balance = sdai_contract.functions.balanceOf(address).call() / 10**SDAI_DECIMALS susde_balance = susde_contract.functions.balanceOf(address).call() / 10**SUSDE_DECIMALS amount_in = 100000 #交易的DAI数量 profit, amount_out = get_buy_profit(amount_in) LogStatus(f"SDAI数量:{sdai_balance}, SUSDE数量:{susde_balance}, 收益:{profit}") if profit > 1000 and sdai_balance > amount_in: #利润空间 Log("\n开始执行SDAI->SUSDE交易...") execute_trade(amount_in, 0.999*amount_out, 'buy') #一定要设置滑点 wait_time = 3 # 等待时间(秒) time.sleep(wait_time) except Exception as e: # 全局错误处理 print(f"程序发生错误: {e}") print("60秒后重试...") time.sleep(60) # 出错后等待更长时间

ঝুঁকি অনুস্মারক

অন-চেইন অপারেশনগুলি নতুনদের জন্য তুলনামূলকভাবে ঝুঁকিপূর্ণ। উপরে উল্লিখিত প্রাইভেট কী ফাঁস হওয়ার ঝুঁকি ছাড়াও, আরও বিভিন্ন ঝুঁকি রয়েছে:

  • লেনদেন সম্পাদনের সময় MEV রোবটগুলিকে সর্বনিম্ন আউটপুট min_amount_out সেট করতে হবে যাতে সবচেয়ে খারাপ পরিস্থিতিতেও লাভ নিশ্চিত করা যায়, অন্যথায় MEV তাদের শোষণ করবে। আজ, একজন ব্যক্তি Uniswap-এ মাত্র 5272 USDT-তে 220,000 USDC ব্যবহার করেছেন। কারণ ছিল যে amountOutMinimum 0 তে সেট করা হয়েছিল।
  • এক্সচেঞ্জ এপিআই-এর মতোই কৌশলগত ত্রুটি, যদি অন-চেইন প্রোগ্রাম লেনদেনে কোনও বাগ থাকে, তাহলে ঘন ঘন GAS ব্যবহার করা হবে।

অন-চেইন ট্রেডিংয়ে নতুনদের জন্য, তাদের মৌলিক বিষয়গুলি শিখতে হবে: গ্যাস, স্লিপেজ, MEV ইত্যাদি ধারণাগুলি বুঝতে হবে। সর্বদা কম পরিমাণ দিয়ে শুরু করুন এবং আপনার পথে এগিয়ে যান। ইথারস্ক্যানের মতো কিছু ব্যবহার করে লেনদেন পর্যবেক্ষণ করুন। আপনার মূলধন হারানোর ঝুঁকি নেওয়ার চেয়ে সুযোগ হাতছাড়া করা ভালো।

Comment
All comments (1)

    谢谢草神

    a year ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)