cryptonerdcn

cryptonerdcn

Cairo 1.0-Alpha.3の新機能の解説

image

この記事は@StarknetAstroCNへの投稿です。

Starkware は 2 月 21 日にCairo 1.0-alpha.3を発表しました。Cairo 1.0 の公式テストネット(Starknet 0.11.0 の公開から 2 週間後)への移行がますます近づいています。さて、このバージョンでの新機能を見てみましょう。

スナップショットは新しいタイプです(実際にはこのバージョンより前から広く使用されています)。スナップショットはある時点でのオブジェクトへの参照を作成し、作成後は変更できません。

このタイプの主な用途は、オブジェクトに参照を作成することです。オブジェクトがコピーできない場合でも(注:Cairo のコピー、つまり copy トレイトは、rust の概念を参考にしていますが、一般的なコピーとは異なります。こちらを参照してください)。ここで、@は snap 操作を表し、* は desnap 操作で、スナップショットオブジェクトを取り出す操作です。

公式のコードは少し混乱していますので、説明します:

image

これは実際には Cairo の配列のソースコードに書かれています。

実際のテストでは、次のコードをテストするだけです:

use array::ArrayTrait;

fn main() -> felt {
    let mut arr = ArrayTrait::new();
    arr.append(10);
    let x = *arr.at(0_usize);
    return x;
}

これにより、ターミナルに次のような結果が表示されます。

Run completed successfully, returning [10]

理解しづらい場合は、次のコードを実行してください:

use array::ArrayTrait;

extern fn print(message: Array::<felt>) nopanic;

fn main() -> felt {
    let mut arr = ArrayTrait::new();
    arr.append(10);
    let xx = arr.at(0_usize);
    let d = arr.pop_front();
    drop(d);
    arr.append(11);
    print(arr);
    let x = *xx;
    return x;
}

次のような出力が表示されます:

'
 ' (raw: 11), 
Run completed successfully, returning [10]

配列が [11] に変わったにもかかわらず、出力は依然として 10 です。

ec_point_zero、ec_point_is_zero、ec_state_finalize が追加されました。

+=、-=、*=、/=、%=

Into、TryInto、Neg、Not演算子。

Into は型変換を担当します。TryInto も同様に型変換を行いますが、変換に失敗することが許容され、Option を返します(例:ここでの実装)。

Neg は Negative の略で、負の値を取得するための操作(例:ここでの実装)または逆数を取得するための操作です。Not は否定の操作です。

https://github.com/starkware-libs/cairo/blob/e53053e787fb5585d09d2012335613db5407eda6/corelib/src/integer.cairo

私の Twitter:

image

https://twitter.com/cryptonerdcn

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。