Prawf cleient TON (Telegram Open Network) ac iaith Fift newydd ar gyfer contractau smart

Fwy na blwyddyn yn ôl, daeth yn hysbys am gynlluniau negesydd Telegram i ryddhau ei rwydwaith datganoledig ei hun Telegram Rhwydwaith Agored. Yna daeth dogfen dechnegol swmpus ar gael, a honnir ei bod wedi'i hysgrifennu gan Nikolai Durov a disgrifiodd strwythur rhwydwaith y dyfodol. I’r rhai a fethodd, argymhellaf eich bod yn darllen fy ailddweud o’r ddogfen hon (rhan 1, rhan 2; mae'r drydedd ran, gwaetha'r modd, yn dal i gasglu llwch mewn drafftiau).

Ers hynny, ni fu unrhyw newyddion arwyddocaol am statws datblygiad TON tan ychydig ddyddiau yn ôl (yn un o sianeli answyddogol) ni ymddangosodd y ddolen i'r dudalen https://test.ton.org/download.htmlble maent wedi'u lleoli:
ton-prawf-liteclient-llawn.tar.xz — ffynonellau cleient ysgafn ar gyfer y rhwydwaith prawf TON;
ton-lite-client-test1.config.json - ffeil ffurfweddu ar gyfer cysylltu â'r rhwydwaith prawf;
README - gwybodaeth am y cynulliad a lansiad y cleient;
HOWTO — cyfarwyddiadau cam wrth gam ar sut i greu contract smart gan ddefnyddio'r cleient;
tunnell.pdf — dogfen wedi'i diweddaru (dyddiedig Mawrth 2, 2019) gyda throsolwg technegol o'r rhwydwaith TON;
tvm.pdf — disgrifiad technegol o TVM (Peiriant Rhith TON, peiriant rhithwir TON);
tblkch.pdf — disgrifiad technegol o'r blockchain TON;
pumedbase.pdf - disgrifiad o'r iaith Fift newydd, a ddyluniwyd i greu contractau smart yn TON.

Dywedaf eto, ni chafwyd cadarnhad swyddogol o'r dudalen a'r holl ddogfennau hyn gan Telegram, ond mae maint y deunyddiau hyn yn eu gwneud yn eithaf credadwy. Lansio'r cleient cyhoeddedig ar eich menter eich hun.

Adeiladu cleient prawf

Yn gyntaf, gadewch i ni geisio adeiladu a rhedeg cleient prawf - yn ffodus, README yn disgrifio'r broses syml hon yn fanwl. Byddaf yn gwneud hyn gan ddefnyddio macOS 10.14.5 fel enghraifft; ni allaf warantu llwyddiant yr adeiladu ar systemau eraill.

  1. Dadlwythwch a dadbacio archif ffynhonnell. Mae'n bwysig lawrlwytho'r fersiwn ddiweddaraf gan nad yw cydweddoldeb yn ôl wedi'i warantu ar hyn o bryd.

  2. Sicrhewch fod y fersiynau diweddaraf o make, cmake (fersiwn 3.0.2 neu uwch), OpenSSL (gan gynnwys ffeiliau pennawd C), g++ neu clang wedi'u gosod ar y system. Nid oedd yn rhaid i mi osod unrhyw beth, daeth popeth at ei gilydd ar unwaith.

  3. Gadewch i ni dybio bod y ffynonellau wedi'u dadbacio i mewn i ffolder ~/lite-client. Ar wahân iddo, crëwch ffolder wag ar gyfer y prosiect sydd wedi'i ymgynnull (er enghraifft, ~/liteclient-build), ac oddi wrtho (cd ~/liteclient-build) ffoniwch y gorchmynion:

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

    Prawf cleient TON (Telegram Open Network) ac iaith Fift newydd ar gyfer contractau smart

    I adeiladu'r dehonglydd iaith Fift ar gyfer contractau smart (mwy amdano isod), rydym hefyd yn galw

    cmake --build . --target fift

  4. Lawrlwythwch yr un cyfredol ffeil ffurfweddu i gysylltu â'r rhwydwaith prawf a'i roi yn y ffolder gyda'r cleient sydd wedi'i ymgynnull.

  5. Gorffen, gallwch chi gychwyn y cleient:

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

Os gwneir popeth yn gywir, dylech weld rhywbeth fel hyn:

Prawf cleient TON (Telegram Open Network) ac iaith Fift newydd ar gyfer contractau smart

Fel y gallwn weld, ychydig o orchmynion sydd ar gael:
help - dangos y rhestr hon o orchmynion;
quit - mynd allan;
time - dangos yr amser cyfredol ar y gweinydd;
status — dangos y cysylltiad a statws cronfa ddata leol;
last - diweddaru cyflwr y blockchain (lawrlwythwch y bloc olaf). Mae'n bwysig rhedeg y gorchymyn hwn cyn unrhyw geisiadau i sicrhau eich bod yn gweld cyflwr presennol y rhwydwaith.
sendfile <filename> — uwchlwytho ffeil leol i'r rhwydwaith TON. Dyma sut mae rhyngweithio â'r rhwydwaith yn digwydd - gan gynnwys, er enghraifft, creu contractau smart newydd a cheisiadau i drosglwyddo arian rhwng cyfrifon;
getaccount <address> — dangoswch y cerrynt (ar yr adeg y gweithredwyd y gorchymyn) last) statws y cyfrif gyda'r cyfeiriad penodedig;
privkey <filename> — llwythwch yr allwedd breifat o ffeil leol.

Os, wrth gychwyn y cleient, byddwch yn trosglwyddo ffolder iddo gan ddefnyddio'r opsiwn -D, yna bydd yn ychwanegu bloc olaf y masterchain ynddo:

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

Nawr gallwn symud ymlaen i bethau mwy diddorol - dysgu'r iaith Fift, ceisio llunio contract smart (er enghraifft, creu waled prawf), ei uwchlwytho i'r rhwydwaith a cheisio trosglwyddo arian rhwng cyfrifon.

Fift Iaith

O'r ddogfen pumedbase.pdf gallwch ddarganfod bod tîm Telegram wedi creu iaith stac newydd i greu contractau smart Pumed (mae'n debyg o'r rhifolyn pumed, yn debyg i Forth, iaith y mae gan Fifth lawer yn gyffredin â hi).

Mae'r ddogfen yn eithaf swmpus, 87 tudalen, ac ni fyddaf yn ailadrodd ei chynnwys yn fanwl o fewn fframwaith yr erthygl hon (o leiaf oherwydd nad wyf wedi gorffen ei darllen fy hun :). Byddaf yn canolbwyntio ar y prif bwyntiau ac yn rhoi cwpl o enghreifftiau cod yn yr iaith hon.

Ar lefel sylfaenol, mae cystrawen Fift yn eithaf syml: mae ei god yn cynnwys geiriau, fel arfer wedi'u gwahanu gan fylchau neu doriadau llinell (achos arbennig: nid oes angen gwahanydd ar ôl eu hunain mewn rhai geiriau). Unrhyw y gair yn gyfres o nodau sy'n sensitif i achos sy'n cyfateb i rai penodol diffiniad (yn fras, beth ddylai'r cyfieithydd ei wneud pan ddaw ar draws y gair hwn). Os nad oes diffiniad o air, mae'r cyfieithydd yn ceisio ei ddosrannu fel rhif a'i roi ar y pentwr. Gyda llaw, mae'r niferoedd yma - yn sydyn - yn gyfanrifau 257-did, ac nid oes ffracsiynau o gwbl - yn fwy manwl gywir, maent yn troi'n bâr o gyfanrifau ar unwaith, gan ffurfio rhifiadur ac enwadur ffracsiwn rhesymegol.

Mae geiriau'n dueddol o ryngweithio â gwerthoedd ar frig y pentwr. Math ar wahân o eiriau - rhagddodiad — nid yw'n defnyddio'r pentwr, ond y nodau dilynol o'r ffeil ffynhonnell. Er enghraifft, dyma sut mae llythrennau llinynnol yn cael eu gweithredu - nod y dyfyniad (") yn air rhagddodiad sy'n edrych am y dyfyniad (cau) nesaf, ac yn gwthio'r llinyn rhyngddynt ar y pentwr. Mae un-leiners yn ymddwyn yn yr un ffordd (//) ac aml-linell (/*) sylwadau.

Dyma lle mae bron holl strwythur mewnol yr iaith yn dod i ben. Diffinnir popeth arall (gan gynnwys lluniadau rheoli) fel geiriau (naill ai mewnol, megis gweithrediadau rhifyddol a diffiniad geiriau newydd; neu wedi'i ddiffinio yn y "llyfrgell safonol" Fift.fif, sydd yn y ffolder crypto/fift yn y ffynonellau).

Rhaglen enghreifftiol syml yn Fift:

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

Mae'r llinell gyntaf yn diffinio gair newydd setxy (sylwer ar y rhagddodiad {, sy'n creu bloc cyn yr un cau } a rhagddodiad :, sydd mewn gwirionedd yn diffinio'r gair). setxy yn cymryd rhif o frig y pentwr, yn ei ddiffinio (neu'n ei ailddiffinio) fel un byd-eang cyson x, a sgwâr y rhif hwn fel cysonyn y (O ystyried y gellir ailddiffinio gwerthoedd cysonion, byddai'n well gennyf eu galw'n newidynnau, ond rwy'n dilyn y confensiwn enwi yn yr iaith).

Mae'r ddwy linell nesaf yn rhoi rhif ar y pentwr a galw setxy, yna mae gwerthoedd y cysonion yn cael eu harddangos x, y (defnyddir y gair am allbwn .), mae'r ddau gysonyn yn cael eu gosod ar y pentwr, wedi'u crynhoi, ac mae'r canlyniad hefyd yn cael ei argraffu. O ganlyniad byddwn yn gweld:

3 9 12 ok
7 49 56 ok

(Mae'r llinell "iawn" yn cael ei hargraffu gan y cyfieithydd pan fydd yn gorffen prosesu'r llinell gyfredol yn y modd mewnbwn rhyngweithiol)

Wel, enghraifft cod llawn:

"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

Mae'r ffeil brawychus hon ar gyfer creu contract smart - bydd yn cael ei rhoi mewn ffeil new-wallet-query.boc ar ôl ei ddienyddio. Sylwch fod iaith gydosod arall yn cael ei defnyddio yma ar gyfer TON Virtual Machine (ni fyddaf yn aros arno'n fanwl), a bydd y cyfarwyddiadau yn cael eu gosod ar y blockchain.

Felly, mae'r cydosodwr ar gyfer TVM wedi'i ysgrifennu yn Fift - mae ffynonellau'r cydosodwr hwn yn y ffeil crypto/fift/Asm.fif ac yn cael eu cysylltu ar ddechrau'r darn uchod o god.

Beth alla i ddweud, mae'n debyg bod Nikolai Durov wrth ei fodd yn creu ieithoedd rhaglennu newydd :)

Creu contract smart a rhyngweithio â TON

Felly, gadewch i ni dybio ein bod wedi ymgynnull y cleient TON a'r cyfieithydd Fift fel y disgrifir uchod a dod yn gyfarwydd â'r iaith. Sut i greu contract smart nawr? Disgrifir hyn yn y ffeil HOWTO, ynghlwm wrth y ffynonellau.

Cyfrifon yn TON

Fel y disgrifiais yn adolygiad TON, mae'r rhwydwaith hwn yn cynnwys mwy nag un blockchain - mae un cyffredin, yr hyn a elwir. "masterchain", yn ogystal â nifer mympwyol o "gadwyni gwaith" ychwanegol, a nodir gan rif 32-bit. Mae gan y brif gadwyn ddynodwr o -1; yn ogystal ag ef, gellir defnyddio cadwyn waith “sylfaenol” gyda dynodwr o 0. Gall pob cadwyn waith gael ei chyfluniad ei hun. Yn fewnol, mae pob cadwyn waith wedi'i rannu'n gadwyni shard, ond mae hwn yn fanylyn gweithredu nad oes angen ei gadw mewn cof.

O fewn un gadwyn waith, mae llawer o gyfrifon yn cael eu storio sydd â'u dynodwyr account_id eu hunain. Ar gyfer y brif gadwyn a'r gadwyn waith sero, maent yn 256 did o hyd. Felly, mae dynodwr y cyfrif wedi'i ysgrifennu, er enghraifft, fel hyn:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Dyma'r fformat “amrwd”: yn gyntaf yr ID cadwyn waith, yna colon, ac ID y cyfrif mewn nodiant hecsadegol.

Yn ogystal, mae fformat byrrach - mae rhif y gadwyn waith a chyfeiriad y cyfrif wedi'u hamgodio ar ffurf ddeuaidd, mae siec yn cael ei ychwanegu atynt, ac mae hyn i gyd wedi'i amgodio yn Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Gan wybod y fformat cofnod hwn, gallwn ofyn am gyflwr cyfredol cyfrif trwy gleient prawf gan ddefnyddio'r gorchymyn

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Fe gawn ni rywbeth fel hyn:

[ 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}

Rydyn ni'n gweld y strwythur sy'n cael ei storio yn DHT y gadwyn waith benodol. Er enghraifft, yn y maes storage.balance yw balans y cyfrif cyfredol, yn storage.state.code - cod contract smart, ac yn storage.state.data - ei ddata cyfredol. Sylwch fod storfa data TON - Cell, celloedd - yn debyg i goeden, gall pob cell gael ei data ei hun a chelloedd plant. Dangosir hyn fel mewnoliad yn y llinellau olaf.

Adeiladu contract smart

Nawr gadewch i ni greu strwythur o'r fath ein hunain (fe'i gelwir yn BOC - bag o gelloedd) defnyddio'r iaith Pumed. Yn ffodus, nid oes rhaid i chi ysgrifennu contract smart eich hun - yn y ffolder crypto/block mae ffeil o'r archif ffynhonnell new-wallet.fif, a fydd yn ein helpu i greu waled newydd. Gadewch i ni ei gopïo i'r ffolder gyda'r cleient sydd wedi'i ymgynnull (~/liteclient-build, os gwnaethoch ddilyn y cyfarwyddiadau uchod). Dyfynnais ei gynnwys uchod fel enghraifft o god ar Fift.

Gweithredwch y ffeil hon fel a ganlyn:

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

Yma <source-directory> rhaid disodli'r llwybr i'r ffynonellau heb eu pacio (yn anffodus ni ellir defnyddio'r symbol "~" yma, mae angen y llwybr llawn). Yn lle defnyddio allwedd -I gallwch ddiffinio newidyn amgylchedd FIFTPATH a dodi y llwybr hwn ynddo.

Ers i ni lansio Fift gydag enw'r ffeil new-wallet.fif, bydd yn ei weithredu ac yn gadael. Os byddwch yn hepgor enw'r ffeil, gallwch chwarae gyda'r cyfieithydd yn rhyngweithiol.

Ar ôl ei weithredu, dylid arddangos rhywbeth fel hyn yn y consol:

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)

Mae hyn yn golygu bod y waled gyda'r ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (neu, beth sydd yr un peth, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) creu yn llwyddiannus. Bydd y cod cyfatebol yn y ffeil new-wallet-query.boc, mae ei anerchiad yn new-wallet.addr, ac mae'r allwedd breifat i mewn new-wallet.pk (byddwch yn ofalus - bydd rhedeg y sgript eto yn trosysgrifo'r ffeiliau hyn).

Wrth gwrs, nid yw rhwydwaith TON yn gwybod am y waled hon eto; dim ond ar ffurf y ffeiliau hyn y caiff ei storio. Nawr mae angen ei lwytho i fyny i'r rhwydwaith. Fodd bynnag, y broblem yw bod angen i chi dalu comisiwn i greu contract smart, ac mae balans eich cyfrif yn dal i fod yn sero.

Yn y modd gweithio, bydd y broblem hon yn cael ei datrys trwy brynu gramau ar y cyfnewid (neu drosglwyddo o waled arall). Wel, yn y modd prawf presennol, mae contract smart arbennig wedi'i greu, y gallwch chi ofyn am hyd at 20 gram yn union fel hynny.

Cynhyrchu cais i gontract smart rhywun arall

Rydym yn gwneud cais i gontract smart sy'n dosbarthu gramau i'r chwith ac i'r dde fel hyn. Yn yr un ffolder crypto/block dod o hyd i'r ffeil 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

Byddwn hefyd yn ei gadw yn y ffolder gyda'r cleient sydd wedi'i ymgynnull, ond byddwn yn cywiro'r bumed llinell - cyn y llinell “constant dest_addr" . Gadewch i ni roi cyfeiriad y waled a grewyd gennych o'r blaen yn ei le (llawn, heb ei dalfyrru). Nid oes angen ysgrifennu “-1:” ar y dechrau, yn lle hynny rhowch “0x” ar y dechrau.

Gallwch hefyd newid y llinell 6.666 Gram*/ constant amount — dyma'r swm mewn gramau yr ydych yn gofyn amdano (dim mwy nag 20). Hyd yn oed os byddwch yn nodi rhif cyfan, gadewch y pwynt degol.

Yn olaf, mae angen i chi gywiro'r llinell 0x00000011 constant seqno. Y rhif cyntaf yma yw'r rhif dilyniant cyfredol, sy'n cael ei storio yn y gramau cyhoeddi cyfrif. O ble alla i ei gael? Fel y dywedwyd uchod, dechreuwch y cleient a rhedeg:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ar y diwedd, bydd y data contract smart yn cynnwys

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

Y rhif 0000000D (bydd eich rhif chi yn fwy) yw'r rhif dilyniant y mae'n rhaid ei amnewid yn testgiver.fif.

Dyna ni, cadwch y ffeil a rhedeg (./crypto/fift testgiver.fif). Ffeil fydd yr allbwn wallet-query.boc. Dyma beth sy'n cael ei ffurfio сообщение i gontract smart rhywun arall - cais "trosglwyddo cymaint o gramau i gyfrif o'r fath ac o'r fath."

Gan ddefnyddio'r cleient, rydyn ni'n ei uwchlwytho i'r rhwydwaith:

> 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

Os ffoniwch nawr last, ac yna eto yn gofyn am statws y cyfrif y gofynnwyd am gramau ohono, yna dylem weld bod ei rif dilyniant wedi cynyddu o un - mae hyn yn golygu ei fod yn anfon arian i'n cyfrif.

Erys y cam olaf - lawrlwythwch cod ein waled (mae ei gydbwysedd eisoes wedi'i ailgyflenwi, ond heb y cod contract smart ni fyddwn yn gallu ei reoli). Rydym yn cyflawni sendfile new-wallet-query.boc - a dyna ni, mae gennych chi'ch waled eich hun yn y rhwydwaith TON (hyd yn oed os mai dim ond un prawf ydyw am y tro).

Creu trafodion sy'n mynd allan

I drosglwyddo arian o falans y cyfrif a grëwyd, mae ffeil crypto/block/wallet.fif, sydd hefyd angen ei roi yn y ffolder gyda'r cleient ymgynnull.

Yn debyg i'r camau blaenorol, mae angen i chi addasu'r swm rydych chi'n ei drosglwyddo, cyfeiriad y derbynnydd (dest_addr), a dilyniant eich waled (mae'n hafal i 1 ar ôl cychwyn y waled ac yn cynyddu 1 ar ôl pob trafodiad sy'n mynd allan - gallwch chi ei weld trwy ofyn am statws eich cyfrif). Ar gyfer profion, gallwch ddefnyddio, er enghraifft, fy waled - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Wrth gychwyn (./crypto/fift wallet.fif) bydd y sgript yn cymryd cyfeiriad eich waled (o ble rydych chi'n trosglwyddo) a'i allwedd breifat o'r ffeiliau new-wallet.addr и new-wallet.pk, a bydd y neges a dderbyniwyd yn cael ei ysgrifennu at new-wallet-query.boc.

Fel o'r blaen, i gyflawni'r trafodiad yn uniongyrchol, ffoniwch sendfile new-wallet-query.boc yn y cleient. Ar ôl hyn, peidiwch ag anghofio diweddaru cyflwr y blockchain (last) a gwirio bod balans a dilyniant ein waled wedi newid (getaccount <account_id>).

Prawf cleient TON (Telegram Open Network) ac iaith Fift newydd ar gyfer contractau smart

Dyna i gyd, nawr gallwn greu contractau smart yn TON ac anfon ceisiadau atynt. Fel y gwelwch, mae'r swyddogaeth gyfredol eisoes yn ddigon i wneud waled fwy cyfeillgar gyda rhyngwyneb graffigol, er enghraifft (fodd bynnag, disgwylir y bydd eisoes ar gael fel rhan o'r negesydd).

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Oes gennych chi ddiddordeb mewn parhau â'r erthyglau gyda dadansoddiad o TON, TVM, Fift?

  • Ydw, rwy'n aros i'r gyfres o erthyglau gael eu cwblhau gyda throsolwg cyffredinol o TON

  • Ydy, mae'n ddiddorol darllen mwy am yr iaith Pumed

  • Ydw, rydw i eisiau dysgu mwy am TON Virtual Machine a'r cydosodwr ar ei gyfer

  • Na, nid oes dim o hyn yn ddiddorol

Pleidleisiodd 39 o ddefnyddwyr. Ataliodd 12 o ddefnyddwyr.

Beth yw eich barn am gynlluniau Telegram i lansio TON?

  • Mae gen i obeithion mawr ar gyfer y prosiect hwn

  • Rwy'n dilyn ei ddatblygiad gyda diddordeb.

  • Rwy’n amheus ac yn amau ​​ei lwyddiant.

  • Rwy'n dueddol o ystyried y fenter hon yn fethiant ac yn ddiangen i'r llu eang

Pleidleisiodd 47 o ddefnyddwyr. Ataliodd 12 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw