وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایتھریم

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم پر، ایتھریم چین کے ذریعے اسمارٹ معاہدے کے طریقہ کار کال کو لاگو کرنے کے لئے حکمت عملی کا کوڈ لکھیںexchange.IOفنکشن۔ سب سے پہلے ، ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم پر رسائی نوڈ کی تشکیل کریں۔ رسائی نوڈس خود ساختہ نوڈس ہوسکتے ہیں یا تیسری پارٹی کی خدمات استعمال کرسکتے ہیں ، جیسےinfura.

ویب3 ایکسچینج آبجیکٹ کی ترتیب

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم پر رسائی نوڈ کی تشکیل کریں۔ رسائی نوڈس خود ساختہ نوڈس ہوسکتے ہیں یا تیسری پارٹی کی خدمات استعمال کرسکتے ہیں ، جیسے:infura. کے صفحے پرتبادلہFMZ کوانٹ ٹریڈنگ پلیٹ فارم، پروٹوکول منتخب کریں:کریپٹوکرنسی، اور پھر تبادلہ منتخب کریںWeb3. ترتیب دیںRpc Address(رسائی نوڈ کا سروس ایڈریس) اورPrivate Keyیہ نجی چابیاں کی مقامی تعیناتی کی حمایت کرتا ہے، دیکھیںکلیدی تحفظ.

اے بی آئی رجسٹر کریں

ایک معاہدے کو بلانا جو ایک معیاری ہےERC20طریقہ کار کو رجسٹریشن کی ضرورت نہیں ہے اور اسے براہ راست بلایا جاسکتا ہے۔ معیاری معاہدے کے علاوہ دوسرے طریقوں کو کال کرنے کے لئے اے بی آئی مواد کی رجسٹریشن کی ضرورت ہوتی ہے۔exchange.IO("abi", tokenAddress, abiContent). ایک معاہدے کے ABI مواد حاصل کرنے کے لئے، آپ مندرجہ ذیل یو آر ایل کا استعمال کر سکتے ہیں اسے حاصل کرنے کے لئے،resultصرف میدان.

https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45

ایتھریم آر پی سی کو کال کرنے کا طریقہ

استعمال کریںexchange.IO()Ethereum RPC طریقہ کار کو کال کرنے کے لئے تقریب.

  • بٹوے میں ETH کے بیلنس سے استفسار کریں
    exchange.IO("api", "eth", "eth_getBalance", owner, "latest")   // owner is the specific wallet address
    
  • ETH ٹرانسفر
    exchange.IO("api", "eth", "send", toAddress, toAmount)   // toAddress is the address of the wallet receiving ETH when transferring, toAmount is the quantity
    
  • سوال گیس قیمت
    exchange.IO("api", "eth", "eth_gasPrice")
    
  • سوال eth_estimateگیس
    exchange.IO("api", "eth", "eth_estimateGas", data)
    

سپورٹ کوڈ

فنکشنexchange.IOمیں شامل ہےencodeطریقہ، جس میں فنکشن کال کوڈنگ واپس کر سکتے ہیںhexتار کی شکل. آپ عوامی طور پر دستیاب پلیٹ فارم سے رجوع کر سکتے ہیںUniswap V3 ٹریڈنگ کلاس لائبریری ٹیمپلیٹمخصوص استعمال کے لیے۔ کوڈنگ کی کالunwrapWETH9طریقہ کار یہاں ایک مثال کے طور پر استعمال کیا جاتا ہے:

function main() {
    // Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
    // To call the unwrapWETH9 method, you need to register the ABI first, omit the registration here.
    // "owner" represents the wallet address, it needs to fill in the specific, 1 represents the number of unwrapping, unwrap a WETH into ETH
    var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
    Log(data)
}

جب کال کریںexchange.IO("encode",...)فنکشن، اگر دوسرا پیرامیٹر (سٹرنگ کی قسم) کے ساتھ شروع ہوتا ہے0x، اس کا مطلب یہ ہے کہ کوڈت (encodeسمارٹ معاہدہ. اگر یہ شروع نہیں ہوتا ہے0x، یہ مخصوص قسم کے حکم کوڈ کرنے کے لئے استعمال کیا جاتا ہے.abi.encodeمیںsolidityمندرجہ ذیل مثال کا حوالہ دیتے ہیں.

function main() {
    var x = 10 
    var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
    var str = "Hello World"
    var array = [1, 2, 3]
    var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array)   // uint i.e. uint256 , the type length needs to be specified on FMZ
    Log("ret:", ret)
    /*
    000000000000000000000000000000000000000000000000000000000000000a    // x
    00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9    // address
    0000000000000000000000000000000000000000000000000000000000000080    // offset of str
    00000000000000000000000000000000000000000000000000000000000000c0    // offset of array
    000000000000000000000000000000000000000000000000000000000000000b    // the length of str
    48656c6c6f20576f726c64000000000000000000000000000000000000000000    // str data
    0000000000000000000000000000000000000000000000000000000000000003    // the length of the array
    0000000000000000000000000000000000000000000000000000000000000001    // array the first data
    0000000000000000000000000000000000000000000000000000000000000002    // array the second data
    0000000000000000000000000000000000000000000000000000000000000003    // array the third data
    */
}

ٹوپلز یا ٹوپلز پر مشتمل اقسام کی ترتیب کوڈنگ کی حمایت کریں:

function main() {
    var types = "tuple(a uint256,b uint8,c address),bytes"
    var ret = exchange.IO("encode", types, {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }, "0011")
    Log("encode: ", ret)
}

اس قسم کے حکم پر مشتمل ہے:tupleاورbytes، تو دو پیرامیٹرز کو کال کرنے پر منتقل کرنے کی ضرورت ہےexchange.IOکرنے کے لئےencode:

  • قسم کے ٹپل کے مطابق متغیرات:
    {
        a: 30,
        b: 20,
        c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    }
    
    میں منتقل پیرامیٹرز کی ساخت اور قسم کے ساتھ بھی ہم آہنگ ہونا ضروری ہےtuple، جیسا کہtypesپیرامیٹر:tuple(a uint256, b uint8, c address).
  • قسم بائٹس کے مطابق متغیرات:
    "0011"
    

صفوں یا صفوں پر مشتمل اقسام کی ترتیب سے کوڈنگ کی حمایت:

function main() {
    var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"]   // ETH address, USDT address
    var ret = exchange.IO("encode", "address[]", path)
    Log("encode: ", ret)
}

encodePacked کے لیے معاونت

مثال کے طور پر، جب DEX طریقہ کار کو کال کرتے ہیںUniswap V3، آپ کو پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، جیسے تبادلہ راستہ، لہذا آپ کو استعمال کرنے کی ضرورت ہےencodePackagedآپریشن:

function main() {
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
    var tokenOutAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)
}

ڈی کوڈ کی حمایت

ڈیٹا پروسیسنگ نہ صرف کوڈنگ کی حمایت (encode), لیکن یہ بھی ڈیکوڈنگ (decodeاستعمال کریںexchange.IO("decode", types, rawData)کارکردگی کو انجام دینے کے لئےdecode operation.

function main() {
    // register SwapRouter02 abi
    var walletAddress = "0x398a93ca23CBdd2642a07445bCD2b8435e0a373f"
    var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
    var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
    exchange.IO("abi", routerAddress, abi)   // abi only uses the contents of the local exactOutput method, the full abi can be searched on the Internet

    // encode path
    var fee = exchange.IO("encodePacked", "uint24", 3000)
    var tokenInAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
    var tokenOutAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
    var path = tokenInAddress.slice(2).toLowerCase()
    path += fee + tokenOutAddress.slice(2).toLowerCase()
    Log("path:", path)

    var dataTuple = {
        "path" : path, 
        "recipient" : walletAddress, 
        "amountOut" : 1000, 
        "amountInMaximum" : 1, 
    }
    // encode SwapRouter02 exactOutput 
    var rawData = exchange.IO("encode", routerAddress, "exactOutput", dataTuple)
    Log("method hash:", rawData.slice(0, 8))   // 09b81346
    Log("params hash:", rawData.slice(8))

    // decode exactOutput params
    var decodeRaw = exchange.IO("decode", "tuple(path bytes,recipient address,amountOut uint256,amountInMaximum uint256)", rawData.slice(8))
    Log("decodeRaw:", decodeRaw)
}

مثال میں انجام دیتا ہےencodePackedآپریشن کے دوران سب سے پہلےpathپیرامیٹر پروسیسنگ، کیونکہexactOutputطریقہ کال ہے کہ بعد میں انکوڈ کرنے کی ضرورت ہے کی ضرورت ہےpathپیرامیٹر کے طور پر. پھر،encodeطریقہ کارexactOutputروٹنگ معاہدے میں صرف ایک پیرامیٹر ہے، اور پیرامیٹر کی قسم ہےtuple. طریقہ کارexactOutputنام کوڈ کیا گیا ہے0x09b81346، جس کا نتیجہ ڈیکوڈ کیا جاتا ہےdecodeRawکی طرف سےexchange.IO ("decode",...)طریقہ کار، اور یہ متغیر کے مطابق ہےdataTuple.

نجی چابیاں تبدیل کرنے کے لئے سپورٹ

یہ متعدد بٹوے کے پتوں کو چلانے کے لئے نجی چابیاں سوئچ کرنے کی حمایت کرتا ہے ، مثال کے طور پر:

function main() {
    exchange.IO("key", "Private Key")   // "Private Key" represents the private key string, which needs to be filled in specifically
}

اسمارٹ معاہدے کو بلانے کا طریقہ

مندرجہ ذیل مواد کچھ سمارٹ معاہدے کے طریقہ کار کالوں کی ایک مثال ہے.

  • اعشاری کےdecimalsطریقہ کار ایک ہےconstantطریقہ کارERC20جو پیدا نہیں کرتاgasکھپت، اور یہ ایک کی درستگی کے اعداد و شمار کو تلاش کر سکتے ہیںtoken. کےdecimalsکوئی پیرامیٹرز نہیں ہے. واپسی کی قیمت: درستگی کے اعداد و شمارtoken.

    function main(){
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"    // The contract address of the token, in the example the token is 1INCH
        Log(exchange.IO("api", tokenAddress, "decimals"))                  // Query, print 1INCH tokens with precision index of 18
    }
    
  • تنخواہ کےallowanceطریقہ کار ایک ہےconstantطریقہ کارERC20جو پیدا نہیں کرتاgasکھپت، اور یہ ایک مخصوص مقدار کی اجازت مقدار کی پوچھ گچھ کر سکتے ہیںtokenایک مخصوص معاہدے کے ایڈریس کے لئے. کےallowanceطریقہ 2 پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، سب سے پہلے ایک پرس ایڈریس ہے، اور دوسرا ایک مجاز ایڈریس ہے.token.

    function main(){
        // The contract address of the token, in the example the token is 1INCH
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"            
        var owner = ""
        var spender = ""
        
        // For example, the query yields 1000000000000000000, divided by the precision unit of the token 1e18, the current exchange object bound to the wallet to the spender address authorized 1 1INCH.
        Log(exchange.IO("api", tokenAddress, "allowance", owner, spender))
    }
    

    owner: پرس کا پتہ مثال میں owner سٹرنگ سے تبدیل کیا جاتا ہے۔ اصل استعمال میں ، آپ کو پتہ پُر کرنے کی ضرورت ہے۔spender: مجاز معاہدے کا پتہ مثال میں تار spender کی طرف سے تبدیل کیا جاتا ہے. اصل استعمال میں، آپ کو ایڈریس کو خاص طور پر بھرنے کی ضرورت ہے، مثال کے طور پر، ایڈریس ہو سکتا ہےUniswap V3 router v1.

  • منظور کےapproveطریقہ کار ایک غیرconstantطریقہ کارERC20جو پیدا کرتا ہےgasکھپت، جو ایک اجازت دینے کے لئے استعمال کیا جاتا ہےtokenایک مخصوص معاہدے کے ایڈریس پر آپریشن کی رقم. کےapproveطریقہ کار کو 2 پیرامیٹرز میں منتقل کرنے کی ضرورت ہے، پہلا ایڈریس ہے جس کی اجازت دی جائے گی اور دوسرا اختیار شدہ رقم ہے. واپسی کی قیمت:txid.

    function main(){
        // The contract address of the token, in the example the token is 1INCH
        var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
        var spender = ""
        var amount = "0xde0b6b3a7640000"
        
        // The hexadecimal string of the authorization amount: 0xde0b6b3a7640000 , the corresponding decimal string: 1e18 , 1e18 divided by the precision unit of the token, i.e. 1 token amount, so this refers to the authorization of one token.
        Log(exchange.IO("api", tokenAddress, "approve", spender, amount))
    }
    

    spender: منظور شدہ معاہدے کا پتہ، مثال کے طور پر spender سٹرنگ کی طرف سے تبدیل کیا جاتا ہے، اصل استعمال مخصوص ایڈریس میں بھرنے کی ضرورت ہے، مثال کے طور پر، یہ ہو سکتا ہےUniswap V3 router v1 address. amount: اجازتوں کی تعداد، یہاں ہیکساڈیسمل سٹرنگ کا استعمال کرتے ہوئے نمائندگی کی، ایک اعشاریہ قدر کے مساوی ہے1e18، تقسیمtokenمثال میں درستگی یونٹ (یعنی، 1e18) ، 1 پیداوارtoken authorized.

    کے تیسرے پیرامیٹرexchange.IOفنکشن کو طریقہ کار کا نام منتقل کیا جاتا ہےapprove، جو بھی شکل میں لکھا جا سکتا ہےmethodId، مثال کے طور پر: 0x571ac8b0. یہ بھی مکمل معیاری طریقہ نام لکھنے کے لئے ممکن ہے، جیسے approve(address,uint256) .

  • ملٹی کال کےmulticallطریقہ ایک غیر مستقل طریقہ ہےUniswap V3، جو پیدا کرے گاgasکھپت اور متعدد طریقوں سے ٹوکن کا تبادلہ کرنے کے لئے استعمال کیا جا سکتا ہے. کےmulticallطریقہ کار میں پیرامیٹرز کو منتقل کرنے کے متعدد طریقے ہوسکتے ہیں۔ آپ تفصیلات کے لئے طریقہ کار پر مشتمل اے بی آئی سے استفسار کرسکتے ہیں۔ طریقہ کار کو کال کرنے سے پہلے آپ کو اے بی آئی کو رجسٹر کرنے کی ضرورت ہے۔ واپسی کی قیمت:txid.

    کے مخصوص مثالوں کے لئےmulticallطریقہ کار کالز، براہ مہربانی عوام سے رجوع کریںUniswap V3 ٹریڈنگ کلاس لائبریری ٹیمپلیٹہمارے پلیٹ فارم کے.

    function main() {
        var ABI_Route = ""
        var contractV3SwapRouterV2 = ""
        var value = 0
        var deadline = (new Date().getTime() / 1000) + 3600
        var data = ""
        exchange.IO("abi", contractV3SwapRouterV2, ABI_Route)
        exchange.IO("api", contractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)
    }
    

    ABI_Route: Uniswap V3s روٹر v2 معاہدے کا ABI، اسے اصل صورتحال کے مطابق بھرنے کی ضرورت ہے۔contractV3SwapRouterV2: Uniswap V3 کے روٹر v2 ایڈریس، اصل استعمال میں ایک مخصوص ایڈریس میں بھرنے کی ضرورت ہوتی ہے...value: منتقل ETH کی رقم، یہ 0 پر مقرر اگرtokenInتبادلہ آپریشن کے لئے ٹوکن ETH نہیں ہے، یہ اصل صورت حال کے مطابق بھرنے کی ضرورت ہے.deadline: یہ مقرر کیا جا سکتا ہے(new Date().getTime() / 1000) + 3600، جس کا مطلب ہے کہ یہ ایک گھنٹے کے لئے درست ہے.data: پیکنگ کے عمل کے اعداد و شمار کو انجام دینے کے لئے، اسے اصل صورت حال کے مطابق بھرنے کی ضرورت ہے.

    یہ بھی مخصوص کرنے کے لئے ممکن ہےgasLimit/gasPrice/nonceطریقہ کار کالوں کی ترتیب:

    exchange.IO("api", contractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 5000000000, gasLimit: 21000})
    

    آپ پیرامیٹر مقرر کر سکتے ہیں{gasPrice: 5000000000, gasLimit: 21000, nonce: 100}آپ کی مخصوص ضروریات کے مطابق، پیرامیٹر کی آخری پیرامیٹر پر مقرر کیا جاتا ہےexchange.IOفنکشن. آپ کو چھوڑ سکتے ہیںnonceاور نظام ڈیفالٹس استعمال کریں، یا مقرر نہیں کرتےgasLimit/gasPrice/nonceاور سسٹم کے تمام ڈیفالٹ اقدار کا استعمال کریں.

    یہ نوٹ کیا جانا چاہئے کہ مثال میں، خصوصیتstateMutabilityمیںmulticall(uint256,bytes[])طریقہ یہ ہےpayable، اورvalueپیرامیٹر میں منتقل کرنے کی ضرورت ہے. کی خصوصیتstateMutability":"payable"سے دیکھا جا سکتا ہےABI.exchange.IOتقریب کے مطابق مطلوبہ پیرامیٹرز کا تعین کرے گاstateMutabilityمیں وصفABIجو رجسٹرڈ کیا گیا ہے۔ اگرstateMutabilityوصف ہےnonpayable، پیرامیٹرvalueمنتقل کرنے کی ضرورت نہیں ہے.

دیگر فنکشن کالز

  • تبادلہ آبجیکٹ کی طرف سے تشکیل والی پرس کا پتہ حاصل کرتا ہے
    function main() {
        Log(exchange.IO("address"))         // Print the wallet address of the private key configured on the exchange object
    }
    
  • بلاکچین آر پی سی نوڈس کو سوئچ کریں
    function main() {
        var chainRpc = "https://bsc-dataseed.binance.org"
        
        // Switch to BSC chain
        e.IO("base", chainRpc)
    }
    
جاوا اسٹریٹجی لکھنے کی ہدایات بلٹ ان لائبریری