Pelanggan uji TON (Rangkaian Terbuka Telegram) dan bahasa Fift baharu untuk kontrak pintar

Lebih daripada setahun yang lalu, ia diketahui tentang rancangan utusan Telegram untuk mengeluarkan rangkaian terdesentralisasinya sendiri Rangkaian Terbuka Telegram. Kemudian dokumen teknikal yang banyak tersedia, yang didakwa ditulis oleh Nikolai Durov dan menggambarkan struktur rangkaian masa depan. Bagi mereka yang terlepas, saya syorkan anda membaca penceritaan semula saya tentang dokumen ini (bahagian 1, bahagian 2; bahagian ketiga, malangnya, masih mengumpul habuk dalam draf).

Sejak itu, tiada berita penting mengenai status pembangunan TON sehingga beberapa hari yang lalu (dalam salah satu daripada saluran tidak rasmi) pautan ke halaman tidak muncul https://test.ton.org/download.htmldi mana terletak:
β—¦ ton-test-liteclient-full.tar.xz β€” sumber pelanggan ringan untuk rangkaian ujian TON;
β—¦ ton-lite-client-test1.config.json β€” fail konfigurasi untuk menyambung ke rangkaian ujian;
β—¦ README - maklumat mengenai pemasangan dan pelancaran pelanggan;
β—¦ BAGAIMANA UNTUK β€” arahan langkah demi langkah tentang cara membuat kontrak pintar menggunakan pelanggan;
β—¦ ton.pdf β€” dokumen yang dikemas kini (bertarikh 2 Mac 2019) dengan gambaran keseluruhan teknikal rangkaian TON;
β—¦ tvm.pdf β€” penerangan teknikal TVM (Mesin Maya TON, mesin maya TON);
β—¦ tblkch.pdf β€” penerangan teknikal blok TON;
β—¦ fivebase.pdf β€” perihalan bahasa Fift baharu, direka untuk mencipta kontrak pintar dalam TON.

Saya ulangi, tiada pengesahan rasmi halaman dan semua dokumen ini dari Telegram, tetapi jumlah bahan ini menjadikannya agak munasabah. Lancarkan klien yang diterbitkan atas risiko seseorang.

Membina pelanggan ujian

Mula-mula, mari kita cuba membina dan menjalankan klien ujian - mujurlah, README menerangkan proses mudah ini secara terperinci. Saya akan melakukan ini menggunakan macOS 10.14.5 sebagai contoh; Saya tidak boleh menjamin kejayaan binaan pada sistem lain.

  1. Muat turun dan buka bungkusan arkib sumber. Adalah penting untuk memuat turun versi terkini kerana keserasian ke belakang tidak dijamin pada peringkat ini.

  2. Pastikan versi terkini make, cmake (versi 3.0.2 atau lebih tinggi), OpenSSL (termasuk fail pengepala C), g++ atau clang dipasang pada sistem. Saya tidak perlu memasang apa-apa, semuanya datang bersama-sama serta-merta.

  3. Mari kita anggap sumber dibongkar ke dalam folder ~/lite-client. Secara berasingan, buat folder kosong untuk projek yang dipasang (contohnya, ~/liteclient-build), dan daripadanya (cd ~/liteclient-build) panggil arahan:

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

    Pelanggan uji TON (Rangkaian Terbuka Telegram) dan bahasa Fift baharu untuk kontrak pintar

    Untuk membina penterjemah bahasa Fift untuk kontrak pintar (lebih lanjut mengenainya di bawah), kami juga memanggil

    cmake --build . --target fift

  4. Muat turun yang semasa fail konfigurasi untuk menyambung ke rangkaian ujian dan memasukkannya ke dalam folder dengan klien yang dipasang.

  5. Selesai, anda boleh memulakan klien:

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

Jika semuanya dilakukan dengan betul, anda akan melihat sesuatu seperti ini:

Pelanggan uji TON (Rangkaian Terbuka Telegram) dan bahasa Fift baharu untuk kontrak pintar

Seperti yang kita lihat, terdapat beberapa arahan yang tersedia:
β—¦ help β€” paparkan senarai arahan ini;
β—¦ quit - keluar;
β—¦ time β€” tunjukkan masa semasa pada pelayan;
β—¦ status β€” tunjukkan sambungan dan status pangkalan data tempatan;
β—¦ last β€” kemas kini keadaan blockchain (muat turun blok terakhir). Adalah penting untuk menjalankan arahan ini sebelum sebarang permintaan untuk memastikan anda melihat keadaan semasa rangkaian.
β—¦ sendfile <filename> β€” muat naik fail tempatan ke rangkaian TON. Beginilah interaksi dengan rangkaian berlaku - termasuk, sebagai contoh, penciptaan kontrak pintar baharu dan permintaan untuk memindahkan dana antara akaun;
β—¦ getaccount <address> β€” tunjukkan arus (pada masa arahan itu dilaksanakan) last) status akaun dengan alamat yang ditentukan;
β—¦ privkey <filename> β€” muatkan kunci persendirian daripada fail setempat.

Jika, apabila memulakan klien, anda memindahkan folder kepadanya menggunakan pilihan -D, kemudian dia akan menambah blok terakhir rantaian induk ke dalamnya:

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

Sekarang kita boleh beralih kepada perkara yang lebih menarik - pelajari bahasa Fift, cuba susun kontrak pintar (contohnya, buat dompet ujian), muat naik ke rangkaian dan cuba pindahkan dana antara akaun.

Bahasa Kelima

Daripada dokumen fivebase.pdf anda boleh mengetahui bahawa pasukan Telegram telah mencipta bahasa tindanan baharu untuk mencipta kontrak pintar Lima (nampaknya dari angka kelima, sama dengan Forth, bahasa yang Fifth mempunyai banyak persamaan).

Dokumen itu agak tebal, 87 halaman, dan saya tidak akan menceritakan semula kandungannya secara terperinci dalam rangka artikel ini (sekurang-kurangnya kerana saya sendiri belum selesai membacanya :). Saya akan memberi tumpuan kepada perkara utama dan memberikan beberapa contoh kod dalam bahasa ini.

Pada peringkat asas, sintaks Fift agak mudah: kodnya terdiri daripada perkataan, biasanya dipisahkan oleh ruang atau pemisah baris (kes khas: sesetengah perkataan tidak memerlukan pemisah selepas diri mereka sendiri). mana-mana perkataan itu ialah urutan aksara sensitif huruf besar yang sepadan dengan yang tertentu ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (kira-kira, apa yang jurubahasa harus lakukan apabila ia menemui perkataan ini). Jika tiada definisi perkataan, jurubahasa cuba menghuraikannya sebagai nombor dan meletakkannya pada timbunan. Ngomong-ngomong, nombor di sini adalah - tiba-tiba - integer 257-bit, dan tidak ada pecahan sama sekali - lebih tepat lagi, mereka segera bertukar menjadi sepasang integer, membentuk pengangka dan penyebut pecahan rasional.

Perkataan cenderung untuk berinteraksi dengan nilai di bahagian atas timbunan. Jenis perkataan yang berasingan - awalan β€” tidak menggunakan timbunan, tetapi aksara seterusnya daripada fail sumber. Sebagai contoh, beginilah cara literal rentetan dilaksanakan - watak petikan (") ialah perkataan awalan yang mencari petikan (penutup) seterusnya, dan menolak rentetan di antara mereka ke tindanan. One-liners berkelakuan dengan cara yang sama (//) dan berbilang talian (/*) komen.

Di sinilah hampir keseluruhan struktur dalaman bahasa berakhir. Segala-galanya (termasuk binaan kawalan) ditakrifkan sebagai perkataan (sama ada dalaman, seperti operasi aritmetik dan takrif perkataan baharu; atau ditakrifkan dalam "perpustakaan standard" Fift.fif, yang terdapat dalam folder crypto/fift dalam sumber).

Contoh program mudah dalam Fift:

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

Baris pertama mentakrifkan perkataan baharu setxy (perhatikan awalan {, yang mencipta blok sebelum yang penutup } dan awalan :, yang sebenarnya mentakrifkan perkataan). setxy mengambil nombor dari bahagian atas timbunan, mentakrifkan (atau mentakrifkan semula) sebagai global tetap x, dan kuasa dua nombor ini sebagai pemalar y (Memandangkan nilai pemalar boleh ditakrifkan semula, saya lebih suka memanggilnya pembolehubah, tetapi saya mengikut konvensyen penamaan dalam bahasa itu).

Dua baris seterusnya meletakkan nombor pada timbunan dan panggil setxy, maka nilai pemalar dipaparkan x, y (perkataan itu digunakan untuk output .), kedua-dua pemalar diletakkan pada timbunan, dijumlahkan, dan hasilnya juga dicetak. Hasilnya kita akan melihat:

3 9 12 ok
7 49 56 ok

(Baris "ok" dicetak oleh jurubahasa apabila ia selesai memproses baris semasa dalam mod input interaktif)

Nah, contoh kod penuh:

"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

Fail yang kelihatan menakutkan ini adalah untuk mencipta kontrak pintar - ia akan diletakkan dalam fail new-wallet-query.boc selepas pelaksanaan. Sila ambil perhatian bahawa bahasa himpunan lain digunakan di sini untuk Mesin Maya TON (saya tidak akan membincangkannya secara terperinci), arahan yang akan diletakkan pada blockchain.

Oleh itu, pemasang untuk TVM ditulis dalam Fift - sumber pemasang ini ada dalam fail crypto/fift/Asm.fif dan disambungkan pada permulaan sekeping kod di atas.

Apa yang boleh saya katakan, nampaknya Nikolai Durov suka mencipta bahasa pengaturcaraan baru :)

Mewujudkan kontrak pintar dan berinteraksi dengan TON

Jadi, mari kita anggap kita telah mengumpulkan pelanggan TON dan jurubahasa Fift seperti yang diterangkan di atas dan membiasakan diri dengan bahasa tersebut. Bagaimana untuk mencipta kontrak pintar sekarang? Ini diterangkan dalam fail BAGAIMANA UNTUK, dilampirkan pada sumber.

Akaun dalam TON

Seperti yang saya jelaskan dalam ulasan TON, rangkaian ini mengandungi lebih daripada satu blockchain - terdapat satu yang biasa, yang dipanggil. "rantai induk", serta bilangan arbitrari "rantai kerja" tambahan, yang dikenal pasti dengan nombor 32-bit. Rantaian induk mempunyai pengecam -1; selain itu, rantai kerja "asas" dengan pengecam 0 juga boleh digunakan. Setiap rantai kerja boleh mempunyai konfigurasi sendiri. Secara dalaman, setiap rantai kerja dibahagikan kepada shardchains, tetapi ini adalah perincian pelaksanaan yang tidak perlu diingati.

Dalam satu rantaian kerja, banyak akaun disimpan yang mempunyai pengecam id_akaun mereka sendiri. Untuk rantai induk dan rantai kerja sifar, ia adalah 256 bit panjang. Oleh itu, pengecam akaun ditulis, sebagai contoh, seperti ini:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ini ialah format "mentah": pertama ID rantai kerja, kemudian titik bertindih dan ID akaun dalam tatatanda perenambelasan.

Di samping itu, terdapat format yang dipendekkan - nombor rantai kerja dan alamat akaun dikodkan dalam bentuk binari, jumlah semak ditambah kepada mereka, dan semua ini dikodkan dalam Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Mengetahui format rekod ini, kami boleh meminta keadaan semasa akaun melalui klien ujian menggunakan arahan

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Kami akan mendapat sesuatu seperti ini:

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

Kami melihat struktur yang disimpan dalam DHT rantai kerja yang ditentukan. Sebagai contoh, di lapangan storage.balance ialah baki akaun semasa, dalam storage.state.code - kod kontrak pintar, dan dalam storage.state.data - data semasanya. Sila ambil perhatian bahawa storan data TON - Sel, sel - adalah seperti pokok, setiap sel boleh mempunyai kedua-dua data dan sel anak sendiri. Ini ditunjukkan sebagai lekukan dalam baris terakhir.

Membina kontrak pintar

Sekarang mari kita buat sendiri struktur sedemikian (ia dipanggil BOC - beg sel) menggunakan bahasa Lima. Nasib baik, anda tidak perlu menulis kontrak pintar sendiri - dalam folder crypto/block terdapat fail dari arkib sumber new-wallet.fif, yang akan membantu kami mencipta dompet baharu. Mari salin ke folder dengan klien yang dipasang (~/liteclient-build, jika anda mengikuti arahan di atas). Saya memetik kandungannya di atas sebagai contoh kod pada Fift.

Jalankan fail ini seperti berikut:

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

ia adalah <source-directory> mesti diganti dengan laluan ke sumber yang tidak dibungkus (malangnya simbol "~", tidak boleh digunakan di sini, laluan penuh diperlukan). Daripada menggunakan kunci -I anda boleh menentukan pembolehubah persekitaran FIFTPATH dan masukkan jalan ini ke dalamnya.

Sejak kami melancarkan Fift dengan nama fail new-wallet.fif, ia akan melaksanakannya dan keluar. Jika anda meninggalkan nama fail, anda boleh bermain dengan jurubahasa secara interaktif.

Selepas pelaksanaan, sesuatu seperti ini harus dipaparkan dalam konsol:

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)

Ini bermakna bahawa dompet dengan ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (atau, apa yang sama, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) berjaya dibuat. Kod yang sepadan akan berada dalam fail new-wallet-query.boc, alamatnya ada di new-wallet.addr, dan kunci persendirian berada dalam new-wallet.pk (berhati-hati - menjalankan skrip sekali lagi akan menimpa fail ini).

Sudah tentu, rangkaian TON belum mengetahui tentang dompet ini; ia hanya disimpan dalam bentuk fail ini. Kini ia perlu dimuat naik ke rangkaian. Walau bagaimanapun, masalahnya ialah untuk membuat kontrak pintar anda perlu membayar komisen, dan baki akaun anda masih sifar.

Dalam mod kerja, masalah ini akan diselesaikan dengan membeli gram di bursa (atau memindahkan dari dompet lain). Nah, dalam mod ujian semasa, kontrak pintar khas telah dibuat, yang mana anda boleh meminta sehingga 20 gram begitu sahaja.

Menjana permintaan kepada kontrak pintar orang lain

Kami membuat permintaan kepada kontrak pintar yang mengedarkan gram kiri dan kanan seperti ini. Dalam folder yang sama crypto/block cari fail 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

Kami juga akan menyimpannya dalam folder dengan klien yang dipasang, tetapi kami akan membetulkan baris kelima - sebelum baris "constant dest_addr". Mari gantikan dengan alamat dompet yang anda buat sebelum ini (penuh, bukan disingkat). Tidak perlu menulis "-1:" pada permulaan, sebaliknya letakkan "0x" pada permulaan.

Anda juga boleh menukar talian 6.666 Gram*/ constant amount β€” ini ialah jumlah dalam gram yang anda minta (tidak lebih daripada 20). Walaupun anda menentukan nombor bulat, biarkan titik perpuluhan.

Akhirnya, anda perlu membetulkan garisan 0x00000011 constant seqno. Nombor pertama di sini ialah nombor jujukan semasa, yang disimpan dalam akaun yang mengeluarkan gram. Di manakah saya boleh mendapatkannya? Seperti yang dinyatakan di atas, mulakan klien dan jalankan:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Pada akhirnya, data kontrak pintar akan mengandungi

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

Nombor 0000000D (anda akan lebih besar) ialah nombor urutan yang mesti digantikan ke testgiver.fif.

Itu sahaja, simpan fail dan jalankan (./crypto/fift testgiver.fif). Output akan menjadi fail wallet-query.boc. Inilah yang terbentuk mesej itu kepada kontrak pintar orang lain - permintaan "pindahkan begitu banyak gram ke akaun itu dan itu."

Menggunakan pelanggan, kami memuat naiknya ke rangkaian:

> 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

Jika anda sekarang menelefon last, dan kemudian sekali lagi meminta status akaun dari mana kami meminta gram, maka kami harus melihat bahawa nombor urutannya telah meningkat sebanyak satu - ini bermakna ia menghantar wang ke akaun kami.

Langkah terakhir kekal - muat turun kod dompet kami (bakinya telah diisi semula, tetapi tanpa kod kontrak pintar kami tidak akan dapat mengurusnya). Kami laksanakan sendfile new-wallet-query.boc β€” dan itu sahaja, anda mempunyai dompet anda sendiri pada rangkaian TON (walaupun ia hanya satu ujian buat masa ini).

Mencipta urus niaga keluar

Untuk memindahkan wang dari baki akaun yang dibuat, terdapat fail crypto/block/wallet.fif, yang juga perlu diletakkan dalam folder dengan klien yang dipasang.

Sama seperti langkah sebelumnya, anda perlu melaraskan jumlah yang anda pindahkan, alamat penerima (dest_addr), dan seqno dompet anda (ia bersamaan dengan 1 selepas memulakan dompet dan meningkat sebanyak 1 selepas setiap transaksi keluar - anda boleh lihat dengan meminta status akaun anda) . Untuk ujian, anda boleh menggunakan, sebagai contoh, dompet saya - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Pada permulaan (./crypto/fift wallet.fif) skrip akan mengambil alamat dompet anda (dari tempat anda memindahkan) dan kunci peribadinya daripada fail new-wallet.addr ΠΈ new-wallet.pk, dan mesej yang diterima akan ditulis kepada new-wallet-query.boc.

Seperti sebelum ini, untuk terus melakukan transaksi, hubungi sendfile new-wallet-query.boc dalam klien. Selepas ini, jangan lupa untuk mengemas kini keadaan blockchain (last) dan semak sama ada baki dan seqno dompet kami telah berubah (getaccount <account_id>).

Pelanggan uji TON (Rangkaian Terbuka Telegram) dan bahasa Fift baharu untuk kontrak pintar

Itu sahaja, kini kita boleh membuat kontrak pintar dalam TON dan menghantar permintaan kepada mereka. Seperti yang anda lihat, fungsi semasa sudah cukup untuk, sebagai contoh, membuat dompet yang lebih mesra dengan antara muka grafik (namun, ia dijangka sudah tersedia sebagai sebahagian daripada messenger).

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Adakah anda berminat untuk meneruskan artikel dengan analisis TON, TVM, Fift?

  • Ya, saya sedang menunggu penyiapan siri artikel dengan gambaran umum TON

  • Ya, menarik untuk membaca lebih lanjut tentang bahasa Fift

  • Ya, saya ingin mengetahui lebih lanjut tentang Mesin Maya TON dan pemasang untuknya

  • Tidak, semua ini tidak menarik

39 pengguna mengundi. 12 pengguna berpantang.

Apakah pendapat anda tentang rancangan Telegram untuk melancarkan TON?

  • Saya mempunyai harapan yang tinggi untuk projek ini

  • Saya hanya mengikuti perkembangannya dengan penuh minat.

  • Saya ragu-ragu dan meragui kejayaannya.

  • Saya cenderung untuk menganggap inisiatif ini gagal dan tidak perlu untuk orang ramai

47 pengguna mengundi. 12 pengguna berpantang.

Sumber: www.habr.com

Tambah komen