FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম সমর্থন করেWeb3
সম্পর্কিত ফাংশন এবং সহজেই ক্রিপ্টোকারেন্সি বাজারে অ্যাক্সেস করতে পারেনdefi
exchanges.
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে, ইথেরিয়াম চেইনে স্মার্ট কন্ট্রাক্টের পদ্ধতি কল বাস্তবায়নের জন্য কৌশল কোড লিখুনexchange.IO
প্রথমত, এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে অ্যাক্সেস নোডটি কনফিগার করুন। অ্যাক্সেস নোডগুলি স্ব-নির্মিত নোড হতে পারে বা তৃতীয় পক্ষের পরিষেবাগুলি ব্যবহার করতে পারে, যেমনinfura
.
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মে অ্যাক্সেস নোডটি কনফিগার করুন। অ্যাক্সেস নোডগুলি স্ব-নির্মিত নোড হতে পারে বা তৃতীয় পক্ষের পরিষেবাগুলি ব্যবহার করতে পারে, যেমনinfura
.
এর পাতায়Web3
.
কনফিগার করুনRpc Address
(অ্যাক্সেস নোডের পরিষেবা ঠিকানা) এবংPrivate Key
(প্রাইভেট কী) এটি ব্যক্তিগত কী স্থানীয়করণ সমর্থন করে, দেখুনমূল নিরাপত্তা.
একটি চুক্তির কলিং যা একটি মানERC20
পদ্ধতি নিবন্ধনের প্রয়োজন হয় না এবং এটি সরাসরি কল করা যেতে পারে। স্ট্যান্ডার্ড চুক্তি ছাড়া অন্য পদ্ধতি কল করার জন্য ABI কন্টেন্ট নিবন্ধন প্রয়োজনঃexchange.IO("abi", tokenAddress, abiContent)
.
একটি চুক্তির ABI বিষয়বস্তু পেতে, আপনি নিম্নলিখিত URL ব্যবহার করতে পারেন এটি পেতে, গ্রহণresult
শুধুমাত্র মাঠে।
https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
ব্যবহার করুনexchange.IO()
ইথেরিয়াম RPC পদ্ধতি কল করার ফাংশন।
exchange.IO("api", "eth", "eth_getBalance", owner, "latest") // owner is the specific wallet address
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")
exchange.IO("api", "eth", "eth_estimateGas", data)
ফাংশনexchange.IO
এর মধ্যে রয়েছেencode
পদ্ধতি, যা ফাংশন কল এনকোডিং ফেরত দিতে পারেনhex
স্ট্রিং ফরম্যাট।
আপনি সর্বজনীনভাবে উপলব্ধ প্ল্যাটফর্মগুলি দেখতে পারেন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)
}
উদাহরণস্বরূপ, যখন 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
: মানিব্যাগের ঠিকানা উদাহরণে 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
: অনুমোদিত চুক্তির ঠিকানা, উদাহরণ স্ট্রিং দ্বারা প্রতিস্থাপিত হয় Uniswap V3 router v1
address.
amount
: অনুমোদন সংখ্যা, এখানে একটি hexadecimal স্ট্রিং ব্যবহার করে প্রতিনিধিত্ব করা হয়, একটি দশমিক মান অনুরূপ1e18
, ভাগ করেtoken
উদাহরণে যথার্থতা ইউনিট (যেমন, 1e18), যা 1 দেয়token
authorized.
তৃতীয় প্যারামিটারexchange.IO
ফাংশন পাস করা হয় পদ্ধতির নামapprove
, যা এই আকারেও লেখা যেতে পারেmethodId
, উদাহরণস্বরূপঃ
মাল্টি কল
দ্যmulticall
পদ্ধতি একটি ধ্রুবক পদ্ধতি নয়Uniswap V3
, যা সৃষ্টি করবেgas
ব্যবহার এবং একাধিক উপায়ে টোকেন বিনিময় করতে ব্যবহার করা যেতে পারে।
দ্যmulticall
পদ্ধতিতে প্যারামিটারগুলি পাস করার একাধিক পদ্ধতি থাকতে পারে। আপনি বিশদ জন্য পদ্ধতি ধারণকারী ABI অনুসন্ধান করতে পারেন। পদ্ধতি কল করার আগে আপনাকে ABI নিবন্ধন করতে হবে। রিটার্ন মানঃtxid
.
এর নির্দিষ্ট উদাহরণগুলির জন্যmulticall
পদ্ধতি কল, দয়া করে পাবলিক পড়ুন
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 V3contractV3SwapRouterV2
: 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)
}