ایک پائتھون (Python) ڈیولپر کا ایتھیریم کا تعارف، حصہ 1
تو، آپ نے اس ایتھیریم کے بارے میں سنا ہے اور اس کی گہرائیوں میں جانے کے لیے تیار ہیں؟ یہ پوسٹ تیزی سے کچھ بلاک چین کی بنیادی باتوں کا احاطہ کرے گی، پھر آپ کو ایک نقلی ایتھیریم نوڈ کے ساتھ تعامل کرنے کے قابل بنائے گی – بلاک کا ڈیٹا پڑھنا، اکاؤنٹ کے بیلنس چیک کرنا، اور ٹرانزیکشنز بھیجنا۔ اس سفر میں، ہم ایپس بنانے کے روایتی طریقوں اور اس نئے ڈی سینٹرلائزڈ (decentralized) ماڈل کے درمیان فرق کو نمایاں کریں گے۔
(نرم) شرائط
اس پوسٹ کا مقصد ڈیولپرز کی ایک وسیع رینج تک قابل رسائی ہونا ہے۔ اس میں Python ٹولز شامل ہوں گے، لیکن وہ صرف خیالات کو سمجھانے کا ایک ذریعہ ہیں – اگر آپ Python ڈیولپر نہیں ہیں تو کوئی مسئلہ نہیں۔ تاہم، میں آپ کے پہلے سے موجود علم کے بارے میں کچھ مفروضے قائم کروں گا، تاکہ ہم تیزی سے ایتھیریم سے متعلقہ حصوں کی طرف بڑھ سکیں۔
مفروضے:
- آپ ٹرمینل کا استعمال جانتے ہیں،
- آپ نے Python کوڈ کی کچھ لائنیں لکھی ہیں،
- آپ کی مشین پر Python کا ورژن 3.6 یا اس سے زیادہ انسٹال ہے (ایک ورچوئل انوائرنمنٹ (opens in a new tab) کے استعمال کی سختی سے سفارش کی جاتی ہے)، اور
- آپ نے
pipاستعمال کیا ہے، جو Python کا پیکیج انسٹالر ہے۔ ایک بار پھر، اگر ان میں سے کوئی بھی بات درست نہیں ہے، یا آپ اس مضمون میں موجود کوڈ کو دوبارہ چلانے کا ارادہ نہیں رکھتے، تب بھی آپ ممکنہ طور پر اسے بخوبی سمجھ سکیں گے۔
بلاک چینز، مختصراً
ایتھیریم کو بیان کرنے کے کئی طریقے ہیں، لیکن اس کے مرکز میں ایک بلاک چین ہے۔ بلاک چینز بلاکس کے ایک سلسلے سے مل کر بنتی ہیں، تو آئیے وہیں سے شروع کرتے ہیں۔ آسان ترین الفاظ میں، ایتھیریم بلاک چین پر ہر بلاک صرف کچھ میٹا ڈیٹا اور ٹرانزیکشنز کی ایک فہرست ہوتا ہے۔ JSON فارمیٹ میں، یہ کچھ اس طرح لگتا ہے:
1{2 "number": 1234567,3 "hash": "0xabc123...",4 "parentHash": "0xdef456...",5 ...,6 "transactions": [...]7}ہر بلاک میں اس سے پہلے آنے والے بلاک کا حوالہ ہوتا ہے؛ parentHash محض پچھلے بلاک کا ہیش (hash) ہوتا ہے۔
بلاک چین بنیادی طور پر ایک لنکڈ لسٹ (linked list) ہے؛ ہر بلاک میں پچھلے بلاک کا حوالہ ہوتا ہے۔
یہ ڈیٹا اسٹرکچر کوئی نئی چیز نہیں ہے، لیکن وہ اصول (یعنی پیئر ٹو پیئر پروٹوکولز) جو نیٹ ورک کو کنٹرول کرتے ہیں، وہ نئے ہیں۔ کوئی مرکزی اتھارٹی نہیں ہے؛ نیٹ ورک کو برقرار رکھنے کے لیے پیئرز (peers) کے نیٹ ورک کو آپس میں تعاون کرنا پڑتا ہے، اور یہ فیصلہ کرنے کے لیے مقابلہ کرنا پڑتا ہے کہ اگلے بلاک میں کون سی ٹرانزیکشنز شامل کی جائیں۔ لہذا، جب آپ کسی دوست کو کچھ رقم بھیجنا چاہتے ہیں، تو آپ کو اس ٹرانزیکشن کو نیٹ ورک پر براڈکاسٹ کرنا ہوگا، اور پھر اس کے آنے والے بلاک میں شامل ہونے کا انتظار کرنا ہوگا۔
بلاک چین کے لیے یہ تصدیق کرنے کا واحد طریقہ کہ رقم واقعی ایک صارف سے دوسرے صارف کو بھیجی گئی تھی، یہ ہے کہ وہ ایک ایسی کرنسی استعمال کرے جو اس بلاک چین کی مقامی ہو (یعنی اسی کے ذریعے بنائی اور کنٹرول کی گئی ہو)۔ ایتھیریم میں، اس کرنسی کو ایتھر (ether) کہا جاتا ہے، اور ایتھیریم بلاک چین میں اکاؤنٹ کے بیلنس کا واحد سرکاری ریکارڈ موجود ہوتا ہے۔
ایک نیا ماڈل
اس نئے ڈی سینٹرلائزڈ ٹیک اسٹیک نے نئے ڈیولپر ٹولز کو جنم دیا ہے۔ ایسے ٹولز کئی پروگرامنگ زبانوں میں موجود ہیں، لیکن ہم انہیں Python کے نقطہ نظر سے دیکھیں گے۔ دوبارہ دہراتے چلیں: یہاں تک کہ اگر Python آپ کی پسندیدہ زبان نہیں ہے، تب بھی آپ کو اسے سمجھنے میں زیادہ پریشانی نہیں ہونی چاہیے۔
Python ڈیولپرز جو ایتھیریم کے ساتھ تعامل کرنا چاہتے ہیں، وہ ممکنہ طور پر Web3.py (opens in a new tab) کا انتخاب کریں گے۔ Web3.py ایک لائبریری ہے جو آپ کے ایتھیریم نوڈ سے جڑنے، اور پھر اس سے ڈیٹا بھیجنے اور وصول کرنے کے طریقے کو بہت آسان بناتی ہے۔
ایتھیریم کلائنٹس کو اس طرح کنفیگر کیا جا سکتا ہے کہ وہ IPC (opens in a new tab)، HTTP، یا Websockets کے ذریعے قابل رسائی ہوں، لہذا Web3.py کو اس کنفیگریشن کی عکاسی کرنے کی ضرورت ہوگی۔ Web3.py کنکشن کے ان اختیارات کو پرووائیڈرز (providers) کہتا ہے۔ آپ Web3.py انسٹینس کو اپنے نوڈ کے ساتھ لنک کرنے کے لیے ان تینوں پرووائیڈرز میں سے کسی ایک کا انتخاب کرنا چاہیں گے۔
ایتھیریم نوڈ اور Web3.py کو ایک ہی پروٹوکول کے ذریعے بات چیت کرنے کے لیے کنفیگر کریں، مثال کے طور پر، اس خاکے میں IPC۔
ایک بار جب Web3.py مناسب طریقے سے کنفیگر ہو جائے، تو آپ بلاک چین کے ساتھ تعامل شروع کر سکتے ہیں۔ آگے کیا آنے والا ہے اس کے پیش نظارہ کے طور پر Web3.py کے استعمال کی چند مثالیں یہ ہیں:
1# بلاک ڈیٹا پڑھیں:2w3.eth.get_block('latest')3
4# ایک ٹرانزیکشن بھیجیں:5w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...})انسٹالیشن
اس واک تھرو میں، ہم صرف ایک Python انٹرپریٹر کے اندر کام کریں گے۔ ہم کوئی ڈائریکٹریز، فائلیں، کلاسز یا فنکشنز نہیں بنائیں گے۔
$ سے شروع ہوتی ہیں، انہیں ٹرمینل میں چلانے کے لیے دیا گیا ہے۔ ($ ٹائپ نہ کریں، یہ صرف لائن کے آغاز کو ظاہر کرتا ہے۔)سب سے پہلے، دریافت کرنے کے لیے ایک صارف دوست ماحول کے لیے IPython (opens in a new tab) انسٹال کریں۔ IPython دیگر خصوصیات کے علاوہ ٹیب کمپلیشن (tab completion) پیش کرتا ہے، جس سے یہ دیکھنا بہت آسان ہو جاتا ہے کہ Web3.py کے اندر کیا ممکن ہے۔
pip install ipythonWeb3.py کو web3 کے نام سے شائع کیا گیا ہے۔ اسے اس طرح انسٹال کریں:
pip install web3ایک اور بات – ہم بعد میں ایک بلاک چین کی نقل (simulate) کرنے جا رہے ہیں، جس کے لیے مزید کچھ ڈیپینڈینسیز (dependencies) کی ضرورت ہے۔ آپ انہیں اس کے ذریعے انسٹال کر سکتے ہیں:
pip install 'web3[tester]'آپ بالکل تیار ہیں!
نوٹ: web3[tester] پیکیج Python 3.10.xx تک کام کرتا ہے۔
ایک سینڈ باکس تیار کریں
اپنے ٹرمینل میں ipython چلا کر ایک نیا Python انوائرنمنٹ کھولیں۔ یہ python چلانے کے مترادف ہے، لیکن اس میں مزید خصوصیات شامل ہیں۔
ipythonیہ آپ کے چلائے جا رہے Python اور IPython کے ورژنز کے بارے میں کچھ معلومات پرنٹ کرے گا، پھر آپ کو ان پٹ کے انتظار میں ایک پرامپٹ (prompt) نظر آنا چاہیے:
1In [1]:اب آپ ایک انٹرایکٹو Python شیل دیکھ رہے ہیں۔ بنیادی طور پر، یہ کھیلنے کے لیے ایک سینڈ باکس ہے۔ اگر آپ یہاں تک پہنچ گئے ہیں، تو اب Web3.py کو امپورٹ کرنے کا وقت ہے:
1In [1]: from web3 import Web3Web3 ماڈیول کا تعارف
ایتھیریم کا گیٹ وے ہونے کے علاوہ، Web3 (opens in a new tab) ماڈیول چند سہولت بخش فنکشنز بھی پیش کرتا ہے۔ آئیے ان میں سے کچھ کا جائزہ لیں۔
ایک ایتھیریم ایپلیکیشن میں، آپ کو عام طور پر کرنسی کی مالیتوں (denominations) کو تبدیل کرنے کی ضرورت ہوگی۔ Web3 ماڈیول خاص طور پر اس کے لیے چند مددگار طریقے فراہم کرتا ہے: from_wei (opens in a new tab) اور to_wei (opens in a new tab)۔
نوٹ: کمپیوٹرز اعشاریہ کی ریاضی کو سنبھالنے میں بدنام زمانہ حد تک خراب ہوتے ہیں۔ اس سے بچنے کے لیے، ڈیولپرز اکثر ڈالر کی رقم کو سینٹس (cents) میں اسٹور کرتے ہیں۔ مثال کے طور پر، $5.99 کی قیمت والی چیز کو ڈیٹا بیس میں 599 کے طور پر اسٹور کیا جا سکتا ہے۔
ایتھر (ether) میں ٹرانزیکشنز کو سنبھالتے وقت بھی اسی طرح کا پیٹرن استعمال کیا جاتا ہے۔ تاہم، دو اعشاریہ پوائنٹس کے بجائے، ایتھر میں 18 ہوتے ہیں! ایتھر کی سب سے چھوٹی مالیت کو wei کہا جاتا ہے، لہذا ٹرانزیکشنز بھیجتے وقت یہی ویلیو بتائی جاتی ہے۔
1 ether = 1000000000000000000 wei1 wei = 0.000000000000000001 etherکچھ ویلیوز کو wei میں اور اس سے تبدیل کرنے کی کوشش کریں۔ نوٹ کریں کہ ایتھر اور wei کے درمیان کئی مالیتوں کے نام موجود ہیں (opens in a new tab)۔ ان میں سے ایک مشہور نام gwei ہے، کیونکہ اکثر ٹرانزیکشن فیس کو اسی طرح ظاہر کیا جاتا ہے۔
1In [2]: Web3.to_wei(1, 'ether')2Out[2]: 10000000000000000003
4In [3]: Web3.from_wei(500000000, 'gwei')5Out[3]: Decimal('0.5')Web3 ماڈیول پر دیگر یوٹیلیٹی طریقوں میں ڈیٹا فارمیٹ کنورٹرز (جیسے، toHex (opens in a new tab))، ایڈریس ہیلپرز (جیسے، isAddress (opens in a new tab))، اور ہیش فنکشنز (جیسے، keccak (opens in a new tab)) شامل ہیں۔ ان میں سے بہت سوں کا احاطہ سیریز میں بعد میں کیا جائے گا۔ تمام دستیاب طریقوں اور خصوصیات کو دیکھنے کے لیے، Web3. ٹائپ کر کے اور پیریڈ (نقطہ) کے بعد دو بار ٹیب کی (tab key) دبا کر IPython کے آٹو کمپلیٹ کا استعمال کریں۔
چین سے بات کریں
سہولت بخش طریقے اچھے ہیں، لیکن آئیے بلاک چین کی طرف بڑھتے ہیں۔ اگلا قدم Web3.py کو ایتھیریم نوڈ کے ساتھ بات چیت کرنے کے لیے کنفیگر کرنا ہے۔ یہاں ہمارے پاس IPC، HTTP، یا Websocket پرووائیڈرز استعمال کرنے کا اختیار ہے۔
ہم اس راستے پر نہیں جائیں گے، لیکن HTTP پرووائیڈر کا استعمال کرتے ہوئے ایک مکمل ورک فلو کی مثال کچھ اس طرح ہو سکتی ہے:
- ایک ایتھیریم نوڈ ڈاؤن لوڈ کریں، مثال کے طور پر، Geth (opens in a new tab)۔
- ایک ٹرمینل ونڈو میں Geth شروع کریں اور اس کے نیٹ ورک کو سنک (sync) کرنے کا انتظار کریں۔ ڈیفالٹ HTTP پورٹ
8545ہے، لیکن اسے کنفیگر کیا جا سکتا ہے۔ - Web3.py کو
localhost:8545پر HTTP کے ذریعے نوڈ سے جڑنے کا کہیں۔w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545')) - نوڈ کے ساتھ تعامل کرنے کے لیے
w3انسٹینس کا استعمال کریں۔
اگرچہ یہ کام کرنے کا ایک "حقیقی" طریقہ ہے، لیکن سنکنگ کے عمل میں گھنٹوں لگتے ہیں اور اگر آپ صرف ایک ڈیولپمنٹ انوائرنمنٹ چاہتے ہیں تو یہ غیر ضروری ہے۔ Web3.py اس مقصد کے لیے ایک چوتھا پرووائیڈر پیش کرتا ہے، جو EthereumTesterProvider ہے۔ یہ ٹیسٹر پرووائیڈر ایک نقلی ایتھیریم نوڈ سے جڑتا ہے جس میں نرم پرمیشنز اور کھیلنے کے لیے نقلی کرنسی ہوتی ہے۔
EthereumTesterProvider ایک نقلی نوڈ سے جڑتا ہے اور فوری ڈیولپمنٹ انوائرنمنٹس کے لیے کارآمد ہے۔
اس نقلی نوڈ کو eth-tester (opens in a new tab) کہا جاتا ہے اور ہم نے اسے pip install web3[tester] کمانڈ کے حصے کے طور پر انسٹال کیا تھا۔ Web3.py کو اس ٹیسٹر پرووائیڈر کو استعمال کرنے کے لیے کنفیگر کرنا اتنا ہی آسان ہے جتنا کہ:
1In [4]: w3 = Web3(Web3.EthereumTesterProvider())اب آپ چین پر سرفنگ کرنے کے لیے تیار ہیں! یہ کوئی ایسی بات نہیں جو لوگ کہتے ہوں۔ میں نے ابھی یہ بنائی ہے۔ آئیے ایک فوری دورہ کرتے ہیں۔
فوری دورہ
سب سے پہلے، ایک سینیٹی چیک (sanity check):
1In [5]: w3.is_connected()2Out[5]: Trueچونکہ ہم ٹیسٹر پرووائیڈر استعمال کر رہے ہیں، اس لیے یہ کوئی بہت قیمتی ٹیسٹ نہیں ہے، لیکن اگر یہ فیل ہو جاتا ہے، تو امکان ہے کہ آپ نے w3 ویری ایبل کو انسٹینشی ایٹ (instantiate) کرتے وقت کچھ غلط ٹائپ کیا ہے۔ دوبارہ چیک کریں کہ آپ نے اندرونی قوسین (parentheses) شامل کیے ہیں، یعنی Web3.EthereumTesterProvider()۔
ٹور اسٹاپ #1: اکاؤنٹس
سہولت کے طور پر، ٹیسٹر پرووائیڈر نے کچھ اکاؤنٹس بنائے اور انہیں ٹیسٹ ایتھر کے ساتھ پہلے سے لوڈ کر دیا۔
سب سے پہلے، آئیے ان اکاؤنٹس کی فہرست دیکھتے ہیں:
1In [6]: w3.eth.accounts2Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',3 '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',4 '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...]اگر آپ یہ کمانڈ چلاتے ہیں، تو آپ کو دس اسٹرنگز (strings) کی ایک فہرست نظر آنی چاہیے جو 0x سے شروع ہوتی ہیں۔ ہر ایک پبلک ایڈریس ہے اور، کچھ طریقوں سے، چیکنگ اکاؤنٹ کے اکاؤنٹ نمبر کے مترادف ہے۔ آپ یہ ایڈریس کسی ایسے شخص کو فراہم کریں گے جو آپ کو ایتھر بھیجنا چاہتا ہو۔
جیسا کہ ذکر کیا گیا ہے، ٹیسٹر پرووائیڈر نے ان میں سے ہر اکاؤنٹ کو کچھ ٹیسٹ ایتھر کے ساتھ پہلے سے لوڈ کیا ہے۔ آئیے معلوم کرتے ہیں کہ پہلے اکاؤنٹ میں کتنا ہے:
1In [7]: w3.eth.get_balance(w3.eth.accounts[0])2Out[7]: 1000000000000000000000000یہ بہت سارے صفر ہیں! اس سے پہلے کہ آپ ہنستے ہوئے نقلی بینک کی طرف جائیں، کرنسی کی مالیتوں کے بارے میں پہلے والا سبق یاد کریں۔ ایتھر کی ویلیوز کو سب سے چھوٹی مالیت، wei میں ظاہر کیا جاتا ہے۔ اسے ایتھر میں تبدیل کریں:
1In [8]: w3.from_wei(1000000000000000000000000, 'ether')2Out[8]: Decimal('1000000')ایک ملین ٹیسٹ ایتھر — پھر بھی برا نہیں ہے۔
ٹور اسٹاپ #2: بلاک کا ڈیٹا
آئیے اس نقلی بلاک چین کی اسٹیٹ (state) پر ایک نظر ڈالتے ہیں:
1In [9]: w3.eth.get_block('latest')2Out[9]: AttributeDict({3 'number': 0,4 'hash': HexBytes('0x9469878...'),5 'parentHash': HexBytes('0x0000000...'),6 ...7 'transactions': []8})ایک بلاک کے بارے میں بہت سی معلومات واپس آتی ہیں، لیکن یہاں صرف چند چیزوں کی نشاندہی کرنی ہے:
- بلاک نمبر صفر ہے — اس سے کوئی فرق نہیں پڑتا کہ آپ نے ٹیسٹر پرووائیڈر کو کتنی دیر پہلے کنفیگر کیا تھا۔ اصلی ایتھیریم نیٹ ورک کے برعکس، جو ہر 12 سیکنڈ میں ایک نیا بلاک شامل کرتا ہے، یہ نقل اس وقت تک انتظار کرے گی جب تک آپ اسے کوئی کام نہیں دیتے۔
transactionsایک خالی فہرست ہے، اسی وجہ سے: ہم نے ابھی تک کچھ نہیں کیا ہے۔ یہ پہلا بلاک ایک خالی بلاک ہے، صرف چین کو شروع کرنے کے لیے۔- غور کریں کہ
parentHashصرف خالی بائٹس کا ایک مجموعہ ہے۔ یہ ظاہر کرتا ہے کہ یہ چین کا پہلا بلاک ہے، جسے جینیسس بلاک (genesis block) بھی کہا جاتا ہے۔
ٹور اسٹاپ #3: ٹرانزیکشنز
ہم بلاک صفر پر پھنسے ہوئے ہیں جب تک کہ کوئی زیر التواء ٹرانزیکشن نہ ہو، تو آئیے اسے ایک دیتے ہیں۔ ایک اکاؤنٹ سے دوسرے اکاؤنٹ میں کچھ ٹیسٹ ایتھر بھیجیں:
1In [10]: tx_hash = w3.eth.send_transaction({2 'from': w3.eth.accounts[0],3 'to': w3.eth.accounts[1],4 'value': w3.to_wei(3, 'ether'),5 'gas': 210006})یہ عام طور پر وہ مقام ہوتا ہے جہاں آپ اپنی ٹرانزیکشن کے نئے بلاک میں شامل ہونے کے لیے کئی سیکنڈ تک انتظار کرتے ہیں۔ مکمل عمل کچھ اس طرح ہوتا ہے:
- ایک ٹرانزیکشن جمع کروائیں اور ٹرانزیکشن ہیش کو سنبھال کر رکھیں۔ جب تک ٹرانزیکشن پر مشتمل بلاک بن کر براڈکاسٹ نہیں ہو جاتا، ٹرانزیکشن "زیر التواء (pending)" رہتی ہے۔
tx_hash = w3.eth.send_transaction({ … }) - ٹرانزیکشن کے بلاک میں شامل ہونے کا انتظار کریں:
w3.eth.wait_for_transaction_receipt(tx_hash) - ایپلیکیشن کی منطق (logic) جاری رکھیں۔ کامیاب ٹرانزیکشن دیکھنے کے لیے:
w3.eth.get_transaction(tx_hash)
ہمارا نقلی ماحول ٹرانزیکشن کو فوری طور پر ایک نئے بلاک میں شامل کر دے گا، لہذا ہم فوری طور پر ٹرانزیکشن دیکھ سکتے ہیں:
1In [11]: w3.eth.get_transaction(tx_hash)2Out[11]: AttributeDict({3 'hash': HexBytes('0x15e9fb95dc39...'),4 'blockNumber': 1,5 'transactionIndex': 0,6 'from': '0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',7 'to': '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',8 'value': 3000000000000000000,9 ...10})آپ کو یہاں کچھ جانی پہچانی تفصیلات نظر آئیں گی: from، to، اور value فیلڈز کو ہماری send_transaction کال کے ان پٹس سے مماثل ہونا چاہیے۔ دوسری تسلی بخش بات یہ ہے کہ یہ ٹرانزیکشن بلاک نمبر 1 کے اندر پہلی ٹرانزیکشن ('transactionIndex': 0) کے طور پر شامل کی گئی تھی۔
ہم شامل دونوں اکاؤنٹس کے بیلنس چیک کر کے بھی اس ٹرانزیکشن کی کامیابی کی آسانی سے تصدیق کر سکتے ہیں۔ تین ایتھر ایک سے دوسرے میں منتقل ہونے چاہیے تھے۔
1In [12]: w3.eth.get_balance(w3.eth.accounts[0])2Out[12]: 9999969999790000000000003
4In [13]: w3.eth.get_balance(w3.eth.accounts[1])5Out[13]: 1000003000000000000000000بعد والا اچھا لگ رہا ہے! بیلنس 1,000,000 سے 1,000,003 ایتھر ہو گیا۔ لیکن پہلے اکاؤنٹ کو کیا ہوا؟ ایسا لگتا ہے کہ اس نے تین ایتھر سے کچھ زیادہ کھو دیا ہے۔ افسوس، زندگی میں کچھ بھی مفت نہیں ہے، اور ایتھیریم پبلک نیٹ ورک استعمال کرنے کے لیے ضروری ہے کہ آپ اپنے پیئرز کو ان کے معاون کردار کے لیے معاوضہ دیں۔ ٹرانزیکشن جمع کروانے والے اکاؤنٹ سے ایک چھوٹی سی ٹرانزیکشن فیس کاٹی گئی تھی - یہ فیس جلائی گئی گیس کی مقدار (ایک ETH ٹرانسفر کے لیے گیس کے 21000 یونٹس) کو ایک بیس فیس (base fee) سے ضرب دے کر نکالی جاتی ہے جو نیٹ ورک کی سرگرمی کے لحاظ سے مختلف ہوتی ہے، اس کے علاوہ ایک ٹپ (tip) جو اس ویلیڈیٹر کو جاتی ہے جو ٹرانزیکشن کو بلاک میں شامل کرتا ہے۔
گیس کے بارے میں مزید
اور سانس لیں
ہم کچھ دیر سے یہ کر رہے ہیں، لہذا یہ وقفہ لینے کے لیے ایک اچھی جگہ معلوم ہوتی ہے۔ یہ سلسلہ آگے بھی جاری ہے، اور ہم اس سیریز کے دوسرے حصے میں مزید دریافت کریں گے۔ آنے والے کچھ تصورات: ایک حقیقی نوڈ سے جڑنا، اسمارٹ کانٹریکٹس، اور ٹوکنز۔ کیا آپ کے مزید سوالات ہیں؟ مجھے بتائیں! آپ کی رائے اس بات پر اثر انداز ہوگی کہ ہم یہاں سے کہاں جاتے ہیں۔ Twitter (opens in a new tab) کے ذریعے درخواستوں کا خیرمقدم ہے۔
صفحہ کی آخری اپ ڈیٹ: ۳ مارچ، ۲۰۲۶


