mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-08 22:28:12 -05:00
zkas: Implement debug symbols in the compiled binary
This commit is contained in:
@@ -133,7 +133,7 @@ impl RlnIdentity {
|
||||
vec![epoch, external_nullifier, x, y, internal_nullifier, identity_root.inner()];
|
||||
|
||||
info!(target: "crypto::rln::create_proof", "[RLN] Creating proof for event {}", event.id());
|
||||
let signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN)?;
|
||||
let signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN, false)?;
|
||||
let signal_circuit = ZkCircuit::new(witnesses, &signal_zkbin);
|
||||
|
||||
let proof = Proof::create(proving_key, &[signal_circuit], &public_inputs, &mut OsRng)?;
|
||||
|
||||
@@ -603,7 +603,7 @@ impl Client {
|
||||
let identity_tree: MerkleTree = deserialize_async(&identity_tree).await?;
|
||||
|
||||
// Retrieve the ZK proving key from the db
|
||||
let signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN)?;
|
||||
let signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN, false)?;
|
||||
let signal_circuit = ZkCircuit::new(empty_witnesses(&signal_zkbin)?, &signal_zkbin);
|
||||
let Some(proving_key) = self.server.server_store.get("rlnv2-diff-signal-pk")? else {
|
||||
return Err(Error::DatabaseError(
|
||||
|
||||
@@ -155,7 +155,7 @@ impl IrcServer {
|
||||
let rln_identity_store = darkirc.sled.open_tree("rln_identity_store")?;
|
||||
|
||||
// Generate RLN proving and verifying keys, if needed
|
||||
let rln_signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN)?;
|
||||
let rln_signal_zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN, false)?;
|
||||
let rln_signal_circuit =
|
||||
ZkCircuit::new(empty_witnesses(&rln_signal_zkbin)?, &rln_signal_zkbin);
|
||||
|
||||
@@ -184,7 +184,7 @@ impl IrcServer {
|
||||
|
||||
if server_store.get("rlnv2-diff-slash-pk")?.is_none() {
|
||||
info!(target: "irc::server", "[RLN] Creating RlnV2_Diff_Slash ProvingKey");
|
||||
let zkbin = ZkBinary::decode(RLN2_SLASH_ZKBIN)?;
|
||||
let zkbin = ZkBinary::decode(RLN2_SLASH_ZKBIN, false)?;
|
||||
let circuit = ZkCircuit::new(empty_witnesses(&zkbin).unwrap(), &zkbin);
|
||||
let provingkey = ProvingKey::build(zkbin.k, &circuit);
|
||||
let mut buf = vec![];
|
||||
@@ -194,7 +194,7 @@ impl IrcServer {
|
||||
|
||||
if server_store.get("rlnv2-diff-slash-vk")?.is_none() {
|
||||
info!(target: "irc::server", "[RLN] Creating RlnV2_Diff_Slash VerifyingKey");
|
||||
let zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN)?;
|
||||
let zkbin = ZkBinary::decode(RLN2_SIGNAL_ZKBIN, false)?;
|
||||
let circuit = ZkCircuit::new(empty_witnesses(&zkbin).unwrap(), &zkbin);
|
||||
let verifyingkey = VerifyingKey::build(zkbin.k, &circuit);
|
||||
let mut buf = vec![];
|
||||
|
||||
@@ -2126,7 +2126,7 @@ impl Drk {
|
||||
return Err(Error::Custom("Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
@@ -2141,7 +2141,7 @@ impl Drk {
|
||||
return Err(Error::DatabaseError("[dao_mint] DAO Mint circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let dao_mint_zkbin = ZkBinary::decode(&dao_mint_zkbin.1)?;
|
||||
let dao_mint_zkbin = ZkBinary::decode(&dao_mint_zkbin.1, false)?;
|
||||
|
||||
let dao_mint_circuit = ZkCircuit::new(empty_witnesses(&dao_mint_zkbin)?, &dao_mint_zkbin);
|
||||
|
||||
@@ -2464,7 +2464,7 @@ impl Drk {
|
||||
))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
@@ -2490,8 +2490,8 @@ impl Drk {
|
||||
))
|
||||
};
|
||||
|
||||
let propose_burn_zkbin = ZkBinary::decode(&propose_burn_zkbin.1)?;
|
||||
let propose_main_zkbin = ZkBinary::decode(&propose_main_zkbin.1)?;
|
||||
let propose_burn_zkbin = ZkBinary::decode(&propose_burn_zkbin.1, false)?;
|
||||
let propose_main_zkbin = ZkBinary::decode(&propose_main_zkbin.1, false)?;
|
||||
|
||||
let propose_burn_circuit =
|
||||
ZkCircuit::new(empty_witnesses(&propose_burn_zkbin)?, &propose_burn_zkbin);
|
||||
@@ -2644,7 +2644,7 @@ impl Drk {
|
||||
return Err(Error::Custom("[dao_generic_proposal_tx] Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
@@ -2670,8 +2670,8 @@ impl Drk {
|
||||
))
|
||||
};
|
||||
|
||||
let propose_burn_zkbin = ZkBinary::decode(&propose_burn_zkbin.1)?;
|
||||
let propose_main_zkbin = ZkBinary::decode(&propose_main_zkbin.1)?;
|
||||
let propose_burn_zkbin = ZkBinary::decode(&propose_burn_zkbin.1, false)?;
|
||||
let propose_main_zkbin = ZkBinary::decode(&propose_main_zkbin.1, false)?;
|
||||
|
||||
let propose_burn_circuit =
|
||||
ZkCircuit::new(empty_witnesses(&propose_burn_zkbin)?, &propose_burn_zkbin);
|
||||
@@ -2848,7 +2848,7 @@ impl Drk {
|
||||
return Err(Error::Custom("[dao_vote] Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
@@ -2870,8 +2870,8 @@ impl Drk {
|
||||
return Err(Error::Custom("[dao_vote] DAO Vote Main circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let dao_vote_burn_zkbin = ZkBinary::decode(&dao_vote_burn_zkbin.1)?;
|
||||
let dao_vote_main_zkbin = ZkBinary::decode(&dao_vote_main_zkbin.1)?;
|
||||
let dao_vote_burn_zkbin = ZkBinary::decode(&dao_vote_burn_zkbin.1, false)?;
|
||||
let dao_vote_main_zkbin = ZkBinary::decode(&dao_vote_main_zkbin.1, false)?;
|
||||
|
||||
let dao_vote_burn_circuit =
|
||||
ZkCircuit::new(empty_witnesses(&dao_vote_burn_zkbin)?, &dao_vote_burn_zkbin);
|
||||
@@ -3110,9 +3110,9 @@ impl Drk {
|
||||
return Err(Error::Custom("[dao_exec_transfer] Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1, false)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1, false)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let mint_circuit = ZkCircuit::new(empty_witnesses(&mint_zkbin)?, &mint_zkbin);
|
||||
let burn_circuit = ZkCircuit::new(empty_witnesses(&burn_zkbin)?, &burn_zkbin);
|
||||
@@ -3155,10 +3155,10 @@ impl Drk {
|
||||
))
|
||||
};
|
||||
|
||||
let dao_exec_zkbin = ZkBinary::decode(&dao_exec_zkbin.1)?;
|
||||
let dao_auth_transfer_zkbin = ZkBinary::decode(&dao_auth_transfer_zkbin.1)?;
|
||||
let dao_exec_zkbin = ZkBinary::decode(&dao_exec_zkbin.1, false)?;
|
||||
let dao_auth_transfer_zkbin = ZkBinary::decode(&dao_auth_transfer_zkbin.1, false)?;
|
||||
let dao_auth_transfer_enc_coin_zkbin =
|
||||
ZkBinary::decode(&dao_auth_transfer_enc_coin_zkbin.1)?;
|
||||
ZkBinary::decode(&dao_auth_transfer_enc_coin_zkbin.1, false)?;
|
||||
|
||||
let dao_exec_circuit = ZkCircuit::new(empty_witnesses(&dao_exec_zkbin)?, &dao_exec_zkbin);
|
||||
let dao_auth_transfer_circuit =
|
||||
@@ -3403,7 +3403,7 @@ impl Drk {
|
||||
else {
|
||||
return Err(Error::Custom("[dao_exec_generic] Fee circuit not found".to_string()))
|
||||
};
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
let fee_pk = ProvingKey::build(fee_zkbin.k, &fee_circuit);
|
||||
|
||||
@@ -3422,7 +3422,7 @@ impl Drk {
|
||||
"[dao_exec_generic] DAO {namespace} circuit not found"
|
||||
)))
|
||||
};
|
||||
let dao_exec_zkbin = ZkBinary::decode(&dao_exec_zkbin.1)?;
|
||||
let dao_exec_zkbin = ZkBinary::decode(&dao_exec_zkbin.1, false)?;
|
||||
let dao_exec_circuit = ZkCircuit::new(empty_witnesses(&dao_exec_zkbin)?, &dao_exec_zkbin);
|
||||
let dao_exec_pk = ProvingKey::build(dao_exec_zkbin.k, &dao_exec_circuit);
|
||||
|
||||
|
||||
@@ -540,7 +540,7 @@ impl Drk {
|
||||
return Err(Error::Custom("[deploy_contract] Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
@@ -603,7 +603,7 @@ impl Drk {
|
||||
return Err(Error::Custom("[lock_contract] Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
|
||||
@@ -1400,7 +1400,7 @@ impl Drk {
|
||||
return Err(Error::Custom("Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let fee_circuit = ZkCircuit::new(empty_witnesses(&fee_zkbin)?, &fee_zkbin);
|
||||
|
||||
|
||||
@@ -125,8 +125,8 @@ impl Drk {
|
||||
return Err(Error::Custom("Burn circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1)?;
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1, false)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1, false)?;
|
||||
|
||||
let mint_circuit = ZkCircuit::new(empty_witnesses(&mint_zkbin)?, &mint_zkbin);
|
||||
let burn_circuit = ZkCircuit::new(empty_witnesses(&burn_zkbin)?, &burn_zkbin);
|
||||
@@ -228,8 +228,8 @@ impl Drk {
|
||||
return Err(Error::Custom("Burn circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1)?;
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1, false)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1, false)?;
|
||||
|
||||
let mint_circuit = ZkCircuit::new(empty_witnesses(&mint_zkbin)?, &mint_zkbin);
|
||||
let burn_circuit = ZkCircuit::new(empty_witnesses(&burn_zkbin)?, &burn_zkbin);
|
||||
|
||||
@@ -301,9 +301,9 @@ impl Drk {
|
||||
return Err(Error::Custom("Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1)?;
|
||||
let auth_mint_zkbin = ZkBinary::decode(&auth_mint_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1, false)?;
|
||||
let auth_mint_zkbin = ZkBinary::decode(&auth_mint_zkbin.1, false)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let mint_circuit = ZkCircuit::new(empty_witnesses(&mint_zkbin)?, &mint_zkbin);
|
||||
let auth_mint_circuit =
|
||||
@@ -409,8 +409,8 @@ impl Drk {
|
||||
return Err(Error::Custom("Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let auth_mint_zkbin = ZkBinary::decode(&auth_mint_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let auth_mint_zkbin = ZkBinary::decode(&auth_mint_zkbin.1, false)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let auth_mint_circuit =
|
||||
ZkCircuit::new(empty_witnesses(&auth_mint_zkbin)?, &auth_mint_zkbin);
|
||||
|
||||
@@ -95,9 +95,9 @@ impl Drk {
|
||||
return Err(Error::Custom("Fee circuit not found".to_string()))
|
||||
};
|
||||
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1)?;
|
||||
let mint_zkbin = ZkBinary::decode(&mint_zkbin.1, false)?;
|
||||
let burn_zkbin = ZkBinary::decode(&burn_zkbin.1, false)?;
|
||||
let fee_zkbin = ZkBinary::decode(&fee_zkbin.1, false)?;
|
||||
|
||||
let mint_circuit = ZkCircuit::new(empty_witnesses(&mint_zkbin)?, &mint_zkbin);
|
||||
let burn_circuit = ZkCircuit::new(empty_witnesses(&burn_zkbin)?, &burn_zkbin);
|
||||
|
||||
@@ -164,7 +164,7 @@ fn main() -> ExitCode {
|
||||
println!("Wrote output to {}", &output);
|
||||
|
||||
if eflag {
|
||||
let zkbin = ZkBinary::decode(&bincode).unwrap();
|
||||
let zkbin = ZkBinary::decode(&bincode, true).unwrap();
|
||||
println!("{zkbin:#?}");
|
||||
}
|
||||
|
||||
|
||||
@@ -28,17 +28,18 @@ from darkfi_sdk.zkas import (MockProver, ZkBinary, ZkCircuit, ProvingKey,
|
||||
def eprint(fstr, *args):
|
||||
print("error: " + fstr, *args, file=sys.stderr)
|
||||
|
||||
def show_trace(opcodes, trace):
|
||||
print(f"{'Line':<4} {'Opcode':<22} {'Type':<10} {'Values'}")
|
||||
def show_trace(zkbin, opcodes, trace):
|
||||
print(f"{'Line':<6} {'Source':<12} {'Opcode':<22} {'Result':<20} {'Values'}")
|
||||
for i, (opcode, (optype, args)) in enumerate(zip(opcodes, trace)):
|
||||
if args:
|
||||
args = ", ".join([str(arg) for arg in args])
|
||||
args = f"[{args}]"
|
||||
else:
|
||||
args = ""
|
||||
opcode = str(opcode)
|
||||
optype = str(optype)
|
||||
print(f"{i:<4} {opcode:<22} {optype:<10} {args}")
|
||||
# Get source location from debug info
|
||||
loc = zkbin.opcode_location(i)
|
||||
source = f"L{loc[0]}:C{loc[1]}" if loc else "-"
|
||||
|
||||
# Get result variable name for assignments
|
||||
result = zkbin.heap_name(i) or "-" # Simplified - would need proper heap tracking
|
||||
|
||||
args_str = f"[{', '.join(str(a) for a in args)}]" if args else ""
|
||||
print(f"{i:<6} {source:<12} {str(opcode):<22} {result:<20} {args_str}")
|
||||
|
||||
def load_circuit_witness(circuit, witness_file):
|
||||
# We attempt to decode the witnesses from the JSON file.
|
||||
@@ -147,7 +148,7 @@ def main(witness_file, source_file, mock=False, trace=False):
|
||||
return -3
|
||||
|
||||
if trace:
|
||||
show_trace(zkbin.opcodes(), circuit.opvalues())
|
||||
show_trace(zkbin, zkbin.opcodes(), circuit.opvalues())
|
||||
|
||||
print("Verifying ZK proof...")
|
||||
verify_status = proof.verify(verifying_key, instances)
|
||||
|
||||
Reference in New Issue
Block a user