4
ফোকাস
1271
অনুসারী

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

তৈরি: 2023-03-28 13:32:48, আপডেট করা হয়েছে: 2024-11-11 22:28:24
comments   0
hits   3837

[TOC]

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

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

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


FMZ দিয়ে শুরু করা

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

1. FMZ পরিমাণগত ট্রেডিং প্ল্যাটফর্ম কাঠামো

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

2. কাস্টোডিয়ান

আপনি যদি একটি প্রোগ্রামের উদাহরণ চালাতে চান, তাহলে আপনাকে অবশ্যই একজন কাস্টোডিয়ান স্থাপন করতে হবে। আপনি আপনার পক্ষে FMZ দ্বারা ভাড়া করা সার্ভারটিকে স্বয়ংক্রিয়ভাবে স্থাপন করতে FMZ-এ দেওয়া “এক-ক্লিক স্থাপনা হোস্ট” ব্যবহার করতে পারেন।

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

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

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

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

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

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

4. বিনিময়

FMZ-এ, CEX এক্সচেঞ্জের জন্য “এক্সচেঞ্জ” একটি সাধারণ ধারণা, এটি একটি নির্দিষ্ট এক্সচেঞ্জ অ্যাকাউন্ট কনফিগারেশনকে নির্দেশ করে। ওয়েব3-এর জন্য, এই লেনদেনটি নোড ঠিকানা এবং ব্যক্তিগত কী কনফিগারেশন সহ একটি কনফিগারেশন তথ্যকে বোঝায়।

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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


FMZ ব্যবহার করে Ethereum এর সাথে ইন্টারঅ্যাক্ট করা

কাস্টোডিয়ান প্রোগ্রাম স্থাপন এবং এক্সচেঞ্জ অবজেক্ট কনফিগার করার পরে, আপনি পরীক্ষা করতে FMZ.COM এর “ডিবাগিং টুল” ব্যবহার করতে পারেন। Ethereum RPC পদ্ধতিতে কল করতে এবং Ethereum এর সাথে ইন্টারঅ্যাক্ট করতে, এই অধ্যায়ে তালিকাভুক্ত বেশ কয়েকটি RPC পদ্ধতি ছাড়াও, আপনি অন্যান্য RPC পদ্ধতির জন্য তথ্য অনুসন্ধান করতে পারেন, যেমনhttps://www.quicknode.com/docs

আসুন কয়েকটি সাধারণ উদাহরণ দেওয়া যাক এবং প্রাথমিক থেকে শুরু করি। বিভিন্ন ভাষা এবং সরঞ্জামগুলির জন্য ওয়েব 3 অ্যাক্সেস করার উপায় রয়েছে, যেমন চিত্রে দেখানো হয়েছে:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

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

eth_getBalance

ইথেরিয়ামেরeth_getBalanceএই পদ্ধতিটি Ethereum-এ একটি ঠিকানার ETH ব্যালেন্স জিজ্ঞাসা করতে ব্যবহৃত হয় এই পদ্ধতিটি 2 প্যারামিটারে পাস করা প্রয়োজন।

  • ঠিকানা জিজ্ঞাসা করা হবে.
  • লেবেল, সাধারণত “সর্বশেষ” ব্যবহার করুন।

আসুন Ethereum এর প্রতিষ্ঠাতা পরীক্ষা করা যাকV神ETH ওয়ালেট ঠিকানা, পরিচিত ঠিকানা হল:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

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

কাস্টোডিয়ান স্থাপন করা হয়েছে (চিত্রে: linux/amd64 …) এবং এক্সচেঞ্জ অবজেক্টটি কনফিগার করা হয়েছে (চিত্রে: Web3 পরীক্ষা)। ডিবাগিং টুলে কোডটি পরীক্ষা করুন:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

এই কোডটি চালানোর জন্য “Execute” বোতামটি ক্লিক করুন এবং ফলাফলগুলি প্রদর্শন করুন:

ethBalance: 0x117296558f185bbc4c6

Logফাংশন দ্বারা মুদ্রিতethBalanceপরিবর্তনশীল মান হল:0x117296558f185bbc4c6, একটি স্ট্রিং টাইপ। হ্যাঁহেক্সাডেসিমেল মানের ETH ব্যালেন্স,দ্বারাweiইউনিট হিসাবে,1e18 weiহল 1ETH. তাই এটি এখনও একটি পঠনযোগ্য দশমিক ETH ব্যালেন্সে রূপান্তরিত করা প্রয়োজন।

উইলethBalanceপঠনযোগ্য ডেটাতে রূপান্তর করুন:

function main() {
    let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
    Log("ethBalance:", ethBalance)
    
    // 将ethBalance转换为可读的数据
    let vitalikEthBalance = parseInt(ethBalance.substring(2), 16) / 1e18
    Log("vitalikEthBalance:", vitalikEthBalance)
}

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

উপরেhttps://etherscan.io/প্রশ্ন:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

যাইহোক, এই প্রক্রিয়াকরণটি ভাষার নির্ভুলতার কারণে পক্ষপাতদুষ্ট হবে, তাই FMZ প্ল্যাটফর্মে ডেটা প্রক্রিয়াকরণের জন্য দুটি অন্তর্নির্মিত ফাংশন রয়েছে:

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

আবার কোড সামঞ্জস্য করুন:

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

    // ETH的精度单位为1e18
    let ethDecimal = 18
    Log("vitalikEthBalance:", Number((BigDecimal(BigInt(ethBalance)) / BigDecimal(Math.pow(10, ethDecimal))).toString()))
}

vitalikEthBalance: 5149.6244846875215

eth_chainId

eth_chainIdএবংnet_versionব্যবহারগুলি একই রকম, তাই আমরা একসাথে পরীক্ষা করেছি। উভয় ফাংশনই বর্তমান RPC নোড যে ব্লকচেইনের সাথে সংযুক্ত তার ID ফেরত দেয়। পার্থক্য হলnet_versionদশমিক আইডি প্রদান করে,eth_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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

কনফিগার করা Ethereum testnet ব্যবহার করুন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, " ,转换:", parseInt(ethChainId.substring(2), 16))
}

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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, " ,转换:", toAmount(gasPrice, 0))
}

এখানে আমরা একটি হেক্সাডেসিমেল স্ট্রিংকে একটি ফাংশন হিসাবে একটি পাঠযোগ্য মানের মধ্যে রূপান্তর করার অপারেশন লিখি:toAmount. আরেকটি বিষয় লক্ষণীয় যে গ্যাসপ্রাইসের একক হলwei, তাই আনুষ্ঠানিক পরামিতিdecimalsসংশ্লিষ্ট প্রকৃত পরামিতির জন্য শুধু মান 0 পাস করুন।

eth_blockNumbe

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

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))
}

ডিবাগিং টুলে চালান:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

https://etherscan.io/প্রশ্ন:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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)
    
    // 由于Log输出的内容过多,会自动截断,所以遍历返回的区块信息各个字段,逐个打印
    for (let key in blockMsg) {
        Log("key:", key, ", val:", blockMsg[key])
    }
}

“ডিবাগিং টুলস” এ কার্যকর করা নিম্নলিখিত তথ্য পেতে পারে:

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন


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

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

এই অধ্যায়ে নিম্নলিখিত বিষয়বস্তু Ethereum মেইননেট পরিবেশ ব্যবহার করে, উপর ভিত্তি করেENSনথিটি দেখায় যে এটি Ethereum ডোমেন নামের উপর ক্যোয়ারী সম্পাদন করা প্রয়োজন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এই ফাংশনটি FMZ প্ল্যাটফর্মের API ফাংশন, যা বিশেষভাবে FMZ প্ল্যাটফর্মে এনকোডিং ক্রিয়াকলাপ সম্পাদনের জন্য ব্যবহৃত হয়। এই ফাংশনটি একাধিক এনকোডিং পদ্ধতি এবং একাধিক হ্যাশ অ্যালগরিদম সমর্থন করে।

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

ENS ডকুমেন্টেশন অনুসারে, ব্যবহার করুনsha3.keccak256অ্যালগরিদম ডেটা প্রক্রিয়া করে।

কলnameHashফাংশন, উদাহরণস্বরূপ:Log(nameHash("vitalik.eth")), আপনি পেতে পারেন:ee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835, “0x” এর সাথে প্রিফিক্স করা দরকার।0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835একটি ENS স্মার্ট চুক্তি হিসাবেresolverপদ্ধতি পরামিতি।

let ensNode = "0x" + nameHash("vitalik.eth")    // 准备好调用resolver方法的参数ensNode

ENS নথি অনুসারে, ENS স্মার্ট চুক্তির আবেদনের চুক্তির ঠিকানা হল:0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e. স্মার্ট চুক্তি কল যখনresolverপদ্ধতির আগে, আমাদের চুক্তিও প্রস্তুত করতে হবেABI

ABI নিবন্ধন করুন

এখানে অধ্যয়ন করার পরে, আপনি সাহায্য করতে পারবেন না কিন্তু জিজ্ঞাসা করুন, একটি স্মার্ট চুক্তি কি?ABIপশমী কাপড়?

ABI,即应用程序二进制接口(Application Binary Interface),是智能合约与外部世界进行通信的接口标准。
智能合约的 ABI 定义了合约的函数接口、参数类型、返回值等信息,以及调用合约的方式和参数传递方式等规范。

智能合约的 ABI 通常以 JSON 格式存储,包含以下信息:

合约的函数接口:函数名、参数列表、返回值等信息。
函数参数类型:如 uint256、bool、string 等。
函数的输入参数和输出参数的编码方式:智能合约使用一种称为 Solidity ABI 的编码方式来编码函数的输入参数和输出参数,
以便与以太坊网络进行交互。
在以太坊网络中,使用智能合约的 ABI 来调用合约的函数。当需要调用合约函数时,需要提供函数名和函数参数,以及将函数参数按照 ABI 编码方式编码后的字节码。
以太坊节点会将这些信息打包成一笔交易,并将交易发送到以太坊网络中执行。

智能合约的 ABI 在 Solidity 语言中可以通过 interface 关键字来定义。以太坊开发工具如 Remix IDE、Truffle 等也提供了 ABI 编辑和生成工具,
使得开发者可以方便地创建和使用智能合约的 ABI。

ENS এর ABI বের করুনresolverপদ্ধতির অংশ, আপনি সম্পূর্ণ ABI ব্যবহার করতে পারেন, যা পাওয়া যাবেhttps://etherscan.io/চুক্তির ABI-কে অনলাইনে জিজ্ঞাসা করুন, অথবা অন্যান্য উপায়ে ABI প্রাপ্ত করুন (উদাহরণস্বরূপ: সম্পর্কিত প্রকল্পের নথি)।

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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 是在以太坊主网上部署的ENS智能合约的地址

কিভাবে একটি স্মার্ট চুক্তি কল

এর পরে, আপনি ENS স্মার্ট চুক্তি কল করতে পারেনresolverপদ্ধতি, পদ্ধতি ফিরে আসেENS: Public Resolverচুক্তির ঠিকানা।

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

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

ব্যবহারENS: Public Resolverচুক্তিভিত্তিকaddrভিটালিকের ওয়ালেট ঠিকানা পাওয়ার পদ্ধতি। ফোন করতেENS: Public Resolverচুক্তিটি এখনও প্রথমে ABI-এর সাথে নিবন্ধিত হতে হবে। এই স্মার্ট চুক্তির 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)

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

শেষ কলENS: Public Resolverচুক্তিভিত্তিকaddrপদ্ধতি, পরামিতি এখনও আছেensNode

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

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

FMZ ব্যবহার করে Ethereum-ভিত্তিক ওয়েব3 বিকাশের সাথে সহজেই শুরু করুন

vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045

ENS কল করার জন্য সম্পূর্ণ কোড

”`javascript 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() { // 计算名称 let ensNode = “0x” + nameHash(“vitalik.eth”)

// 注册ENS合约
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)

// 注册ENS Public Resolver合约
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"