ቶን (Telegram Open Network) ደንበኛን እና አዲስ ፊፍት ቋንቋን ለዘመናዊ ኮንትራቶች ፈትኑ

ከአንድ አመት በፊት የቴሌግራም መልእክተኛ የራሱን ያልተማከለ አውታረመረብ ለመልቀቅ ስላቀደው እቅድ የታወቀ ሆነ የአውታረ መረብ ቴሌግራምን ይክፈቱ. ከዚያም በኒኮላይ ዱሮቭ የተፃፈ እና የወደፊቱን አውታረመረብ አወቃቀሩን የሚገልጽ ግዙፍ ቴክኒካዊ ሰነድ ተገኘ። ላመለጡ፣ ይህን ሰነድ እንደገና መግለጼን እንዲያነቡት እመክራለሁ።ьасть 1, ьасть 2; ሦስተኛው ክፍል, ወዮ, አሁንም በረቂቆች ውስጥ አቧራ እየሰበሰበ ነው).

ከዚያን ጊዜ ጀምሮ፣ ከጥቂት ቀናት በፊት (በአንደኛው ውስጥ) ስለ ቶን ልማት ሁኔታ ምንም ጠቃሚ ዜና የለም ኦፊሴላዊ ያልሆኑ ቻናሎች) የገጹ አገናኝ አልታየም። https://test.ton.org/download.htmlየት ይገኛሉ፡-
◦ ቶን-ሙከራ-ሊተክሊንት-ፉል.ታር.xz - ለቶን የሙከራ አውታር የብርሃን ደንበኛ ምንጮች;
◦ ቶን-ላይት-ደንበኛ-test1.config.json - ለሙከራ አውታረመረብ ለማገናኘት የማዋቀሪያ ፋይል;
◦ README - ስለ ደንበኛው መሰብሰብ እና መጀመር መረጃ;
◦ እንዴት ነው - ደንበኛን በመጠቀም ዘመናዊ ውል እንዴት መፍጠር እንደሚቻል የደረጃ በደረጃ መመሪያዎች;
◦ ቶን.pdf - የዘመነ ሰነድ (እ.ኤ.አ. ማርች 2 ቀን 2019) የቶን አውታረ መረብ ቴክኒካዊ አጠቃላይ እይታ ያለው;
◦ tvm.pdf - የቲቪ ኤም ቴክኒካዊ መግለጫ (ቶን ምናባዊ ማሽን ፣ ቶን ምናባዊ ማሽን);
◦ tblkch.pdf - የ TON blockchain ቴክኒካዊ መግለጫ;
◦ fifthbase.pdf - በቶን ውስጥ ብልጥ ኮንትራቶችን ለመፍጠር የተነደፈው የአዲሱ Fift ቋንቋ መግለጫ።

እደግመዋለሁ ፣ የገጹ እና እነዚህ ሁሉ ሰነዶች ከቴሌግራም ምንም ኦፊሴላዊ ማረጋገጫ አልነበረም ፣ ግን የእነዚህ ቁሳቁሶች መጠን በጣም ምክንያታዊ ያደርጋቸዋል። የታተመውን ደንበኛ ያሂዱ በራሱ ኃላፊነት.

የሙከራ ደንበኛ መገንባት

ለመጀመር ፣ የሙከራ ደንበኛን ለመገንባት እና ለማሄድ እንሞክር - ጥሩ ፣ README ይህንን ቀላል ሂደት በዝርዝር ይገልፃል. ይህንን የማክኦኤስ 10.14.5 ምሳሌ በመጠቀም አደርጋለሁ ፣ በሌሎች ስርዓቶች ላይ ለስብሰባው ስኬት ማረጋገጥ አልችልም።

  1. በማውረድ እና በማውረድ ላይ ምንጭ ማህደር. በዚህ ደረጃ ወደ ኋላ ተኳሃኝነት ዋስትና ስለማይሰጥ የቅርብ ጊዜውን ስሪት ማውረድ አስፈላጊ ነው.

  2. በሲስተምዎ ላይ የቅርብ ጊዜዎቹ የ make፣ cmake (ስሪት 3.0.2 ወይም ከዚያ በላይ)፣ OpenSSL (C headersን ጨምሮ)፣ g++ ወይም clang መጫኑን ያረጋግጡ። ምንም ነገር መጫን አላስፈለገኝም, ሁሉም ነገር ወዲያውኑ ተሰበሰበ.

  3. ምንጮቹ ወደ ማህደር ተከፍተዋል እንበል ~/lite-client. ከእሱ የተለየ ፣ ለተሰበሰበው ፕሮጀክት ባዶ አቃፊ እንፈጥራለን (ለምሳሌ ፣ ~/liteclient-build) እና ከእሱ (cd ~/liteclient-build) ትዕዛዞችን ይደውሉ:

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

    ቶን (Telegram Open Network) ደንበኛን እና አዲስ ፊፍት ቋንቋን ለዘመናዊ ኮንትራቶች ፈትኑ

    የ Fift ቋንቋ አስተርጓሚ ለስማርት ኮንትራቶች (ከዚህ በታች የተገለፀውን) ለመገንባት እንጠራዋለን

    cmake --build . --target fift

  4. የአሁኑን በማውረድ ላይ የማዋቀር ፋይል ከሙከራው አውታረመረብ ጋር ለመገናኘት እና ከተሰበሰበው ደንበኛ ጋር በአቃፊው ውስጥ ያስቀምጡት.

  5. ተጠናቅቋልደንበኛውን ማሄድ ይችላሉ፡-

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

ሁሉም ነገር በትክክል ከተሰራ, እንደዚህ ያለ ነገር ማየት አለብዎት:

ቶን (Telegram Open Network) ደንበኛን እና አዲስ ፊፍት ቋንቋን ለዘመናዊ ኮንትራቶች ፈትኑ

እንደሚመለከቱት፣ ጥቂት የሚገኙ ትዕዛዞች አሉ፡-
◦ help - ይህንን የትዕዛዝ ዝርዝር አሳይ;
◦ quit - ወጣበል;
◦ time - የአሁኑን ጊዜ በአገልጋዩ ላይ አሳይ;
◦ status - የግንኙነቱን ሁኔታ እና የአካባቢ ውሂብ ጎታውን ማሳየት;
◦ last - የብሎክቼይን ሁኔታን ያዘምኑ (የመጨረሻውን እገዳ ያውርዱ)። የኔትወርኩን ትክክለኛ ሁኔታ እያዩ መሆንዎን ለማረጋገጥ ከማንኛውም ጥያቄዎች በፊት ይህንን ትዕዛዝ ማስኬድ አስፈላጊ ነው።
◦ sendfile <filename> - የአካባቢ ፋይል ወደ TON አውታረ መረብ ይስቀሉ። ከአውታረ መረቡ ጋር መስተጋብር የሚፈጠረው በዚህ መንገድ ነው, ለምሳሌ አዲስ ዘመናዊ ኮንትራቶችን መፍጠር እና በመለያዎች መካከል ገንዘብ ለማስተላለፍ ጥያቄዎችን ጨምሮ;
◦ getaccount <address> - የአሁኑን (በትእዛዝ አፈፃፀም ጊዜ) አሳይ last) ከተጠቀሰው አድራሻ ጋር የመለያው ሁኔታ;
◦ privkey <filename> - የግል ቁልፉን ከአካባቢያዊ ፋይል ይጫኑ።

ደንበኛውን ሲጀምሩ አማራጩን ተጠቅመው አቃፊ ወደ እሱ ካስተላለፉ -D, ከዚያም የ masterchain የመጨረሻውን እገዳ ወደ ውስጥ ይጨምረዋል:

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

አሁን ወደ ይበልጥ አስደሳች ነገሮች መሄድ እንችላለን - Fift ቋንቋን ይማሩ, ብልጥ ውል ለማቀናጀት ይሞክሩ (ለምሳሌ, የሙከራ ቦርሳ ይፍጠሩ), ወደ አውታረ መረቡ ይስቀሉት እና በመለያዎች መካከል ገንዘብ ለማስተላለፍ ይሞክሩ.

አምስት ቋንቋ

ከሰነድ fifthbase.pdf የቴሌግራም ቡድን ብልጥ ኮንትራቶችን ለመፍጠር አዲስ የቁልል ቋንቋ እንደፈጠረ ማወቅ ይችላሉ። አምስት (ከቁጥሩ ይመስላል አምስተኛ, ከፎርት ጋር ተመሳሳይነት ያለው, ፊፍት ብዙ የሚያመሳስላቸው ቋንቋ ነው).

ሰነዱ በጣም ብዙ ፣ 87 ገጾች ነው ፣ እና ይዘቱን በዚህ ጽሑፍ ማዕቀፍ ውስጥ በዝርዝር አልገልጽም (ቢያንስ እኔ ራሴ አንብቤ ስላልጨረስኩ :)። በዋና ዋና ነጥቦቹ ላይ እቆያለሁ እና በዚህ ቋንቋ ውስጥ ሁለት የኮድ ምሳሌዎችን እሰጣለሁ.

በመሠረታዊ ደረጃ ፣ Fift's syntax በጣም ቀላል ነው: የእሱ ኮድ ያካትታል ቃላት, ብዙውን ጊዜ በቦታዎች ወይም በአዳዲስ መስመሮች (ልዩ ጉዳይ: አንዳንድ ቃላት ከራሳቸው በኋላ መለያየትን አይፈልጉም). ማንኛውም ቃሉ ከአንዳንዶቹ ጋር የሚዛመድ የቁምፊዎች ቅደም ተከተል ነው ትርጉም (በግምት አስተርጓሚው ይህን ቃል ሲያገኝ ምን ማድረግ እንዳለበት)። የቃላት ፍቺ ከሌለ፣ አስተርጓሚው እንደ ቁጥር ሊተነተን እና ወደ ቁልል ሊገፋው ይሞክራል። በነገራችን ላይ ፣ እዚህ ያሉት ቁጥሮች - በድንገት - 257-ቢት ኢንቲጀር ናቸው ፣ እና ምንም ክፍልፋዮች የሉም - በትክክል ፣ ወዲያውኑ የምክንያታዊ ክፍልፋይ አሃዛዊ እና መለያ ወደ ሆኑ ጥንድ ኢንቲጀር ይለወጣሉ።

ቃላቶች ከቁልል አናት ላይ ካሉት እሴቶች ጋር መስተጋብር ይፈጥራሉ። የተለየ የቃላት ዓይነት - ቅድመ ቅጥያ - ቁልልን ሳይሆን የሚከተሏቸውን ገጸ-ባህሪያት ከምንጩ ፋይል ነው። ለምሳሌ፣ የሕብረቁምፊ ቃል በቃል የሚተገበረው በዚህ መንገድ ነው - የጥቅሱ ቁምፊ (") የሚቀጥለውን (የመዝጊያ) ጥቅስ የሚፈልግ ቅድመ ቅጥያ ቃል ሲሆን በመካከላቸው ያለውን ሕብረቁምፊ ወደ ቁልል የሚገፋ ነው። ባለ አንድ መስመር ሰሪዎች ተመሳሳይ ባህሪ አላቸው (//) እና ባለብዙ መስመር (/*) አስተያየቶች።

የቋንቋው ውስጣዊ መዋቅር ከሞላ ጎደል የሚያበቃው እዚህ ላይ ነው። ሁሉም ነገር (የቁጥጥር ግንባታዎችን ጨምሮ) በቃላት ይገለጻል (የውስጥ ፣ እንደ የሂሳብ ስራዎች እና አዲስ ቃላትን መግለፅ ፣ ወይም በ"መደበኛ ቤተ-መጽሐፍት" ውስጥ ይገለጻል Fift.fif, ይህም በአቃፊው ውስጥ ነው crypto/fift ምንጮች ውስጥ).

የ 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 ከተገደለ በኋላ. እባክዎን ለቶን ቨርቹዋል ማሽን ሌላ የመሰብሰቢያ ቋንቋ እዚህ ጥቅም ላይ ይውላል (በዝርዝሩ ላይ አልቀመጥም) ፣ የእሱ መመሪያ በብሎክቼይን ላይ ይቀመጣል።

ስለዚህ, ለቲቪኤም ሰብሳቢው በ Fift ውስጥ ተጽፏል - የዚህ ሰብሳቢ ምንጭ ኮድ በፋይሉ ውስጥ ነው. crypto/fift/Asm.fif እና ከላይ ባለው ኮድ መጀመሪያ ላይ ተገናኝተዋል.

ምን ማለት እችላለሁ ፣ በግልጽ ፣ ኒኮላይ ዱሮቭ አዲስ የፕሮግራም ቋንቋዎችን መፍጠር ይወዳል 🙂

ከ TON ጋር ብልህ ውል መፍጠር እና መስተጋብር

እንግዲህ ከላይ እንደተገለጸው የቶን ደንበኛ እና ፋይፍት አስተርጓሚ ገንብተን ቋንቋውን ተዋወቅን እንበል። አሁን ብልጥ ውል እንዴት መፍጠር እንደሚቻል? ይህ በፋይሉ ውስጥ ተገልጿል. እንዴት ነውከምንጩ ጋር ተያይዟል.

በቶን ውስጥ ያሉ መለያዎች

ውስጥ እንደገለጽኩት ቶን ግምገማ, ይህ አውታረ መረብ ከአንድ በላይ ይዟል blockchain - አንድ የተለመደ አለ, ተብሎ የሚጠራው. "masterchain", እንዲሁም የዘፈቀደ ቁጥር ተጨማሪ "የስራ ሰንሰለት", በ 32-ቢት ቁጥር ተለይቷል. ማስተርቼይን መለያ -1 አለው ፣ ከሱ በተጨማሪ ፣ ከ 0 ጋር “ቤዝ” የስራ ሰንሰለት መጠቀም ይቻላል ። እያንዳንዱ የስራ ሰንሰለት የራሱ ውቅር ሊኖረው ይችላል። ከውስጥ, እያንዳንዱ የስራ ሰንሰለት ወደ shardchains የተከፋፈለ ነው, ነገር ግን ይህ በአእምሯችን ለመያዝ አስፈላጊ ያልሆነ የአተገባበር ዝርዝር ነው.

በአንድ የስራ ሰንሰለት ውስጥ የራሳቸው የመለያ_መታወቂያ መለያ ያላቸው ብዙ መለያዎች ተከማችተዋል። ለ masterchain እና null workchain, 256 ቢት ርዝመት አላቸው. ስለዚህ፣ የመለያ መታወቂያው የተጻፈው ለምሳሌ እንደዚህ ነው፡-

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

ይህ ጥሬው ቅርጸት ነው፡ በመጀመሪያ የስራ ሰንሰለት መታወቂያ፣ በመቀጠል ኮሎን እና የመለያ መታወቂያ በሄክሳዴሲማል ኖታ።

በተጨማሪም ፣ አጭር ቅርጸት አለ - የስራ ሰንሰለት ቁጥር እና መለያ አድራሻ በሁለትዮሽ መልክ ተቀምጠዋል ፣ ቼክ ድምር ለእነሱ ታክሏል ፣ እና ይህ ሁሉ በ Base64 ውስጥ ተቀምጧል።

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}

በተጠቀሰው የስራ ሰንሰለት ውስጥ በዲኤችቲ ውስጥ የተቀመጠውን መዋቅር እናያለን. ለምሳሌ በመስክ ላይ storage.balance አሁን ያለው የሂሳብ ቀሪ ሂሳብ፣ በ storage.state.code የስማርት ኮንትራቱ ኮድ ነው ፣ እና ውስጥ storage.state.data - የአሁኑ ውሂብ. እባክዎን ያስተውሉ የቶን መረጃ ማከማቻ - ሴል፣ ሴል - እንደ ዛፍ ነው፣ እያንዳንዱ ሴል ሁለቱም የራሱ ውሂብ እና የልጅ ህዋሶች ሊኖሩት ይችላል። ይህ በመጨረሻዎቹ መስመሮች ላይ እንደ ማስገቢያ ሆኖ ይታያል.

ብልህ ውል መገንባት

አሁን እንደዚህ አይነት መዋቅር እራሳችንን እንፍጠር (BOC ይባላል - የሴሎች ቦርሳ) አምስተኛውን ቋንቋ በመጠቀም። እንደ እድል ሆኖ, እራስዎ ዘመናዊ ኮንትራት መፃፍ የለብዎትም - በአቃፊው ውስጥ crypto/block ከምንጩ ማህደር ፋይል አለ። new-wallet.fif, ይህም አዲስ የኪስ ቦርሳ ለመፍጠር ይረዳናል. ከተሰበሰበው ደንበኛ ጋር ወደ አቃፊው ይቅዱት (~/liteclient-buildከላይ ያሉትን መመሪያዎች ከተከተሉ). ከላይ ያለውን ይዘቱን በአምስተኛው ላይ እንደ ኮድ ምሳሌ ጠቀስኩት።

ይህንን ፋይል በሚከተለው መንገድ እንፈጽማለን-

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

ይህ ነው <source-directory> ወደ ያልተሸፈኑ ምንጮች በሚወስደው መንገድ መተካት አለበት (የ "~" ምልክት እዚህ መጠቀም አይቻልም, በሚያሳዝን ሁኔታ, ሙሉው መንገድ ያስፈልጋል). ቁልፍ ከመጠቀም ይልቅ -I የአካባቢን ተለዋዋጭ መግለጽ ይችላሉ FIFTPATH እና ይህን መንገድ በእሱ ውስጥ ያስቀምጡት.

ፊፍትን በፋይል ስም ስለጀመርን 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)

ይህ ማለት መታወቂያ ያለው ቦርሳ ማለት ነው -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (ወይም ተመሳሳይ ነው) 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) በተሳካ ሁኔታ ተፈጥሯል። ተጓዳኝ ኮድ በፋይሉ ውስጥ ይሆናል new-wallet-query.bocአድራሻው ገብቷል። new-wallet.addr, እና የግል ቁልፉ ውስጥ ነው new-wallet.pk (ተጠንቀቅ - ስክሪፕቱን እንደገና ማስኬድ እነዚህን ፋይሎች ይተካዋል)።

እርግጥ ነው, የቶን ኔትወርክ ስለዚህ የኪስ ቦርሳ እስካሁን አያውቅም, በእነዚህ ፋይሎች መልክ ብቻ ነው የተቀመጠው. አሁን ወደ አውታረ መረቡ መጫን አለበት። እውነት ነው, ችግሩ ብልጥ ውል ለመፍጠር, ኮሚሽን መክፈል አለብዎት, እና የሂሳብዎ ቀሪ ሂሳብ አሁንም ዜሮ ነው.

በስራ ሁነታ, ይህ ችግር በመለዋወጫው ላይ ግራም በመግዛት (ወይም ከሌላ ቦርሳ በማስተላለፍ) መፍትሄ ያገኛል. ደህና, አሁን ባለው የሙከራ ሁነታ, ልዩ ዘመናዊ ኮንትራት ተጀምሯል, ከእሱ እስከ 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 ያልበለጠ)። ኢንቲጀር ቢገልጹም የአስርዮሽ ነጥቡን ይተዉት።

በመጨረሻም መስመሩን ማስተካከል አለብን 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 - እና ያ ነው ፣ በቶን አውታረመረብ ውስጥ የራስዎ የኪስ ቦርሳ አለዎት (ምንም እንኳን ለአሁኑ ሙከራ ብቻ)።

የወጪ ግብይቶችን ይፍጠሩ

ከተፈጠረው መለያ ቀሪ ሂሳብ ገንዘብ ለማስተላለፍ, ፋይል አለ 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>).

ቶን (Telegram Open Network) ደንበኛን እና አዲስ ፊፍት ቋንቋን ለዘመናዊ ኮንትራቶች ፈትኑ

ያ ብቻ ነው፣ አሁን በቶን ውስጥ ብልጥ ኮንትራቶችን መፍጠር እና ጥያቄዎችን መላክ እንችላለን። እንደሚመለከቱት ፣ አሁን ያለው ተግባር ቀድሞውንም ቢሆን በቂ ነው ፣ ለምሳሌ ፣ የበለጠ ወዳጃዊ የኪስ ቦርሳ በግራፊክ በይነገጽ (ነገር ግን ፣ ለማንኛውም የመልእክተኛው አካል ሆኖ ይገኛል ተብሎ ይጠበቃል)።

በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ። ስግን እንእባክህን።

ስለ TON ፣ TVM ፣ Fift ትንተና መጣጥፎችን ለመቀጠል ይፈልጋሉ?

  • አዎ፣ የቶን አጠቃላይ እይታ ያላቸው ተከታታይ መጣጥፎች እስኪጠናቀቁ ድረስ እየጠበቅኩ ነው።

  • አዎ፣ ሾለ አምስቱ ቋንቋ የበለጠ ማንበብ አስደሳች ነው።

  • አዎ፣ ሾለ ቶን ቨርቹዋል ማሽን እና ለእሱ አሰባሳቢ የበለጠ ማወቅ እፈልጋለሁ

  • አይ፣ ለዚህ ​​ምንም ፍላጎት የለኝም።

39 ተጠቃሚዎች ድምጽ ሰጥተዋል። 12 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ቴሌግራም ቶን ለመክፈት ስላለው እቅድ ምን ይሰማዎታል?

  • ለዚህ ፕሮጀክት ትልቅ ተስፋ አለኝ።

  • በፍላጎት ብቻ ነው የምከታተለው።

  • ተጠራጣሪ ነኝ፣ ስኬቱን እጠራጠራለሁ።

  • እኔ ይህን ተነሳሽነት ለብዙሃኑ የማያስፈልግ ውድቀት አድርጌ ነው የማየው

47 ተጠቃሚዎች ድምጽ ሰጥተዋል። 12 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ምንጭ: hab.com

አስተያየት ያክሉ