کریپٹو کرنسی مارکیٹ میں، تجارت کے مواقع اکثر وقتی ہوتے ہیں، خاص طور پر ثالثی کے مواقع، جو صرف چند منٹوں تک ہی رہ سکتے ہیں۔ اگر آپ دستی آپریشنز پر انحصار کرتے ہیں، تو ہو سکتا ہے کہ صارف وقت پر بہترین موقع سے فائدہ نہ اٹھا سکیں یا بہترین قیمت سے محروم نہ ہوں۔ مثال کے طور پر، کچھ عرصہ قبل، Bybit پر ہیکر کے حملے کی وجہ سے، USDe کو ڈیکپل کر دیا گیا تھا، جس کی وجہ سے اس کی قیمت میں کافی اتار چڑھاؤ آیا تھا۔ اس وقت، sUSDe خریدنے اور اسے چھڑانے کے ذریعے منافع کی سالانہ شرح 300% سے تجاوز کر گئی تھی۔ یہ زیادہ پیداوار والی ونڈو عام طور پر بہت کم وقت کے لیے رہتی ہے، اور مینوئل ٹریڈنگ کے لیے پیشگی آرڈرز ترتیب دیے بغیر مارکیٹ کی تال کو برقرار رکھنا مشکل ہے۔ لہذا، آرڈر پلیسمنٹ فنکشن ڈی سینٹرلائزڈ ایکسچینج (DEX) صارفین کے لیے ایک اہم ٹول بن گیا ہے، جس سے لین دین کی کارکردگی میں نمایاں بہتری آئی ہے۔
متعدد DEXs حد آرڈر کی فعالیت پیش کرتے ہیں، ہر ایک مختلف نفاذ اور فیس کے ڈھانچے کے ساتھ۔ مثال کے طور پر کاؤ سویپ اور اوڈوس کو لیں۔ بنیادی اصول یہ ہے کہ ریئل ٹائم میں متعدد DEXs کی لیکویڈیٹی اور قیمتوں کی نگرانی کے لیے اس کے ایگریگیٹر فنکشن کا استعمال کریں۔ جب مارکیٹ کی قیمت حد کی شرائط پر پورا اترتی ہے، تو لینے والے کے ذریعے آرڈر کو متحرک کیا جائے گا، اور سمارٹ کنٹریکٹ خود بخود لین دین کو انجام دے گا اور گیس کی فیس ادا کرے گا۔ گائے صارفین کے آرڈر آف چین کو بھی اسٹور کرتی ہے، جو پھر “سولور” کہلانے والے وکندریقرت نوڈس کے ایک گروپ کے ذریعے مسابقتی طور پر مماثل ہوتے ہیں، لیکن آخر کار آن چین پر عمل درآمد کیا جاتا ہے۔ مختصراً، اگرچہ GAS سے استثنیٰ حاصل ہے، لیکن آپ کے لیے ان DEXs کے ذریعے مکمل ہونے والے لین دین سے حاصل ہونے والا اضافی منافع GAS فیس کو پورا کر سکتا ہے۔
لیکن اس سے ایک مسئلہ پیدا ہوتا ہے: اگر آپ کا ایک آرڈر 90U کی قیمت پر زیر التواء ہے اور جمع کرنے والا مانیٹر کرتا ہے کہ ایک مخصوص DEX کی قیمت 80U تک گر گئی ہے، تو یہ آپ کے لیے لین دین کو انجام دے گا، جس سے 10U کا منافع پیدا ہوتا ہے۔ اصل آپریشن میں، مختلف پلیٹ فارم اسے مختلف طریقے سے ہینڈل کرتے ہیں۔ کاؤ سویپ کو مثال کے طور پر لیتے ہوئے، اس کا طریقہ کار واضح طور پر یہ بتاتا ہے کہ جب عمل درآمد کی قیمت مقررہ قیمت سے بہتر ہوتی ہے، تو پیدا ہونے والا فاضل (یعنی 10U) پلیٹ فارم اور صارف کے درمیان تقسیم کیا جائے گا، جس میں کاؤ سویپ 50% لے گا اور صارف کو بقیہ 50% ملے گا۔ Odos کسی بھی اضافی رقم کو والٹ میں جمع کر دے گا۔ مختصراً، آپ کا آرڈر DEX ایکسچینج کے ذریعہ خطرے سے پاک ہے۔
اس کے علاوہ، ٹرانزیکشن فیس کو بچانے کے لیے، DEX آرڈرز مجموعی ٹرانزیکشنز ہیں، یعنی بہت سے ٹرانزیکشنز کو ہر ایک وقت میں ایک ساتھ پیک کیا جاتا ہے، اور ETH میں 12 سیکنڈ کا بلاک ہوتا ہے، جس کے نتیجے میں کچھ ممکنہ مواقع ضائع ہو جاتے ہیں۔ بلاشبہ، DEX کے اب بھی بہت سے فوائد ہیں، جیسے کہ مزید راستے تلاش کرنا، آف لائن میچنگ، GAS کی بچت وغیرہ، جو زیادہ تر صارفین کے لیے کافی ہیں۔
DEX کے مجموعی آرڈرز پر انحصار کرنے کے مقابلے میں، سمارٹ کنٹریکٹس کے ذریعے براہ راست تجارت کے منفرد فوائد ہیں۔ سب سے پہلے، صارفین کو آرڈر پر عمل درآمد کی منطق اور تمام آمدنیوں پر مکمل کنٹرول حاصل ہے۔ دوم، اپنے آرڈرز دینے سے مجموعی لین دین کی پیکیجنگ میں تاخیر سے بچا جا سکتا ہے اور مارکیٹ کی تبدیلیوں کا زیادہ تیزی سے جواب دے سکتا ہے، خاص طور پر زیادہ اتار چڑھاؤ کے دوران 12 سیکنڈ کے اندر مواقع سے فائدہ اٹھانا۔ اس کے علاوہ، اپنی مرضی کے زیر التواء آرڈر پلیٹ فارم کے پہلے سے طے شدہ فنکشنز کے ذریعے محدود کیے بغیر لچکدار طریقے سے پیچیدہ حالات (جیسے ملٹی ایسٹ پورٹ فولیو ٹریڈنگ یا منافع اور نقصان کو روکنا) سیٹ کر سکتے ہیں۔ تاہم، اس کے لیے پروگرامنگ کی مخصوص مہارتوں کی ضرورت ہوتی ہے، اور کسی کو گیس کی فیس خود ادا کرنے کی ضرورت ہوتی ہے، اور اس سلسلے میں حفاظتی خطرات ہو سکتے ہیں۔ لہذا، اپنے آرڈرز دینا ان ترقی یافتہ صارفین کے لیے موزوں ہے جن کے پاس مضبوط تکنیکی صلاحیتیں ہیں اور زیادہ سے زیادہ منافع حاصل کرتے ہیں۔
اگر آپ اپنے پروگراموں کے ساتھ سمارٹ معاہدوں کو چلانا چاہتے ہیں، تو آپ کی نجی کلیدوں کی حفاظت بلاشبہ آپ کی سب سے بڑی تشویش ہے۔ میں نے جو حل نکالا ہے وہ یہ ہے کہ اپنی ذاتی کلید کو آف لائن انکرپٹ کرنے کے لیے Python کا استعمال کریں، اور میزبان کو چلانے والے سرور پر خفیہ کردہ پاس ورڈ کو 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)
Web3.py Ethereum نیٹ ورک کے ساتھ تعامل کے لیے ایک طاقتور Python لائبریری ہے۔ اسے درج ذیل کمانڈ کے ساتھ انسٹال کریں: 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 (ریموٹ پروسیجر کال) ایک مواصلاتی انٹرفیس ہے جو Ethereum نوڈ کے ذریعے فراہم کیا جاتا ہے، جو 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())
MetaMask کے Infura کے مقابلے میں Alchemy استعمال کرنے کی سفارش کی جاتی ہے، رجسٹریشن کے بعد آپ RPC ایڈریس حاصل کر سکتے ہیں، جیسے کہ https://eth-mainnet.g.alchemy.com/v2/your API کلید، اور اسے Web3.py پر کنفیگر کریں۔
مثال کے طور پر sDAI/sUSDe کے Crve پول کو لے کر https://curve.fi/dex/ethereum/pools/factory-stable-ng-102/swap/، آپ آسانی سے دو ٹوکنز کے پتے اور پول کا پتہ تلاش کر سکتے ہیں۔

ABI اس بات کی وضاحت کرتا ہے کہ معاہدے کے ساتھ کیسے تعامل کیا جائے، اس لیے اسے ethscan https://etherscan.io/address/0x167478921b907422f8e88b43c4af2b8bea278d3a#code پر حاصل کرنا بھی ضروری ہے۔
سب سے پہلے، 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، وغیرہ جیسے تصورات کو سمجھیں۔ ہمیشہ کم رقم کے ساتھ شروع کریں اور اپنے راستے پر کام کریں۔ Etherscan جیسی چیز کا استعمال کرتے ہوئے لین دین کی نگرانی کریں۔ اپنے سرمائے کو کھونے کا خطرہ مول لینے سے بہتر ہے کہ موقع ضائع کر دیا جائے۔