-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcircuit.json
More file actions
1 lines (1 loc) · 10.9 KB
/
Copy pathcircuit.json
File metadata and controls
1 lines (1 loc) · 10.9 KB
1
{"noir_version":"1.0.0-beta.20+b4236c1957d0c26cb65d82adc9e5447b6ff1d629","hash":"18189522168419456061","abi":{"parameters":[{"name":"signature","type":{"kind":"array","length":64,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"message_hash","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"commits","type":{"kind":"integer","sign":"unsigned","width":32},"visibility":"private"},{"name":"stars","type":{"kind":"integer","sign":"unsigned","width":32},"visibility":"private"},{"name":"events","type":{"kind":"integer","sign":"unsigned","width":32},"visibility":"private"},{"name":"github_id","type":{"kind":"field"},"visibility":"private"},{"name":"github_created_year","type":{"kind":"field"},"visibility":"private"},{"name":"wallet_address_hi","type":{"kind":"field"},"visibility":"private"},{"name":"wallet_address_lo","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"kind":"tuple","fields":[{"kind":"field"},{"kind":"field"},{"kind":"field"},{"kind":"field"},{"kind":"field"}]},"visibility":"public"},"error_types":{"793052368214580486":{"error_kind":"string","string":"github_created_year too far in future"},"2113337992825829542":{"error_kind":"string","string":"wallet_address_hi exceeds 32 bits"},"3384141923987773513":{"error_kind":"string","string":"Oracle signature verification failed"},"4678707111838459275":{"error_kind":"string","string":"github_created_year predates GitHub (2008)"},"6375152501618100998":{"error_kind":"string","string":"wallet_address_lo overflows 128 bits"},"7973031880831318568":{"error_kind":"string","string":"wallet_address_hi overflows 128 bits"},"16288603916478155227":{"error_kind":"string","string":"github_created_year out of Field range"},"16611539098922689513":{"error_kind":"string","string":"github_id exceeds u64 range"}}},"bytecode":"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","debug_symbols":"pZfLTiMxEEX/pdcsul5+8CujEQqhQZGiJGqSkUaIfx9X+lYHFoyQWd2TND4qOy7jfhuepsfLy8Pu8Hx8He5/vQ2P826/37087I/bzXl3PLRv397vhvj4cJ6nqX01fHjeRp0283Q4D/eHy35/N/zZ7C/XP3o9bQ7XPG/m9nS8G6bDU8smfN7tJ6f3u9vo8euh1QSDq9k63Oi744mkQkCk3GNgivpJVL4yyH8MY5K1BqmrgeTbNYiltYakPbPQTGHQknsMNq7rYFy6DCWHIZH0GBKv65BS6jFk5jBk6ZpFriUMhbp+i1LW/VDHrhqq6Gqw2mXIsQ48jj0Gvu3q1iFjj4FMV0Pu6W4WjR3FkrpqkGSrIae+GtLNkLsMhVZDlZ/WUHv2JKtEd7NqVw2qZTVY6TJwvRm69qTe9qRm/WkNfXvSaP01jbtWsh2vq0FyXw3jzdD1W5iu54MZ/7QG+7wOv9unzXY3f7ptDLUO9+1AaIcJkpCMFKQiDZmQGVmQ8BF8BB/BR/ARfAQfwUfwEXwEH8PH8DF8DB/Dx/AxfAwfw8fwCXwCn8An8Al8Ap/AJ/AJfAKfwqfwKXwKn8Kn8Cl8Cp/Cp/AZfAafwWfwGXzWfObZfMkzIwuyLplGJCEZKUhFGhK+1HzZs/mKZ10yj0hCMlKQijRkQmYkfLn5WvNTGf3O5kABHCAB6pc5BwtIATmg+O3RoQLqGEABHCABGmABKSAHhLnCzOMY4GZx4AAJ0AALSAE5oARUgHfPAmGmMFOYvYNIHdxsDm5ODjmgBFSA99ECFODm7CABGmABbi4OOaAEVIB3FI8OFMABEqB+7XCwgGb22yF7Yy1QAirAe4t9yt5cC3CABLjZF8EbbIEUkAPc7FP2JruCd9kCFOBmn7I32gIaYAFu9il7sy1QAirA+83/u7M33AIcIAHNLL4I3nQLpIDs8O4n/bzbPO4nvBo+Xw7bD2+K57+neBLvkqf5uJ2eLvPk5/z1WTv5/wE=","file_map":{"13":{"source":"// docs:start:ecdsa_secp256k1\n/// Verifies a ECDSA signature over the secp256k1 curve.\n/// - inputs:\n/// - x coordinate of public key as 32 bytes\n/// - y coordinate of public key as 32 bytes\n/// - the signature, as a 64 bytes array\n/// The signature internally will be represented as `(r, s)`,\n/// where `r` and `s` are fixed-sized big endian scalar values.\n/// As the `secp256k1` has a 256-bit modulus, we have a 64 byte signature\n/// while `r` and `s` will both be 32 bytes.\n/// We expect `s` to be normalized. This means given the curve's order,\n/// `s` should be less than or equal to `order / 2`.\n/// This is done to prevent malleability.\n/// For more context regarding malleability you can reference BIP 0062.\n/// - the hash of the message, as a vector of bytes\n/// - output: false for failure and true for success\npub fn verify_signature(\n public_key_x: [u8; 32],\n public_key_y: [u8; 32],\n signature: [u8; 64],\n message_hash: [u8; 32],\n) -> bool\n// docs:end:ecdsa_secp256k1\n{\n _verify_signature(public_key_x, public_key_y, signature, message_hash, true)\n}\n\n#[foreign(ecdsa_secp256k1)]\nfn _verify_signature(\n public_key_x: [u8; 32],\n public_key_y: [u8; 32],\n signature: [u8; 64],\n message_hash: [u8; 32],\n predicate: bool,\n) -> bool {}\n","path":"std/ecdsa_secp256k1.nr","function_locations":[{"start":1057,"name":"verify_signature"},{"start":1333,"name":"_verify_signature"}]},"51":{"source":"use std::ecdsa_secp256k1;\n\n// GrantOS ZK Coprocessor v2\n//\n// Public outputs: (tier, github_id, github_created_year, wallet_address_hi, wallet_address_lo)\n//\n// Payload signed by oracle (SHA-256 of ABI-encoded):\n// (wallet_address: address, github_id: uint256, github_created_year: uint256,\n// commits: uint32, stars: uint32, events: uint32)\n\nfn main(\n // Private inputs\n signature: [u8; 64],\n message_hash: [u8; 32],\n commits: u32,\n stars: u32,\n events: u32,\n\n // Public inputs\n github_id: Field,\n github_created_year: Field,\n wallet_address_hi: Field,\n wallet_address_lo: Field,\n) -> pub (Field, Field, Field, Field, Field) {\n\n // Hardcoded oracle public key (derived from ORACLE_PRIVATE_KEY v2)\n let oracle_pub_key_x: [u8; 32] = [110, 7, 53, 10, 88, 38, 90, 166, 213, 99, 10, 179, 68, 179, 107, 109, 138, 180, 16, 29, 82, 102, 229, 134, 181, 248, 137, 250, 184, 119, 48, 88];\n let oracle_pub_key_y: [u8; 32] = [13, 56, 187, 15, 188, 160, 220, 154, 229, 207, 122, 15, 178, 84, 33, 38, 184, 100, 170, 22, 26, 122, 191, 112, 141, 111, 120, 31, 122, 98, 17, 234];\n\n // Step 1: verify oracle ECDSA signature\n let is_valid = ecdsa_secp256k1::verify_signature(\n oracle_pub_key_x,\n oracle_pub_key_y,\n signature,\n message_hash,\n );\n assert(is_valid, \"Oracle signature verification failed\");\n\n // Step 2: range-check public inputs\n let id_u64: u64 = github_id as u64;\n assert(github_id == id_u64 as Field, \"github_id exceeds u64 range\");\n\n let year_u32: u32 = github_created_year as u32;\n assert(github_created_year == year_u32 as Field, \"github_created_year out of Field range\");\n assert(year_u32 >= 2008, \"github_created_year predates GitHub (2008)\");\n assert(year_u32 <= 2100, \"github_created_year too far in future\");\n\n let hi_u128: u128 = wallet_address_hi as u128;\n let lo_u128: u128 = wallet_address_lo as u128;\n assert(wallet_address_hi == hi_u128 as Field, \"wallet_address_hi overflows 128 bits\");\n assert(wallet_address_lo == lo_u128 as Field, \"wallet_address_lo overflows 128 bits\");\n assert(hi_u128 < 0x100000000, \"wallet_address_hi exceeds 32 bits\");\n\n // Step 3: compute contribution tier\n // 0 = Member 1 = Bronze 2 = Silver 3 = Gold\n let mut tier: Field = 0;\n\n if (commits > 500) | (stars > 100) | (events > 100) {\n tier = 3;\n } else if (commits > 100) | (stars > 20) | (events > 30) {\n tier = 2;\n } else if (commits > 10) | (stars > 5) | (events > 5) {\n tier = 1;\n }\n\n // Step 4: return public outputs\n (tier, github_id, github_created_year, wallet_address_hi, wallet_address_lo)\n}\n","path":"/home/mac-5/work/hackathons/GrantOS-Contracts/circuits/src/main.nr","function_locations":[{"start":699,"name":"main"}]}}}