ٽيسٽ ڪلائنٽ TON (ٽيليگرام اوپن نيٽورڪ) ۽ سمارٽ معاهدن لاءِ نئين ففٽ ٻولي

هڪ سال اڳ کان وڌيڪ، اهو معلوم ٿيو ته ٽيليگرام ميسينجر جي منصوبن بابت پنهنجي غير مرڪزي نيٽ ورڪ کي ڇڏڻ لاء اوپن نيٽورڪ ٽيليگرام. ان کان پوء هڪ وڏي ٽيڪنيڪل دستاويز دستياب ٿي وئي، جيڪا مبينا طور تي نيڪولائي دوروف طرفان لکيل هئي ۽ مستقبل جي نيٽ ورڪ جي جوڙجڪ کي بيان ڪيو ويو آهي. انھن لاءِ جن ان کي ياد ڪيو، مان سفارش ڪريان ٿو ته توھان پڙھو پڙھو منھنجي ھن دستاويز جي ريٽيلنگ (حصو 1, حصو 2؛ ٽيون حصو، افسوس، اڃا تائين مسودن ۾ مٽي گڏ ڪري رهيو آهي).

ان کان پوء، ڪجهه ڏينهن اڳ تائين TON ترقي جي صورتحال بابت ڪا خاص خبر نه آهي (هڪ ۾ غير رسمي چينل) صفحي جي لنڪ ظاهر نه ٿي https://test.ton.org/download.htmlڪٿي واقع آهن:
ton-test-liteclient-full.tar.xz - TON ٽيسٽ نيٽ ورڪ لاءِ لائٽ ڪلائنٽ ذريعن؛
ton-lite-client-test1.config.json - ٽيسٽ نيٽ ورڪ سان ڳنڍڻ لاء ٺاھ جوڙ فائيل؛
ريڊيو - ڪلائنٽ جي اسيمبلي ۽ لانچ بابت معلومات؛
ڪيئن - ڪلائنٽ کي استعمال ڪندي هڪ سمارٽ معاهدو ڪيئن ٺاهيو تي قدم قدم هدايتون؛
ton.pdf — تازه ٿيل دستاويز (تاريخ مارچ 2، 2019) TON نيٽ ورڪ جي ٽيڪنيڪل جائزو سان؛
tvm.pdf - ٽي وي ايم جي ٽيڪنيڪل وضاحت (TON ورچوئل مشين، TON ورچوئل مشين)؛
tblkch.pdf - TON blockchain جي ٽيڪنيڪل وضاحت؛
fifthbase.pdf - نئين ففٽ ٻولي جو بيان، TON ۾ سمارٽ معاهدو ٺاهڻ لاءِ ٺهيل آهي.

مان ورجائي ٿو، صفحي جي ڪا به سرڪاري تصديق نه هئي ۽ اهي سڀئي دستاويز ٽيليگرام کان، پر انهن مواد جي مقدار انهن کي ڪافي قابل اعتبار بڻائي ٿو. شايع ٿيل ڪلائنٽ لانچ ڪريو پنهنجي خطري تي.

ٽيسٽ ڪلائنٽ جي تعمير

پهرين، اچو ته هڪ ٽيسٽ ڪلائنٽ ٺاهڻ ۽ هلائڻ جي ڪوشش ڪريون - خوش قسمتي سان، ريڊيو هن سادي عمل کي تفصيل سان بيان ڪري ٿو. مان ائين ڪندس macOS 10.14.5 استعمال ڪندي مثال طور؛ مان ٻين سسٽم تي تعمير جي ڪاميابي جي ضمانت نه ٿو ڏئي سگهان.

  1. ڊائون لوڊ ڪريو ۽ پيڪ ڪريو ذريعو آرڪائيو. اهو ضروري آهي ته جديد نسخو ڊائون لوڊ ڪريو جيئن ته هن اسٽيج تي پسمانده مطابقت جي ضمانت نه آهي.

  2. پڪ ڪريو ته make، cmake (ورجن 3.0.2 يا وڌيڪ)، OpenSSL (بشمول C هيڊر فائلون)، g++ يا ڪلانگ جا جديد ورجن سسٽم تي انسٽال ٿيل آهن. مون کي ڪا به شيءِ انسٽال ڪرڻ جي ضرورت نه هئي، هر شيءِ گڏ ٿي آئي.

  3. اچو ته فرض ڪريو ذريعن کي فولڊر ۾ ڀريل آهن ~/lite-client. ان کان الڳ، گڏ ڪيل پروجيڪٽ لاءِ خالي فولڊر ٺاهيو (مثال طور، ~/liteclient-build)، ۽ ان مان (cd ~/liteclient-build) حڪم ڪال ڪريو:

    cmake ~/lite-client
    cmake --build . --target test-lite-client

    ٽيسٽ ڪلائنٽ TON (ٽيليگرام اوپن نيٽورڪ) ۽ سمارٽ معاهدن لاءِ نئين ففٽ ٻولي

    سمارٽ معاهدن لاءِ ففٽ ٻولي مترجم ٺاهڻ لاءِ (هيٺ ڏنل ان بابت وڌيڪ)، اسان پڻ سڏ ڪريون ٿا

    cmake --build . --target fift

  4. موجوده ڊائون لوڊ ڪريو configuration file ٽيسٽ نيٽ ورڪ سان ڳنڍڻ ۽ ان کي گڏ ڪيل ڪلائنٽ سان فولڊر ۾ رکڻ لاء.

  5. ٿي ويو، توهان ڪلائنٽ شروع ڪري سگهو ٿا:

    ./test-lite-client -C ton-lite-client-test1.config.json

جيڪڏهن هر شي صحيح طريقي سان ڪئي وئي آهي، توهان کي هن وانگر ڪجهه ڏسڻ گهرجي:

ٽيسٽ ڪلائنٽ TON (ٽيليگرام اوپن نيٽورڪ) ۽ سمارٽ معاهدن لاءِ نئين ففٽ ٻولي

جيئن اسان ڏسي سگهون ٿا، اتي ڪجھ دستياب حڪم آھن:
help - حڪمن جي هن فهرست کي ڏيکاري؛
quit - ٻاهر وڃو؛
time - سرور تي موجوده وقت ڏيکاريو؛
status - ڏيکاريو ڪنيڪشن ۽ مقامي ڊيٽابيس جي حيثيت؛
last - بلاڪچين جي حالت کي اپڊيٽ ڪريو (آخري بلاڪ ڊائون لوڊ ڪريو). اهو ضروري آهي ته هن حڪم کي هلائڻ لاء ڪنهن به درخواستن کان پهريان پڪ ڪرڻ لاء ته توهان نيٽ ورڪ جي موجوده حالت ڏسي رهيا آهيو.
sendfile <filename> - TON نيٽ ورڪ تي مقامي فائل اپ لوڊ ڪريو. اهو ڪيئن نيٽ ورڪ سان رابطو ٿئي ٿو - بشمول، مثال طور، نوان سمارٽ معاهدو ٺاهڻ ۽ اڪائونٽن جي وچ ۾ فنڊ منتقل ڪرڻ جي درخواستون؛
getaccount <address> - موجوده ڏيکاريو (جڏهن حڪم تي عمل ڪيو ويو) last) مخصوص ايڊريس سان اڪائونٽ جي حيثيت؛
privkey <filename> - مقامي فائل مان خانگي چيڪ لوڊ ڪريو.

جيڪڏهن، ڪلائنٽ شروع ڪرڻ وقت، توهان هڪ فولڊر کي ان کي اختيار استعمال ڪندي منتقل ڪيو -D، پوءِ هو ان ۾ ماسٽرچين جو آخري بلاڪ شامل ڪندو:

./test-lite-client -C ton-lite-client-test1.config.json -D ~/ton-db-dir

ھاڻي اسان اڳتي وڌي سگھون ٿا وڌيڪ دلچسپ شين ڏانھن - ففٽ ٻولي سکو، ھڪ سمارٽ ڪانٽريڪٽ گڏ ڪرڻ جي ڪوشش ڪريو (مثال طور، ھڪ ٽيسٽ والٽ ٺاھيو)، ان کي نيٽ ورڪ تي اپلوڊ ڪريو ۽ اڪائونٽن جي وچ ۾ فنڊ منتقل ڪرڻ جي ڪوشش ڪريو.

ٻولي پنجون

سند مان fifthbase.pdf توهان ڳولي سگهو ٿا ته ٽيليگرام ٽيم سمارٽ معاهدو ٺاهڻ لاءِ هڪ نئين اسٽيڪ ٻولي ٺاهي آهي پنجون (ظاهر آهي انگن مان پنجون, Forth سان ملندڙ جلندڙ، هڪ ٻولي جنهن سان پنجين ۾ گهڻو ڪجهه عام آهي).

دستاويز ڪافي وسيع آهي، 87 صفحا، ۽ مان هن مضمون جي فريم ورڪ ۾ تفصيل سان ان جي مواد کي ٻيهر نه ٻڌايان ٿو (گهٽ ۾ گهٽ ڇاڪاڻ ته مون پاڻ ان کي پڙهڻ ختم نه ڪيو آهي :). مان مکيه نقطن تي ڌيان ڏيندس ۽ هن ٻولي ۾ ڪوڊ جا ٻه مثال ڏيندس.

بنيادي سطح تي، ففٽ جو نحو بلڪل سادو آهي: ان جو ڪوڊ شامل آهي لفظن, عام طور تي خالن يا لڪير جي وقفن سان الڳ ٿيل (خاص صورت: ڪجهه لفظن کي پاڻ کان پوءِ الڳ ڪندڙ جي ضرورت ناهي). ڪو لفظ اکرن جو هڪ ڪيس-حساس سلسلو آهي جيڪو هڪ خاص سان ملندو آهي وضاحت (تقريبن، مترجم کي ڇا ڪرڻ گهرجي جڏهن اهو هن لفظ سان منهن ڏئي ٿو). جيڪڏهن ڪنهن لفظ جي ڪا به وصف نه آهي، مترجم ان کي انگ جي طور تي پارس ڪرڻ جي ڪوشش ڪري ٿو ۽ ان کي اسٽيڪ تي رکي ٿو. رستي ۾، هتي انگ اکر آهن - اوچتو - 257-بٽ انٽيجرز، ۽ ان ۾ ڪو به فرق نه آهي - وڌيڪ واضح طور تي، اهي فوري طور تي عددن جي هڪ جوڙي ۾ تبديل ٿي ويندا آهن، هڪ منطقي فرق جي عددي ۽ ڊنوميٽر ٺاهيندا آهن.

لفظ اسٽيڪ جي چوٽي تي قدرن سان لهه وچڙ ۾ ايندا آهن. لفظن جو هڪ الڳ قسم - اڳوڻو - اسٽيڪ استعمال نٿو ڪري، پر ماخذ فائل مان ايندڙ اکر. مثال طور، هي ڪيئن اسٽرنگ لٽرلز تي عمل ڪيو ويندو آهي - اقتباس جو ڪردار (") ھڪڙو اڳوڻو لفظ آھي جيڪو ايندڙ (بند ٿيڻ) اقتباس کي ڳولي ٿو، ۽ انھن جي وچ ۾ اسٽرنگ کي اسٽيڪ تي دٻائي ٿو. ون لينرز ساڳيءَ طرح عمل ڪن ٿا (//) ۽ ملٽي لائن (/*) تبصرا.

هتي ئي ٻوليءَ جي لڳ ڀڳ سموري اندروني ساخت ختم ٿي وڃي ٿي. ٻيو سڀ ڪجهه (بشمول ڪنٽرول تعميرات) لفظن جي طور تي بيان ڪيو ويو آهي (يا ته اندروني، جهڙوڪ رياضياتي عمل ۽ نون لفظن جي تعريف؛ يا "معياري لائبريري" ۾ بيان ڪيل آهي. Fift.fif، جيڪو فولڊر ۾ آهي crypto/fift ذريعن ۾).

ففٽ ۾ هڪ سادي مثال پروگرام:

{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .

پهرين لائن هڪ نئين لفظ جي وضاحت ڪري ٿي setxy (پريفڪس نوٽ ڪريو {، جيڪو بند ٿيڻ کان اڳ هڪ بلاڪ ٺاهي ٿو } ۽ اڳڪٿي :، جيڪو اصل ۾ لفظ جي وضاحت ڪري ٿو). setxy اسٽيڪ جي چوٽي کان هڪ نمبر وٺي ٿو، ان کي عالمي طور تي بيان ڪري ٿو (يا ٻيهر بيان ڪري ٿو). مسلسل x, ۽ هن نمبر جو چورس هڪ مستقل طور y (ڏسو ته مستقل جي قدرن کي ٻيهر بيان ڪري سگهجي ٿو، مان بلڪه انهن کي متغير سڏيندس، پر مان ٻولي ۾ نالو ڏيڻ جي ڪنوينشن جي پيروي ڪريان ٿو).

ايندڙ ٻه سٽون اسٽيڪ تي هڪ نمبر رکي ۽ ڪال ڪريو setxy، پوءِ ثابتين جا قدر ڏيکاريا ويندا x, y (لفظ آئوٽ پُٽ لاءِ استعمال ٿيندو آهي .)، ٻئي مستقل اسٽيڪ تي رکيل آهن، سمڊ، ۽ نتيجو پڻ ڇپيل آهي. نتيجي طور اسان ڏسنداسين:

3 9 12 ok
7 49 56 ok

(ليڪ ”ٺيڪ“ مترجم طرفان ڇپيل آهي جڏهن اها موجوده لائن کي انٽرايڪٽو ان پٽ موڊ ۾ پروسيسنگ مڪمل ڪري ٿي)

خير، هڪ مڪمل ڪوڊ مثال:

"Asm.fif" include

-1 constant wc  // create a wallet in workchain -1 (masterchain)

// Create new simple wallet
<{  SETCP0 DUP IFNOTRET INC 32 THROWIF  // return if recv_internal, fail unless recv_external
    512 INT LDSLICEX DUP 32 PLDU   // sign cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  // sign cs cnt cnt' pubk
    s1 s2 XCPU            // sign cs cnt pubk cnt' cnt
    EQUAL 33 THROWIFNOT   // ( seqno mismatch? )
    s2 PUSH HASHSU        // sign cs cnt pubk hash
    s0 s4 s4 XC2PU        // pubk cs cnt hash sign pubk
    CHKSIGNU              // pubk cs cnt ?
    34 THROWIFNOT         // signature mismatch
    ACCEPT
    SWAP 32 LDU NIP 
    DUP SREFS IF:<{
      8 LDU LDREF         // pubk cnt mode msg cs
      s0 s2 XCHG SENDRAWMSG  // pubk cnt cs ; ( message sent )
    }>
    ENDS
    INC NEWC 32 STU 256 STU ENDC c4 POPCTR
}>c
// code
<b 0 32 u, 
   newkeypair swap dup constant wallet_pk 
   "new-wallet.pk" B>file
   B, 
b> // data
// no libraries
<b b{00110} s, rot ref, swap ref, b>  // create StateInit
dup ."StateInit: " <s csr. cr
dup hash dup constant wallet_addr
."new wallet address = " wc . .": " dup x. cr
wc over 7 smca>$ type cr
256 u>B "new-wallet.addr" B>file
<b 0 32 u, b>
dup ."signing message: " <s csr. cr
dup hash wallet_pk ed25519_sign_uint rot
<b b{1000100} s, wc 8 i, wallet_addr 256 u, b{000010} s, swap <s s, b{0} s, swap B, swap <s s, b>
dup ."External message for initialization is " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B>file
."(Saved to file " type .")" cr

هي خوفناڪ ڏسندڙ فائل هڪ سمارٽ معاهدو ٺاهڻ لاءِ آهي - اهو هڪ فائل ۾ رکيو ويندو new-wallet-query.boc عملدرآمد کان پوء. مهرباني ڪري نوٽ ڪريو ته ٻي اسيمبلي ٻولي هتي استعمال ڪئي وئي آهي TON ورچوئل مشين لاءِ (مان ان تي تفصيل سان نه ڳالهائيندس)، جنهن جون هدايتون بلاڪچين تي رکيون وينديون.

اهڙيء طرح، ٽي وي ايم لاء جمع ڪندڙ ففٽ ۾ لکيل آهي - هن اسمبلر جا ذريعا فائل ۾ آهن crypto/fift/Asm.fif ۽ مٿي ڏنل ڪوڊ جي شروعات ۾ ڳنڍيل آهن.

مان ڇا چئي سگهان ٿو، ظاهري طور تي نيڪولائي دوروف صرف نئين پروگرامنگ ٻوليون ٺاهڻ سان پيار ڪندو آهي :)

هڪ سمارٽ معاهدو ٺاهڻ ۽ TON سان رابطو ڪرڻ

تنهن ڪري، اچو ته فرض ڪريون ته اسان TON ڪلائنٽ ۽ ففٽ مترجم کي گڏ ڪيو آهي جيئن مٿي بيان ڪيو ويو آهي ۽ ٻولي سان واقف ٿي چڪا آهيون. هاڻي هڪ سمارٽ معاهدو ڪيئن ٺاهيو؟ اهو فائل ۾ بيان ڪيو ويو آهي ڪيئن، ذريعن سان ڳنڍيل آهي.

TON ۾ اڪائونٽس

جيئن مون بيان ڪيو آهي TON جائزو, هي نيٽ ورڪ هڪ کان وڌيڪ blockchain تي مشتمل آهي - اتي هڪ عام آهي، جنهن کي سڏيو ويندو آهي. "ماسٽر زنجير"، گڏوگڏ اضافي "ڪم جي زنجير" جو هڪ صوابديدي نمبر، 32-bit نمبر جي سڃاڻپ. ماسٽر چين کي -1 جي سڃاڻپ ڪندڙ آهي؛ ان کان علاوه، 0 جي سڃاڻپ ڪندڙ سان گڏ هڪ "بنيادي" ورڪ چين پڻ استعمال ڪري سگهجي ٿو. هر ورڪ چين جي پنهنجي ترتيب ٿي سگهي ٿي. اندروني طور تي، هر ڪم جي چين ۾ ورهايل آهي شارڊ چين، پر اهو هڪ عمل درآمد تفصيل آهي جنهن کي ذهن ۾ رکڻ جي ضرورت ناهي.

ھڪڙي ڪم جي چين اندر، ڪيترائي اڪائونٽ محفوظ ڪيا ويا آھن جن کي انھن جا پنھنجو account_id سڃاڻپ ڪندڙ آھن. ماسٽر زنجير ۽ صفر ڪم جي زنجير لاء، اهي 256 بٽ ڊگهو آهن. اهڙيء طرح، اڪائونٽ جي سڃاڻپ ڪندڙ لکيو ويو آهي، مثال طور، هن طرح:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

ھي آھي ”خام“ فارميٽ: پھريائين workchain ID، پوءِ ھڪ ڪالون، ۽ اڪائونٽ ID hexadecimal notation ۾.

ان کان علاوه، ھڪڙو مختصر فارميٽ آھي - ورڪ چين نمبر ۽ اڪائونٽ ايڊريس بائنري فارم ۾ انڪوڊ ٿيل آھن، ھڪڙي چيڪسم انھن ۾ شامل ڪيو ويو آھي، ۽ اھو سڀ بيس 64 ۾ انڪوڊ ٿيل آھي:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

هن رڪارڊ فارميٽ کي ڄاڻڻ سان، اسان حڪم استعمال ڪندي ٽيسٽ ڪلائنٽ ذريعي اڪائونٽ جي موجوده حالت جي درخواست ڪري سگھون ٿا

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

اسان هن وانگر ڪجهه حاصل ڪنداسين:

[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode]    requesting account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode]    got account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D with respect to blocks (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F and (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
account state is (account
  addr:(addr_std
    anycast:nothing workchain_id:-1 address:x8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D)
  storage_stat:(storage_info
    used:(storage_used
      cells:(var_uint len:1 value:3)
      bits:(var_uint len:2 value:539)
      public_cells:(var_uint len:0 value:0)) last_paid:0
    due_payment:nothing)
  storage:(account_storage last_trans_lt:74208000003
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:7 value:999928362430000))
      other:(extra_currencies
        dict:hme_empty))
    state:(account_active
      (
        split_depth:nothing
        special:nothing
        code:(just
          value:(raw@^Cell 
            x{}
             x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
            ))
        data:(just
          value:(raw@^Cell 
            x{}
             x{0000000D}
            ))
        library:hme_empty))))
x{CFF8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D2068086C000000000000000451C90E00DC0E35B7DB5FB8C134_}
 x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
 x{0000000D}

اسان اهو ڍانچو ڏسون ٿا جيڪو مخصوص ڪم جي چين جي DHT ۾ ذخيرو ٿيل آهي. مثال طور، ميدان ۾ storage.balance موجوده اڪائونٽ بيلنس آهي، ۾ storage.state.code - سمارٽ معاهدي ڪوڊ، ۽ ۾ storage.state.data - ان جي موجوده ڊيٽا. مهرباني ڪري نوٽ ڪريو ته TON ڊيٽا اسٽوريج - سيل، سيلز - وڻ وانگر آهي، هر سيل کي پنهنجي ڊيٽا ۽ ٻار جي سيلز ٻنهي ٿي سگهي ٿو. اهو آخري لائنن ۾ انڊينٽيشن طور ڏيکاريل آهي.

هڪ سمارٽ معاهدي جي تعمير

ھاڻي اچو ته اھڙي ڍانچي پاڻ ٺاھيون (ان کي BOC چئبو آھي. سيلن جو ٿلهو) ففٽ ٻولي استعمال ڪندي. خوشقسمتيء سان، توهان کي هڪ سمارٽ معاهدو پاڻ کي لکڻ جي ضرورت ناهي - فولڊر ۾ crypto/block ماخذ آرڪائيو مان هڪ فائل آهي new-wallet.fif، جيڪو اسان کي هڪ نئون والٽ ٺاهڻ ۾ مدد ڏيندو. اچو ته ان کي گڏ ڪيل ڪلائنٽ سان فولڊر ۾ نقل ڪريون (~/liteclient-build، جيڪڏهن توهان مٿي ڏنل هدايتن تي عمل ڪيو). مون مٿي ڏنل مواد کي ففٽ تي ڪوڊ جي مثال طور بيان ڪيو.

ھن فائل کي ھيٺ ڏنل طريقي سان عمل ڪريو:

./crypto/fift -I"<source-directory>/crypto/fift" new-wallet.fif

اهو آهي <source-directory> ان کي تبديل ڪيو وڃي اڻ ڀريل ذريعن جي رستي سان ("~" علامت، بدقسمتي سان، هتي استعمال نٿو ڪري سگهجي، مڪمل رستو گهربل آهي). چاٻي استعمال ڪرڻ بدران -I توھان وضاحت ڪري سگھو ٿا ھڪڙو ماحولياتي متغير FIFTPATH ۽ ھن رستي کي ان ۾ وجھو.

جتان اسان شروع ڪيو Fift فائل جي نالي سان new-wallet.fif، اهو ان تي عمل ڪندو ۽ نڪرندو. جيڪڏھن توھان فائل جو نالو ڇڏي ڏيو، توھان مترجم سان گڏ راند ڪري سگھوٿا.

عمل ڪرڻ کان پوء، هن وانگر ڪجهه ڪنسول ۾ ظاهر ٿيڻ گهرجي:

StateInit: x{34_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

new wallet address = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
signing message: x{00000000}

External message for initialization is x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Saved to file new-wallet-query.boc)

هن جو مطلب آهي ته پرس ID سان -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (يا، ڇا ساڳيو آهي، 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) ڪاميابي سان ٺاهي وئي. لاڳاپيل ڪوڊ فائل ۾ هوندو new-wallet-query.bocهن جو پتو آهي new-wallet.addr، ۽ خانگي چيڪ اندر آهي new-wallet.pk (محتاط رهو- اسڪرپٽ کي ٻيهر هلائڻ سان انهن فائلن کي اوور رائٽ ڪيو ويندو).

يقينن، TON نيٽ ورڪ اڃا تائين هن والٽ جي باري ۾ نه ڄاڻندا آهن؛ اهو صرف انهن فائلن جي صورت ۾ ذخيرو ٿيل آهي. هاڻي ان کي نيٽ ورڪ تي اپ لوڊ ڪرڻ جي ضرورت آهي. بهرحال، مسئلو اهو آهي ته هڪ سمارٽ معاهدو ٺاهڻ لاء توهان کي هڪ ڪميشن ادا ڪرڻ جي ضرورت آهي، ۽ توهان جي اڪائونٽ بيلنس اڃا صفر آهي.

ڪم ڪرڻ واري موڊ ۾، اهو مسئلو حل ڪيو ويندو گرام خريد ڪرڻ جي بدلي تي (يا ٻئي والٽ مان منتقلي). خير، موجوده ٽيسٽ موڊ ۾، هڪ خاص سمارٽ معاهدو ٺاهيو ويو آهي، جنهن مان توهان صرف 20 گرام تائين طلب ڪري سگهو ٿا.

ڪنهن ٻئي جي سمارٽ معاهدي لاءِ درخواست پيدا ڪرڻ

اسان هڪ سمارٽ معاهدي جي درخواست ڪريون ٿا جيڪو گرام کي کاٻي ۽ ساڄي هن طرح ورهائي ٿو. ساڳئي فولڊر ۾ crypto/block فائل ڳوليو testgiver.fif:

// "testgiver.addr" file>B 256 B>u@ 
0x8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
dup constant wallet_addr ."Test giver address = " x. cr

0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2
constant dest_addr

-1 constant wc
0x00000011 constant seqno

1000000000 constant Gram
{ Gram swap */ } : Gram*/

6.666 Gram*/ constant amount

// b x --> b'  ( serializes a Gram amount )
{ -1 { 1+ 2dup 8 * ufits } until
  rot over 4 u, -rot 8 * u, } : Gram, 

// create a message (NB: 01b00.., b = bounce)
<b b{010000100} s, wc 8 i, dest_addr 256 u, amount Gram, 0 9 64 32 + + 1+ 1+ u, "GIFT" $, b>
<b seqno 32 u, 1 8 u, swap ref, b>
dup ."enveloping message: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 Gram, b{00} s,
   swap <s s, b>
dup ."resulting external message: " <s csr. cr
2 boc+>B dup Bx. cr
"wallet-query.boc" B>file

اسان ان کي فولڊر ۾ گڏ ڪيل ڪلائنٽ سان گڏ محفوظ ڪنداسين، پر اسان پنجين لائن کي درست ڪنداسين - لڪير کان اڳ "constant dest_addr". اچو ته ان کي پرس جي ايڊريس سان تبديل ڪريون جيڪو توھان اڳ ٺاھيو آھي (مڪمل، مختصر نه). شروع ۾ ”-1:“ لکڻ جي ڪا ضرورت ناهي، بجاءِ شروع ۾ ”0x“ لکو.

توھان پڻ لڪير تبديل ڪري سگھو ٿا 6.666 Gram*/ constant amount - اها رقم گرامن ۾ آهي جيڪا توهان درخواست ڪري رهيا آهيو (20 کان وڌيڪ نه). توڙي جو توھان پورو نمبر بيان ڪريو، decimal point ڇڏي ڏيو.

آخرڪار، توهان کي لائن کي درست ڪرڻ جي ضرورت آهي 0x00000011 constant seqno. هتي پهريون نمبر موجوده تسلسل نمبر آهي، جيڪو اڪائونٽ جاري ڪندڙ گرام ۾ ذخيرو ٿيل آهي. مان ان کي ڪٿان حاصل ڪري سگهان ٿو؟ جيئن مٿي بيان ڪيو ويو آهي، ڪلائنٽ شروع ڪريو ۽ هلائڻ:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

بلڪل آخر ۾، سمارٽ معاهدي جي ڊيٽا تي مشتمل هوندي

...
x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
 x{0000000D}

نمبر 0000000D (توهان جو وڏو هوندو) اهو تسلسل نمبر آهي جنهن کي تبديل ڪيو وڃي testgiver.fif.

اھو آھي، فائل کي محفوظ ڪريو ۽ ھلايو (./crypto/fift testgiver.fif). ٻاھر ھڪڙي فائل ھوندي wallet-query.boc. اھو اھو آھي جيڪو ٺھيل آھي پيغام ڪنهن ٻئي جي سمارٽ ڪانٽريڪٽ تي - هڪ گذارش ”اتڻ گرامن کي اهڙي ۽ اهڙي اڪائونٽ ۾ منتقل ڪرڻ“.

ڪلائنٽ استعمال ڪندي، اسان ان کي نيٽ ورڪ تي اپلوڊ ڪريون ٿا:

> sendfile wallet-query.boc
[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode]    sending query from file wallet-query.boc
[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query]   external message status is 1

جيڪڏھن توھان ھاڻي ڪال ڪريو last، ۽ پوءِ ٻيهر ان اڪائونٽ جي اسٽيٽس جي درخواست ڪريو جنهن کان اسان گرام لاءِ پڇيو، پوءِ اسان کي ڏسڻ گهرجي ته ان جو تسلسل نمبر هڪ کان وڌي ويو آهي - ان جو مطلب اهو آهي ته هن اسان جي اڪائونٽ ۾ پئسا موڪليا.

آخري قدم رهي ٿو - اسان جي والٽ جو ڪوڊ ڊائون لوڊ ڪريو (ان جو بيلنس اڳ ۾ ئي ڀريو ويو آهي، پر سمارٽ ڪانٽريڪٽ ڪوڊ کان سواءِ اسان ان کي منظم نه ڪري سگهنداسين). اسان کڻون ٿا sendfile new-wallet-query.boc - ۽ اھو اھو آھي، توھان وٽ آھي توھان جو پنھنجو پرس TON نيٽ ورڪ ۾ (جيتوڻيڪ اھو ھاڻي لاءِ صرف ھڪڙو امتحان آھي).

ٻاهر نڪرڻ واري ٽرانزيڪشن ٺاهڻ

ٺاهيل اڪائونٽ جي بيلنس مان پئسا منتقل ڪرڻ لاء، هڪ فائل آهي crypto/block/wallet.fif، جنهن کي فولڊر ۾ گڏ ڪيل ڪلائنٽ سان گڏ رکڻو پوندو.

پوئين قدمن وانگر، توهان کي ترتيب ڏيڻ جي ضرورت آهي رقم جيڪا توهان منتقل ڪري رهيا آهيو، وصول ڪندڙ جو پتو (dest_addr)، ۽ توهان جي والٽ جو seqno (اهو والٽ شروع ڪرڻ کان پوءِ 1 جي برابر آهي ۽ هر ٻاهر وڃڻ واري ٽرانزيڪشن کان پوءِ 1 وڌي ٿو - توهان ڪري سگهو ٿا. ان کي ڏسو توهان جي اڪائونٽ جي صورتحال جي درخواست ڪندي). تجربن لاء، توهان استعمال ڪري سگهو ٿا، مثال طور، منهنجو پرس - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

شروع ڪرڻ تي (./crypto/fift wallet.fif) اسڪرپٽ وٺي ويندي توهان جي والٽ جو پتو (جتان توهان منتقل ڪيو ٿا) ۽ فائلن مان ان جي نجي ڪي new-wallet.addr и new-wallet.pk، ۽ وصول ٿيل پيغام کي لکيو ويندو new-wallet-query.boc.

جيئن اڳ، سڌو سنئون ٽرانزيڪشن کي انجام ڏيڻ لاء، ڪال ڪريو sendfile new-wallet-query.boc ڪلائنٽ ۾. ان کان پوء، بلاڪچين جي حالت کي اپڊيٽ ڪرڻ نه وساريو (last(getaccount <account_id>).

ٽيسٽ ڪلائنٽ TON (ٽيليگرام اوپن نيٽورڪ) ۽ سمارٽ معاهدن لاءِ نئين ففٽ ٻولي

اهو سڀ ڪجهه آهي، هاڻي اسان TON ۾ سمارٽ معاهدو ٺاهي سگهون ٿا ۽ انهن ڏانهن درخواستون موڪلي سگهون ٿا. جئين توهان ڏسي سگهو ٿا، موجوده ڪارڪردگي اڳ ۾ ئي ڪافي آهي، مثال طور، گرافڪ انٽرفيس سان وڌيڪ دوستانه والٽ ٺاهيو (جڏهن ته، اهو توقع آهي ته اهو اڳ ۾ ئي ميسينجر جي حصي طور دستياب ٿي ويندو).

صرف رجسٽرڊ استعمال ڪندڙ سروي ۾ حصو وٺي سگهن ٿا. سائن ان ڪريو، توهان جي مهرباني.

ڇا توهان TON، TVM، Fift جي تجزيي سان آرٽيڪل جاري رکڻ ۾ دلچسپي رکو ٿا؟

  • ها، مان انتظار ڪري رهيو آهيان مضمونن جي سيريز جي مڪمل ٿيڻ جو TON جي عام جائزو سان

  • ها، اهو دلچسپ آهي ته ففٽ ٻولي بابت وڌيڪ پڙهڻ لاء

  • ها، مان وڌيڪ سکڻ چاهيان ٿو TON ورچوئل مشين ۽ ان لاءِ گڏ ڪرڻ وارو

  • نه، هن مان ڪو به دلچسپ ناهي

39 صارفين ووٽ ڏنو. 12 استعمال ڪندڙن کي روڪيو ويو.

ٽيليگرام جي TON لانچ ڪرڻ جي منصوبن بابت توهان ڇا ٿا سوچيو؟

  • مون کي هن منصوبي لاء وڏي اميد آهي

  • مان صرف دلچسپي سان ان جي ترقي جي پيروي ڪري رهيو آهيان.

  • مان شڪي آهيان ۽ ان جي ڪاميابي تي شڪ آهيان.

  • مان سمجهان ٿو ته هن شروعات کي هڪ ناڪامي ۽ وسيع عوام لاء غير ضروري آهي

47 صارفين ووٽ ڏنو. 12 استعمال ڪندڙن کي روڪيو ويو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو