Dèan deuchainn air neach-dèiligidh TON (Telegram Open Network) agus cànan ùr Fift airson cùmhnantan snasail

O chionn còrr is bliadhna, chaidh fios a thoirt mu phlanaichean teachdaire Telegram gus an lìonra dì-mheadhanaichte aca fhèin a leigeil ma sgaoil Teileagram Lìonra Fosgailte. An uairsin thàinig sgrìobhainn theicnigeach mòr ri fhaighinn, a chaidh a ràdh a chaidh a sgrìobhadh le Nikolai Durov agus a thug cunntas air structar lìonra san àm ri teachd. Dhaibhsan a chaill e, tha mi a’ moladh gun leugh thu an ath-aithris agam air an sgrìobhainn seo (pàirt de 1, pàirt de 2; tha an treas pàirt, mo thruaighe, fhathast a’ cruinneachadh duslach ann an dreach).

Bhon uairsin, chan eil naidheachd chudromach air a bhith ann mu inbhe leasachadh TON gu latha no dhà air ais (ann an aon de sianalan neo-oifigeil) cha do nochd an ceangal dhan duilleag https://test.ton.org/download.html, far a bheil iad:
ton-test-liteclient-full.tar.xz - stòran neach-dèiligidh aotrom airson lìonra deuchainn TON;
ton-lite-client-test1.config.json - faidhle rèiteachaidh airson ceangal ris an lìonra deuchainn;
LEASACHADH - fiosrachadh mu bhith a 'togail agus a' cur air bhog an neach-dèiligidh;
HOWTO - stiùireadh ceum air cheum mu bhith a’ cruthachadh cùmhnant snasail a’ cleachdadh teachdaiche;
tunna.pdf - sgrìobhainn ùraichte (leis a’ cheann-latha 2 Màrt, 2019) le tar-shealladh teignigeach air lìonra TON;
tbh.pdf - tuairisgeul teignigeach air TVM (TON Virtual Machine, inneal brìgheil TON);
tblkch.pdf - tuairisgeul teicnigeach air blockchain TON;
còigeamh bonn.pdf - tuairisgeul air a’ chànan ùr Fift, air a dhealbhadh gus cùmhnantan snasail a chruthachadh ann an TON.

Bidh mi a-rithist, cha robh dearbhadh oifigeil air an duilleag agus na sgrìobhainnean sin uile bho Telegram, ach tha meud nan stuthan sin gan dèanamh gu math so-chreidsinneach. Cuir air bhog an neach-dèiligidh foillsichte air do chunnart fhèin.

A 'togail neach-dèiligidh deuchainn

An toiseach, feuchaidh sinn ri teachdaiche deuchainn a thogail agus a ruith - gu fortanach, LEASACHADH a’ toirt cunntas mionaideach air a’ phròiseas shìmplidh seo. Nì mi seo a’ cleachdadh macOS 10.14.5 mar eisimpleir; chan urrainn dhomh dearbhadh airson soirbheachas an togail air siostaman eile.

  1. Luchdaich sìos agus dì-phapadh tasglann stòr. Tha e cudromach an dreach as ùire a luchdachadh sìos oir chan eil gealltanas air co-fhreagarrachd air ais aig an ìre seo.

  2. Dèan cinnteach gu bheil na dreachan as ùire de make, cmake (dreach 3.0.2 no nas àirde), OpenSSL (a’ toirt a-steach faidhlichean cinn C), g ++ no clang air an stàladh air an t-siostam. Cha robh agam ri dad a chuir a-steach, thàinig a h-uile càil còmhla sa bhad.

  3. Gabhamaid ris gu bheil na stòran air an dì-phapadh ann am pasgan ~/lite-client. Air leth bhuaithe, cruthaich pasgan falamh airson a’ phròiseict cruinnichte (mar eisimpleir, ~/liteclient-build), agus uaith (cd ~/liteclient-build) cuir fios gu na h-òrdughan:

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

    Dèan deuchainn air neach-dèiligidh TON (Telegram Open Network) agus cànan ùr Fift airson cùmhnantan snasail

    Gus an eadar-theangair cànain Fift a thogail airson cùmhnantan snasail (barrachd mu dheidhinn gu h-ìosal), bidh sinn cuideachd a’ gairm

    cmake --build . --target fift

  4. Luchdaich sìos an-dràsta faidhle rèiteachaidh gus ceangal ris an lìonra deuchainn agus a chuir sa phasgan leis a’ chleachdaiche cruinnichte.

  5. Tha e air a dhèanamh, faodaidh tu an neach-dèiligidh a thòiseachadh:

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

Ma thèid a h-uile càil a dhèanamh ceart, bu chòir dhut rudeigin mar seo fhaicinn:

Dèan deuchainn air neach-dèiligidh TON (Telegram Open Network) agus cànan ùr Fift airson cùmhnantan snasail

Mar a chì sinn, chan eil mòran òrdughan rim faighinn:
help - seall an liosta òrdughan seo;
quit - Falbh a-mach;
time - seall an ùine làithreach air an fhrithealaiche;
status - seall an ceangal agus inbhe stòr-dàta ionadail;
last - ùraich staid an blockchain (luchdaich sìos am bloc mu dheireadh). Tha e cudromach an àithne seo a ruith ro iarrtasan sam bith gus a bhith cinnteach gum faic thu staid làithreach an lìonraidh.
sendfile <filename> - luchdaich suas faidhle ionadail gu lìonra TON. Seo mar a tha eadar-obrachadh leis an lìonra a’ tachairt - a’ toirt a-steach, mar eisimpleir, cruthachadh chùmhnantan snasail ùra agus iarrtasan airson airgead a ghluasad eadar cunntasan;
getaccount <address> - seall an sruth (aig an àm a chaidh an àithne a chuir gu bàs) last) inbhe a’ chunntais leis an t-seòladh ainmichte;
privkey <filename> - luchdaich an iuchair phrìobhaideach bho fhaidhle ionadail.

Ma tha, nuair a thòisicheas tu air an neach-dèiligidh, gun gluais thu pasgan thuige a’ cleachdadh an roghainn -D, an uairsin cuiridh e am bloc mu dheireadh den mhaighstir-chainn ann:

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

A-nis is urrainn dhuinn gluasad air adhart gu rudan nas inntinniche - ionnsaich cànan Fift, feuch ri cùmhnant snasail a chuir ri chèile (mar eisimpleir, cruthaich wallet deuchainn), luchdaich suas e chun lìonra agus feuch ri airgead a ghluasad eadar cunntasan.

Cànain Fift

Bhon sgrìobhainn còigeamh bonn.pdf gheibh thu a-mach gu bheil sgioba Telegram air cànan stac ùr a chruthachadh gus cùmhnantan snasail a chruthachadh Còigeamh (a rèir coltais bhon àireamh an còigeamh, coltach ri Forth, cànan aig a bheil mòran ann an co-roinn aig a' chòigeamh).

Tha an sgrìobhainn gu math voluminous, 87 duilleagan, agus cha bhith mi ag innse na th’ ann gu mionaideach taobh a-staigh frèam an artaigil seo (co-dhiù leis nach eil mi deiseil ga leughadh mi-fhìn :). Cuiridh mi fòcas air na prìomh phuingean agus bheir mi seachad eisimpleir còd no dhà sa chànan seo.

Aig ìre bhunaiteach, tha co-chòrdadh Fift gu math sìmplidh: tha a chòd air a dhèanamh suas de faclan, mar as trice air a sgaradh le beàrnan no briseadh loidhne (cùis shònraichte: chan fheum cuid de dh’ fhaclan dealaiche às an dèidh fhèin). Sam bith am facal 'S e sreath de charactaran a tha mothachail air cùis a tha a' freagairt ri cuid определение (timcheall air, dè bu chòir don eadar-theangair a dhèanamh nuair a choinnicheas e ris an fhacal seo). Mura h-eil mìneachadh air facal, feuchaidh an t-eadar-theangair ri a pharsadh mar àireamh agus a chuir air a’ chruach. Air an t-slighe, tha na h-àireamhan an seo - gu h-obann - àireamhan 257-bit, agus chan eil bloighean ann idir - nas mionaidiche, bidh iad a 'tionndadh gu bhith nan àireamhan iomlan, a' cruthachadh àireamhaiche agus seòrsaiche bloigh reusanta.

Tha faclan buailteach a bhith ag eadar-obrachadh le luachan aig mullach a’ chruach. Seòrsa facail air leth - ro-leasachan - chan eil e a’ cleachdadh a’ chruach, ach na caractaran às deidh sin bhon fhaidhle stòr. Mar eisimpleir, seo mar a tha litrichean sreang air an cur an gnìomh - an caractar cuòt (") na fhacal ro-leasachan a tha a’ coimhead airson an ath abairt (dùnadh), agus a’ putadh an t-sreang eatorra air a’ chruach. Bidh aon-loidhnichean gan giùlan fhèin san aon dòigh (//) agus ioma-loidhne (/*) beachdan.

Seo far a bheil cha mhòr structar a-staigh a’ chànain a’ tighinn gu crìch. Tha a h-uile càil eile (a’ gabhail a-steach togail smachd) air a mhìneachadh mar fhaclan (an dàrna cuid air an taobh a-staigh, leithid gnìomhachd àireamhachd agus mìneachadh fhaclan ùra; no air a mhìneachadh anns an “leabharlann àbhaisteach” Fift.fif, a tha sa phasgan crypto/fift anns na stòran).

Prògram eisimpleir sìmplidh ann am Fift:

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

Tha a’ chiad loidhne a’ mìneachadh facal ùr setxy (thoir an aire don ro-leasachan {, a chruthaicheas bloc mus tèid an dùnadh } agus ro-leasachan :, a tha dha-rìribh a’ mìneachadh an fhacail). setxy a’ toirt àireamh bho mhullach na stac, ga mhìneachadh (no ag ath-mhìneachadh) mar chruinneil seasmhach x, agus ceàrnag na h-àireimh so mar chuibhreach y (Leis gu bheil e comasach luachan seasmhach ath-mhìneachadh, b’ fheàrr leam caochladairean a ghairm orra, ach tha mi a’ leantainn a’ ghnàthachaidh ainmeachadh sa chànan).

Chuir an ath dhà loidhne àireamh air a’ chruach agus glaodh setxy, an uairsin tha luachan nan cunbhalach air an taisbeanadh x, y (tha am facal air a chleachdadh airson toradh .), tha an dà chuid seasmhach air an cur air a’ chruach, air an geàrr-chunntas, agus tha an toradh air a chlò-bhualadh cuideachd. Mar thoradh air sin chì sinn:

3 9 12 ok
7 49 56 ok

(Tha an loidhne “ceart gu leòr” air a chlò-bhualadh leis an eadar-theangair nuair a bhios i deiseil a’ giullachd na loidhne gnàthach ann am modh cuir a-steach eadar-ghnìomhach)

Uill, eisimpleir còd slàn:

"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

Tha am faidhle eagallach seo airson cùmhnant snasail a chruthachadh - thèid a chuir ann am faidhle new-wallet-query.boc an dèidh a chur gu bàs. Thoir an aire gu bheil cànan cruinneachaidh eile air a chleachdadh an seo airson TON Virtual Machine (cha bhith mi a’ fuireach air gu mionaideach), agus thèid an stiùireadh a chuir air an blockchain.

Mar sin, tha an neach-cruinneachaidh airson TVM sgrìobhte ann am Fift - tha stòran an neach-cruinneachaidh seo anns an fhaidhle crypto/fift/Asm.fif agus tha iad ceangailte aig toiseach a’ phìos còd gu h-àrd.

Dè as urrainn dhomh a ràdh, a rèir coltais is toil le Nikolai Durov cànanan prògramaidh ùra a chruthachadh :)

A’ cruthachadh cùmhnant snasail agus ag eadar-obrachadh le TON

Mar sin, leig dhuinn gabhail ris gu bheil sinn air an neach-dèiligidh TON agus an eadar-theangair Fift a chruinneachadh mar a chaidh a mhìneachadh gu h-àrd agus a bhith eòlach air a’ chànan. Ciamar a chruthachadh smart cùmhnant a-nis? Tha seo air a mhìneachadh anns an fhaidhle HOWTO, ceangailte ris na stòran.

Cunntasan ann an TON

Mar a mhìnich mi ann an Lèirmheas TON, tha barrachd air aon blockchain anns an lìonra seo - tha aon cumanta ann, ris an canar. "prìomh shreath", a bharrachd air àireamh neo-riaghailteach de "slabhraidhean obrach" a bharrachd, air an comharrachadh le àireamh 32-bit. Tha aithnichear -1 aig an masterchain; a bharrachd air sin, faodar sèine-obrach “bonn” le aithnichear 0 a chleachdadh cuideachd. Faodaidh a rèiteachadh fhèin a bhith aig gach slabhraidh-obrach. Taobh a-staigh, tha gach sreath-obrach air a roinn ann an shardchains, ach is e mion-fhiosrachadh buileachaidh a tha seo nach fheumar a chumail nad inntinn.

Taobh a-staigh aon sreath-obrach, tha mòran chunntasan air an stòradh aig a bheil na h-aithnichearan account_id aca fhèin. Airson a’ phrìomh shlabhraidh agus an t-sèine obrach neoni, tha iad 256 pìosan a dh’fhaid. Mar sin, tha aithnichear a’ chunntais sgrìobhte, mar eisimpleir, mar seo:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Is e seo an cruth “amh”: ​​an toiseach ID an t-slabhraidh-obrach, an uairsin coloin, agus ID a’ chunntais ann an comharradh hexadecimal.

A bharrachd air an sin, tha cruth nas giorra ann - tha àireamh an t-slabhraidh obrach agus seòladh a’ chunntais air an còdachadh ann an cruth binary, thèid seic a chuir riutha, agus tha seo uile air a chòdachadh ann am Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Le eòlas air a’ chruth clàraidh seo, is urrainn dhuinn staid làithreach cunntais iarraidh tro neach-dèiligidh deuchainn a’ cleachdadh an àithne

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Gheibh sinn rudeigin mar seo:

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

Chì sinn an structar a tha air a stòradh ann an DHT den t-sreath obrach ainmichte. Mar eisimpleir, anns an raon storage.balance a bheil cothromachadh a' chunntais làithreach, ann an storage.state.code - smart còd cùmhnant, agus ann an storage.state.data - an dàta làithreach aige. Thoir an aire gu bheil stòradh dàta TON - Cell, ceallan - coltach ri craobhan, faodaidh an dàta fhèin agus ceallan cloinne a bhith aig gach cealla. Tha seo air a shealltainn mar indentation anns na loidhnichean mu dheireadh.

A 'togail cùmhnant smart

A-nis cruthaichidh sinn structar mar sin sinn fhìn (is e BOC a chanar ris - poca de cheallan) a’ cleachdadh cànan Fift. Gu fortanach, chan fheum thu cùmhnant snasail a sgrìobhadh thu fhèin - sa phasgan crypto/block tha faidhle ann bhon tasglann thùsail new-wallet.fif, a chuidicheas sinn gus wallet ùr a chruthachadh. Nach dèan sinn lethbhreac dheth chun phasgan leis a’ chleachdaiche cruinnichte (~/liteclient-build, ma lean thu an stiùireadh gu h-àrd). Dh’ ainmich mi na tha ann gu h-àrd mar eisimpleir de chòd air Fift.

Cuir an gnìomh am faidhle seo mar a leanas:

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

tha e <source-directory> feumar an t-slighe gu na stòran gun phacaid a chuir na àite (gu mì-fhortanach chan urrainnear an samhla “~” a chleachdadh an seo, tha feum air an t-slighe iomlan). An àite a bhith a 'cleachdadh iuchair -I faodaidh tu caochladair àrainneachd a mhìneachadh FIFTPATH agus cuir an t-slighe so innte.

Bho chuir sinn Fift air bhog le ainm an fhaidhle new-wallet.fif, cuiridh e an gnìomh e agus falbhaidh e. Ma dh’ fhàgas tu ainm an fhaidhle, faodaidh tu cluich leis an eadar-theangair gu h-eadar-obrachail.

Às deidh a chuir gu bàs, bu chòir rudeigin mar seo a bhith air a thaisbeanadh sa chonsail:

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)

Tha seo a’ ciallachadh gu bheil am wallet leis an ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (no, ciod a tha mar an ceudna, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) air a chruthachadh gu soirbheachail. Bidh an còd co-fhreagarrach anns an fhaidhle new-wallet-query.boc, tha an seòladh aige a-staigh new-wallet.addr, agus tha an iuchair phrìobhaideach a-staigh new-wallet.pk (bi faiceallach - ma ruitheas tu an sgriobt a-rithist thèid na faidhlichean sin thairis air).

Gu dearbh, chan eil fios aig lìonra TON mun wallet seo fhathast; tha e air a stòradh a-mhàin ann an cruth nam faidhlichean sin. A-nis feumaidh e bhith air a luchdachadh suas dhan lìonra. Ach, is e an duilgheadas a th ’ann, gus cùmhnant snasail a chruthachadh feumaidh tu coimisean a phàigheadh, agus tha cothromachadh a’ chunntais agad fhathast neoni.

Ann am modh obrach, thèid an duilgheadas seo fhuasgladh le bhith a 'ceannach graman air an iomlaid (no a' gluasad bho sporan eile). Uill, anns a 'mhodh deuchainn làithreach, chaidh cùmhnant snasail sònraichte a chruthachadh, às an urrainn dhut suas ri 20 gram iarraidh dìreach mar sin.

A’ gineadh iarrtas gu cùmhnant smart cuideigin eile

Bidh sinn a’ dèanamh iarrtas gu cùmhnant snasail a bhios a’ cuairteachadh graman clì is deas mar seo. Anns an aon phasgan crypto/block lorg am faidhle 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

Sàbhailidh sinn e sa phasgan leis a’ chleachdaiche cruinnichte, ach ceartaichidh sinn an còigeamh loidhne - ron loidhne “constant dest_addr". Nach cuir sinn seòladh a’ wallet a chruthaich thu roimhe na àite (làn, gun ghiorrachadh). Chan eil feum air “-1:” a sgrìobhadh aig an toiseach, an àite sin cuir “0x” aig an toiseach.

Faodaidh tu cuideachd an loidhne atharrachadh 6.666 Gram*/ constant amount - seo an t-suim ann an graman a tha thu ag iarraidh (gun a bhith nas fhaide na 20). Fiù ma shònraicheas tu àireamh slàn, fàg am puing deicheach.

Mu dheireadh, feumaidh tu an loidhne a cheartachadh 0x00000011 constant seqno. Is e a’ chiad àireamh an seo an àireamh sreath gnàthach, a tha air a stòradh sa chunntas toirt a-mach gram. Cò às a gheibh mi e? Mar a chaidh a ràdh gu h-àrd, tòisich an neach-dèiligidh agus ruith:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Aig a’ cheann thall, bidh dàta cùmhnant snasail ann

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

Is e an àireamh 0000000D (bidh an àireamh agad nas motha) an àireamh sreath a dh’ fheumar a chuir na àite testgiver.fif.

Sin agad e, sàbhail am faidhle agus ruith (./crypto/fift testgiver.fif). Bidh an toradh mar fhaidhle wallet-query.boc. Is e seo a tha air a chruthachadh teachdaireachd gu cùmhnant snasail cuideigin eile - iarrtas “cuir uimhir de ghramaichean gu cunntas mar sin agus gu cunntas mar sin.”

A’ cleachdadh an neach-dèiligidh, bidh sinn ga luchdachadh suas chun lìonra:

> 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

Ma chuireas tu fòn a-nis last, agus an uairsin a-rithist ag iarraidh inbhe a 'chunntais bhon do dh' iarr sinn gram, an uairsin bu chòir dhuinn faicinn gu bheil an àireamh sreath aige air a dhol suas le aon - tha seo a 'ciallachadh gun do chuir e airgead chun chunntas againn.

Tha an ceum mu dheireadh fhathast - luchdaich sìos còd ar wallet (tha an cothromachadh aige air ath-lìonadh mar-thà, ach às aonais a ’chòd cùmhnant smart cha bhith e comasach dhuinn a riaghladh). Bidh sinn a 'coileanadh sendfile new-wallet-query.boc - agus sin agad e, tha am wallet agad fhèin air lìonra TON (eadhon ged nach eil ann ach deuchainn airson a-nis).

Cruthachadh ghnothaichean a-mach

Gus airgead a ghluasad bho chothromachadh a 'chunntais chruthaichte, tha faidhle ann crypto/block/wallet.fif, a dh’ fheumar cuideachd a chuir sa phasgan leis a ’chliant cruinnichte.

Coltach ris na ceumannan roimhe, feumaidh tu an t-suim a tha thu a’ gluasad atharrachadh, seòladh an neach a gheibh thu (dest_addr), agus seqno do wallet (tha e co-ionann ri 1 às deidh dhut am wallet a thòiseachadh agus àrdachadh le 1 às deidh gach gnothach a-mach - faodaidh tu faic e le bhith ag iarraidh inbhe a’ chunntais agad). Airson deuchainnean, faodaidh tu, mar eisimpleir, mo wallet a chleachdadh - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Aig toiseach tòiseachaidh (./crypto/fift wallet.fif) bheir an sgriobt seòladh do wallet (às an gluais thu) agus an iuchair phrìobhaideach aige bho na faidhlichean new-wallet.addr и new-wallet.pk, agus thèid an teachdaireachd a fhuaireadh a sgrìobhadh thuige new-wallet-query.boc.

Mar roimhe, gus an gnothach a choileanadh gu dìreach, cuir fòn sendfile new-wallet-query.boc anns a' chliant. Às deidh seo, na dìochuimhnich ùrachadh a dhèanamh air staid an blockchain (last) agus dèan cinnteach gu bheil cothromachadh agus seqno ar wallet air atharrachadh (getaccount <account_id>).

Dèan deuchainn air neach-dèiligidh TON (Telegram Open Network) agus cànan ùr Fift airson cùmhnantan snasail

Tha sin uile, a-nis is urrainn dhuinn cùmhnantan snasail a chruthachadh ann an TON agus iarrtasan a chuir thuca. Mar a chì thu, tha an comas-gnìomh gnàthach gu leòr mu thràth, mar eisimpleir, wallet nas càirdeile a dhèanamh le eadar-aghaidh grafaigeach (ge-tà, thathas an dùil gum bi e ri fhaighinn mar-thà mar phàirt den teachdaire).

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

A bheil ùidh agad ann a bhith a’ leantainn leis na h-artaigilean le mion-sgrùdadh air TON, TVM, Fift?

  • Tha, tha mi a’ feitheamh ris an t-sreath artaigilean a chrìochnachadh le sealladh farsaing air TON

  • Seadh, tha e inntinneach barrachd a leughadh mun chànan Fift

  • Tha, tha mi airson barrachd ionnsachadh mu TON Virtual Machine agus an cruinneachaidh air a shon

  • Chan e, chan eil gin de seo inntinneach

Bhòt 39 neach-cleachdaidh. Sheall 12 neach-cleachdaidh.

Dè do bheachd air na planaichean aig Telegram gus TON a chuir air bhog?

  • Tha dòchasan mòra agam airson a’ phròiseict seo

  • Tha mi dìreach a 'leantainn a leasachadh le ùidh.

  • Tha mi teagmhach agus teagmhach mu a shoirbheachas.

  • Tha mi dualtach beachdachadh air an iomairt seo mar fhàiligeadh agus neo-riatanach dha na daoine mòra

Bhòt 47 neach-cleachdaidh. Sheall 12 neach-cleachdaidh.

Source: www.habr.com

Cuir beachd ann