क्रिप्टोकरेंसी बाजार में, ट्रेडिंग के अवसर अक्सर क्षणभंगुर होते हैं, विशेष रूप से आर्बिट्रेज अवसर, जो केवल कुछ मिनटों तक ही चल सकते हैं। यदि आप मैन्युअल संचालन पर भरोसा करते हैं, तो उपयोगकर्ता समय पर सर्वोत्तम अवसर का लाभ नहीं उठा पाएंगे या सर्वोत्तम मूल्य से चूक जाएंगे। उदाहरण के लिए, कुछ समय पहले, बायबिट पर हैकर हमले के कारण, यूएसडीई को अलग कर दिया गया था, जिससे इसकी कीमत में काफी उतार-चढ़ाव आया था। उस समय, sUSDe खरीदने और उसे भुनाने से मिलने वाली वार्षिक रिटर्न दर 300% से अधिक थी। यह उच्च-उपज विंडो आमतौर पर बहुत कम समय तक चलती है, और अग्रिम में ऑर्डर सेट किए बिना मैन्युअल ट्रेडिंग के लिए बाजार की लय के साथ तालमेल बनाए रखना मुश्किल होता है। इसलिए, ऑर्डर प्लेसमेंट फ़ंक्शन विकेन्द्रीकृत एक्सचेंज (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)
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'))
आरपीसी (रिमोट प्रोसीजर कॉल) एथेरियम नोड द्वारा प्रदान किया गया एक संचार इंटरफ़ेस है, जो HTTP या वेबसॉकेट प्रोटोकॉल के माध्यम से JSON अनुरोध भेजकर ब्लॉकचेन के साथ इंटरैक्ट करता है। उदाहरण के लिए, eth_blockNumber नवीनतम ब्लॉक ऊंचाई की जानकारी प्राप्त कर सकता है। स्थानीय नोड चलाने की उच्च लागत के कारण, डेवलपर्स आमतौर पर तीसरे पक्ष के RPC प्रदाताओं पर निर्भर होते हैं। सामान्य विकल्पों में शामिल हैं:
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://eth-mainnet.g.alchemy.com/v2/你的API密钥'))
print(w3.is_connected())
अल्केमी का उपयोग करने की अनुशंसा की जाती है। मेटामास्क के इन्फ़ुरा की तुलना में, अल्केमी एक उच्च मुफ़्त कोटा प्रदान करता है। पंजीकरण के बाद, आप RPC पता प्राप्त कर सकते हैं, जैसे कि https://eth-mainnet.g.alchemy.com/v2/आपकी API कुंजी, और इसे उपयोग के लिए Web3.py पर कॉन्फ़िगर करें।
उदाहरण के रूप में sDAI/sUSDe के Crve पूल को लेते हुए https://curve.fi/dex/ethereum/pools/factory-stable-ng-102/swap/, आप आसानी से दो टोकन के पते और पूल का पता पा सकते हैं।

ABI यह परिभाषित करता है कि अनुबंध के साथ कैसे बातचीत करनी है, इसलिए इसे प्राप्त करना भी आवश्यक है। एथस्कैन पर अनुबंध देखें 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))
अंत में, हम लगातार कीमतें प्राप्त करने के लिए पोलिंग का उपयोग करते हैं, और अपेक्षित लाभ प्राप्त होने पर ऑर्डर देते हैं। इस कोड पर ध्यान देंयह सिर्फ एक नमूना कोड है, इसे सीधे उपयोग न करेंपाठकों को व्यवहार में विभिन्न समस्याओं का सामना करना पड़ सकता है, लेकिन एआई वर्तमान में बहुत शक्तिशाली है और मूल रूप से विभिन्न प्रश्नों का उत्तर दे सकता है। यह सीधे कोड लिखने में भी मदद कर सकता है। 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) # 出错后等待更长时间
नौसिखियों के लिए ऑन-चेन संचालन अपेक्षाकृत जोखिम भरा है। ऊपर बताए गए निजी कुंजी लीक होने के जोखिम के अलावा, कई अन्य जोखिम भी हैं:
ऑन-चेन ट्रेडिंग में नौसिखियों को मूल बातें सीखने की आवश्यकता है: गैस, स्लिपेज, एमईवी आदि जैसी अवधारणाओं को समझना। हमेशा कम राशि से शुरू करें और धीरे-धीरे बढ़ाएं। इथरस्कैन जैसी किसी चीज़ का उपयोग करके लेनदेन की निगरानी करें। अपनी पूंजी खोने का जोखिम उठाने से बेहतर है कि अवसर चूक जाएं।