proof-of-portfolio 0.0.80__tar.gz → 0.0.81__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/PKG-INFO +1 -1
  2. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/_version.py +1 -1
  3. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/proof_generator.py +50 -47
  4. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/PKG-INFO +1 -1
  5. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/pyproject.toml +1 -1
  6. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/README.md +0 -0
  7. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/__init__.py +0 -0
  8. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/analyze_data.py +0 -0
  9. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/Nargo.toml +0 -0
  10. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/Nargo.toml +0 -0
  11. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/calmar.nr +0 -0
  12. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/drawdown.nr +0 -0
  13. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/merkle.nr +0 -0
  14. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/mod.nr +0 -0
  15. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/omega.nr +0 -0
  16. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/pnl_score.nr +0 -0
  17. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/position.nr +0 -0
  18. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/sharpe.nr +0 -0
  19. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/sortino.nr +0 -0
  20. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/core/tstat.nr +0 -0
  21. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/lib.nr +0 -0
  22. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/ann_excess_return.nr +0 -0
  23. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/ann_volatility.nr +0 -0
  24. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/average.nr +0 -0
  25. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/constants.nr +0 -0
  26. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/mod.nr +0 -0
  27. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/sqrt.nr +0 -0
  28. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/variance.nr +0 -0
  29. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/components/src/utils/weighting_distribution.nr +0 -0
  30. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/generate_inputs.py +0 -0
  31. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/src/main.nr +0 -0
  32. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/target/circuits.json +0 -0
  33. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/circuits/vk/vk +0 -0
  34. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/Nargo.toml +0 -0
  35. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/src/main.nr +0 -0
  36. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_calmar/target/just_calmar.json +0 -0
  37. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/Nargo.toml +0 -0
  38. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/src/main.nr +0 -0
  39. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_cps_to_log_return/target/just_cps_to_log_return.json +0 -0
  40. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/Nargo.toml +0 -0
  41. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/src/main.nr +0 -0
  42. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_drawdown/target/just_drawdown.json +0 -0
  43. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/Nargo.toml +0 -0
  44. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/src/main.nr +0 -0
  45. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_omega/target/just_omega.json +0 -0
  46. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_pnl/Nargo.toml +0 -0
  47. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_pnl/src/main.nr +0 -0
  48. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/Nargo.toml +0 -0
  49. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/src/main.nr +0 -0
  50. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sharpe/target/just_sharpe.json +0 -0
  51. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/Nargo.toml +0 -0
  52. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/src/main.nr +0 -0
  53. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_sortino/target/just_sortino.json +0 -0
  54. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/Nargo.toml +0 -0
  55. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/src/main.nr +0 -0
  56. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/just_tstat/target/just_tstat.json +0 -0
  57. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/merkle_generator/Nargo.toml +0 -0
  58. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demo/merkle_generator/src/main.nr +0 -0
  59. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/all.py +0 -0
  60. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/calmar.py +0 -0
  61. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/drawdown.py +0 -0
  62. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/generate_input_data.py +0 -0
  63. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/log_returns.py +0 -0
  64. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/main.py +0 -0
  65. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/omega.py +0 -0
  66. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/sharpe.py +0 -0
  67. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/sortino.py +0 -0
  68. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/tstat.py +0 -0
  69. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/demos/utils.py +0 -0
  70. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/main.py +0 -0
  71. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/min_metrics.py +0 -0
  72. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/miner.py +0 -0
  73. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/parsing_utils.py +0 -0
  74. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/post_install.py +0 -0
  75. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/Nargo.toml +0 -0
  76. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/src/main.nr +0 -0
  77. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/returns_generator/target/returns_generator.json +0 -0
  78. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/signal_processor.py +0 -0
  79. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/Nargo.toml +0 -0
  80. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/src/main.nr +0 -0
  81. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/target/tree_generator.json +0 -0
  82. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/tree_generator/target.gz +0 -0
  83. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio/validator.py +0 -0
  84. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/SOURCES.txt +0 -0
  85. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/dependency_links.txt +0 -0
  86. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/entry_points.txt +0 -0
  87. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/requires.txt +0 -0
  88. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/proof_of_portfolio.egg-info/top_level.txt +0 -0
  89. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/setup.cfg +0 -0
  90. {proof_of_portfolio-0.0.80 → proof_of_portfolio-0.0.81}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.80
3
+ Version: 0.0.81
4
4
  Summary: Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics
5
5
  Author-email: "Inference Labs, Inc." <info@inferencelabs.com>
6
6
  Requires-Python: >=3.10
@@ -1,2 +1,2 @@
1
1
  # This file is auto-generated during build
2
- __version__ = "0.0.80"
2
+ __version__ = "0.0.81"
@@ -185,12 +185,12 @@ def run_bb_prove(circuit_dir):
185
185
  Runs barretenberg proving.
186
186
  Returns proof generation time and status.
187
187
  """
188
- print("\n--- Running Barretenberg Proof Generation ---")
188
+ bt.logging.info("\n--- Running Barretenberg Proof Generation ---")
189
189
 
190
190
  try:
191
191
  subprocess.run(["bb", "--version"], capture_output=True, check=True)
192
192
  except (subprocess.CalledProcessError, FileNotFoundError):
193
- print(
193
+ bt.logging.info(
194
194
  "Error: bb (Barretenberg) not found. Please install it using \n`curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/master/barretenberg/cpp/installation/install | bash`"
195
195
  )
196
196
  return None, False
@@ -218,8 +218,8 @@ def run_bb_prove(circuit_dir):
218
218
  prove_time = time.time() - prove_start
219
219
 
220
220
  if prove_result.returncode != 0:
221
- print("bb prove failed:")
222
- print(
221
+ bt.logging.info("bb prove failed:")
222
+ bt.logging.info(
223
223
  " ".join(
224
224
  [
225
225
  "bb",
@@ -233,15 +233,15 @@ def run_bb_prove(circuit_dir):
233
233
  ]
234
234
  )
235
235
  )
236
- print(prove_result.stdout)
237
- print(prove_result.stderr)
236
+ bt.logging.info(prove_result.stdout)
237
+ bt.logging.info(prove_result.stderr)
238
238
  return None, False
239
239
 
240
- print(f"Proof generated in {prove_time:.3f}s")
240
+ bt.logging.info(f"Proof generated in {prove_time:.3f}s")
241
241
  return prove_time, True
242
242
 
243
243
  except Exception as e:
244
- print(f"Error during proof generation/verification: {e}")
244
+ bt.logging.error(f"Error during proof generation/verification: {e}")
245
245
  return None, False
246
246
 
247
247
 
@@ -454,22 +454,22 @@ def generate_proof(
454
454
  )
455
455
 
456
456
  if verbose:
457
- print(f"Generated signals Merkle root: {signals_merkle_root}")
457
+ bt.logging.info(f"Generated signals Merkle root: {signals_merkle_root}")
458
458
  if isinstance(signals_merkle_root, str) and signals_merkle_root.startswith(
459
459
  "0x"
460
460
  ):
461
- print(f"Signals Merkle root (hex): {signals_merkle_root}")
461
+ bt.logging.info(f"Signals Merkle root (hex): {signals_merkle_root}")
462
462
  else:
463
- print(f"Signals Merkle root (int): {signals_merkle_root}")
463
+ bt.logging.info(f"Signals Merkle root (int): {signals_merkle_root}")
464
464
 
465
465
  if verbose:
466
- print("Returns Merkle root will be calculated within the circuit")
467
- print(f"Number of daily returns: {n_returns}")
466
+ bt.logging.info("Returns Merkle root will be calculated within the circuit")
467
+ bt.logging.info(f"Number of daily returns: {n_returns}")
468
468
 
469
469
  if verbose:
470
- print("Running main proof of portfolio circuit...")
470
+ bt.logging.info("Running main proof of portfolio circuit...")
471
471
  else:
472
- print(f"Generating witness for hotkey {miner_hotkey}...")
472
+ bt.logging.info(f"Generating witness for hotkey {miner_hotkey}...")
473
473
  main_circuit_dir = os.path.join(current_dir, "circuits")
474
474
 
475
475
  # Pass annual risk-free rate (to match ann_excess_return usage)
@@ -514,14 +514,14 @@ def generate_proof(
514
514
  toml.dump(main_prover_input, f)
515
515
 
516
516
  if verbose:
517
- print("Executing main circuit to generate witness...")
517
+ bt.logging.info("Executing main circuit to generate witness...")
518
518
  witness_start = time.time()
519
519
  output = run_command(
520
520
  ["nargo", "execute", "witness", "--silence-warnings"], main_circuit_dir, verbose
521
521
  )
522
522
  witness_time = time.time() - witness_start
523
523
  if verbose:
524
- print(f"Witness generation completed in {witness_time:.3f}s")
524
+ bt.logging.info(f"Witness generation completed in {witness_time:.3f}s")
525
525
 
526
526
  fields = parse_nargo_struct_output(output)
527
527
  if len(fields) < 9:
@@ -586,52 +586,55 @@ def generate_proof(
586
586
  if witness_only:
587
587
  prove_time, proving_success = None, True
588
588
  if verbose:
589
- print("Skipping barretenberg proof generation (witness_only=True)")
589
+ bt.logging.info(
590
+ "Skipping barretenberg proof generation (witness_only=True)"
591
+ )
590
592
  else:
591
593
  try:
592
594
  prove_time, proving_success = run_bb_prove(main_circuit_dir)
593
595
  if prove_time is None:
594
- if verbose:
595
- print("Barretenberg proof generation failed")
596
+ bt.logging.error("Barretenberg proof generation failed")
596
597
  prove_time, proving_success = None, False
597
598
  except Exception as e:
598
- print(f"Exception during proof generation: {e}")
599
+ bt.logging.error(f"Exception during proof generation: {e}")
599
600
  prove_time, proving_success = None, False
600
601
 
601
602
  # Always print key production info: hotkey and verification status
602
- print(f"Hotkey: {miner_hotkey}")
603
- print(f"Orders processed: {signals_count}")
604
- print(f"Signals Merkle Root: {signals_merkle_root}")
605
- print(f"Returns Merkle Root: {returns_merkle_root}")
606
- print(f"Average Daily PnL: {avg_daily_pnl_scaled:.9f}")
607
- print(f"Sharpe Ratio: {sharpe_ratio_scaled:.9f}")
603
+ bt.logging.info(f"Hotkey: {miner_hotkey}")
604
+ bt.logging.info(f"Orders processed: {signals_count}")
605
+ bt.logging.info(f"Signals Merkle Root: {signals_merkle_root}")
606
+ bt.logging.info(f"Returns Merkle Root: {returns_merkle_root}")
607
+ bt.logging.info(f"Average Daily PnL: {avg_daily_pnl_scaled:.9f}")
608
+ bt.logging.info(f"Sharpe Ratio: {sharpe_ratio_scaled:.9f}")
608
609
  # Convert drawdown factor to percentage: drawdown% = (1 - factor) * 100
609
610
  drawdown_percentage = (1 - max_drawdown_scaled) * 100
610
- print(f"Max Drawdown: {max_drawdown_scaled:.9f} ({drawdown_percentage:.6f}%)")
611
- print(f"Calmar Ratio: {calmar_ratio_scaled:.9f}")
612
- print(f"Omega Ratio: {omega_ratio_scaled:.9f}")
613
- print(f"Sortino Ratio: {sortino_ratio_scaled:.9f}")
614
- print(f"Statistical Confidence: {stat_confidence_scaled:.9f}")
615
- print(f"PnL Score: {pnl_score_scaled:.9f}")
611
+ bt.logging.info(
612
+ f"Max Drawdown: {max_drawdown_scaled:.9f} ({drawdown_percentage:.6f}%)"
613
+ )
614
+ bt.logging.info(f"Calmar Ratio: {calmar_ratio_scaled:.9f}")
615
+ bt.logging.info(f"Omega Ratio: {omega_ratio_scaled:.9f}")
616
+ bt.logging.info(f"Sortino Ratio: {sortino_ratio_scaled:.9f}")
617
+ bt.logging.info(f"Statistical Confidence: {stat_confidence_scaled:.9f}")
618
+ bt.logging.info(f"PnL Score: {pnl_score_scaled:.9f}")
616
619
 
617
620
  if verbose:
618
- print("\n--- Proof Generation Complete ---")
619
- print("\n=== MERKLE ROOTS ===")
620
- print(f"Signals Merkle Root: {signals_merkle_root}")
621
- print(f"Returns Merkle Root: {returns_merkle_root}")
622
-
623
- print("\n=== DATA SUMMARY ===")
624
- print(f"Daily returns processed: {n_returns}")
625
- print(f"Trading signals processed: {signals_count}")
626
- print("PnL calculated from cumulative returns in circuit")
627
-
628
- print("\n=== PROOF GENERATION RESULTS ===")
629
- print(f"Witness generation time: {witness_time:.3f}s")
621
+ bt.logging.info("\n--- Proof Generation Complete ---")
622
+ bt.logging.info("\n=== MERKLE ROOTS ===")
623
+ bt.logging.info(f"Signals Merkle Root: {signals_merkle_root}")
624
+ bt.logging.info(f"Returns Merkle Root: {returns_merkle_root}")
625
+
626
+ bt.logging.info("\n=== DATA SUMMARY ===")
627
+ bt.logging.info(f"Daily returns processed: {n_returns}")
628
+ bt.logging.info(f"Trading signals processed: {signals_count}")
629
+ bt.logging.info("PnL calculated from cumulative returns in circuit")
630
+
631
+ bt.logging.info("\n=== PROOF GENERATION RESULTS ===")
632
+ bt.logging.info(f"Witness generation time: {witness_time:.3f}s")
630
633
  if not witness_only:
631
634
  if prove_time is not None:
632
- print(f"Proof generation time: {prove_time:.3f}s")
635
+ bt.logging.info(f"Proof generation time: {prove_time:.3f}s")
633
636
  else:
634
- print("Unable to prove due to an error.")
637
+ bt.logging.info("Unable to prove due to an error.")
635
638
 
636
639
  # Return structured results for programmatic access
637
640
  return {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proof-of-portfolio
3
- Version: 0.0.80
3
+ Version: 0.0.81
4
4
  Summary: Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics
5
5
  Author-email: "Inference Labs, Inc." <info@inferencelabs.com>
6
6
  Requires-Python: >=3.10
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "proof-of-portfolio"
8
- version = "0.0.80"
8
+ version = "0.0.81"
9
9
  description = "Zero-Knowledge Proof framework for verifiable, private portfolio performance metrics"
10
10
  readme = "README.md"
11
11
  authors = [{ name = "Inference Labs, Inc.", email = "info@inferencelabs.com" }]