Skip to content

Commit b9dbb23

Browse files
committed
chore(aptos): fix verifying key
Signed-off-by: aeryz <[email protected]>
1 parent be79cec commit b9dbb23

File tree

9 files changed

+119
-2109
lines changed

9 files changed

+119
-2109
lines changed

Cargo.lock

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

aptos/ibc/sources/cometbls_lc.move

+19-11
Original file line numberDiff line numberDiff line change
@@ -796,25 +796,33 @@ module ibc::cometbls_lc {
796796

797797
#[test]
798798
fun see_proof() {
799-
let client_state =
800-
decode_client_state(
801-
x"0e756e696f6e2d6465766e65742d3100c05bbba87a050000e0926517010000000000000000000000000000000000000100000000000000580f000000000000ade4a5f5803a439835c636395a8d648dee57b2fc90d98dc17fa887159b69638b"
802-
);
803799
let proof =
804800
x"4103ade4a5f5803a439835c636395a8d648dee57b2fc90d98dc17fa887159b69638b91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7202a952c4d0b798ec0de2a4f9ffbd7aa3b235518b01fee732288096f9ffda2f80d040002ca3d07260204ca3d20adedf132c9cb77bb904388a64fa0fc1b54938ae672604ce9336aa3421347039e2000260406ca3d2059afec8947be61dc17607388c182dae393f33034af7326e70a6b5f0fff312641200026060eca3d20b8722feb939d1e679cf98a8502aac872fc432a2fa768176d4c148ff4f114df782000050a1eca3d202120f877e465d7a5540812ba9a0e61cd191793464aa00866684aa8f4e82b4592a57e260c4aca3d201caa81c27aa4b33f8ff2965a354af7d27ace46dce1848a0e50f93dafb619c5e22000050e64ca3d202120ea740f79511dd9416b7d9cda5f898a14d92004d6d8ca2e60b6b11b377b42b3892710a201ca3d202af9228506f9f6fd89ef79e404f830a92e0b92d5722bc532bc27d8e1b35c42412000047761736d2001b43353b2931d22228e157ed588bf40e87d0cbfcf6dc7c31a4c0618c19c83890100022101e3fff914e010fc236318926fc50bbd8b72dd31fcb8af7e74c1c2024ffbd559930021012cf0c2aa4e971f5ea8ad3b77d421d1bf7d1d466bafb3f171252fa2da1ee1a58f00";
805801

806802
let proof = ics23::decode_membership_proof(proof);
807803

808804
std::debug::print(&proof);
809-
std::debug::print(&client_state);
805+
}
810806

811-
let key = ibc::commitment::connection_commitment_key(4);
812-
std::debug::print(&key);
807+
#[test]
808+
fun test_zkp_works() {
809+
let consensus =
810+
decode_consensus_state(
811+
x"00000000000000000000000000000000000000000000000018278e59cf08a67d3b1d403acd5f51abf9fc88024262e860935f014492dad5e7e69fb7212859a40912f1896da178c747a930cbc87d8e33b87c1d1fae377ab167523fa07d579fdb22"
812+
);
813+
let header =
814+
decode_header(
815+
x"6ee4480000000000432cbe67000000002114361112f1896da178c747a930cbc87d8e33b87c1d1fae377ab167523fa07d579fdb2212f1896da178c747a930cbc87d8e33b87c1d1fae377ab167523fa07d579fdb2221befefbd32576db7295e9ea22f75ca8111f3b983746c3cbaf9454dfddc7ef8e090000000000000058e4480000000000c0011b68961bb5f6bfb3b871f2ccaee38e9730d021121a356b9fd27ae2f1ccdca2a2930f540e8e5b8d162af95961be98d262c152902185bba758d76982e5fb39db112acea2d0916ead9ebc7cc0f9b242a55265804f65fff735f100556ec2a8a9f89a3bc27be5bb57ab0577c7d0a2f13fa221886e9309bf3b3ad8c59f319888ab4f971e752f83110ef218cad61d4b89a788c101cdc300b0ef7222ab8430d49f4d7c8a664182c3b959a176a52e9fa04a1fb20a0ee7bcf06066e19e171925c05bcc2c25"
816+
);
813817

814-
let path = vector<u8>[0x03];
815-
vector::append(&mut path, client_state.contract_address);
816-
vector::append(&mut path, key);
817-
std::debug::print(&path);
818+
let res =
819+
groth16_verifier::verify_zkp(
820+
&string::utf8(b"union-testnet-9"),
821+
&consensus.next_validators_hash,
822+
light_header_as_input_hash(&header.signed_header),
823+
&header.zero_knowledge_proof
824+
);
818825

826+
assert!(res, 1);
819827
}
820828
}

aptos/ibc/sources/groth16_verifier.move

+13-26
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,18 @@ module ibc::groth16_verifier {
9090

9191
friend ibc::cometbls_lc;
9292

93-
const ALPHA_G1: vector<u8> = x"99a818c167016f7f6d02d84005a5ed1f7c6c19c4ddf15733b67acc0129076709ff810d9d3374808069c1ea1e5d263a90cf8181b98b415805797176357acec708";
94-
const BETA_G2: vector<u8> = x"742884ea18a00ef31874d5fc5511b18fa9391dc69b971b898a2dbfc644033f15656dc92f1f94dc170026cd80212e5160d2539e7e8b40885d1d60b770d25f3599";
95-
const GAMMA_G2: vector<u8> = x"19b6719e42c42ed1df46fa08c870c5241a52913b65d9b43679e089c2e0bb1622cf3a489ca7927f4f81400a2ebd739a935bceb3224264eff8e248311ae96be7a0";
96-
const DELTA_G2: vector<u8> = x"eb044ddb951e9b28eda7da93aba341ef2c96a4d6182ca785a32018c9c803d405fcb9f04a31c988a2f5a64710ffafe101831d6147259b54e45d47e0d1184c5e29";
97-
const PEDERSEN_G: vector<u8> = x"5ae56dc014a8137712f4584658ba6f7e390cc39892f97e56ca859887d8d8f0138719bd9ffa2bba963951da2e08ba92ffc1049ba2f1fd7d7f03b02c13f8f67d25";
98-
const PEDERSEN_G_ROOT_SIGMA_NEG: vector<u8> = x"af5b4e30123a344339321dd621b5fdf9cd9870625928fa07235f011cdf04a1026863cae2f2b0c0ce457e81ad25a068fb1cb86026096be8e3f75c55a741e1bfaf";
93+
const ALPHA_G1: vector<u8> = x"c7e253d6dbb0b365b15775ae9f8aa0ffcc1c8cde0bd7a4e8c0b376b0d92952240223184a278d794b2d6bc8c64a0b007ab47333fa5e4be9464eb8db8859c83ea5";
94+
const BETA_G2: vector<u8> = x"44d2615ebda233e141f4ca0a1270e1269680b20507d55f6872540af6c1bc2424dba1298a9727ff392b6f7f48b3e88e20cf925b7024be9992d3bbfae8820a0987";
95+
const GAMMA_G2: vector<u8> = x"edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e99";
96+
const DELTA_G2: vector<u8> = x"dc047186b12c9c677d34f3e2d5c826655e363239ee6eb2e4348d3fa7d2a5ac02e6972cd8563ce0d488b8063c4e51559172db66508e31265a07de0ba9efdbb887";
97+
const PEDERSEN_G: vector<u8> = x"edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e19";
98+
const PEDERSEN_G_ROOT_SIGMA_NEG: vector<u8> = x"dc047186b12c9c677d34f3e2d5c826655e363239ee6eb2e4348d3fa7d2a5ac02e6972cd8563ce0d488b8063c4e51559172db66508e31265a07de0ba9efdbb887";
9999
const GAMMA_ABC_G1: vector<vector<u8>> = vector[
100-
x"81925330941d53d8cec1c44210f6c882fee82c4ae97cb64b4f864327e54318270624cb7325a89fea7ad2cbde478a7ba38eca18bba1f024f672b1f89cc6423325",
101-
x"ca4b125d5e1a2ec0e22672434fbe9ca0e3ca15b0c20e16e9020ed6f471be0d0b0ce070b6a8b95f687014d83de09f9efe33caaf16aa92e5ec888376d3eb9a0b13",
102-
x"c790c4a1918ab12e7e3c36005b2f5cbcf5408ced98033571760c7cf4d5939e02d9f1ee6a9c13b6ebbe2e11dab23f5600040fcb833bb5798faecf9d451005f12c"
100+
x"3e2753d1e56abd9bd5fbbdd7fa35f27f7bc43c0cc97335453e1df217388a5d2f32c4e7d7178d82fcdc848793025d76c8ea0f0a2387fc75ce86fdb14221a27f14",
101+
x"9a6bb65aef69c0c8f60f1a8c833e4904686ca4083a89201ad07b991c8eb9812a6ffb78639dadc1986e57987c20a67bcc94ec57f1a1d6d420ec5c07a8ad3869a7",
102+
x"b76ab396dfe5e21691ff953b5d5edafffd6e49fbe75e5ce39cf80d14ce969417fc3c9f640033aad5e454cdd85f8e8c93a5466e647d6b670359ce8846d4e72603"
103103
];
104+
104105
const HMAC_O: vector<u8> = x"1F333139281E100F5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C";
105106
const HMAC_I: vector<u8> = x"75595B5342747A653636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636";
106107
const PRIME_R_MINUS_ONE: vector<u8> = x"000000f093f5e1439170b97948e833285d588181b64550b829a031e1724e6430";
@@ -297,28 +298,14 @@ module ibc::groth16_verifier {
297298
fun test_verify_zkp_ok() {
298299
let zkp =
299300
parse_zkp(
300-
vector[
301-
182, 45, 6, 207, 148, 135, 217, 54, 117, 138, 138, 207, 38, 255, 85,
302-
190, 238, 132, 244, 47, 117, 22, 101, 146, 207, 194, 213, 80, 167, 72,
303-
74, 169, 246, 165, 153, 78, 96, 154, 235, 56, 127, 151, 155, 175, 8, 5,
304-
20, 89, 168, 115, 208, 45, 210, 54, 93, 85, 134, 82, 203, 239, 77, 255,
305-
247, 47, 67, 186, 201, 193, 137, 216, 93, 133, 119, 57, 224, 118, 172,
306-
226, 5, 60, 156, 213, 39, 230, 252, 194, 253, 59, 76, 37, 204, 76, 224,
307-
168, 184, 14, 195, 138, 89, 220, 217, 178, 116, 29, 75, 36, 245, 254,
308-
131, 116, 240, 25, 125, 19, 134, 222, 239, 34, 17, 253, 116, 209, 179,
309-
101, 103, 204, 117, 146, 64, 57, 108, 169, 217, 240, 192, 178, 192, 20,
310-
145, 189, 30, 252, 229, 53, 30, 188, 117, 24, 192, 28, 130, 184, 137,
311-
18, 183, 238, 98, 33, 173, 24, 10, 108, 233, 132, 185, 129, 54, 66,
312-
128, 116, 227, 120, 228, 91, 88, 217, 52, 6, 207, 159, 57, 154, 165,
313-
76, 142, 198, 160, 81, 127, 224, 177, 31
314-
]
301+
x"21dd0bec9257ffaf9257d81e735ad91c0cf7ea0f10825a44d2031e2a1456cf03c734368377259eb336ef0f75ca08e6968c1840d53d73462566e17cdd901195025e949c5e386430974e0667a8c9d7523aec088df879bd2c8c76210493f1e7bc068ba4bf6e6fd6c6ba7e3405539a07042ee871009a1d4de53360a328a05b8a17ae39481dbf8678e72dbcea77beee754378cf31561cf23dd84bcadd83f62cdc8da6d2bde655171be094768d965d96cc1de0b6a1036506bfaaeed0b680f3369fbf89"
315302
);
316303

317304
let res =
318305
verify_zkp(
319306
&std::string::utf8(b"union-devnet-1337"),
320-
&x"1B7EA0F1B3E574F8D50A12827CCEA43CFF858C2716AE05370CC40AE8EC521FD8",
321-
x"00000000000000000000000000000000000000000000000000000000cafebabe0000000000000000000000000000000000000000000000000000000065f87b2e000000000000000000000000000000000000000000000000000000001dc74c161b7ea0f1b3e574f8d50a12827ccea43cff858c2716ae05370cc40ae8ec521fd81b7ea0f1b3e574f8d50a12827ccea43cff858c2716ae05370cc40ae8ec521fd83a34fc963eefaae9b7c0d3dff89180d91f3e31073e654f732340ceedd77dd25b",
307+
&x"20DDFE7A0F75C65D876316091ECCD494A54A2BB324C872015F73E528D53CB9C4",
308+
x"00000000000000000000000000000000000000000000000000000000cafebabe00000000000000000000000000000000000000000000000000000000673f5ac3000000000000000000000000000000000000000000000000000000003b7e468e20ddfe7a0f75c65d876316091eccd494a54a2bb324c872015f73e528d53cb9c420ddfe7a0f75c65d876316091eccd494a54a2bb324c872015f73e528d53cb9c4ee7e3e58f98ac95d63ce93b270981df3ee54ca367f8d521ed1f444717595cd36",
322309
&zkp
323310
);
324311

aptos/ibc/sources/ibc.move

+4-1
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,10 @@ module ibc::ibc {
508508
proof_height: u64
509509
) acquires IBCStore {
510510
assert!(
511-
smart_table::contains(&borrow_global<IBCStore>(get_vault_addr()).connections, connection_id),
511+
smart_table::contains(
512+
&borrow_global<IBCStore>(get_vault_addr()).connections,
513+
connection_id
514+
),
512515
E_CONNECTION_DOES_NOT_EXIST
513516
);
514517

lib/gnark-key-parser/Cargo.toml

+5
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,8 @@ ark-ff = { version = "0.4.2", default-features = false }
1717
hex = { workspace = true, features = ["alloc"] }
1818
substrate-bn = { version = "0.6", default-features = false }
1919
thiserror = { workspace = true }
20+
21+
[dev-dependencies]
22+
ark-bn254 = { version = "0.4", default-features = false, features = ["curve"] }
23+
ark-serialize = "0.4.2"
24+
num-bigint = { workspace = true }

lib/gnark-key-parser/src/lib.rs

+73-1
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ pub fn parse_affine_g2(buf: &[u8]) -> Result<(usize, AffineG2), Error> {
271271
#[cfg(test)]
272272
mod tests {
273273
use ark_ff::BigInt;
274+
use ark_serialize::CanonicalSerialize;
275+
use num_bigint::BigUint;
274276

275277
use super::*;
276278

@@ -447,7 +449,77 @@ mod tests {
447449
}
448450

449451
#[test]
450-
fn dump() {
452+
fn dump_aptos() {
453+
let file = hex::decode("e45229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c7a3eba1776012a292e6780582e7a197913f375a4043e411358d4791b66f53c1d987090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d244998e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6edc3b40f6624e48a7a1d438b5f8f04347ddcaf3deacded6e5c1093e843d6c89a9887b8dbefa90bde075a26318e5066db729155514e3c06b888d4e03c56d82c97e602aca5d2a73f8d34e4b26eee3932365e6526c8d5e2f3347d679c2cb1867104dc00000003af5d8a3817f21d3e453573c90c3cc47b7ff235fad7bdfbd59bbd6ae5d153273eea81b98e1c997bd01a20893a08a46c6804493e838c1a0ff6c8c069ef5ab66b9a979496ce140df89ce35c5ee7fb496efdffda5e5d3b95ff9116e2e5df96b36ab70000000100000000998e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6edc7b8dbefa90bde075a26318e5066db729155514e3c06b888d4e03c56d82c97e602aca5d2a73f8d34e4b26eee3932365e6526c8d5e2f3347d679c2cb1867104dc").unwrap();
454+
let (_, parsed_key) = VerifyingKey::parse(&file[..]).unwrap();
455+
456+
let parse_g1 = |g1: &G1| -> String {
457+
let mut g1x = [0u8; 32];
458+
let mut g1y = [0u8; 32];
459+
g1.x().to_big_endian(&mut g1x).unwrap();
460+
g1.y().to_big_endian(&mut g1y).unwrap();
461+
462+
let mut out = Vec::new();
463+
ark_bn254::G1Affine::new(
464+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g1x)),
465+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g1y)),
466+
)
467+
.serialize_uncompressed(&mut out)
468+
.unwrap();
469+
470+
hex::encode(out)
471+
};
472+
473+
let print_g1 = |key: &str, g1: &G1| {
474+
println!("const {key}: vector<u8> = x\"{}\";", parse_g1(g1));
475+
};
476+
477+
let print_g2 = |key: &str, g2: &G2| {
478+
let mut g2x1 = [0u8; 32];
479+
let mut g2x2 = [0u8; 32];
480+
let mut g2y1 = [0u8; 32];
481+
let mut g2y2 = [0u8; 32];
482+
let mut out = Vec::new();
483+
484+
g2.x().real().to_big_endian(&mut g2x1).unwrap();
485+
g2.x().imaginary().to_big_endian(&mut g2x2).unwrap();
486+
g2.y().real().to_big_endian(&mut g2y1).unwrap();
487+
g2.y().imaginary().to_big_endian(&mut g2y2).unwrap();
488+
489+
ark_bn254::G2Affine::new(
490+
ark_bn254::Fq2::new(
491+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g2x1)),
492+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g2x2)),
493+
),
494+
ark_bn254::Fq2::new(
495+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g2y1)),
496+
ark_bn254::Fq::from(BigUint::from_bytes_be(&g2y2)),
497+
),
498+
)
499+
.serialize_compressed(&mut out)
500+
.unwrap();
501+
println!("const {key}: vector<u8> = x\"{}\";", hex::encode(out));
502+
};
503+
504+
print_g1("ALPHA_G1", &parsed_key.alpha_g1);
505+
print_g2("BETA_G2", &parsed_key.beta_neg_g2);
506+
print_g2("GAMMA_G2", &parsed_key.gamma_neg_g2);
507+
print_g2("DELTA_G2", &parsed_key.delta_neg_g2);
508+
print_g2("PEDERSEN_G", &parsed_key.commitment_key.g);
509+
print_g2(
510+
"PEDERSEN_G_ROOT_SIGMA_NEG",
511+
&parsed_key.commitment_key.g_root_sigma_neg,
512+
);
513+
514+
println!("const GAMMA_ABC_G1: vector<vector<u8>> = vector[");
515+
parsed_key.gamma_abc_g1.into_iter().for_each(|g1| {
516+
println!("\tx\"{}\",", parse_g1(&g1));
517+
});
518+
println!("];");
519+
}
520+
521+
#[test]
522+
fn dump_evm() {
451523
let file = hex::decode("e45229d9b076b3c0e8a4d70bde8c1cccffa08a9fae7557b165b3b0dbd653e2c7a3eba1776012a292e6780582e7a197913f375a4043e411358d4791b66f53c1d987090a82e8fabbd39299be24705b92cf208ee8b3487f6f2b39ff27978a29a1db2424bcc1f60a5472685fd50705b2809626e170120acaf441e133a2bd5e61d244998e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6edc3b40f6624e48a7a1d438b5f8f04347ddcaf3deacded6e5c1093e843d6c89a9887b8dbefa90bde075a26318e5066db729155514e3c06b888d4e03c56d82c97e602aca5d2a73f8d34e4b26eee3932365e6526c8d5e2f3347d679c2cb1867104dc00000003af5d8a3817f21d3e453573c90c3cc47b7ff235fad7bdfbd59bbd6ae5d153273eea81b98e1c997bd01a20893a08a46c6804493e838c1a0ff6c8c069ef5ab66b9a979496ce140df89ce35c5ee7fb496efdffda5e5d3b95ff9116e2e5df96b36ab70000000100000000998e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6edc7b8dbefa90bde075a26318e5066db729155514e3c06b888d4e03c56d82c97e602aca5d2a73f8d34e4b26eee3932365e6526c8d5e2f3347d679c2cb1867104dc").unwrap();
452524

453525
let (_, parsed_key) = VerifyingKey::parse(&file[..]).unwrap();

0 commit comments

Comments
 (0)