Skip to content

Commit 3686979

Browse files
nanne007zjma
andauthored
[Features] support bn254_algebra in aptos_stdlib (aptos-labs#11142)
* [feat][aptos-stdlib] crypto algebra bn254 Signed-off-by: caojiafeng <[email protected]> * scripts: fix update_algebra_gas_params.py Signed-off-by: caojiafeng <[email protected]> * add bn254 to default features to make unit test pass * fix a bug mentioned in the comments * add test for bn254 * bn254: add test and doc * ark_bn254 benches and derived gas parameters (#2) * [feat][aptos-stdlib] crypto algebra bn254 Signed-off-by: caojiafeng <[email protected]> * scripts: fix update_algebra_gas_params.py Signed-off-by: caojiafeng <[email protected]> * add bn254 to default features to make unit test pass * fix a bug mentioned in the comments * initial * update * initial gas param * benches for fq and fq2 * it compiles * gas script now also specifies quantity types * update scripts --------- Signed-off-by: caojiafeng <[email protected]> Co-authored-by: caojiafeng <[email protected]> * resolve comments * doc: `cargo run -p aptos-framework release` to generate doc * address comments, and regenerate doc * update doc * update doc * lint, fix ut * lint * address comments from `alinush` Signed-off-by: caojiafeng <[email protected]> * delete bn254_fq2 related code * address comments on bench Signed-off-by: caojiafeng <[email protected]> * lint, also hardcode BN254 Gt generator to save cold start time * revert debugging stuff * update gas version * lint --------- Signed-off-by: caojiafeng <[email protected]> Co-authored-by: zhoujunma <[email protected]> Co-authored-by: zhoujun.ma <[email protected]>
1 parent d386e90 commit 3686979

File tree

40 files changed

+3549
-513
lines changed

40 files changed

+3549
-513
lines changed

Cargo.lock

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ anstyle = "1.0.1"
437437
arc-swap = "1.6.0"
438438
arr_macro = "0.2.1"
439439
ark-bls12-381 = "0.4.0"
440+
ark-bn254 = "0.4.0"
440441
ark-ec = "0.4.0"
441442
ark-ff = "0.4.0"
442443
ark-serialize = "0.4.0"

aptos-move/aptos-gas-schedule/src/gas_schedule/aptos_framework.rs

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,84 @@ crate::gas_schedule::macros::define_gas_parameters!(
1616
[account_create_address_base: InternalGas, "account.create_address.base", 6000],
1717
[account_create_signer_base: InternalGas, "account.create_signer.base", 6000],
1818

19-
// Algebra gas parameters begin.
20-
// Generated at time 1680606720.0709136 by `scripts/algebra-gas/update_algebra_gas_params.py` with gas_per_ns=10.23.
19+
// BN254 algebra gas parameters begin.
20+
// Generated at time 1701559125.5498126 by `scripts/algebra-gas/update_bn254_algebra_gas_params.py` with gas_per_ns=209.10511688369482.
21+
[algebra_ark_bn254_fq12_add: InternalGas, { 13.. => "algebra.ark_bn254_fq12_add" }, 4_406],
22+
[algebra_ark_bn254_fq12_clone: InternalGas, { 13.. => "algebra.ark_bn254_fq12_clone" }, 4_392],
23+
[algebra_ark_bn254_fq12_deser: InternalGas, { 13.. => "algebra.ark_bn254_fq12_deser" }, 129_063],
24+
[algebra_ark_bn254_fq12_div: InternalGas, { 13.. => "algebra.ark_bn254_fq12_div" }, 2_813_602],
25+
[algebra_ark_bn254_fq12_eq: InternalGas, { 13.. => "algebra.ark_bn254_fq12_eq" }, 12_142],
26+
[algebra_ark_bn254_fq12_from_u64: InternalGas, { 13.. => "algebra.ark_bn254_fq12_from_u64" }, 14_463],
27+
[algebra_ark_bn254_fq12_inv: InternalGas, { 13.. => "algebra.ark_bn254_fq12_inv" }, 2_168_418],
28+
[algebra_ark_bn254_fq12_mul: InternalGas, { 13.. => "algebra.ark_bn254_fq12_mul" }, 643_914],
29+
[algebra_ark_bn254_fq12_neg: InternalGas, { 13.. => "algebra.ark_bn254_fq12_neg" }, 13_311],
30+
[algebra_ark_bn254_fq12_one: InternalGas, { 13.. => "algebra.ark_bn254_fq12_one" }, 209],
31+
[algebra_ark_bn254_fq12_pow_u256: InternalGas, { 13.. => "algebra.ark_bn254_fq12_pow_u256" }, 192_871_746],
32+
[algebra_ark_bn254_fq12_serialize: InternalGas, { 13.. => "algebra.ark_bn254_fq12_serialize" }, 117_336],
33+
[algebra_ark_bn254_fq12_square: InternalGas, { 13.. => "algebra.ark_bn254_fq12_square" }, 468_955],
34+
[algebra_ark_bn254_fq12_sub: InternalGas, { 13.. => "algebra.ark_bn254_fq12_sub" }, 30_497],
35+
[algebra_ark_bn254_fq12_zero: InternalGas, { 13.. => "algebra.ark_bn254_fq12_zero" }, 209],
36+
[algebra_ark_bn254_fq_add: InternalGas, { 13.. => "algebra.ark_bn254_fq_add" }, 4_373],
37+
[algebra_ark_bn254_fq_clone: InternalGas, { 13.. => "algebra.ark_bn254_fq_clone" }, 4_313],
38+
[algebra_ark_bn254_fq_deser: InternalGas, { 13.. => "algebra.ark_bn254_fq_deser" }, 17_588],
39+
[algebra_ark_bn254_fq_div: InternalGas, { 13.. => "algebra.ark_bn254_fq_div" }, 1_140_544],
40+
[algebra_ark_bn254_fq_eq: InternalGas, { 13.. => "algebra.ark_bn254_fq_eq" }, 4_373],
41+
[algebra_ark_bn254_fq_from_u64: InternalGas, { 13.. => "algebra.ark_bn254_fq_from_u64" }, 14_137],
42+
[algebra_ark_bn254_fq_inv: InternalGas, { 13.. => "algebra.ark_bn254_fq_inv" }, 1_136_577],
43+
[algebra_ark_bn254_fq_mul: InternalGas, { 13.. => "algebra.ark_bn254_fq_mul" }, 10_050],
44+
[algebra_ark_bn254_fq_neg: InternalGas, { 13.. => "algebra.ark_bn254_fq_neg" }, 4_314],
45+
[algebra_ark_bn254_fq_one: InternalGas, { 13.. => "algebra.ark_bn254_fq_one" }, 209],
46+
[algebra_ark_bn254_fq_pow_u256: InternalGas, { 13.. => "algebra.ark_bn254_fq_pow_u256" }, 2_081_451],
47+
[algebra_ark_bn254_fq_serialize: InternalGas, { 13.. => "algebra.ark_bn254_fq_serialize" }, 25_938],
48+
[algebra_ark_bn254_fq_square: InternalGas, { 13.. => "algebra.ark_bn254_fq_square" }, 4_314],
49+
[algebra_ark_bn254_fq_sub: InternalGas, { 13.. => "algebra.ark_bn254_fq_sub" }, 6_148],
50+
[algebra_ark_bn254_fq_zero: InternalGas, { 13.. => "algebra.ark_bn254_fq_zero" }, 209],
51+
[algebra_ark_bn254_fr_add: InternalGas, { 13.. => "algebra.ark_bn254_fr_add" }, 4_377],
52+
[algebra_ark_bn254_fr_deser: InternalGas, { 13.. => "algebra.ark_bn254_fr_deser" }, 16_722],
53+
[algebra_ark_bn254_fr_div: InternalGas, { 13.. => "algebra.ark_bn254_fr_div" }, 1_217_943],
54+
[algebra_ark_bn254_fr_eq: InternalGas, { 13.. => "algebra.ark_bn254_fr_eq" }, 4_396],
55+
[algebra_ark_bn254_fr_from_u64: InternalGas, { 13.. => "algebra.ark_bn254_fr_from_u64" }, 13_485],
56+
[algebra_ark_bn254_fr_inv: InternalGas, { 13.. => "algebra.ark_bn254_fr_inv" }, 1_209_015],
57+
[algebra_ark_bn254_fr_mul: InternalGas, { 13.. => "algebra.ark_bn254_fr_mul" }, 9_867],
58+
[algebra_ark_bn254_fr_neg: InternalGas, { 13.. => "algebra.ark_bn254_fr_neg" }, 4_314],
59+
[algebra_ark_bn254_fr_one: InternalGas, { 13.. => "algebra.ark_bn254_fr_one" }, 0],
60+
[algebra_ark_bn254_fr_serialize: InternalGas, { 13.. => "algebra.ark_bn254_fr_serialize" }, 25_749],
61+
[algebra_ark_bn254_fr_square: InternalGas, { 13.. => "algebra.ark_bn254_fr_square" }, 4_311],
62+
[algebra_ark_bn254_fr_sub: InternalGas, { 13.. => "algebra.ark_bn254_fr_sub" }, 10_370],
63+
[algebra_ark_bn254_fr_zero: InternalGas, { 13.. => "algebra.ark_bn254_fr_zero" }, 209],
64+
[algebra_ark_bn254_g1_affine_deser_comp: InternalGas, { 13.. => "algebra.ark_bn254_g1_affine_deser_comp" }, 23_497_333],
65+
[algebra_ark_bn254_g1_affine_deser_uncomp: InternalGas, { 13.. => "algebra.ark_bn254_g1_affine_deser_uncomp" }, 21_528_706],
66+
[algebra_ark_bn254_g1_affine_serialize_comp: InternalGas, { 13.. => "algebra.ark_bn254_g1_affine_serialize_comp" }, 44_924],
67+
[algebra_ark_bn254_g1_affine_serialize_uncomp: InternalGas, { 13.. => "algebra.ark_bn254_g1_affine_serialize_uncomp" }, 58_820],
68+
[algebra_ark_bn254_g1_proj_add: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_add" }, 106_501],
69+
[algebra_ark_bn254_g1_proj_double: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_double" }, 63_682],
70+
[algebra_ark_bn254_g1_proj_eq: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_eq" }, 53_021],
71+
[algebra_ark_bn254_g1_proj_generator: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_generator" }, 209],
72+
[algebra_ark_bn254_g1_proj_infinity: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_infinity" }, 209],
73+
[algebra_ark_bn254_g1_proj_neg: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_neg" }, 209],
74+
[algebra_ark_bn254_g1_proj_scalar_mul: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_scalar_mul" }, 26_456_386],
75+
[algebra_ark_bn254_g1_proj_sub: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_sub" }, 106_903],
76+
[algebra_ark_bn254_g1_proj_to_affine: InternalGas, { 13.. => "algebra.ark_bn254_g1_proj_to_affine" }, 6_340],
77+
[algebra_ark_bn254_g2_affine_deser_comp: InternalGas, { 13.. => "algebra.ark_bn254_g2_affine_deser_comp" }, 67_710_223],
78+
[algebra_ark_bn254_g2_affine_deser_uncomp: InternalGas, { 13.. => "algebra.ark_bn254_g2_affine_deser_uncomp" }, 60_677_591],
79+
[algebra_ark_bn254_g2_affine_serialize_comp: InternalGas, { 13.. => "algebra.ark_bn254_g2_affine_serialize_comp" }, 69_214],
80+
[algebra_ark_bn254_g2_affine_serialize_uncomp: InternalGas, { 13.. => "algebra.ark_bn254_g2_affine_serialize_uncomp" }, 98_505],
81+
[algebra_ark_bn254_g2_proj_add: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_add" }, 318_234],
82+
[algebra_ark_bn254_g2_proj_double: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_double" }, 158_874],
83+
[algebra_ark_bn254_g2_proj_eq: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_eq" }, 141_359],
84+
[algebra_ark_bn254_g2_proj_generator: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_generator" }, 209],
85+
[algebra_ark_bn254_g2_proj_infinity: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_infinity" }, 209],
86+
[algebra_ark_bn254_g2_proj_neg: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_neg" }, 209],
87+
[algebra_ark_bn254_g2_proj_scalar_mul: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_scalar_mul" }, 76_395_801],
88+
[algebra_ark_bn254_g2_proj_sub: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_sub" }, 321_727],
89+
[algebra_ark_bn254_g2_proj_to_affine: InternalGas, { 13.. => "algebra.ark_bn254_g2_proj_to_affine" }, 1_251_909],
90+
[algebra_ark_bn254_multi_pairing_base: InternalGas, { 13.. => "algebra.ark_bn254_multi_pairing_base" }, 127_794_596],
91+
[algebra_ark_bn254_multi_pairing_per_pair: InternalGasPerArg, { 13.. => "algebra.ark_bn254_multi_pairing_per_pair" }, 67_624_587],
92+
[algebra_ark_bn254_pairing: InternalGas, { 13.. => "algebra.ark_bn254_pairing" }, 209_703_839],
93+
// BN254 algebra gas parameters end.
94+
95+
// BLS12-381 algebra gas parameters begin.
96+
// Generated at time 1680606720.0709136 by `scripts/algebra-gas/update_algebra_gas_params.py` with gas_per_ns=204.6.
2197
[algebra_ark_bls12_381_fq12_add: InternalGas, { 8.. => "algebra.ark_bls12_381_fq12_add" }, 36380],
2298
[algebra_ark_bls12_381_fq12_clone: InternalGas, { 8.. => "algebra.ark_bls12_381_fq12_clone" }, 4220],
2399
[algebra_ark_bls12_381_fq12_deser: InternalGas, { 8.. => "algebra.ark_bls12_381_fq12_deser" }, 223600],
@@ -79,7 +155,7 @@ crate::gas_schedule::macros::define_gas_parameters!(
79155
[algebra_ark_h2c_bls12381g1_xmd_sha256_sswu_per_msg_byte: InternalGasPerByte, { 8.. => "algebra.ark_h2c_bls12381g1_xmd_sha256_sswu_per_msg_byte" }, 960],
80156
[algebra_ark_h2c_bls12381g2_xmd_sha256_sswu_base: InternalGas, { 8.. => "algebra.ark_h2c_bls12381g2_xmd_sha256_sswu_base" }, 135460040],
81157
[algebra_ark_h2c_bls12381g2_xmd_sha256_sswu_per_msg_byte: InternalGasPerByte, { 8.. => "algebra.ark_h2c_bls12381g2_xmd_sha256_sswu_per_msg_byte" }, 960],
82-
// Algebra gas parameters end.
158+
// BLS12-381 algebra gas parameters end.
83159

84160
[bls12381_base: InternalGas, "bls12381.base", 3000],
85161

aptos-move/aptos-gas-schedule/src/ver.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
/// - Changing how gas is calculated in any way
99
///
1010
/// Change log:
11+
/// - V13
12+
/// - Added BN254 operations.
1113
/// - V12
1214
/// - Making resource group charge on first read independent of BTreeMap serialization.
1315
/// - V11
@@ -44,4 +46,4 @@
4446
/// global operations.
4547
/// - V1
4648
/// - TBA
47-
pub const LATEST_GAS_FEATURE_VERSION: u64 = 12;
49+
pub const LATEST_GAS_FEATURE_VERSION: u64 = 13;

aptos-move/aptos-release-builder/src/components/feature_flags.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ pub enum FeatureFlag {
9393
VMBinaryFormatV7,
9494
ResourceGroupsChargeAsSizeSum,
9595
CommissionChangeDelegationPool,
96+
BN254Structures,
9697
}
9798

9899
fn generate_features_blob(writer: &CodeWriter, data: &[u64]) {
@@ -244,6 +245,7 @@ impl From<FeatureFlag> for AptosFeatureFlag {
244245
FeatureFlag::CommissionChangeDelegationPool => {
245246
AptosFeatureFlag::COMMISSION_CHANGE_DELEGATION_POOL
246247
},
248+
FeatureFlag::BN254Structures => AptosFeatureFlag::BN254_STRUCTURES,
247249
}
248250
}
249251
}
@@ -318,6 +320,7 @@ impl From<AptosFeatureFlag> for FeatureFlag {
318320
AptosFeatureFlag::COMMISSION_CHANGE_DELEGATION_POOL => {
319321
FeatureFlag::CommissionChangeDelegationPool
320322
},
323+
AptosFeatureFlag::BN254_STRUCTURES => FeatureFlag::BN254Structures,
321324
}
322325
}
323326
}

aptos-move/e2e-move-tests/src/tests/per_category_gas_limits.data/io_limit_reached_by_new_bytes.exp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Ok(
88
StateKey {
99
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>)" },
1010
hash: OnceCell(Uninit),
11-
}: Modification(a4aac0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
11+
}: Modification(78a9c0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
1212
StateKey {
1313
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::account::Account)" },
1414
hash: OnceCell(Uninit),
@@ -32,7 +32,7 @@ Ok(
3232
StateKey {
3333
inner: TableItem { handle: 1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca, key: 0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935 },
3434
hash: OnceCell(Uninit),
35-
}: Modification(a30bf005000000000100000000000000),
35+
}: Modification(770af005000000000100000000000000),
3636
},
3737
},
3838
),
@@ -57,15 +57,15 @@ Ok(
5757
StateKey {
5858
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>)" },
5959
hash: OnceCell(Uninit),
60-
}: Modification(6c79c0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
60+
}: Modification(4078c0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
6161
StateKey {
6262
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::account::Account)" },
6363
hash: OnceCell(Uninit),
6464
}: Modification(201304972f9242cbc3528a1e286323471ab891baa37e0053b85651693a79854a000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000beef0000),
6565
StateKey {
6666
inner: TableItem { handle: 1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca, key: 0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935 },
6767
hash: OnceCell(Uninit),
68-
}: Modification(6bdaef05000000000100000000000000),
68+
}: Modification(3fd9ef05000000000100000000000000),
6969
},
7070
},
7171
),
@@ -94,15 +94,15 @@ Ok(
9494
StateKey {
9595
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>)" },
9696
hash: OnceCell(Uninit),
97-
}: Modification(1c4cc0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
97+
}: Modification(f04ac0a47e8d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef),
9898
StateKey {
9999
inner: AccessPath { address: 0xbeef, path: "Resource(0x1::account::Account)" },
100100
hash: OnceCell(Uninit),
101101
}: Modification(201304972f9242cbc3528a1e286323471ab891baa37e0053b85651693a79854a000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000beef00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000beef0000),
102102
StateKey {
103103
inner: TableItem { handle: 1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca, key: 0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935 },
104104
hash: OnceCell(Uninit),
105-
}: Modification(1badef05000000000100000000000000),
105+
}: Modification(efabef05000000000100000000000000),
106106
},
107107
},
108108
),

0 commit comments

Comments
 (0)