آپ نے شاید وہ ٹیلیگرام سنا ہوگا۔ . لیکن شاید آپ کو ٹیلیگرام کی وہ خبر یاد نہیں آئی ہو گی۔ اس پلیٹ فارم کے لیے ایک یا زیادہ سمارٹ معاہدوں کے نفاذ کے لیے۔
سیروکیل ٹیم، بڑے بلاک چین پروجیکٹوں کو تیار کرنے میں وسیع تجربے کے ساتھ، ایک طرف نہیں کھڑی ہو سکتی۔ ہم نے مقابلے کے لیے پانچ ملازمین کو تفویض کیا، اور دو ہفتے بعد انھوں نے اس میں (ان) معمولی بے ترتیب عرف سیکسی گرگٹ کے تحت پہلی پوزیشن حاصل کی۔ اس مضمون میں میں اس کے بارے میں بات کروں گا کہ انہوں نے یہ کیسے کیا۔ ہم امید کرتے ہیں کہ اگلے دس منٹوں میں آپ کم از کم ایک دلچسپ کہانی پڑھیں گے، اور زیادہ سے زیادہ آپ کو اس میں کچھ کارآمد ملے گا جسے آپ اپنے کام میں لگا سکتے ہیں۔
لیکن آئیے ایک چھوٹے سیاق و سباق سے شروع کرتے ہیں۔
مقابلہ اور اس کی شرائط
لہذا، شرکاء کے اہم کام ایک یا زیادہ مجوزہ سمارٹ معاہدوں پر عمل درآمد کے ساتھ ساتھ TON ماحولیاتی نظام کو بہتر بنانے کے لیے تجاویز پیش کرنا تھے۔ مقابلہ 24 ستمبر سے 15 اکتوبر تک جاری رہا اور نتائج کا اعلان صرف 15 نومبر کو کیا گیا۔ کافی عرصے سے، اس بات پر غور کرتے ہوئے کہ اس وقت کے دوران ٹیلیگرام نے C++ میں ایپلی کیشنز کے ڈیزائن اور ڈیولپمنٹ پر ہونے والے مقابلوں کے نتائج کا اعلان کرنے اور ٹیلیگرام میں VoIP کالز کے معیار کو جانچنے اور جانچنے میں کامیابی حاصل کی۔
ہم نے منتظمین کی تجویز کردہ فہرست میں سے دو سمارٹ کنٹریکٹس کا انتخاب کیا۔ ان میں سے ایک کے لیے، ہم نے TON کے ساتھ تقسیم کیے گئے ٹولز کا استعمال کیا، اور دوسرے کو ایک نئی زبان میں لاگو کیا گیا جسے ہمارے انجینئرز نے خاص طور پر TON کے لیے تیار کیا تھا اور اسے Haskell میں بنایا گیا تھا۔
فنکشنل پروگرامنگ زبان کا انتخاب حادثاتی نہیں ہے۔ ہمارے میں ہم اکثر اس بارے میں بات کرتے ہیں کہ ہمارے خیال میں فعال زبانوں کی پیچیدگی ایک بہت بڑا مبالغہ آرائی ہے اور ہم انہیں عام طور پر اعتراض پر مبنی زبانوں پر کیوں ترجیح دیتے ہیں۔ ویسے اس میں بھی شامل ہے۔ .
ہم نے شرکت کرنے کا فیصلہ کیوں کیا؟
مختصراً، کیونکہ ہماری تخصص غیر معیاری اور پیچیدہ پروجیکٹس ہیں جن کے لیے خصوصی مہارت کی ضرورت ہوتی ہے اور یہ اکثر IT کمیونٹی کے لیے سائنسی اہمیت کے حامل ہوتے ہیں۔ ہم اوپن سورس کی ترقی کی بھرپور حمایت کرتے ہیں اور اس کی مقبولیت میں مصروف ہیں، اور کمپیوٹر سائنس اور ریاضی کے شعبے میں معروف روسی یونیورسٹیوں کے ساتھ بھی تعاون کرتے ہیں۔
مقابلے کے دلچسپ کام اور ہمارے پیارے ٹیلیگرام پروجیکٹ میں شمولیت اپنے آپ میں ایک بہترین محرک تھا، لیکن انعامی فنڈ ایک اضافی ترغیب بن گیا۔ 🙂
TON بلاکچین تحقیق
ہم بلاک چین، مصنوعی ذہانت اور مشین لرننگ میں ہونے والی نئی پیشرفتوں پر گہری نظر رکھتے ہیں اور کوشش کرتے ہیں کہ ہم جن شعبوں میں کام کرتے ہیں ان میں سے ہر ایک میں ایک بھی اہم ریلیز سے محروم نہ ہوں۔ اس لیے، مقابلہ شروع ہونے تک، ہماری ٹیم پہلے ہی سے آئیڈیاز سے واقف تھی۔ . تاہم، TON کے ساتھ کام شروع کرنے سے پہلے، ہم نے تکنیکی دستاویزات اور پلیٹ فارم کے اصل سورس کوڈ کا تجزیہ نہیں کیا، اس لیے پہلا مرحلہ بالکل واضح تھا - پر سرکاری دستاویزات کا مکمل مطالعہ اور .
مقابلہ شروع ہونے تک، کوڈ شائع ہو چکا تھا، اس لیے وقت بچانے کے لیے، ہم نے ایک گائیڈ یا خلاصہ تلاش کرنے کا فیصلہ کیا۔ صارفین. بدقسمتی سے، اس سے کوئی نتیجہ نہیں نکلا - Ubuntu پر پلیٹ فارم کو جمع کرنے کی ہدایات کے علاوہ، ہمیں کوئی اور مواد نہیں ملا۔
دستاویزات خود اچھی طرح سے تحقیق کی گئی تھیں، لیکن کچھ علاقوں میں پڑھنا مشکل تھا۔ اکثر ہمیں بعض نکات پر واپس جانا پڑتا تھا اور تجریدی خیالات کی اعلیٰ سطحی وضاحتوں سے نچلی سطح پر عمل درآمد کی تفصیلات پر جانا پڑتا تھا۔
یہ آسان ہوگا اگر تصریح میں عمل درآمد کی تفصیلی وضاحت بالکل شامل نہ ہو۔ اس بارے میں معلومات کہ کس طرح ایک ورچوئل مشین اپنے اسٹیک کی نمائندگی کرتی ہے اس سے ڈویلپرز کی توجہ ہٹانے کا زیادہ امکان ہوتا ہے جو TON پلیٹ فارم کے لیے سمارٹ کنٹریکٹ بناتے ہیں ان کی مدد کرنے کے بجائے۔
نکس: منصوبے کو ایک ساتھ رکھنا
Serokell میں ہم بڑے پرستار ہیں۔ . ہم اس کے ساتھ اپنے پروجیکٹ جمع کرتے ہیں اور ان کا استعمال کرتے ہوئے تعینات کرتے ہیں۔ ، اور ہمارے تمام سرورز پر انسٹال کیا گیا ہے۔ . اس کی بدولت، ہماری تمام تعمیرات دوبارہ پیدا کی جا سکتی ہیں اور کسی بھی آپریٹنگ سسٹم پر کام کرتی ہیں جس پر نکس انسٹال کیا جا سکتا ہے۔
تو ہم نے تخلیق کرکے شروع کیا۔ . اس کی مدد سے، TON مرتب کرنا ممکن حد تک آسان ہے:
$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && makeنوٹ کریں کہ آپ کو کوئی انحصار انسٹال کرنے کی ضرورت نہیں ہے۔ Nix جادوئی طور پر آپ کے لیے سب کچھ کرے گا، چاہے آپ NixOS، Ubuntu، یا macOS استعمال کر رہے ہوں۔
TON کے لیے پروگرامنگ
TON نیٹ ورک میں سمارٹ کنٹریکٹ کوڈ TON ورچوئل مشین (TVM) پر چلتا ہے۔ TVM دیگر ورچوئل مشینوں سے زیادہ پیچیدہ ہے، اور اس میں بہت دلچسپ فعالیت ہے، مثال کے طور پر، یہ اس کے ساتھ کام کر سکتی ہے۔ تسلسل и ڈیٹا کے لنکس.
مزید یہ کہ، TON کے لڑکوں نے تین نئی پروگرامنگ زبانیں بنائیں:
پانچ ایک یونیورسل اسٹیک پروگرامنگ لینگویج ہے جو اس سے ملتی جلتی ہے۔ . اس کی انتہائی قابلیت TVM کے ساتھ بات چیت کرنے کی صلاحیت ہے۔
فن سی ایک سمارٹ کنٹریکٹ پروگرامنگ لینگویج ہے جو اس سے ملتی جلتی ہے۔ اور دوسری زبان میں مرتب کیا گیا ہے - ففٹ اسمبلر۔
پانچواں اسمبلر - TVM کے لیے بائنری قابل عمل کوڈ بنانے کے لیے پانچ لائبریری۔ پانچویں اسمبلر کے پاس کمپائلر نہیں ہے۔ یہ .
ہمارا مقابلہ کام کرتا ہے۔
آخر میں، یہ ہماری کوششوں کے نتائج کو دیکھنے کا وقت ہے.
غیر مطابقت پذیر ادائیگی کا چینل
ادائیگی کا چینل ایک سمارٹ معاہدہ ہے جو دو صارفین کو بلاک چین سے باہر ادائیگی بھیجنے کی اجازت دیتا ہے۔ نتیجے کے طور پر، آپ نہ صرف پیسہ بچاتے ہیں (کوئی کمیشن نہیں ہے) بلکہ وقت بھی بچاتے ہیں (آپ کو اگلے بلاک پر کارروائی ہونے کا انتظار نہیں کرنا پڑے گا)۔ ادائیگیاں مطلوبہ حد تک چھوٹی اور جتنی بار ضرورت ہو سکتی ہیں۔ اس معاملے میں، فریقین کو ایک دوسرے پر بھروسہ کرنے کی ضرورت نہیں ہے، کیونکہ حتمی تصفیہ کی منصفانہ ہونے کی ضمانت سمارٹ کنٹریکٹ کے ذریعے دی جاتی ہے۔
ہم نے مسئلے کا کافی آسان حل تلاش کیا۔ دو فریق دستخط شدہ پیغامات کا تبادلہ کر سکتے ہیں، جن میں سے ہر ایک میں دو نمبر ہوتے ہیں—ہر فریق کی طرف سے ادا کی گئی پوری رقم۔ یہ دو نمبر اس طرح کام کرتے ہیں۔ روایتی تقسیم شدہ نظاموں میں اور لین دین پر "پہلے ہوا" آرڈر سیٹ کریں۔ اس ڈیٹا کا استعمال کرتے ہوئے، معاہدہ کسی بھی ممکنہ تنازع کو حل کرنے کے قابل ہو جائے گا.
درحقیقت، اس خیال کو عملی جامہ پہنانے کے لیے ایک نمبر کافی ہے، لیکن ہم نے دونوں کو چھوڑ دیا کیونکہ اس طرح ہم زیادہ آسان یوزر انٹرفیس بنا سکتے ہیں۔ اس کے علاوہ، ہم نے ہر پیغام میں ادائیگی کی رقم شامل کرنے کا فیصلہ کیا۔ اس کے بغیر، اگر پیغام کسی وجہ سے گم ہو جاتا ہے، تو، اگرچہ تمام رقوم اور حتمی حساب درست ہو گا، صارف کو نقصان محسوس نہیں ہو سکتا۔
اپنے خیال کو جانچنے کے لیے، ہم نے اس طرح کے سادہ اور جامع ادائیگی چینل پروٹوکول کے استعمال کی مثالیں تلاش کیں۔ حیرت کی بات یہ ہے کہ ہمیں صرف دو ہی ملے:
- اسی طرح کا نقطہ نظر، صرف ایک غیر سمتی چینل کے معاملے کے لیے۔
- ، جو ہمارے جیسا ہی خیال بیان کرتا ہے، لیکن بہت سی اہم تفصیلات کی وضاحت کیے بغیر، جیسا کہ عمومی درستگی اور تنازعات کے حل کے طریقہ کار۔
یہ واضح ہو گیا کہ ہمارے پروٹوکول کو تفصیل سے بیان کرنا، اس کی درستگی پر خصوصی توجہ دینا سمجھ میں آتا ہے۔ کئی تکرار کے بعد، تفصیلات تیار تھی، اور اب آپ بھی کر سکتے ہیں۔ .
ہم نے معاہدے کو FunC میں لاگو کیا، اور ہم نے اپنے معاہدے کے ساتھ مکمل طور پر Fift میں تعامل کے لیے کمانڈ لائن یوٹیلیٹی لکھی، جیسا کہ منتظمین کی تجویز ہے۔ ہم اپنے CLI کے لیے کسی دوسری زبان کا انتخاب کر سکتے تھے، لیکن ہم یہ دیکھنے کے لیے Fit کو آزمانے میں دلچسپی رکھتے تھے کہ اس نے عملی طور پر کیسے کارکردگی کا مظاہرہ کیا۔
سچ پوچھیں تو، ففٹ کے ساتھ کام کرنے کے بعد، ہمیں ترقی یافتہ ٹولز اور لائبریریوں والی مقبول اور فعال طور پر استعمال ہونے والی زبانوں پر اس زبان کو ترجیح دینے کی کوئی مجبوری وجہ نظر نہیں آئی۔ اسٹیک پر مبنی زبان میں پروگرامنگ کافی ناخوشگوار ہے، کیونکہ آپ کو مسلسل اپنے ذہن میں رکھنا پڑتا ہے کہ اسٹیک پر کیا ہے، اور کمپائلر اس میں مدد نہیں کرتا ہے۔
لہذا، ہماری رائے میں، ففٹ کے وجود کا واحد جواز ففٹ اسمبلر کے لیے میزبان زبان کے طور پر اس کا کردار ہے۔ لیکن کیا یہ بہتر نہیں ہوگا کہ TVM اسمبلر کو کسی موجودہ زبان میں شامل کیا جائے، بجائے اس کے کہ اس بنیادی مقصد کے لیے کوئی نیا ایجاد کیا جائے؟
TVM ہاسکل ای ڈی ایس ایل
اب ہمارے دوسرے سمارٹ معاہدے کے بارے میں بات کرنے کا وقت آگیا ہے۔ ہم نے ایک کثیر دستخطی والیٹ تیار کرنے کا فیصلہ کیا، لیکن FunC میں ایک اور سمارٹ معاہدہ لکھنا بہت بورنگ ہوگا۔ ہم کچھ ذائقہ شامل کرنا چاہتے تھے، اور یہ TVM کے لیے ہماری اپنی اسمبلی کی زبان تھی۔
Fift Assembler کی طرح، ہماری نئی زبان سرایت شدہ ہے، لیکن ہم نے Fift کے بجائے ہاسکل کو میزبان کے طور پر منتخب کیا، جس سے ہمیں اس کے جدید قسم کے نظام سے بھرپور فائدہ اٹھانے کی اجازت دی گئی۔ سمارٹ معاہدوں کے ساتھ کام کرتے وقت، جہاں ایک چھوٹی سی غلطی کی قیمت بھی بہت زیادہ ہو سکتی ہے، ہماری رائے میں، جامد ٹائپنگ ایک بڑا فائدہ ہے۔
یہ ظاہر کرنے کے لیے کہ TVM اسمبلر کس طرح Haskell میں سرایت کرتا ہے، ہم نے اس پر ایک معیاری والیٹ نافذ کیا۔ یہاں پر توجہ دینے کے لئے چند چیزیں ہیں:
- یہ معاہدہ ایک فنکشن پر مشتمل ہے، لیکن آپ جتنے چاہیں استعمال کر سکتے ہیں۔ جب آپ میزبان زبان (یعنی ہاسکل) میں کسی نئے فنکشن کی وضاحت کرتے ہیں، تو ہمارا ای ڈی ایس ایل آپ کو یہ انتخاب کرنے کی اجازت دیتا ہے کہ آیا آپ چاہتے ہیں کہ یہ TVM میں ایک الگ روٹین بن جائے یا کال کے وقت صرف ان لائن ہو۔
- ہاسکل کی طرح، فنکشنز میں بھی ایسی قسمیں ہوتی ہیں جو کمپائل کے وقت چیک کی جاتی ہیں۔ ہمارے ای ڈی ایس ایل میں، فنکشن کی ان پٹ قسم اسٹیک کی وہ قسم ہے جس کی فنکشن توقع کرتا ہے، اور نتیجہ کی قسم اسٹیک کی قسم ہے جو کال کے بعد تیار کی جائے گی۔
- کوڈ میں تشریحات ہیں۔
stacktype، کال پوائنٹ پر متوقع اسٹیک کی قسم کو بیان کرنا۔ اصل والیٹ کنٹریکٹ میں یہ صرف تبصرے تھے، لیکن ہمارے eDSL میں یہ اصل میں کوڈ کا حصہ ہیں اور مرتب وقت پر چیک کیے جاتے ہیں۔ وہ دستاویزات یا بیانات کے طور پر کام کر سکتے ہیں جو کوڈ تبدیل ہونے اور اسٹیک کی قسم تبدیل ہونے پر ڈویلپر کو مسئلہ تلاش کرنے میں مدد کرتے ہیں۔ بلاشبہ، اس طرح کی تشریحات رن ٹائم کارکردگی کو متاثر نہیں کرتی ہیں، کیونکہ ان کے لیے کوئی TVM کوڈ تیار نہیں کیا گیا ہے۔ - یہ اب بھی ایک پروٹو ٹائپ ہے جو دو ہفتوں میں لکھا گیا ہے، لہذا اس منصوبے پر ابھی بہت کام کرنا باقی ہے۔ مثال کے طور پر، کلاسز کی تمام مثالیں جو آپ نیچے کوڈ میں دیکھتے ہیں خود بخود تیار ہو جانی چاہئیں۔
ملٹی سیگ والیٹ کا نفاذ ہمارے ای ڈی ایس ایل پر ایسا لگتا ہے:
main :: IO ()
main = putText $ pretty $ declProgram procedures methods
where
procedures =
[ ("recv_external", decl recvExternal)
, ("recv_internal", decl recvInternal)
]
methods =
[ ("seqno", declMethod getSeqno)
]
data Storage = Storage
{ sCnt :: Word32
, sPubKey :: PublicKey
}
instance DecodeSlice Storage where
type DecodeSliceFields Storage = [PublicKey, Word32]
decodeFromSliceImpl = do
decodeFromSliceImpl @Word32
decodeFromSliceImpl @PublicKey
instance EncodeBuilder Storage where
encodeToBuilder = do
encodeToBuilder @Word32
encodeToBuilder @PublicKey
data WalletError
= SeqNoMismatch
| SignatureMismatch
deriving (Eq, Ord, Show, Generic)
instance Exception WalletError
instance Enum WalletError where
toEnum 33 = SeqNoMismatch
toEnum 34 = SignatureMismatch
toEnum _ = error "Uknown MultiSigError id"
fromEnum SeqNoMismatch = 33
fromEnum SignatureMismatch = 34
recvInternal :: '[Slice] :-> '[]
recvInternal = drop
recvExternal :: '[Slice] :-> '[]
recvExternal = do
decodeFromSlice @Signature
dup
preloadFromSlice @Word32
stacktype @[Word32, Slice, Signature]
-- cnt cs sign
pushRoot
decodeFromCell @Storage
stacktype @[PublicKey, Word32, Word32, Slice, Signature]
-- pk cnt' cnt cs sign
xcpu @1 @2
stacktype @[Word32, Word32, PublicKey, Word32, Slice, Signature]
-- cnt cnt' pk cnt cs sign
equalInt >> throwIfNot SeqNoMismatch
push @2
sliceHash
stacktype @[Hash Slice, PublicKey, Word32, Slice, Signature]
-- hash pk cnt cs sign
xc2pu @0 @4 @4
stacktype @[PublicKey, Signature, Hash Slice, Word32, Slice, PublicKey]
-- pubk sign hash cnt cs pubk
chkSignU
stacktype @[Bool, Word32, Slice, PublicKey]
-- ? cnt cs pubk
throwIfNot SignatureMismatch
accept
swap
decodeFromSlice @Word32
nip
dup
srefs @Word8
pushInt 0
if IsEq
then ignore
else do
decodeFromSlice @Word8
decodeFromSlice @(Cell MessageObject)
stacktype @[Slice, Cell MessageObject, Word8, Word32, PublicKey]
xchg @2
sendRawMsg
stacktype @[Slice, Word32, PublicKey]
endS
inc
encodeToCell @Storage
popRoot
getSeqno :: '[] :-> '[Word32]
getSeqno = do
pushRoot
cToS
preloadFromSlice @Word32ہمارے eDSL اور کثیر دستخط والے والیٹ کنٹریکٹ کا مکمل سورس کوڈ اس پر پایا جا سکتا ہے۔ اور مزید بلٹ ان زبانوں کے بارے میں، ہمارے ساتھی جارجی اگاپوف۔
مقابلہ اور TON کے بارے میں نتائج
مجموعی طور پر، ہمارے کام میں 380 گھنٹے لگے (بشمول دستاویزات، میٹنگز اور حقیقی ترقی سے واقفیت)۔ مقابلے کے پروجیکٹ میں پانچ ڈویلپرز نے حصہ لیا: CTO، ٹیم لیڈ، بلاکچین پلیٹ فارم کے ماہرین اور ہاسکل سافٹ ویئر ڈویلپرز۔
ہمیں بغیر کسی مشکل کے مقابلے میں حصہ لینے کے لیے وسائل ملے، کیونکہ ہیکاتھون کی روح، قریبی ٹیم ورک، اور نئی ٹیکنالوجیز کے پہلوؤں میں تیزی سے خود کو غرق کرنے کی ضرورت ہمیشہ پرجوش ہوتی ہے۔ محدود وسائل کے حالات میں زیادہ سے زیادہ نتائج حاصل کرنے کے لیے کئی بے خواب راتیں انمول تجربے اور بہترین یادوں سے ادا کی جاتی ہیں۔ اس کے علاوہ، اس طرح کے کاموں پر کام کرنا ہمیشہ کمپنی کے عمل کا ایک اچھا امتحان ہوتا ہے، کیونکہ اندرونی تعامل کو اچھی طرح سے کام کیے بغیر صحیح معنوں میں اچھے نتائج حاصل کرنا انتہائی مشکل ہوتا ہے۔
بول ایک طرف: ہم TON ٹیم کے کام کی مقدار سے متاثر ہوئے۔ وہ ایک پیچیدہ، خوبصورت اور سب سے اہم کام کرنے کا نظام بنانے میں کامیاب ہو گئے۔ TON نے خود کو بڑی صلاحیت کے ساتھ ایک پلیٹ فارم ثابت کیا ہے۔ تاہم، اس ماحولیاتی نظام کو تیار کرنے کے لیے، بلاک چین پراجیکٹس میں اس کے استعمال کے لحاظ سے اور ترقیاتی ٹولز کو بہتر بنانے کے لحاظ سے، بہت کچھ کرنے کی ضرورت ہے۔ ہمیں اب اس عمل کا حصہ بننے پر فخر ہے۔
اگر اس آرٹیکل کو پڑھنے کے بعد بھی آپ کے ذہن میں کوئی سوال ہے یا آپ کے پاس اپنے مسائل کو حل کرنے کے لیے TON کا استعمال کرنے کے بارے میں آئیڈیاز ہیں، - ہمیں اپنے تجربے کا اشتراک کرنے میں خوشی ہوگی۔
ماخذ: www.habr.com
