اسمارٹ کنٹریکٹ کی زبانیں
صفحہ کی آخری تازہ کاری: 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++ سے سب سے زیادہ متاثر ہوئی ہے۔
- اسٹیٹیکلی ٹائپڈ (متغیر کی قسم کمپائل کے وقت معلوم ہوتی ہے)۔
- سپورٹ کرتا ہے:
- انہیریٹنس (آپ دوسرے کنٹریکٹس کو بڑھا سکتے ہیں)۔
- لائبریریاں (آپ دوبارہ قابل استعمال کوڈ بنا سکتے ہیں جسے آپ مختلف کنٹریکٹس سے کال کر سکتے ہیں - جیسے دیگر آبجیکٹ اورینٹڈ پروگرامنگ زبانوں میں ایک اسٹیٹک کلاس میں اسٹیٹک فنکشنز)۔
- پیچیدہ صارف کی طرف سے متعین کردہ اقسام۔
اہم لنکس
- دستاویزاتopens in a new tab
- Solidity لینگویج پورٹلopens in a new tab
- Solidity بہ مثالopens in a new tab
- GitHubopens in a new tab
- Solidity Gitter چیٹ رومopens in a new tab سے Solidity Matrix چیٹ رومopens in a new tab پر برج کیا گیا۔
- چیٹ شیٹopens in a new tab
- Solidity بلاگopens in a new tab
- Solidity ٹویٹرopens in a new tab
مثال کا کنٹریکٹ
1// SPDX-License-Identifier: GPL-3.02pragma solidity >= 0.7.0;34contract Coin {5 // کلیدی لفظ "public" متغیرات کو6 // دوسرے کنٹریکٹس سے قابل رسائی بناتا ہے7 address public minter;8 mapping (address => uint) public balances;910 // ایونٹس کلائنٹس کو آپ کی اعلان کردہ مخصوص11 // کنٹریکٹ تبدیلیوں پر رد عمل ظاہر کرنے کی اجازت دیتے ہیں12 event Sent(address from, address to, uint amount);1314 // کنسٹرکٹر کوڈ صرف اس وقت چلتا ہے جب کنٹریکٹ15 // بنایا جاتا ہے16 constructor() {17 minter = msg.sender;18 }1920 // ایک ایڈریس پر نئے بنائے گئے کوائنز کی ایک رقم بھیجتا ہے21 // صرف کنٹریکٹ بنانے والے کے ذریعے کال کیا جا سکتا ہے22 function mint(address receiver, uint amount) public {23 require(msg.sender == minter);24 require(amount < 1e60);25 balances[receiver] += amount;26 }2728 // کسی بھی کالر سے ایک ایڈریس پر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۔
اہم لنکس
- دستاویزاتopens in a new tab
- Vyper بہ مثالopens in a new tab
- مزید Vyper بہ مثالopens in a new tab
- GitHubopens in a new tab
- Vyper کمیونٹی ڈسکارڈ چیٹopens in a new tab
- چیٹ شیٹopens in a new tab
- Vyper کے لیے اسمارٹ کنٹریکٹ ڈیولپمنٹ فریم ورک اور ٹولز
- VyperPunk - Vyper اسمارٹ کنٹریکٹس کو محفوظ بنانا اور ہیک کرنا سیکھیںopens in a new tab
- ڈیولپمنٹ کے لیے Vyper ہبopens in a new tab
- Vyper کے بہترین اسمارٹ کنٹریکٹ کی مثالیںopens in a new tab
- شاندار Vyper کیوریٹڈ وسائلopens in a new tab
مثال
1# کھلی نیلامی23# نیلامی کے پیرامیٹرز45# فائدہ اٹھانے والا سب سے زیادہ بولی لگانے والے سے رقم وصول کرتا ہے67beneficiary: public(address)8auctionStart: public(uint256)9auctionEnd: public(uint256)1011# نیلامی کی موجودہ حالت1213highestBidder: public(address)14highestBid: public(uint256)1516# آخر میں true پر سیٹ کریں، کسی بھی تبدیلی کی اجازت نہیں دیتا1718ended: public(bool)1920# واپس کی گئی بولیوں کا ٹریک رکھیں تاکہ ہم ودڈرال پیٹرن کی پیروی کر سکیں2122pendingReturns: public(HashMap[address, uint256])2324# `_bidding_time` کے ساتھ ایک سادہ نیلامی بنائیں2526# `_beneficiary` ایڈریس والے فائدہ اٹھانے والے کی جانب سے2728# سیکنڈ بولی لگانے کا وقت۔2930@external31def __init__(_beneficiary: address, _bidding_time: uint256):32 self.beneficiary = _beneficiary33 self.auctionStart = block.timestamp34 self.auctionEnd = self.auctionStart + _bidding_time3536# اس ٹرانزیکشن کے ساتھ بھیجی گئی3738# قیمت کے ساتھ نیلامی پر بولی لگائیں۔3940# قیمت صرف اس صورت میں واپس کی جائے گی جب4142# نیلامی نہیں جیتی جاتی ہے۔4344@external45@payable46def bid():47 # چیک کریں کہ بولی کی مدت ختم ہو گئی ہے یا نہیں۔48 assert block.timestamp < self.auctionEnd49 # چیک کریں کہ بولی کافی زیادہ ہے50 assert msg.value > self.highestBid51 # پچھلے سب سے زیادہ بولی لگانے والے کے لیے ریفنڈ کو ٹریک کریں52 self.pendingReturns[self.highestBidder] += self.highestBid53 # نئی اونچی بولی کو ٹریک کریں54 self.highestBidder = msg.sender55 self.highestBid = msg.value5657# پہلے سے واپس کی گئی بولی واپس لیں۔ ودڈرال پیٹرن5859# یہاں ایک سیکیورٹی مسئلے سے بچنے کے لیے استعمال کیا جاتا ہے۔ اگر ریفنڈز براہ راست6061# bid() کے حصے کے طور پر بھیجے جاتے، تو ایک بدنیتی پر مبنی بولی لگانے والا کنٹریکٹ6263# ان ریفنڈز کو بلاک کر سکتا تھا اور اس طرح نئی اونچی بولیوں کو آنے سے روک سکتا تھا۔6465@external66def withdraw():67 pending_amount: uint256 = self.pendingReturns[msg.sender]68 self.pendingReturns[msg.sender] = 069 send(msg.sender, pending_amount)7071# نیلامی ختم کریں اور سب سے اونچی بولی7273# فائدہ اٹھانے والے کو بھیجیں۔7475@external76def endAuction():77 # یہ دوسرے کنٹریکٹس کے ساتھ تعامل کرنے والے فنکشنز کو (یعنی، وہ فنکشنز کو کال کرتے ہیں یا ایتھر بھیجتے ہیں)78 # تین مراحل میں ترتیب دینے کے لیے ایک اچھی رہنما خطوط ہے:79 # 1. شرائط کی جانچ کرنا80 # 2. اعمال انجام دینا (ممکنہ طور پر شرائط کو تبدیل کرنا)81 # 3. دوسرے کنٹریکٹس کے ساتھ تعامل کرنا82 # اگر یہ مراحل آپس میں مل جاتے ہیں، تو دوسرا کنٹریکٹ83 # موجودہ کنٹریکٹ میں واپس کال کر سکتا ہے اور اسٹیٹ میں ترمیم کر سکتا ہے یا84 # اثرات (ایتھر کی ادائیگی) کو کئی بار انجام دینے کا سبب بن سکتا ہے۔85 # اگر اندرونی طور پر کال کیے گئے فنکشنز میں بیرونی86 # کنٹریکٹس کے ساتھ تعامل شامل ہے، تو انہیں بھی بیرونی87 # کنٹریکٹس کے ساتھ تعامل سمجھا جانا چاہیے۔8889 # 1. شرائط90 # چیک کریں کہ نیلامی کا اختتامی وقت پہنچ گیا ہے91 assert block.timestamp >= self.auctionEnd92 # چیک کریں کہ یہ فنکشن پہلے ہی کال کیا جا چکا ہے93 assert not self.ended9495 # 2. اثرات96 self.ended = True9798 # 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) -> result3 {4 switch exponent5 case 0 { result := 1 }6 case 1 { result := base }7 default8 {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 میں ہوئی تھی۔
اہم لنکس
- GitHubopens in a new tab
- Fe اعلانopens in a new tab
- Fe 2021 روڈ میپopens in a new tab
- Fe ڈسکارڈ چیٹopens in a new tab
- Fe ٹویٹرopens in a new tab
مثال کا کنٹریکٹ
درج ذیل Fe میں نافذ کردہ ایک سادہ کنٹریکٹ ہے۔
1type BookMsg = bytes[100]23contract GuestBook:4 pub guest_book: map<address, BookMsg>56 event Signed:7 book_msg: BookMsg89 pub def sign(book_msg: BookMsg):10 self.guest_book[msg.sender] = book_msg1112 emit Signed(book_msg=book_msg)1314 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 کو دیکھیں۔