[TOC]
EtherEaseWithFMZ ٹیوٹوریل
آسانی سے FMZ کا استعمال کرتے ہوئے Ethereum پر مبنی web3 ترقی کے ساتھ شروع کریں
ایتھرئم ایک اسمارٹ معاہدہ پلیٹ فارم ہے جو بلاکچین ٹیکنالوجی پر مبنی ہے ، جو اسمارٹ معاہدوں کو لکھنے اور تعینات کرنے کا ایک غیر مرکزی طریقہ فراہم کرتا ہے۔ اسمارٹ معاہدے ایک خاص قسم کا کمپیوٹر پروگرام ہے جو بلاکچین پر خود بخود عملدرآمد کرسکتا ہے اور تیسرے فریق پر اعتماد کرنے کی ضرورت کے بغیر مختلف کاروباری منطق کو نافذ کرسکتا ہے۔
FMZ کوانٹ ٹریڈنگ پلیٹ فارم (FMZ.COMایتھرئم بلاکچین ایک آسان استعمال کرنے والا API فراہم کرتا ہے ، جو ڈویلپرز کو ایتھرئم بلاکچین اور اس کے ماحولیاتی نظام کے ساتھ زیادہ آسانی سے تعامل کرنے کی اجازت دیتا ہے۔ یہ وکندریقرت تبادلے (ڈی ای ایکس) تک رسائی حاصل کرتا ہے ، چین پر ڈیٹا حاصل کرتا ہے ، ٹرانزیکشنز بھیجتا ہے ، اور دیگر افعال۔
اس سبق میں، مثالیں میں لکھا ہےJavaScript
زبان، ٹیسٹنگ ماحول دونوں استعمال کرتا ہےایتھریم مین نیٹاورگورلی ٹیسٹ نیٹ. اور آپ کو بھی API انٹرفیس اور متعلقہ وضاحتیں، FMZ پلیٹ فارم
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کا استعمال سیکھنے سے پہلے ، ہمیں اپنے آپ کو کچھ بنیادی تصورات سے واقف کرنے کی ضرورت ہے:
ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کی سرکاری ویب سائٹ پر رجسٹریشن اور لاگ ان کرنے کے بعد (https://www.fmz.comایف ایم زیڈ ویب سائٹ پورے سسٹم کا مینجمنٹ اختتام ہے ، اور صارف کے لکھے ہوئے پروگرام دراصل ڈوکر پر چلتے ہیں۔ ڈوکر سافٹ ویئر پروگرام کو مختلف آلات جیسے سرورز ، کمپیوٹرز وغیرہ پر تعینات کیا جاسکتا ہے۔ جب کوئی صارف پروگرام لکھتا ہے اور ایف ایم زیڈ ویب سائٹ پر چلانے والی مثال بناتا ہے تو ، ایف ایم زیڈ پلیٹ فارم ڈوکر کے ساتھ بات چیت کرے گا اور اس پر پروگرام کی مثال شروع کرے گا۔
اگر آپ کسی پروگرام کی مثال چلانا چاہتے ہیں تو ، آپ کو ڈوکر کی تعیناتی کرنا ہوگی۔ ڈوکر کی تعیناتی بھی بہت آسان ہے ، اور پلیٹ فارم پر تعیناتی کے سبق موجود ہیں۔ آپ ایف ایم زیڈ کی جانب سے فراہم کردہ
آپ ڈوکر پروگرام کو سرورز ، پرسنل کمپیوٹرز اور دیگر آلات پر تعینات اور چلائ سکتے ہیں ، جب تک کہ نیٹ ورک معمول پر ہو (متعلقہ ہدف تک رسائی حاصل کرنے کے قابل ہونے کی ضرورت ہو ، جیسے کسی مخصوص ایکسچینج انٹرفیس ، نوڈ ایڈریس وغیرہ) ۔ تعیناتی کے اہم اقدامات یہ ہیں:
robot
. ڈوکر مواصلات ایڈریس کو ترتیب دیں، جو ہر FMZ اکاؤنٹ کے لئے منفرد ہے، FMZ میں لاگ ان کرنے کے بعد، آپ اپنے اپنے ایڈریس کو دیکھ سکتے ہیںhttps://www.fmz.com/m/add-node
صفحہ (یعنی،./robot -s node.fmz.com/xxxxx
پتے کی اس تار، جہاں پر موادxxxxx
ہر ایف ایم زیڈ اکاؤنٹ کے لئے پوزیشن مختلف ہے۔) آخر میں ، آپ کو اپنے ایف ایم زیڈ اکاؤنٹ کا پاس ورڈ درج کرنے کی ضرورت ہے۔ ان ترتیبات کو ترتیب دینے کے بعد ، ڈوکر پروگرام چلائیں۔ایف ایم زیڈ پلیٹ فارم
ایف ایم زیڈ پلیٹ فارم پر ڈوکر پیج شامل کریں، پتہ: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 نوڈ ایڈریس کو ترتیب دیں، نجی کلید کو ترتیب دیں، آپ سیکورٹی میکانیزم کو دیکھنے کے لئے نیچے دائیں کونے پر کلک کر سکتے ہیں
نوڈس خود ساختہ نوڈس یا نوڈس ہوسکتے ہیں جو نوڈس سروس فراہم کرنے والوں کے ذریعہ فراہم کیے جاتے ہیں۔ بہت سارے نوڈس سروس فراہم کرنے والے ہیں ، جیسے:انفورا. رجسٹریشن کے بعد، آپ اپنے اکاؤنٹ کے نوڈ ایڈریس کو دیکھ سکتے ہیں. مین نیٹ اور ٹیسٹ نیٹ دونوں دستیاب ہیں، جو کافی آسان ہے.Rpc Address
مندرجہ بالا شبیہہ میں دکھایا گیا کنٹرول۔ تشکیل شدہ تبادلہ اشیاء کے مابین فرق کرنے کے لئے لیبل کو خود ہی نامزد کیا جاسکتا ہے۔
تصویر میں،https://mainnet.infura.io/v3/xxxxxxxxxxxxx
ہے نجی Infura ETH مین نیٹ RPC نوڈ ایڈریس.
ڈوکر پروگرام کی تعیناتی اور تبادلے آبجیکٹ کی تشکیل کے بعد، آپ استعمال کر سکتے ہیںFMZ.COM
ہم کچھ آسان مثالیں درج کرتے ہیں ، بنیادی باتوں سے شروع کرتے ہیں۔ مختلف زبانوں اور ٹولز کے ل web ، ویب 3 تک رسائی کے طریقے موجود ہیں ، جیسا کہ تصویر میں دکھایا گیا ہے:
ایف ایم زیڈ پر، آر پی سی طریقہ کار کالز کو بھی احاطہ کیا جاتا ہے، اور ان افعال کو ایف ایم زیڈ API فنکشن میں احاطہ کیا جاتا ہےexchange.IO
. کال کرنے کا طریقہ یہ ہےexchange.IO("api", "eth", ...)
. پہلا پیرامیٹر مقرر کیا جاتا ہے"api"
، دوسرا پیرامیٹر مقرر کیا جاتا ہے"eth"
، اور دیگر پیرامیٹرز مخصوص RPC طریقہ کار کو بلایا جا رہا ہے پر منحصر ہے.
پیداوار کی معلومات کے لئے، ہم استعمال کریں گےLog
ایف ایم زیڈ پلیٹ فارم کا کردار.Log
فنکشن متعدد پیرامیٹرز کو قبول کرسکتا ہے اور پھر انہیں ایف ایم زیڈ پلیٹ فارم پر
کےeth_getBalance
ایتھرئم کا طریقہ ایتھرئم پر ایک ایڈریس کے ایٹھریم بیلنس کو استفسار کرنے کے لئے استعمال کیا جاتا ہے، اور اس طریقہ کار کو دو پیرامیٹرز کی ضرورت ہوتی ہے۔
Vitalik Buterin
کے ETH والیٹ ایڈریس، معروف ایڈریس ہے: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
لہذا، اسے پڑھنے کے قابل اعشاریہ 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
ایک اعشاریہ ID لوٹاتا ہے اورeth_chainId
ایک ہیکساڈیسمل ID لوٹاتا ہے.
نیٹ ورک کا نام جو 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
یہ فنکشن ایف ایم زیڈ پلیٹ فارم کا ایک API فنکشن ہے اور خاص طور پر ایف ایم زیڈ پلیٹ فارم پر انکوڈنگ آپریشنز کے لئے استعمال ہوتا ہے۔ فنکشن متعدد انکوڈنگ طریقوں اور مختلف ہیش الگورتھم کی حمایت کرتا ہے۔
Encode(algo, inputFormat, outputFormat, data, keyFormat, key string)
ENS دستاویز میں وضاحت کے مطابق،sha3.keccak256
ڈیٹا پروسیسنگ کے لیے الگورتھم۔
کال کریںnameHash
فنکشن، مثال کے طور پر:Log(nameHash("vitalik.eth"))
، آپ حاصل کر سکتے ہیں:ee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835
، اور آپ کو 0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835
کے پیرامیٹر کے طور پر استعمال کیا جاتا ہےresolver
ENS سمارٹ معاہدے میں طریقہ کار.
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
ویٹیلک ButerinENS: 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
پیرامیٹر جو منتقلی کے عمل کے دوران منتقل کرنے کی ضرورت ہے۔ ایتھرئم میں ، نانس ایک انوکھا نمبر ہے جو اس بات کو یقینی بنانے کے لئے استعمال ہوتا ہے کہ ہر لین دین منفرد ہے۔ یہ ایک بڑھتی ہوئی تعداد ہے ، اور ہر بار جب کوئی نیا لین دین بھیجا جاتا ہے تو یہ خود بخود بڑھ جائے گی۔ لہذا ، جب آپ کسی سمارٹ معاہدے میں لین دین بھیجتے ہیں تو ، آپ کو اس بات کو یقینی بنانے کے لئے نانس فراہم کرنے کی ضرورت ہوتی ہے کہ لین دین منفرد اور صحیح ترتیب میں ہو۔ ہم کچھ مواد اور دستاویزات میں یہ معلومات تلاش کرسکتے ہیں:
یہاں،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
، آپ کی منتقلی کی جانچ کر سکتے ہیں. 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})
اگلا، ہم ETH کی ایک مخصوص رقم کو Goerli ٹیسٹ نیٹ ورک پر ایک مخصوص ایڈریس پر منتقل کریں گے:
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 ٹوکن معاہدہ) کے لئے ، ایف ایم زیڈ پلیٹ فارم ERC20 معاہدے ABI کے ABI کو براہ راست نظام میں تعمیر کردہ ایک عام ABI کے طور پر درج کرتا ہے ، جس سے ABI کی رجسٹریشن کا مرحلہ ختم ہوجاتا ہے۔ ہم نے پچھلے سبق میں بھی ABI کے بارے میں سیکھا ہے جب ہم نے ENS معاہدوں کو ENS معاہدے کے طریقوں کو کال کرنے سے پہلے 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