Teste kliyan TON (Telegram Open Network) ak nouvo lang Fift pou kontra entelijan

Plis pase yon ane de sa, li te vin konnen sou plan yo nan mesaje Telegram yo lage pwòp rezo desantralize li yo Open Network telegram. Lè sa a, yon dokiman teknik volumineuz te vin disponib, ki te swadizan ekri pa Nikolai Durov ak dekri estrikti nan rezo a nan lavni. Pou moun ki te rate li, mwen rekòmande ou li rakonte mwen an sou dokiman sa a (pati 1, pati 2; twazyèm pati a, Ay, se toujou kolekte pousyè nan bouyon).

Depi lè sa a, pa te gen okenn nouvèl enpòtan sou estati devlopman TON jiska yon koup de jou de sa (nan youn nan chanèl ofisyèl yo) lyen ki mennen nan paj la pa t parèt https://test.ton.org/download.html, ki kote yo ye:
ton-test-liteclient-full.tar.xz — sous yon kliyan limyè pou rezo tès TON;
ton-lite-client-test1.config.json — fichye konfigirasyon pou konekte ak rezo tès la;
README — enfòmasyon sou bati ak lanse kliyan an;
KOUMAN — enstriksyon etap pa etap sou kreye yon kontra entelijan lè l sèvi avèk yon kliyan;
ton.pdf — dokiman ajou (ki dat 2 mas 2019) ak yon apèsi teknik sou rezo TON an;
tvm.pdf — deskripsyon teknik TVM (TON Virtual Machine, TON Virtual Machine);
tblkch.pdf — deskripsyon teknik TON blockchain la;
fifthbase.pdf — deskripsyon nouvo lang Fift la, ki fèt pou kreye kontra entelijan nan TON.

Mwen repete, pa te gen okenn konfimasyon ofisyèl nan paj la ak tout dokiman sa yo soti nan Telegram, men volim nan materyèl sa yo fè yo byen posib. Lanse kliyan an pibliye sou pwòp risk yon moun.

Bati yon kliyan tès

Premyèman, ann eseye bati ak kouri yon kliyan tès - erezman, README dekri pwosesis senp sa a an detay. Mwen pral fè sa lè l sèvi avèk macOS 10.14.5 kòm yon egzanp; Mwen pa ka garanti pou siksè nan bati a sou lòt sistèm yo.

  1. Telechaje epi depake achiv sous. Li enpòtan pou telechaje dènye vèsyon an kòm konpatibilite bak pa garanti nan etap sa a.

  2. Asire w ke dènye vèsyon make, cmake (vèsyon 3.0.2 oswa pi wo), OpenSSL (ki gen ladan fichye header C), g++ oswa clang yo enstale sou sistèm nan. Mwen pa t 'gen enstale anyen, tout bagay te vini ansanm touswit.

  3. Ann sipoze sous yo depake nan yon katab ~/lite-client. Apa de li, kreye yon katab vid pou pwojè a reyini (pa egzanp, ~/liteclient-build), ak nan li (cd ~/liteclient-build) rele kòmandman yo:

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

    Teste kliyan TON (Telegram Open Network) ak nouvo lang Fift pou kontra entelijan

    Pou konstwi Fift lang entèprèt pou kontra entelijan (plis sou li anba a), nou rele tou

    cmake --build . --target fift

  4. Telechaje aktyèl la dosye konfigirasyon konekte nan rezo tès la epi mete l nan katab la ak kliyan an reyini.

  5. Fini, ou ka kòmanse kliyan an:

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

Si tout bagay fèt kòrèkteman, ou ta dwe wè yon bagay tankou sa a:

Teste kliyan TON (Telegram Open Network) ak nouvo lang Fift pou kontra entelijan

Kòm nou ka wè, gen kèk kòmandman ki disponib:
help — montre lis kòmandman sa yo;
quit - ale deyò;
time — montre tan aktyèl la sou sèvè a;
status — montre koneksyon an ak estati baz done lokal yo;
last — mete ajou eta blockchain la (telechaje dènye blòk la). Li enpòtan pou kouri lòd sa a anvan nenpòt demann pou asire w ke ou wè eta aktyèl rezo a.
sendfile <filename> — telechaje yon fichye lokal nan rezo TON. Sa a se ki jan entèraksyon ak rezo a rive - ki gen ladan, pou egzanp, kreyasyon an nan nouvo kontra entelijan ak demann yo transfere lajan ant kont;
getaccount <address> — montre aktyèl la (nan moman yo te egzekite kòmandman an) last) estati kont lan ak adrès espesifye a;
privkey <filename> — chaje kle prive a nan yon dosye lokal.

Si, lè w kòmanse kliyan an, ou transfere yon katab nan li lè l sèvi avèk opsyon an -D, Lè sa a, li pral ajoute dènye blòk masterchain la nan li:

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

Koulye a, nou ka ale nan bagay ki pi enteresan - aprann lang Fift la, eseye konpile yon kontra entelijan (pa egzanp, kreye yon bous tès), telechaje li nan rezo a epi eseye transfere lajan ant kont yo.

Lang senkant

Soti nan dokiman an fifthbase.pdf ou ka jwenn ke ekip Telegram la te kreye yon nouvo lang pile pou kreye kontra entelijan Senk (aparamman soti nan nimerik la senkyèm, menm jan ak Forth, yon lang ak Fifth gen anpil bagay an komen).

Dokiman an byen volumineuz, 87 paj, e mwen pap rakonte sa li an detay nan kad atik sa a (omwen paske mwen poko fin li li tèt mwen :). Mwen pral konsantre sou pwen prensipal yo epi bay yon koup nan egzanp kòd nan lang sa a.

Nan yon nivo debaz, sentaks Fift a se byen senp: kòd li a konsiste de mo, anjeneral separe pa espas oswa kase liy (ka espesyal: kèk mo pa mande pou yon separasyon apre tèt yo). Nenpòt mo a se yon sekans de karaktè ki koresponn ak yon sèten definisyon (apre, kisa entèprèt la ta dwe fè lè li rankontre mo sa a). Si pa gen okenn definisyon yon mo, entèprèt la eseye analize li kòm yon nimewo epi mete l sou pil la. By wout la, nimewo yo isit la se - toudenkou - 257-bit nonm antye, epi pa gen okenn fraksyon nan tout - pi jisteman, yo imedyatman vire nan yon pè nan nonm antye, fòme nimeratè a ak denominatè nan yon fraksyon rasyonèl.

Mo yo gen tandans kominike avèk valè nan tèt pil la. Yon kalite mo separe - prefiks — pa sèvi ak pile a, men karaktè ki vin apre yo nan dosye sous la. Pou egzanp, sa a se ki jan literal fisèl yo aplike - karaktè a quote (") se yon mo prefiks ki chèche pwochen (fèmen) quote, epi pouse fisèl ki genyen ant yo sou pil la. One-liners konpòte menm jan an (//) ak plizyè liy (/*) kòmantè.

Sa a se kote prèske tout estrikti entèn lang nan fini. Tout lòt bagay (ki gen ladan konstriksyon kontwòl) defini kòm mo (swa entèn, tankou operasyon aritmetik ak definisyon nouvo mo; oswa defini nan "bibliotèk estanda" Fift.fif, ki nan katab la crypto/fift nan sous yo).

Yon pwogram egzanp senp nan Fift:

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

Premye liy lan defini yon nouvo mo setxy (Note prefiks la {, ki kreye yon blòk anvan yon sèl la fèmen } ak prefiks :, ki aktyèlman defini mo a). setxy pran yon nimewo ki soti nan tèt pil la, defini (oswa redefini) li kòm mondyal konstan x, ak kare nimewo sa a kòm yon konstan y (Etandone ke valè konstan yo ka redefini, mwen ta pito rele yo varyab, men mwen swiv konvansyon nonmen nan lang lan).

De pwochen liy yo mete yon nimewo sou pil la epi rele setxy, Lè sa a, valè konstan yo parèt x, y (yo itilize mo a pou pwodiksyon an .), tou de konstan yo mete sou pil la, adisyone, epi rezilta a enprime tou. Kòm yon rezilta nou pral wè:

3 9 12 ok
7 49 56 ok

(Liy "ok" a enprime pa entèprèt la lè li fini trete liy aktyèl la nan mòd opinyon entèaktif)

Oke, yon egzanp kòd konplè:

"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

Fichye kap pè sa a se pou kreye yon kontra entelijan - li pral mete l nan yon dosye new-wallet-query.boc apre ekzekisyon. Tanpri sonje ke yo itilize yon lòt lang asanble isit la pou TON Virtual Machine (mwen pa pral rete sou li an detay), enstriksyon yo pral mete sou blockchain la.

Kidonk, asanble a pou TVM ekri nan senkant - sous asanblaj sa a yo nan dosye a crypto/fift/Asm.fif epi yo konekte nan kòmansman an nan moso ki pi wo a nan kòd.

Kisa mwen ka di, aparamman Nikolai Durov jis renmen kreye nouvo lang pwogramasyon :)

Kreye yon kontra entelijan ak kominike avèk TON

Kidonk, ann sipoze nou reyini kliyan TON an ak entèprèt Fift la jan sa dekri pi wo a epi nou vin abitye ak lang nan. Ki jan yo kreye yon kontra entelijan kounye a? Sa a se dekri nan dosye a KOUMAN, tache ak sous yo.

Kont nan TON

Jan mwen te dekri nan TON revizyon, rezo sa a gen plis pase yon blòk - gen yon sèl komen, sa yo rele an. "chèn mèt", osi byen ke yon kantite abitrè nan "chèn travay" adisyonèl, idantifye pa yon nimewo 32-bit. Masterchain la gen yon idantifyan -1; anplis de li, yo ka itilize tou yon workchain "baz" ak yon idantifyan 0. Chak workchain ka gen pwòp konfigirasyon li. Entèn, chak workchain divize an shardchains, men sa a se yon detay aplikasyon ki pa bezwen kenbe nan tèt ou.

Nan yon sèl workchain, anpil kont yo estoke ki gen pwòp idantifyan account_id yo. Pou chèn mèt la ak chèn travay zewo, yo gen 256 bit nan longè. Kidonk, idantifyan kont la ekri, pou egzanp, tankou sa a:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Sa a se fòma "kri" la: premye ID workchain la, answit yon kolon, ak ID kont lan nan notasyon egzadesimal.

Anplis de sa, gen yon fòma ki pi kout - nimewo workchain la ak adrès kont yo kode nan fòm binè, yo ajoute yon sòm chèk, ak tout bagay sa yo kode nan Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Lè nou konnen fòma dosye sa a, nou ka mande eta aktyèl la nan yon kont atravè yon kliyan tès lè l sèvi avèk lòd la

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Nou pral jwenn yon bagay tankou sa a:

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

Nou wè estrikti ki estoke nan DHT nan workchain espesifye a. Pou egzanp, nan jaden an storage.balance se balans kont kouran an, nan storage.state.code - kòd kontra entelijan, ak nan storage.state.data - done aktyèl li yo. Tanpri sonje ke depo done TON - Selil, selil - se tankou yon pyebwa, chak selil ka gen tou de done pwòp li yo ak selil timoun yo. Sa a montre kòm endentasyon nan dènye liy yo.

Bati yon kontra entelijan

Koulye a, ann kreye yon estrikti konsa tèt nou (li rele BOC - sak selil yo) lè l sèvi avèk lang senkyèm lan. Erezman, ou pa bezwen ekri yon kontra entelijan tèt ou - nan katab la crypto/block gen yon dosye ki soti nan achiv sous la new-wallet.fif, ki pral ede nou kreye yon nouvo bous. Ann kopye li nan katab la ak kliyan an reyini (~/liteclient-build, si ou te swiv enstriksyon ki anwo yo). Mwen te site sa ki pi wo a kòm yon egzanp kòd sou Fift.

Egzekite dosye sa a jan sa a:

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

Isit la <source-directory> dwe ranplase ak chemen ki mennen nan sous ki pa pake yo (senbòl "~" malerezman pa ka itilize isit la, chemen konplè a nesesè). Olye pou yo sèvi ak yon kle -I ou ka defini yon varyab anviwònman FIFTPATH epi mete chemen sa a ladan l.

Depi nou te lanse Fift ak non fichye a new-wallet.fif, li pral egzekite li epi sòti. Si ou kite non fichye a, ou ka jwe ak entèprèt la entèaktif.

Apre egzekisyon an, yon bagay tankou sa a ta dwe parèt nan konsole a:

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)

Sa vle di ke bous la ak ID la -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (oswa, ki sa ki menm bagay la tou, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) kreye avèk siksè. Kòd ki koresponn lan pral nan dosye a new-wallet-query.boc, adrès li se nan new-wallet.addr, ak kle prive a se nan new-wallet.pk (Fè atansyon - kouri script la ankò pral ranplase dosye sa yo).

Natirèlman, rezo TON an poko konnen sou bous sa a; li estoke sèlman nan fòm sa yo. Koulye a, li bezwen yo dwe Uploaded nan rezo a. Sepandan, pwoblèm nan se ke yo kreye yon kontra entelijan ou bezwen peye yon komisyon, ak balans kont ou se toujou zewo.

Nan mòd travay, pwoblèm sa a pral rezoud pa achte gram sou echanj la (oswa transfere soti nan yon lòt bous). Oke, nan mòd tès aktyèl la, yo te kreye yon kontra entelijan espesyal, ki soti nan ki ou ka mande pou jiska 20 gram jis konsa.

Jenere yon demann nan kontra entelijan yon lòt moun

Nou fè yon demann nan yon kontra entelijan ki distribye gram agoch ​​ak dwa tankou sa a. Nan katab la menm crypto/block jwenn fichye a 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

Nou pral sove li tou nan katab la ak kliyan an reyini, men nou pral korije senkyèm liy lan - anvan liy lan "constant dest_addr". Ann ranplase li ak adrès bous ou te kreye anvan an (plen, pa abreje). Pa gen okenn bezwen ekri "-1:" nan kòmansman an, olye de mete "0x" nan kòmansman an.

Ou kapab tou chanje liy lan 6.666 Gram*/ constant amount — sa a se kantite gram w ap mande a (pa plis pase 20). Menm si ou presize yon nonm antye, kite pwen desimal la.

Finalman, ou bezwen korije liy lan 0x00000011 constant seqno. Premye nimewo isit la se nimewo sekans aktyèl la, ki estoke nan gram ki bay kont yo. Ki kote mwen ka jwenn li soti? Jan sa di pi wo a, kòmanse kliyan an epi kouri:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Nan fen a anpil, done yo kontra entelijan pral genyen

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

Nimewo 0000000D (ou pral pi gwo) se nimewo sekans ki dwe ranplase nan testgiver.fif.

Se li, sove fichye a epi kouri (./crypto/fift testgiver.fif). Pwodiksyon an pral yon dosye wallet-query.boc. Sa a se sa ki fòme сообщение nan kontra entelijan yon lòt moun - yon demann "transfere anpil gram nan tankou yon kont."

Sèvi ak kliyan an, nou telechaje li sou rezo a:

> 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

Si w kounye a rele last, ak Lè sa a ankò mande estati a nan kont ki soti nan ki nou te mande pou gram, Lè sa a, nou ta dwe wè ke nimewo sekans li yo te ogmante pa yon sèl - sa vle di ke li voye lajan nan kont nou an.

Dènye etap la rete - telechaje kòd bous nou an (balans li te deja ranpli, men san kòd kontra entelijan nou pa pral kapab jere li). Nou pote soti sendfile new-wallet-query.boc - e se li, ou gen pwòp bous ou nan rezo a TON (menm si li se sèlman yon tès pou kounye a).

Kreye tranzaksyon sortan

Pou transfere lajan nan balans lan nan kont la kreye, gen yon dosye crypto/block/wallet.fif, ki tou bezwen yo dwe mete nan katab la ak kliyan an reyini.

Menm jan ak etap anvan yo, ou bezwen ajiste kantite lajan w ap transfere a, adrès moun k ap resevwa a (dest_addr), ak seqno nan bous ou a (li egal a 1 apre inisyalize bous la ak ogmante pa 1 apre chak tranzaksyon sòtan - ou kapab wè li lè w mande estati kont ou a). Pou tès yo, ou ka itilize, pou egzanp, bous mwen an - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Sou demaraj (./crypto/fift wallet.fif) script la pral pran adrès bous ou a (ki soti kote ou transfere) ak kle prive li nan dosye yo new-wallet.addr и new-wallet.pk, epi yo pral ekri mesaj la resevwa a new-wallet-query.boc.

Kòm anvan, dirèkteman fè tranzaksyon an, rele sendfile new-wallet-query.boc nan kliyan an. Apre sa, pa bliye mete ajou eta blockchain la (last) epi tcheke ke balans lan ak seqno nan bous nou an te chanje (getaccount <account_id>).

Teste kliyan TON (Telegram Open Network) ak nouvo lang Fift pou kontra entelijan

Sa a tout, kounye a nou ka kreye kontra entelijan nan TON epi voye demann ba yo. Kòm ou ka wè, fonksyonalite aktyèl la deja ase pou, pou egzanp, fè yon bous ki pi zanmitay ak yon koòdone grafik (sepandan, li espere ke li pral deja vin disponib kòm yon pati nan mesaje a).

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Èske w enterese kontinye atik yo ak analiz TON, TVM, Fift?

  • Wi, m ap tann fini seri atik yo ak yon apèsi jeneral sou TON

  • Wi, li enteresan pou li plis enfòmasyon sou lang senkyèm lan

  • Wi, mwen vle aprann plis sou TON Virtual Machine ak asanblaj la pou li

  • Non, okenn nan sa a pa enteresan

39 itilizatè yo te vote. 12 itilizatè te absteni.

Kisa ou panse de plan Telegram pou lanse TON?

  • Mwen gen gwo espwa pou pwojè sa a

  • Mwen jis swiv devlopman li ak enterè.

  • Mwen ensèten e mwen doute siksè li.

  • Mwen gen tandans konsidere inisyativ sa a kòm yon echèk e ki pa nesesè pou gwo mas yo

47 itilizatè yo te vote. 12 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè