テスト クラむアント TON (Telegram Open Network) ずスマヌト コントラクト甚の新しい Fift 蚀語

XNUMX 幎以䞊前、Telegram メッセンゞャヌが独自の分散型ネットワヌクをリリヌスする蚈画に぀いお知られるようになりたした。 オヌプンネットワヌクの電報。 その埌、ニコラむ・ドゥロフによっお曞かれ、将来のネットワヌクの構造が説明されたずされる膚倧な技術文曞が入手可胜になりたした。 芋逃した方は、このドキュメントに぀いおの私の再話をお読みになるこずをお勧めしたす (パヌト1, パヌト2; 残念なこずに、XNUMX 番目の郚分はただ䞋曞きで埃をかぶっおいたす)。

それ以来、数日前たで TON の開発状況に関する重倧なニュヌスはありたせんでした (ある蚘事で) 非公匏チャンネル) ペヌゞぞのリンクが衚瀺されたせんでした https://test.ton.org/download.htmlどこにありたすか:
◩ ton-test-liteclient-full.tar.xz — TON テスト ネットワヌク甚のラむト クラむアント ゜ヌス。
◩ ton-lite-client-test1.config.json — テストネットワヌクに接続するための蚭定ファむル。
◩ README - クラむアントのアセンブリず起動に関する情報。
◩ 方法 — クラむアントを䜿甚しおスマヌト コントラクトを䜜成する方法に関する段階的な説明。
◩ トン.pdf — TON ネットワヌクの技術抂芁を蚘茉した文曞の曎新 (2 幎 2019 月 XNUMX 日付け)。
◩ tvm.pdf — TVM (TON 仮想マシン、TON 仮想マシン) の技術的説明。
◩ tblkch.pdf — TON ブロックチェヌンの技術的説明。
◩ フィフスベヌス.pdf — TON でスマヌト コントラクトを䜜成するために蚭蚈された新しい Fift 蚀語の説明。

繰り返したすが、テレグラムのペヌゞずこれらすべおの文曞に぀いおは公匏の確認はありたせんでしたが、これらの文曞の量を考えるず、それらはかなり信憑性が高いず蚀えたす。 公開されたクラむアントを起動する 自己責任で.

テストクラむアントの構築

たず、テスト クラむアントを構築しお実行しおみたしょう - 幞いなこずに、 README この単玔なプロセスを詳しく説明したす。 䟋ずしお macOS 10.14.5 を䜿甚しおこれを実行したすが、他のシステムでのビルドの成功を保蚌するこずはできたせん。

  1. ダりンロヌドしお解凍する ゜ヌスアヌカむブ。 珟段階では䞋䜍互換性が保蚌されおいないため、最新バヌゞョンをダりンロヌドするこずが重芁です。

  2. 最新バヌゞョンの make、cmake (バヌゞョン 3.0.2 以降)、OpenSSL (C ヘッダヌ ファむルを含む)、g++、たたは Clang がシステムにむンストヌルされおいるこずを確認しおください。 䜕もむンストヌルする必芁はなく、すべおがすぐに組み合わされたした。

  3. ゜ヌスがフォルダヌに解凍されおいるず仮定したす。 ~/lite-client。 それずは別に、組み立おられたプロゞェクト甚の空のフォルダヌを䜜成したす (たずえば、 ~/liteclient-build)、そしおそこから(cd ~/liteclient-build) コマンドを呌び出したす。

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

    テスト クラむアント TON (Telegram Open Network) ずスマヌト コントラクト甚の新しい Fift 蚀語

    スマヌト コントラクト甚の Fift 蚀語むンタヌプリタヌを構築するには (詳现は埌述したす)、次の呌び出しも行いたす。

    cmake --build . --target fift

  4. 珟圚のものをダりンロヌドする 蚭定ファむル テスト ネットワヌクに接続し、組み立おられたクラむアントが含たれるフォルダヌに眮きたす。

  5. 仕䞊げ、クラむアントを起動できたす。

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

すべおが正しく行われるず、次のような内容が衚瀺されるはずです。

テスト クラむアント TON (Telegram Open Network) ずスマヌト コントラクト甚の新しい Fift 蚀語

ご芧のずおり、䜿甚できるコマンドはほずんどありたせん。
◩ help — このコマンドのリストを衚瀺したす。
◩ quit - 倖出;
◩ time — サヌバヌ䞊の珟圚時刻を衚瀺したす。
◩ status — 接続ずロヌカルデヌタベヌスのステヌタスを衚瀺したす。
◩ last — ブロックチェヌンの状態を曎新したす (最埌のブロックをダりンロヌドしたす)。 リク゚ストの前にこのコマンドを実行しお、ネットワヌクの珟圚の状態を確認するこずが重芁です。
◩ sendfile <filename> — ロヌカル ファむルを TON ネットワヌクにアップロヌドしたす。 これにより、ネットワヌクずのやり取りが行われたす。これには、新しいスマヌト コントラクトの䜜成やアカりント間での資金移動のリク゚ストなどが含たれたす。
◩ getaccount <address> — 珟圚(コマンド実行時)を衚瀺したす。 last) 指定されたアドレスのアカりントのステヌタス。
◩ privkey <filename> — ロヌカル ファむルから秘密キヌをロヌドしたす。

クラむアントの起動時に、オプションを䜿甚しおフォルダヌをクラむアントに転送した堎合 -D次に、マスタヌチェヌンの最埌のブロックをそれに远加したす。

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

ここで、さらに興味深いこずに移りたす。Fift 蚀語を孊習し、スマヌト コントラクトをコンパむルしお (テスト りォレットの䜜成など)、それをネットワヌクにアップロヌドしお、アカりント間で資金を転送しおみたす。

蚀語 XNUMX

資料より フィフスベヌス.pdf Telegram チヌムがスマヌト コントラクトを䜜成するための新しいスタック蚀語を䜜成したこずがわかりたす。 フィフト (数字から掚枬するず 第5、Forth に䌌おおり、Fifth ず倚くの共通点がある蚀語です)。

この文曞は 87 ペヌゞず非垞にボリュヌムがあり、この蚘事の枠内でその内容を詳しく説明する぀もりはありたせん (少なくずも私自身はただ読み終えおいないため :)。 䞻芁な点に焊点を圓お、この蚀語のコヌド䟋をいく぀か瀺したす。

基本レベルでは、Fift の構文は非垞に単玔です。そのコヌドは次のもので構成されたす。 蚀葉、通垞はスペヌスたたは改行で区切られたす (特殊な堎合: 䞀郚の単語は単語自䜓の埌に区切り文字を必芁ずしたせん)。 どれでも ワヌド は、倧文字ず小文字が区別される、特定の文字列に察応する䞀連の文字です。 決定 倧たかに蚀うず、この単語に遭遇したずきに通蚳者が䜕をすべきか。 単語の定矩がない堎合、むンタプリタはそれを数倀ずしお解析しおスタックに眮こうずしたす。 ちなみに、ここでの数倀は - 突然 - 257 ビットの敎数であり、分数はたったくありたせん - より正確には、それらはすぐに敎数のペアに倉わり、有理分数の分子ず分母を圢成したす。

単語はスタックの最䞊䜍にある倀ず盞互䜜甚する傟向がありたす。 別の皮類の単語 - 接頭語 — スタックを䜿甚せず、゜ヌス ファむルの埌続の文字を䜿甚したす。 たずえば、これは文字列リテラルの実装方法です - 匕甚笊 (") は、次の (終了) 匕甚笊を怜玢し、それらの間の文字列をスタックにプッシュする接頭語です。 ワンラむナヌも同じように動䜜したす (//) ず耇数行 (/*のコメント。

ここで、蚀語の内郚構造のほが党䜓が終了したす。 それ以倖のすべお (制埡構造を含む) は単語ずしお定矩されたす (算術挔算や新しい単語の定矩などの内郚的なもの、たたは「暙準ラむブラリ」で定矩されたもののいずれか) Fift.fif、フォルダヌ内にありたす crypto/fift 情報源に蚘茉されおいたす。

Fift の簡単なプログラム䟋:

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

最初の行は新しい単語を定矩したす setxy (接頭蟞に泚意しおください {、終了ブロックの前にブロックを䜜成したす。 } ずプレフィックス :、実際にその単語を定矩するものです。 setxy スタックの最䞊䜍から数倀を取埗し、それをグロヌバルずしお定矩 (たたは再定矩) したす。 絶え間ない x、この数倀の XNUMX 乗を定数ずしお y (定数の倀は再定矩できるこずを考えるず、むしろ倉数ず呌びたいず思いたすが、蚀語の呜名芏則に埓いたす)。

次の XNUMX 行はスタックに数倀を眮き、呌び出したす。 setxy、するず定数の倀が衚瀺されたす x, y (単語は出力に䜿甚されたす .)、䞡方の定数がスタックに眮かれ、合蚈され、結果も出力されたす。 その結果、次のこずがわかりたす。

3 9 12 ok
7 49 56 ok

(むンタラクティブ入力モヌドで珟圚の行の凊理が完了するず、むンタプリタによっお行「ok」が出力されたす)

完党なコヌド䟋:

"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

この恐ろしい芋た目のファむルは、スマヌト コントラクトを䜜成するためのものです。ファむルに配眮されたす。 new-wallet-query.boc 凊刑埌。 ここでは TON 仮想マシンに別のアセンブリ蚀語が䜿甚されおおり (詳しくは説明したせん)、その呜什はブロックチェヌンに配眮されるこずに泚意しおください。

したがっお、TVM のアセンブラは Fift で曞かれおいたす。このアセンブラの゜ヌスは次のファむルにありたす。 crypto/fift/Asm.fif ず は、䞊蚘のコヌド郚分の先頭で接続されおいたす。

䜕ず蚀うか、どうやらニコラむ・デュロフは新しいプログラミング蚀語を䜜成するのが倧奜きのようです:)

スマヌトコントラクトの䜜成ずTONずの察話

したがっお、䞊で説明したように TON クラむアントず Fift むンタヌプリタヌを組み立お、蚀語に慣れおきたず仮定したしょう。 今すぐスマヌトコントラクトを䜜成するにはどうすればよいですか? これはファむルに蚘茉されおいたす 方法、゜ヌスに添付されおいたす。

TONのアカりント

で説明したように、 TONのレビュヌ、このネットワヌクには耇数のブロックチェヌンが含たれおいたす。いわゆる、共通のブロックチェヌンが 32 ぀ありたす。 「マスタヌ チェヌン」ず、1 ビットの数倀で識別される任意の数の远加の「ワヌク チェヌン」。 マスタヌチェヌンの識別子は -0 です。それに加えお、識別子 XNUMX の「ベヌス」ワヌクチェヌンも䜿甚できたす。各ワヌクチェヌンは独自の構成を持぀こずができたす。 内郚的には、各ワヌクチェヌンはシャヌドチェヌンに分割されおいたすが、これは実装の詳现であり、芚えおおく必芁はありたせん。

256 ぀のワヌクチェヌン内には、独自の account_id 識別子を持぀倚くのアカりントが保存されたす。 マスタヌ チェヌンずれロ ワヌク チェヌンの堎合、長さは XNUMX ビットです。 したがっお、アカりント識別子は、たずえば次のように蚘述されたす。

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

これは「生の」圢匏です。最初にワヌクチェヌン ID、次にコロン、そしお XNUMX 進衚蚘のアカりント ID が続きたす。

さらに、短瞮圢匏もありたす。ワヌクチェヌン番号ずアカりント アドレスはバむナリ圢匏で゚ンコヌドされ、チェックサムが远加され、これらはすべお Base64 で゚ンコヌドされたす。

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

このレコヌド圢匏がわかれば、次のコマンドを䜿甚しおテスト クラむアントを通じおアカりントの珟圚の状態をリク゚ストできたす。

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

次のような結果が埗られたす。

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

指定したワヌクチェヌンの DHT に保存されおいる構造が衚瀺されたす。 たずえば、フィヌルドでは storage.balance は圓座預金残高です。 storage.state.code - スマヌト コントラクト コヌド、および storage.state.data - 珟圚のデヌタ。 TON デヌタ ストレヌゞ (セル、セル) はツリヌ状になっおおり、各セルは独自のデヌタず子セルの䞡方を持぀こずができるこずに泚意しおください。 これは最埌の行のむンデントずしお瀺されおいたす。

スマヌトコントラクトの構築

では、そのような構造を自分で䜜成しおみたしょう (BOC ず呌ばれたす - 现胞の入った袋)Fift 蚀語を䜿甚したす。 幞いなこずに、スマヌト コントラクトを自分で䜜成する必芁はありたせん - フォルダヌ内に crypto/block ゜ヌスアヌカむブからのファむルがありたす new-wallet.fifこれは、新しいりォレットを䜜成するのに圹立ちたす。 組み立おたクラむアントが入っおいるフォルダヌにコピヌしたしょう(~/liteclient-build䞊蚘の手順に埓っおいる堎合)。 その内容をFift䞊のコヌド䟋ずしお䞊に匕甚したした。

このファむルを次のように実行したす。

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

それは <source-directory> は、解凍された゜ヌスぞのパスに眮き換える必芁がありたす (残念ながら、ここでは「~」蚘号は䜿甚できたせん。完党なパスが必芁です)。 キヌを䜿甚する代わりに -I 環境倉数を定矩できたす FIFTPATH このパスをそれに入れたす。

ファむル名でFiftを起動したので new-wallet.fif、それを実行しお終了したす。 ファむル名を省略するず、むンタプリタを䜿っお察話的に遊ぶこずができたす。

実行埌、コン゜ヌルに次のような内容が衚瀺されるはずです。

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)

これは、ID を持぀りォレットが -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (たたは、同じものは、 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) が正垞に䜜成されたした。 察応するコヌドがファむル内にありたす new-wallet-query.boc、圌の䜏所は new-wallet.addr、秘密鍵は次のずおりです。 new-wallet.pk (泚意しおください。スクリプトを再床実行するず、これらのファむルが䞊曞きされたす)。

もちろん、TON ネットワヌクはこのりォレットのこずをただ知りたせん; これらのファむルの圢匏でのみ保存されたす。 次に、ネットワヌクにアップロヌドする必芁がありたす。 ただし、問題は、スマヌト コントラクトを䜜成するには手数料を支払う必芁があり、アカりント残高がただれロであるこずです。

䜜業モヌドでは、この問題は取匕所でグラムを賌入するたたは別のりォレットから転送するこずで解決されたす。 さお、珟圚のテストモヌドでは、特別なスマヌトコントラクトが䜜成されおおり、そこから同じように最倧20グラムを芁求できたす。

他人のスマヌトコントラクトぞのリク゚ストの生成

このようにグラムを巊右に振り分けるスマヌトコントラクトにリク゚ストを行いたす。 同じフォルダ内 crypto/block ファむルを芋぀ける 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

組み立おたクラむアントず䞀緒にフォルダヌにも保存したすが、行「」の前のXNUMX行目を修正したす。constant dest_addr」。 これを、前に䜜成したりォレットのアドレス (省略圢ではなく完党なアドレス) に眮き換えたしょう。 先頭に「-1:」を蚘述する必芁はなく、先頭に「0x」を蚘述したす。

回線倉曎も可胜です 6.666 Gram*/ constant amount — これはあなたが芁求しおいるグラム単䜍の量です (20 以䞋)。 敎数を指定する堎合でも、小数点は残しおください。

最埌に、行を修正する必芁がありたす 0x00000011 constant seqno。 ここでの最初の番号は、アカりント発行グラムに保存されおいる珟圚のシヌケンス番号です。 どこから入手できたすか? 䞊で述べたように、クラむアントを起動しお以䞋を実行したす。

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

最埌に、スマヌト コントラクト デヌタには次のものが含たれたす。

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

数字 0000000D (実際の数字はもっず倧きくなりたす) は、代入する必芁があるシヌケンス番号です。 testgiver.fif.

ファむルを保存しお実行したす (./crypto/fift testgiver.fif。 出力はファむルになりたす wallet-query.boc。 これが圢成されるものです メッセヌゞ 他の人のスマヌトコントラクトぞの送信 - 「これこれのアカりントに非垞に倚くのグラムを転送する」ずいうリク゚スト。

クラむアントを䜿甚しお、ネットワヌクにアップロヌドしたす。

> 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

今電話したら last、そしおグラムを芁求したアカりントのステヌタスを再床リク゚ストするず、そのシヌケンス番号が XNUMX ぀増加しおいるこずがわかりたす。これは、アカりントに送金されたこずを意味したす。

最埌のステップは残っおいたす - りォレットのコヌドをダりンロヌドしたす残高はすでに補充されおいたすが、スマヌトコントラクトコヌドがなければ管理できたせん。 実斜したす sendfile new-wallet-query.boc - これで、TON ネットワヌク内に自分のりォレットができたした (たずえそれが珟時点ではテスト版にすぎなかったずしおも)。

送信トランザクションの䜜成

䜜成したアカりントの残高から送金するには、ファむルがありたす crypto/block/wallet.fifこれも、組み立おられたクラむアントず䞀緒にフォルダヌに配眮する必芁がありたす。

前の手順ず同様に、送金する金額、受信者のアドレス (dest_addr)、りォレットのシヌケンス番号 (りォレットの初期化埌は 1 に等しく、送信トランザクションごずに 1 ず぀増加したす) を調敎する必芁がありたす。アカりントのステヌタスをリク゚ストしお確認しおください)。 テストには、たずえば私のりォレットを䜿甚できたす。 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

始めるずき ./crypto/fift wallet.fif) スクリプトは、ファむルからりォレットのアドレス (転送元) ずその秘密キヌを取埗したす。 new-wallet.addr О new-wallet.pk、受信したメッセヌゞは次の堎所に曞き蟌たれたす。 new-wallet-query.boc.

前ず同様に、トランザクションを盎接実行するには、次の呌び出しを行いたす。 sendfile new-wallet-query.boc クラむアントで。 この埌、ブロックチェヌンの状態を曎新するこずを忘れないでください (last) りォレットの残高ずシヌケンス番号が倉曎されたこずを確認したす (getaccount <account_id>).

テスト クラむアント TON (Telegram Open Network) ずスマヌト コントラクト甚の新しい Fift 蚀語

これで、TON でスマヌト コントラクトを䜜成し、それらにリク゚ストを送信できるようになりたした。 ご芧のずおり、珟圚の機胜は、たずえば、グラフィカル むンタヌフェむスを備えたより䜿いやすいりォレットを䜜成するにはすでに十分です (ただし、メッセンゞャヌの䞀郚ずしおすでに利甚可胜になるこずが予想されたす)。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

TON、TVM、Fift の分析を含む蚘事の続きに興味がありたすか?

  • はい、TON の抂芁を説明する䞀連の蚘事の完成を埅っおいたす。

  • はい、Fift 蚀語に぀いお詳しく読むのは興味深いです

  • はい、TON 仮想マシンずそのアセンブラに぀いお詳しく知りたいです

  • いや、どれも面癜くないよ

39 人のナヌザヌが投祚したした。 12名のナヌザヌが棄暩した。

Telegram が TON を立ち䞊げる蚈画に぀いおどう思いたすか?

  • このプロゞェクトに倧きな期埅を寄せおいたす

  • 私はその発展を興味深く芋守っおいたす。

  • 私は懐疑的であり、その成功を疑っおいたす。

  • 私はこの取り組みは倱敗であり、広範な倧衆にずっお䞍必芁であるず考えおいたす。

47 人のナヌザヌが投祚したした。 12名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす