Move言語
DeepL.iconMove
Moveは、Aptosブロックチェーン上のすべてのトランザクションを実装する新しいプログラミング言語です。
トランザクションスクリプトとMoveモジュールの2種類のコードがあります。
Moveバイトコード
MoveプログラムはMoveバイトコードにコンパイルされます。
Moveバイトコードは、トランザクションスクリプトとMoveモジュールを表現するために使用されます。
Moveモジュール
Moveモジュールは、Aptosブロックチェーンのグローバルステートを更新するためのルールを定義します。
ユーザーが提出した各トランザクションには、トランザクションスクリプトが含まれます。トランザクションスクリプトは、ルールに従ってブロックチェーンのグローバルな状態を更新するために、1つまたは複数のMoveモジュールの手続きを呼び出します。
Moveリソース
Moveリソースには、Moveモジュールで宣言された手続きに従ってアクセスすることができるデータが含まれています。
Moveリソースは、コピー、再利用、紛失することができません。これにより、Moveプログラマは、誤って、または意図的にリソースを見失うことがないように保護されています。
Moveバーチャルマシン(MVM)
Move仮想マシンは、Moveバイトコードで記述されたトランザクションスクリプトを実行し、実行結果を生成する。この結果はブロックチェーンの状態を更新するために使用される。
仮想マシンはValidatorの一部である。
ユーザーによって送信された各トランザクションには、トランザクションスクリプトが 含まれる。
これはクライアントがValidatorに提出する操作を表す。
操作は、ユーザーAからユーザーBにコインを移動させる要求であったり、公開されているMoveモジュール/スマートコントラクトとのやりとりを含む可能性がある。
トランザクションスクリプトは、モジュールの手続きを呼び出すことで、Aptosブロックチェーンのグローバルストレージに公開されたリソースと相互作用する任意のプログラムである。それはトランザクションのためのロジックをコード化します。
単一のトランザクションスクリプトは、複数の受信者に資金を送信し、複数の異なるモジュールから手続きを呼び出すことができます。
トランザクションスクリプトはグローバルステートに保存されず、他のトランザクションスクリプトによって呼び出されることはない。これは一回限りのプログラムである。
www.DeepL.com/Translator(無料版)で翻訳しました。
transaction scriptとmove moduleがある
move moduleがスマートコントラクトで、台帳を更新するルールを書く
transaction scriptはmove moduleを呼び出す。一つでも複数でも
move moduleが命令で、transaction scriptがスクリプト、みたいなものか?sta.icon
Rustでつくられている
既に遊んでる人いた
Solidity
Solidity ではコントラクト自体が保持している状態を、コントラクト自分自身が持つ場合は自分の function で更新をし、他コントラクトが持っていればその状態を更新してもらう function を公開してもらってそれを呼び出す、というような、色んな言語仕様にあるオブジェクトと近い感覚でデータそのものを触ることができました。
Move
今回取り扱った move ではそのデータが誰に所有されているかを意識させ、そのデータに対する操作権限を選択/利用することを明示的にさせているところが大きな特徴の一つであり、Solidity と違うところで面白いなと思います。
Moveの実行形式は、「アセンブリよりも高レベルでありながらソース言語よりも低レベルのバイトコード」である。バイトコードは、バイトコードベリファイアによって、リソース、型、メモリの安全性をオンチェーンでチェックされ、バイトコードインタープリタによって直接実行されるものです。この仕組みは、トランザクションにコンパイルのコストを加えることなく、安全性を最大限に高め、イーサリアムと比較してガス代を最小にするために設計されています。これは、Moveがデザインによってトリレンマを解決するために誕生しました。
なるほどわからんsta.icon
コンパイルコスト要らないってのはわかる。インタープリタってことよな。
アセンブリ以上、低級言語以下のレベルを狙ったのはなんで?
機械に近いコード形式の方が安全にチェックできるから?
でもできるだけ書きやすいに越したことはない
そのバランスがこのレベル感?
sta.icon
利用者に言語書かせる意味がわからんのだけど、どういうことなんだろう?
いや、別の言い方にする
Move言語は、いつ、誰が使う?
Aptosがトランザクション送るときにMoveで書いたコードを生成して、これを送信するってこと? MVMって言葉もあるし、このMVMがそのコードを処理してトランザクションを実行するってこと?
あえて言語化したのはなんで?jsonみたいなデータ構造じゃ駄目なん?
ああ、駄目か
トランザクション、クエリってことだからSQLもそうだが一定の表現力が必要
「言語」レベルの何かが要る
だからこしらえたってわけか