[TOC]
EtherEaseWithFMZ ट्यूटोरियल
एफएमजेड का उपयोग करके आसानी से एथेरियम पर आधारित वेब 3 विकास के साथ आरंभ करें
एथेरियम ब्लॉकचेन तकनीक पर आधारित एक स्मार्ट कॉन्ट्रैक्ट प्लेटफॉर्म है, जो स्मार्ट कॉन्ट्रैक्ट लिखने और तैनात करने का एक विकेंद्रीकृत तरीका प्रदान करता है। स्मार्ट कॉन्ट्रैक्ट एक विशेष प्रकार का कंप्यूटर प्रोग्राम है जो स्वचालित रूप से ब्लॉकचेन पर निष्पादित हो सकता है और तीसरे पक्ष पर भरोसा करने की आवश्यकता के बिना विभिन्न व्यावसायिक तर्क को लागू कर सकता है।
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म (FMZ.COM) एक आसान-से-उपयोग एपीआई प्रदान करता है, जिससे डेवलपर्स एथेरियम ब्लॉकचेन और इसके पारिस्थितिकी तंत्र के साथ अधिक आसानी से बातचीत कर सकते हैं। यह विकेंद्रीकृत एक्सचेंजों (डीईएक्स) तक पहुंच प्राप्त करता है, ऑन-चेन डेटा प्राप्त करता है, लेनदेन भेजता है, और अन्य कार्य करता है।
इस ट्यूटोरियल में, उदाहरणों में लिखा गया हैJavaScript
भाषा, परीक्षण वातावरण दोनों का उपयोग करता हैएथेरियम मुख्य नेटवर्कऔरगोरली परीक्षण जाल. और आप भी एपीआई इंटरफेस और संबंधित विवरण देख सकते हैं, एफएमजेड प्लेटफार्म
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का उपयोग करने से पहले, हमें कुछ बुनियादी अवधारणाओं से परिचित होने की आवश्यकता हैः
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म की आधिकारिक वेबसाइट पर पंजीकरण और लॉग इन करने के बाद (https://www.fmz.com), आप मंच के विभिन्न कार्यों का उपयोग कर सकते हैं। एफएमजेड वेबसाइट पूरे सिस्टम का प्रबंधन अंत है, और उपयोगकर्ता द्वारा लिखे गए कार्यक्रम वास्तव में डॉकर पर चल रहे हैं। डॉकर सॉफ्टवेयर प्रोग्राम को विभिन्न उपकरणों पर तैनात किया जा सकता है, जैसे सर्वर, कंप्यूटर आदि। जब कोई उपयोगकर्ता एक प्रोग्राम लिखता है और एफएमजेड वेबसाइट पर एक चल रहे उदाहरण बनाता है, तो एफएमजेड प्लेटफ़ॉर्म डॉकर के साथ संवाद करेगा और उस पर एक प्रोग्राम उदाहरण शुरू करेगा।
यदि आप एक प्रोग्राम इंस्टेंस चलाना चाहते हैं, तो आपको एक डॉकर तैनात करना होगा। डॉकर की तैनाती भी बहुत सरल है, और मंच पर तैनाती ट्यूटोरियल हैं। आप FMZ की ओर से किराए पर लिए गए सर्वर पर स्वचालित रूप से तैनात करने के लिए FMZ द्वारा प्रदान किए गए
आप सर्वर, पर्सनल कंप्यूटर और अन्य उपकरणों पर डॉकर प्रोग्राम को तैनात और चला सकते हैं, जब तक कि नेटवर्क सामान्य है (समान लक्ष्य तक पहुंचने में सक्षम होने की आवश्यकता है, जैसे कि एक निश्चित एक्सचेंज इंटरफ़ेस, नोड पता, आदि) । तैनाती के मुख्य चरण हैंः
robot
. डॉकर संचार पते को कॉन्फ़िगर करें, जो प्रत्येक एफएमजेड खाते के लिए अद्वितीय है, एफएमजेड में लॉग इन करने के बाद, आप अपने स्वयं के पते को देख सकते हैंhttps://www.fmz.com/m/add-node
पृष्ठ (यानी,./robot -s node.fmz.com/xxxxx
पते की इस स्ट्रिंग, जहां सामग्री परxxxxx
स्थिति प्रत्येक FMZ खाते के लिए अलग है) अंत में, आपको अपने FMZ खाते का पासवर्ड दर्ज करने की आवश्यकता है. इन सेटिंग्स को कॉन्फ़िगर करने के बाद, डॉकर प्रोग्राम चलाएं.एफएमजेड प्लेटफार्म
एफएमजेड प्लेटफॉर्म पर एक डॉकर पेज जोड़ें, पताःhttps://www.fmz.com/m/add-node
एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म एक मुफ्त डिबगिंग टूल प्रदान करता है जो समर्थन करता हैJavaScript
, TypeScript
, और पृष्ठ हैःhttps://www.fmz.com/m/debug. चूंकि चलाने के लिए उदाहरण बनाने के लिए बिल लगाया जाता है. प्रारंभिक सीखने की अवधि के दौरान, आप परीक्षण और सीखने के लिए इस डिबगिंग टूल का उपयोग कर सकते हैं. 3 मिनट की अधिकतम चलने की समय सीमा को छोड़कर, डिबगिंग टूल का उपयोग करने और चलाने के लिए एक उदाहरण बनाने के बीच कोई अंतर नहीं है.
उपयोग करते समयTypeScript
भाषा, आपको लिखने की जरूरत है// @ts-check
कोड की पहली पंक्ति पर स्विच करने के लिएTypeScript
मोड; यदि स्विच नहीं किया जाता है, तो डिफ़ॉल्ट हैJavaScript
language.
FMZ पर,
एफएमजेड प्लेटफॉर्म के लॉग-इन राज्य में, परhttps://www.fmz.com/m/add-platform
पृष्ठ, आप विनिमय जानकारी विन्यस्त कर सकते हैं, जहां विनिमय एक सामान्य अवधारणा है।
चुनेंWeb3
, आरपीसी नोड पते को कॉन्फ़िगर करें, निजी कुंजी को कॉन्फ़िगर करें, आप सुरक्षा तंत्र देखने के लिए निचले दाएं कोने पर क्लिक कर सकते हैं
नोड्स स्वयं निर्मित नोड्स या नोड सेवा प्रदाताओं द्वारा प्रदान किए गए नोड्स हो सकते हैं। कई नोड सेवा प्रदाता हैं, जैसेःइन्फ्यूरा. पंजीकरण के बाद, आप अपने स्वयं के खाते के नोड पते को देख सकते हैं. दोनों मुख्यनेट और परीक्षणनेट उपलब्ध हैं, जो काफी सुविधाजनक है.Rpc Address
उपरोक्त चित्र में दिखाया गया नियंत्रण। विन्यस्त विनिमय वस्तुओं के बीच अंतर करने के लिए लेबल को स्वयं नामित किया जा सकता है।
तस्वीर में,https://mainnet.infura.io/v3/xxxxxxxxxxxxx
निजी Infura ETH मुख्य नेटवर्क RPC नोड पता है.
डॉकर प्रोग्राम को तैनात करने और विनिमय वस्तु को कॉन्फ़िगर करने के बाद, आप उपयोग कर सकते हैंFMZ.COM
हम कुछ सरल उदाहरण सूचीबद्ध करते हैं, मूल बातें से शुरू करते हुए। विभिन्न भाषाओं और उपकरणों के लिए, वेब 3 तक पहुंचने के तरीके हैं, जैसा कि चित्र में दिखाया गया हैः
एफएमजेड पर, आरपीसी विधि कॉल को भी कैप्सूल किया जाता है, और ये फ़ंक्शन एफएमजेड एपीआई फ़ंक्शन में कैप्सूल किए जाते हैंexchange.IO
. कॉल करने का तरीका हैexchange.IO("api", "eth", ...)
. पहला पैरामीटर तय है"api"
, दूसरा पैरामीटर तय किया जाता है"eth"
, और अन्य मापदंड विशिष्ट आरपीसी विधि पर निर्भर करते हैं जिसे बुलाया जा रहा है।
आउटपुट जानकारी के लिए, हम उपयोग करेंगेLog
एफएमजेड प्लेटफॉर्म का कार्य।Log
function कई पैरामीटर स्वीकार कर सकता है और फिर उन्हें FMZ प्लेटफॉर्म पर
..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
1 के बराबर है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()))
}
जीवनसाथी बैलेंसः 5149.6244846875215
eth_chainId
औरnet_version
इन दोनों कार्यों को ब्लॉकचेन की आईडी लौटाता है कि वर्तमान आरपीसी नोड से जुड़ा हुआ है, अंतर यह है कि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
कॉन्फ़िगर किए गए एथेरियम टेस्टनेट के साथ परीक्षण करें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)
, जिसका उपयोग एबीआई को पंजीकृत करने के लिए किया जाता है।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
इस स्मार्ट कॉन्ट्रैक्ट के लिए एबीआई जानकारी अभी भी प्राप्त की जा सकती है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 परीक्षण नेटवर्क वातावरण का उपयोग करता है, तो नोड मैं उपयोग कर रहा हूँ हैःhttps://goerli.infura.io/v3/*******
, और Infura प्रत्येक पंजीकृत उपयोगकर्ता के लिए अलग नोड पते असाइन करता है।*******
विशिष्ट सामग्री छिपाता है।
function main() {
let walletAddress = exchange.IO("address")
Log("Testnet goerli wallet address:", walletAddress)
}
अपने वॉलेट का पता जानने के बाद, आप Ethereumeth_getTransactionCount
वॉलेट पते के लेनदेन की गिनती पूछने के लिए. एथेरियम में, यह गिनती बहुत आम है, और यह वास्तव में हैnonce
एक पैरामीटर जिसे स्थानांतरण संचालन के दौरान पारित करने की आवश्यकता होती है। एथेरियम में, nonce एक अद्वितीय संख्या है जिसका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि प्रत्येक लेनदेन अद्वितीय है। यह एक बढ़ती संख्या है, और यह हर बार एक नया लेनदेन भेजे जाने पर स्वचालित रूप से बढ़ेगी। इसलिए, जब आप एक स्मार्ट अनुबंध में लेनदेन भेजते हैं, तो आपको यह सुनिश्चित करने के लिए एक nonce प्रदान करने की आवश्यकता होती है कि लेनदेन अद्वितीय है और सही क्रम में है। हम कुछ सामग्रियों और दस्तावेजों में यह जानकारी पा सकते हैंः
यहाँ,PendingNonceAt
Go भाषा के एथेरियम पुस्तकालय में समारोह वास्तव में कॉल कर रहा हैeth_getTransactionCount
विधि. पिछले पाठ्यक्रमों में, हम भी सीखा है कि कैसे आरपीसी विधियों को कॉल करने के लिए. यहाँ हम का उपयोग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
विधि हम पहले सीखा है, जो औसत गैस की कीमत प्राप्त कर सकते हैं।
गैस सीमा
एक मानक ईथर हस्तांतरण में 21,000 इकाइयों की गैस सीमा होती है।
के अवधारणाओं को समझने के बादnonce
, gasPrice
, औरgasLimit
, आप हस्तांतरण का परीक्षण कर सकते हैं. एफएमजेड एक बहुत ही सरल और उपयोग करने में आसान हस्तांतरण समारोह प्रदान करता है.
exchange.IO("api", "eth", "send", toAddress, toAmount)
जब इसका उपयोग हस्तांतरण के लिए किया जाता है, तो तीसरा पैरामीटरexchange.IO
toAddress
पैरामीटर वह पता है जो स्थानांतरण के दौरान ETH प्राप्त करता है, औरtoAmount
हस्तांतरित ईटीएच की राशि है।
मापदंड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
}
क्योंकि Ethereum हस्तांतरण राशि की इकाई है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 को पंजीकृत करने के चरण को समाप्त करता है। हमने पिछले ट्यूटोरियल में ABI के बारे में भी सीखा है जब हमने ENS अनुबंधों को पंजीकृत किया था।
एबीआई को बेहतर ढंग से समझने के लिए, आप इसका उपयोग करने से पहले इसकी जांच कर सकते हैं। यहाँ 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