রিসোর্স লোড হচ্ছে... লোডিং...

এফএমজেড ব্যবহার করে ইথেরিয়ামের উপর ভিত্তি করে সহজেই ওয়েব 3 ডেভেলপমেন্ট দিয়ে শুরু করুন

লেখক:এফএমজেড-লিডিয়া, তৈরিঃ 2023-06-25 09:17:53, আপডেটঃ 2024-11-11 22:34:49

[TOC]

img

এফএমজেড ব্যবহার করে ইথেরিয়ামের উপর ভিত্তি করে সহজেই ওয়েব 3 ডেভেলপমেন্ট দিয়ে শুরু করুন

EtherEaseWithFMZ টিউটোরিয়াল

সহজেই এফএমজেড ব্যবহার করে ইথেরিয়ামের উপর ভিত্তি করে ওয়েব 3 বিকাশ শুরু করুন

ইথেরিয়াম হ'ল ব্লকচেইন প্রযুক্তির উপর ভিত্তি করে একটি স্মার্ট কন্ট্রাক্ট প্ল্যাটফর্ম, যা স্মার্ট কন্ট্রাক্টগুলি লিখতে এবং স্থাপন করার জন্য একটি বিকেন্দ্রীভূত উপায় সরবরাহ করে। স্মার্ট কন্ট্রাক্টগুলি একটি বিশেষ ধরণের কম্পিউটার প্রোগ্রাম যা স্বয়ংক্রিয়ভাবে ব্লকচেইনে কার্যকর করতে পারে এবং তৃতীয় পক্ষের উপর নির্ভর করার প্রয়োজন ছাড়াই বিভিন্ন ব্যবসায়িক যুক্তি বাস্তবায়ন করতে পারে।

FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম (FMZ.COM) একটি সহজেই ব্যবহারযোগ্য এপিআই সরবরাহ করে, যা ডেভেলপারদের ইথেরিয়াম ব্লকচেইন এবং এর বাস্তুতন্ত্রের সাথে আরও সহজেই ইন্টারঅ্যাক্ট করার অনুমতি দেয়। এটি বিকেন্দ্রীভূত এক্সচেঞ্জ (ডিইএক্স) অ্যাক্সেস অর্জন করে, চেইনের ডেটা অর্জন করে, লেনদেন পাঠায় এবং অন্যান্য ফাংশন।

এই টিউটোরিয়ালে, উদাহরণগুলি লিখিত হয়JavaScriptভাষা, পরীক্ষার পরিবেশ উভয় ব্যবহার করেইথেরিয়াম মেইননেটএবংগেরলি টেস্ট নেট. এবং আপনি এফএমজেড প্ল্যাটফর্মের এপিআই ডকুমেন্টেশনে টিউটোরিয়ালে ব্যবহৃত এপিআই ইন্টারফেস এবং সম্পর্কিত বিবরণ, কোড উদাহরণগুলিও দেখতে পারেন।


এফএমজেড শুরু হচ্ছে

FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যবহার করতে শেখার আগে, আমাদের কয়েকটি মৌলিক ধারণার সাথে পরিচিত হওয়া দরকারঃ

1. এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম আর্কিটেকচার

এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের অফিসিয়াল ওয়েবসাইটে নিবন্ধন ও লগ ইন করার পর (https://www.fmz.com), আপনি প্ল্যাটফর্মের বিভিন্ন ফাংশন ব্যবহার করতে পারেন। এফএমজেড ওয়েবসাইটটি পুরো সিস্টেমের পরিচালনা শেষ, এবং ব্যবহারকারী-লিখিত প্রোগ্রামগুলি আসলে ডকারের উপর চালিত হয়। ডকার সফ্টওয়্যার প্রোগ্রামটি সার্ভার, কম্পিউটার ইত্যাদির মতো বিভিন্ন ডিভাইসে স্থাপন করা যেতে পারে। যখন কোনও ব্যবহারকারী একটি প্রোগ্রাম লিখে এবং এফএমজেড ওয়েবসাইটে একটি চলমান উদাহরণ তৈরি করে, তখন এফএমজেড প্ল্যাটফর্ম ডকারের সাথে যোগাযোগ করবে এবং এতে একটি প্রোগ্রাম উদাহরণ শুরু করবে।

২. ডকার

আপনি যদি কোনও প্রোগ্রাম ইনস্ট্যান্স চালাতে চান তবে আপনাকে একটি ডকার স্থাপন করতে হবে। ডকারের স্থাপনও খুব সহজ, এবং প্ল্যাটফর্মে স্থাপনার টিউটোরিয়াল রয়েছে। আপনি এফএমজেডের পক্ষে ভাড়া নেওয়া সার্ভারগুলিতে স্বয়ংক্রিয়ভাবে স্থাপনের জন্য এফএমজেড দ্বারা সরবরাহিত ওয়ান-ক্লিক স্থাপনার ব্যবহার করতে পারেন।

  • ব্যক্তিগত ডিভাইসে ডকার স্থাপন করুন

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

  1. লগ ইন করুন অথবা ডিভাইস খুলুন যেখানে ডকার প্রোগ্রাম স্থাপন করা হবে, যেমনসার্ভারে লগ ইন করাঅথবাঅপারেটিং সিস্টেমে প্রবেশের জন্য কম্পিউটার চালু করা.
  2. ডকার প্রোগ্রামের সংশ্লিষ্ট সংস্করণ ডাউনলোড করুন (ডিভাইসের অপারেটিং সিস্টেমের উপর নির্ভর করে), ডাউনলোড পৃষ্ঠাঃhttps://www.fmz.com/m/add-node

img

  1. আপনি যা ডাউনলোড করেছেন তা একটি কম্প্রেসড প্যাকেজ, এর ডিকম্প্রেস করা দরকার।
  2. ডকার প্রোগ্রাম চালান, ডকার প্রোগ্রাম একটি এক্সিকিউটেবল ফাইল নামকrobot. ডকার যোগাযোগ ঠিকানা কনফিগার করুন, যা প্রতিটি FMZ অ্যাকাউন্টের জন্য অনন্য, FMZ এ লগ ইন করার পরে, আপনি এ আপনার নিজের ঠিকানা দেখতে পারেনhttps://www.fmz.com/m/add-nodeপৃষ্ঠা (যেমন,./robot -s node.fmz.com/xxxxxঠিকানা এই স্ট্রিং, যেখানে বিষয়বস্তু এxxxxxঅবস্থান প্রতিটি এফএমজেড অ্যাকাউন্টের জন্য আলাদা) । অবশেষে, আপনাকে আপনার এফএমজেড অ্যাকাউন্টের পাসওয়ার্ড প্রবেশ করতে হবে। এই সেটিংস কনফিগার করার পরে, ডকার প্রোগ্রামটি চালান।
  • FMZ প্ল্যাটফর্মের One-Click Deployment ফাংশন ব্যবহার করুন

    এফএমজেড প্ল্যাটফর্মে একটি ডকার পৃষ্ঠা যোগ করুন, ঠিকানাঃhttps://www.fmz.com/m/add-node

    img

৩. ডিবাগিং টুল

FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম একটি বিনামূল্যে ডিবাগিং টুল প্রদান করে যা সমর্থন করেJavaScript, TypeScript, এবং পাতাটি হলঃhttps://www.fmz.com/m/debug. কারণ চালানোর জন্য ইনস্ট্যান্স তৈরি করার জন্য বিল দেওয়া হয়। প্রাথমিক শেখার সময়কালে, আপনি এই ডিবাগিং সরঞ্জামটি পরীক্ষা এবং শেখার জন্য ব্যবহার করতে পারেন। সর্বোচ্চ চলমান সময় সীমা 3 মিনিট ব্যতীত, ডিবাগিং সরঞ্জামটি ব্যবহার এবং চালানোর জন্য একটি ইনস্ট্যান্স তৈরির মধ্যে কোনও পার্থক্য নেই।

ব্যবহারের সময়TypeScriptভাষা, আপনি লিখতে হবে// @ts-checkকোডের প্রথম লাইনে পরিবর্তন করতে হবেTypeScriptমোড; যদি না স্যুইচ করা হয়, ডিফল্টJavaScript language.

৪. প্ল্যাটফর্ম

এফএমজেডে, প্ল্যাটফর্ম একটি সাধারণ ধারণা। সিইএক্স এক্সচেঞ্জগুলির জন্য, এটি একটি নির্দিষ্ট এক্সচেঞ্জ অ্যাকাউন্ট কনফিগারেশনকে বোঝায়। ওয়েব 3 এর জন্য, এই এক্সচেঞ্জটি একটি কনফিগারেশন তথ্যকে বোঝায় যা নোড ঠিকানা এবং ব্যক্তিগত কী কনফিগারেশন অন্তর্ভুক্ত করে।

এফএমজেড প্ল্যাটফর্মের লগ ইন অবস্থায়,https://www.fmz.com/m/add-platformপৃষ্ঠা, আপনি বিনিময় তথ্য কনফিগার করতে পারেন, যেখানে বিনিময় একটি সাধারণ ধারণা।

img

নির্বাচন করুনWeb3, RPC নোড ঠিকানা কনফিগার করুন, ব্যক্তিগত কী কনফিগার করুন, আপনি নীচের ডান কোণে ক্লিক করতে পারেন সংবেদনশীল তথ্য এনক্রিপ্ট করা সংরক্ষণ করা হবে নিরাপত্তা প্রক্রিয়া দেখতে.

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

img

ছবিতে,https://mainnet.infura.io/v3/xxxxxxxxxxxxxহল ইনফুরা ইটিএইচ মেইননেটের ব্যক্তিগত আরপিসি নোডের ঠিকানা।


FMZ ব্যবহার করে ইথেরিয়ামের সাথে ইন্টারঅ্যাক্ট করুন

ডকার প্রোগ্রাম স্থাপন এবং বিনিময় বস্তু কনফিগার করার পরে, আপনি ব্যবহার করতে পারেনFMZ.COMs Debugging Tool পরীক্ষার জন্য। ইথেরিয়াম আরপিসি পদ্ধতি কল করুন এবং ইথেরিয়ামের সাথে ইন্টারঅ্যাক্ট করুন, এই অধ্যায়ে তালিকাভুক্ত এবং প্রবর্তিত বেশ কয়েকটি আরপিসি পদ্ধতির পাশাপাশি, অন্যান্য আরপিসি পদ্ধতিগুলি পরামর্শের উপকরণগুলি যেমন খুঁজে পাওয়া যায়ঃhttps://www.quicknode.com/docs.

আমরা কিছু সহজ উদাহরণ তালিকাভুক্ত, মৌলিক থেকে শুরু করে. বিভিন্ন ভাষা এবং সরঞ্জাম জন্য, বিভিন্ন উপায়ে web3 অ্যাক্সেস আছে, ছবিতে দেখানো হয়ঃ

img

এফএমজেডে, আরপিসি পদ্ধতি কলগুলিও ক্যাপসুল করা হয় এবং এই ফাংশনগুলি এফএমজেড এপিআই ফাংশনে ক্যাপসুল করা হয়exchange.IO. কল করার পদ্ধতি হলexchange.IO("api", "eth", ...). প্রথম প্যারামিটার স্থির করা হয়"api", দ্বিতীয় পরামিতি স্থির করা হয়"eth", এবং অন্যান্য পরামিতি নির্দিষ্ট RPC পদ্ধতি কল করা হয় উপর নির্ভর করে।

আউটপুট তথ্যের জন্য, আমরাLogএফএমজেড প্ল্যাটফর্মের কার্যকারিতাLogফাংশন একাধিক পরামিতি গ্রহণ করতে পারে এবং তারপরে এগুলিকে এফএমজেড প্ল্যাটফর্মের ডিবাগ টুল বা বট পৃষ্ঠার লগ এলাকায় আউটপুট করতে পারে। ডিবাগ টুল পৃষ্ঠাটি আমাদের প্রধান পরীক্ষার সরঞ্জাম হবে।

eth_getবালান্স

দ্যeth_getBalanceইথেরিয়ামের পদ্ধতিটি ইথেরিয়ামের একটি ঠিকানার ইথেরিয়ামের ভারসাম্য অনুসন্ধান করতে ব্যবহৃত হয় এবং এই পদ্ধতিতে দুটি পরামিতি প্রয়োজন।

  • ঠিকানা অনুসন্ধান করা হবে।
  • লেবেল, আমরা সাধারণত সর্বশেষ ব্যবহার করি। আসুন ইথেরিয়াম প্রতিষ্ঠাতা পরীক্ষা করিVitalik Buterinএর ইটিএইচ ওয়ালেট ঠিকানা, পরিচিত ঠিকানা হল:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045.
function main() {
    let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
    Log("ethBalance:", ethBalance)
}

ইতিমধ্যে ডকার (ছবিতেঃ লিনাক্স / amd64...) স্থাপন এবং বিনিময় বস্তু কনফিগার (ছবিতেঃ ওয়েব 3 পরীক্ষা), ডিবাগিং টুল মধ্যে পরীক্ষা কোডঃ

img

কোড চালানোর জন্য Execute বোতামে ক্লিক করুন এবং ফলাফল প্রদর্শন করুনঃ

ethবালান্সঃ 0x117296558f185bbc4c6

দ্যlogফাংশন প্রিন্ট আউটethBalanceভেরিয়েবল মানঃ0x117296558f185bbc4c6, যা একটি স্ট্রিং টাইপ. এটাইটিএইচ ব্যালেন্সের হেক্সাডেসিমাল মানমধ্যেweiএকক,1e18 weiযা ১ এর সমানETHসুতরাং, এটি একটি পাঠযোগ্য দশমিক ইটিএইচ ব্যালেন্সে রূপান্তরিত করা প্রয়োজন।

রূপান্তরethBalanceপাঠযোগ্য ডেটাতেঃ

function main() {
    let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
    Log("ethBalance:", ethBalance)
    
    // Converting ethBalance into readable data
    let vitalikEthBalance = parseInt(ethBalance.substring(2), 16) / 1e18
    Log("vitalikEthBalance:", vitalikEthBalance)
}

অনুসন্ধান চালিয়ে যানhttps://etherscan.io/:

img

তবে ভাষাটির সঠিকতার সমস্যার কারণে, এই পদ্ধতিতে বিচ্যুতি থাকবে। অতএব, এফএমজেড প্ল্যাটফর্মে ডেটা প্রসেসিংয়ের জন্য দুটি অন্তর্নির্মিত ফাংশন রয়েছেঃ

  • বিগইন্টঃ বিগইন্ট অবজেক্টে হেক্সাডেসিমাল স্ট্রিং রূপান্তর করুন।
  • বিগডেসিমালঃ সংখ্যাসূচক প্রকারের বস্তুগুলিকে গণনাযোগ্য বিগডেসিমাল বস্তুগুলিতে রূপান্তর করুন।

কোডটি আবার সামঞ্জস্য করুনঃ

function main() {
    let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")

    // The precision unit of ETH is 1e18
    let ethDecimal = 18
    Log("vitalikEthBalance:", Number((BigDecimal(BigInt(ethBalance)) / BigDecimal(Math.pow(10, ethDecimal))).toString()))
}

ভিটালিক ইথ ব্যালেন্সঃ ৫১৪৯.৬২৪৪৮৪৬৮৭৫২১৫

eth_chainId

eth_chainIdএবংnet_versionএই দুটি ফাংশনই বর্তমান RPC নোডের সাথে সংযুক্ত ব্লকচেইনের আইডি ফেরত দেয়, পার্থক্য হচ্ছে যেnet_versionএকটি দশমিক আইডি প্রদান করে এবংeth_chainIdহেক্সাডেসিমাল আইডি প্রদান করে।

নেটওয়ার্ক নাম যা chainId এর সাথে মিলে যায়

1 - ethereum mainnet
2 - morden testnet (deprecated)
3 - ropsten testnet
4 - rinkeby testnet
5 - goerli testnet
11155111 - sepolia testnet
10 - optimism mainnet
69 - optimism kovan testnet
42 - kovan testnet
137 - matic/polygon mainnet
80001 - matic/polygon mumbai testnet
250 - fantom mainnet
100 - xdai mainnet
56 - bsc mainnet

কনফিগার করা ইথেরিয়াম টেস্টনেট দিয়ে পরীক্ষা করুনgoerliনোডঃ

function main() {
    let netVersionId = exchange.IO("api", "eth", "net_version")
    let ethChainId = exchange.IO("api", "eth", "eth_chainId")

    Log("netVersionId:", netVersionId)
    Log("ethChainId:", ethChainId, " , conversion:", parseInt(ethChainId.substring(2), 16))
}

eth_gasPrice

কল করুনeth_gasPriceবর্তমান অনুসন্ধান করার পদ্ধতিgas priceচেইনে।

function toAmount(s, decimals) {
    return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}

function main() {
    let gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
    Log("gasPrice:", gasPrice, " , conversion:", toAmount(gasPrice, 0))
}

এখানে আমরা হেক্সাডেসিমাল স্ট্রিংকে পাঠযোগ্য সংখ্যাসূচক মানের রূপান্তর করার জন্য একটি ফাংশন লিখছিঃtoAmount. এছাড়াও, লক্ষ্য করুন যে ইউনিটgasPriceহয়wei, তাই ফর্মাল প্যারামিটার অনুরূপ বাস্তব পরামিতির মান 0 পাসdecimals.

eth_blockNumber

"eth_blockNumberব্লকের উচ্চতা অনুসন্ধান করতে ব্যবহৃত হয়।

function toAmount(s, decimals) {
    return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}

function main() {
    let blockNumber = exchange.IO("api", "eth", "eth_blockNumber")
    Log(toAmount(blockNumber, 0))
}

ডিবাগিং টুল চালানঃ

img

অনুসন্ধান চালিয়ে যানhttps://etherscan.io/:

img

eth_getBlockByNumber

ব্লক তথ্য অনুসন্ধান করুন।

function main() {
    let blockNumber = exchange.IO("api", "eth", "eth_blockNumber")    
    Log(blockNumber)
    let blockMsg = exchange.IO("api", "eth", "eth_getBlockByNumber", blockNumber, true)
    Log(typeof(blockMsg), blockMsg)
    
    // Due to the excessive content of Log output, it will be truncated automatically, so traverse each field of the returned block information and print them one by one
    for (let key in blockMsg) {
        Log("key:", key, ", val:", blockMsg[key])
    }
}

ডিবাগিং টুল এ চালানো নিম্নলিখিত তথ্য পেতে পারে:

img

চুক্তির তথ্য পড়ুন

অনেক স্মার্ট কন্ট্রাক্ট অ্যাপ্লিকেশন ইথেরিয়ামে চলে, এবংENSতাদের মধ্যে একজন।ENS, বা ইথেরিয়াম নাম পরিষেবা, ইথেরিয়াম ব্লকচেইনের উপর ভিত্তি করে একটি বিকেন্দ্রীভূত ডোমেন নাম রেজোলিউশন পরিষেবা। আপনি কি টিউটোরিয়ালে যে উদাহরণটি দেখেছেন যেখানে আমরা ইথেরিয়াম প্রতিষ্ঠাতা ভিটালিক বুটারিনের মানিব্যাগের ভারসাম্য পরীক্ষা করেছি? ভিটালিক বুটারিনের মানিব্যাগের একটি ঠিকানা হলঃ0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. তাহলে কিভাবে আমরা ঠিকানা জানি? আসলে, এটা মাধ্যমে অনুসন্ধান করা যেতে পারেENSএকটি স্বজ্ঞাত নাম ব্যবহার করে স্মার্ট চুক্তিvitalik.eth.

এই অধ্যায়ে নিম্নলিখিত বিষয়বস্তু ইথেরিয়াম মেইননেট পরিবেশ ব্যবহার করে,ENSনথিপত্র,Hashing Namesইথেরিয়াম ডোমেইন নাম অনুসন্ধানের জন্য প্রয়োজনীয়। প্রক্রিয়া করার জন্য নিম্নলিখিত কোডটি ব্যবহার করুনvitalik.eth.

function nameHash(name) {
    if (name == "") {
        return "0000000000000000000000000000000000000000000000000000000000000000"
    } else {
        let arr = name.split(".")
        let label = arr[0]
        
        arr.shift()
        let remainder = arr.join(".")
        return Encode("sha3.keccak256", "hex", "hex", nameHash(remainder) + Encode("sha3.keccak256", "raw", "hex", label))
    }
}

উপরের কোড উদাহরণে, আমরা অন্য অপরিচিত ফাংশন দেখেছিEncode. এই ফাংশনটি এফএমজেড প্ল্যাটফর্মের একটি এপিআই ফাংশন এবং বিশেষত এফএমজেড প্ল্যাটফর্মে কোডিং অপারেশনগুলির জন্য ব্যবহৃত হয়। ফাংশনটি একাধিক কোডিং পদ্ধতি এবং বিভিন্ন হ্যাশ অ্যালগরিদম সমর্থন করে।

Encode(algo, inputFormat, outputFormat, data, keyFormat, key string)

ENS নথিতে বর্ণনা অনুযায়ী,sha3.keccak256তথ্য প্রক্রিয়াকরণের জন্য অ্যালগরিদম।

কল করুনnameHashফাংশন, যেমনঃLog(nameHash("vitalik.eth")), আপনি পেতে পারেনঃee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835, এবং আপনাকে 0x উপসর্গ যোগ করতে হবে।0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835প্যারামিটার হিসাবে ব্যবহার করা হয়resolverএনএস স্মার্ট কন্ট্রাক্টের পদ্ধতি।

let ensNode = "0x" + nameHash("vitalik.eth")    // Prepare the parameters ensNode for calling the resolver method

ENS ডকুমেন্টেশন অনুযায়ী, ENS স্মার্ট কন্ট্রাক্ট অ্যাপ্লিকেশনের জন্য চুক্তি ঠিকানা হলঃ0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e. কল করার আগেresolverস্মার্ট কন্ট্রাক্টের পদ্ধতি, আমাদেরও প্রস্তুত করতে হবেABIচুক্তির।

এবিআই নিবন্ধন করুন

এটি জানার পর, আপনি জিজ্ঞাসা করতে পারেনঃABIস্মার্ট কন্ট্রাক্ট?

ABI, or Application Binary Interface, is the interface standard for smart contracts to communicate with the external world.
The ABI of a smart contract defines the contract's function interfaces, parameter types, return values, and other information, as well as specifications for calling the contract and passing parameters.

The ABI of a smart contract is usually stored in JSON format and contains the following information:

Contract function interfaces: function names, parameter lists, return values, etc.
Function parameter types: such as uint256, bool, string etc.
Encoding methods for input and output parameters of functions: Smart contracts use an encoding method called Solidity ABI to encode input and output parameters of functions so that they can interact with Ethereum network.
In Ethereum network ,the ABI of a smart contract is used to call its functions. When you need to call a contract function, you need to provide the name of the function, its parameters, and bytecode encoded according to ABI encoding method.
Ethereum nodes will package this information into transactions and send them out on Ethereum network for execution.

In Solidity language,the keyword 'interface' can be used define ABIs for smart contracts. Ethereum development tools like Remix IDE ,Truffle also provide editing & generation tools making it easier developers create & use ABIs.

বের করুনresolverENS এর ABI থেকে পদ্ধতি অংশ, অথবা আপনি সম্পূর্ণ ABI ব্যবহার করতে পারেন। আপনি চুক্তির ABI এ অনুসন্ধান করতে পারেনhttps://etherscan.io/অথবা অন্যান্য চ্যানেলের মাধ্যমে (যেমন, প্রাসঙ্গিক প্রকল্পের ডকুমেন্টেশন) এবিআই পেতে পারেন।

img

let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`

এখানে আমরা FMZ প্ল্যাটফর্মে একটি নতুন ইনভোকেশন পদ্ধতি শিখতে যাচ্ছি,exchange.IO("abi", address, abiContent), যা ABI নিবন্ধনের জন্য ব্যবহৃত হয়।addressপ্যারামিটার হল স্মার্ট চুক্তির ঠিকানা এবংabiContentপ্যারামিটার হল সংশ্লিষ্ট স্মার্ট কন্ট্রাক্ট ABI (স্ট্রিং) ।

let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", abiENS_resolver)  // 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e is the address of the ENS smart contract deployed on the Ethereum mainnet

স্মার্ট কন্ট্রাক্ট কল করার পদ্ধতি

পরবর্তী, আপনি কল করতে পারেনresolverENS স্মার্ট কন্ট্রাক্টের পদ্ধতি, যাENS: Public Resolver contract.

img

let resolverAddress = exchange.IO("api", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "resolver", ensNode)

ব্যবহার করুনENS: Public Resolverচুক্তিaddrভিটালিক বুটারিনের মানিব্যাগের ঠিকানা পেতে।ENS: Public Resolverএই স্মার্ট চুক্তির জন্য ABI তথ্য এখনও থেকে প্রাপ্ত করা যাবেhttps://etherscan.io/.

let abiENSPublicResolver = `[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", resolverAddress, abiENSPublicResolver)

img

অবশেষে, কল করুনENS: Public Resolverচুক্তিaddrপদ্ধতি, প্যারামিটার এখনও হচ্ছেensNode.

let vitalikAddress = exchange.IO("api", resolverAddress, "addr", ensNode)
Log("vitalikAddress:", vitalikAddress)

লগ ফাংশন আউটপুটঃ

vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045

ENS এর সম্পূর্ণ কোড কল করুন

function nameHash(name) {
    if (name == "") {
        return "0000000000000000000000000000000000000000000000000000000000000000"
    } else {
        let arr = name.split(".")
        let label = arr[0]
        
        arr.shift()
        let remainder = arr.join(".")
        return Encode("sha3.keccak256", "hex", "hex", nameHash(remainder) + Encode("sha3.keccak256", "raw", "hex", label))
    }
}

function main() {
    // Calculate the name
    let ensNode = "0x" + nameHash("vitalik.eth")    

    // Register ENS contract
    let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`
    exchange.IO("abi", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", abiENS_resolver)
    let resolverAddress = exchange.IO("api", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "resolver", ensNode)
    
    // Register ENS Public Resolver contract
    let abiENSPublicResolver = `[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]`
    exchange.IO("abi", resolverAddress, abiENSPublicResolver)
    let vitalikAddress = exchange.IO("api", resolverAddress, "addr", ensNode)
    Log("vitalikAddress:", vitalikAddress)
}

ইটিএইচ পাঠান

পূর্ববর্তী কোর্সের অধ্যায়গুলিতে, আমরা কীভাবে ব্যক্তিগত কীগুলি কনফিগার করব তা শিখেছি। আমরা কীভাবে কনফিগার করা এক্সচেঞ্জ অবজেক্টের জন্য এই ব্যক্তিগত কীটির সাথে সম্পর্কিত ওয়ালেট ঠিকানাটি জানি? এফএমজেডে, আপনিexchange.IO("address")পকেট ঠিকানা পেতে ফাংশন কনফিগার করা ব্যক্তিগত কী অনুরূপ।

এই অধ্যায়ে নিম্নলিখিত বিষয়বস্তু Goerli testnet পরিবেশ ব্যবহার করে, তাই আমি যে নোড ব্যবহার করছি তা হলঃhttps://goerli.infura.io/v3/*******, এবং ইনফুরা প্রতিটি নিবন্ধিত ব্যবহারকারীর জন্য বিভিন্ন নোড ঠিকানা বরাদ্দ করে।*******নির্দিষ্ট বিষয়বস্তু লুকিয়ে রাখে।

function main() {
    let walletAddress = exchange.IO("address")
    Log("Testnet goerli wallet address:", walletAddress)
}

আপনার মানিব্যাগের ঠিকানা জানার পর, আপনি ইথেরিয়াম এর RPC পদ্ধতি ব্যবহার করতে পারেনeth_getTransactionCountইথেরিয়ামে, এই গণনা খুবই সাধারণ, এবং এটি আসলেnonceএকটি প্যারামিটার যা স্থানান্তর অপারেশন চলাকালীন পাস করা দরকার। ইথেরিয়ামে, ননস একটি অনন্য সংখ্যা যা প্রতিটি লেনদেনের অনন্যতা নিশ্চিত করতে ব্যবহৃত হয়। এটি একটি ক্রমবর্ধমান সংখ্যা, এবং এটি প্রতিটি নতুন লেনদেন পাঠানোর সময় স্বয়ংক্রিয়ভাবে বৃদ্ধি পাবে। অতএব, যখন আপনি একটি স্মার্ট চুক্তিতে একটি লেনদেন প্রেরণ করেন, তখন আপনাকে লেনদেনটি অনন্য এবং সঠিক ক্রমে রয়েছে তা নিশ্চিত করার জন্য একটি ননস সরবরাহ করতে হবে। আমরা কিছু উপকরণ এবং নথিতে এই তথ্যটি খুঁজে পেতে পারিঃ

https://goethereumbook.org/en/

img

এখানে,PendingNonceAtইথেরিয়াম লাইব্রেরিতে Go ভাষার ফাংশন আসলে কল হচ্ছেeth_getTransactionCountপদ্ধতি. পূর্ববর্তী কোর্সে, আমরা কিভাবে RPC পদ্ধতি কল করতে শিখেছি. এখানে আমরা ব্যবহারexchange.IO("api", "eth", ...)আবার কাজ করে।

function toAmount(s, decimals) {
    return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}

function main() {
    let walletAddress = exchange.IO("address")
    Log("Testnet goerli wallet address:", walletAddress)

    /**
    * eth_getTransactionCount
    * @param address - string - The address from which the transaction count to be checked.
    * @param blockNumber - string - The block number as a string in hexadecimal format or tags.
    * @returns The integer of the number of transactions sent from an address encoded as hexadecimal.
    */
    let nonce: string = exchange.IO("api", "eth", "eth_getTransactionCount", walletAddress, "pending")
    Log("wallet address:", walletAddress, "current nonce:", nonce, ", convert to decimal:", toAmount(nonce, 0))
}

স্থানান্তর অপারেশন ব্যাখ্যা করার আগে, আসুন সংক্ষেপে কিছু ধারণা বুঝতে পারি। ইথেরিয়ামে স্থানান্তর করার সময়, একটি নির্দিষ্ট পরিমাণ ইটিএইচ টোকেন ব্যবহার করা হবে (গ্যাস ফি হিসাবে) । গ্যাস ফি দুটি পরামিতি দ্বারা নির্ধারিত হয়ঃ

  • গ্যাস মূল্য

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

  • গ্যাস লিমিট

    স্ট্যান্ডার্ড ইথার ট্রান্সফারের গ্যাসের সীমা ২১,০০০ ইউনিট।

এর ধারণাগুলি বোঝার পরnonce, gasPrice, এবংgasLimit, আপনি ট্রান্সফার পরীক্ষা করতে পারেন। FMZ একটি খুব সহজ এবং ব্যবহার করা সহজ ট্রান্সফার ফাংশন প্রদান করে।

exchange.IO("api", "eth", "send", toAddress, toAmount)

যখন এটি স্থানান্তরের জন্য ব্যবহৃত হয়, তৃতীয় পরামিতিexchange.IOপ্রেরণ হিসাবে স্থির করা হয়,toAddressপ্যারামিটার হল স্থানান্তরের সময় ETH গ্রহণকারী ঠিকানা, এবংtoAmountহল ETH-এর পরিমাণ যা স্থানান্তরিত হয়েছে।

পরামিতিnonce, gasPrice, এবংgasLimitসবাই FMZ এ স্বয়ংক্রিয়ভাবে প্রাপ্ত সিস্টেমের ডিফল্ট মান ব্যবহার করতে পারে। এগুলিও নির্দিষ্ট করা যেতে পারেঃ

exchange.IO("api", "eth", "send", toAddress, toAmount, {gasPrice: 5000000000, gasLimit: 21000, nonce: 100})

এরপর, আমরা একটি নির্দিষ্ট পরিমাণ ইটিএইচ ট্রান্সফার করব গোরলি টেস্ট নেটওয়ার্কের একটি নির্দিষ্ট ঠিকানায়ঃ

function toInnerAmount(s, decimals) {
    return (BigDecimal(s)*BigDecimal(Math.pow(10, decimals))).toFixed(0)
}

function main() {
    let walletAddress = exchange.IO("address")
    Log("Testnet goerli wallet address:", walletAddress)

    let ret = exchange.IO("api", "eth", "send", "0x4D75a08E870674E68cAE611f329A27f446A66813", toInnerAmount(0.01, 18))
    return ret // return Transaction Hash : 0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e
}

কারণ ইথেরিয়াম ট্রান্সফার পরিমাণের ইউনিট হলwei, একটি কাস্টম ফাংশনtoInnerAmountমান প্রক্রিয়া করার জন্য ব্যবহার করা প্রয়োজনwei units.

অনুসন্ধান লেনদেন হ্যাশঃ0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734eউপরhttps://etherscan.io/.

img

আপনি কোড লিখতে পারেন কোয়েরি ট্রান্সফার হ্যাশ0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e, ব্যবহার করেeth_getTransactionReceiptপ্রশ্নের জন্য পদ্ধতি।

function main() {
    let transHash = "0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e"
    let info = exchange.IO("api", "eth", "eth_getTransactionReceipt", transHash)
    return info
}

অনুসন্ধানের ফলাফলঃ

{
	"cumulativeGasUsed": "0x200850",
	"effectiveGasPrice": "0x1748774421",
	"transactionHash": "0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e",
	"type": "0x0",
	"blockHash": "0x6bdde8b0f0453ecd24eecf7c634d65306f05511e0e8f09f9ed3f59eee2d06ac7",
	"contractAddress": null,
	"blockNumber": "0x868a50",
	"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
	"gasUsed": "0x5208",
	"to": "0x4d75a08e870674e68cae611f329a27f446a66813",
	"status": "0x1",
	"transactionIndex": "0x23",
	"from": "0x6b3f11d807809b0b1e5e3243df04a280d9f94bf4",
	"logs": []
}

প্রতিটি ক্ষেত্রের সাথে সম্পর্কিত বর্ণনাঃ

blockHash - The hash value of the block where the transaction is located.
blockNumber - The block number of the block where the transaction is located, encoded in hexadecimal.
contractAddress - If it's a contract creation, the address of the contract; otherwise null.
cumulativeGasUsed - The total gas used when executing this transaction in the block.
effectiveGasPrice - Total base fee plus tip per unit of gas.
from - Sender's address.
gasUsed - Gas used by this specific transaction.
logs - Array of log objects generated by this transaction.
  address - Address that generated this log.
  topics - Data array with 0 to 4 indexed log parameters, each with 32 bytes. In Solidity, first topic is event signature hash (e.g., Deposit(address,bytes32,uint256)), unless you declare an event using anonymous specifier.
  data - Non-indexed parameters for logs with length of 32 bytes.
  blockNumber - The block number of the block where this log is located.
  transactionHash - Transaction hash at time when log was created. Null if pending state.
  transactionIndex - Index position during creation. Null if pending state.
  blockHash - The hash value for containing block.
  logIndex - Hexadecimal-encoded integer index position within containing block. Null if pending state.
  removed - True if deleted due to chain reorganization; false for valid logs.
logsBloom - Bloom filter for retrieving related logs.
status - Hexadecimal-encoded value either being '1' (success) or '0' (failure).
to - Receiving party's address; null for contract creation transactions.
transactionHash - The hash value associated with given transaction.
transactionIndex - Hexadecimal-encoded index position within its respective containing-block.
type - Type value.

ইথেরিয়াম স্মার্ট কন্ট্রাক্ট কল করুন

কন্ট্রাক্ট তথ্য পড়া অধ্যায়ের মধ্যে, আমরা ইথেরিয়ামে প্রয়োগ করা ENS চুক্তির পদ্ধতিটি ভিটালিক বুটারিন এর ওয়ালেট ঠিকানা পেতে কল করার জন্য একটি সম্পূর্ণ উদাহরণ ব্যবহার করেছি। এই পদ্ধতিগুলিReadপদ্ধতি, এবং এই পদ্ধতি কল করার প্রয়োজন হয় নাgas(স্মরণ করুন আমরা আগে গ্যাস সম্পর্কে কি কথা বলেন? এই অধ্যায়ে, আমরা কিছু কলWriteইথেরিয়ামে স্মার্ট কন্ট্রাক্টের পদ্ধতি এবং এর জন্য অর্থ প্রদানgas. এই অপারেশনগুলি পুরো নেটওয়ার্কের প্রতিটি নোড এবং মাইনার দ্বারা যাচাই করা হবে এবং ব্লকচেইন অবস্থা পরিবর্তন করবে।

ERC20

ERC20 চুক্তি (ERC20 টোকেন চুক্তি) এর জন্য, FMZ প্ল্যাটফর্মটি ERC20 চুক্তি ABI এর ABI কে সরাসরি সিস্টেমে নির্মিত একটি সাধারণ ABI হিসাবে তালিকাভুক্ত করে, ABI নিবন্ধনের ধাপটি বাদ দেয়। আমরা ENS চুক্তি পদ্ধতিগুলি কল করার আগে ENS চুক্তিগুলি ABI নিবন্ধন করার সময় পূর্ববর্তী টিউটোরিয়ালগুলিতে ABI সম্পর্কেও শিখেছি।

এবিআই ভালভাবে বোঝার জন্য, আপনি এটি ব্যবহার করার আগে এটি পরীক্ষা করতে পারেন। এখানে ERC20 চুক্তির জন্য এবিআই রয়েছেঃ

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"guy","type":"address"},{"name":"wad","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"src","type":"address"},{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"dst","type":"address"},{"name":"wad","type":"uint256"}],"name":"tran

সম্পর্কিত

আরো