---
title: "ایک ⁦Python⁩ ڈیولپر کا ایتھیریم سے تعارف، حصہ ۱"
description: "ایتھیریم ڈیولپمنٹ کا ایک تعارف، خاص طور پر ان لوگوں کے لیے مفید ہے جو ⁦Python⁩ پروگرامنگ زبان کا علم رکھتے ہیں"
author: "مارک گیرو"
lang: ur
tags: ["Python", "web3.py"]
skill: beginner
breadcrumb: "ایتھیریم ⁦Python⁩ کے ساتھ"
published: 2020-09-08
source: Snake charmers
sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/
---

تو، آپ نے اس ایتھیریم کے بارے میں سنا ہے اور اس کی گہرائیوں میں جانے کے لیے تیار ہیں؟ یہ پوسٹ تیزی سے کچھ بلاک چین کی بنیادی باتوں کا احاطہ کرے گی، پھر آپ کو ایک نقلی ایتھیریم نوڈ کے ساتھ تعامل کرنے کے قابل بنائے گی – بلاک کا ڈیٹا پڑھنا، اکاؤنٹ کے بیلنس چیک کرنا، اور ٹرانزیکشنز بھیجنا۔ اس دوران، ہم ایپس بنانے کے روایتی طریقوں اور اس نئے لامركزی نمونے کے درمیان فرق کو نمایاں کریں گے۔

## (نرم) پیشگی شرائط {#soft-prerequisites}

یہ پوسٹ ڈیولپرز کی ایک وسیع رینج کے لیے قابل رسائی ہونے کی خواہش رکھتی ہے۔ اس میں [<span dir="ltr">Python</span> ٹولز](/developers/docs/programming-languages/python/) شامل ہوں گے، لیکن وہ صرف خیالات کو سمجھانے کا ایک ذریعہ ہیں – اگر آپ <span dir="ltr">Python</span> ڈیولپر نہیں ہیں تو کوئی مسئلہ نہیں۔ تاہم، میں آپ کے پہلے سے موجود علم کے بارے میں صرف چند مفروضے قائم کروں گا، تاکہ ہم تیزی سے ایتھیریم سے متعلقہ حصوں کی طرف بڑھ سکیں۔

مفروضے:

- آپ ٹرمینل کا استعمال جانتے ہیں،
- آپ نے <span dir="ltr">Python</span> کوڈ کی چند لائنیں لکھی ہیں،
- آپ کی مشین پر <span dir="ltr">Python</span> کا ورژن <span dir="ltr">3.6</span> یا اس سے زیادہ انسٹال ہے (ایک [ورچوئل انوائرنمنٹ](https://realpython.com/effective-python-environment/#virtual-environments) کے استعمال کی سختی سے حوصلہ افزائی کی جاتی ہے)، اور
- آپ نے `pip` استعمال کیا ہے، جو کہ <span dir="ltr">Python</span> کا پیکیج انسٹالر ہے۔
  ایک بار پھر، اگر ان میں سے کوئی بھی بات درست نہیں ہے، یا آپ اس مضمون میں موجود کوڈ کو دوبارہ چلانے کا ارادہ نہیں رکھتے، تب بھی آپ ممکنہ طور پر اسے بخوبی سمجھ سکیں گے۔

## بلاک چینز، مختصراً {#blockchains-briefly}

ایتھیریم کو بیان کرنے کے کئی طریقے ہیں، لیکن اس کے مرکز میں ایک بلاک چین ہے۔ بلاک چینز بلاکس کے ایک سلسلے سے بنی ہوتی ہیں، تو آئیے وہیں سے شروع کرتے ہیں۔ آسان ترین الفاظ میں، ایتھیریم بلاک چین پر ہر بلاک صرف کچھ میٹا ڈیٹا اور ٹرانزیکشنز کی ایک فہرست ہوتا ہے۔ <span dir="ltr">JSON</span> فارمیٹ میں، یہ کچھ اس طرح لگتا ہے:

```json
{
   "number": 1234567,
   "hash": "0xabc123...",
   "parentHash": "0xdef456...",
   ...,
   "transactions": [...]
}
```

ہر [بلاک](/developers/docs/blocks/) میں اس سے پہلے آنے والے بلاک کا حوالہ ہوتا ہے؛ `parentHash` محض پچھلے بلاک کا ہیش ہے۔

<FeaturedText>نوٹ: ایتھیریم مقررہ سائز کی قدریں ("ہیشز") تیار کرنے کے لیے باقاعدگی سے <a href="https://wikipedia.org/wiki/Hash_function">ہیش فنکشنز</a> کا استعمال کرتا ہے۔ ہیشز ایتھیریم میں ایک اہم کردار ادا کرتے ہیں، لیکن فی الحال آپ انہیں منفرد <span dir="ltr">IDs</span> کے طور پر سمجھ سکتے ہیں۔</FeaturedText>

![A diagram depicting a blockchain including the data inside  each block](./blockchain-diagram.png)

_ایک بلاک چین بنیادی طور پر ایک لنکڈ لسٹ (linked list) ہے؛ ہر بلاک میں پچھلے بلاک کا حوالہ ہوتا ہے۔_

یہ ڈیٹا اسٹرکچر کوئی نئی چیز نہیں ہے، لیکن وہ اصول (یعنی پیئر ٹو پیئر پروٹوکول) جو نیٹ ورک کو کنٹرول کرتے ہیں، وہ نئے ہیں۔ کوئی مرکزی اتھارٹی نہیں ہے؛ نیٹ ورک کو برقرار رکھنے کے لیے پیئرز کے نیٹ ورک کو آپس میں تعاون کرنا پڑتا ہے، اور یہ فیصلہ کرنے کے لیے مقابلہ کرنا پڑتا ہے کہ اگلے بلاک میں کن ٹرانزیکشنز کو شامل کیا جائے۔ لہذا، جب آپ کسی دوست کو کچھ رقم بھیجنا چاہتے ہیں، تو آپ کو اس ٹرانزیکشن کو نیٹ ورک پر نشر کرنا ہوگا، اور پھر اس کے آنے والے بلاک میں شامل ہونے کا انتظار کرنا ہوگا۔

بلاک چین کے لیے یہ تصدیق کرنے کا واحد طریقہ کہ رقم واقعی ایک صارف سے دوسرے صارف کو بھیجی گئی تھی، یہ ہے کہ اس بلاک چین کی مقامی کرنسی (یعنی اسی کے ذریعے بنائی اور کنٹرول کی گئی) استعمال کی جائے۔ ایتھیریم میں، اس کرنسی کو ایتھر کہا جاتا ہے، اور ایتھیریم بلاک چین میں اکاؤنٹ کے بیلنس کا واحد سرکاری ریکارڈ موجود ہوتا ہے۔

## ایک نیا نمونہ {#a-new-paradigm}

اس نئے لامركزی ٹیک اسٹیک نے نئے ڈیولپر ٹولز کو جنم دیا ہے۔ ایسے ٹولز کئی پروگرامنگ زبانوں میں موجود ہیں، لیکن ہم اسے <span dir="ltr">Python</span> کے نقطہ نظر سے دیکھیں گے۔ دوبارہ بتاتے چلیں: یہاں تک کہ اگر <span dir="ltr">Python</span> آپ کی پسندیدہ زبان نہیں ہے، تب بھی آپ کو اسے سمجھنے میں زیادہ پریشانی نہیں ہونی چاہیے۔

<span dir="ltr">Python</span> ڈیولپرز جو ایتھیریم کے ساتھ تعامل کرنا چاہتے ہیں، وہ ممکنہ طور پر [Web3.py](https://web3py.readthedocs.io/) کا انتخاب کریں گے۔ <span dir="ltr">Web3.py</span> ایک لائبریری ہے جو آپ کے ایتھیریم نوڈ سے جڑنے، اور پھر اس سے ڈیٹا بھیجنے اور وصول کرنے کے طریقے کو بہت آسان بناتی ہے۔

<FeaturedText>نوٹ: "ایتھیریم نوڈ" اور "ایتھیریم کلائنٹ" کو ایک دوسرے کی جگہ استعمال کیا جاتا ہے۔ دونوں صورتوں میں، اس سے مراد وہ سافٹ ویئر ہے جو ایتھیریم نیٹ ورک کا کوئی شریک چلاتا ہے۔ یہ سافٹ ویئر بلاک کا ڈیٹا پڑھ سکتا ہے، چین میں نئے بلاکس شامل ہونے پر اپ ڈیٹس وصول کر سکتا ہے، نئی ٹرانزیکشنز نشر کر سکتا ہے، اور بہت کچھ۔ تکنیکی طور پر، کلائنٹ سافٹ ویئر ہے، اور نوڈ وہ کمپیوٹر ہے جو اس سافٹ ویئر کو چلا رہا ہے۔</FeaturedText>

[ایتھیریم کلائنٹس](/developers/docs/nodes-and-clients/) کو اس طرح کنفیگر کیا جا سکتا ہے کہ ان تک [<span dir="ltr">IPC</span>](https://wikipedia.org/wiki/Inter-process_communication)، <span dir="ltr">HTTP</span>، یا <span dir="ltr">Websockets</span> کے ذریعے رسائی حاصل کی جا سکے، لہذا <span dir="ltr">Web3.py</span> کو اس کنفیگریشن کی عکس بندی کرنے کی ضرورت ہوگی۔ <span dir="ltr">Web3.py</span> ان کنکشن کے اختیارات کو **پرووائیڈرز** کہتا ہے۔ آپ <span dir="ltr">Web3.py</span> انسٹینس کو اپنے نوڈ کے ساتھ جوڑنے کے لیے ان تینوں پرووائیڈرز میں سے کسی ایک کا انتخاب کرنا چاہیں گے۔

![A diagram showing how web3.py uses IPC to connect your application to an Ethereum node](./web3py-and-nodes.png)

_ایتھیریم نوڈ اور <span dir="ltr">Web3.py</span> کو ایک ہی پروٹوکول کے ذریعے بات چیت کرنے کے لیے کنفیگر کریں، مثال کے طور پر، اس خاکہ میں <span dir="ltr">IPC</span>۔_

ایک بار جب <span dir="ltr">Web3.py</span> مناسب طریقے سے کنفیگر ہو جائے، تو آپ بلاک چین کے ساتھ تعامل شروع کر سکتے ہیں۔ آنے والے مواد کے پیش نظارے کے طور پر <span dir="ltr">Web3.py</span> کے استعمال کی چند مثالیں یہ ہیں:

```python
# بلاک ڈیٹا پڑھیں:
w3.eth.get_block('latest')

# ایک ٹرانزیکشن بھیجیں:
w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...})
```

## انسٹالیشن {#installation}

اس رہنمائی میں، ہم صرف ایک <span dir="ltr">Python</span> انٹرپریٹر کے اندر کام کریں گے۔ ہم کوئی ڈائریکٹریز، فائلیں، کلاسز یا فنکشنز نہیں بنائیں گے۔

<FeaturedText>نوٹ: ذیل کی مثالوں میں، وہ کمانڈز جو `$` سے شروع ہوتی ہیں، انہیں ٹرمینل میں چلانے کا ارادہ ہے۔ (`$` ٹائپ نہ کریں، یہ صرف لائن کے آغاز کی نشاندہی کرتا ہے۔)</FeaturedText>

سب سے پہلے، دریافت کرنے کے لیے ایک صارف دوست ماحول کے لیے [<span dir="ltr">IPython</span>](https://ipython.org/) انسٹال کریں۔ <span dir="ltr">IPython</span> دیگر خصوصیات کے علاوہ ٹیب تکمیل پیش کرتا ہے، جس سے یہ دیکھنا بہت آسان ہو جاتا ہے کہ <span dir="ltr">Web3.py</span> کے اندر کیا ممکن ہے۔

```bash
pip install ipython
```

<span dir="ltr">Web3.py</span> کو `web3` کے نام سے شائع کیا گیا ہے۔ اسے اس طرح انسٹال کریں:

```bash
pip install web3
```

ایک اور بات – ہم بعد میں ایک بلاک چین کی نقل کرنے جا رہے ہیں، جس کے لیے مزید چند انحصار کی ضرورت ہے۔ آپ انہیں اس کے ذریعے انسٹال کر سکتے ہیں:

```bash
pip install 'web3[tester]'
```

آپ بالکل تیار ہیں!

نوٹ: `web3[tester]` پیکیج <span dir="ltr">Python 3.10.xx</span> تک کام کرتا ہے۔

## ایک سینڈ باکس تیار کریں {#spin-up-a-sandbox}

اپنے ٹرمینل میں `ipython` چلا کر ایک نیا <span dir="ltr">Python</span> ماحول کھولیں۔ یہ `python` چلانے کے مترادف ہے، لیکن اس میں مزید خصوصیات شامل ہیں۔

```bash
ipython
```

یہ آپ کے چلائے جا رہے <span dir="ltr">Python</span> اور <span dir="ltr">IPython</span> کے ورژنز کے بارے میں کچھ معلومات پرنٹ کرے گا، پھر آپ کو ان پٹ کے انتظار میں ایک پرامپٹ نظر آنا چاہیے:

```python
In [1]:
```

اب آپ ایک انٹرایکٹو <span dir="ltr">Python</span> شیل دیکھ رہے ہیں۔ بنیادی طور پر، یہ کھیلنے کے لیے ایک سینڈ باکس ہے۔ اگر آپ یہاں تک پہنچ گئے ہیں، تو اب <span dir="ltr">Web3.py</span> کو امپورٹ کرنے کا وقت ہے:

```python
In [1]: from web3 import Web3
```

## Web3 ماڈیول کا تعارف {#introducing-the-web3-module}

ایتھیریم کا گیٹ وے ہونے کے علاوہ، [<span dir="ltr">Web3</span>](https://web3py.readthedocs.io/en/stable/overview.html#base-api) ماڈیول چند سہولت بخش فنکشنز پیش کرتا ہے۔ آئیے ان میں سے کچھ کو دریافت کریں۔

ایک ایتھیریم ایپلی کیشن میں، آپ کو عام طور پر کرنسی کی اکائیوں کو تبدیل کرنے کی ضرورت ہوگی۔ <span dir="ltr">Web3</span> ماڈیول خاص طور پر اس کے لیے چند مددگار طریقے فراہم کرتا ہے: [<span dir="ltr">from_wei</span>](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.from_wei) اور [<span dir="ltr">to_wei</span>](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.to_wei)۔

<FeaturedText>
نوٹ: کمپیوٹرز اعشاریہ کی ریاضی کو سنبھالنے میں بدنام زمانہ حد تک خراب ہیں۔ اس سے بچنے کے لیے، ڈیولپرز اکثر ڈالر کی رقم کو سینٹس میں اسٹور کرتے ہیں۔ مثال کے طور پر، <span dir="ltr">$5.99</span> کی قیمت والی چیز کو ڈیٹا بیس میں <span dir="ltr">599</span> کے طور پر اسٹور کیا جا سکتا ہے۔

<b>ایتھر</b> میں ٹرانزیکشنز کو سنبھالتے وقت بھی اسی طرح کا نمونہ استعمال کیا جاتا ہے۔ تاہم، دو اعشاریہ پوائنٹس کے بجائے، ایتھر میں <span dir="ltr">18</span> ہوتے ہیں! ایتھر کی سب سے چھوٹی اکائی کو <b>Wei</b> کہا جاتا ہے، لہذا ٹرانزیکشنز بھیجتے وقت یہی قدر متعین کی جاتی ہے۔

<span dir="ltr">1 ether = 1000000000000000000 wei</span>

<span dir="ltr">1 wei = 0.000000000000000001 ether</span>

</FeaturedText>

کچھ قدروں کو <span dir="ltr">Wei</span> میں اور اس سے تبدیل کرنے کی کوشش کریں۔ نوٹ کریں کہ ایتھر اور <span dir="ltr">Wei</span> کے درمیان [کئی اکائیوں کے نام موجود ہیں](https://web3py.readthedocs.io/en/stable/troubleshooting.html#how-do-i-convert-currency-denominations)۔ ان میں سے ایک مشہور نام **Gwei** ہے، کیونکہ اکثر لین دین کی فیس اسی میں ظاہر کی جاتی ہے۔

```python
In [2]: Web3.to_wei(1, 'ether')
Out[2]: 1000000000000000000

In [3]: Web3.from_wei(500000000, 'gwei')
Out[3]: Decimal('0.5')
```

<span dir="ltr">Web3</span> ماڈیول پر دیگر یوٹیلیٹی طریقوں میں ڈیٹا فارمیٹ کنورٹرز (جیسے، [`toHex`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toHex))، ایڈریس ہیلپرز (جیسے، [`isAddress`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.isAddress))، اور ہیش فنکشنز (جیسے، [`keccak`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.keccak)) شامل ہیں۔ ان میں سے بہت سوں کا احاطہ سیریز میں بعد میں کیا جائے گا۔ تمام دستیاب طریقوں اور خصوصیات کو دیکھنے کے لیے، `Web3` ٹائپ کر کے اور پیریڈ (نقطہ) کے بعد دو بار ٹیب کی دبا کر <span dir="ltr">IPython</span> کی آٹو کمپلیٹ کا استعمال کریں۔

## چین سے بات کریں {#talk-to-the-chain}

سہولت بخش طریقے بہت اچھے ہیں، لیکن آئیے بلاک چین کی طرف بڑھتے ہیں۔ اگلا قدم <span dir="ltr">Web3.py</span> کو ایک ایتھیریم نوڈ کے ساتھ بات چیت کرنے کے لیے کنفیگر کرنا ہے۔ یہاں ہمارے پاس <span dir="ltr">IPC</span>، <span dir="ltr">HTTP</span>، یا <span dir="ltr">Websocket</span> پرووائیڈرز استعمال کرنے کا اختیار ہے۔

ہم اس راستے پر نہیں جائیں گے، لیکن <span dir="ltr">HTTP</span> پرووائیڈر کا استعمال کرتے ہوئے ایک مکمل ورک فلو کی مثال کچھ اس طرح ہو سکتی ہے:

- ایک ایتھیریم نوڈ ڈاؤن لوڈ کریں، مثلاً، [<span dir="ltr">Geth</span>](https://geth.ethereum.org/)۔
- ایک ٹرمینل ونڈو میں <span dir="ltr">Geth</span> شروع کریں اور اس کے نیٹ ورک کے ساتھ ہم آہنگی کا انتظار کریں۔ ڈیفالٹ <span dir="ltr">HTTP</span> پورٹ `8545` ہے، لیکن اسے کنفیگر کیا جا سکتا ہے۔
- <span dir="ltr">Web3.py</span> کو بتائیں کہ وہ <span dir="ltr">HTTP</span> کے ذریعے، `localhost:8545` پر نوڈ سے جڑے۔
  `w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))`
- نوڈ کے ساتھ تعامل کرنے کے لیے `w3` انسٹینس کا استعمال کریں۔

اگرچہ یہ کام کرنے کا ایک "حقیقی" طریقہ ہے، لیکن ہم آہنگی کے عمل میں گھنٹوں لگتے ہیں اور اگر آپ صرف ایک ڈیولپمنٹ ماحول چاہتے ہیں تو یہ غیر ضروری ہے۔ <span dir="ltr">Web3.py</span> اس مقصد کے لیے ایک چوتھا پرووائیڈر، **EthereumTesterProvider** پیش کرتا ہے۔ یہ ٹیسٹر پرووائیڈر ایک نقلی ایتھیریم نوڈ سے جڑتا ہے جس میں نرم اجازتیں اور کھیلنے کے لیے نقلی کرنسی ہوتی ہے۔

![A diagram showing the EthereumTesterProvider linking your web3.py application to a simulated Ethereum node](./ethereumtesterprovider.png)

_EthereumTesterProvider ایک نقلی نوڈ سے جڑتا ہے اور فوری ڈیولپمنٹ ماحول کے لیے کارآمد ہے۔_

اس نقلی نوڈ کو [<span dir="ltr">eth-tester</span>](https://github.com/ethereum/eth-tester) کہا جاتا ہے اور ہم نے اسے `pip install web3[tester]` کمانڈ کے حصے کے طور پر انسٹال کیا تھا۔ اس ٹیسٹر پرووائیڈر کو استعمال کرنے کے لیے <span dir="ltr">Web3.py</span> کو کنفیگر کرنا اتنا ہی آسان ہے جتنا کہ:

```python
In [4]: w3 = Web3(Web3.EthereumTesterProvider())
```

اب آپ چین پر سرفنگ کرنے کے لیے تیار ہیں! یہ کوئی ایسی بات نہیں جو لوگ کہتے ہوں۔ میں نے ابھی یہ خود سے بنائی ہے۔ آئیے ایک فوری دورہ کرتے ہیں۔

## فوری دورہ {#the-quick-tour}

سب سے پہلے، ایک بنیادی جانچ:

```python
In [5]: w3.is_connected()
Out[5]: True
```

چونکہ ہم ٹیسٹر پرووائیڈر استعمال کر رہے ہیں، اس لیے یہ کوئی بہت قیمتی ٹیسٹ نہیں ہے، لیکن اگر یہ ناکام ہو جاتا ہے، تو امکان ہے کہ آپ نے `w3` متغیر کو شروع کرتے وقت کچھ غلط ٹائپ کیا ہے۔ دوبارہ چیک کریں کہ آپ نے اندرونی قوسین شامل کیے ہیں، یعنی `Web3.EthereumTesterProvider()`۔

## دورے کا پہلا پڑاؤ: [اکاؤنٹس](/developers/docs/accounts/) {#tour-stop-1-accounts}

سہولت کے طور پر، ٹیسٹر پرووائیڈر نے کچھ اکاؤنٹس بنائے اور ان میں پہلے سے ٹیسٹ ایتھر لوڈ کر دیا۔

سب سے پہلے، آئیے ان اکاؤنٹس کی فہرست دیکھتے ہیں:

```python
In [6]: w3.eth.accounts
Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
 '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
 '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...]
```

اگر آپ یہ کمانڈ چلاتے ہیں، تو آپ کو دس اسٹرنگز کی ایک فہرست نظر آنی چاہیے جو `0x` سے شروع ہوتی ہیں۔ ہر ایک **عوامی پتہ** ہے اور، کچھ طریقوں سے، چیکنگ اکاؤنٹ کے اکاؤنٹ نمبر کے مترادف ہے۔ آپ یہ پتہ کسی ایسے شخص کو فراہم کریں گے جو آپ کو ایتھر بھیجنا چاہتا ہو۔

جیسا کہ ذکر کیا گیا ہے، ٹیسٹر پرووائیڈر نے ان میں سے ہر ایک اکاؤنٹ میں کچھ ٹیسٹ ایتھر پہلے سے لوڈ کر دیا ہے۔ آئیے معلوم کرتے ہیں کہ پہلے اکاؤنٹ میں کتنا ہے:

```python
In [7]: w3.eth.get_balance(w3.eth.accounts[0])
Out[7]: 1000000000000000000000000
```

یہ تو بہت سارے صفر ہیں! اس سے پہلے کہ آپ ہنستے ہوئے نقلی بینک کی طرف جائیں، کرنسی کی اکائیوں کے بارے میں پہلے والا سبق یاد کریں۔ ایتھر کی قدروں کو سب سے چھوٹی اکائی، <span dir="ltr">Wei</span> میں ظاہر کیا جاتا ہے۔ اسے ایتھر میں تبدیل کریں:

```python
In [8]: w3.from_wei(1000000000000000000000000, 'ether')
Out[8]: Decimal('1000000')
```

ایک ملین ٹیسٹ ایتھر — پھر بھی برا نہیں ہے۔

## دورے کا دوسرا پڑاؤ: بلاک کا ڈیٹا {#tour-stop-2-block-data}

آئیے اس نقلی بلاک چین کی حالت پر ایک نظر ڈالتے ہیں:

```python
In [9]: w3.eth.get_block('latest')
Out[9]: AttributeDict({
   'number': 0,
   'hash': HexBytes('0x9469878...'),
   'parentHash': HexBytes('0x0000000...'),
   ...
   'transactions': []
})
```

ایک بلاک کے بارے میں بہت سی معلومات واپس آتی ہیں، لیکن یہاں صرف چند چیزوں کی نشاندہی کرنی ہے:

- بلاک نمبر صفر ہے — اس سے کوئی فرق نہیں پڑتا کہ آپ نے ٹیسٹر پرووائیڈر کو کتنی دیر پہلے کنفیگر کیا تھا۔ اصلی ایتھیریم نیٹ ورک کے برعکس، جو ہر <span dir="ltr">12</span> سیکنڈ میں ایک نیا بلاک شامل کرتا ہے، یہ نقل اس وقت تک انتظار کرے گی جب تک کہ آپ اسے کرنے کے لیے کوئی کام نہ دیں۔
- `transactions` ایک خالی فہرست ہے، اسی وجہ سے: ہم نے ابھی تک کچھ نہیں کیا ہے۔ یہ پہلا بلاک ایک **خالی بلاک** ہے، صرف چین کو شروع کرنے کے لیے۔
- غور کریں کہ `parentHash` صرف خالی بائٹس کا ایک مجموعہ ہے۔ یہ اس بات کی نشاندہی کرتا ہے کہ یہ چین کا پہلا بلاک ہے، جسے **ابتدائی بلاک** بھی کہا جاتا ہے۔

## دورے کا تیسرا پڑاؤ: [ٹرانزیکشنز](/developers/docs/transactions/) {#tour-stop-3-transactions}

ہم بلاک صفر پر اس وقت تک پھنسے ہوئے ہیں جب تک کہ کوئی زیرِ التوا لین دین نہ ہو، تو آئیے اسے ایک دیتے ہیں۔ ایک اکاؤنٹ سے دوسرے اکاؤنٹ میں کچھ ٹیسٹ ایتھر بھیجیں:

```python
In [10]: tx_hash = w3.eth.send_transaction({
   'from': w3.eth.accounts[0],
   'to': w3.eth.accounts[1],
   'value': w3.to_wei(3, 'ether'),
   'gas': 21000
})
```

یہ عام طور پر وہ مقام ہوتا ہے جہاں آپ اپنی ٹرانزیکشن کے نئے بلاک میں شامل ہونے کے لیے کئی سیکنڈ تک انتظار کرتے ہیں۔ مکمل عمل کچھ اس طرح ہوتا ہے:

1. ایک ٹرانزیکشن جمع کروائیں اور ٹرانزیکشن ہیش کو سنبھال کر رکھیں۔ جب تک ٹرانزیکشن پر مشتمل بلاک بن کر نشر نہیں ہو جاتا، ٹرانزیکشن "زیرِ التوا" رہتی ہے۔
   `tx_hash = w3.eth.send_transaction({ … })`
2. ٹرانزیکشن کے بلاک میں شامل ہونے کا انتظار کریں:
   `w3.eth.wait_for_transaction_receipt(tx_hash)`
3. ایپلی کیشن کی منطق جاری رکھیں۔ کامیاب ٹرانزیکشن دیکھنے کے لیے:
   `w3.eth.get_transaction(tx_hash)`

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

```python
In [11]: w3.eth.get_transaction(tx_hash)
Out[11]: AttributeDict({
   'hash': HexBytes('0x15e9fb95dc39...'),
   'blockNumber': 1,
   'transactionIndex': 0,
   'from': '0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
   'to': '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
   'value': 3000000000000000000,
   ...
})
```

آپ کو یہاں کچھ جانی پہچانی تفصیلات نظر آئیں گی: `from`، `to`، اور `value` فیلڈز کو ہماری `send_transaction` کال کے ان پٹس سے مماثل ہونا چاہیے۔ دوسری تسلی بخش بات یہ ہے کہ اس ٹرانزیکشن کو بلاک نمبر <span dir="ltr">1</span> کے اندر پہلی ٹرانزیکشن (`'transactionIndex': 0`) کے طور پر شامل کیا گیا تھا۔

ہم شامل دونوں اکاؤنٹس کے بیلنس چیک کر کے بھی اس ٹرانزیکشن کی کامیابی کی آسانی سے تصدیق کر سکتے ہیں۔ تین ایتھر ایک سے دوسرے میں منتقل ہونے چاہیے تھے۔

```python
In [12]: w3.eth.get_balance(w3.eth.accounts[0])
Out[12]: 999996999979000000000000

In [13]: w3.eth.get_balance(w3.eth.accounts[1])
Out[13]: 1000003000000000000000000
```

مؤخر الذکر (دوسرا اکاؤنٹ) ٹھیک لگ رہا ہے! بیلنس <span dir="ltr">1,000,000</span> سے <span dir="ltr">1,000,003</span> ایتھر ہو گیا۔ لیکن پہلے اکاؤنٹ کو کیا ہوا؟ ایسا لگتا ہے کہ اس نے تین ایتھر سے کچھ زیادہ کھو دیا ہے۔ افسوس، زندگی میں کچھ بھی مفت نہیں ہے، اور ایتھیریم پبلک نیٹ ورک استعمال کرنے کے لیے ضروری ہے کہ آپ اپنے پیئرز کو ان کے معاون کردار کے لیے معاوضہ دیں۔ ٹرانزیکشن جمع کروانے والے اکاؤنٹ سے ایک چھوٹی سی لین دین کی فیس کاٹی گئی تھی - یہ فیس جلائی گئی گیس کی مقدار (<span dir="ltr">ETH</span> کی منتقلی کے لیے گیس کے <span dir="ltr">21000</span> یونٹس) کو ایک بنیادی فیس سے ضرب دے کر نکالی جاتی ہے جو نیٹ ورک کی سرگرمی کے لحاظ سے مختلف ہوتی ہے، اس کے علاوہ ایک ٹپ جو اس توثیق کار کو جاتی ہے جو ٹرانزیکشن کو بلاک میں شامل کرتا ہے۔

[گیس](/developers/docs/gas/#post-london) کے بارے میں مزید

<FeaturedText>نوٹ: پبلک نیٹ ورک پر، نیٹ ورک کی طلب اور آپ کتنی جلدی ٹرانزیکشن پر کارروائی کروانا چاہتے ہیں، اس کی بنیاد پر لین دین کی فیس متغیر ہوتی ہے۔ اگر آپ اس بات کی تفصیل میں دلچسپی رکھتے ہیں کہ فیس کا حساب کیسے لگایا جاتا ہے، تو میری پچھلی پوسٹ دیکھیں کہ <a href="https://medium.com/ethereum-grid/ethereum-101-how-are-transactions-included-in-a-block-9ae5f491853f">ٹرانزیکشنز کو بلاک میں کیسے شامل کیا جاتا ہے</a>۔</FeaturedText>

## اور سانس لیں {#and-breathe}

ہم کافی دیر سے یہ کر رہے ہیں، لہذا یہ وقفہ لینے کے لیے ایک اچھی جگہ معلوم ہوتی ہے۔ یہ گہرائیوں کا سفر جاری ہے، اور ہم اس سیریز کے دوسرے حصے میں کھوج جاری رکھیں گے۔ آنے والے کچھ تصورات: ایک حقیقی نوڈ سے جڑنا، اسمارٹ کانٹریکٹس، اور ٹوکنز۔ کیا آپ کے مزید سوالات ہیں؟ مجھے بتائیں! آپ کی رائے اس بات پر اثر انداز ہوگی کہ ہم یہاں سے کہاں جاتے ہیں۔ [ٹوئٹر](https://twitter.com/wolovim) کے ذریعے درخواستوں کا خیرمقدم ہے۔