[TOC]
EtherEaseWithFMZ টিউটোরিয়াল
সহজেই এফএমজেড ব্যবহার করে ইথেরিয়ামের উপর ভিত্তি করে ওয়েব 3 বিকাশ শুরু করুন
ইথেরিয়াম হ'ল ব্লকচেইন প্রযুক্তির উপর ভিত্তি করে একটি স্মার্ট কন্ট্রাক্ট প্ল্যাটফর্ম, যা স্মার্ট কন্ট্রাক্টগুলি লিখতে এবং স্থাপন করার জন্য একটি বিকেন্দ্রীভূত উপায় সরবরাহ করে। স্মার্ট কন্ট্রাক্টগুলি একটি বিশেষ ধরণের কম্পিউটার প্রোগ্রাম যা স্বয়ংক্রিয়ভাবে ব্লকচেইনে কার্যকর করতে পারে এবং তৃতীয় পক্ষের উপর নির্ভর করার প্রয়োজন ছাড়াই বিভিন্ন ব্যবসায়িক যুক্তি বাস্তবায়ন করতে পারে।
FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম (FMZ.COM) একটি সহজেই ব্যবহারযোগ্য এপিআই সরবরাহ করে, যা ডেভেলপারদের ইথেরিয়াম ব্লকচেইন এবং এর বাস্তুতন্ত্রের সাথে আরও সহজেই ইন্টারঅ্যাক্ট করার অনুমতি দেয়। এটি বিকেন্দ্রীভূত এক্সচেঞ্জ (ডিইএক্স) অ্যাক্সেস অর্জন করে, চেইনের ডেটা অর্জন করে, লেনদেন পাঠায় এবং অন্যান্য ফাংশন।
এই টিউটোরিয়ালে, উদাহরণগুলি লিখিত হয়JavaScript
ভাষা, পরীক্ষার পরিবেশ উভয় ব্যবহার করেইথেরিয়াম মেইননেটএবংগেরলি টেস্ট নেট. এবং আপনি এফএমজেড প্ল্যাটফর্মের এপিআই ডকুমেন্টেশনে টিউটোরিয়ালে ব্যবহৃত এপিআই ইন্টারফেস এবং সম্পর্কিত বিবরণ, কোড উদাহরণগুলিও দেখতে পারেন।
FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম ব্যবহার করতে শেখার আগে, আমাদের কয়েকটি মৌলিক ধারণার সাথে পরিচিত হওয়া দরকারঃ
এফএমজেড কোয়ান্ট ট্রেডিং প্ল্যাটফর্মের অফিসিয়াল ওয়েবসাইটে নিবন্ধন ও লগ ইন করার পর (https://www.fmz.com), আপনি প্ল্যাটফর্মের বিভিন্ন ফাংশন ব্যবহার করতে পারেন। এফএমজেড ওয়েবসাইটটি পুরো সিস্টেমের পরিচালনা শেষ, এবং ব্যবহারকারী-লিখিত প্রোগ্রামগুলি আসলে ডকারের উপর চালিত হয়। ডকার সফ্টওয়্যার প্রোগ্রামটি সার্ভার, কম্পিউটার ইত্যাদির মতো বিভিন্ন ডিভাইসে স্থাপন করা যেতে পারে। যখন কোনও ব্যবহারকারী একটি প্রোগ্রাম লিখে এবং এফএমজেড ওয়েবসাইটে একটি চলমান উদাহরণ তৈরি করে, তখন এফএমজেড প্ল্যাটফর্ম ডকারের সাথে যোগাযোগ করবে এবং এতে একটি প্রোগ্রাম উদাহরণ শুরু করবে।
আপনি যদি কোনও প্রোগ্রাম ইনস্ট্যান্স চালাতে চান তবে আপনাকে একটি ডকার স্থাপন করতে হবে। ডকারের স্থাপনও খুব সহজ, এবং প্ল্যাটফর্মে স্থাপনার টিউটোরিয়াল রয়েছে। আপনি এফএমজেডের পক্ষে ভাড়া নেওয়া সার্ভারগুলিতে স্বয়ংক্রিয়ভাবে স্থাপনের জন্য এফএমজেড দ্বারা সরবরাহিত
আপনি সার্ভার, ব্যক্তিগত কম্পিউটার এবং অন্যান্য ডিভাইসগুলিতে ডকার প্রোগ্রামটি স্থাপন এবং চালাতে পারেন, যতক্ষণ নেটওয়ার্কটি স্বাভাবিক থাকে (একটি নির্দিষ্ট এক্সচেঞ্জ ইন্টারফেস, নোড ঠিকানা ইত্যাদির মতো সংশ্লিষ্ট লক্ষ্যে অ্যাক্সেস করতে সক্ষম হওয়া দরকার) । স্থাপনের প্রধান পদক্ষেপগুলি হলঃ
robot
. ডকার যোগাযোগ ঠিকানা কনফিগার করুন, যা প্রতিটি FMZ অ্যাকাউন্টের জন্য অনন্য, FMZ এ লগ ইন করার পরে, আপনি এ আপনার নিজের ঠিকানা দেখতে পারেনhttps://www.fmz.com/m/add-node
পৃষ্ঠা (যেমন,./robot -s node.fmz.com/xxxxx
ঠিকানা এই স্ট্রিং, যেখানে বিষয়বস্তু এxxxxx
অবস্থান প্রতিটি এফএমজেড অ্যাকাউন্টের জন্য আলাদা) । অবশেষে, আপনাকে আপনার এফএমজেড অ্যাকাউন্টের পাসওয়ার্ড প্রবেশ করতে হবে। এই সেটিংস কনফিগার করার পরে, ডকার প্রোগ্রামটি চালান।FMZ প্ল্যাটফর্মের
এফএমজেড প্ল্যাটফর্মে একটি ডকার পৃষ্ঠা যোগ করুন, ঠিকানাঃhttps://www.fmz.com/m/add-node
FMZ কোয়ান্ট ট্রেডিং প্ল্যাটফর্ম একটি বিনামূল্যে ডিবাগিং টুল প্রদান করে যা সমর্থন করেJavaScript
, TypeScript
, এবং পাতাটি হলঃhttps://www.fmz.com/m/debug. কারণ চালানোর জন্য ইনস্ট্যান্স তৈরি করার জন্য বিল দেওয়া হয়। প্রাথমিক শেখার সময়কালে, আপনি এই ডিবাগিং সরঞ্জামটি পরীক্ষা এবং শেখার জন্য ব্যবহার করতে পারেন। সর্বোচ্চ চলমান সময় সীমা 3 মিনিট ব্যতীত, ডিবাগিং সরঞ্জামটি ব্যবহার এবং চালানোর জন্য একটি ইনস্ট্যান্স তৈরির মধ্যে কোনও পার্থক্য নেই।
ব্যবহারের সময়TypeScript
ভাষা, আপনি লিখতে হবে// @ts-check
কোডের প্রথম লাইনে পরিবর্তন করতে হবেTypeScript
মোড; যদি না স্যুইচ করা হয়, ডিফল্টJavaScript
language.
এফএমজেডে,
এফএমজেড প্ল্যাটফর্মের লগ ইন অবস্থায়,https://www.fmz.com/m/add-platform
পৃষ্ঠা, আপনি বিনিময় তথ্য কনফিগার করতে পারেন, যেখানে বিনিময় একটি সাধারণ ধারণা।
নির্বাচন করুনWeb3
, RPC নোড ঠিকানা কনফিগার করুন, ব্যক্তিগত কী কনফিগার করুন, আপনি নীচের ডান কোণে ক্লিক করতে পারেন
নোডগুলি স্ব-নির্মিত নোড বা নোড পরিষেবা সরবরাহকারীদের দ্বারা সরবরাহিত নোড হতে পারে। অনেক নোড পরিষেবা সরবরাহকারী রয়েছে, যেমনঃইনফুরা. রেজিস্ট্রেশনের পর, আপনি আপনার নিজের অ্যাকাউন্টের নোড ঠিকানা দেখতে পারেন। উভয় মেইননেট এবং টেস্টনেট পাওয়া যায়, যা বেশ সুবিধাজনক।Rpc Address
উপরের ছবিতে প্রদর্শিত নিয়ন্ত্রণ। কনফিগার করা এক্সচেঞ্জ অবজেক্টগুলির মধ্যে পার্থক্য করার জন্য লেবেলটি নিজের দ্বারা নামকরণ করা যেতে পারে।
ছবিতে,https://mainnet.infura.io/v3/xxxxxxxxxxxxx
হল ইনফুরা ইটিএইচ মেইননেটের ব্যক্তিগত আরপিসি নোডের ঠিকানা।
ডকার প্রোগ্রাম স্থাপন এবং বিনিময় বস্তু কনফিগার করার পরে, আপনি ব্যবহার করতে পারেনFMZ.COM
আমরা কিছু সহজ উদাহরণ তালিকাভুক্ত, মৌলিক থেকে শুরু করে. বিভিন্ন ভাষা এবং সরঞ্জাম জন্য, বিভিন্ন উপায়ে web3 অ্যাক্সেস আছে, ছবিতে দেখানো হয়ঃ
এফএমজেডে, আরপিসি পদ্ধতি কলগুলিও ক্যাপসুল করা হয় এবং এই ফাংশনগুলি এফএমজেড এপিআই ফাংশনে ক্যাপসুল করা হয়exchange.IO
. কল করার পদ্ধতি হলexchange.IO("api", "eth", ...)
. প্রথম প্যারামিটার স্থির করা হয়"api"
, দ্বিতীয় পরামিতি স্থির করা হয়"eth"
, এবং অন্যান্য পরামিতি নির্দিষ্ট RPC পদ্ধতি কল করা হয় উপর নির্ভর করে।
আউটপুট তথ্যের জন্য, আমরাLog
এফএমজেড প্ল্যাটফর্মের কার্যকারিতাLog
ফাংশন একাধিক পরামিতি গ্রহণ করতে পারে এবং তারপরে এগুলিকে এফএমজেড প্ল্যাটফর্মের
দ্যeth_getBalance
ইথেরিয়ামের পদ্ধতিটি ইথেরিয়ামের একটি ঠিকানার ইথেরিয়ামের ভারসাম্য অনুসন্ধান করতে ব্যবহৃত হয় এবং এই পদ্ধতিতে দুটি পরামিতি প্রয়োজন।
Vitalik Buterin
এর ইটিএইচ ওয়ালেট ঠিকানা, পরিচিত ঠিকানা হল:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
.function main() {
let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
Log("ethBalance:", ethBalance)
}
ইতিমধ্যে ডকার (ছবিতেঃ লিনাক্স / amd64...) স্থাপন এবং বিনিময় বস্তু কনফিগার (ছবিতেঃ ওয়েব 3 পরীক্ষা), ডিবাগিং টুল মধ্যে পরীক্ষা কোডঃ
কোড চালানোর জন্য
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/
:
তবে ভাষাটির সঠিকতার সমস্যার কারণে, এই পদ্ধতিতে বিচ্যুতি থাকবে। অতএব, এফএমজেড প্ল্যাটফর্মে ডেটা প্রসেসিংয়ের জন্য দুটি অন্তর্নির্মিত ফাংশন রয়েছেঃ
কোডটি আবার সামঞ্জস্য করুনঃ
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
এবং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
বর্তমান অনুসন্ধান করার পদ্ধতি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
ব্লকের উচ্চতা অনুসন্ধান করতে ব্যবহৃত হয়।
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))
}
ডিবাগিং টুল চালানঃ
অনুসন্ধান চালিয়ে যানhttps://etherscan.io/
:
ব্লক তথ্য অনুসন্ধান করুন।
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])
}
}
অনেক স্মার্ট কন্ট্রাক্ট অ্যাপ্লিকেশন ইথেরিয়ামে চলে, এবং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
, এবং আপনাকে 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.
বের করুনresolver
ENShttps://etherscan.io/
অথবা অন্যান্য চ্যানেলের মাধ্যমে (যেমন, প্রাসঙ্গিক প্রকল্পের ডকুমেন্টেশন) এবিআই পেতে পারেন।
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
পরবর্তী, আপনি কল করতে পারেনresolver
ENS স্মার্ট কন্ট্রাক্টের পদ্ধতি, যাENS: Public Resolver
contract.
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)
অবশেষে, কল করুনENS: Public Resolver
চুক্তিaddr
পদ্ধতি, প্যারামিটার এখনও হচ্ছেensNode
.
let vitalikAddress = exchange.IO("api", resolverAddress, "addr", ensNode)
Log("vitalikAddress:", vitalikAddress)
লগ ফাংশন আউটপুটঃ
vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
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
একটি প্যারামিটার যা স্থানান্তর অপারেশন চলাকালীন পাস করা দরকার। ইথেরিয়ামে, ননস একটি অনন্য সংখ্যা যা প্রতিটি লেনদেনের অনন্যতা নিশ্চিত করতে ব্যবহৃত হয়। এটি একটি ক্রমবর্ধমান সংখ্যা, এবং এটি প্রতিটি নতুন লেনদেন পাঠানোর সময় স্বয়ংক্রিয়ভাবে বৃদ্ধি পাবে। অতএব, যখন আপনি একটি স্মার্ট চুক্তিতে একটি লেনদেন প্রেরণ করেন, তখন আপনাকে লেনদেনটি অনন্য এবং সঠিক ক্রমে রয়েছে তা নিশ্চিত করার জন্য একটি ননস সরবরাহ করতে হবে। আমরা কিছু উপকরণ এবং নথিতে এই তথ্যটি খুঁজে পেতে পারিঃ
এখানে,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/
.
আপনি কোড লিখতে পারেন কোয়েরি ট্রান্সফার হ্যাশ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.
Read
পদ্ধতি, এবং এই পদ্ধতি কল করার প্রয়োজন হয় নাgas
(স্মরণ করুন আমরা আগে গ্যাস সম্পর্কে কি কথা বলেন? এই অধ্যায়ে, আমরা কিছু কলWrite
ইথেরিয়ামে স্মার্ট কন্ট্রাক্টের পদ্ধতি এবং এর জন্য অর্থ প্রদানgas
. এই অপারেশনগুলি পুরো নেটওয়ার্কের প্রতিটি নোড এবং মাইনার দ্বারা যাচাই করা হবে এবং ব্লকচেইন অবস্থা পরিবর্তন করবে।
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