diff --git a/.github/workflows/build-go.yml b/.github/workflows/build-go.yml index 420a54847..791d99641 100644 --- a/.github/workflows/build-go.yml +++ b/.github/workflows/build-go.yml @@ -30,6 +30,8 @@ jobs: run: make build_merkle_tree_linux - name: Build Mina bindings run: make build_mina_linux + - name: Build Mina Account bindings + run: make build_mina_account_linux - name: Build operator run: go build operator/cmd/main.go - name: Build aggregator diff --git a/Makefile b/Makefile index e7b31a3e6..cc4c76767 100644 --- a/Makefile +++ b/Makefile @@ -644,6 +644,27 @@ test_mina_go_bindings_linux: build_mina_linux @echo "Testing Mina Go bindings..." go test ./operator/mina/... -v +__MINA_ACCOUNT_FFI__: ## +build_mina_account_macos: + @cd operator/mina_account/lib && cargo build --release + @cp operator/mina_account/lib/target/release/libmina_account_verifier_ffi.dylib operator/mina_account/lib/libmina_account_verifier.dylib + +build_mina_account_linux: + @cd operator/mina_account/lib && cargo build --release + @cp operator/mina_account/lib/target/release/libmina_account_verifier_ffi.so operator/mina_account/lib/libmina_account_verifier.so + +test_mina_account_rust_ffi: + @echo "Testing Mina Account Rust FFI source code..." + @cd operator/mina_account/lib && cargo t --release + +test_mina_account_go_bindings_macos: build_mina_account_macos + @echo "Testing Mina Account Go bindings..." + go test ./operator/mina_account/... -v + +test_mina_account_go_bindings_linux: build_mina_linux + @echo "Testing Mina Account Go bindings..." + go test ./operator/mina_account/... -v + __BUILD_ALL_FFI__: build_all_ffi: ## Build all FFIs @@ -657,6 +678,8 @@ build_all_ffi_macos: ## Build all FFIs for macOS @$(MAKE) build_merkle_tree_macos @$(MAKE) build_halo2_ipa_macos @$(MAKE) build_halo2_kzg_macos + @$(MAKE) build_mina_macos + @$(MAKE) build_mina_account_macos @echo "All macOS FFIs built successfully." build_all_ffi_linux: ## Build all FFIs for Linux @@ -666,6 +689,8 @@ build_all_ffi_linux: ## Build all FFIs for Linux @$(MAKE) build_merkle_tree_linux @$(MAKE) build_halo2_ipa_linux @$(MAKE) build_halo2_kzg_linux + @$(MAKE) build_mina_linux + @$(MAKE) build_mina_account_linux @echo "All Linux FFIs built successfully." diff --git a/aggregator/cmd/main.go b/aggregator/cmd/main.go index 608d93e44..abeead972 100644 --- a/aggregator/cmd/main.go +++ b/aggregator/cmd/main.go @@ -7,7 +7,9 @@ import ( "os" "github.com/urfave/cli/v2" - "github.com/yetanotherco/aligned_layer/aggregator/internal/pkg" + // TODO(xqft): used lambdaclass below as a temporary solution, can't + // import the internal package when in presence of a replace directive. + "github.com/lambdaclass/aligned_layer/aggregator/internal/pkg" "github.com/yetanotherco/aligned_layer/core/config" ) diff --git a/batcher/aligned-batcher/src/mina/mod.rs b/batcher/aligned-batcher/src/mina/mod.rs index d9329a9f8..acae21d83 100644 --- a/batcher/aligned-batcher/src/mina/mod.rs +++ b/batcher/aligned-batcher/src/mina/mod.rs @@ -60,7 +60,8 @@ pub fn check_state(pub_inputs: &[u8], offset: &mut usize) -> Result<(), String> pub fn check_pub_inputs(pub_inputs: &[u8]) -> Result<(), String> { let mut offset = 0; - check_hash(pub_inputs, &mut offset)?; // candidate hash + check_hash(pub_inputs, &mut offset)?; // candidate ledger hash + check_hash(pub_inputs, &mut offset)?; // candidate state hash check_hash(pub_inputs, &mut offset)?; // tip hash check_state(pub_inputs, &mut offset)?; // candidate state diff --git a/batcher/aligned-batcher/src/zk_utils/mod.rs b/batcher/aligned-batcher/src/zk_utils/mod.rs index f065d5053..ddd32a337 100644 --- a/batcher/aligned-batcher/src/zk_utils/mod.rs +++ b/batcher/aligned-batcher/src/zk_utils/mod.rs @@ -98,5 +98,14 @@ fn verify_internal(verification_data: &VerificationData) -> bool { // verifier. These checks are fast and if they aren't successful then the Pickles proof // isn't valid. } + ProvingSystemId::MinaAccount => { + verification_data + .pub_input + .as_ref() + .expect("Public input is required"); + true + // TODO(xqft): add basic integrity checks (e.g. length of merkle proof being multiple of 32 + // bytes, etc) + } } } diff --git a/batcher/aligned-sdk/src/core/types.rs b/batcher/aligned-sdk/src/core/types.rs index bec9265f4..9fff6c420 100644 --- a/batcher/aligned-sdk/src/core/types.rs +++ b/batcher/aligned-sdk/src/core/types.rs @@ -20,6 +20,7 @@ pub enum ProvingSystemId { Halo2IPA, Risc0, Mina, + MinaAccount, } #[derive(Debug, Serialize, Deserialize, Clone)] diff --git a/batcher/aligned/src/main.rs b/batcher/aligned/src/main.rs index 6c5233e1b..66446f0a3 100644 --- a/batcher/aligned/src/main.rs +++ b/batcher/aligned/src/main.rs @@ -228,6 +228,8 @@ pub enum ProvingSystemArg { Risc0, #[clap(name = "Mina")] Mina, + #[clap(name = "MinaAccount")] + MinaAccount, } const ANVIL_PRIVATE_KEY: &str = "2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6"; // Anvil address 9 @@ -243,6 +245,7 @@ impl From for ProvingSystemId { ProvingSystemArg::Halo2IPA => ProvingSystemId::Halo2IPA, ProvingSystemArg::Risc0 => ProvingSystemId::Risc0, ProvingSystemArg::Mina => ProvingSystemId::Mina, + ProvingSystemArg::MinaAccount => ProvingSystemId::MinaAccount, } } } @@ -577,6 +580,12 @@ fn verification_data_from_args(args: SubmitArgs) -> Result { + pub_input = Some(read_file_option( + "--public_input", + args.pub_input_file_name, + )?) + } } let proof_generator_addr = Address::from_str(&args.proof_generator_addr).map_err(|e| { diff --git a/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.proof b/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.proof new file mode 100644 index 000000000..7b38edac7 Binary files /dev/null and b/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.proof differ diff --git a/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.pub b/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.pub new file mode 100644 index 000000000..90eb3678b --- /dev/null +++ b/batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.pub @@ -0,0 +1 @@ +F6:|+!y(޻[!nV6z[25)l˄nP-:]r4b'IuǬ9#.hx3b@lv矖@ \ No newline at end of file diff --git a/batcher/aligned/test_files/mina/protocol_state.proof b/batcher/aligned/test_files/mina/protocol_state.proof index b6cb9a77e..c8ad39179 100644 --- a/batcher/aligned/test_files/mina/protocol_state.proof +++ b/batcher/aligned/test_files/mina/protocol_state.proof @@ -1 +1 @@ -_Lv7VSktF9BO_CBCP0MdA43bAPzWnmS_blpEs_wn-Po60UA6LAD8OnQM1iQrN1v8JCJKxPop0CIA_DxsfKp1tzSL_FqAvS4JuRZuAAAAAAAAAAAAAPzDAMf31ltx0fylD3Ya_pCJ3QD88PGgK6udrf384tCnM7e-QUcA_G4G13VT-oR-_Ogdi609yUCzAPxw__6U-pfTJ_x6hf1Qnz38DQD83SZkbZJS8dX8rG9VU4SPq4oA_O-Hc7EGIBXY_NqlvsSvClcLAPxDdvMnN5aEO_ymd6MLZtErDAD88zxqWOpBX078zle6PirPZCEA_DO6I51iogYg_Fvbo4ltj-J2APzUFgmtlpTCtPxbWO0Yo3h6aAD8HYRxK3HR_Vn8WBYWKPOGrN8A_DpfDdDuHRBI_M1Ol-TDaaGlAPwqKVxpIaKuV_zlSVj4aXIfFQD80sGCFJ49ktH80BxelEp_3Q8A_KBpzluzyyg0_D5SPHaFXsS7APxwt6GYnR2N1fym-h63yJL4CQAAAhD84jJu1t8XKbj8OICh9yiQi2v8WCW9teJc0Tf8D15KLMD6Dy4AKRbHlpQ7O73LREN2huMFADSCQDeTIALFd4IYGpKuERLgvTIwyAlEAUJzp-J-1SNqHbPGIOZ1tAPNW9BctdwCM_zZo1KyR3kocfyYFOq7gbQsDAD8yNHc8kYpyrD8LZ49JznqG6MA_JsaTbZZ5rUB_MTQ_LfkNQf-APw_TeCnTyMr-_zH3rhWI4jl-wD88mFfezrkZAb82B9xqZvajuoA_BlH6iHuPH4x_HXR84M4ZxLYAPwp9N-gmNAPE_zhZRlaafWVAgD88JEOcyBy8iP8nSakFkUknIUA_MbbGY4XkAt5_JMjAf6sXZoSAPyXU9T1HOGWyfwdiJyp0CPQBgD80KsDLs5Nss38JDMyg0tKKvQA_L7EmsuRvfmW_F7Z2eDXdRSuAPzvwRoQNnMziPwXoYxCCtC4lwD86VOPWEyWSVX8OkOTEjL5Ft0A_IaEGxFUraPG_FDkL1RYwQLIAAD8GUqfk6dh6Xr8hSkamAc6gWYA_A2DHWLZ6aIj_Ld4s89c4crNAPz01bT7MjdBbPzbhdqH6e9HxgD8rxNi1ZHeMn_8Lr4hGfbyNhwA_LtvQeeC10Yp_LbxOo5gDLkwAPwM6J4_SR0k0vzly14qxRh-mwD87pj9WDsGULr8PxJH0GaWgi4A_HLnMN8nSpN1_BFvGC3Q2QOHAPzYLlE2S6yH2vzy85wweCw2YQD8fUSlMZAyQkX879UKi789-rwA_FcDTue2wbsf_IUdUfBA_7bvAPwMsxwv3exOk_w-GJ4DTDkjhAD8f-Rm0E1ovKL8kg3PcLNcdn8A_COyW9W4n6zj_IitTYrjwqhvAPw7CoOKGCjsZvwkCjY1XuqJ8wAAAAACRVnE1wSysWD_Hfke11e0pQLt5NH87eWLRe56CD2pfBZ23TvtOisOCH4znhpOUWymFXxAY86puge5ddoXT8BrBmbiHB5N3o40-MOJBgHcZPPlNsbj6YNkT3WeSr-UqsAfW3UUJABgYvH7Jz68x0Ol4S4iZ1z09WRW40YAbpVwNCIC_P3PxUFLiQrV_NY18-QWKuARAPzIgI8Fr3p7NvykIDhFvvg4fgD84VrcpXXlKcT8UlDgAkb7yXIA_KRkuyDt0gWg_GA7dSrnxf_UAPzeOkm_nAZQ9PxVrADgTKGxNwD8n5qPl_s4e9H8mCIw78GAUJgA_JBc08QOWWse_HyvvksBN3TFAPwJ_P6Tufdj8_xj_Y9W1CLHdgD80U3jlfG740_87480gyGtMWMA_OHDVPqn2GPL_K-ty1E7lPDqAPzZDg7nFwcjJPwPpSCXVweMogD8NDRtMvLVCe_8tb_oFUPro8gA_Gcgg-34XRhZ_Fos9eYsUxrGAPwl-C9VgW0XzfyM0bmASWQzLwD8Q-5s3nz2oYf8wEaqB77BliUA_DS7ZMW05EvZ_P-bJjaT1NdDAAD8uSqnVrRwc638_J7x1SP5TzYA_AB8L45iHIdZ_IfMJqJz9secAPyv8raeHYJUI_x-9X320Wu51QD89oaQoND3exT8aCokQM5iXmIA_A6tVjJjG8av_PvhH6EQcoAJAPyRQazKvh5Y-fymybc-mdUeVwD8vcNkzaNQTqr8aMX-wQrnFNgA_G3eXoLfrB2y_KUH28UXogj-APx_qubp1g9Ogvwsf7lOmDr2_AD8ygQbcSuIMcP8KSautsesOZEA_O9Rgf1Hjw_c_IeVO8RDeqkAAPy_MobRHtg4YPyrBaqicLyz-QD8Wkev5eDSdZT89tLDrgKny9EA_AR8Lfn2D3i-_FTi-zKRWD3hAPwTdTG4ErdwxvwIPkiaM8x1FgD80bjKsaKwwUj8zrFxwOMEZhsAAFFOATuc3vUR799l_98Edgj67nGGn_7Tb7ZYFtq-0IEN1pkxAb7rRhfpjNC4wzwXMJnNgFr_2wsZqaybMBF6_yABssJzRGuSIVbN3S33rL2UCbBTZ1HGCmX6ahpTPfRWFjsBxr_01tEsQ2orjFl5-7lpmf4D1qt8UbKT9C6NXt_DXRwBeWRraiMIy8hwor8_KzvSzjUgpNm3oJswdqwegK3ADj8BHO5AjwFZwC9_wZ_Msh4vkwGmSN9MXaXlEHHXC5_kMjIBnHdjoMkhNniMMw4-sk9yl-BAMhBENbEo34icNBzthBsBKhb0A8bQNbrst5tmOlf4ClXsmilMWcINvvnzQCG8By0B5WMOqs62AodhiEAcGkXVz7E9P0oIY6beT21WLSoW5CkBLlgeKfyhFLrTZFtCXHqTCiCa165Ir92qmsAH7N6qOQEBdZ2glNuD2aOKl30WjLvywe6AXxAsS_NAGhXwo5AzvSoBJDoErEpVb0fTSgVy4b04TwzHQvYxGCEbPT1GU3cqgQMBeY7UPlPsosxjDqxMY_8HOTlgtwvkydy4z6skhQq2tScBvwWikvL_IA184fpmFsCgK9WoZyfZWkLuc0FcqAR6AywBWlpSxbqZbwopOTSZ18ka4RxC2k57asvNH68ruWiTTTYBazSIh-2gpCv_uC3guUhyQ0zXL8RmkatDma4UXxrirBgBQ1ar7FBhim7pW3EpZnhMKTPLhkdRx-ygdcAWTFlQgBEBAhmfNpkmiDjT-rUo2I-hgtZAD_smwZu9-tTMttn1ziABxz2YHEHQKTlU9T_yZ6gtwrT0_5UIBKPMMwEh00fGZB8BQBtF4rdMlAUnoygkdQnzzGHFm57NDUvnNiZHSlbr4RABdVllluv0xPtoTVTFFtA3IcSGoZ86SMzH-E-CyDsZHDwB8eMeTUEJhBfZwGpJr-bL8ZJkaIGclVRg7I93gM-FMRQBXZwkleGW3NU1JW819oeKtxSE_E4Q3NPCevVR4MB6DQoB_fKOjM3bFkxRJMKDpbGtQ6DBU8QizTZbTCZgbyuVzgwB23zGW3N-04JkyDmDttm2Or-m4wkNTNuohxej3phP_RoBaE-a8tWVdTVu5VbfKaG5Q49HVjercowUewpnzAbs_TwB2g4B1oL2Dy5j7Ye7THHEQAANA-XwWG64s4hYPq30UiwBIweI7Cjj3WGJC8HCXn0u1aH84fNBAzZ0_jj2Vrp-gT8Bt-YupgLGPP2txtZ0HE1a9_jVfbHEo7dn_LJ0MvDGXB8B35XLScLwuNWCeb4vlj1_ZxCT8Dygt_wvs9PpQBMvVD8BBNivUEup1vql5Utd-3ZxN3wdmV7v_9H8639cLsPH-AIBUCQIdq8OdoXtA_i-_r7IgYfldEb9KC4Gg2YgAvoEgTgAASUcuPgjs_9IJP9lyP3xdGole21tb_Uo8V-SODhTUBAbAVcLeaQF_dtd1p1_GAawaeXTYhqd6E4mLCZuSIzUoxwQActnPWSKyuAgzhSpIRizMgJQ6KC8X7ePTCukH9MaGgE2AYAu39eQDEhCRgtbg3JhE19XhXLZBz6H7o1gnImm9FggAXnV5JmaP_XY0zs1WcWUsOFU7IgSjpgPAeZZZMB2f88aARA4pfQfpWUVj2YvON-5K5SUnek4YUY9ZjmkwK7jPvwdAYgA4XNCl8MILlsMEFpmVdfUiQpZWZlA37qhsh_nEco-AThGZTeLa2S_3gZ11IYK71hHe_yj9mt6sJWOrqbPND4_AaAJ9Bu26pZw_J3vyxh2AvAiKqiORoGYMPx2J1e76Ag5AUWLlKE4Il0sT-TMrwVwqz7L2HCWYE4ZCYmtLOds3NgxATiwy3ujx7BiN22HaoMptA_fdDTKzfOLPGd6lbOzrmUQAf0P3e2UwNT6Xx1046hhdYHjF62JRjzIvPv0ShRwz-w6AUEapLZ8vsztyDKU7-tIb9L4aXaXDJOP2DcUpnfNsuAWAWcdV63X-tF5d9hs394hBw66eEQLxtnDBrVJJW2IUkUUAVe_0JCUFFX6DKmll-Lz3G4fWiy-2rI0celeXPxUil4LAS2kjxLCHBNZRCpMo9ilkgiCrx-8KiFLiMQUr3g-FrwpAUXse8dD1hTaja5vkrHm-ztaPVXyVqRmqtVIpxgWdtwnARMsKovZhD4yH2KK3-c7QNQmTExJvsIRI8ZyUJKJ0fkDAfERg9JMMfQFGTXbeRgVkeMetMDK6amEBW56cq2n4hchAbTrVmoeJqsDcGUb7-neNhr7Ly7W1Iz80UP-mg6Bou0MAXsDjGcN9h14yLw60ekYZY1DVW-dIcAVi57m3H9JNxUfAcYvMEXc4esVd5BKcumd42KElwJsnEsgjdkqycFzDgMRAdApmjXvDn5Km04aKftmF6m7rIoD2n5PzUHr6SHUpgwSASerR3nSvwYlUBy0KlBYHWNFZOiTAo5dVkI3z2yyL-sdAfOQHxMTtoNxfP9LB3236s5eG8X1KvD_fthvAV1Ht3ECAeTzd-I4_Iy7S51ApC2RW2NeNtlJmJ7L_dO429Jz85wPAROD50odO0Rw0NpHL9dkzxMy-WU4ISaxtbSP8CSrNRUJAUQy1wsqML2GTNMqW0yJ112QedoxHgXShqQpUKyy2egQASt6ZqCh57EqoRzZheyT6cH9PShnac5LWRSMVsZD38AQAY0z81e7xNhc3RNrLL4QTFhXQ8sSFMyGZXeNvDyumCUjAAGk1nmC_ZaqHmhLYkxP6qIDA3PuDpIu23PrmtdCVRiEEAHe0LPZeFufpTQNZiFqtQEUVNLyzkJXa_SiJpB9hb7-MQHaxVAvF1ABda3M7kE6R--76jHvEjcK6DCY-PAU0p4NCAFvp-PmhenTcvdh9GH0-RXSvCWbH8yPZW6Erzu7hUqZHgFY8ImQbAcgQYkOOUTNpt1nD1YUyUXqpICBXxAPBNqjKAHIguxEAp3h3QC4i0azjFL7ap-W4B57h_8X3f1biqTZGgFT_AP2WKkWw6z0vaolZ4cWlZ6auGRukpD93_mhmOxQHQEKXC7VOlNxuAAzhwixfzx45YF8cvh8GE3lxpfHjckKEgEnb-U0ralqHEXtD-MWhnjb1g8UWb9z5zv8SdNN01NnKQF1OWm2Vruc7NujJETlYYoaJLKi_xrYNK0XDZEktjyOHwFTtu7bG9EQGPjqehLy3Zc6HugW9VkSwi-qG-GYQTw6MgF6WJ9YvhBpwdJrSVPp2l1irgmXSVg-QRCeaIPlqHP_AQFumeDf2l9T5BvzeYXj4FQwWFTH5Xe9spnConWIF9DdAgGTLMPxOnOo1ygtnH-C3BC_Ixnsrmfp3pnGse6SJ0jqHwAB6YQAl3iajj-YeUjnSkPz1ex7kH7wMcGI1l8oYtyrSgIBPRwj4YDhjhfAGgDCI0P8O9tSwI_350BVbwb8plUytw8BbCgVjVOWC3miO6KmKC8K1kxxdkzQ2patlIJy9aRRayQBMYshaN-fIt7FyGHNrZBdCa5BbIP9RJ4g_V2_PE4xeS0B61p6h0uSl7-T3rZnFJIR0qt4G3_lGXSAIhFnDPhneREBRYTlGxyX24EWUNO0cENfXTGD_gQ6jTu6DZ1_AAmCiwIBSiPotKxo-XXp_9dGi1aEDdVWSLBD69JL_ajIi4q-njsBU4kefyP_iQZZqtrYQUo-JpnAen6dfs12maDVYteWvQIBE4dRZLXtOamolniM0v4QgejK26Ak6aPxu3eoQooZLSMBQc8UulO9ussbT5Gxxm4Y3chN_ptVdHJN88CTDkRK7z0BO24bU9nY88zyk6Zkrrin7uYEBx68Ettp_MPyjbDTjwIBRjV1a_1vX4OS8QgcmY9Ah34sIkiYBOdtX71V0lOh1j0AAAAAAAAAAAAAAAAAAAAAAAAAAHed12TlGYwTzxrguuNAAJzFZLhpONLhNB2Gx7Pb0CsSKeAjmoqVRQEZSLD78WeVXUu0ITaCIUuMMVvAl3R0_w6GDv-eqw7mvFr7iQR6i1lsLIb1bjydYAq_ixBAUONeKYIkd02pujEfFWjs4My-ldzQ4HXeIGxh731juURIIkU4Z7JsCFTi04BcWxczW5nXQekc3I392QOIt6q6qyO0oy3wCy7YYjhFF3vl0BtpeU5KnZ3EMkCMhQwzQ7OZG9dQAEiOkxTgSS7-V0c2-G_886RRLCr3VsqtWLsDlPL_R1gmOZI80hhn73LCsEme1F0op-izG1T9GhA6L6weJNYG2DoFbJiXnmzxSL0JOvQ1hnUic2y7-8bsARoHi2-lrBwVGPoDApTc6RQK1zg9fS-WZ6aC3EVgdfEm_5eP7_RMaxUzZkwWoumc2TePhplIsWI-CWgb_acgtIZ-xlZM3FZ9Wgqc6PViX4T5xXtb9JcQxUooC5v9sjCb6aQg8BhzVGWDElwL2ZDW1lD5zC-5D_bcHViMKMXN2JI03kMpONDo978__01i7kazQTLbJgecfy3qlQFmLnTe5cqXLa_10kEScxixIdEejDcjrOHjoAPD8pHqr2KTUkD_g8V6r0RisQ91DYYGlPOvapnEecSoeDAhhlyJtKD_VTQevbUGBC-JbWcdA-et0qaTTsdT-ANRKfzv9GiQhDSz05HP9zYYxT7rFjSGrhbIU9vCpy8JAU-wNTozoZVkN784sRcj-TXPnYlHOCQC4GJD2r_li4OD13znJBjpdki__39yRgDnTwqIPa0kIX_RFGZWebMkZqUbdZoNBE--YtY9q2NrcnpnEQTiSTqxYhNKMnu3lPmF4UxIfesQlV0KjJYoK7cnz3WYNYvvG3ZkeVJ5qdrhXixOyupudSvA5hkZtG3_KajJQZn-UAEgVDkMzRskitCHTeKeTwP3Hjyp07z6C1j7AL1lam9otQxlm-mlY-zBU6md5xv6zSZzmsw8We97sknRZPd9QZX1Mjz5ay2MbQWO6KRcm2elpIvi_V54B6RStVh_V1ClnyEJ0n2pTgu2ibzH9WAq7dcK8HjZprRXN0LNq5vXxfJHAjtAtj50AIaM4FPUoZFUKXHHeIHmeYA4bJj8YX4NtE_VMgY9EcTJJF5JNv2H3FgvAuj-xiyrjq8-Zw1lgoDEBtUKJ_p2-QRPSVfwqQtH6TQoWessOuPiTzH2kqN9yTLTFj5ErKm_RaJMobOpuY8MumC8Ax09BpFG0tJky4irSQg_BWMfgyKzmqR8VmW8yNxyed9Hr2HUi_B6biiDMnf8kWkQABvGpDRBBoHyed5nIuEyfTPPWNPfeSwRGI4qqqkY3B0T8aV2Pi9DFplSFw5MmzylZfpkg-2gh-PSRA8uEcTXmBsTf83yu6plViSSalm6JeXPDRwwgvCaIx86dYueXgbhP1NxJc9FxwntEWEW5h1hHlFSKFlmxBUkfrBpr3pm6xczYP6gt-z7z4wBAopSplv_QL6BvZZJrdKCOlWHkOXFLRVs7okh9el30fqrac2gWyvyWOm-vFaLVJYE9oi4f58bJgpBdfIkANIz-TlKGFv_OFnbuv1Z4g-X_sGiHC_axGMnLSFzBLP6IYY3xPrsPnm_KIvlwLIl-KpVn0SKm-LX9SaX2erLUIBE7MHMq5ljNrvAy_PMr0P9pL-CNAXBK4aOJ_ZbVt5KIOj6yU_awcK7c-DEeFZ6HAaA778oRCRQTjEiT8UHJ6-L4xATulbzNQ_Zw-vbNS2Cj78YSOB0m39vGxFdZP-b3uOQtChm65cFj5huZVBTwy4JRTrKNEHKROsbNFtac0_QPYQgV1a-Qr4NfNPLk_ITm0EgwMVycAf350Ynp_AyWOjhTHVUEuSBuXc9DGmqj46zZjcszUWHiqtrSAgbHcCvnmfu0vABQuk_RcbMdcQieSPwoL2sai-8lIyaKBSJ1HacLGt6qJSYGIA9bgMFj-hWTf4JpKrzS_rTNX0vAAnxFq9w_sFlkriC6ETdbW4BEoH0QWt7VavmUB9Djd8YDYJrOgGL6KyNpSSfde6DQAb7Spp4fI_lvS0EZxEqBzwTMhTN3Oa2GYR2Qur6Z2OpMN391GoyTZN5flaFIk6wBl9rTtNw08QVZLmb0T-H4WakwUxIxNYl7j_2j5EuZR0MGN55o872fA8XwUcAyrTkO4DKvuTrXe70nbu8D1b3XzpfFkko3fPku_8QtAU093dKLyfwsBQcWl6MoniggXpEMcSzy3_W9kPN4ybDklZncq0dOyACDMwzY6_EoSWBCMQbZPE0jLGOgJxdjvpjWH5GWj7KpQLxN-QByZ6LVLJBWCqwtbxWeZT0hRTH3AKAjPJCdKtXf5LFjMnq_22quIXTIjdqgD8NJbbhHFbKrupAeGd-8TTh6wCPKyWzqtDhUP4EqT8SFUFfh7SSlV9HNvIyz-nW0NeeBkPn9s6hJAHjiS6tYImM6fc8WVD3HNnG32vEy8oDuA-MMfSpTh2aFjajHCC17-3OLuyLaiLGp0N6Eguxa2tq6urcysz5T2XUYuIzdNnIEItcHHvOp-Wri-wA8Ugcg0jHTF_b6BpxapwMIj_2mbutu1TyGZC4dJcepaUlfBvZMC3TEXod40g-hmDuEdshnpUOz4JLR6ayMs7USWRsDtGs-HvrxVQhsZZGma4Oz01dqQb6ivkO6NTJlaqdlR05imuIBurY85RtryHTBSxqMZ4UUniRfky7fgWEwj7zJP7UbzJmQTMRgwLl-spqMqpVf_Fs0EmBiu2ZLI7va7u_d9ATPwVgde8NyonPwmYc08Yb66QCUZk4ixXlyEM7VQkedhTtQGXLjsIFIidvFgIPpzQdgQakelPREthJJNL7MmmlS1zDyPxCJzW4aA5aEi4jECPsrmoFjzI7n-2fvZxlPoMM4ZxGkbEWQGGyZzU0GPXiW4teVHy7l6Si0AkFJFvZsSN3LEmDQfQYLeqo5wD7DBwwSVE8_meeWZQZxeog8iRQLGH866CE9Krwk6cNPBNcJI_vWfwgN_4TLdpwpiQjHrivP5kzbVjOBMuPD749UxmRkpc7gvV_9d9VwpisYnv39DdAGkJ-Y8TPmT_bniVJEpOAjtUR-Yc8Z408orQn18Hc6fsYKyVOxw1w4rZjNno6LQ1dQ3_MHwVnI9hh6Y3B-YnZRy8OZDCTstz_bB88a5-ZC20BBbdT_bWjGcR9CFbKvqUThoEjOSbduka5Fge-f8BrFyFXASIE2RjK8Jk3tGHlHjrKZUAMlcfPa766HwB6C3RIgwtEBWRzhSgFbb0rR7ccQgSBNIxHdDYG5vrmJ9dnWrLnzkT-hAlzdSO4XSyk7wjoaKU6eF4s-ReBRSUaCgiNEBNtBHSuNPfZOXlwD4Qaum9TPmE2NVo-4wE95hh8iJdFxfozhIM_DF9aGI6aphEbCxjCl2Ih7_-gS3CSIiqGzr0Z8HYfahROSNkhM3noCvn6RUMzkMlomu60k3kono6f_UwJCkUvSuiUiWy4zs8X8l2XUEnl61mw8_K1VDFk_wz_2_e2TiFI0S0k6Ui3y9CxzJM-8f-2FLwmSlXLMl-yrhEkx9dMldH1Os-mIEs3VEAyVZyZ3BrMSrS-Gzsx0Pc05eJPXR-RNId0-cvvuezBUv_M_6hKePpfgvi_PCS-8wXaG5Bon2-wfYfzXJCX2qCuyHFKWowJ-c_UKZ6hI-O2KHTAJOSG-bO6PFPwlhBxUmDrouKywGgRuMZodM0qt538hEJLWQ8QTXukrNZ2r1oR2r8aXbiinUUPozT9KDt_jN1IxhYjeBMcrGscU4pN1AVQIt1N6n5aHP6GP2w2JH1btTQgZmK99J3MM-OdVxg3UwDElj38-y1Oc-t858EZ7KHvjRP-I_k9TvYPNCNNhEHuBMKXkLde0joYJrRbeg7zx3Kncqsd3i7OlNFtFKlkGAR3f7TnudKNz3HEawHMEwISzN09stGtOPZj-mUeX6--BWV7mxhukcqczU-BWQ4WMRVauqLxOTpMNkG2IKkZwfBFIB8ZbwDTHOZ0RKK2vR8straCxrvdX83XxyzSwDXRK9gkOciXyXqpdA_IqvyeP54zJi-dNTyVDCAiX2Z2SwuGArmA9PNbAEJAKoC_khU3ubP4XHkHqrRbDibwBKCIdDsXOBlNgBik2Npd5rO7zwGUMLyEtvyJ6Aj2-rncu4-Nn0o9yDi-VsLClnYvQNJxOiPMud4ipaGMkr89XFIW4t8tePEmK0dTyaPKN35y56UK9gkTeGIe_LcaMrFO5yKcD74xESvtvQ8N0CCksWij8AY5b2AqyZGOqM5Rg1mW2SGZWGkesIhlBiVRu_xIBX8HH2xJJgV45e6gXOk9emStPl4qYJv4XcEbWdo336kErJkoHqr8SgBg37DUTVR7ALQ06SRNjNJekr6z564GjY1Baj5CKFvs5eJcBScWxQ_nA12JDsuw_xvI_IL--1cpweYwDK_TiXu6sq1dVxfPPRsrHYXHy13Y0VjAQZCjMbNnmwU3BFDfSspl9OA1PVJtZ_3aB8tp0cbqEga-qrsMn2uHviMAgWc7uckIrg4CnhWKb5zwcFEy4Yw3l3Cmj8R21V7pvyFV3E67XuLsFwqqbhz6uKFa2_Ndo3ShvnseX5OGJOc9EbKV6Iar0aMTornNWoQYcmjqotQNk19a9p93l8au6cw38qYKRzMp8tmeAFe8vmofSPt3gwscWDjWswmbuQUOdSHYz-pnyAMl1SZzy5Zd_HgLO0e1ntG5UILOZJTZi9b5DruqNOyfbTJdgVKH8Syto0kSWLU2YmrDeAgsXsznvmExA09zPthYrmQCWuOKb6vwA3j9Gch3Q2FA4rfaHGlGlCQZdDN0XNQV-keVa9Wt97rYq-dYovFBzIcOU6vq_SJKAteA3tUkstrRz_IEYyTqtPEAJt-ucrTYzu0nma4VoQ4-8otwNxlmdfYE6lPDUohJQsY6NNucCI63GKJT8A2rFDbzf78YsjRO6vI5uIXe-DEyv9-hBUrwGjT6YsNrmt4MCgL2MK3JP6Y-U1SbYTPL9wjiHsk8jBEZoHHNRNvklMY22KXPR3bCrmagyLQyfT6ah81Ehxrv2cB43_gB3G72SDwwhKqqgMVtrT_DlKG8GuoH9bwvvuYmqESQfQ9WDZQMBQDJsTRo84hkv-CxWrTBbZ2PdrruKxhfzkZxj-ougDHLHVFrFFK_ezKXmtKrtCBovKhCvCt8zA52Xffd1DHAts8yc4QI7jwP90FOC8Zd70aCkrNmzlyYzZlYtYkjRa2N0DQBnC_zJsmFJ4vtLTpoI771h4irtW75Xw93ZTl1XAynFcFfb6NWD2Zz8E163TJFibI-aIdtvT0A1_9pENFFOxY_o11wSl_FHuoGhdGW-4hAJoCvuBIMRX3zdQab6n6-QAD9ANuKhlVqUj35Zej3C95OxGI826OsfRA5Rrv3Ri8zAfPdLfCLegFD21mqw0ukpJsKw-TRtSg2jWASMSeXrXonGErjkCj29OzuHBf7Wgb5_w4kEoiwvKzGc8YTDcw1qCT2kBnKndwaCG203XWjIUu4QZD_CDXds-vTDhxUnpfIKHuJDE92l240_5LEBh7jJIACvYr0NYCYhx-fpUcMbtcj9xPA0-PIlzgPox0fOCpE_nEERpIaNccdY9XsnXRpARMepFeLjrfXQO1IIBPEyb7Htchrab0R0QOk0-U4Hk8fFA9NEfXUBVWNvn6YAKpFHHQkPRK_xCukDGizB7rVqXirMlTATJ553OuvnrPHUFR1DC-Lsa95MwnQn3zr2xeMAl4lDV_NK0_V6dA6KUyKLS8D_LgF_kaREff4FzydNewVQy43YRVIsMqhN34hZdhzvWD9JH25_1zN4DhC7ltxZgaMLLryct-9KcZ7DjYMdfKr0O3ngt1MjY6vTZJzIq04vjAASA5rTSBrce1Ho9aDKXKsrVHtqnY8EiU529Ls6xJU-x13PBW5NOQPpdlxscqFpWG_U4dw5mT0b3WLEaV1M95LES01XP2lNET-ipNo4X0zqNDGOWXyPjGdu1zw-JL9DPEPlcPPSTsAeVJQ97eFm3Q_2eBdmmxEhTEC7HzInHnIBhBadeX2R97qSapgwKTR28JkmgahLoushxNgjjvvLT_pHwN0djs4DSB0HlEgBHj9Sw1VN0vTUCoQOLCudZxCExwTUUP3rhQ0TjLjj67Ae-blgdQefsZyHYWVzockt1495wpREFhnSrzGdiQff74UCW14w9ZD7ongc6enzx553NFzMOJRUkuogQt1ff3wKV9dlpkd_LupBJIW30boqAbWXy0m85YwXXzDOj2wAUBr3_mpGHh5n0Ho7ZVCMURyLsT3ohqP2RjumMg7kIN2bAK3gMz2cVUk8PpGNfBJ4GzjtDk8DLysLDs4myVAzGYxibF6y7QOPlgx2DAatG2JNsl_JsoaRxSRLs73-thhqaguFAzUN7IxCyIIamwQM7kol9ffxiIlzVO2ZIce1P6MQuyGSfMpELmdDGkE2xgWmnR_lwniNsIs4ht1n8roZhioIY_ZpMKk5aUl56p30TTs9Mx29VozaGyTQr5e6o6GpvHXkZ7h87vd3Y9xCMsU2iKP7nQSNR40ovj8m24tee-LS5zH_xxYT3G8b8hHydP7067Mbc3tIw4EEjJybQfPp8qIqyRy0pQKIpcafJx4ARemlYjX-2Ewd-bACrrbM7oxab4DQ0-0C851sObj4_cR4CuCyIRipR6y8fIwNJaNmT_raj1ayoq_sfpXjqmDtYJpm6wRNl-vC7sIvEgR3G6QnG0C89cYRYdgz6TSRgimkLqaH9SEznMCvV_1em-52VNaLHiIV8DwH085PH-BaIRCDN1BbCYsozyHzStHEYwqan4FmW7ayioQCbc5G6ACByZAEHK-1_y-GxpPeyxV6JvbQ3xNgr_WfjBMIdjXfEN8i2sXaH3smmoVjhGT_NT06UNwA4CAD8uqPzx_GffPNA6pMFosv2f2vDkqwXt82OZhlu-_XLY_DXujdkVEBn7kHkxx-emxy89iE6YSY9wZHPYURfSTzuguUm4aMmd94Xv1Tyma4wGz9WYT1Bw_IfPEJzd_BHlhKM3bKH6sHEeISD4BehiKQRhKJC163kxCvYnWE7ik1ZudF0FIFKd9vGvThCneK8OFp83wLc51vftIJ3s5u5HCrqOc6vNNK8pv2gYP6jF52ZfCX9sI0bHjXDS8JquFsj7_dFe_PSlZLmm2ycOKBGXhSGNvRzQ1ixqW-U1A2txiiT0zM-uiwXtpvqi7TBXShzuSwvfVDKxc1rnskRHFU7ldb-xWxSgdj8AHZlwE9d0A1mjneVMR1dkWM4HowBxx2HnDcVtB7cv1yrdmY1J4tNIVD0G18Duz9o-cCh6blfprZSpDLlzmddrXBuTpEry6teuqHhc0G1s-TGFTbaBMJ5ltpiWfrOBG55T50lcgXyydD2vIQWYA1HsNdbJbbeOscVIocUUwoYXhfFNONpkEvnk23Ipo2Rwk1JAuQndlZL-lDqj2FlmvBI-qZTGwHbwyH9Q9MFg5EdFA1LhPXy_3uydvisRx20MDMjT4xEPv5s5XCGgENI4vrUy2lx0veyUj3dYSW2jBPxzMzWmltOhtqpMxC9APxx1mTHJE34iQ8F9YLAQAh_wN-tgvZjpXlLjaODSZqi2NH7KQrAm1fbgVA33tCHOgCXD0TM6jc1HBkP1Og63G7hQtBdby0WrUZpEsjhc0jLLpzBMLFqwUl2eDMGYc5gxNKTO0z6j5B2xa4iykH6JhdQ616LjsigOycknBIlMTJxVAIGqWgB3bQ_0HKGfXouPSAUSgih6a72ms7otgknhV4e4Unxksw5IqOEG3EHO7Nz9l3ZT3K5dvYsxS7JEkGQRgqwE75Ac95gcY2V4RC9LZUnf2zWVYALMv_8g8F7O3aOm7H_-wRds-fcVnlWY4he0QJXt_RCanH8t5f212cA3uUqsv-2E12A-eJ0IkijD3-nRs-LhEPNsPRTTaBt55ooDdwiiz2ErA1gv8rDErKbpa7e14Pwop882pskrbhdbzzo7IHuxPk2FLA6G40lqC1PMQlhXZ1-KHNfQ8lEaXs09JbjUxvznURZrPcuORmThMNvsF25dNzcZORW6nw_Vm1h5CcBHIxO-X8LBP-hnKgunh2xo4yVXvy-bcYvzKSBLQIb_qEMh7n2QHPwiG3Ulcq25qhDtvtDASu3Q-OExOkWS0Ys0GWZCwBzAkx5xALAKUUK4MXuFm1rIzJxQ_Jxt-iGvpby5Q8hxcaAPXYgqvWAXBT5qlLbuCH9IJWnKPY7Ge2ONXHV0N8wN8hoXdtb8dsPeC4k9oN401yvpXBs6dN5-u_zcBAY0HmTXeKpPwh9CNQmnxKHL3YQ19u7xqXVrhtVOPfgTmryEzwfeYdoA4MrTzT1z-_c6noSapQTh03ZByx3vrGyTd_zFQ0jiN-7lgDVVNWFW29wp6YjuikwiaZt6jofAloQA2xHIIIc3BsJ_a2Yjkao2_wDi0uMu-tXxYDeGs5jA= \ No newline at end of file +_Ho1f6eQo9zP_Kri8EE9aQFuAPz5oHE2SnTakPxb8zTUWrQD8QD8NPAfsY2Qnpj8ohnlIdfbJNcA_KA8-LpcnVuZ_P1fCeN0ZPQeAAAAAAAAAAAAAPzB7FrRWsMv-_zA9qNX7_IhpwD8iNKIW6skrtn8_VrQtv-Md_YA_Bz0h9TFnRCh_GxjQJBkwq0SAPwLqEXK078nMPxtF8-lsB8OygD8YcoLgMQVBJT80LuLbNjj5QEA_JJBHH62zH3L_HwjwIpJ-o1cAPx1rvVomVgMv_xGzj2P0nmnogD8_VAQ8Cl6ld78zUGCCUL1smoA_IMYPkJbeB7p_K6hOsZej146APzmP9xNe5GJbvwkuB41DsXyNAD8piLn0ILxAs78NpWR1WlIh38A_Ewqwakj7izA_OvJR4CSaeG8APxNRJAZzDGLLfwdDunGahO6bAD83HliFYFObrb8jXxaycFsav8A_GSQTo2c_J_k_JWek6e62Yo-APzcRxPd_XQY5_xw9OKKh16k_AAAAhD8XRSqUf-LzR78jG-forZunUL8I0EAPu4h6mr8PBMaesXzUREAaT0GaWDr_CIDoDvetmJ6riW6PMYkQQgSoLtc5uEJ8AxolNRrKS9iLlfO5tzffkihxJa7JM5oqT6_PiTSiyQbPPwevy_C3vfZQPy4Apzn_9DXBwD8pWM9S86WjPH8LBLyYpAPt_sA_MVmLC7oYBfa_MnFMajFYZLfAPx4V0glCL4qKPwNG97FXKhmOQD8NIfd7Y9e10j8gAYMW6r4Oe4A_Els8ByHd45m_LYEL01UTsAlAPzrs7SUMD2k_Pwm0t8cDqaytgD8gHp7vkpcYo78sR2hpuWlnOMA_H556c35d-mU_P61soz_a7tjAPzY-2SWCRGjl_zePSKhKEofEAD8pyuGi-33jsH8Vz08CUwec2YA_JtdgXuQ2nbm_ELqouhizPZYAPyYn2mLLerD8PzcMOB33yysTQD8S35YkGcxPlL8eq99JEsickEA_CbKu4VjRPKT_La9nMnGeNlIAAD8VGuf6DGNH_38rvFZipK2EyAA_N6nEyc4s78k_PlrdPnrfp-mAPyOGia8yzAOn_wHoStK0V2Z7gD8D89tnTiObhv8_pA_I8W4TGgA_KHYfbRpLuzk_BEKbj2mryFfAPwDy9MYxanra_xFyYRbAMCBnwD8DbW7lgtHX8z8qMKAlKNI90oA_JkXV1AXkAxG_NeIKyemDVb-APzes_rcwV-WDfxp1FYCgyB_cQD8wI0DuMMyNnf8JXaxixqxekUA_GgYvqJM7Jw9_G9_xNCJO0IVAPyCsIVPxCg8C_yt9vD589CfSAD8s1lt_zHw0YX8ieT6CIcgi_YA_DddL-yfHgnd_B4eKw-ODn6qAPzB2P32ARAx_vy77qh3vDNVJwAAAAACKCRSaxAMPL8VUeHPmejrtzhBbRSdGPUqrN8ar-jemjOqVBsCNP3XM4fRnTvWs69IiHq8zBFq1jZ3IYjAOnHOFyklFjlfIWF8QiRjaLplY4beOlLGI6wV4TfRt9OMZHUy6FQHH5YrwZcABXSMN8KGZ703MffqaFsv27kucYg6qhsC_AUEYDaFq7oo_JP041HAa1yKAPzfXG-zVxmnj_wwz8A3-MSyzAD8L-1FLINViNP8v2dZeLiXMZgA_KKGWBRxDyW3_HnUu8XyLwHYAPzhk73EwNMgZfyUyBUPdR0jigD8ZGXl9Zi-OJb8sxuD_5h7aUsA_FlTtGmx5J3E_P-6WPeVB_ZzAPxN_NADlU28rvwlbMdeBlSo5wD8qmfGH1-k0Bj89kWuCa6ukvMA_HQlqaJlpQPA_DeLTKiDdKu1APyhSX2AEGNNcPzn1AvGo297wAD8aSY_pra5Rqb8jOHPYUmwTeMA_D-Ot_TvM4kR_OCbB3nhcmbgAPxmnvjknmbTN_wkf40j1vCWpQD8zI2O2oD7o7_8qGvE7wqbexoA_GBgiktcNOSA_GKrNpD_EIXQAAD80yca6W7ZGij8SRLfYzum4kMA_PV8YdAUuixd_PIjkcWhyogLAPz0UBSLdAItx_w3CGW55q35MwD8pyWxMjStUZ38MOfrHsTYxy8A_FhQ4s_BBakb_LqK6EqlDwbFAPy_yVGdK-BRp_zZxiLmXZKMwQD8o7VwqplG-4v8wo7g8Z9sgpsA_N7GgEWM8dvR_BtMj9kesaDNAPyHU3PLvUTab_zvdA3cdM6XCwD8HzDWv-6GATX8woQZmizq6jIA_N390KOR4ycn_FZmxIH6kzlcAPwTAtUEJW_b4vwacDoYdfmz5QD8-r3fFhi9otn8XG7qMJ8ZCvkA_ObOwjvPeZSU_OeYa40YlLi1APy2GXPJq8awcvzZ9Pg5ue-eNgD8L_fQOGoRigT8d4J-o38P_g8AAIcpSo81xPMHr9LeGCjhr8TOtNu6AIUBz1T_4NfmPpoJEOwYt5EJ1pMYmDB_vjg5jHsNmDZNTtFvkr02X_XZRCYBcI_kR7U5TldWG5Up_f5Uu3cIja9wOfIa4bEx-Dw67yUBcmpFeH2mxiLF4HxK-O2maVPfhJJ41Ul8jSgmyMYDkxoB2EYougTZtdPjkzJjxD_UCaaymKEHOI2AkCgtx4_jIzYBSvdI4wNnoaMCXoSUWQaXLhMdC_YX5owPcEn-hSJPXwMBCWDP7GhdLQQ2lGCbMcTR0q0KTUeXBdhflVF35oNI4TgBIIbg5-x8olVhMIsw74jyalk5hV9D66elIHg2PqYDrygBzXvFnAH7COMQucSPX_f7THIx29w4DOuvsg6AF-Cc1j0BSHDgLr5TXZCd6clbOJeqzKigROV2WVvk7yN9q-jI7SsBVHnyvB0-8Gz1sh6B3BDttancccMnUECVGpS9wTKO8yABF4BhFaoILMICe8Eaxf-JANCXKbSXTjT9xIELR3rMZBgB1qgd58smVibldWPJfx513mkD4WlZs9P0IyfRiZcMEjQB9vjrua44pgCXktj8k1NwPCd7V5TqEHIFaEiIpTUq-wMBCdZ1xguXeuxmmKAAffzP_hnAXZZFHIqhstaFvCQ6ID4Bgj5Q3fklLJwFqXdEfiY42xLOkIZZqSsxj4NvxQpddjABUKLU8TmbQEawELIWBayZnNAv166YsOdxj4JKTnhijRAB5pS_LHpBt1LcqzoR7sh3oU6fgDTadDKtK0kaZAQ6nQwBG8T_zMhjAa0u6lrZZtY56BHOh9uRZfafLkxZF8CZCgAB0rp8oC-GohejnnHF7jrQxR9WDTemJ9oqTkIfDUFQrAIB0RgW-Ga6OzhWw0neDAysvDQovv7L5DgPVLHSpNjAZioB0VRv2zQPICweFUwCiVqgU4-nS-seOWpJlDMzsFqIux8B7XFHbm2hEFPcpVM2qKgk92Vdj2qe1DCDBwpC6viQywEBwSxXWiA0GCEBd2BTxmDqHxMN5isvhK0hdQKC4cxUJy8Bc8pEgH3UR8GD3uUNpPV0UlMrZywty0azDLRren-lMCwBaVk-bliZoyASExuJg9IPv3HdCzePcF--xcp4FJnCpwsBJAwX7sLPI-AbSZV-2_CPom2GhfGNy3JAf-kOj07Z6zAB2sL20HThDt7Yzrv_oELLPmt8A2dLDnhdpkhuCisucSIBw6K94DMz7JS1XBqtIiz-iLbIzwEFsJ7U1KV_bxcz4RAB4bULmR03T2SNikDTTCNP9FjzAAaVkdjARMZah8EH7BoBRz72_lBz_HeonL2Gxhj3Ggf9W39qW1QIlQtQ_Cf2HRwBEy0M1v1VdiZ-1j6tFY6UEHsZ6lqNke46VpmsMgYm1QEAAQMAaGLHIYkS8s_8VNyh0CTYpx6J309KNKopPz5Ad24BAaRK5oOXkTp-IxMPwDJHDpDL-CIvcrFcaJo6Avn8C1MzAZgGkfNj34fQC400Ec0U5RnrO3JCDABhysKn7X9F21IYAbrgVWfYAr83xLX_AN1EbQTbIRgjW7o6swLluk5xkWkSAUFF6sLC8aCPQ6Q0WmEnVgJp3_ExI_BVu07TFsn_n5w7AcwdHxhNZPAjGdRfCvuCHhIe6HbGlZYkFGywJ-lqTG4FAf6zuSSDLofZuw0_0HMvLmX5COn_JQj3bUkkk8_oZ5QiAZw4lPjmI0qmyIXqndwuxUmls9EEv2jtQbNI2CDvX0gGAXESdzoT6z0l5Jig14EdMLhVkzQ0vX-RpBYzXEcfKSAMAUogBMqPL1DsKDQulJVYewmV5YM3572VgN3_cv1LOigbAfKRVp0QlAQdPIAVCpYXxlPVE8mIE9b-HmymN_4xU7cVAaZ_GLz1MpBgLcMkuhUrcpV-1DmXhhiCsk5ZEhRtHBwWAV76qAmNgNa5bchdoYhpoXGJW2K9eyLUimdyTrT56uExAQk3JJo2Bcjzkl8CRaviBWNwVPoCFqL8YwV7caykvigkAS120wB5XdIXSTBSfHHrIzBIaOSzpQmMnjSqBeTQgksvAZT_7SYSouFuZmpHrbLANISA8ElLHD_KO3zHDVkoAjETAZ5B0DfFFjOrHQsMcWnC6jE3_R0bgR6nAMP6BYJw7D8wAVHDEsri61PEjCUMS0-qX9JV9x3kuCDAFNESblWG_P0-AYd9iWZ44DGZl-3Pd1kSz72dKZZWm3rhvwiEoeIBT68fAbMr4EY70lBdFRQ6zGnAVnlaomNQdGF-F9mV5QiYr7UCAeH8VNKfyofTiwrQiyfxDa_DOuup7R2wHUxecTk_lqQ6Ad_5gXPuOThOawFC6IKyrMbFkzPqSxBzSGNg91hO0WIvARXDhVKo0M2td5EKqaoeJ0HNF8a0nVCatJ22mQLhHQ8_AYcQEvgQ86ow6gDsd24V-4iFoy2nass9URfbCiO3zhU0AXfGYyZ4-VTouiIQemruy3m5Jw0AcMeEdHWT6iu5ls0jAXlktq74OFUk2zhZhklqZaXF5y61k9GG6vWE7ettOuoLAcZBIL7s7YT4mVCcueBnIDCaRTxwQD2YzlyL9JSHCskkARGgLJg1aWR4O-Oy4d_Sy1gxCGYOHQfUT_S6nrs_ZBo-AVFcWOS0iRtTj9Y2xm4wyGMpQuGaW2sf3FmBJB998Q0LAcnF7KjMqO3Htwu0LD5sg1xikojPH_u270KnrE2Bo2MsAAG0ujgJVprhKJYFGzt2HyOhoKSvRBP2JHVoY4Cts8afKAEkyU1aetKLnrfVoJuU1rulhFOR8Uqg35JTeP9stFd9NAHuhM_POywo63r_qURpkx1bqTX0MrdiXsWA_KbwgxqKBwHvqfVTYXLwAq5JmPWES_bd0evKZoJujmEZwjXQW2wwMAENsgZM_Dz7Etue32Jpl-qgzOBiivXHb2sKvMZEvOYcAgF1t1YoMNqYpCAp4yvZzNMwR2VEAKod9oKfeZ8Y95BBBAFhElKnBtRsq6zSIc_EE4wd97Q7uXtAbE1qfk3YT0xsDwHIsNTcnRJWxeuwVLeJG2De9z9JxjJfV9L7h7rEXfM9NgHgjkhV_SS-taaH0OCcpcLiTDysgqPiBXwriqxs61unDAHLnoTsojWlaCzp5QxC_HCPwz0Dd9FB14Uz-d3Cn0z6JgHPobswjGyeXUMK5ot5cwYIcjdx2IpmrW3L36ZbmZ5cOwFQtUaYNyMbxZ1LD2QQV1QEYzeBw2AbyzrlhB5JhKUmJwHhBoYh4A6mb0aK0oLIivI3Cd5Wj3iTBbXoPOW4IRKJFAEDheA19CDVW_m5PBZWw0O5ZSMGTNJHKf92gaP0U2kAGgABnZXRamA_nN-XKW7SVc9ZguJ8jV26J_U4VAFB_E4dHz0BtuxxWSLfFO0sxyLuoxgdq8M9mQS2x5PeuKG9clDtfhwBr06U2Jh1jE2R-fLUDWOCxPq72YIYYuTdQEZMIbfXowkBbmZZUgTUW9bW7f0cA3eFrPQk5X8Pxo_6dfKmPpYXeTIB_02IjRUcaRKGeStTLCHBjJoQsix1Ha4e8yWqvaHqpyEBgkKzQOvHyRoM14Z22OW3x1Ufy1Utk4ug1vttlAbihgoBYIk4-MDU1RnDdF8T8jMXhopJuZ59TluNAfVA60UdRQoBCVa3Dc7EicwwBYzaRprmhAKFts1GLUOXi4ZZn1yjPw0BDIy8Xzbp-IYLRsCBtTaKDqr11yITa36T9_DYG9JQWj4BgMk7EN3mMWiBi4DJNhOiY5L-cdHGod1Ta3MNoHTTqioBdzbJhIw9z9imxxgAc_JR7SSaROJfuAv9JCtREmJh-jMBsJqwcFVbeWgmZRJnQUe4isMXqYJ-TKIk-53AwrzBQyEAAAAAAAAAAAAAAAAAAAAAAAAAALe7i_WxRjaYxELCxIvyM5Vtwz0FIhlEjWZKUqEd8scgCq4oBIsr8kOq6XVm8WZ_g3YYJOOU_1oZMxKgz3dK6AcJKIf0o-v-iCLa2PhwlLPw52tMaTll6-WLdWAJSg6rIfpl6ugRUoQoCWdrTwP9gqnE3V4Ks4we4LuQeP7pfoolWcWHpE-V4eFyLKEgQL6EAqzbsA5mk5xr0aIIQDawczv_TTyAhemY8JYHHMsq5st7kQDFSC9K13ihVLPgH0YcP2tv3PbONIe4HF3YpvXF8TQLAJfl2dwRpbblcaMV4S8VO02NjJAaXttvW4LUygse-TTYGx7Do0xqTL4ZfsJh9iNPzWEh5ndtiftLerQ0WniZHmW8hE4FJJSIM9_rrbsbNe1QXpqzj1yE3q0LQfAktCBhmfiQ5vqvcE6L27X6QRUM0eoLTEHJMeeBQVyLLyj_0lTfu9hqd7JZkLeQtnf3gyjXMojl7gDhC3ygSa67AT1MPP0uFIAzf9pdP356C6X-LUTGR0bdeBJ_EpfSnZAL1qu0U945sSwj44q09rh7HjsdyEauv1YuFhsoGxX5sQxiYpylTgKe1f1EbFqh6se_nyr-lH181UJxM6Z8cMp_z_jSbKE03RW1G52j4pkPrZKMOiDxHvyG-YR_oL5BW484S_84N5IN0e2a3q1xu-mAyhc49ClFQBYmC3bsw4pO4DOmNbS7zol0xd4FJVlapgpuPi4j_JXLAIWVpD1xcavOLSgn3ujHrWRMor4WPqAANe2_DKtDAqbAz1zNHkBUPuwrhQ4jy_V88WsgputzkRH6cXkXwXs43u1mbNisKimNoAHHZbxH-Y0HjQ9CdY3q4_DFdRCpwV4XzR-kv4HqRq4GvOnfmqf7VBuXapbrSQDsGu68DXjb-CjX1UtFjm4E-8q6XQZ9iw5oRRVQwNBOfUQhcC8-d6A0RB-PQGA9zx6wDkTFKSSsmhryWjYPMFoFNCg8HjEEfNVCixSIt0DN7O-UxatjkI1D4MbOgP6HPzWkZPblNZjoH865fu3Hk5BcBWYt94f3LyBRUoObdp-LYAo8xjwx81shKgGr9qOpULO5fz1uyJuHYZxR2H44CmkEQ0KxtQqF75MnzDEtSOZtLo2rFg2QeCdMS8QsGURyid8SRYCLDJHNQ_ZQ9vRyrYDGOLQkibKUgHF4ArW0VHs_cVdKD40fGGW1oMBL8peh-rn0o4qYplkSFvXSANpDitebm3kpfhh_esqql05yILHpwvoOHKTdKtukGKB4YCnaRP442Q25E16utxMiFXQQlzViZH5AGWbQbScmGA_MSuK8kjY6b-oGAH1uJ9keEG7tgwhRqEzNqK9sg4t_cekduux-3t4i8oMYXFU0CTT9UStSnY70VKbUEmqgGMIp9XbKU4usKnm3awZ-Fhe59PtnXzNVzmLiGKG8dgLyT18-UemcH4vvnxfAEm-_5g4lv71wEzaU318xd1UsfJx1UJ-VTHavy8lPm3c5MAqWaeRChgcliN-PUugt2JoDBB-hxstjG7paBeg2CyJ7KelzuBykA8gAwDoIJwbCVhXAHub580ByiwLp3dCrP7NosNwvnkj1ydh1-7hzms8uOCLgmuHtS1E-rt39pbcYpRqh2hup6pJLTU2qpAQsq4-flSOcYj50xwl0BXWe3w5-jrT7hyHHI-34CnoB_7M_fvRPDDvy3yWZIJvObxj-LOjoBldKKz-9zNGHUaUkRzeW1A4e0Os9DpEGz9Z6P6wNPkRJK1BzrEFM5QQyftIE1aiwJYu8Ud95Ux8xUUslyxa4krj_K5NMjHi5gl6lC9rsRlZLC_36xk3J3cbizFsKHwkFpslb1HFMq72ixNgsISgeRvEXdeeuOcgQbpjPAlwbkEQEuqRZ5aJ6Ff5TYfBv-uBbWmZfrxt8_otJdTFgIgjbm0XNVA5znCuT127ARQPKdqDObBeqEy6oeI8bCFHMNpbtpFYo6eQsTPMOntJpkKslKNAWQCdPAfetobbXP90aANEAW36rsLYn2-Z_bu_jD7LMO2Xb5S_ZvipZVtKbAw4oOzX-SrULiLbCoO0tFmdpqy2wOrkdcy_7w5r4aA0B-DJP4PZNOLxx7RMKfDJiNZEIrbshkLcilBYRB9PtB5smNDpoEW9jQtYjeaXLM89rR18E99_huzGLs6NQ6hbDEDEFtP6kt3dbgd7Mrnd0Bw3XS51gWbYnT0VrMdMjZQdxEz09eeCAepvkvz3-P4NtUg-PZ4F3_AnqIeMKCL8BUgAwOOZJQCesmCHD397ec3aeoCFqYaTbLruJRneE9eJhYOIe9pFsokgrDtUM5mnkWqFO3COJXat4GO2bXv0p54gmwTVIbOjF35Ob5kzKwi0jbgF5Xa64Ab1pNV7Vy8F0VMKGFLNXkTCuNX4hGM1Bs4BtZXUn3GDQuQC6qxKJMiVQurUtcVdCD6MG7bWJRP6jY8hkayXHVM1u4yjC1QyYKN9NLg9PwYKp6kbcgomYLK37TeN9ao0idsBSxAvA_XZVi4DsJe8XsQc5g1bUEY-SkMkegL7HehKg9KeVkdPw53AdhIMQWWW5PIgxb5r3ijmpxjF_AgXkKKzZyBs4-i93Qlck7CMT--n8wEJ_cOM5P5OqFHWUklCtUn2gv5W0as5D1tKeJkILs1mauk04adBNYcCMUgdVFJVXmTqhJpZ2mrDLXQ8qId7ev3hlVOR31tzT3CLzE4Tn0eLkBY-618FYQdTOnC6jtJfKFh7ncWM8ITY6qxCqzhRM_qn9cUnNyKzlLlzNEW9dB2J6x-6-qPUOqw5SKKrVcXiCx9eslFO_n6f9mmgKm1DIXAtTwDuZmRFT9I0z_A0b_H3H58IjVmt6mw4JPiIG5pyM3Tn22NBglBwqKSzrlP-9ROmOjiEhRME9i4k7Dqwsq6mY9uEHIVmtd4ofw4o_ghVks7WOrSA6tp-ch7cEaPql4ecUnABr3GviUIv7pWjD60hXnnZ_dWURQqvjdy-b2RZUhWBzwDCOS4V9ZgbshSuAG9VnWIk61DtR-IXVLZlOGUmJziY90NwmNkZ4XigDgSb5_PaKnknYgK1C9voYHLjg-e9B7hoshRc1j4J7YOJ5fJAKoGSqHW2uJUEQMx_BLuM9Nf5bL12E3dva8C-GWbGNwkn48sQ8-BwlziabJ-iHuJbJo3sjOvCmW15aA7uvBIaishusmlO36LU4jpU5KxmZQ_XJlOtKVz4xIsaXYa0eOvJS1JF9FkorH6LnjSjCv3fHm7U7Lr39DC4L3iGpOCKl6I0xym6E8fm8NFJFKADpBropq3nQ6ockisFeasBemaSj4tNksBveoEbMhyK2CDdRkmMBEJXvRr7l0ArPOieIAuNVeYZUbCBkqrmTf44D37X6y4ZoebOZxM9U0rOvOAbCC4CWz3ZOJv9wd7FzTyQmecxZ_6pGi2hC8LcXa9_RlsrXiSHfISmwCm5jSzh1PyY2S1dl31BaUTLzmUUvELjZerCSj5l07Yk7CnDTuEM4wWX6DOQzR5eJlAimUp6DJ2OZ33_QeeiNY2kjWr97JBotCOoQF8tFSJmuSHuAZRVlzFNopK-SK6PC_y0LuL0nOenY4wrx_fcjhvISmbBewF7IpAZJKJxPuq2IyOtIAIMIn5WpHcS70cQMZgyjzsr85s406alAHU6-Rl5N2mLq2yEmSxg3xJ8WBqK3qu74IqxL8Br2j-K_r-N0FNvIYys4GUz-cT8AAc3hfZoMowshkWyXVJrWPWHBnEx51CnqpkYfVmeN65TQzZtsABX-kUsQC6RQqB3FGibwupMaXiB3rzGkc_oE-ByEYa4PP6g9FBdYEbPUItL0eE_em-1ONJWKEr_K2secAKg1HH_MYD-k1Jc-UgRQks8S31tkzu1jMTEmFkcKRQOobXaMhDE3AZGpRFgjeByOlokw3Gkp7pJXeiu0NIBFE2Htwpyk6jZ74Yi_KkLfkNyhRIFEPamJmKhICN_eZ7T1f0eSfZDJtaRfLoDgw8Lc9kyZf2CTpSD990s1rYacQORb98QOttlwGf2LWpFMpqNvwvIPo7AMjjnL2hYFNd8Ibll4FPIDJDsXs-PYUV3P6lA_vU-1CIA0JxrRM0-bI-OKFP-UYpz-dezlwdRxRdB3MaX7Ag0ZDGpQvH46_EOIeo1IRvR6VTDyPSx33SE_BOoWAxq1vVW3fJJhgSXY3mcZzh2z-exz0ZayQ8KTdYZnIosP9G7iPgvfL6lBE_0lpO3FOeAUqI1KU3EfiE2tw44WygxcwKojRpifo9QoBbycqnpTMCpGN_mZkEPeSLMMjiwE3E400vNLBxHeyRabPc5DKpq-j_lm-PS6EZXtRBwzspLD4aIORwqn4uY1CY-w-D6a3NC6IZIn9Lln8AUOhEUdUJRrTE_2rt9QRlAWcCsyHA10-bzNRzuZX7WNhZxwDztg37cDdLXdfRaLhwC7MQWSO2LAZGQDvvUBdcaj_HyO9stkxemWHS_05WuBCioe1DGwCsoSmZKBQSR-9TSRo51Ke_5SL-zUw6S8ZRsVpXgJEzX6Sj_Gf5xvnvYeFZS2KjuRdJtm3nHiki_LzQUA4fIsbHx_pqX6OHQ-uPWlea5-3skeP9IHoWy0_YXC6ySLug0nBcfjqhs3bLb7l6CuApP5DxhD8JiWGIGeHSXPCvKwO_HZ0D-lPALm9QJGAgD5uCDuGxoZtR1Iq_nRU60xsn3cEN0Vig4wJwXS1f1yt9uOWh3hitaDKO1CTG5IihyXBuN8ygnlzQmQ12_ovO_BP9M1eLfo2NOFQ3IDBWtgLMOGo7srdB17PvN3fX-1xrKauA2fg9tAI6p__7R-Vds1mmpWNh926IeKHZf8_FHK0_eHq8Zt0RWsbMK9Br0NeT79mG4_LvL_hqvKDGKRf7kyX2tfxSvsFW3guzhWoDn_GcAsRzAO1qJy1P_M-iXhYmPLa333_xmdh5yTm-_WS_gVxt8IcKAuDlR2XVaK1sGI9XFM9UEAfp1r-RMDrIbdKzdS74SGpgkAyVJIIluB51gT9GA3ZiSdzBC6cJ4TRkSMAWy1ufX7LHJuy09-uYTOTSsDOs7a9teescBAH2fDF0ghHpCfGl7MPg_uoe0DNacxxLPdwynnmfcbpBoVu0YCfS-K-GglSK7BuZnMWhLO8anikvjr_dO1Y0_h6y6fljM7LQAOWnS6nxbWaPKzjTVdVWUvT0DLeef6QQgJUmx1-9LoPlc_qMrA_X7jyQaXvIlpm5XA77RNm7kd1zfPHaf2uiA2pglyzwxd81VGbDpsmJGIWfwNYk8ptokTScFksFqkcQ2V9m1swVkv1Ug01lpZOLpkBpTRNvZgGCTEe3mx1hNhIP-qkblHEx1WHrWUhUykKJsYCUrp5M00qrRwnVbqQVMaK8vooHXYq3NGIdmz8SHYeGg4TDrLUObzPpG4m4M2vSX6QcJFov2JPpdBhnKr4keiFdiuLA0C7cRhCRZ3r14XPUK5dn1027owZAZilM5f18BHkA-0FcrPmlGugrH76hArPbFXD0DUYnS-AYFKPklytCQdDgXjoJISb4Wcoc9u5Tu7vwkZXd2ig5TL7HNiIHDEnl9aEPfgDdgo6uVr0ZnlGDX4jzBV-dsGsXpr-rTyU7PAG4Ph4owOGvpEq1AQBb0P7c8YJng6aeq7X88KGWVmZ0ukJxUjIQdCIVBUlLEOKRJK7V2KNbXgVHGmb5NRfdCWPR2cb7sDTdoHwTeht55oMQ81ZlspEDDLo5uD7dG1cltDm-IOn3XLF0zosK_CxfwyGqFahffct-TaiMaRTO8JKYTek9ZhsDhMlx-7vAdbOXsrOZShk6Sb06ywxkGV_anzTX2Nheg0hpMwABWGLX9IOxqbZRUa3IyFIylLIYfMuHr4oZrSiaSeRCVSOPq3M67ZFJ7JSN2RY_FKd_JKfszyCl24gbatjv5My11hVZyJP6w_8yGofScMBJsiQqWnCxJM8Izxigc7tYw_eLrYaZGcLCxPta7wNUkeMGeDs3tqR3HtIaQX4BxqZMuC2CGzEoilL-fN6OtU-Fi97u_TGRSdkdJfyzwoF4YwrWCHaBAUAEccFl9ymmLr_9NK7uK2kRwLjm_y8ZH49YmL1vGFOf3xxByfa-1hiV93A4ISZYxEA059hoguSAE36wUWz1kIqJZnPx_1xtXQ55YBKjWStbnluWAAtkeGUChbVsNHZijfRLYYPJXEXWMpAD7POZepx8bLRddqN2xvbjzZ8uPpHyWiITZYkmSBNqIabZsG967eJXolPcFCNMygxwthAKTtIZ63AujNHTOLCKn45U--8FYadAFRygUdBtDJj2hBMj74qBwsc7nrOK8OfYUTB6HRyt5wHlEa7JDnG8MnAG_NtSh8tAdaIAQpoWV7bHID4u2ujbDEWBsro20_gXXFiAsTQtQKKmDyGQfSYUshZZvrFu2JxwAz8YA8PNSfeob9dfzaMso23LiDYeGR3kFlDNJXZI3xLmsXjKiJF6qOdOPMWW1wMRixQIbsIPOoC9Mm2OAD7I92eLJX_sCGK-An1mHltVtdOzDio57oFqgBF9TLnlGDdO2sIsXWjINBQ_pM-XtNtVYnmhrEB4oCYCuVxDwiltAWFO8ODXKcHkSgLI9YB3QF5wvAO6MllDx2W8D0TsPMrREtC5ao20-uqa1BfZL6xHG0N6vgu_XUEbmCj502iJbaOAxYM-a937LZ-Z7rdYDQK9kNX97wq-8aordEoSpjOGxqlk4DkPQ2-l1-el1g9DOeWTk6YVo3Yf6vDyGXBbdTYggzKw3lcXJdNM2ZvulB2D7hGQedFmifi6fLjAmTmQXCaH9TNMXYjykNuwTsC_4nvk0F2kqQx2yhH4g6l2oQT5jOqRa8FCut3W8OFgox_goR3w9K6BniE2PF3ak_fxCZhub2LDzmBAoW0AiofaM7SynLCgG8F5JFamCV-0z5JcfnkyaR53Z-a1Fwttutwcy0Xgc8chDTkNteb4T0YXPeL9F7Vtnh_aE4CVfSCUT-80WVuClv7Xdw8s4BahaWDw0zzRIWanuyWOEjARHQ0OTPsk6OPiUQHFX72q4T-wSuljutYAfXegcdSVzO2cW-e6aRjUAWOZEGeNjNcfB3O7lYck0jYSZ2asUIphx5Q0Fw0t8-RAuVyuW0ZIjCEqtkzfkVkAI8J-_7Qod10KXXj4j1DDsmIr-B4usXKhMYPXuurBPcCOoqpSA0oyxiTMJIshLtUCUhA8r8-Wg0ms6r_G5yzOmGqD3noPUsAk523LzO3GwVmxfX2D2TjjL1nKduwNBDBzB1_BEis2rgDK_EkXQUU3DHFumwa2KMjGzuSh11932j8k9tJ6yKMp2Gm9k6UNGlIyQl2bVnYW3FLZ1dcLappFLRvsowF5oLahADdY15fBfRPSb0RuTMgOz2mP49ZwVMTg7b7VfYW00MxCHeRngreELeCax3pFiIHPTN1hu5UFoH8tClofcqZ2o40atdmzD5JikXUGeiawY-8GRg9hr6GpMtYaBOoSxr1TH3w0TrVkNVxBQWH99lpl9_OFpbwHLymbtrly-i2VguZx850W7VjAR1BZBBGhZl4aqCE-j97Ip65Sz_yCFvGGgAsxew9THgfV820hBMkMZJv5wiYpBIEZWuQXKCxC722NZhEk45oZF63SnpIO9QgpSymDu-hj9kPdJ5Dxcnw0tlPlBo5Bx91XbGPs9GFYA1wmxKaWxj5LXr2j2hwfQvACD9aW4-PilosOQ6dbUKk768TB7D86BKlFTMxJ_CcTq_8-B47K8tMb3U0g_mIii4N5LkjAgMBvDwlWMsEhsaCgpF-b4QO3CqB07iMSLSObD8205ppMavMUvE_Hllrx9OOXRj-MipXbA5R3MfPjKdmGzuDlhq27xb3CjESdtDzw8QoL8jd0doRC4q-AEWYnuT8vTDIK3-p9bVTTNe76gyPULyd6nQXqFyFzpdN-LCK3Qlot9OU3kS-0lXT-h3KkRF_VRAb7G5liMGmhQyKm_fGEDvwigmtMvC6pRE-ywUq3GiSkEdSN1YSGoNiSA-G7G_kd-c1Ykmk3pHGfJr-dbSSO27WUaZMYaQ1PMaC1ZAw1WhBIvIR4LlLwFJdsfoaxrCINoucqQx6M3a7DMyU2n-6M6fb-SzGRzhgGiaWQII9ed2HowQgpz67Rwz_hQ94CfD3iqTvEOhX9Wn01pOn6AwdCDw_7-KjPdFtk3WEa9fqV_UUaDK2S9rjJAeqjAGInSzyB3JHGnnNzr_Lw87oJLrVBrwEGm7I55Ajj2vDYXejKk-XXMlf1rbhAj3FjdOBe-9__9rZsVTVzh-l_NtqSZ6pvLg8kHvuOgRpQVMBwyhGcJsJCwTxuJQp3Hk0bH3-BgOTcgnUIlJOulLttIwKm7_jYwq_6322NODofUZuCMrXXtOaM06eiMmBcIBUz8bWdkMEimDm9Nu5BltYbKc0NfM2t8VE_Lbu5AaTvXKJYBlNBFGvhkRH0b5baAeT4qQh4Yh_NnW5RuAjTi7DS8_kgGoeIJYsyfsvbYDnaFcY_CUzSY1oMJLrlsFurFeVwY= \ No newline at end of file diff --git a/batcher/aligned/test_files/mina/protocol_state.pub b/batcher/aligned/test_files/mina/protocol_state.pub index 939ad9bf0..1fb6d8b91 100644 Binary files a/batcher/aligned/test_files/mina/protocol_state.pub and b/batcher/aligned/test_files/mina/protocol_state.pub differ diff --git a/common/proving_systems.go b/common/proving_systems.go index c69c7e305..8a35024f7 100644 --- a/common/proving_systems.go +++ b/common/proving_systems.go @@ -16,10 +16,11 @@ const ( Halo2IPA Risc0 Mina + MinaAccount ) func (t *ProvingSystemId) String() string { - return [...]string{"GnarkPlonkBls12_381", "GnarkPlonkBn254", "Groth16Bn254", "SP1", "Halo2IPA", "Mina"}[*t] + return [...]string{"GnarkPlonkBls12_381", "GnarkPlonkBn254", "Groth16Bn254", "SP1", "Halo2IPA", "Mina", "MinaAccount"}[*t] } func ProvingSystemIdFromString(provingSystem string) (ProvingSystemId, error) { @@ -40,6 +41,8 @@ func ProvingSystemIdFromString(provingSystem string) (ProvingSystemId, error) { return Risc0, nil case "Mina": return Mina, nil + case "MinaAccount": + return MinaAccount, nil } return 0, fmt.Errorf("unknown proving system: %s", provingSystem) @@ -63,6 +66,8 @@ func ProvingSystemIdToString(provingSystem ProvingSystemId) (string, error) { return "Risc0", nil case Mina: return "Mina", nil + case MinaAccount: + return "MinaAccount", nil } return "", fmt.Errorf("unknown proving system: %d", provingSystem) diff --git a/go.mod b/go.mod index 2b35f3da8..7c9e07cbb 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/yetanotherco/aligned_layer +module github.com/lambdaclass/aligned_layer go 1.22.2 @@ -13,10 +13,10 @@ require ( require ( github.com/consensys/gnark v0.10.0 github.com/consensys/gnark-crypto v0.12.2-0.20240215234832-d72fcb379d3e + github.com/yetanotherco/aligned_layer v0.0.0-00010101000000-000000000000 ) require ( - github.com/DataDog/zstd v1.5.2 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect @@ -55,41 +55,36 @@ require ( github.com/holiman/uint256 v1.2.4 // indirect github.com/ingonyama-zk/icicle v0.0.0-20230928131117-97f0079e5c71 // indirect github.com/ingonyama-zk/iciclegnark v0.1.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect github.com/lmittmann/tint v1.0.4 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.52.2 // indirect github.com/prometheus/procfs v0.13.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect - github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.32.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shirou/gopsutil v3.21.6+incompatible // indirect github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 // indirect github.com/stretchr/testify v1.9.0 // indirect github.com/supranational/blst v0.3.11 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.24.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.19.0 // indirect golang.org/x/tools v0.20.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) replace github.com/Layr-Labs/eigensdk-go => github.com/yetanotherco/eigensdk-go v0.1.10-0.20240805154752-29f4d3457921 + +replace github.com/yetanotherco/aligned_layer => . diff --git a/go.sum b/go.sum index 6fda24e8a..f3434f87d 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= @@ -56,9 +56,6 @@ github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= @@ -88,8 +85,6 @@ github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUp github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= @@ -114,9 +109,6 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= @@ -134,7 +126,6 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= @@ -144,29 +135,14 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5 h1:E/LAvt58di64hlYjx7AsNS6C/ysHWYo+2qPCZKTQhRo= github.com/google/pprof v0.0.0-20240207164012-fb44976bdcd5/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -182,18 +158,16 @@ github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ingonyama-zk/icicle v0.0.0-20230928131117-97f0079e5c71 h1:YxI1RTPzpFJ3MBmxPl3Bo0F7ume7CmQEC1M9jL6CT94= github.com/ingonyama-zk/icicle v0.0.0-20230928131117-97f0079e5c71/go.mod h1:kAK8/EoN7fUEmakzgZIYdWy1a2rBnpCaZLqSHwZWxEk= github.com/ingonyama-zk/iciclegnark v0.1.0 h1:88MkEghzjQBMjrYRJFxZ9oR9CTIpB8NG2zLeCJSvXKQ= github.com/ingonyama-zk/iciclegnark v0.1.0/go.mod h1:wz6+IpyHKs6UhMMoQpNqz1VY+ddfKqC/gRwR/64W6WU= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -216,8 +190,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= @@ -233,26 +207,14 @@ github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= @@ -265,12 +227,12 @@ github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= @@ -288,15 +250,12 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/testcontainers/testcontainers-go v0.30.0 h1:jmn/XS22q4YRrcMwWg0pAwlClzs/abopbsBzrepyc4E= github.com/testcontainers/testcontainers-go v0.30.0/go.mod h1:K+kHNGiM5zjklKjgTtcrEetF3uhWbMUyqAQoyoh8Pf0= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= @@ -313,7 +272,6 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRT github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yetanotherco/eigensdk-go v0.1.10-0.20240805154752-29f4d3457921 h1:bYER70hS8+Qx//uWWhm0+WymLTKHiqfbJkphteKUxPc= github.com/yetanotherco/eigensdk-go v0.1.10-0.20240805154752-29f4d3457921/go.mod h1:XcLVDtlB1vOPj63D236b451+SC75B8gwgkpNhYHSxNs= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= @@ -332,48 +290,17 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 h1:985EYyeCOxTpcgOTJpflJUwOeEz0CQOdPt73OzpE9F8= -golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -382,50 +309,23 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf h1:liao9UHurZLtiEwBgT9LMOnKYsHze6eA6w1KQCMVN2Q= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/operator/mina/lib/src/lib.rs b/operator/mina/lib/src/lib.rs index 1ef87cdfe..ccaa32f5d 100644 --- a/operator/mina/lib/src/lib.rs +++ b/operator/mina/lib/src/lib.rs @@ -43,7 +43,7 @@ pub extern "C" fn verify_protocol_state_proof_ffi( } }; - let (candidate_hash, tip_hash, candidate_state, tip_state) = + let (candidate_ledger_hash, candidate_hash, tip_hash, candidate_state, tip_state) = match parse_pub_inputs(&public_input_bytes[..public_input_len]) { Ok(protocol_state_pub) => protocol_state_pub, Err(err) => { @@ -52,11 +52,33 @@ pub extern "C" fn verify_protocol_state_proof_ffi( } }; + let expected_candidate_ledger_hash = match candidate_state + .body + .blockchain_state + .staged_ledger_hash + .non_snark + .ledger_hash + .to_fp() + { + Ok(hash) => hash, + Err(err) => { + eprintln!("Failed to parse candidate ledger hash: {}", err); + return false; + } + }; + + // TODO(xqft): this can be a batcher's pre-verification check (but don't remove it from here) + if candidate_ledger_hash != expected_candidate_ledger_hash { + eprintln!("Candidate ledger hash on public inputs doesn't match the encoded state's one"); + return false; + } + // TODO(xqft): this can be a batcher's pre-verification check (but don't remove it from here) if MinaHash::hash(&tip_state) != tip_hash { eprintln!("The tip's protocol state doesn't match the hash provided as public input"); return false; } + // TODO(xqft): this can be a batcher's pre-verification check (but don't remove it from here) if MinaHash::hash(&candidate_state) != candidate_hash { eprintln!("The candidate's protocol state doesn't match the hash provided as public input"); return false; @@ -127,6 +149,7 @@ pub fn parse_pub_inputs( pub_inputs: &[u8], ) -> Result< ( + Fp, Fp, Fp, MinaStateProtocolStateValueStableV2, @@ -136,13 +159,21 @@ pub fn parse_pub_inputs( > { let mut offset = 0; + let candidate_ledger_hash = parse_hash(pub_inputs, &mut offset)?; + let candidate_hash = parse_hash(pub_inputs, &mut offset)?; let tip_hash = parse_hash(pub_inputs, &mut offset)?; let candidate_state = parse_state(pub_inputs, &mut offset)?; let tip_state = parse_state(pub_inputs, &mut offset)?; - Ok((candidate_hash, tip_hash, candidate_state, tip_state)) + Ok(( + candidate_ledger_hash, + candidate_hash, + tip_hash, + candidate_state, + tip_state, + )) } pub fn parse_proof(proof_bytes: &[u8]) -> Result { diff --git a/operator/mina_account/lib/.gitignore b/operator/mina_account/lib/.gitignore new file mode 100644 index 000000000..515b4e71b --- /dev/null +++ b/operator/mina_account/lib/.gitignore @@ -0,0 +1,5 @@ +/target + +libmina_account_verifier.so +libmina_account_verifier.a +libmina_account_verifier.dylib diff --git a/operator/mina_account/lib/Cargo.lock b/operator/mina_account/lib/Cargo.lock new file mode 100644 index 000000000..53ebdb14f --- /dev/null +++ b/operator/mina_account/lib/Cargo.lock @@ -0,0 +1,2364 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "ark-ec" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.11.2", + "rayon", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.3.0" +source = "git+https://github.com/openmina/algebra?branch=openmina#017531e7aaa15a2c856532b0843876e371b01122" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", + "rayon", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bcs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "binprot" +version = "0.1.8" +source = "git+https://github.com/openmina/binprot-rs?rev=2b5a909#2b5a9099a1c5640559d04e39899da301aebc8023" +dependencies = [ + "binprot_derive", + "byteorder", + "md5", +] + +[[package]] +name = "binprot_derive" +version = "0.1.7" +source = "git+https://github.com/openmina/binprot-rs?rev=2b5a909#2b5a9099a1c5640559d04e39899da301aebc8023" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d08263faac5cde2a4d52b513dadb80846023aade56fcd8fc99ba73ba8050e92" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +dependencies = [ + "sha2 0.9.9", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "cc" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "907d8581360765417f8f2e0e7d602733bbed60156b4465b7617243689ef9b83d" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.71", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 2.0.71", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "disjoint-set" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d102f1a462fdcdddce88d6d46c06c074a2d2749b262230333726b06c52bb7585" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "groupmap" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "rand", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version 0.4.0", + "serde", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kimchi" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "blake2", + "disjoint-set", + "groupmap", + "hex", + "itertools", + "mina-curves", + "mina-poseidon", + "num-bigint", + "num-derive", + "num-integer", + "num-traits", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "once_cell", + "poly-commitment", + "rand", + "rand_core", + "rayon", + "rmp-serde", + "serde", + "serde_with 1.14.0", + "strum", + "strum_macros", + "thiserror", + "turshi", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "linkme" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb76662d78edc9f9bf56360d6919bdacc8b7761227727e5082f128eeb90bbf5" +dependencies = [ + "linkme-impl", +] + +[[package]] +name = "linkme-impl" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dccda732e04fa3baf2e17cf835bfe2601c7c2edafd64417c627dabae3a8cda" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mina-account-verifier-ffi" +version = "0.1.0" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "base64 0.22.1", + "blake2", + "bs58 0.5.1", + "hex", + "kimchi", + "lazy_static", + "mina-curves", + "mina-p2p-messages", + "mina-tree", + "o1-utils 0.1.0 (git+https://github.com/lambdaclass/proof-systems?branch=add-verifier-serializations)", + "once_cell", + "poly-commitment", + "rmp-serde", + "serde", + "serde_json", + "sha3", +] + +[[package]] +name = "mina-curves" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", +] + +[[package]] +name = "mina-hasher" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ff", + "bitvec", + "mina-curves", + "mina-poseidon", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "serde", +] + +[[package]] +name = "mina-p2p-messages" +version = "0.6.4" +source = "git+https://github.com/lambdaclass/openmina/?branch=mina_bridge#fb6768dffc184e10d47f1082e800e79b8a5b68a4" +dependencies = [ + "ark-ff", + "base64 0.13.1", + "binprot", + "binprot_derive", + "blake2", + "bs58 0.4.0", + "derive_more", + "hex", + "mina-curves", + "mina-hasher", + "mina-poseidon", + "mina-signer", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "rsexp", + "serde", + "serde_json", + "sha2 0.10.8", + "thiserror", + "time", +] + +[[package]] +name = "mina-poseidon" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "mina-curves", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "once_cell", + "rand", + "rayon", + "serde", + "serde_with 1.14.0", +] + +[[package]] +name = "mina-signer" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "bitvec", + "blake2", + "bs58 0.4.0", + "hex", + "mina-curves", + "mina-hasher", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "rand", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "mina-tree" +version = "0.6.0" +source = "git+https://github.com/lambdaclass/openmina/?branch=mina_bridge#fb6768dffc184e10d47f1082e800e79b8a5b68a4" +dependencies = [ + "anyhow", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "backtrace", + "base64 0.13.1", + "bitvec", + "blake2", + "bs58 0.4.0", + "chrono", + "crc32fast", + "derive_more", + "getrandom", + "hex", + "itertools", + "kimchi", + "lazy_static", + "libc", + "mina-curves", + "mina-hasher", + "mina-p2p-messages", + "mina-poseidon", + "mina-signer", + "num-bigint", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "once_cell", + "openmina-core", + "poly-commitment", + "postcard", + "rand", + "rand_pcg", + "rand_seeder", + "rayon", + "serde", + "serde_json", + "serde_with 3.8.3", + "sha2 0.10.8", + "static_assertions", + "thiserror", + "tuple-map", + "uuid", + "wasm-bindgen", + "wasm_thread", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "multihash" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", + "sha2 0.10.8", + "sha3", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" +dependencies = [ + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "rand", + "serde", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "o1-utils" +version = "0.1.0" +source = "git+https://github.com/lambdaclass/proof-systems?branch=add-verifier-serializations#5bdeab3c2a43a671645952f63b9354b7a20b2326" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "bcs", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "rand", + "rand_core", + "rayon", + "serde", + "serde_with 3.8.3", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "o1-utils" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "bcs", + "hex", + "num-bigint", + "num-integer", + "num-traits", + "rand", + "rand_core", + "rayon", + "serde", + "serde_with 1.14.0", + "sha2 0.10.8", + "thiserror", +] + +[[package]] +name = "object" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openmina-core" +version = "0.6.0" +source = "git+https://github.com/lambdaclass/openmina/?branch=mina_bridge#fb6768dffc184e10d47f1082e800e79b8a5b68a4" +dependencies = [ + "ark-ff", + "binprot", + "binprot_derive", + "hex", + "lazy_static", + "md5", + "mina-hasher", + "mina-p2p-messages", + "multihash", + "openmina-macros", + "redux", + "serde", + "sha2 0.10.8", + "slab", + "time", + "tokio", + "tracing", +] + +[[package]] +name = "openmina-macros" +version = "0.6.0" +source = "git+https://github.com/lambdaclass/openmina/?branch=mina_bridge#fb6768dffc184e10d47f1082e800e79b8a5b68a4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pest" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "poly-commitment" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "blake2", + "groupmap", + "itertools", + "mina-curves", + "mina-poseidon", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", + "once_cell", + "rand", + "rand_core", + "rayon", + "serde", + "serde_with 1.14.0", + "thiserror", +] + +[[package]] +name = "postcard" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +dependencies = [ + "cobs", + "embedded-io", + "heapless", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_seeder" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2890aaef0aa82719a50e808de264f9484b74b442e1a3a0e5ee38243ac40bdb" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redux" +version = "0.1.0" +source = "git+https://github.com/openmina/redux-rs.git?rev=2d1d8db#2d1d8dbd7239c0aec91db8f11126b90068dc848b" +dependencies = [ + "enum_dispatch", + "linkme", + "paste", + "serde", + "wasm-timer", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rsexp" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3df9a9b6491d42c0fc527e92a87525c17e45c6b9c22345702a6dc0400320bf1" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "serde_json" +version = "1.0.120" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +dependencies = [ + "serde", + "serde_with_macros 1.5.2", +] + +[[package]] +name = "serde_with" +version = "3.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e73139bc5ec2d45e6c5fd85be5a46949c1c39a4c18e56915f5eb4c12f975e377" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.8.3", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b80d3d6b56b64335c0180e5ffde23b3c5e08c14c585b51a15bd0e95393f46703" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", + "serde", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +dependencies = [ + "backtrace", + "pin-project-lite", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tuple-map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d5919d7121237af683b7fa982450597b1eaa2643e597aec3b519e4e5ab3d62" + +[[package]] +name = "turshi" +version = "0.1.0" +source = "git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf#44e0d3b98b8747de54e595f53d97c035ff43167c" +dependencies = [ + "ark-ff", + "hex", + "o1-utils 0.1.0 (git+https://github.com/openmina/proof-systems?branch=ledger-newtypes-rampup4-vrf)", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "git+https://github.com/fusetim/wasm-timer?branch=tim-add-missing-methods#39e1c2818944f804d68d64dae0d5639d22b0e59e" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm_thread" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a52fc987e67957cab58160d1ea273a2886972ef6f59c7fa0c02e9fe2c8e11706" +dependencies = [ + "async-channel", + "futures", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] diff --git a/operator/mina_account/lib/Cargo.toml b/operator/mina_account/lib/Cargo.toml new file mode 100644 index 000000000..3afe0ed17 --- /dev/null +++ b/operator/mina_account/lib/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "mina-account-verifier-ffi" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib", "staticlib", "lib"] + +[dependencies] +kimchi = { git = "https://github.com/openmina/proof-systems", branch = "ledger-newtypes-rampup4-vrf" } +poly-commitment = { git = "https://github.com/openmina/proof-systems", branch = "ledger-newtypes-rampup4-vrf" } +mina-curves = { git = "https://github.com/openmina/proof-systems", branch = "ledger-newtypes-rampup4-vrf" } +o1-utils = { git = "https://github.com/lambdaclass/proof-systems", branch = "add-verifier-serializations" } +ark-ff = { version = "0.3.0", features = ["parallel", "asm"] } +ark-ec = { version = "0.3.0", features = ["parallel"] } +ark-poly = { version = "0.3.0", features = ["parallel"] } +ark-serialize = "0.3.0" +serde = "1.0.197" +rmp-serde = "1.1.2" +serde_json = "1.0.118" +hex = "0.4.3" +mina-tree = { git = "https://github.com/lambdaclass/openmina/", branch = "mina_bridge" } +mina-p2p-messages = { git = "https://github.com/lambdaclass/openmina/", branch = "mina_bridge" } +base64 = "0.22.1" +bs58 = "0.5.1" +lazy_static = "1.5.0" +blake2 = "0.10.6" +once_cell = "1.19.0" +sha3 = "0.10.8" + +[patch.crates-io] +ark-ff = { git = "https://github.com/openmina/algebra", branch = "openmina" } +ark-ec = { git = "https://github.com/openmina/algebra", branch = "openmina" } +ark-poly = { git = "https://github.com/openmina/algebra", branch = "openmina" } +ark-serialize = { git = "https://github.com/openmina/algebra", branch = "openmina" } diff --git a/operator/mina_account/lib/mina_account_verifier.h b/operator/mina_account/lib/mina_account_verifier.h new file mode 100644 index 000000000..15b3d7e25 --- /dev/null +++ b/operator/mina_account/lib/mina_account_verifier.h @@ -0,0 +1,6 @@ +#include + +bool verify_account_inclusion_ffi(unsigned char *proof_buffer, + unsigned int proof_len, + unsigned char *public_input_buffer, + unsigned int public_input_len); diff --git a/operator/mina_account/lib/src/lib.rs b/operator/mina_account/lib/src/lib.rs new file mode 100644 index 000000000..10c1955a5 --- /dev/null +++ b/operator/mina_account/lib/src/lib.rs @@ -0,0 +1,113 @@ +use kimchi::o1_utils::FieldHelpers; +use merkle_verifier::verify_merkle_proof; +use mina_curves::pasta::Fp; +use mina_tree::MerklePath; + +mod merkle_verifier; + +// TODO(xqft): check sizes +const MAX_PROOF_SIZE: usize = 16 * 1024; +const MAX_PUB_INPUT_SIZE: usize = 6 * 1024; +const MINA_HASH_SIZE: usize = 32; +const KECCAK_HASH_SIZE: usize = 32; + +#[no_mangle] +pub extern "C" fn verify_account_inclusion_ffi( + proof_bytes: &[u8; MAX_PROOF_SIZE], + proof_len: usize, + public_input_bytes: &[u8; MAX_PUB_INPUT_SIZE], + public_input_len: usize, +) -> bool { + // TODO(xqft): we need to send account data as part of the proof. This way + // some account fields (like public key) can be included in the public inputs + // and validated in this verifier. A smart contract could implement Poseidon + // and hash the data itself but it's prohibitively expensive. + + let (merkle_root, account_hash, _account_id_hash) = + match parse_pub_inputs(&public_input_bytes[..public_input_len]) { + Ok(pub_inputs) => pub_inputs, + Err(err) => { + eprintln!("Failed to parse public inputs: {}", err); + return false; + } + }; + + let merkle_proof = match parse_proof(&proof_bytes[..proof_len]) { + Ok(proof) => proof, + Err(err) => { + eprintln!("Failed to parse merkle proof: {}", err); + return false; + } + }; + + // TODO(xqft): when the needed account GraphQL query is done, do: + // 1. send encoded account as part of the proof + // 2. define account_id from encoded account. + // 3. assert keccak256(account_id) == account_id_hash + + verify_merkle_proof(account_hash, merkle_proof, merkle_root) +} + +fn parse_mina_hash(pub_inputs: &[u8], offset: &mut usize) -> Result { + let hash = pub_inputs + .get(*offset..*offset + MINA_HASH_SIZE) + .ok_or("Failed to slice Mina hash".to_string()) + .and_then(|bytes| Fp::from_bytes(bytes).map_err(|err| err.to_string()))?; + + *offset += MINA_HASH_SIZE; + + Ok(hash) +} + +fn parse_keccak256_hash( + pub_inputs: &[u8], + offset: &mut usize, +) -> Result<[u8; KECCAK_HASH_SIZE], String> { + let mut hash = [0; KECCAK_HASH_SIZE]; + hash.copy_from_slice( + pub_inputs + .get(*offset..*offset + KECCAK_HASH_SIZE) + .ok_or("Failed to slice keccak hash".to_string())?, + ); + + *offset += KECCAK_HASH_SIZE; + + Ok(hash) +} + +fn parse_pub_inputs(pub_inputs: &[u8]) -> Result<(Fp, Fp, [u8; KECCAK_HASH_SIZE]), String> { + let mut offset = 0; + + let merkle_root = parse_mina_hash(pub_inputs, &mut offset)?; + let account_hash = parse_mina_hash(pub_inputs, &mut offset)?; + let account_id_hash = parse_keccak256_hash(pub_inputs, &mut offset)?; + + Ok((merkle_root, account_hash, account_id_hash)) +} + +fn parse_proof(proof_bytes: &[u8]) -> Result, String> { + let merkle_path_bytes = proof_bytes.chunks_exact(MINA_HASH_SIZE + 1); + + if !merkle_path_bytes.remainder().is_empty() { + return Err(format!( + "Merkle path bytes not a multiple of HASH_SIZE + 1 ({})", + MINA_HASH_SIZE + 1 + )); + } + + merkle_path_bytes + .map(|bytes| { + let left_or_right = bytes + .first() + .ok_or("left_or_right byte not found".to_string())?; + let hash = Fp::from_bytes(&bytes[1..]).map_err(|err| { + format!("Failed to convert merkle hash into field element: {err}") + })?; + match left_or_right { + 0 => Ok(MerklePath::Left(hash)), + 1 => Ok(MerklePath::Right(hash)), + _ => Err("Unexpected left_or_right byte".to_string()), + } + }) + .collect() +} diff --git a/operator/mina_account/lib/src/merkle_verifier.rs b/operator/mina_account/lib/src/merkle_verifier.rs new file mode 100644 index 000000000..d5f6ca13b --- /dev/null +++ b/operator/mina_account/lib/src/merkle_verifier.rs @@ -0,0 +1,51 @@ +use mina_curves::pasta::Fp; +use mina_p2p_messages::v2::hash_with_kimchi; +use mina_tree::MerklePath; +use std::fmt::Write; + +/// Based on OpenMina's implementation +/// https://github.com/openmina/openmina/blob/d790af59a8bd815893f7773f659351b79ed87648/ledger/src/account/account.rs#L1444 +pub fn verify_merkle_proof(merkle_leaf: Fp, merkle_path: Vec, merkle_root: Fp) -> bool { + let mut param = String::with_capacity(16); + + let calculated_root = + merkle_path + .iter() + .enumerate() + .fold(merkle_leaf, |accum, (depth, path)| { + let hashes = match path { + MerklePath::Left(right) => [accum, *right], + MerklePath::Right(left) => [*left, accum], + }; + + param.clear(); + write!(&mut param, "MinaMklTree{:03}", depth).unwrap(); + + hash_with_kimchi(param.as_str(), &hashes) + }); + calculated_root == merkle_root +} + +#[cfg(test)] +mod test { + use ark_serialize::CanonicalDeserialize; + + use super::*; + + #[test] + fn test_verify_merkle_proof() { + let merkle_leaf = Fp::from(0); + let merkle_path = vec![ + MerklePath::Left(Fp::from(0)), + MerklePath::Right(Fp::from(0)), + ]; + let merkle_root = Fp::deserialize( + &[ + 140u8, 130, 39, 24, 215, 108, 36, 34, 181, 80, 10, 131, 110, 152, 243, 145, 144, + 175, 100, 161, 62, 28, 236, 143, 184, 143, 185, 114, 129, 4, 63, 47, + ][..], + ) + .unwrap(); + assert!(verify_merkle_proof(merkle_leaf, merkle_path, merkle_root)) + } +} diff --git a/operator/mina_account/mina_account.go b/operator/mina_account/mina_account.go new file mode 100644 index 000000000..372707a2c --- /dev/null +++ b/operator/mina_account/mina_account.go @@ -0,0 +1,32 @@ +package mina_account + +/* +#cgo darwin LDFLAGS: -L./lib -lmina_account_verifier +#cgo linux LDFLAGS: -L./lib -lmina_account_verifier -ldl -lrt -lm + +#include "lib/mina_account_verifier.h" +*/ +import "C" +import ( + "fmt" + "time" + "unsafe" +) + +// TODO(xqft): check proof size +const MAX_PROOF_SIZE = 16 * 1024 +const MAX_PUB_INPUT_SIZE = 6 * 1024 + +func timer() func() { + start := time.Now() + return func() { + fmt.Printf("Mina account verification took %v\n", time.Since(start)) + } +} + +func VerifyAccountInclusion(proofBuffer [MAX_PROOF_SIZE]byte, proofLen uint, pubInputBuffer [MAX_PUB_INPUT_SIZE]byte, pubInputLen uint) bool { + defer timer()() + proofPtr := (*C.uchar)(unsafe.Pointer(&proofBuffer[0])) + pubInputPtr := (*C.uchar)(unsafe.Pointer(&pubInputBuffer[0])) + return (bool)(C.verify_account_inclusion_ffi(proofPtr, (C.uint)(proofLen), pubInputPtr, (C.uint)(pubInputLen))) +} diff --git a/operator/mina_account/mina_account_test.go b/operator/mina_account/mina_account_test.go new file mode 100644 index 000000000..cec1d42a3 --- /dev/null +++ b/operator/mina_account/mina_account_test.go @@ -0,0 +1,37 @@ +package mina_account_test + +import ( + "fmt" + "os" + "testing" + + "github.com/yetanotherco/aligned_layer/operator/mina_account" +) + +func TestMinaStateProofVerifies(t *testing.T) { + fmt.Println(os.Getwd()) + proofFile, err := os.Open("../../batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.proof") + if err != nil { + t.Errorf("could not open mina account proof file") + } + + proofBuffer := make([]byte, mina_account.MAX_PROOF_SIZE) + proofLen, err := proofFile.Read(proofBuffer) + if err != nil { + t.Errorf("could not read bytes from mina account proof file") + } + + pubInputFile, err := os.Open("../../batcher/aligned/test_files/mina/account_B62qrQKS9ghd91shs73TCmBJRW9GzvTJK443DPx2YbqcyoLc56g1ny9.pub") + if err != nil { + t.Errorf("could not open mina account pub inputs file") + } + pubInputBuffer := make([]byte, mina_account.MAX_PUB_INPUT_SIZE) + pubInputLen, err := pubInputFile.Read(pubInputBuffer) + if err != nil { + t.Errorf("could not read bytes from mina account pub inputs hash") + } + + if !mina_account.VerifyAccountInclusion(([mina_account.MAX_PROOF_SIZE]byte)(proofBuffer), uint(proofLen), ([mina_account.MAX_PUB_INPUT_SIZE]byte)(pubInputBuffer), uint(pubInputLen)) { + t.Errorf("proof did not verify") + } +} diff --git a/operator/pkg/operator.go b/operator/pkg/operator.go index 6d8339da2..d494bc2ba 100644 --- a/operator/pkg/operator.go +++ b/operator/pkg/operator.go @@ -12,6 +12,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/yetanotherco/aligned_layer/operator/mina" + "github.com/yetanotherco/aligned_layer/operator/mina_account" "github.com/yetanotherco/aligned_layer/operator/risc_zero" "github.com/prometheus/client_golang/prometheus" @@ -367,6 +368,17 @@ func (o *Operator) verify(verificationData VerificationData, results chan bool) verificationResult := mina.VerifyProtocolStateProof(([mina.MAX_PROOF_SIZE]byte)(proofBuffer), proofLen, ([mina.MAX_PUB_INPUT_SIZE]byte)(pubInputBuffer), (uint)(pubInputLen)) o.Logger.Infof("Mina state proof verification result: %t", verificationResult) results <- verificationResult + case common.MinaAccount: + proofLen := (uint)(len(verificationData.Proof)) + pubInputLen := (uint)(len(verificationData.PubInput)) + proofBuffer := make([]byte, mina.MAX_PROOF_SIZE) + copy(proofBuffer, verificationData.Proof) + pubInputBuffer := make([]byte, mina.MAX_PUB_INPUT_SIZE) + copy(pubInputBuffer, verificationData.PubInput) + + verificationResult := mina_account.VerifyAccountInclusion(([mina.MAX_PROOF_SIZE]byte)(proofBuffer), proofLen, ([mina.MAX_PUB_INPUT_SIZE]byte)(pubInputBuffer), (uint)(pubInputLen)) + o.Logger.Infof("Mina account inclusion proof verification result: %t", verificationResult) + results <- verificationResult default: o.Logger.Error("Unrecognized proving system ID") results <- false