Step-by-step verification process and blockchain verification results:
{
"blockchain_status": "BLOCKCHAIN_VERIFICATION_FAILED",
"blockchain_verification": {
"network_info": {
"chain_id": 137,
"current_block": 95157004,
"is_testnet": false,
"network": "polygon_mainnet",
"rpc_url": "https://polygon-mainnet.g.alchemy.com/v2/7gs1nnlhLR4Az1nPfl-RU"
},
"verification_method": "dynamic_network_config",
"verified": false
},
"credential_status": "ISSUED",
"cryptographic_status": "VERIFIED_AS_ISSUED",
"cryptographic_verification": {
"computed_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"stored_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"verification_details": {
"computed_merkle_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"credential_hash": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"merkle_proof_array": [],
"roots_match": true,
"stored_merkle_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"verification_method": "cryptographic_merkle_proof_verification"
},
"verified": true
},
"overall_verified": false,
"steps": [
{
"computed_hash": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"description": "Hash the complete credential data using SHA256",
"input": "Full credential JSON data (credentialPreview object)",
"method": "SHA256(JSON.stringify(credentialData, sort_keys=True))",
"note": "For issued credentials, the entire credential data is hashed",
"step": 1
},
{
"computation_details": {
"algorithm": "if bytes(current) \u003c= bytes(sibling): SHA256(current + sibling) else: SHA256(sibling + current)",
"critical_note": "DO NOT use tree index positioning (even=left, odd=right). Use lexicographic byte comparison for deterministic ordering.",
"ordering_rule": "lexicographic_byte_comparison"
},
"computation_example": "Start with credential_hash, compare bytes with sibling1 lexicographically, hash smaller+larger, repeat with result and next sibling",
"computation_method": "For each sibling hash: compare bytes lexicographically, put smaller hash first, then SHA256(smaller + larger)",
"computed_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"credential_hash": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8",
"description": "Compute merkle root using lexicographic byte ordering",
"merkle_proof_array": [],
"roots_match": true,
"step": 2,
"stored_root": "0x7ea86b447fb2c73a51fc18891ce3f3e51536138f1ed06f9b3ac8eddcbf8a69a8"
},
{
"blockchain_network": "polygon_mainnet",
"blockchain_verified": false,
"contract_address": "0x81FE95d5034D2B0B4E293fAe7d51243A09Ff31C5",
"description": "Verify computed merkle root exists on blockchain using stored RPC URL",
"method": "Call smart contract verifyProof() with tree_type=0",
"rpc_url_used": "https://polygon-mainnet.g.alchemy.com/v2/7gs1nnlhLR4Az1nPfl-RU",
"step": 3,
"tree_type": "issuance (tree_type=0)"
}
],
"verification_method": "issuance_tree_verification"
}