وسائل لوڈ ہو رہے ہیں... لوڈنگ...

ایف ایم زیڈ کا استعمال کرتے ہوئے ایتھریم پر مبنی ویب 3 ڈویلپمنٹ آسانی سے شروع کریں

مصنف:FMZ~Lydia, تخلیق: 2023-06-25 09:17:53, تازہ کاری: 2024-11-11 22:34:49

[TOC]

img

ایف ایم زیڈ کا استعمال کرتے ہوئے ایتھریم پر مبنی ویب 3 ڈویلپمنٹ آسانی سے شروع کریں

EtherEaseWithFMZ ٹیوٹوریل

آسانی سے FMZ کا استعمال کرتے ہوئے Ethereum پر مبنی web3 ترقی کے ساتھ شروع کریں

ایتھرئم ایک اسمارٹ معاہدہ پلیٹ فارم ہے جو بلاکچین ٹیکنالوجی پر مبنی ہے ، جو اسمارٹ معاہدوں کو لکھنے اور تعینات کرنے کا ایک غیر مرکزی طریقہ فراہم کرتا ہے۔ اسمارٹ معاہدے ایک خاص قسم کا کمپیوٹر پروگرام ہے جو بلاکچین پر خود بخود عملدرآمد کرسکتا ہے اور تیسرے فریق پر اعتماد کرنے کی ضرورت کے بغیر مختلف کاروباری منطق کو نافذ کرسکتا ہے۔

FMZ کوانٹ ٹریڈنگ پلیٹ فارم (FMZ.COMایتھرئم بلاکچین ایک آسان استعمال کرنے والا API فراہم کرتا ہے ، جو ڈویلپرز کو ایتھرئم بلاکچین اور اس کے ماحولیاتی نظام کے ساتھ زیادہ آسانی سے تعامل کرنے کی اجازت دیتا ہے۔ یہ وکندریقرت تبادلے (ڈی ای ایکس) تک رسائی حاصل کرتا ہے ، چین پر ڈیٹا حاصل کرتا ہے ، ٹرانزیکشنز بھیجتا ہے ، اور دیگر افعال۔

اس سبق میں، مثالیں میں لکھا ہےJavaScriptزبان، ٹیسٹنگ ماحول دونوں استعمال کرتا ہےایتھریم مین نیٹاورگورلی ٹیسٹ نیٹ. اور آپ کو بھی API انٹرفیس اور متعلقہ وضاحتیں، FMZ پلیٹ فارم کی API دستاویزات میں سبق میں استعمال کوڈ مثالیں دیکھ سکتے ہیں.


ایف ایم زیڈ کا آغاز

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کا استعمال سیکھنے سے پہلے ، ہمیں اپنے آپ کو کچھ بنیادی تصورات سے واقف کرنے کی ضرورت ہے:

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم فن تعمیر

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کی سرکاری ویب سائٹ پر رجسٹریشن اور لاگ ان کرنے کے بعد (https://www.fmz.comایف ایم زیڈ ویب سائٹ پورے سسٹم کا مینجمنٹ اختتام ہے ، اور صارف کے لکھے ہوئے پروگرام دراصل ڈوکر پر چلتے ہیں۔ ڈوکر سافٹ ویئر پروگرام کو مختلف آلات جیسے سرورز ، کمپیوٹرز وغیرہ پر تعینات کیا جاسکتا ہے۔ جب کوئی صارف پروگرام لکھتا ہے اور ایف ایم زیڈ ویب سائٹ پر چلانے والی مثال بناتا ہے تو ، ایف ایم زیڈ پلیٹ فارم ڈوکر کے ساتھ بات چیت کرے گا اور اس پر پروگرام کی مثال شروع کرے گا۔

2. ڈوکر

اگر آپ کسی پروگرام کی مثال چلانا چاہتے ہیں تو ، آپ کو ڈوکر کی تعیناتی کرنا ہوگی۔ ڈوکر کی تعیناتی بھی بہت آسان ہے ، اور پلیٹ فارم پر تعیناتی کے سبق موجود ہیں۔ آپ ایف ایم زیڈ کی جانب سے فراہم کردہ ایک کلک کی تعیناتی کا استعمال بھی کرسکتے ہیں تاکہ ایف ایم زیڈ کی جانب سے کرایہ پر لیے گئے سرورز پر خود بخود تعینات کیا جاسکے۔

  • ذاتی آلات پر ڈوکر کو تعینات کریں

آپ ڈوکر پروگرام کو سرورز ، پرسنل کمپیوٹرز اور دیگر آلات پر تعینات اور چلائ سکتے ہیں ، جب تک کہ نیٹ ورک معمول پر ہو (متعلقہ ہدف تک رسائی حاصل کرنے کے قابل ہونے کی ضرورت ہو ، جیسے کسی مخصوص ایکسچینج انٹرفیس ، نوڈ ایڈریس وغیرہ) ۔ تعیناتی کے اہم اقدامات یہ ہیں:

  1. لاگ ان کریں یا اس آلہ کو کھولیں جہاں ڈوکر پروگرام کو تعینات کیا جائے گا، جیسےسرور میں لاگ ان کرنایاآپریٹنگ سسٹم میں داخل ہونے کے لئے کمپیوٹر کو آن کرنا.
  2. ڈوکر پروگرام کے متعلقہ ورژن ڈاؤن لوڈ کریں (ڈیوائس آپریٹنگ سسٹم پر منحصر ہے) ، ڈاؤن لوڈ کا صفحہ:https://www.fmz.com/m/add-node

img

  1. آپ نے جو ڈاؤن لوڈ کیا ہے وہ ایک کمپریسڈ پیکیج ہے، اسے ڈیکمپریس کرنے کی ضرورت ہے۔
  2. ڈوکر پروگرام چلائیں، ڈوکر پروگرام ایک قابل عمل فائل ہےrobot. ڈوکر مواصلات ایڈریس کو ترتیب دیں، جو ہر FMZ اکاؤنٹ کے لئے منفرد ہے، FMZ میں لاگ ان کرنے کے بعد، آپ اپنے اپنے ایڈریس کو دیکھ سکتے ہیںhttps://www.fmz.com/m/add-nodeصفحہ (یعنی،./robot -s node.fmz.com/xxxxxپتے کی اس تار، جہاں پر موادxxxxxہر ایف ایم زیڈ اکاؤنٹ کے لئے پوزیشن مختلف ہے۔) آخر میں ، آپ کو اپنے ایف ایم زیڈ اکاؤنٹ کا پاس ورڈ درج کرنے کی ضرورت ہے۔ ان ترتیبات کو ترتیب دینے کے بعد ، ڈوکر پروگرام چلائیں۔
  • ایف ایم زیڈ پلیٹ فارم کی ایک کلک کی تعیناتی فنکشن کا استعمال کریں

    ایف ایم زیڈ پلیٹ فارم پر ڈوکر پیج شامل کریں، پتہ:https://www.fmz.com/m/add-node

    img

3. ڈیبگنگ ٹول

ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم ایک مفت ڈیبگنگ ٹول فراہم کرتا ہے جو معاونت کرتا ہےJavaScript, TypeScript، اور صفحہ ہے:https://www.fmz.com/m/debug. کیونکہ چلانے کے لئے مثالیں بنانا معاوضہ ہے۔ ابتدائی سیکھنے کی مدت کے دوران ، آپ اس ڈیبگنگ ٹول کو جانچ اور سیکھنے کے لئے استعمال کرسکتے ہیں۔ 3 منٹ کی زیادہ سے زیادہ چلانے کی حد کے علاوہ ، ڈیبگنگ ٹول کا استعمال کرنے اور چلانے کے لئے مثال بنانے میں کوئی فرق نہیں ہے۔

استعمال کرتے وقتTypeScriptزبان، آپ کو لکھنے کی ضرورت ہے// @ts-checkپر سوئچ کرنے کے لئے کوڈ کی پہلی سطرTypeScriptموڈ؛ اگر سوئچ نہیں کیا جاتا ہے تو، ڈیفالٹ ہےJavaScript language.

4۔ پلیٹ فارم

ایف ایم زیڈ پر ، پلیٹ فارم ایک عام تصور ہے۔ سی ای ایکس ایکسچینجز کے لئے ، اس سے مراد ایک مخصوص ایکسچینج اکاؤنٹ کی تشکیل ہے۔ ویب 3 کے لئے ، یہ تبادلہ ایک ترتیب کی معلومات سے مراد ہے جس میں نوڈ ایڈریس اور نجی کلید کی تشکیل شامل ہے۔

FMZ پلیٹ فارم کے لاگ ان کی حالت میں، پرhttps://www.fmz.com/m/add-platformصفحہ، آپ کو تبادلہ معلومات تشکیل دے سکتے ہیں، جہاں تبادلہ ایک عام تصور ہے.

img

منتخب کریںWeb3، RPC نوڈ ایڈریس کو ترتیب دیں، نجی کلید کو ترتیب دیں، آپ سیکورٹی میکانیزم کو دیکھنے کے لئے نیچے دائیں کونے پر کلک کر سکتے ہیں

نوڈس خود ساختہ نوڈس یا نوڈس ہوسکتے ہیں جو نوڈس سروس فراہم کرنے والوں کے ذریعہ فراہم کیے جاتے ہیں۔ بہت سارے نوڈس سروس فراہم کرنے والے ہیں ، جیسے:انفورا. رجسٹریشن کے بعد، آپ اپنے اکاؤنٹ کے نوڈ ایڈریس کو دیکھ سکتے ہیں. مین نیٹ اور ٹیسٹ نیٹ دونوں دستیاب ہیں، جو کافی آسان ہے.Rpc Addressمندرجہ بالا شبیہہ میں دکھایا گیا کنٹرول۔ تشکیل شدہ تبادلہ اشیاء کے مابین فرق کرنے کے لئے لیبل کو خود ہی نامزد کیا جاسکتا ہے۔

img

تصویر میں،https://mainnet.infura.io/v3/xxxxxxxxxxxxxہے نجی Infura ETH مین نیٹ RPC نوڈ ایڈریس.


ایف ایم زیڈ کا استعمال کرتے ہوئے ایتھریم کے ساتھ تعامل کریں

ڈوکر پروگرام کی تعیناتی اور تبادلے آبجیکٹ کی تشکیل کے بعد، آپ استعمال کر سکتے ہیںFMZ.COMs Debugging Tool ٹیسٹنگ کے لئے۔ ایتھرئم آر پی سی کے طریقوں کو کال کریں اور ایتھرئم کے ساتھ تعامل کریں ، اس باب میں درج اور متعارف کرائے گئے متعدد آر پی سی طریقوں کے علاوہ ، دیگر آر پی سی کے طریقوں کو مشاورت کے مواد سے پایا جاسکتا ہے ، جیسے:https://www.quicknode.com/docs.

ہم کچھ آسان مثالیں درج کرتے ہیں ، بنیادی باتوں سے شروع کرتے ہیں۔ مختلف زبانوں اور ٹولز کے ل web ، ویب 3 تک رسائی کے طریقے موجود ہیں ، جیسا کہ تصویر میں دکھایا گیا ہے:

img

ایف ایم زیڈ پر، آر پی سی طریقہ کار کالز کو بھی احاطہ کیا جاتا ہے، اور ان افعال کو ایف ایم زیڈ API فنکشن میں احاطہ کیا جاتا ہےexchange.IO. کال کرنے کا طریقہ یہ ہےexchange.IO("api", "eth", ...). پہلا پیرامیٹر مقرر کیا جاتا ہے"api"، دوسرا پیرامیٹر مقرر کیا جاتا ہے"eth"، اور دیگر پیرامیٹرز مخصوص RPC طریقہ کار کو بلایا جا رہا ہے پر منحصر ہے.

پیداوار کی معلومات کے لئے، ہم استعمال کریں گےLogایف ایم زیڈ پلیٹ فارم کا کردار.Logفنکشن متعدد پیرامیٹرز کو قبول کرسکتا ہے اور پھر انہیں ایف ایم زیڈ پلیٹ فارم پر ڈیبگ ٹول یا بوٹ صفحے کے لاگ ان ایریا میں آؤٹ پٹ کرسکتا ہے۔ ڈیبگ ٹول صفحہ ہمارا بنیادی ٹیسٹنگ ٹول ہوگا۔

eth_getBalance

کےeth_getBalanceایتھرئم کا طریقہ ایتھرئم پر ایک ایڈریس کے ایٹھریم بیلنس کو استفسار کرنے کے لئے استعمال کیا جاتا ہے، اور اس طریقہ کار کو دو پیرامیٹرز کی ضرورت ہوتی ہے۔

  • ایڈریس سے پوچھ گچھ کی جائے گی.
  • لیبل، ہم عام طور پر تازہ ترین استعمال کرتے ہیں. آئیے ایتھریم کے بانی کی جانچ پڑتال کریںVitalik Buterinکے ETH والیٹ ایڈریس، معروف ایڈریس ہے:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045.
function main() {
    let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
    Log("ethBalance:", ethBalance)
}

پہلے سے ہی ڈوکر (تصویر میں: لینکس / amd64...) تعینات کیا اور تبادلہ اعتراض (تصویر میں: ویب 3 ٹیسٹ) تشکیل، ڈیبگنگ کے آلے میں کوڈ کی جانچ:

img

کوڈ چلانے اور نتائج ظاہر کرنے کے لئے Execute بٹن پر کلک کریں:

ethتوازن: 0x117296558f185bbc4c6

کےlogتقریب پرنٹ کرتا ہےethBalanceمتغیر قدر:0x117296558f185bbc4c6، جس میں ایک تار قسم ہے. یہ ہےای ٹی ایچ بیلنس کی ہیکساڈیسمل قدرمیںweiاکائیوں، کے ساتھ1e18 wei1 کے برابر ہے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/:

img

تاہم ، خود زبان کی درستگی کے مسئلے کی وجہ سے ، پروسیسنگ کے اس طریقہ کار میں انحرافات ہوں گے۔ لہذا ، ایف ایم زیڈ پلیٹ فارم میں ڈیٹا پروسیسنگ کے لئے دو فنکشن شامل ہیں:

  • بگ انٹ: بگ انٹ آبجیکٹ میں ہیکساڈیسمل تار تبدیل کریں.
  • بگ ڈیسیمل: عددی قسم کی اشیاء کو BigDecimal اشیاء میں تبدیل کریں.

دوبارہ کوڈ ایڈجسٹ کریں:

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

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

کال کریں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_blockنومبر

"eth_blockNumberبلاک کی اونچائی کی پوچھ گچھ کرنے کے لئے استعمال کیا جاتا ہے.

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

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

ڈیبگنگ ٹول میں چلائیں:

img

تلاش جاری رکھیںhttps://etherscan.io/:

img

eth_getBlockByNumber

بلاک کی معلومات کی انکوائری.

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

ڈیبگنگ ٹول میں عملدرآمد مندرجہ ذیل معلومات حاصل کر سکتے ہیں:

img

معاہدے کی معلومات پڑھیں

بہت سے سمارٹ معاہدے کی ایپلی کیشنز ایتھریم پر چلتی ہیں، اورENSان میں سے ایک ہے.ENS، یا ایتھرئم نام سروس ، ایتھرئم بلاکچین پر مبنی ایک وکندریقرت ڈومین ناموں کی قرارداد کی خدمت ہے۔ کیا آپ کو سبق کی مثال یاد ہے جہاں ہم نے ایتھریم کے بانی وٹالک بوٹرن کے بٹوے کا بیلنس چیک کیا تھا؟ وٹالک بوٹرن کے بٹوے کے پتے میں سے ایک یہ ہے:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. تو ہم کس طرح پتہ ہے؟ حقیقت میں، یہ کے ذریعے استفسار کیا جا سکتا ہےENSایک بدیہی نام کا استعمال کرتے ہوئے سمارٹ معاہدہvitalik.eth.

اس باب میں مندرجہ ذیل مواد ایتھرئم مین نیٹ ماحول کا استعمال کرتا ہے ،ENSدستاویزات،Hashing Namesایتھرئم ڈومین ناموں سے استفسار کرنے کے لئے درکار ہیں۔ عمل کرنے کے لئے درج ذیل کوڈ کا استعمال کریںvitalik.eth.

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

مندرجہ بالا کوڈ مثال میں، ہم نے ایک اور نامعلوم تقریب دیکھاEncodeیہ فنکشن ایف ایم زیڈ پلیٹ فارم کا ایک API فنکشن ہے اور خاص طور پر ایف ایم زیڈ پلیٹ فارم پر انکوڈنگ آپریشنز کے لئے استعمال ہوتا ہے۔ فنکشن متعدد انکوڈنگ طریقوں اور مختلف ہیش الگورتھم کی حمایت کرتا ہے۔

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

ENS دستاویز میں وضاحت کے مطابق،sha3.keccak256ڈیٹا پروسیسنگ کے لیے الگورتھم۔

کال کریںnameHashفنکشن، مثال کے طور پر:Log(nameHash("vitalik.eth"))، آپ حاصل کر سکتے ہیں:ee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835، اور آپ کو 0x پیش لفظ شامل کرنے کی ضرورت ہے.0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835کے پیرامیٹر کے طور پر استعمال کیا جاتا ہےresolverENS سمارٹ معاہدے میں طریقہ کار.

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.

نکالیںresolverENSs ABI سے طریقہ کار کا حصہ ، یا آپ مکمل ABI استعمال کرسکتے ہیں۔ آپ معاہدے کے ABI پر استفسار کرسکتے ہیںhttps://etherscan.io/یا دیگر چینلز کے ذریعے اے بی آئی حاصل کریں (مثال کے طور پر متعلقہ پروجیکٹ دستاویزات) ۔

img

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

یہاں ہم FMZ پلیٹ فارم پر ایک نیا بلانے کا طریقہ سیکھنے جا رہے ہیں،exchange.IO("abi", address, abiContent)، جو اے بی آئی رجسٹر کرنے کے لئے استعمال کیا جاتا ہے.addressپیرامیٹر سمارٹ معاہدے کا پتہ ہے اورabiContentپیرامیٹر متعلقہ سمارٹ معاہدے ABI (سلسلہ) ہے.

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

سمارٹ معاہدوں کو کال کرنے کے طریقے

اگلا، آپ کو فون کر سکتے ہیںresolverENS سمارٹ معاہدے کا طریقہ، جس میںENS: Public Resolver contract.

img

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

استعمال کریںENS: Public Resolverمعاہدےaddrویٹیلک Buterin کے بٹوے کا پتہ حاصل کرنے کا طریقہ.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)

img

آخر میں، کال کریںENS: Public Resolverمعاہدےaddrطریقہ، پیرامیٹر اب بھی ہونے کے ساتھensNode.

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

لاگ ان فنکشن آؤٹ پٹ:

vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045

ENS کے مکمل کوڈ کو کال کریں

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

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

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

ETH بھیجیں

پچھلے کورس کے ابواب میں ، ہم نے سیکھا ہے کہ نجی چابیاں کس طرح ترتیب دی جائیں۔ ہم کس طرح جانتے ہیں کہ اس نجی چابی سے مطابقت رکھنے والے بٹوے کا پتہ کس طرح ہے؟ ایف ایم زیڈ پر ، آپ استعمال کرسکتے ہیںexchange.IO("address")ترتیب شدہ نجی کلید کے مطابق والیٹ ایڈریس حاصل کرنے کے لئے تقریب.

اس باب میں مندرجہ ذیل مواد Goerli ٹیسٹ نیٹ ماحول کا استعمال کرتا ہے، تو نوڈ میں استعمال کر رہا ہوں:https://goerli.infura.io/v3/*******، اور Infura ہر رجسٹرڈ صارف کے لئے مختلف نوڈ ایڈریس تفویض.*******مخصوص مواد کو چھپاتا ہے۔

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

آپ کے بٹوے کا پتہ جاننے کے بعد، آپ Ethereum کے RPC طریقہ کار کا استعمال کر سکتے ہیںeth_getTransactionCountبٹوے کے ایڈریس کے ٹرانزیکشن کی گنتی سے پوچھ گچھ کرنے کے لئے۔ ایتھرئم میں ، یہ گنتی بہت عام ہے ، اور یہ دراصل ہےnonceپیرامیٹر جو منتقلی کے عمل کے دوران منتقل کرنے کی ضرورت ہے۔ ایتھرئم میں ، نانس ایک انوکھا نمبر ہے جو اس بات کو یقینی بنانے کے لئے استعمال ہوتا ہے کہ ہر لین دین منفرد ہے۔ یہ ایک بڑھتی ہوئی تعداد ہے ، اور ہر بار جب کوئی نیا لین دین بھیجا جاتا ہے تو یہ خود بخود بڑھ جائے گی۔ لہذا ، جب آپ کسی سمارٹ معاہدے میں لین دین بھیجتے ہیں تو ، آپ کو اس بات کو یقینی بنانے کے لئے نانس فراہم کرنے کی ضرورت ہوتی ہے کہ لین دین منفرد اور صحیح ترتیب میں ہو۔ ہم کچھ مواد اور دستاویزات میں یہ معلومات تلاش کرسکتے ہیں:

https://goethereumbook.org/en/

img

یہاں،PendingNonceAtGo زبان کے ایتھرئم لائبریری میں تقریب اصل میں کال کر رہا ہے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 وصول کرتا ہے، اورtoAmountETH کی منتقلی کی رقم ہے۔

پیرامیٹرز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/.

img

آپ کو بھی کوڈ لکھ سکتے ہیں سوال کی منتقلی ہیش0xa6f9f51b00d8ae850b0f204380b59da98f4bbce34b813577d3d948f61de4734e، کا استعمال کرتے ہوئےeth_getTransactionReceiptسوالات کے لئے طریقہ کار.

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

سوال کا نتیجہ:

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

ہر فیلڈ کے مطابق تفصیل:

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

ایتھریم اسمارٹ کنٹریکٹ کال کریں

باب میں معاہدہ کی معلومات پڑھنا، ہم نے ایک مکمل مثال استعمال کی ہے کہ وٹیلک بوٹرن کے بٹوے کا پتہ حاصل کرنے کے لئے ایتھریم پر تعینات ENS معاہدے کے طریقہ کار کو کال کرنے کے لئے۔ یہ طریقےReadطریقوں، اور ان طریقوں کو فون کرنے کی ضرورت نہیں ہےgas(ہم پہلے گیس کے بارے میں بات کی یاد ہے؟) اس باب میں، ہم کچھ فون کریں گےWriteایتھریم پر سمارٹ معاہدوں کے طریقوں اور ادائیگی کے لئےgas. یہ کارروائیوں پورے نیٹ ورک میں ہر نوڈ اور کان کن کی طرف سے تصدیق کی جائے گی اور بلاکچین ریاست کو تبدیل.

ERC20

ERC20 معاہدے (ERC20 ٹوکن معاہدہ) کے لئے ، ایف ایم زیڈ پلیٹ فارم 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

متعلقہ

مزید