اہم مواد پر جائیں
Change page

اسمارٹ کنٹریکٹ کی زبانیں

صفحہ کی آخری تازہ کاری: 14 فروری، 2026

Ethereum کے بارے میں ایک بڑی بات یہ ہے کہ اسمارٹ کنٹریکٹس کو نسبتاً ڈیولپر-دوست زبانوں کا استعمال کرتے ہوئے پروگرام کیا جا سکتا ہے۔ اگر آپ Python یا کسی بھی کرلی-بریکٹ زبانopens in a new tab کے ساتھ تجربہ کار ہیں، تو آپ کو مانوس سنٹیکس والی زبان مل سکتی ہے۔

دو سب سے زیادہ فعال اور برقرار رکھی جانے والی زبانیں ہیں:

  • Solidity
  • Vyper

Remix IDE، Solidity اور Vyper دونوں میں کنٹریکٹس بنانے اور ٹیسٹ کرنے کے لیے ایک جامع ڈیولپمنٹ ماحول فراہم کرتا ہے۔ کوڈنگ شروع کرنے کے لیے ان-براؤزر Remix IDE آزمائیںopens in a new tab۔

زیادہ تجربہ کار ڈیولپرز Yul، جو Ethereum ورچوئل مشین کے لیے ایک درمیانی زبان ہے، یا Yul+، جو Yul کی ایک ایکسٹینشن ہے، کا استعمال بھی کرنا چاہ سکتے ہیں۔

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

شرائط

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

Solidity

  • اسمارٹ کنٹریکٹس کو نافذ کرنے کے لیے آبجیکٹ اورینٹڈ، اعلیٰ سطحی زبان۔
  • کرلی-بریکٹ زبان جو C++ سے سب سے زیادہ متاثر ہوئی ہے۔
  • اسٹیٹیکلی ٹائپڈ (متغیر کی قسم کمپائل کے وقت معلوم ہوتی ہے)۔
  • سپورٹ کرتا ہے:
    • انہیریٹنس (آپ دوسرے کنٹریکٹس کو بڑھا سکتے ہیں)۔
    • لائبریریاں (آپ دوبارہ قابل استعمال کوڈ بنا سکتے ہیں جسے آپ مختلف کنٹریکٹس سے کال کر سکتے ہیں - جیسے دیگر آبجیکٹ اورینٹڈ پروگرامنگ زبانوں میں ایک اسٹیٹک کلاس میں اسٹیٹک فنکشنز)۔
    • پیچیدہ صارف کی طرف سے متعین کردہ اقسام۔

مثال کا کنٹریکٹ

1// SPDX-License-Identifier: GPL-3.0
2pragma solidity >= 0.7.0;
3
4contract Coin {
5 // کلیدی لفظ "public" متغیرات کو
6 // دوسرے کنٹریکٹس سے قابل رسائی بناتا ہے
7 address public minter;
8 mapping (address => uint) public balances;
9
10 // ایونٹس کلائنٹس کو آپ کی اعلان کردہ مخصوص
11 // کنٹریکٹ تبدیلیوں پر رد عمل ظاہر کرنے کی اجازت دیتے ہیں
12 event Sent(address from, address to, uint amount);
13
14 // کنسٹرکٹر کوڈ صرف اس وقت چلتا ہے جب کنٹریکٹ
15 // بنایا جاتا ہے
16 constructor() {
17 minter = msg.sender;
18 }
19
20 // ایک ایڈریس پر نئے بنائے گئے کوائنز کی ایک رقم بھیجتا ہے
21 // صرف کنٹریکٹ بنانے والے کے ذریعے کال کیا جا سکتا ہے
22 function mint(address receiver, uint amount) public {
23 require(msg.sender == minter);
24 require(amount < 1e60);
25 balances[receiver] += amount;
26 }
27
28 // کسی بھی کالر سے ایک ایڈریس پر
29 // موجودہ کوائنز کی ایک رقم بھیجتا ہے
30 function send(address receiver, uint amount) public {
31 require(amount <= balances[msg.sender], "ناکافی بیلنس۔");
32 balances[msg.sender] -= amount;
33 balances[receiver] += amount;
34 emit Sent(msg.sender, receiver, amount);
35 }
36}
سب دکھائیں

یہ مثال آپ کو اس بات کا اندازہ دے گی کہ Solidity کنٹریکٹ کا سنٹیکس کیسا ہوتا ہے۔ فنکشنز اور متغیرات کی مزید تفصیلی تفصیل کے لیے، دستاویزات دیکھیںopens in a new tab۔

Vyper

  • پائیتھونک پروگرامنگ زبان
  • مضبوط ٹائپنگ
  • چھوٹا اور قابل فہم کمپائلر کوڈ
  • موثر بائٹ کوڈ جنریشن
  • جان بوجھ کر Solidity سے کم خصوصیات ہیں اس مقصد کے ساتھ کہ کنٹریکٹس کو زیادہ محفوظ اور آڈٹ کرنے میں آسان بنایا جائے۔ Vyper سپورٹ نہیں کرتا:
    • موڈیفائرز
    • انہیریٹنس
    • ان لائن اسمبلی
    • فنکشن اوورلوڈنگ
    • آپریٹر اوورلوڈنگ
    • ریکرسیو کالنگ
    • لامحدود لمبائی کے لوپس
    • بائنری فکسڈ پوائنٹس

مزید معلومات کے لیے، Vyper کا جواز پڑھیںopens in a new tab۔

مثال

1# کھلی نیلامی
2
3# نیلامی کے پیرامیٹرز
4
5# فائدہ اٹھانے والا سب سے زیادہ بولی لگانے والے سے رقم وصول کرتا ہے
6
7beneficiary: public(address)
8auctionStart: public(uint256)
9auctionEnd: public(uint256)
10
11# نیلامی کی موجودہ حالت
12
13highestBidder: public(address)
14highestBid: public(uint256)
15
16# آخر میں true پر سیٹ کریں، کسی بھی تبدیلی کی اجازت نہیں دیتا
17
18ended: public(bool)
19
20# واپس کی گئی بولیوں کا ٹریک رکھیں تاکہ ہم ودڈرال پیٹرن کی پیروی کر سکیں
21
22pendingReturns: public(HashMap[address, uint256])
23
24# `_bidding_time` کے ساتھ ایک سادہ نیلامی بنائیں
25
26# `_beneficiary` ایڈریس والے فائدہ اٹھانے والے کی جانب سے
27
28# سیکنڈ بولی لگانے کا وقت۔
29
30@external
31def __init__(_beneficiary: address, _bidding_time: uint256):
32 self.beneficiary = _beneficiary
33 self.auctionStart = block.timestamp
34 self.auctionEnd = self.auctionStart + _bidding_time
35
36# اس ٹرانزیکشن کے ساتھ بھیجی گئی
37
38# قیمت کے ساتھ نیلامی پر بولی لگائیں۔
39
40# قیمت صرف اس صورت میں واپس کی جائے گی جب
41
42# نیلامی نہیں جیتی جاتی ہے۔
43
44@external
45@payable
46def bid():
47 # چیک کریں کہ بولی کی مدت ختم ہو گئی ہے یا نہیں۔
48 assert block.timestamp < self.auctionEnd
49 # چیک کریں کہ بولی کافی زیادہ ہے
50 assert msg.value > self.highestBid
51 # پچھلے سب سے زیادہ بولی لگانے والے کے لیے ریفنڈ کو ٹریک کریں
52 self.pendingReturns[self.highestBidder] += self.highestBid
53 # نئی اونچی بولی کو ٹریک کریں
54 self.highestBidder = msg.sender
55 self.highestBid = msg.value
56
57# پہلے سے واپس کی گئی بولی واپس لیں۔ ودڈرال پیٹرن
58
59# یہاں ایک سیکیورٹی مسئلے سے بچنے کے لیے استعمال کیا جاتا ہے۔ اگر ریفنڈز براہ راست
60
61# bid() کے حصے کے طور پر بھیجے جاتے، تو ایک بدنیتی پر مبنی بولی لگانے والا کنٹریکٹ
62
63# ان ریفنڈز کو بلاک کر سکتا تھا اور اس طرح نئی اونچی بولیوں کو آنے سے روک سکتا تھا۔
64
65@external
66def withdraw():
67 pending_amount: uint256 = self.pendingReturns[msg.sender]
68 self.pendingReturns[msg.sender] = 0
69 send(msg.sender, pending_amount)
70
71# نیلامی ختم کریں اور سب سے اونچی بولی
72
73# فائدہ اٹھانے والے کو بھیجیں۔
74
75@external
76def endAuction():
77 # یہ دوسرے کنٹریکٹس کے ساتھ تعامل کرنے والے فنکشنز کو (یعنی، وہ فنکشنز کو کال کرتے ہیں یا ایتھر بھیجتے ہیں)
78 # تین مراحل میں ترتیب دینے کے لیے ایک اچھی رہنما خطوط ہے:
79 # 1. شرائط کی جانچ کرنا
80 # 2. اعمال انجام دینا (ممکنہ طور پر شرائط کو تبدیل کرنا)
81 # 3. دوسرے کنٹریکٹس کے ساتھ تعامل کرنا
82 # اگر یہ مراحل آپس میں مل جاتے ہیں، تو دوسرا کنٹریکٹ
83 # موجودہ کنٹریکٹ میں واپس کال کر سکتا ہے اور اسٹیٹ میں ترمیم کر سکتا ہے یا
84 # اثرات (ایتھر کی ادائیگی) کو کئی بار انجام دینے کا سبب بن سکتا ہے۔
85 # اگر اندرونی طور پر کال کیے گئے فنکشنز میں بیرونی
86 # کنٹریکٹس کے ساتھ تعامل شامل ہے، تو انہیں بھی بیرونی
87 # کنٹریکٹس کے ساتھ تعامل سمجھا جانا چاہیے۔
88
89 # 1. شرائط
90 # چیک کریں کہ نیلامی کا اختتامی وقت پہنچ گیا ہے
91 assert block.timestamp >= self.auctionEnd
92 # چیک کریں کہ یہ فنکشن پہلے ہی کال کیا جا چکا ہے
93 assert not self.ended
94
95 # 2. اثرات
96 self.ended = True
97
98 # 3. تعامل
99 send(self.beneficiary, self.highestBid)
سب دکھائیں

یہ مثال آپ کو اس بات کا اندازہ دے گی کہ Vyper کنٹریکٹ کا سنٹیکس کیسا ہوتا ہے۔ فنکشنز اور متغیرات کی مزید تفصیلی تفصیل کے لیے، دستاویزات دیکھیںopens in a new tab۔

Yul اور Yul+

اگر آپ Ethereum میں نئے ہیں اور ابھی تک اسمارٹ کنٹریکٹ زبانوں کے ساتھ کوئی کوڈنگ نہیں کی ہے، تو ہم Solidity یا Vyper کے ساتھ شروع کرنے کی تجویز کرتے ہیں۔ Yul یا Yul+ کو صرف تب دیکھیں جب آپ اسمارٹ کنٹریکٹ سیکیورٹی کے بہترین طریقوں اور EVM کے ساتھ کام کرنے کی تفصیلات سے واقف ہوں۔

Yul

  • Ethereum کے لیے درمیانی زبان۔
  • EVM اور Ewasmopens in a new tab، جو ایک Ethereum فلیورڈ WebAssembly ہے، کو سپورٹ کرتا ہے اور اسے دونوں پلیٹ فارمز کا ایک قابل استعمال مشترکہ ڈینومینیٹر ہونے کے لیے ڈیزائن کیا گیا ہے۔
  • اعلیٰ سطحی آپٹیمائزیشن مراحل کے لیے اچھا ہدف جو EVM اور Ewasm دونوں پلیٹ فارمز کو یکساں طور پر فائدہ پہنچا سکتے ہیں۔

Yul+

  • Yul کی ایک نچلی سطح کی، انتہائی موثر ایکسٹینشن۔
  • ابتدائی طور پر ایک آپٹیمسٹک رول اپ کنٹریکٹ کے لیے ڈیزائن کیا گیا ہے۔
  • Yul+ کو Yul کے لیے ایک تجرباتی اپ گریڈ تجویز کے طور پر دیکھا جا سکتا ہے، جو اس میں نئی خصوصیات شامل کرتا ہے۔

مثال کا کنٹریکٹ

درج ذیل سادہ مثال ایک پاور فنکشن کو نافذ کرتی ہے۔ اسے solc --strict-assembly --bin input.yul کا استعمال کرتے ہوئے کمپائل کیا جا سکتا ہے۔ مثال کو input.yul فائل میں محفوظ کیا جانا چاہیے۔

1{
2 function power(base, exponent) -> result
3 {
4 switch exponent
5 case 0 { result := 1 }
6 case 1 { result := base }
7 default
8 {
9 result := power(mul(base, base), div(exponent, 2))
10 if mod(exponent, 2) { result := mul(base, result) }
11 }
12 }
13 let res := power(calldataload(0), calldataload(32))
14 mstore(0, res)
15 return(0, 32)
16}
سب دکھائیں

اگر آپ پہلے سے ہی اسمارٹ کنٹریکٹس کے ساتھ اچھی طرح سے تجربہ کار ہیں، تو Yul میں ایک مکمل ERC20 نفاذ یہاںopens in a new tab پایا جا سکتا ہے۔

Fe

  • Ethereum ورچوئل مشین (EVM) کے لیے اسٹیٹیکلی ٹائپڈ زبان۔
  • Python اور Rust سے متاثر۔
  • سیکھنے میں آسان ہونے کا مقصد ہے -- یہاں تک کہ ان ڈیولپرز کے لیے بھی جو Ethereum ایکو سسٹم میں نئے ہیں۔
  • Fe ڈیولپمنٹ ابھی بھی اپنے ابتدائی مراحل میں ہے، زبان کی الفا ریلیز جنوری 2021 میں ہوئی تھی۔

مثال کا کنٹریکٹ

درج ذیل Fe میں نافذ کردہ ایک سادہ کنٹریکٹ ہے۔

1type BookMsg = bytes[100]
2
3contract GuestBook:
4 pub guest_book: map<address, BookMsg>
5
6 event Signed:
7 book_msg: BookMsg
8
9 pub def sign(book_msg: BookMsg):
10 self.guest_book[msg.sender] = book_msg
11
12 emit Signed(book_msg=book_msg)
13
14 pub def get_msg(addr: address) -> BookMsg:
15 return self.guest_book[addr].to_mem()
16
سب دکھائیں

کیسے انتخاب کریں

کسی بھی دوسری پروگرامنگ زبان کی طرح، یہ زیادہ تر صحیح کام کے لیے صحیح ٹول کا انتخاب کرنے کے ساتھ ساتھ ذاتی ترجیحات کے بارے میں ہے۔

اگر آپ نے ابھی تک کسی بھی زبان کو نہیں آزمایا ہے تو یہاں کچھ چیزیں ہیں جن پر غور کرنا ہے:

Solidity کے بارے میں کیا بڑی بات ہے؟

  • اگر آپ ایک ابتدائی ہیں، تو وہاں بہت سے ٹیوٹوریلز اور سیکھنے کے ٹولز موجود ہیں۔ اس کے بارے میں مزید کوڈنگ کے ذریعے سیکھیں سیکشن میں دیکھیں۔
  • اچھی ڈیولپر ٹولنگ دستیاب ہے۔
  • Solidity کی ایک بڑی ڈیولپر کمیونٹی ہے، جس کا مطلب ہے کہ آپ کو اپنے سوالات کے جوابات بہت جلد مل جائیں گے۔

Vyper کے بارے میں کیا بڑی بات ہے؟

  • ان Python ڈیولپرز کے لیے شروع کرنے کا بہترین طریقہ جو اسمارٹ کنٹریکٹس لکھنا چاہتے ہیں۔
  • Vyper میں کم خصوصیات ہیں جو اسے آئیڈیاز کی فوری پروٹوٹائپنگ کے لیے بہترین بناتی ہیں۔
  • Vyper کا مقصد آڈٹ کرنے میں آسان اور زیادہ سے زیادہ انسانی-پڑھنے کے قابل ہونا ہے۔

Yul اور Yul+ کے بارے میں کیا بڑی بات ہے؟

  • سادہ اور فنکشنل نچلی سطح کی زبان۔
  • خام EVM کے بہت قریب جانے کی اجازت دیتا ہے، جو آپ کے کنٹریکٹس کے گیس کے استعمال کو بہتر بنانے میں مدد کر سکتا ہے۔

زبانوں کا موازنہ

بنیادی سنٹیکس، کنٹریکٹ لائف سائیکل، انٹرفیس، آپریٹرز، ڈیٹا اسٹرکچرز، فنکشنز، کنٹرول فلو، اور مزید کے موازنے کے لیے Auditless کی اس چیٹ شیٹopens in a new tab کو دیکھیں۔

مزید پڑھیں

کیا یہ آرٹیکل کارآمد تھا؟