Uji klien TON (Telegram Open Network) dan bahasa Fift baru untuk kontrak pintar

Lebih dari setahun yang lalu, diketahui tentang rencana utusan Telegram untuk merilis jaringan terdesentralisasinya sendiri Jaringan Terbuka Telegram. Kemudian dokumen teknis yang sangat banyak tersedia, yang diduga ditulis oleh Nikolai Durov dan menggambarkan struktur jaringan masa depan. Bagi yang melewatkannya, saya sarankan Anda membaca penceritaan kembali saya atas dokumen ini (Bagian 1, Bagian 2; bagian ketiga, sayangnya, masih mengumpulkan debu di angin).

Sejak saat itu, belum ada kabar signifikan mengenai status perkembangan TON hingga beberapa hari yang lalu (salah satunya saluran tidak resmi) link ke halaman tersebut tidak muncul https://test.ton.org/download.html, dimana lokasinya:
ton-test-liteclient-full.tar.xz — sumber klien ringan untuk jaringan pengujian TON;
ton-lite-client-test1.config.json — file konfigurasi untuk menghubungkan ke jaringan uji;
README — informasi tentang membangun dan meluncurkan klien;
CARA — petunjuk langkah demi langkah dalam membuat kontrak cerdas menggunakan klien;
ton.pdf — dokumen yang diperbarui (tertanggal 2 Maret 2019) dengan gambaran teknis jaringan TON;
tvm.pdf — deskripsi teknis TVM (Mesin Virtual TON, mesin virtual TON);
tblkch.pdf — deskripsi teknis dari blockchain TON;
basis kelima.pdf — deskripsi bahasa Fift baru, yang dirancang untuk membuat kontrak pintar di TON.

Saya ulangi, tidak ada konfirmasi resmi dari halaman dan semua dokumen ini dari Telegram, tetapi banyaknya materi ini membuatnya cukup masuk akal. Luncurkan klien yang diterbitkan resiko ditanggung sendiri.

Membangun klien uji

Pertama, mari kita coba membangun dan menjalankan klien uji - untungnya, README menjelaskan proses sederhana ini secara rinci. Saya akan melakukan ini menggunakan macOS 10.14.5 sebagai contoh; Saya tidak dapat menjamin keberhasilan pembangunan di sistem lain.

  1. Unduh dan buka kemasannya arsip sumber. Penting untuk mengunduh versi terbaru karena kompatibilitas ke belakang tidak dijamin pada tahap ini.

  2. Pastikan versi terbaru make, cmake (versi 3.0.2 atau lebih tinggi), OpenSSL (termasuk file header C), g++, atau clang diinstal pada sistem. Saya tidak perlu memasang apa pun, semuanya langsung menyatu.

  3. Anggaplah sumber dibongkar ke dalam folder ~/lite-client. Secara terpisah darinya, buat folder kosong untuk proyek yang dirakit (misalnya, ~/liteclient-build), dan darinya (cd ~/liteclient-build) panggil perintah:

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

    Uji klien TON (Telegram Open Network) dan bahasa Fift baru untuk kontrak pintar

    Untuk membangun penerjemah bahasa Fift untuk kontrak pintar (lebih lanjut tentangnya di bawah), kami juga menelepon

    cmake --build . --target fift

  4. Unduh yang sekarang file konfigurasi untuk terhubung ke jaringan uji dan meletakkannya di folder dengan klien yang dirakit.

  5. Menyelesaikan, Anda dapat memulai klien:

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

Jika semuanya dilakukan dengan benar, Anda akan melihat sesuatu seperti ini:

Uji klien TON (Telegram Open Network) dan bahasa Fift baru untuk kontrak pintar

Seperti yang bisa kita lihat, ada beberapa perintah yang tersedia:
help — menampilkan daftar perintah ini;
quit - keluar;
time — menunjukkan waktu saat ini di server;
status — menunjukkan status koneksi dan database lokal;
last — perbarui status blockchain (unduh blok terakhir). Penting untuk menjalankan perintah ini sebelum permintaan apa pun untuk memastikan Anda melihat status jaringan saat ini.
sendfile <filename> — unggah file lokal ke jaringan TON. Beginilah interaksi dengan jaringan terjadi - termasuk, misalnya, pembuatan kontrak pintar baru dan permintaan untuk mentransfer dana antar akun;
getaccount <address> — tampilkan arus (pada saat perintah dijalankan) last) status akun dengan alamat yang ditentukan;
privkey <filename> — memuat kunci pribadi dari file lokal.

Jika, saat memulai klien, Anda mentransfer folder ke sana menggunakan opsi -D, lalu dia akan menambahkan blok terakhir dari masterchain ke dalamnya:

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

Sekarang kita dapat beralih ke hal-hal yang lebih menarik - mempelajari bahasa Fift, mencoba membuat kontrak pintar (misalnya, membuat dompet uji), mengunggahnya ke jaringan dan mencoba mentransfer dana antar akun.

Bahasa Kelima

Dari dokumen basis kelima.pdf Anda dapat mengetahui bahwa tim Telegram telah membuat bahasa tumpukan baru untuk membuat kontrak pintar Kelima (tampaknya dari angka kelima, mirip dengan Forth, bahasa yang memiliki banyak kesamaan dengan Fifth).

Dokumennya cukup banyak, 87 halaman, dan saya tidak akan menceritakan kembali isinya secara detail dalam kerangka artikel ini (setidaknya karena saya sendiri belum selesai membacanya :). Saya akan fokus pada poin utama dan memberikan beberapa contoh kode dalam bahasa ini.

Pada tingkat dasar, sintaksis Fift cukup sederhana: kodenya terdiri dari kata-kata, biasanya dipisahkan dengan spasi atau jeda baris (kasus khusus: beberapa kata tidak memerlukan pemisah di belakangnya). Setiap kata itu adalah rangkaian karakter peka huruf besar-kecil yang sesuai dengan karakter tertentu definisi (kira-kira, apa yang harus dilakukan penerjemah ketika menemukan kata ini). Jika tidak ada definisi suatu kata, penerjemah mencoba menguraikannya sebagai angka dan menaruhnya di tumpukan. Ngomong-ngomong, angka-angka di sini - tiba-tiba - bilangan bulat 257-bit, dan tidak ada pecahan sama sekali - lebih tepatnya, mereka segera berubah menjadi sepasang bilangan bulat, membentuk pembilang dan penyebut pecahan rasional.

Kata-kata cenderung berinteraksi dengan nilai-nilai di bagian atas tumpukan. Jenis kata yang terpisah - awalan — tidak menggunakan tumpukan, tetapi karakter berikutnya dari file sumber. Misalnya, ini adalah bagaimana literal string diimplementasikan - karakter kutipan (") adalah kata awalan yang mencari kutipan (penutup) berikutnya, dan memasukkan string di antara keduanya ke dalam tumpukan. One-liner berperilaku dengan cara yang sama (//) dan multibaris (/*) komentar.

Di sinilah hampir seluruh struktur internal bahasa berakhir. Segala sesuatu yang lain (termasuk konstruksi kontrol) didefinisikan sebagai kata-kata (baik internal, seperti operasi aritmatika dan definisi kata-kata baru; atau didefinisikan dalam "perpustakaan standar" Fift.fif, yang ada di dalam folder crypto/fift di sumbernya).

Contoh program sederhana di Fift:

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

Baris pertama mendefinisikan kata baru setxy (perhatikan awalannya {, yang membuat blok sebelum blok penutup } dan awalan :, yang sebenarnya mendefinisikan kata tersebut). setxy mengambil nomor dari atas tumpukan, mendefinisikan (atau mendefinisikan ulang) sebagai global konstan x, dan kuadrat bilangan ini sebagai konstanta y (Mengingat nilai konstanta dapat didefinisikan ulang, saya lebih suka menyebutnya variabel, tetapi saya mengikuti konvensi penamaan dalam bahasanya).

Dua baris berikutnya menaruh nomor di tumpukan dan menelepon setxy, kemudian nilai konstanta ditampilkan x, y (kata tersebut digunakan untuk keluaran .), kedua konstanta ditempatkan pada tumpukan, dijumlahkan, dan hasilnya juga dicetak. Hasilnya kita akan melihat:

3 9 12 ok
7 49 56 ok

(Baris “ok” dicetak oleh juru bahasa setelah selesai memproses baris saat ini dalam mode masukan interaktif)

Nah, contoh kode lengkapnya:

"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

File yang tampak menakutkan ini untuk membuat kontrak pintar - itu akan ditempatkan dalam sebuah file new-wallet-query.boc setelah eksekusi. Harap dicatat bahwa bahasa rakitan lain digunakan di sini untuk TON Virtual Machine (saya tidak akan membahasnya secara detail), yang instruksinya akan ditempatkan di blockchain.

Jadi, assembler untuk TVM ditulis dalam Fift - sumber assembler ini ada di file crypto/fift/Asm.fif dan terhubung di awal potongan kode di atas.

Apa yang bisa saya katakan, ternyata Nikolai Durov suka sekali membuat bahasa pemrograman baru :)

Membuat kontrak pintar dan berinteraksi dengan TON

Jadi, anggaplah kita telah merakit klien TON dan juru bahasa Fift seperti dijelaskan di atas dan menjadi akrab dengan bahasa tersebut. Bagaimana cara membuat kontrak pintar sekarang? Hal ini dijelaskan dalam file CARA, dilampirkan pada sumbernya.

Akun di TON

Seperti yang saya jelaskan di ulasan TON, jaringan ini berisi lebih dari satu blockchain - ada satu yang umum, yang disebut. "rantai master", serta sejumlah "rantai kerja" tambahan yang sewenang-wenang, yang diidentifikasi dengan nomor 32-bit. Masterchain memiliki pengidentifikasi -1, selain itu, rantai kerja "dasar" dengan pengidentifikasi 0 juga dapat digunakan. Setiap rantai kerja dapat memiliki konfigurasinya sendiri. Secara internal, setiap rantai kerja dibagi menjadi beberapa rantai pecahan, namun ini adalah detail implementasi yang tidak perlu diingat.

Dalam satu rantai kerja, disimpan banyak akun yang memiliki pengidentifikasi account_id sendiri. Untuk rantai master dan rantai kerja nol, panjangnya 256 bit. Jadi, pengenal akunnya ditulis, misalnya seperti ini:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ini adalah format “mentah”: pertama ID rantai kerja, lalu titik dua, dan ID akun dalam notasi heksadesimal.

Selain itu, ada format yang dipersingkat - nomor rantai kerja dan alamat akun dikodekan dalam bentuk biner, checksum ditambahkan ke dalamnya, dan semua ini dikodekan dalam Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Mengetahui format rekaman ini, kita dapat meminta status akun saat ini melalui klien pengujian menggunakan perintah

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Kita akan mendapatkan 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 dari rantai kerja yang ditentukan. Misalnya saja di lapangan storage.balance adalah saldo akun saat ini, in storage.state.code - kode kontrak pintar, dan masuk storage.state.data - datanya saat ini. Harap dicatat bahwa penyimpanan data TON - Sel, sel - seperti pohon, setiap sel dapat memiliki data dan sel turunannya sendiri. Ini ditampilkan sebagai lekukan pada baris terakhir.

Membangun kontrak cerdas

Sekarang mari kita buat sendiri struktur seperti itu (disebut Dewan Komisaris - sekantong sel) menggunakan bahasa Lima. Untungnya, Anda tidak perlu menulis kontrak pintar sendiri - di dalam folder crypto/block ada file dari arsip sumber new-wallet.fif, yang akan membantu kita membuat dompet baru. Mari kita salin ke folder dengan klien yang dirakit (~/liteclient-build, jika Anda mengikuti petunjuk di atas). Isinya saya kutip di atas sebagai contoh kode di Fift.

Jalankan file ini sebagai berikut:

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

Di sini <source-directory> harus diganti dengan jalur ke sumber yang belum dibongkar (sayangnya, simbol “~” tidak dapat digunakan di sini, diperlukan jalur lengkap). Daripada menggunakan kunci -I Anda dapat mendefinisikan variabel lingkungan FIFTPATH dan masukkan jalan ini ke dalamnya.

Sejak kami meluncurkan Fift dengan nama file new-wallet.fif, itu akan menjalankannya dan keluar. Jika Anda menghilangkan nama file, Anda dapat bermain dengan penerjemah secara interaktif.

Setelah eksekusi, sesuatu seperti ini akan ditampilkan di 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)

Artinya dompet dengan ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (atau, apa yang sama, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) berhasil dibuat. Kode yang sesuai akan ada di file new-wallet-query.boc, alamatnya ada di new-wallet.addr, dan kunci pribadinya masuk new-wallet.pk (hati-hati - menjalankan skrip lagi akan menimpa file-file ini).

Tentu saja jaringan TON belum mengetahui tentang dompet ini, hanya disimpan dalam bentuk file-file ini. Sekarang perlu diunggah ke jaringan. Namun, masalahnya adalah untuk membuat kontrak pintar Anda perlu membayar komisi, dan saldo akun Anda masih nol.

Dalam mode kerja, masalah ini akan diselesaikan dengan membeli gram di bursa (atau mentransfer dari dompet lain). Nah, dalam mode pengujian saat ini, kontrak pintar khusus telah dibuat, yang darinya Anda bisa meminta hingga 20 gram begitu saja.

Menghasilkan permintaan ke kontrak pintar orang lain

Kami membuat permintaan ke kontrak pintar yang mendistribusikan gram ke kiri dan ke kanan seperti ini. Di folder yang sama crypto/block Mencari berkas 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 di folder dengan klien yang dirakit, tetapi kami akan memperbaiki baris kelima - sebelum baris “constant dest_addr". Yuk ganti dengan alamat wallet yang sudah kamu buat sebelumnya (lengkap, tidak disingkat). Tidak perlu menulis “-1:” di awal, cukup tulis “0x” di awal.

Anda juga dapat mengubah jalurnya 6.666 Gram*/ constant amount — ini adalah jumlah dalam gram yang Anda minta (tidak lebih dari 20). Meskipun Anda menentukan bilangan bulat, biarkan koma desimal.

Terakhir, Anda perlu memperbaiki garisnya 0x00000011 constant seqno. Angka pertama di sini adalah nomor urut saat ini, yang disimpan di rekening penerbit gram. Dari mana saya bisa mendapatkannya? Seperti yang dinyatakan di atas, mulai klien dan jalankan:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Pada akhirnya, data kontrak pintar akan berisi

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

Angka 0000000D (milik Anda akan lebih besar) adalah nomor urut yang harus disubstitusikan menjadi testgiver.fif.

Itu saja, simpan file dan jalankan (./crypto/fift testgiver.fif). Outputnya akan berupa file wallet-query.boc. Inilah yang terbentuk Сообщение ke kontrak pintar orang lain - permintaan “transfer begitu banyak gram ke akun ini dan itu.”

Menggunakan klien, kami mengunggahnya ke jaringan:

> 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 menelepon sekarang last, dan sekali lagi meminta status akun yang kami minta gramnya, maka kami akan melihat bahwa nomor urutnya bertambah satu - ini berarti ia mengirim uang ke akun kami.

Langkah terakhir yang tersisa - unduh kode dompet kami (saldonya telah diisi ulang, tetapi tanpa kode kontrak pintar kami tidak akan dapat mengelolanya). Kami melaksanakan sendfile new-wallet-query.boc - dan selesai, Anda memiliki dompet sendiri di jaringan TON (walaupun saat ini hanya dompet uji coba).

Membuat transaksi keluar

Untuk mentransfer uang dari saldo akun yang dibuat, ada file crypto/block/wallet.fif, yang juga perlu ditempatkan di folder dengan klien yang dirakit.

Mirip dengan langkah sebelumnya, Anda perlu menyesuaikan jumlah yang Anda transfer, alamat penerima (dest_addr), dan seqno dompet Anda (sama dengan 1 setelah inisialisasi dompet dan bertambah 1 setelah setiap transaksi keluar - Anda bisa melihatnya dengan meminta status akun Anda) . Untuk tes, Anda dapat menggunakan, misalnya, dompet saya - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Pada mulanya (./crypto/fift wallet.fif) skrip akan mengambil alamat dompet Anda (tempat Anda mentransfer) dan kunci pribadinya dari file new-wallet.addr и new-wallet.pk, dan pesan yang diterima akan ditulis ke new-wallet-query.boc.

Seperti sebelumnya, untuk langsung melakukan transaksi, hubungi sendfile new-wallet-query.boc di klien. Setelah ini, jangan lupa untuk memperbarui status blockchain (last) dan periksa apakah saldo dan seqno dompet kita telah berubah (getaccount <account_id>).

Uji klien TON (Telegram Open Network) dan bahasa Fift baru untuk kontrak pintar

Itu saja, sekarang kita dapat membuat kontrak pintar di TON dan mengirimkan permintaan kepada mereka. Seperti yang Anda lihat, fungsionalitas saat ini sudah cukup untuk, misalnya, membuat dompet yang lebih ramah pengguna dengan antarmuka grafis (namun, diharapkan sudah tersedia sebagai bagian dari messenger).

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Apakah Anda tertarik untuk melanjutkan artikel dengan analisis TON, TVM, Fift?

  • Ya, saya tunggu selesainya rangkaian artikel gambaran umum tentang TON

  • Ya, menarik untuk membaca lebih lanjut tentang bahasa Fift

  • Ya, saya ingin mempelajari lebih lanjut tentang TON Virtual Machine dan assemblernya

  • Tidak, semua ini tidak menarik

39 pengguna memilih. 12 pengguna abstain.

Bagaimana pendapat Anda mengenai rencana Telegram meluncurkan TON?

  • Saya menaruh harapan besar pada proyek ini

  • Saya hanya mengikuti perkembangannya dengan penuh minat.

  • Saya skeptis dan meragukan keberhasilannya.

  • Saya cenderung menganggap inisiatif ini gagal dan tidak diperlukan oleh masyarakat luas

47 pengguna memilih. 12 pengguna abstain.

Sumber: www.habr.com

Tambah komentar