Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
---
title: "اسمارٹ کنٹریکٹس کو کمپائل کرنا"
description: "یہ وضاحت کہ آپ کو اسمارٹ کنٹریکٹس کو کمپائل کرنے کی ضرورت کیوں ہے اور کمپائلیشن دراصل کیا کرتا ہے۔"
lang: ur-in
incomplete: true
---

آپ کو اپنے کنٹریکٹ کو کمپائل کرنے کی ضرورت ہے تاکہ آپ کی ویب ایپ اور Ethereum ورچوئل مشین (EVM) اسے سمجھ سکیں۔

## شرائط {#prerequisites}

کمپائلیشن کے بارے میں پڑھنے سے پہلے آپ کو [اسمارٹ کنٹریکٹس](/developers/docs/smart-contracts/) اور [Ethereum ورچوئل مشین](/developers/docs/evm/) کے تعارف کو پڑھنا مفید معلوم ہو سکتا ہے۔

## EVM {#the-evm}

[EVM](/developers/docs/evm/) کے لیے آپ کے کنٹریکٹ کو چلانے کے قابل ہونے کے لیے، اسے **بائٹ کوڈ** میں ہونا چاہیے۔ کمپائلیشن اسے اس میں بدل دیتا ہے:

```solidity
pragma solidity 0.4.24;

contract Greeter {

function greet() public view returns (string memory) {
return "Hello";
}

}
```

**اس میں**

```
PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900
```

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

[آپ کوڈز پر مزید](/developers/docs/evm/opcodes/)

## ویب ایپلیکیشنز {#web-applications}

کمپائلر **ایپلیکیشن بائنری انٹرفیس (ABI)** بھی تیار کرے گا جس کی آپ کو اپنی ایپلیکیشن کے لیے کنٹریکٹ کو سمجھنے اور کنٹریکٹ کے فنکشنز کو کال کرنے کے لیے ضرورت ہوتی ہے۔

ABI ایک JSON فائل ہے جو تعینات کردہ کنٹریکٹ اور اس کے اسمارٹ کنٹریکٹ فنکشنز کو بیان کرتی ہے۔ یہ ویب 2 اور ویب 3 کے درمیان فرق کو ختم کرنے میں مدد کرتا ہے

ایک [JavaScript کلائنٹ لائبریری](/developers/docs/apis/javascript/) **ABI** کو پڑھے گی تاکہ آپ اپنی ویب ایپ کے انٹرفیس میں اپنے اسمارٹ کنٹریکٹ پر کال کر سکیں۔

ذیل میں ERC-20 ٹوکن کنٹریکٹ کے لیے ABI ہے۔ ایک ERC-20 ایک ٹوکن ہے جسے آپ Ethereum پر ٹریڈ کر سکتے ہیں۔

```json
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_spender",
"type": "address"
},
{
"name": "_value",
"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": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"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": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "balance",
"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": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "owner",
"type": "address"
},
{
"indexed": true,
"name": "spender",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
}
]
```

## مزید پڑھیں {#further-reading}

- [ABI کی تفصیلات](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_

## متعلقہ موضوعات {#related-topics}

- [JavaScript کلائنٹ لائبریریز](/developers/docs/apis/javascript/)
- [Ethereum ورچوئل مشین](/developers/docs/evm/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
title: "اسمارٹ کنٹریکٹ کی ترکیب پذیری"
description: "جانیں کہ موجودہ اجزاء کا دوبارہ استعمال کرکے پیچیدہ dapps بنانے کے لیے اسمارٹ کنٹریکٹس کو لیگو بلاکس کی طرح کیسے جوڑا جا سکتا ہے۔"
lang: ur-in
incomplete: true
---

## ایک مختصر تعارف {#a-brief-introduction}

اسمارٹ کنٹریکٹس Ethereum پر پبلک ہیں اور انہیں اوپن APIs کے طور پر سمجھا جا سکتا ہے۔ dapp ڈیولپر بننے کے لیے آپ کو اپنا اسمارٹ کنٹریکٹ لکھنے کی ضرورت نہیں ہے، آپ کو صرف یہ جاننے کی ضرورت ہے کہ ان کے ساتھ کیسے تعامل کیا جائے۔ مثال کے طور پر، آپ اپنی ایپ میں تمام ٹوکن سویپ منطق کو سنبھالنے کے لیے ایک وکندریقرت ایکسچینج، [Uniswap](https://uniswap.exchange/swap) کے موجودہ اسمارٹ کنٹریکٹس کا استعمال کر سکتے ہیں – آپ کو شروع سے شروع کرنے کی ضرورت نہیں ہے۔ ان کے کچھ [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) اور [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) کنٹریکٹس دیکھیں۔

## ترکیب پذیری کیا ہے؟ {#what-is-composability}

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

ایتھیریم میں، ہر اسمارٹ کنٹریکٹ ایک قسم کا لیگو ہے—آپ اپنے پروجیکٹ کے لیے بلڈنگ بلاکس کے طور پر دوسرے پروجیکٹس سے اسمارٹ کنٹریکٹس استعمال کر سکتے ہیں۔ اس کا مطلب ہے کہ آپ کو پہیے کو دوبارہ ایجاد کرنے یا شروع سے تعمیر کرنے میں وقت صرف کرنے کی ضرورت نہیں ہے۔

## ترکیب پذیری کیسے کام کرتی ہے؟ {#how-does-composability-work}

ایتھیریم اسمارٹ کنٹریکٹس عوامی APIs کی طرح ہیں، لہذا کوئی بھی کنٹریکٹ کے ساتھ تعامل کر سکتا ہے یا اضافی فعالیت کے لیے انہیں dapps میں ضم کر سکتا ہے۔ اسمارٹ کنٹریکٹ کی ترکیب پذیری عام طور پر تین اصولوں پر کام کرتی ہے: ماڈیولریٹی، خود مختاری، اور دریافت پذیری:

**1. ماڈیولریٹی**: یہ انفرادی اجزاء کی ایک مخصوص کام انجام دینے کی صلاحیت ہے۔ ایتھیریم میں، ہر اسمارٹ کنٹریکٹ کا ایک مخصوص استعمال کا معاملہ ہوتا ہے (جیسا کہ Uniswap کی مثال میں دکھایا گیا ہے)۔

**2. خود مختاری**: ترکیبی اجزاء کو آزادانہ طور پر کام کرنے کے قابل ہونا چاہیے۔ ایتھیریم میں ہر اسمارٹ کنٹریکٹ خود کار ہے اور نظام کے دوسرے حصوں پر انحصار کیے بغیر کام کر سکتا ہے۔

**3. دریافت پذیری**: ڈیولپرز بیرونی کنٹریکٹس کو کال نہیں کر سکتے یا سافٹ ویئر لائبریریوں کو ایپلی کیشنز میں ضم نہیں کر سکتے اگر سابقہ عوامی طور پر دستیاب نہ ہوں۔ ڈیزائن کے لحاظ سے، اسمارٹ کنٹریکٹس اوپن سورس ہیں؛ کوئی بھی اسمارٹ کنٹریکٹ کو کال کر سکتا ہے یا کوڈ بیس کو فورک کر سکتا ہے۔

## ترکیب پذیری کے فوائد {#benefits-of-composability}

### مختصر ترقیاتی دور {#shorter-development-cycle}

ترکیب پذیری اس کام کو کم کرتی ہے جو ڈیولپرز کو [dapps](/apps/#what-are-dapps) بناتے وقت کرنا پڑتا ہے۔ [جیسا کہ نیول رویکانت کہتے ہیں:](https://twitter.com/naval/status/1444366754650656770) "اوپن سورس کا مطلب ہے کہ ہر مسئلے کو ایک بار حل کرنا پڑتا ہے۔"

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

### زیادہ جدت {#greater-innovation}

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

### بہتر صارف کا تجربہ {#better-user-experience}

ایتھیریم ایکو سسٹم کے اجزاء کے درمیان بین عملیت صارف کے تجربے کو بہتر بناتی ہے۔ صارفین زیادہ فعالیت تک رسائی حاصل کر سکتے ہیں جب dapps بیرونی اسمارٹ کنٹریکٹس کو مربوط کرتے ہیں بجائے اس کے کہ ایک بکھرے ہوئے ایکو سسٹم میں جہاں ایپلی کیشنز آپس میں بات چیت نہیں کر سکتیں۔

ہم بین عملیت کے فوائد کو واضح کرنے کے لیے ثالثی ٹریڈنگ سے ایک مثال استعمال کریں گے:

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

ایسی صورت حال میں جہاں آپ کے پاس تجارت کو پورا کرنے کے لیے کافی فنڈز نہیں ہیں، فلیش لون مثالی ہو سکتا ہے۔ [فلیش لونز](/defi/#flash-loans) انتہائی تکنیکی ہیں، لیکن بنیادی خیال یہ ہے کہ آپ اثاثے (بغیر ضمانت کے) ادھار لے سکتے ہیں اور _ایک_ ٹرانزیکشن کے اندر واپس کر سکتے ہیں۔

ہماری ابتدائی مثال پر واپس جائیں تو، ایک ثالثی تاجر ایک بڑا فلیش لون لے سکتا ہے، `ایکسچینج B` سے ٹوکن خرید سکتا ہے، انہیں `ایکسچینج A` پر بیچ سکتا ہے، سرمایہ + سود واپس کر سکتا ہے، اور اسی ٹرانزیکشن کے اندر منافع رکھ سکتا ہے۔ اس پیچیدہ منطق کے لیے متعدد کنٹریکٹس پر کالوں کو یکجا کرنے کی ضرورت ہوتی ہے، جو ممکن نہ ہوتا اگر اسمارٹ کنٹریکٹس میں بین عملیت کی کمی ہوتی۔

## ایتھیریم میں ترکیب پذیری کی مثالیں {#composability-in-ethereum}

### ٹوکن سویپس {#token-swaps}

اگر آپ کوئی ایسا dapp بناتے ہیں جس میں ETH میں ادائیگی کی ضرورت ہوتی ہے، تو آپ ٹوکن سویپ منطق کو ضم کرکے صارفین کو دوسرے ERC-20 ٹوکنز میں ادائیگی کرنے کی اجازت دے سکتے ہیں۔ کنٹریکٹ کے ذریعے کال کیے گئے فنکشن کو انجام دینے سے پہلے کوڈ خود بخود صارف کے ٹوکن کو ETH میں تبدیل کر دے گا۔

### حکمرانی {#governance}

[DAO](/dao/) کے لیے مخصوص حکمرانی کے نظام بنانا مہنگا اور وقت طلب ہو سکتا ہے۔ اس کے بجائے، آپ اپنے DAO کو بوٹسٹریپ کرنے کے لیے ایک اوپن سورس گورننس ٹول کٹ، جیسے [Aragon Client](https://client.aragon.org/) کا استعمال کر سکتے ہیں تاکہ فوری طور پر ایک گورننس فریم ورک بنایا جا سکے۔

### شناخت کا انتظام {#identity-management}

ایک حسب ضرورت تصدیقی نظام بنانے یا مرکزی فراہم کنندگان پر انحصار کرنے کے بجائے، آپ صارفین کے لیے تصدیق کا انتظام کرنے کے لیے وکندریقرت شناختی (DID) ٹولز کو مربوط کر سکتے ہیں۔ ایک مثال [SpruceID](https://www.spruceid.com/) ہے، ایک اوپن سورس ٹول کٹ جو "ایتھیریم کے ساتھ سائن ان کریں" کی فعالیت پیش کرتی ہے جو صارفین کو ایتھیریم والیٹ کے ساتھ شناخت کی تصدیق کرنے دیتی ہے۔

## متعلقہ ٹیوٹوریلز {#related-tutorials}

- [create-eth-app کے ساتھ اپنے dapp فرنٹ اینڈ ڈیولپمنٹ کو کک اسٹارٹ کریں](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– اس بات کا ایک جائزہ کہ مقبول اسمارٹ کنٹریکٹس کے ساتھ ایپس بنانے کے لیے create-eth-app کا استعمال کیسے کریں۔_

## مزید پڑھیں {#further-reading}

_کسی کمیونٹی وسیلے کے بارے میں جانتے ہیں جس نے آپ کی مدد کی ہو؟ اس صفحہ میں ترمیم کریں اور اسے شامل کریں!_

- [ترکیب پذیری جدت ہے](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/)
- [Web3 کے لیے ترکیب پذیری کیوں اہم ہے](https://hackernoon.com/why-composability-matters-for-web3)
- [ترکیب پذیری کیا ہے؟](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.)
Loading