A Decentralized Threshold Signing Infrastructure Protocol
Technical Whitepaper v2.0
PROXY Network Research Team research@proxy.fund
February 2026
Abstract
This paper presents PROXY Network, a decentralized threshold signing infrastructure protocol
that enables secure, distributed key management without single points of failure. We introduce
a comprehensive framework combining Multi-Party Computation (MPC), threshold cryptography, and
economic incentives to create a permissionless network of signing agents.
The protocol specifies: (1) a Distributed Key Generation (DKG) scheme based on Feldman's
Verifiable Secret Sharing that generates keypairs where the private key never exists in
complete form; (2) a threshold ECDSA signing protocol derived from GG20 with identifiable
abort properties; (3) a Proactive Secret Sharing mechanism for continuous security refresh;
(4) an economic security model with staking and slashing conditions enforced through
smart contracts.
We provide formal security proofs showing that the protocol maintains key secrecy under
the Elliptic Curve Discrete Logarithm assumption, achieves Byzantine fault tolerance with
threshold t = ⌈2n/3⌉, and ensures economic security proportional to aggregate stake.
Performance analysis demonstrates median signing latency under 500ms with 24 agents.
The result is a chain-agnostic signing infrastructure suitable for institutional custody,
cross-chain bridges, DeFi protocols, and any application requiring secure, decentralized
key management.
Table of Contents
Part I: Introduction
1. Executive Summary
2. The Private Key Problem
3. Existing Solutions and Limitations
4. PROXY Network Design Goals
Part II: Mathematical Foundations
5. Notation and Preliminaries
6. Elliptic Curve Cryptography
6.1 Group Structure
6.2 The Discrete Logarithm Problem
6.3 Supported Curves
7. Digital Signature Schemes
7.1 ECDSA
7.2 EdDSA/Schnorr
8. Secret Sharing
8.1 Shamir's Secret Sharing
8.2 Verifiable Secret Sharing
9. Commitment Schemes
10. Zero-Knowledge Proofs
Part III: Threshold Cryptography
11. Threshold Signature Schemes
12. Threshold ECDSA Protocols
12.1 The GG18 Protocol
12.2 The GG20 Protocol
12.3 Security Analysis
13. Threshold EdDSA
Part IV: Distributed Key Generation
14. DKG Protocol Specification
15. Key Resharing
16. Proactive Secret Sharing
Part V: Protocol Architecture
17. Network Topology
18. Agent Selection
19. Signing Protocol
20. Communication Layer
Part VI: Smart Contracts
21. Contract Architecture
22. Agent Registry
23. Staking and Slashing
Part VII: Economic Model
24. Token Economics
25. Fee Structure
26. Game-Theoretic Analysis
Part VIII: Security Analysis
27. Threat Model
28. Security Proofs
29. Attack Analysis
Part IX: Implementation
30. Reference Implementation
31. Performance Benchmarks
Part X: Extended Mathematical Foundations
47. Finite Field Arithmetic
48. Elliptic Curve Point Operations
49. Advanced Modular Exponentiation
Part XI: Security Definitions
50. Formal Adversary Models
51. Composable Security
52. Game-Based Proofs
Part XII: Attack Analysis
53. Collusion Attacks
54. Bribery Analysis
55. Side-Channel Countermeasures
Part XIII: Case Studies
56. Cross-Chain Bridge Integration
57. DAO Treasury Management
58. Institutional Custody
Part XIV: Governance and Roadmap
59. Governance Framework
60. Development Roadmap
Part XV: Extended Appendices
D. Wire Protocol Specification
E. Test Vectors
F. Glossary
G. Comparison with Alternatives
Part XVI: Performance Analysis
61. Computational Complexity
62. Latency Analysis
63. Throughput Optimization
Part XVII: SDK and API Reference
64. JavaScript/TypeScript SDK
65. REST API Specification
66. Smart Contract Interfaces
Part XVIII: Research Directions
67. Post-Quantum Cryptography
68. Zero-Knowledge Proofs
69. Scalability Research
70. Cross-Chain Atomic Operations
Part XIX: Super-Linear Staking Economics
71. Quadratic Security Model
72. Concentrated Alerter System
73. Game-Theoretic Equilibrium
Part XX: Fair Sequencing Services
74. MEV Mitigation Framework
75. Threshold-Encrypted Ordering
76. FIFO Cryptographic Timestamps
Part XXI: Decentralized Services Protocol
77. Verifiable Random Function (VRF)
78. Proof of Reserve Service
79. Keeper Automation Network
Part XXII: Network Deployment
80. Hardware Requirements
81. Geographic Distribution
82. Disaster Recovery
Part XXIII: Formal Security Reductions
83. Standard Cryptographic Assumptions
84. UC Security Framework
85. Concrete Security Bounds
Part XXIV: Cross-Chain Protocol
86. Atomic Messaging
87. Threshold HTLC
88. Merkle State Proofs
Part XXV: Privacy-Preserving Computation
89. Secure Multi-Party Computation
90. Confidential Transactions
91. ZK Proof Integration
Part XXVI: Regulatory Compliance
92. KYC/AML Integration
93. Travel Rule Compliance
94. Sanctions Screening
Part XXVII: Dynamic Committee Architecture
95. Decentralized Agent Network
96. Agent Registration Protocol
97. Committee Formation
Part XXVIII: Value-Based Security Scaling
98. Dynamic Committee Sizing
99. Automatic Committee Resizing
100. Volume-Based Scaling
Part XXIX: Proactive Key Resharing Protocol
101. Key Share Redistribution
102. Committee Expansion Resharing
103. Committee Contraction
104. Periodic Key Rotation
105. On-Chain Resharing Verification
Part XXX: Performance and Scalability Architecture
106. Throughput Analysis
107. FROST Protocol Implementation
108. BLS Signature Aggregation
109. Parallel Committee Architecture
110. Latency Optimization
111. Hardware Acceleration
Part XXXI: Cost Economics and Fee Model
112. Cost Structure Analysis
113. Fee Model Design
114. Subscription and Stake-Based Access
115. Operator Economics
116. Batch Aggregation Economics
Part XXXII: Multi-Chain Signature Architecture
117. Universal Chain Support
118. Threshold ECDSA Protocol (GG20)
119. Threshold Ed25519 Protocol
120. Chain Address Derivation
Part XXXIII: On-Chain Decentralized Infrastructure
121. On-Chain Architecture Overview
122. Agent Registry Contract
123. Committee Manager Contract
124. Decentralization Guarantees
Appendices
A. Full Protocol Pseudocode
B. Mathematical Notation
C. References
Part I: Introduction
Executive Summary
Blockchain systems derive their security model from cryptographic ownership: control of a private
key provides exclusive control over associated assets. This fundamental property has enabled the
creation of permissionless financial systems but simultaneously created unprecedented operational
challenges in key management. The loss, theft, or compromise of private keys has resulted in
billions of dollars of irrecoverable losses.
PROXY Network addresses this challenge through a novel combination of threshold cryptography and
economic incentives. The protocol enables the creation and operation of distributed signing
infrastructure where:
Private keys are generated across a network of independent agents using Distributed Key
Generation (DKG), with the complete key never existing at any point
Transaction signing requires threshold consensus (t-of-n), preventing any minority coalition
from producing signatures
Key shares are proactively refreshed, rendering compromised shares obsolete
Economic incentives through staking and slashing ensure honest agent behavior
On-chain verification enables trustless integration with any blockchain application
This paper provides the complete technical specification of the PROXY Network protocol, including
formal definitions, mathematical proofs, and implementation guidelines.
The Private Key Problem
In asymmetric cryptography, a keypair consists of a private key x and
corresponding public key P. The security of this construction relies on
the computational infeasibility of deriving x from P.
(Private Key Control) Given public key P = xG where
G is the generator of an elliptic curve group, an entity controls the
associated blockchain address if and only if they possess knowledge of x.
This creates a fundamental security tension: the private key must be accessible for signing
operations but must remain secret from all adversaries. Any system storing private keys faces
inherent tradeoffs between availability and security.
Historical Security Failures
The cryptocurrency industry has experienced numerous catastrophic key management failures:
Incident
Year
Loss (USD)
Root Cause
Mt. Gox
2014
$460M
Hot wallet key compromise
Bitfinex
2016
$72M
Multi-signature key theft
QuadrigaCX
2019
$190M
Sole key holder death
Ronin Bridge
2022
$625M
Threshold key compromise (5/9)
FTX
2022
$400M+
Insider key access
These incidents share a common pattern: centralization of key material created exploitable
single points of failure.
Existing Solutions and Limitations
Multi-Signature Wallets
Multi-signature (multisig) wallets require m of n
parties to authorize transactions through separate signatures combined on-chain.
(m-of-n Multisig) A transaction from address A is valid
if it contains at least m valid signatures from the set of
n authorized public keys {P₁, P₂, ..., Pₙ}.
Limitations:
Each signer possesses a complete private key (single point of failure at each location)
On-chain coordination reveals signer set and threshold publicly
Gas costs scale with number of signatures
Protocol-specific implementation required for each blockchain
Hardware Security Modules (HSM)
HSMs provide tamper-resistant hardware for key storage and cryptographic operations.
Limitations:
Physical device represents single point of failure
Cannot scale horizontally
Expensive procurement and operational costs
Limited programmability
Centralized MPC Providers
Several companies offer MPC-based custody services where key shares are distributed across
their infrastructure.
Limitations:
Single company controls all infrastructure
Counterparty risk remains
Regulatory vulnerability to jurisdiction actions
Not censorship resistant
PROXY Network Design Goals
PROXY Network is designed to achieve the following properties:
(Decentralization) The network operates without trusted third parties. Any entity
satisfying the staking requirement can operate an agent node.
(Key Secrecy) The private key x is never computed, stored,
or transmitted in complete form at any point during the protocol execution.
(Threshold Security) Any adversary controlling fewer than t
agents has negligible advantage in forging signatures or learning information about the private key.
(Byzantine Fault Tolerance) The protocol maintains safety with up to
f < n/3 Byzantine agents and maintains liveness with up to
f < n/3 offline agents.
(Economic Security) The cost of a successful attack exceeds the potential profit,
with attack cost proportional to aggregate stake.
Part II: Mathematical Foundations
Notation and Preliminaries
We establish the following notation used throughout this paper:
Symbol
Description
𝔽p
Finite field of prime order p
𝔾
Elliptic curve group of prime order q
G
Generator of group 𝔾
ℤq
Ring of integers modulo q
ℤq*
Multiplicative group of non-zero elements in ℤq
x ←$ S
x sampled uniformly at random from set S
H(·)
Cryptographic hash function
[n]
The set {1, 2, ..., n}
negl(λ)
Negligible function in security parameter λ
Elliptic Curve Cryptography
Group Structure
An elliptic curve over a finite field 𝔽p is defined by the
Weierstrass equation:
E: y² = x³ + ax + b(1)
where a, b ∈ 𝔽p and 4a³ + 27b² ≠ 0
(non-singularity condition).
(Elliptic Curve Group) The set of points on E together
with the point at infinity 𝒪 forms an abelian group under the chord-tangent
addition law.
For points P = (x₁, y₁) and Q = (x₂, y₂) on
E, the group operation P + Q = R = (x₃, y₃) is
computed as:
(Elliptic Curve Discrete Logarithm Problem - ECDLP) Given generator
G and point P = xG where
x ∈ ℤq, compute x.
(ECDLP Hardness) For appropriately chosen curves, the best known algorithms for
solving ECDLP require O(√q) operations (Pollard's rho algorithm).
The security of elliptic curve cryptography relies on the computational hardness of ECDLP. For a
curve with 256-bit group order, approximately 2¹²⁸ operations are required for the best known attack.
Supported Curves
PROXY Network supports the following standardized curves:
Curve
Field Size
Security Level
Blockchains
secp256k1
256 bits
128 bits
Bitcoin, Ethereum, BSC
secp256r1 (P-256)
256 bits
128 bits
Apple Passkey, WebAuthn
ed25519
255 bits
128 bits
Solana, Cosmos, Near
Digital Signature Schemes
ECDSA
The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined as follows:
Input: Private key x, message m
Output: Signature (r, s)
1. k ←$ ℤq*
2. R ← kG
3. r ← Rx mod q // x-coordinate of R
4. e ← H(m)
5. s ← k⁻¹(e + rx) mod q
6. return (r, s)
Algorithm 3: ECDSA Verification
Input: Public key P, message m, signature (r, s)
Output: Valid or Invalid
1. e ← H(m)
2. u₁ ← es⁻¹ mod q
3. u₂ ← rs⁻¹ mod q
4. R' ← u₁G + u₂P
5. if R'x ≡ r (mod q):
return Valid
6. return Invalid
(ECDSA Security) Under the ECDLP assumption, ECDSA is existentially unforgeable
under chosen message attack in the random oracle model.
EdDSA/Schnorr
EdDSA is a variant of Schnorr signatures optimized for the Edwards curve ed25519:
Algorithm 4: EdDSA Signing
Input: Private key x, message m
Output: Signature (R, s)
1. r ← H(H(x) || m) // Deterministic nonce
2. R ← rG
3. e ← H(R || P || m)
4. s ← r + ex mod q
5. return (R, s)
Algorithm 5: EdDSA Verification
Input: Public key P, message m, signature (R, s)
Output: Valid or Invalid
1. e ← H(R || P || m)
2. if sG = R + eP:
return Valid
3. return Invalid
Secret Sharing
Shamir's Secret Sharing
Shamir's Secret Sharing (SSS) enables distribution of a secret among n
parties such that any t parties can reconstruct the secret, but
t-1 parties learn nothing.
((t,n)-Secret Sharing) A secret sharing scheme consists of algorithms (Share, Reconstruct)
where:
Share(s, t, n) → (s₁, s₂, ..., sₙ): Distributes secret s into n shares
Reconstruct(S) → s: Recovers s from any subset S with |S| ≥ t
Algorithm 6: Shamir's Secret Sharing - Share
Input: Secret s ∈ ℤq, threshold t, parties n
Output: Shares (s₁, s₂, ..., sₙ)
1. a₀ ← s
2. For j = 1 to t-1:
aj ←$ ℤq
3. Define polynomial f(z) = Σⱼ₌₀ᵗ⁻¹ aⱼzʲ
4. For i = 1 to n:
sᵢ ← f(i)
5. return (s₁, s₂, ..., sₙ)
Input: Shares {(i, sᵢ)} for i ∈ S where |S| ≥ t
Output: Secret s
1. Compute Lagrange coefficients:
For i ∈ S:
λᵢ ← ∏ⱼ∈S,j≠i (j/(j-i)) mod q
2. s ← Σᵢ∈S λᵢsᵢ mod q
3. return s
(SSS Information-Theoretic Security) Given t-1 or fewer shares, the conditional
probability distribution of the secret is identical to the prior distribution. That is, t-1
shares provide zero information about the secret.
Let s be the secret and let S be any set of t-1 shares. For any possible value s' of the secret,
there exists exactly one polynomial of degree t-1 passing through the t-1 known points and
having f(0) = s'. Therefore, P(secret = s' | S) = P(secret = s') for all s'.
Verifiable Secret Sharing
Feldman's Verifiable Secret Sharing (VSS) extends SSS by allowing recipients to verify their
shares without learning the secret.
Algorithm 8: Feldman VSS - Share
Input: Secret s ∈ ℤq, threshold t, parties n
Output: Shares (s₁, ..., sₙ), Commitments (C₀, ..., Cₜ₋₁)
1. a₀ ← s
2. For j = 1 to t-1:
aⱼ ←$ ℤq
3. Define f(z) = Σⱼ₌₀ᵗ⁻¹ aⱼzʲ
4. For j = 0 to t-1:
Cⱼ ← aⱼG // Public commitments
5. For i = 1 to n:
sᵢ ← f(i)
6. return ((s₁,...,sₙ), (C₀,...,Cₜ₋₁))
Algorithm 9: Feldman VSS - Verify
Input: Share sᵢ for party i, Commitments (C₀, ..., Cₜ₋₁)
Output: Valid or Invalid
1. Compute Sᵢ ← sᵢG
2. Compute S'ᵢ ← Σⱼ₌₀ᵗ⁻¹ iʲCⱼ
3. if Sᵢ = S'ᵢ:
return Valid
4. return Invalid
(Feldman VSS Correctness) If the dealer is honest, all shares pass verification.
If any share fails verification, the dealer provably cheated.
Commitment Schemes
(Commitment Scheme) A commitment scheme consists of algorithms (Commit, Open) with properties:
Hiding: Given commitment c, the committed value m is computationally hidden
Binding: A commitment c cannot be opened to two different values
We use Pedersen commitments defined as follows:
Algorithm 10: Pedersen Commitment
Input: Value m ∈ ℤq, generators G, H
Output: Commitment C, opening r
1. r ←$ ℤq
2. C ← mG + rH
3. return (C, r)
(Pedersen Commitment Properties) Under the ECDLP assumption, Pedersen commitments are:
Perfectly hiding: C reveals no information about m
Computationally binding: Opening C to m' ≠ m requires solving ECDLP
(Zero-Knowledge Proof) A zero-knowledge proof for relation R allows a prover P
to convince a verifier V that (x, w) ∈ R (where x is public and w is witness) without revealing
any information about w beyond the truth of the statement.
We use Schnorr's protocol for proving knowledge of discrete logarithm:
Algorithm 11: Schnorr ZK Proof of Discrete Log
Prover Input: x such that P = xG
Verifier Input: P
Output: Proof (R, z)
Prover:
1. k ←$ ℤq
2. R ← kG
3. Send R to Verifier
Verifier:
4. c ←$ ℤq
5. Send c to Prover
Prover:
6. z ← k + cx mod q
7. Send z to Verifier
Verifier:
8. Accept if zG = R + cP
Sound: Cheating prover succeeds with probability 1/q
Zero-Knowledge: Transcript can be simulated without knowledge of x
Part III: Threshold Cryptography
Threshold Signature Schemes
((t,n)-Threshold Signature Scheme) A threshold signature scheme distributes signing
capability among n parties such that:
Any t parties can collaboratively produce a valid signature
Fewer than t parties cannot produce signatures or learn the private key
Signatures are indistinguishable from standard single-signer signatures
A threshold signature scheme consists of the following algorithms:
KeyGen(t, n) → (pk, {sk₁, ..., skₙ}): Generates public key and secret shares
Sign(m, S, {skᵢ}ᵢ∈S) → σ: Parties in S (|S| ≥ t) produce signature on m
Verify(pk, m, σ) → {0, 1}: Standard signature verification
Threshold ECDSA Protocols
Threshold ECDSA is significantly more complex than threshold Schnorr due to the non-linear
relationship s = k⁻¹(e + rx) in the signature equation.
The GG18 Protocol
Gennaro and Goldfeder (2018) introduced a two-round threshold ECDSA protocol based on
Paillier encryption.
(Paillier Encryption) The Paillier cryptosystem provides additive homomorphism:
Enc(m₁) · Enc(m₂) = Enc(m₁ + m₂)
Enc(m)ᵏ = Enc(km)
Algorithm 12: GG18 Threshold ECDSA - KeyGen
Parties: {P₁, P₂, ..., Pₙ}
Parameters: Threshold t, curve (G, q)
Output: Public key P, shares {xᵢ}
Phase 1: Distributed Key Generation
1. Each party Pᵢ:
a. Sample aᵢ₀ ←$ ℤq
b. Sample aᵢⱼ ←$ ℤq for j = 1,...,t-1
c. Define fᵢ(z) = Σⱼ₌₀ᵗ⁻¹ aᵢⱼzʲ
d. Compute commitments Cᵢⱼ = aᵢⱼG
e. Broadcast {Cᵢ₀, Cᵢ₁, ..., Cᵢ,ₜ₋₁}
2. Each party Pᵢ:
a. For each j ∈ [n], j ≠ i:
Send sᵢⱼ = fᵢ(j) to Pⱼ (encrypted)
3. Each party Pⱼ verifies received shares:
a. For each received sᵢⱼ:
Verify sᵢⱼG = Σₖ₌₀ᵗ⁻¹ jᵏCᵢₖ
b. If verification fails, broadcast complaint
4. Each party Pᵢ computes:
a. xᵢ = Σⱼ₌₁ⁿ sⱼᵢ (aggregate share)
b. P = Σⱼ₌₁ⁿ Cⱼ₀ (public key)
Phase 2: Paillier Key Setup
5. Each party Pᵢ:
a. Generate Paillier keypair (Nᵢ, (pᵢ, qᵢ))
b. Prove Nᵢ is product of two primes
c. Broadcast Nᵢ and proof
Algorithm 13: GG18 Threshold ECDSA - Sign
Input: Message m, signing set S (|S| ≥ t)
Output: Signature (r, s)
Phase 1: Nonce Generation (Multiplicative-to-Additive)
1. Each Pᵢ ∈ S:
a. Sample kᵢ, γᵢ ←$ ℤq
b. Compute Γᵢ = γᵢG
c. Broadcast commitment to Γᵢ
2. Each Pᵢ ∈ S after receiving all commitments:
a. Reveal Γᵢ
b. Γ = Σᵢ∈S Γᵢ = γG where γ = Σᵢ γᵢ
3. Multiplicative-to-Additive (MtA) protocol:
For each pair (i, j) ∈ S × S:
a. Pᵢ has kᵢ, Pⱼ has γⱼ
b. Run MtA to obtain αᵢⱼ, βᵢⱼ such that:
αᵢⱼ + βⱼᵢ = kᵢγⱼ
c. Pᵢ sets δᵢ = kᵢγᵢ + Σⱼ≠ᵢ (αᵢⱼ + βᵢⱼ)
Note: δ = Σᵢ δᵢ = (Σᵢ kᵢ)(Σᵢ γᵢ) = kγ
4. Each Pᵢ broadcasts δᵢ
5. δ = Σᵢ∈S δᵢ = kγ
Phase 2: Compute R Point
6. R = δ⁻¹Γ = (kγ)⁻¹(γG) = k⁻¹G = kG
7. r = Rx mod q
Phase 3: Signature Generation
8. Similar MtA for computing s:
Each Pᵢ computes σᵢ = kᵢ·e + kᵢ·r·xᵢ
where shares combine as:
s = k⁻¹(e + rx) = Σᵢ∈S λᵢσᵢ
9. Aggregate: s = Σᵢ∈S λᵢσᵢ mod q
10. return (r, s)
The GG20 Protocol
Gennaro and Goldfeder (2020) improved their protocol to achieve identifiable abort:
if signing fails, dishonest parties can be identified and removed.
(GG20 Security) The GG20 protocol is secure in the UC framework assuming:
DDH assumption in the elliptic curve group
Strong RSA assumption for Paillier encryption
Random oracle model for hash functions
With these assumptions, any adversary corrupting up to t-1 parties has negligible advantage in
forging signatures.
Security Analysis
(Share Secrecy) Given t-1 key shares {xᵢ}ᵢ∈S where |S| = t-1, no information
about the private key x is revealed.
The key shares are points on a polynomial of degree t-1. By the properties of Shamir's Secret
Sharing, t-1 points determine a family of q possible polynomials, each corresponding to a
different value of x = f(0). The distribution over x induced by t-1 shares is uniform over ℤq.
(Signature Unforgeability) An adversary corrupting fewer than t parties cannot
produce valid signatures except with negligible probability.
To forge a signature, the adversary must compute s = k⁻¹(e + rx). With fewer than t shares of
both k and x, the adversary gains no information about these values. Forging thus reduces to
breaking ECDSA with a random public key, which contradicts the ECDLP assumption.
Threshold EdDSA
Threshold EdDSA is simpler than threshold ECDSA due to the linear signature equation
s = r + ex.
Algorithm 14: Threshold EdDSA Signing
Input: Message m, signing set S (|S| ≥ t)
Output: Signature (R, s)
1. Nonce Generation:
Each Pᵢ ∈ S samples rᵢ ←$ ℤq
Pᵢ broadcasts Rᵢ = rᵢG
2. Aggregate nonce:
R = Σᵢ∈S Rᵢ
3. Challenge:
e = H(R || P || m)
4. Partial signatures:
Each Pᵢ computes sᵢ = rᵢ + e·λᵢ·xᵢ
where λᵢ is Lagrange coefficient
5. Aggregate:
s = Σᵢ∈S sᵢ mod q
6. return (R, s)
(Threshold EdDSA Correctness) The aggregated signature (R, s) satisfies:
R = Σᵢ rᵢG
s = Σᵢ sᵢ = Σᵢ (rᵢ + eλᵢxᵢ) = r + ex
Verification: sG = R + eP ✓
Part IV: Distributed Key Generation
DKG Protocol Specification
Distributed Key Generation (DKG) enables parties to jointly generate a keypair such that no
party learns the complete private key.
(DKG Security Properties) A secure DKG protocol satisfies:
Correctness: All honest parties output consistent public key and valid shares
Secrecy: The private key is uniformly distributed and unknown to any party
Parties: {P₁, P₂, ..., Pₙ}
Parameters: Threshold t, generators G, H
Output: Public key P, shares {xᵢ}, verification key {Aᵢ}
Phase 1: Sharing
1. Each party Pᵢ:
a. Sample secrets aᵢ₀, bᵢ₀ ←$ ℤq
b. Sample coefficients aᵢⱼ, bᵢⱼ ←$ ℤq for j = 1,...,t-1
c. Define polynomials:
fᵢ(z) = Σⱼ aᵢⱼzʲ
gᵢ(z) = Σⱼ bᵢⱼzʲ
d. Compute Pedersen commitments:
Cᵢⱼ = aᵢⱼG + bᵢⱼH
e. Broadcast Com(C) = H(C₀||C₁||...||Cₜ₋₁)
2. After receiving all commitments:
Each Pᵢ reveals {Cᵢⱼ}
Phase 2: Distribution
3. Each Pᵢ sends to each Pⱼ:
(sᵢⱼ, s'ᵢⱼ) = (fᵢ(j), gᵢ(j))
Phase 3: Verification
4. Each Pⱼ verifies received shares:
For each (sᵢⱼ, s'ᵢⱼ) from Pᵢ:
Check: sᵢⱼG + s'ᵢⱼH = Σₖ jᵏCᵢₖ
If fails: broadcast complaint against Pᵢ
Phase 4: Complaint Resolution
5. If Pⱼ complains about Pᵢ:
Pᵢ reveals (sᵢⱼ, s'ᵢⱼ) publicly
All verify; if invalid, Pᵢ is disqualified
Phase 5: Share Computation
6. Let Q ⊆ [n] be qualified parties
7. Each Pⱼ ∈ Q computes:
xⱼ = Σᵢ∈Q sᵢⱼ
P = Σᵢ∈Q Cᵢ₀
Key Resharing
Key resharing enables changing the set of shareholders while maintaining the same keypair.
Algorithm 16: Key Resharing
Old parties: {P₁, ..., Pₙ} with shares {xᵢ}
New parties: {P'₁, ..., P'ₘ}
Old threshold: t, New threshold: t'
Output: New shares {x'ⱼ} for new parties
1. Each old party Pᵢ with share xᵢ:
a. Create Feldman VSS of xᵢ with threshold t'
b. Define fᵢ(z) with fᵢ(0) = xᵢ
c. Publish commitments {Cᵢⱼ}
d. Send sᵢⱼ = fᵢ(j) to each P'ⱼ
2. Each new party P'ⱼ:
a. Verify received shares using commitments
b. Compute: x'ⱼ = Σᵢ λᵢsᵢⱼ
where λᵢ are Lagrange coefficients for old shares
3. Verify public key consistency:
P' = Σᵢ λᵢCᵢ₀ should equal P
Proactive Secret Sharing
Proactive Secret Sharing (PSS) refreshes shares periodically to maintain security against
mobile adversaries who may eventually compromise t parties.
(Mobile Adversary) An adversary who can corrupt different parties in different
time periods, potentially corrupting more than t total parties over time, but at most t-1 in
any single period.
Algorithm 17: Proactive Share Refresh
Parties: {P₁, ..., Pₙ} with shares {xᵢ}
Output: New shares {x'ᵢ} (same secret x)
1. Each party Pᵢ:
a. Sample random polynomial gᵢ(z) of degree t-1
with gᵢ(0) = 0
b. Compute shares: δᵢⱼ = gᵢ(j)
c. Send δᵢⱼ to Pⱼ (with VSS commitments)
2. Each party Pⱼ:
a. Verify all received shares
b. Compute new share: x'ⱼ = xⱼ + Σᵢ δᵢⱼ
Correctness: Since Σᵢ gᵢ(0) = 0, the secret is unchanged:
Σⱼ λⱼx'ⱼ = Σⱼ λⱼ(xⱼ + Σᵢ δᵢⱼ) = x + 0 = x
(PSS Security) After proactive refresh, shares obtained in previous periods
provide no information about current shares or the secret.
New shares are x'ⱼ = xⱼ + Σᵢ δᵢⱼ. Since each δᵢⱼ includes contributions from honest parties'
random polynomials, x'ⱼ is statistically independent of xⱼ given only the secret x. An
adversary with old shares and fewer than t current shares has no advantage.
Part V: Protocol Architecture
Network Topology
The PROXY Network operates as a permissionless peer-to-peer network where agents communicate
through a gossip protocol overlay. The network maintains both the security properties of
threshold cryptography and the liveness requirements of a production signing infrastructure.
(Network Graph) The PROXY Network is modeled as a graph G = (V, E) where
V represents the set of active agents and E represents authenticated communication channels.
The network is k-connected for k ≥ t to ensure protocol completion even under adversarial partitioning.
Agent Nodes
Each agent node in the network maintains the following state:
For each signing operation, a subset of t agents must be selected from the pool of n registered
agents. The selection algorithm must ensure randomness, unpredictability, and stake-weighted fairness.
Algorithm 19: Verifiable Random Agent Selection
Input: Key identifier keyId, request nonce ρ, agent registry R
Output: Selected agent set S where |S| = t
1. Compute randomness seed:
seed = H(keyId || ρ || blockHash(block.number - 1))
2. For each agent Aᵢ ∈ R:
a. Compute selection score:
scoreᵢ = H(seed || agentIdᵢ) mod 2²⁵⁶
b. Weight by stake:
weightedScoreᵢ = scoreᵢ / stakeᵢ
3. Sort agents by weightedScore (ascending)
4. S ← ∅
5. For i = 1 to t:
a. Add agent with i-th lowest weightedScore to S
b. Verify agent is online and responsive
6. If |S| < t after timeout: a. Continue selection with remaining agents b. Emit SlowAgentEvent for
non-responsive agents 7. return S
(Selection Fairness) Over many signing requests, the probability of agent Aᵢ
being selected is proportional to stakeᵢ / Σⱼ stakeⱼ.
The hash function H produces uniformly distributed outputs. Dividing by stake creates an
inverse relationship between stake and weighted score. Lower weighted scores are selected
first. Therefore, higher-stake agents have proportionally higher selection probability.
By the law of large numbers, observed frequency converges to stake proportion.
Signing Protocol
The complete signing flow integrates agent selection, threshold signing, and on-chain verification.
Algorithm 20: Complete Signing Protocol
Input: Message m, keyId, requester address
Output: Signature σ = (r, s) or ⊥
Phase 1: Request Initialization
1. Requester submits SignRequest(keyId, H(m), fee) to network
2. Request propagates via gossip to all agents
3. Coordinator elected: C = agent with min(H(requestId || agentId))
Phase 2: Agent Selection
4. Coordinator runs Algorithm 19 to select S
5. Coordinator broadcasts SelectedSet(S, proof)
6. Each Aᵢ ∈ S acknowledges readiness
Phase 3: Threshold Signing (GG20)
7. Run Algorithm 13 among parties in S
Sub-phase 3a: Nonce Generation
For each Aᵢ ∈ S:
a. kᵢ, γᵢ ←$ ℤq
b. Broadcast commitment Com(Γᵢ)
After all commitments received:
c. Reveal Γᵢ = γᵢG
d. Γ = Σᵢ∈S Γᵢ
Sub-phase 3b: Multiplicative-to-Additive
For each pair (i,j) ∈ S × S:
e. Run MtA protocol for kᵢ × γⱼ
f. Obtain shares αᵢⱼ, βⱼᵢ
Sub-phase 3c: Compute R
g. δᵢ = kᵢγᵢ + Σⱼ≠ᵢ(αᵢⱼ + βᵢⱼ)
h. Broadcast δᵢ
i. δ = Σᵢ δᵢ = kγ
j. R = δ⁻¹Γ, r = Rx mod q
Sub-phase 3d: Signature Generation
k. Each Aᵢ computes partial: σᵢ = mₑkᵢ + rxᵢkᵢ where mₑ = H(m)
l. Broadcast σᵢ
m. s = Σᵢ∈S λᵢσᵢ mod q
8. σ = (r, s)
Phase 4: Verification and Distribution
9. Coordinator verifies: Verify(P, m, σ) = Valid
10. If invalid, identify malicious party via GG20 abort
11. Broadcast FinalSignature(σ, participantList)
12. return σ
Protocol Timing
Phase
Expected Duration
Timeout
Agent Selection
50ms
500ms
Commitment Round
100ms
2s
MtA Protocol
200ms
5s
Signature Aggregation
50ms
1s
Total
400ms
8.5s
Communication Layer
Algorithm 21: Reliable Broadcast with Accountability
Input: Message m, sender S, recipients R
Output: Delivery confirmation or misbehavior proof
1. S computes commitment: c = H(m)
2. S → all: (ECHO, c, Sign_S(c))
3. Each Rᵢ upon receiving (ECHO, c, σ):
a. Verify signature σ
b. Store (c, σ) as delivery evidence
c. Send (READY, c) to all
4. Upon receiving t (READY, c) messages:
S → all: (SEND, m)
5. Each Rᵢ upon receiving (SEND, m):
a. Verify H(m) = c
b. Accept m as delivered
c. If H(m) ≠ c: publish misbehavior proof (c, σ, m)
Part VI: Smart Contracts
Contract Architecture
The PROXY Network on-chain components are implemented as a set of upgradeable smart contracts
following the proxy pattern for future protocol improvements.
Consider an agent's decision to behave honestly vs. attack:
Honest strategy payoff:
Expected rewards: r × f × (stake / total_stake) where r = requests/epoch, f = fee
Operational cost: c
Net: r × f × (stake / total_stake) - c
Attack strategy payoff:
Expected gain: v (value of attack)
Detection probability: p (approaches 1 due to verifiable protocols)
Slash amount: stake
Net: v - p × stake
For rational agents, honest behavior is preferred when:
r × f × (stake / total_stake) - c > v - p × stake
Given p → 1 for detectable misbehavior and stake requirements, this inequality holds for
typical attack values v, establishing honest behavior as the dominant strategy.
Algorithm 26: Attack Cost Analysis
Parameters:
n = number of agents
t = threshold
S_total = total staked value
S_min = minimum stake per agent
Attack Type 1: Key Extraction
Required: Compromise t agents
Cost: t × (S_total / n) + operational_cost
Expected return: assets_secured
Attack profitable when:
assets_secured > t × (S_total / n)
Defense: Ensure S_total > assets_secured × n / t
Attack Type 2: Denial of Service
Required: Take n - t + 1 agents offline
Cost: (n - t + 1) × attack_cost_per_agent
Expected return: Competitor advantage / ransom
Defense: Geographic and infrastructure diversity
Attack Type 3: 51% Stake Attack
Required: Control majority stake
Cost: (S_total / 2) × (1 + market_impact)
Defense: Stake caps, staking delays
Part VIII: Security Analysis
Threat Model
We consider the following adversary capabilities:
(Adversary Model) The adversary A can:
Corrupt up to t-1 agents (adaptive corruption)
Observe all network traffic between honest parties
Delay or reorder messages (but not indefinitely)
Submit arbitrary signing requests
Perform computational attacks bounded by poly(λ) operations
(Key Secrecy) Under the ECDLP assumption, the probability that any adversary
A corrupting fewer than t parties learns the private key x is negligible:
Pr[A outputs x | A corrupts < t parties] ≤ negl(λ)
We prove by reduction to ECDLP. Assume adversary A can learn x with non-negligible probability
ε.
We construct algorithm B that solves ECDLP:
Setup: B receives ECDLP challenge P = xG.
Simulation: B simulates the DKG protocol:
For corrupted parties, B samples random shares and provides to A
For honest parties, B uses the simulation property of the commitment scheme
to produce consistent transcripts without knowing the secrets
B sets the public key output as P (the ECDLP challenge)
Extraction: If A outputs x, then B outputs x as ECDLP solution.
By the information-theoretic security of (t,n)-secret sharing, A's view with t-1 shares
is independent of x. The only additional information is the public key P = xG. Therefore,
A's advantage in learning x is bounded by the ECDLP advantage, which is negl(λ).
(Unforgeability) The PROXY threshold signature scheme is existentially
unforgeable under chosen message attack (EUF-CMA):
Pr[A wins EUF-CMA | A corrupts < t parties] ≤ negl(λ)
Reduction to standard ECDSA security. Given forger A against threshold ECDSA, we construct
forger B against standard ECDSA:
Setup: B receives public key P from ECDSA challenger.
Key Distribution: B simulates DKG such that the resulting public key is P.
B can simulate honest parties' shares without knowing x using the zero-knowledge
property of VSS commitments.
Signing Queries: When A requests signature on m:
B forwards to ECDSA signing oracle, receives σ
B simulates the threshold signing protocol producing σ
This is possible because the output is identical to standard ECDSA
Forgery: If A outputs valid (m*, σ*) where m* was not queried:
B outputs (m*, σ*) to ECDSA challenger
This is a valid ECDSA forgery
Therefore, A's forgery probability is bounded by ECDSA forgery probability, which is
negl(λ) under ECDLP.
Attack Analysis
Algorithm 27: Byzantine Fault Analysis
Scenario: f Byzantine agents out of n total
Case 1: f < t (fewer than threshold malicious) - Cannot forge signatures ✓ - Cannot learn
private key ✓ - May delay but cannot prevent signing ✓ Case 2: f ≥ t (threshold or more
malicious) - Can forge signatures ✗ - Can learn private key ✗ - CRITICAL: This scenario must
be prevented economically Economic Defense: Pr(f ≥ t) ≤ Pr(stake_malicious ≥ t/n ×
total_stake) With stake_min and honest stake majority: Pr(compromise t agents) ≤
(cost_per_compromise / stake_min)^t For t=13, stake_min=$100k: Cost to compromise ≥ 13 ×
$100k × security_factor ≈ $10M+
Side-Channel Resistance
(Timing Attack Mitigation) All cryptographic operations are implemented
with constant-time algorithms to prevent timing side channels:
Scalar multiplication uses Montgomery ladder
Modular inversion uses Fermat's little theorem
Comparison operations use bitwise XOR accumulation
Part IX: Implementation
Reference Implementation
The PROXY Network reference implementation is written in Rust for performance and memory
safety, with bindings available for JavaScript, Python, and Go.
Storageagent = O(k) where k = number of managed
keys(9)
Appendices
Appendix A: Full Protocol Pseudocode
Algorithm 29: Complete DKG Ceremony
function DKG(parties P[1..n], threshold t):
// Phase 1: Commitment
for each Pᵢ in parallel:
aᵢ[0..t-1] ← random coefficients from ℤq
bᵢ[0..t-1] ← random coefficients from ℤq
Cᵢ[j] ← aᵢ[j]G + bᵢ[j]H for j = 0..t-1
broadcast Commit(hash(Cᵢ))
await all commitments
// Phase 2: Reveal
for each Pᵢ:
broadcast Cᵢ[0..t-1]
verify all received commitments match hashes
// Phase 3: Share Distribution
for each Pᵢ:
for each Pⱼ:
sᵢⱼ ← Σₖ aᵢ[k] × jᵏ mod q
s'ᵢⱼ ← Σₖ bᵢ[k] × jᵏ mod q
send (sᵢⱼ, s'ᵢⱼ) to Pⱼ encrypted
// Phase 4: Verification
for each Pⱼ:
for each received (sᵢⱼ, s'ᵢⱼ) from Pᵢ:
expected ← Σₖ jᵏ × Cᵢ[k]
if sᵢⱼG + s'ᵢⱼH ≠ expected:
broadcast Complaint(i, j)
// Phase 5: Complaint Resolution
for each Complaint(i, j):
Pᵢ reveals (sᵢⱼ, s'ᵢⱼ)
all verify; if invalid, disqualify Pᵢ
// Phase 6: Compute Results
Q ← set of non-disqualified parties
for each Pⱼ ∈ Q:
xⱼ ← Σᵢ∈Q sᵢⱼ mod q // secret share
P ← Σᵢ∈Q Cᵢ[0] // public key
return (P, {xⱼ})
Appendix B: Mathematical Notation
Symbol
Meaning
𝔽p
Finite field of prime order p
𝔾
Elliptic curve group
G
Generator point of 𝔾
q
Order of group 𝔾
ℤq
Integers modulo q
x ←$ S
x sampled uniformly from S
H(·)
Cryptographic hash function
[n]
Set {1, 2, ..., n}
negl(λ)
Negligible in security parameter
λᵢ
Lagrange coefficient for party i
(t, n)
t-of-n threshold scheme
xG
Scalar multiplication of G by x
P + Q
Elliptic curve point addition
Part X: Extended Mathematical Foundations
Finite Field Arithmetic
All cryptographic operations in PROXY Network are performed over finite fields. This
section provides
the complete mathematical foundation necessary for implementation.
Definition 10.1 (Prime Field) A prime field 𝔽p is the set
of integers
{0, 1, 2, ..., p-1} with addition and multiplication performed modulo p, where p is
prime.
Definition 10.2 (Field Axioms) For all a, b, c ∈ 𝔽p:
Closure: a + b ∈ 𝔽p and a · b ∈ 𝔽p
Associativity: (a + b) + c = a + (b + c) and (a · b) · c = a ·
(b · c)
Commutativity: a + b = b + a and a · b = b · a
Identity: a + 0 = a and a · 1 = a
Inverse: ∃(-a): a + (-a) = 0 and ∃(a⁻¹): a · a⁻¹ = 1 for a ≠ 0
Distributivity: a · (b + c) = a · b + a · c
Modular Exponentiation
Modular exponentiation is a fundamental operation in public-key cryptography, required
for computing powers in finite fields efficiently. The naive approach of computing
ae and then reducing modulo p is impractical for cryptographic-sized
exponents (typically 256 bits or larger), as intermediate results would be
astronomically large. Instead, we employ the square-and-multiply algorithm, which
reduces the complexity from O(e) to O(log e) multiplications by exploiting the binary
representation of the exponent.
This optimization is critical for PROXY's threshold signature operations, where each
participant must perform multiple exponentiations during key generation and signing. The
algorithm's efficiency directly impacts the overall protocol latency and computational
cost.
Algorithm 30: Square-and-Multiply Exponentiation
Input: Base a ∈ 𝔽p, exponent e = (eₙ₋₁...e₁e₀)₂
Output: aᵉ mod p
1. result ← 1
2. base ← a mod p
3. for i = 0 to n-1:
a. if eᵢ = 1:
result ← result × base mod p
b. base ← base² mod p
4. return result
Complexity: O(log e) multiplications
Algorithm 31: Montgomery Multiplication
Input: a, b ∈ [0, p), R = 2ᵏ where 2ᵏ⁻¹ ≤ p < 2ᵏ Precompute: p'=-p⁻¹ mod R Montgomery
Form: ā=aR mod p function MontMul(ā, b̄): 1. t ← ā × b̄ 2. u ← (t × p') mod R 3. v ←
(t + u × p) / R 4. if v ≥ p: return v - p 5. else: return v Output: ab̄=abR mod p
Modular Inversion
Computing multiplicative inverses modulo p is essential for division operations
in finite fields. The Extended Euclidean Algorithm provides an efficient method
to find a-1 mod p by simultaneously computing the GCD and the Bézout
coefficients. This operation appears frequently in elliptic curve point addition
(computing slopes) and in signature generation (computing k-1 in
ECDSA).
Alternatively, Fermat's Little Theorem offers a simpler but slightly less
efficient approach: since ap-1 ≡ 1 (mod p) for prime p, we have
a-1 ≡ ap-2 (mod p). This can be computed using the
square-and-multiply algorithm, trading algorithmic simplicity for a small
performance penalty.
Algorithm 32: Extended Euclidean Algorithm
Input: a ∈ 𝔽p*, p prime
Output: a⁻¹ mod p
1. (old_r, r) ← (p, a)
2. (old_s, s) ← (0, 1)
3. while r ≠ 0:
a. quotient ← old_r ÷ r (integer division)
b. (old_r, r) ← (r, old_r - quotient × r)
c. (old_s, s) ← (s, old_s - quotient × s)
4. if old_s < 0: old_s ← old_s + p 5. return old_s Verification: a × old_s ≡ 1
(mod p)
Theorem 10.1 (Fermat's Little Theorem) For prime p and
a ∈ 𝔽p*:
ap-1 ≡ 1 (mod p)
Therefore: a⁻¹ ≡ ap-2 (mod p)
Elliptic Curve Mathematics
Elliptic curves provide the mathematical foundation for modern threshold
cryptography. Unlike traditional discrete logarithm systems based on
multiplicative groups of finite fields, elliptic curves offer equivalent
security with much smaller key sizes—a 256-bit elliptic curve provides
security comparable to a 3072-bit RSA key. This efficiency is crucial
for PROXY's distributed architecture, where key shares and signatures
must be transmitted across the network.
The security of elliptic curve cryptography rests on the Elliptic Curve
Discrete Logarithm Problem (ECDLP): given points P and Q = kP on an
elliptic curve, finding the scalar k is computationally infeasible for
properly chosen curves. This hardness assumption underpins the security
of ECDSA signatures and threshold signature schemes used throughout
PROXY.
Weierstrass Form
Definition 10.3 (Short Weierstrass Curve) An elliptic
curve E over 𝔽p
in short Weierstrass form is:
E: y² = x³ + ax + b
where a, b ∈ 𝔽p and 4a³ + 27b² ≠ 0 (non-singular condition).
Lemma 10.1 The secp256k1 curve has the special form y²
= x³ + 7, enabling
optimized point operations due to a = 0.
Point Addition Formulas
The elliptic curve group law defines how to "add" two points on the
curve to produce a third point, also on the curve. Geometrically, point
addition corresponds to drawing a line through two points P and Q,
finding where it intersects the curve at a third point, and reflecting
that point across the x-axis. This geometric intuition translates into
algebraic formulas involving the curve equation.
Point addition is the fundamental operation underlying all elliptic
curve cryptography. In PROXY's threshold signatures, participants must
perform point additions when combining partial signatures and when
verifying commitments during distributed key generation. The efficiency
and correctness of these formulas directly impact the protocol's
performance and security.
Algorithm 33: Affine Point Addition
Input: P = (x₁, y₁), Q = (x₂, y₂) on curve E
Output: R = P + Q = (x₃, y₃)
Case 1: P = 𝒪 (point at infinity)
return Q
Case 2: Q = 𝒪
return P
Case 3: x₁ = x₂ and y₁ = -y₂
return 𝒪 // P + (-P) = 𝒪
Case 4: P ≠ Q (point addition)
λ ← (y₂ - y₁) / (x₂ - x₁) mod p
x₃ ← λ² - x₁ - x₂ mod p
y₃ ← λ(x₁ - x₃) - y₁ mod p
return (x₃, y₃)
Case 5: P = Q (point doubling)
λ ← (3x₁² + a) / (2y₁) mod p
x₃ ← λ² - 2x₁ mod p
y₃ ← λ(x₁ - x₃) - y₁ mod p
return (x₃, y₃)
Algorithm 34: Jacobian Projective
Coordinates
Representation: (X : Y : Z) represents affine (X/Z², Y/Z³)
Point Doubling (a = 0 optimization for secp256k1):
Input: P = (X₁, Y₁, Z₁)
Output: 2P = (X₃, Y₃, Z₃)
1. A ← Y₁²
2. B ← 4X₁ × A
3. C ← 8A²
4. D ← 3X₁²
5. X₃ ← D² - 2B
6. Y₃ ← D × (B - X₃) - C
7. Z₃ ← 2Y₁ × Z₁
Cost: 1M + 5S + 1*a + 7add + 2*2 + 1*3 + 1*8
(where M=multiplication, S=squaring)
Scalar Multiplication
Scalar multiplication—computing kP for a scalar k and point P—is the
most computationally intensive operation in elliptic curve cryptography.
A naive implementation would add P to itself k times, requiring O(k)
point additions. For cryptographic scalars (256 bits), this is
completely impractical. Instead, we use the double-and-add algorithm,
analogous to square-and-multiply for exponentiation, reducing complexity
to O(log k) point operations.
However, the basic double-and-add algorithm has a critical security
flaw: it performs different operations depending on whether each bit of
k is 0 or 1, creating a timing side channel that can leak the secret
scalar. For PROXY's threshold signing, where key shares must remain
confidential, we employ constant-time algorithms like the Montgomery
ladder, which perform the same operations regardless of bit values,
eliminating timing leaks.
Input: Scalar k = (kₙ₋₁...k₁k₀)₂, point P
Output: Q = kP
1. Q ← 𝒪
2. for i = n-1 down to 0:
a. Q ← 2Q (point doubling)
b. if kᵢ = 1:
Q ← Q + P (point addition)
3. return Q
Security Note: This basic algorithm is NOT constant-time
and leaks information through timing side channels.
Algorithm 36: Montgomery Ladder
(Constant-Time)
Input: Scalar k = (kₙ₋₁...k₁k₀)₂, point P
Output: Q = kP
1. R₀ ← 𝒪
2. R₁ ← P
3. for i = n-1 down to 0:
a. if kᵢ = 0:
R₁ ← R₀ + R₁
R₀ ← 2R₀
b. else:
R₀ ← R₀ + R₁
R₁ ← 2R₁
4. return R₀
Property: Same operations regardless of bit value
(constant-time execution)
Hash Function Specifications
Cryptographic hash functions are essential building blocks in PROXY's
security architecture, serving multiple critical roles: deriving message
digests for signatures, generating deterministic nonces (RFC 6979),
creating commitments in zero-knowledge proofs, and implementing the
Fiat-Shamir transform to make interactive protocols non-interactive. The
security of these applications depends on the hash function's collision
resistance, preimage resistance, and pseudorandomness properties.
PROXY supports both SHA-256 (used by Bitcoin and most ECDSA
implementations) and Keccak-256 (used by Ethereum), ensuring
compatibility across different blockchain ecosystems. Understanding the
internal structure of these hash functions is important for
implementation correctness and for analyzing their security properties
in the context of threshold cryptography.
SHA-256 Internals
Definition 10.4 (SHA-256) SHA-256 processes messages in
512-bit blocks
and produces a 256-bit digest using the Merkle-Damgård construction.
Algorithm 37: SHA-256 Compression Function
Initial Hash Values (first 32 bits of fractional parts of √primes):
H₀ = 0x6a09e667, H₁ = 0xbb67ae85, H₂ = 0x3c6ef372, H₃ = 0xa54ff53a
H₄ = 0x510e527f, H₅ = 0x9b05688c, H₆ = 0x1f83d9ab, H₇ = 0x5be0cd19
Round Constants K[0..63] (first 32 bits of ∛primes):
K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, ...]
Message Schedule:
for i = 0 to 15:
W[i] ← M[i] (message block words)
for i = 16 to 63:
σ₀ ← ROTR⁷(W[i-15]) ⊕ ROTR¹⁸(W[i-15]) ⊕ SHR³(W[i-15])
σ₁ ← ROTR¹⁷(W[i-2]) ⊕ ROTR¹⁹(W[i-2]) ⊕ SHR¹⁰(W[i-2])
W[i] ← W[i-16] + σ₀ + W[i-7] + σ₁
Compression (64 rounds):
(a,b,c,d,e,f,g,h) ← (H₀,...,H₇)
for i = 0 to 63:
Σ₁ ← ROTR⁶(e) ⊕ ROTR¹¹(e) ⊕ ROTR²⁵(e)
Ch ← (e ∧ f) ⊕ (¬e ∧ g)
T₁ ← h + Σ₁ + Ch + K[i] + W[i]
Σ₀ ← ROTR²(a) ⊕ ROTR¹³(a) ⊕ ROTR²²(a)
Maj ← (a ∧ b) ⊕ (a ∧ c) ⊕ (b ∧ c)
T₂ ← Σ₀ + Maj
(a,b,c,d,e,f,g,h) ← (T₁+T₂, a, b, c, d+T₁, e, f, g)
Output: (H₀+a, H₁+b, ..., H₇+h)
Keccak-256 (Ethereum)
Keccak-256, the hash function used in Ethereum, is based on the sponge
construction—a fundamentally different design paradigm from the
Merkle-Damgård construction used in SHA-256. The sponge construction
provides inherent resistance to length-extension attacks and offers
greater flexibility in output length. For PROXY's Ethereum integration,
using Keccak-256 ensures that message hashes match exactly what Ethereum
smart contracts expect, preventing subtle incompatibilities.
Algorithm 38: Keccak-256 Sponge
Construction
State: 5×5 array of 64-bit lanes (1600 bits total)
Rate r = 1088 bits, Capacity c = 512 bits
Absorbing Phase:
1. Pad message M with 10*1 padding
2. for each r-bit block Pᵢ:
a. S ← S ⊕ (Pᵢ || 0ᶜ)
b. S ← Keccak-f[1600](S)
Squeezing Phase:
1. Z ← ∅
2. while |Z| < 256: a. Z ← Z || S[0:r] b. S ← Keccak-f[1600](S) 3.
return Z[0:256] Keccak-f[1600] consists of 24 rounds of: θ (theta),
ρ (rho), π (pi), χ (chi), ι (iota)
ECDSA Mathematics
The Elliptic Curve Digital Signature Algorithm (ECDSA) is the
signature scheme used by Bitcoin, Ethereum (for EOAs), and most
blockchain systems. Understanding its complete mathematical
specification is essential for implementing threshold ECDSA
correctly. The security of ECDSA relies on the hardness of the
ECDLP and on the proper generation of the per-signature nonce
k—any bias or reuse of k can lead to complete private key
recovery.
In PROXY's threshold setting, generating k becomes significantly
more complex because no single party can know the full nonce.
Instead, parties must collaboratively generate k using
distributed key generation or verifiable secret sharing, while
ensuring that k remains unpredictable and is never reused. The
threshold ECDSA protocols in Part III build upon this
single-party specification.
Domain Parameters: (p, a, b, G, n, h) for curve E
Private Key: d ∈ [1, n-1]
Public Key: Q = dG
Sign(m, d):
1. e ← H(m) where H is SHA-256 or Keccak-256
2. z ← leftmost min(n.bit_length(), 256) bits of e
3. Select k ∈ [1, n-1] using RFC 6979 deterministic generation:
RFC 6979 k generation:
a. V ← 0x01 0x01 ... 0x01 (32 bytes)
b. K ← 0x00 0x00 ... 0x00 (32 bytes)
c. K ← HMAC-SHA256(K, V || 0x00 || int2octets(d) ||
bits2octets(e))
d. V ← HMAC-SHA256(K, V)
e. K ← HMAC-SHA256(K, V || 0x01 || int2octets(d) ||
bits2octets(e))
f. V ← HMAC-SHA256(K, V)
g. while True:
T ← ∅
while len(T) < ceil(n.bit_length()/8): V ← HMAC-SHA256(K, V) T ←
T || V k ← bits2int(T) if 1 ≤ k ≤ n-1 and (kG).x ≠ 0: break
K ← HMAC-SHA256(K, V || 0x00) V ← HMAC-SHA256(K, V) 4. (x₁,
y₁) ← kG 5. r ← x₁ mod n 6. if r=0: goto step 3 7. s ← k⁻¹(z
+ rd) mod n 8. if s=0: goto step 3 9. return (r, s) Low-S
normalization (BIP-146): if s> n/2: s ← n - s
Input: Message m, signature (r, s), public key Q
Output: Valid or Invalid
1. Verify r, s ∈ [1, n-1]
2. e ← H(m)
3. z ← leftmost min(n.bit_length(), 256) bits of e
4. w ← s⁻¹ mod n
5. u₁ ← zw mod n
6. u₂ ← rw mod n
7. (x₁, y₁) ← u₁G + u₂Q
8. if (x₁, y₁) = 𝒪: return Invalid
9. v ← x₁ mod n
10. if v = r: return Valid
11. else: return Invalid
Batch Verification (optional optimization):
For signatures {(mᵢ, (rᵢ, sᵢ), Qᵢ)}:
Pick random αᵢ ∈ [1, 2¹²⁸]
Check: Σᵢ αᵢu₁ᵢG + Σᵢ αᵢu₂ᵢQᵢ = Σᵢ αᵢRᵢ
Polynomials over Finite Fields
Polynomials over finite fields are the mathematical foundation
of Shamir's Secret Sharing and all threshold cryptography
schemes used in PROXY. The key insight is that a polynomial of
degree t-1 is uniquely determined by t points: given t
evaluations f(x₁), f(x₂), ..., f(xₜ), we can reconstruct the
entire polynomial f(x) using Lagrange interpolation. This
property enables threshold schemes where any t participants can
reconstruct a secret (the polynomial's constant term f(0)), but
t-1 or fewer participants learn nothing.
Efficient polynomial evaluation and interpolation are critical
for PROXY's performance. During distributed key generation, each
participant evaluates their polynomial at n points to create
shares. During signing, participants use Lagrange interpolation
to combine partial signatures. These operations occur in every
signing request, so their efficiency directly impacts PROXY's
throughput and latency.
Definition 10.5 (Polynomial Ring)
𝔽q[x] is the ring of polynomials
with coefficients in 𝔽q:
Input: Polynomial f(x) = Σᵢ aᵢxⁱ, evaluation point α
Output: f(α)
1. result ← aₜ (leading coefficient)
2. for i = t-1 down to 0:
result ← result × α + aᵢ
3. return result
Complexity: O(t) multiplications, O(t) additions
Algorithm 42: Lagrange
Interpolation
Input: Points {(xᵢ, yᵢ)}ᵢ₌₁ᵗ in 𝔽q
Output: Unique polynomial f of degree < t with f(xᵢ)=yᵢ Lagrange
basis polynomials: ℓⱼ(x)=∏ᵢ≠ⱼ (x - xᵢ)/(xⱼ - xᵢ)
Interpolating polynomial: f(x)=Σⱼ yⱼ · ℓⱼ(x) Lagrange
coefficients at x=0: λⱼ=ℓⱼ(0)=∏ᵢ≠ⱼ (-xᵢ)/(xⱼ - xᵢ)=∏ᵢ≠ⱼ
xᵢ/(xᵢ - xⱼ) Secret reconstruction: s=f(0)=Σⱼ yⱼ · λⱼ
Part XI: Formal Security Definitions
Formal security definitions provide the mathematical foundation for proving that cryptographic protocols are secure. Unlike informal arguments or heuristic analysis, formal security uses rigorous mathematical frameworks to define what it means for a protocol to be "secure" and to prove that breaking the protocol is as hard as solving a well-studied computational problem (like the discrete logarithm problem). This approach, pioneered by Goldwasser and Micali in the 1980s, has become the gold standard for cryptographic research and is essential for high-assurance systems like PROXY.
The core methodology of provable security is the security game (also called a security experiment). In a security game, we define an adversary A who interacts with a challenger C according to specific rules. The adversary's goal is to "win" the game by accomplishing some task that violates the security property we care about (e.g., forging a signature, recovering a secret key). We say a protocol is secure if no probabilistic polynomial-time (PPT) adversary can win the game with non-negligible probability.
For PROXY's threshold signature protocol, we must prove security against multiple threat models: an adversary who can corrupt up to t-1 participants, an adversary who can observe network traffic, an adversary who can adaptively choose which messages to sign, and even an adversary who can cause some participants to behave maliciously. Each threat model corresponds to a different security game, and our protocol must be proven secure in all relevant games.
Cryptographic Security Models
Before defining specific security games, we must establish the mathematical foundations: what does it mean for a function to be "negligible"? What does it mean for two probability distributions to be "indistinguishable"? These concepts, formalized below, allow us to make precise statements about security that hold asymptotically as the security parameter λ grows.
Definition 11.1 (Negligible Function) A
function ν: ℕ → ℝ is negligible if
for every positive polynomial p(·), there exists N such
that for all n > N:
ν(n) < 1/p(n)
Definition 11.2 (Computational
Indistinguishability) Ensembles {Xₙ} and
{Yₙ}
are computationally indistinguishable if for all PPT
distinguishers D:
|Pr[D(1ⁿ, Xₙ) = 1] - Pr[D(1ⁿ, Yₙ) =
1]| ≤ negl(n)
ECDLP Assumption
Definition 11.3 (Elliptic Curve Discrete
Logarithm Problem)
Given group 𝔾 of prime order q with generator G and
random Q = xG where x ∈ ℤq,
the ECDLP assumption states that for all PPT adversaries
A:
Pr[A(G, Q) = x] ≤ negl(λ)
Theorem 11.1 (Best Known Attack) The
best known algorithm for solving ECDLP
on curves with no special structure is Pollard's rho
algorithm with expected running time
O(√q) ≈ O(2128) for 256-bit curves.
Security Games
Security games formalize the interaction between an adversary and a cryptographic system. The most important security notion for digital signatures is Existential Unforgeability under Chosen Message Attack (EUF-CMA), which captures the requirement that an adversary cannot forge a valid signature on any new message, even after seeing signatures on many messages of their choice. This is the strongest standard security notion for signature schemes and is essential for PROXY's use in blockchain transactions.
In the EUF-CMA game defined below, the adversary A can adaptively query a signing oracle on any messages they choose, building up a set Q of signed messages. The adversary wins if they can produce a valid signature on any message m* that was not in Q. The scheme is secure if no PPT adversary can win with non-negligible probability. This definition ensures that PROXY signatures cannot be forged, even by an attacker who has observed millions of legitimate signatures.
Algorithm 43: EUF-CMA
Security Game
Experiment EUF-CMA_Π,A(λ):
Setup:
1. (sk, pk) ← KeyGen(1^λ)
2. Q ← ∅ // Set of queried messages
Query Phase:
3. A gets oracle access to Sign(sk, ·)
4. For each query mᵢ:
a. σᵢ ← Sign(sk, mᵢ)
b. Q ← Q ∪ {mᵢ}
c. Return σᵢ to A
Forgery:
5. A outputs (m*, σ*)
Win Condition:
6. A wins if:
a. Verify(pk, m*, σ*) = 1
b. m* ∉ Q
Advantage:
Adv^{EUF-CMA}_Π,A(λ) = Pr[A wins]
The scheme Π is EUF-CMA secure if for all PPT A:
Adv^{EUF-CMA}_Π,A(λ) ≤ negl(λ)
Threshold Security Definitions
Threshold cryptography introduces additional complexity to security definitions because we must account for adversaries who can corrupt some participants. The security model must specify: (1) how many participants the adversary can corrupt (typically up to t-1 in a (t,n)-threshold scheme), (2) whether corruption is static (chosen before the protocol starts) or adaptive (chosen during execution), and (3) whether corrupted participants are passively monitored or actively controlled by the adversary.
For PROXY, we require security against a static adversary who can corrupt up to t-1 participants and fully control their behavior. This means that as long as t honest participants follow the protocol correctly, the threshold signature scheme remains unforgeable and the secret key remains secure. This is formalized in the threshold unforgeability definition below, which extends the standard EUF-CMA game to the threshold setting.
Definition 11.4 (Threshold
Unforgeability) A (t, n)-threshold
signature scheme
is unforgeable if no coalition of up to t-1 corrupted
parties can produce a valid signature
on a message not signed by at least t honest parties.
Algorithm 44: Threshold
Signature Security Game
Experiment THRESH-UF_Π,A(λ):
Setup:
1. Run KeyGen with n parties, A corrupts S ⊂ [n] where
|S| < t 2. A receives {skᵢ}ᵢ∈S (corrupted shares) 3. Q ←
∅ Query Phase: 4. A can request threshold signatures
on messages 5. For query mᵢ: a. Honest parties run
Sign protocol b. Q ← Q ∪ {mᵢ} Forgery: 6. A outputs
(m*, σ*) Win Condition: 7. A wins if Verify(pk, m*,
σ*)=1 and m* ∉ Q Security requires: Pr[A wins] ≤
negl(λ)
MPC Security
Definition 11.5 (UC Security) A
protocol π UC-realizes ideal functionality ℱ
if for any PPT adversary A attacking π, there
exists a PPT simulator S such that for all
PPT environments Z:
Theorem 11.2 (GG20 UC Security)
The GG20 threshold ECDSA protocol UC-realizes
the ideal threshold signature functionality
ℱTSIG under the following
assumptions:
ECDLP is hard in the elliptic curve
group
Strong RSA assumption holds
DDH assumption holds
Random oracle model for hash functions
Part XII: Detailed Attack Analysis
Attack Taxonomy
This section provides comprehensive analysis of
potential attacks against the PROXY Network
and corresponding mitigations.
Attack Category 1: Cryptographic Attacks
Algorithm 45: Key
Reconstruction Attack
Attacker Goal: Recover private key x from
threshold shares
Attack Vector:
1. Adversary corrupts exactly t-1 parties
2. Obtains t-1 shares {xᵢ}ᵢ∈C where |C| = t-1
Analysis:
- Shares lie on polynomial f(x) of degree t-1
- f(0) = x (secret)
- t-1 points determine ∞ possible polynomials of
degree t-1
- Information-theoretically, any value of x is
equally likely
Formal Statement:
∀x₁, x₂ ∈ 𝔽q: Pr[secret = x₁ | view_C] =
Pr[secret = x₂ | view_C]
Mitigation: Built into SSS mathematical
properties
Algorithm 46: Rogue
Key Attack
Attacker Goal: Bias distributed key to known
value
Attack Vector:
1. During DKG, adversary chooses their
polynomial coefficient
as aᵢ,₀ = -Σⱼ∈H aⱼ,₀ + x* for desired key x*
2. Resulting key would be x = Σⱼ aⱼ,₀ = x*
Defense (Feldman/Pedersen VSS):
- Each party commits to Cᵢ,ⱼ = aᵢ,ⱼG before
seeing others
- Commitment is binding: cannot change aᵢ,ⱼ
after commit
- Public key X = Σᵢ Cᵢ,₀ is verifiable
Detection:
- If adversary uses aᵢ,₀ ≠ extracted value, ZK
proof fails
Attack Category 2: Protocol Attacks
Algorithm 47:
Signing Denial of Service
Attacker Goal: Prevent valid signature
generation
Attack Vectors:
1. Selected party refuses to participate
2. Party sends invalid partial signature
3. Party sends correct partial for different
message
Mitigation - GG20 Identifiable Abort:
1. Each party commits to their values before
reveal
2. Zero-knowledge proofs verify correctness
3. If verification fails, specific party is
identified
4. Identified party is slashed and excluded
Protocol Response:
1. Timeout triggers identification phase
2. Parties reveal commitments with proofs
3. Verifier identifies non-compliant party
4. New signing round excludes bad party
5. Economic penalty applied via smart contract
Algorithm 48:
Replay Attack
Attacker Goal: Reuse old signatures or protocol
messages
Attack Vectors:
1. Replay old valid signature
2. Replay old DKG shares
3. Replay old MPC messages
Mitigations:
1. Nonce binding: k is unique per signature
2. Session IDs: Each protocol run has unique ID
3. Epoch numbers: Protocol messages include
epoch
4. Request nonces: User includes nonce in
request
Verification:
- Smart contract checks nonce hasn't been used
- Nodes reject messages with old epoch/session
Attack Category 3: Economic Attacks
Algorithm 49:
Bribery Attack
Attacker Goal: Bribe t parties to reveal shares
Economic Model:
- Total value secured: V
- Number of agents: n
- Threshold: t
- Stake per agent: S
- Bribe per agent: B
Attack Success Condition:
B > S (bribe exceeds potential slash)
Cost to Attacker:
C = t × B > t × S
Security Requirement:
t × S > V (cost to attack exceeds value gained)
Parameter Selection:
Given V (max value to secure):
S > V/t
Example:
V = $100M, t = 13
S > $100M / 13 ≈ $7.7M per agent
Algorithm 50: Stake
Centralization Attack
Attacker Goal: Accumulate enough stake to
control t agents
Attack Vector:
1. Gradually acquire stake in PROXY tokens
2. Register multiple colluding agents
3. Wait until controlling t of selected agents
Mitigations:
1. Stake cap per entity: max_stake <
total_stake/t 2. Registration delay: Cannot
participate for 7 days 3. Identity
verification: Sybil resistance 4. Stake
distribution monitoring: Alert on
concentration 5. Governance can freeze
suspicious entities
Side-Channel Attacks
Algorithm
51: Timing Side Channel
Attacker Goal: Extract secret key from
timing measurements
Attack Vector:
- Measure time of scalar multiplication
kG
- Different bits of k lead to different
operations
- Statistical analysis reveals k
Countermeasures:
1. Montgomery ladder: Same operations
per bit
2. Constant-time modular arithmetic
3. Blinding: Compute (k + rn)G for
random r
4. No secret-dependent branches or
memory access
Part XIII: Case Studies and
Applications
Case Study 1: Cross-Chain Bridge
This case study demonstrates integration
of PROXY Network as the signing backend
for a
cross-chain asset bridge between
Ethereum and Solana.
Algorithm
52: Case Study 1.1: Bridge
Architecture
Components:
1. Ethereum Lock Contract (0x...)
2. Solana Mint Program
3. PROXY Network Signing Cluster (n=24,
t=13)
4. Relayer Network
Flow - ETH → Wrapped ETH on Solana:
1. User locks 1 ETH in Ethereum contract
2. Event emitted: Lock(user, 1 ETH,
solanaAddress)
3. Relayers detect event, submit to
PROXY
4. PROXY agents verify:
a. Transaction confirmed (12 blocks)
b. Amount matches
c. No double-spend
5. Agents run threshold signing for
Solana tx
6. Signature broadcast to Solana
7. Wrapped ETH minted to user's Solana
address
Security Properties:
- No single point of failure
- Private key never exists in one
location
- Economic security: 13 × $10M stake =
$130M
- Maximum bridge TVL should be < $130M
Integration Code
Algorithm 53: Case Study
1.2: Bridge Smart Contract
Algorithm 54: Case Study
2.1: DAO Treasury Management
Scenario: A DeFi protocol with
$500M treasury
Requirements:
- Multi-sig for large
transactions (>$1M)
- Automated payments for smaller
amounts
- Geographic distribution of
signers
- Regulatory compliance (no
single jurisdiction)
PROXY Configuration:
- n = 15 agents across 10
countries
- t = 10 for major decisions
- Lower threshold t' = 5 for
routine operations
Policy Engine:
function canSign(request) {
if (request.amount > 1_000_000)
{
return requireQuorum(10,
request);
} else if (request.type ==
"SCHEDULED_PAYMENT") {
return verifySchedule(request)
&& requireQuorum(5, request);
} else {
return requireQuorum(7,
request);
}
}
Monthly Operations:
- Payroll: 50 automated
signatures
- Grants: 10-20 multi-sig
approvals
- Emergency: 1-2 high-threshold
operations
Case Study 3: Institutional
Custody
Algorithm 55: Case Study
3.1: Institutional Key
Management
Client: Hedge fund with $2B in
crypto assets
Regulatory Requirements:
- SOC 2 Type II compliance
- Geographic redundancy
- Disaster recovery < 4 hours -
Audit trail for all
operations PROXY Deployment:
- 3 geographic regions (US,
EU, APAC) - 8 agents per
region=24 total - t=13
(requires participation from
2+ regions) - Hardware
Security Modules (HSM) for
share storage Access
Control: Level 1: Trading
desk (t=5, limit $10M/day)
Level 2: Treasury ops (t=10,
limit $100M/day) Level 3:
Executive (t=13, unlimited)
Audit Features: - All
signing requests logged
on-chain - Video
verification for Level 3 -
Time-locked transactions
with cancel period
Part XIV:
Governance and Roadmap
Governance Framework
Definition 14.1
(Governance
Token) The
PROXY governance token
grants holders
voting power
proportional to their
stake in protocol
decisions including
parameter changes,
upgrades, and treasury
allocation.
Governance Parameters
Parameter
Current Value
Governance
Control
Minimum Agent
Stake
100,000 PROXY
DAO Vote
Maximum Agent
Stake
5% of total
DAO Vote
Default
Threshold (t/n)
13/24
DAO Vote
Signing Fee
0.001 PROXY
DAO Vote
Slashing
Percentage
10-100%
DAO Vote
Treasury
Allocation
15% of fees
DAO Vote
Protocol
Upgrades
N/A
Timelock + DAO
Algorithm 56:
Governance Proposal
Flow
Proposal Lifecycle:
1. DRAFT (off-chain)
- Author writes proposal
specification
- Community discussion
(min 7 days)
- Required: Title,
Abstract, Specification,
Rationale
2. PENDING (on-chain)
- Author submits
proposal + 100,000 PROXY
deposit
- Validation period: 2
days
- Can be cancelled by
author
3. ACTIVE (voting)
- Voting period: 7 days
- Quorum required: 10%
of total supply
- Options: For, Against,
Abstain
- Vote weight = token
balance at snapshot
4. PASSED/FAILED
- Pass threshold: >50%
of votes (excluding
abstain)
- If failed: deposit
partially slashed (10%)
- If passed: proceed to
execution
5. QUEUED
- Timelock period: 48
hours (standard) / 14
days (critical)
- Can be vetoed by
Security Council during
timelock
6. EXECUTED
- Automatic execution
via smart contract
- Deposit returned to
author
Number used
once, for
randomness in
cryptographic
protocols
Paillier
Additively
homomorphic
encryption
scheme
PSS
Proactive Secret
Sharing
Schnorr
Schnorr
signature scheme
(basis for
EdDSA)
secp256k1
Elliptic curve
used in Bitcoin
and Ethereum
Slashing
Economic penalty
for agent
misbehavior
SSS
Shamir's Secret
Sharing
Threshold
Minimum number
of parties
required for
operation
UC Security
Universally
Composable
security
framework
VSS
Verifiable
Secret Sharing
ZKP
Zero-Knowledge
Proof
Appendix G: PROXY Network - The First Decentralized Signing Layer
PROXY Network represents a new category of blockchain infrastructure: the decentralized signing layer. Just as Chainlink created the oracle network category for off-chain data, PROXY Network creates the signing network category for cryptographic operations. This is not an evolution of existing solutions—it is a fundamentally new primitive.
The Infrastructure Stack
Layer
Category
Protocol
Function
Application
DApps
Uniswap, Aave, etc.
User-facing applications
Data
Oracle Network
Chainlink
Off-chain data feeds
Signing
Signing Network
PROXY Network
Decentralized key management & signing
Consensus
Base Layer
Ethereum, Solana, etc.
Transaction finality
Why PROXY Network is Unique
No existing protocol operates at the signing layer. Other solutions either operate at a different layer or serve a different purpose:
Multi-signature wallets (Gnosis Safe): Application-layer smart contracts, not infrastructure. Require on-chain transactions for every signature.
Centralized MPC providers: Not decentralized, not permissionless, not infrastructure—they are services.
Bridge-specific solutions: Purpose-built for single use cases, not general-purpose signing infrastructure.
PROXY Network is the first and only on-chain, decentralized, permissionless signing network—a new infrastructure layer that any application can integrate to gain threshold signing capabilities without building their own MPC infrastructure.
Part XVI:
Performance Analysis and
Benchmarks
Computational Complexity
Analysis
Definition 16.1
(Protocol
Complexity)
For a (t, n) threshold
signature with
security parameter λ:
DKG Computation:
O(n²) modular
exponentiations
DKG
Communication:
O(n²) messages,
O(n³λ) bits
total
Signing
Computation:
O(t) modular
exponentiations
per party
Signing
Communication:
O(t²) messages,
O(t²λ) bits
total
//
SPDX-License-Identifier:
MIT
pragma solidity ^0.8.19;
interface IProxyVerifier
{
/// @notice Verify a
threshold signature from
the PROXY network
/// @param message The
message that was signed
(32 bytes)
/// @param signature The
ECDSA signature (r, s,
v)
/// @param keyId The
identifier of the
signing key
/// @return valid True
if signature is valid
function verify(
bytes32 message,
bytes calldata
signature,
bytes32 keyId
) external view returns
(bool valid);
/// @notice Get the
public key for a key ID
/// @param keyId The key
identifier
/// @return pubKeyX The
x-coordinate of the
public key
/// @return pubKeyY The
y-coordinate of the
public key
function
getPublicKey(bytes32
keyId)
external view returns
(uint256 pubKeyX,
uint256 pubKeyY);
/// @notice Check if a
key is active and has
sufficient signers
/// @param keyId The key
identifier
/// @return active True
if key is active with
available quorum
function
isKeyActive(bytes32
keyId) external view
returns (bool active);
}
Part XIX:
Super-Linear Staking
Economics
Quadratic Security Model
Traditional staking
systems provide linear
security guarantees:
doubling the stake
doubles the cost
of attack. PROXY Network
implements super-linear
(quadratic) staking,
where the security
guarantee
grows as the square of
total stake, making
attacks economically
infeasible at scale.
Definition 19.1
(Super-Linear
Security) A
staking system provides
super-linear
security if the cost to
corrupt the system C(S)
satisfies:
C(S) =
Ω(Sα) for
some α > 1
where S is the total
stake in the system. For
quadratic security, α =
2.
Theorem 19.1
(Attack Cost Lower
Bound)
Under the PROXY
super-linear staking
model
with n = 24 agents,
threshold t = 13, and
minimum stake
Smin per
agent:
Cattack ≥
(t ×
Smin)2
/ Vmax
where Vmax is
the maximum value the
attacker can extract
from a single
corruption.
Proof.
Consider an adversary
attempting to corrupt t
agents. Each agent
requires a bribe
exceeding their stake to
defect. The concentrated
alerter mechanism
ensures any corruption
attempt is detected with
probability
pdetect ≥ 1 -
(1/2)t.
The expected cost is:
E[Cost] = B × t +
pdetect ×
Penalty
With slashing penalty =
100% of stake for
detected corruption:
E[Cost] ≥ t ×
Smin + (1
- 2-t) ×
t × Smin
As t → ∞, E[Cost] → 2 ×
t × Smin. The
quadratic term arises
from the
concentration effect of
multiple independent
alerters. ∎
Maximal
Extractable
Value (MEV)
attacks exploit
transaction
ordering to
extract value
from users.
PROXY Network's
Fair Sequencing
Services (FSS)
implements
cryptographic
ordering
guarantees that
prevent
front-running,
sandwich
attacks, and
other MEV
exploitation.
Definition
20.1 (Fair
Ordering)
A transaction
ordering is fair
if it satisfies:
Temporal
Consistency:
If tx₁
was
received
by ≥t
nodes
before
tx₂,
then tx₁
is
ordered
before
tx₂
Causal
Independence:
The
content
of tx₁
cannot
influence
whether
tx₂ is
ordered
before
or after
tx₁
Goal: Order
transactions
without
revealing
content until
order is
finalized
Setup:
- Threshold
encryption
keypair (t, n):
(PK_FSS, sk₁,
sk₂, ..., skₙ)
- Time window: W
(e.g., 100ms)
Phase 1:
Encrypted
Submission
1. User encrypts
transaction: C =
Enc(PK_FSS, tx)
2. User
broadcasts C to
all n agents
3. Each agent Aᵢ
records: (C,
timestamp_i,
signature_i)
Phase 2:
Timestamp
Aggregation
4. After window
W, each agent
broadcasts their
timestamp set:
T_i = {(C_j,
ts_ij, σ_ij) for
all received
transactions}
5. Byzantine
agreement on
timestamp
median:
For each C:
ts_final(C) =
median({ts_ij
for i in honest
set})
Phase 3: Order
Determination
6. Sort
transactions by
ts_final:
Order =
sort([(C,
ts_final(C)) for
all C])
7. Threshold
decryption of
ordered
transactions:
For each C in
Order:
partial_i =
ThresholdDecrypt(skᵢ,
C)
if ≥t partials
received:
tx =
Combine(partial₁,
..., partialₜ)
emit tx to
execution layer
Security
Guarantees:
- Front-running
impossible: tx
content unknown
during ordering
- Sandwich
attacks fail:
cannot insert tx
between target
and DEX
- Reordering
requires ≥t
corrupt agents
(threshold)
FIFO Ordering
with
Cryptographic
Timestamps
Algorithm
69:
Verifiable
FIFO Queue
Data Structure:
Merkle-based
priority queue
with timestamp
proof
Insert(tx,
timestamp):
1. Compute
tx_hash = H(tx)
2. Create
timestamp proof:
π_time =
VRF(sk_agent,
timestamp ||
tx_hash)
3. Insert into
local queue with
priority =
timestamp
4. Broadcast
(tx_hash,
timestamp,
π_time) to peers
Verify_Order(tx₁,
tx₂, π₁, π₂):
1. Verify VRF
proofs:
Verify(pk_agent,
timestamp₁ ||
hash₁, π₁) =
true
Verify(pk_agent,
timestamp₂ ||
hash₂, π₂) =
true
2. Compare
timestamps:
If timestamp₁ <
timestamp₂:
tx₁ before
tx₂ If
timestamp₁=timestamp₂:
tie-break by
hash: H(tx₁)
< H(tx₂) 3.
Return
ordering
proof:
π_order=(π₁,
π₂,
timestamp₁,
timestamp₂)
Aggregate_Global_Order(local_orders₁,
...,
local_ordersₙ):
1. Collect
timestamp
votes for
each tx pair
2. For (tx₁,
tx₂):
votes_before=count(agents
where ts₁ <
ts₂)
votes_after=count(agents
where ts₁>
ts₂)
3. Final
order: tx₁ <
tx₂ iff
votes_before>
n/2
4.
Merkle
tree of
final
order
for
efficient
proof
Theorem
20.1 (FSS
Security)
The FSS protocol
guarantees fair
ordering
against any
adversary
controlling
fewer than t =
n/3 agents,
assuming:
Bounded
network
delay Δ
Secure
threshold
encryption
scheme
Collision-resistant
hash
function
MEV Extraction
Prevention
Algorithm
70: Sandwich
Attack
Prevention
Traditional
Sandwich Attack:
1. Attacker sees
pending tx: "Buy
100 ETH of
TOKEN_X"
2. Attacker
front-runs: "Buy
1000 ETH of
TOKEN_X"
3. Victim tx
executes at
worse price
4. Attacker
back-runs: "Sell
1000 ETH of
TOKEN_X"
5. Attacker
profits from
price impact
FSS Prevention
Flow:
1. User
encrypts: C =
Enc(PK_FSS, "Buy
100 ETH of
TOKEN_X")
2. User submits
C to FSS network
3. FSS orders
transactions
(content hidden)
4. FSS decrypts
in order
5. Attacker
cannot see
victim's trade
until ordering
finalized
6. Back-run
still possible
but front-run
blocked
Quantitative
Improvement:
- Traditional
DEX MEV loss:
0.1-0.5% per
trade
- FSS-protected
DEX MEV loss:
~0.01% (back-run
only)
- Reduction
factor: 10-50x
Implementation
in PROXY:
function
submitProtectedTx(encryptedTx,
timestampProof)
{
require(verifyTimestamp(timestampProof));
pendingQueue.insert(encryptedTx,
timestampProof.time);
if
(windowExpired())
{
finalOrder =
computeFinalOrder(pendingQueue);
for (encTx in
finalOrder) {
tx =
thresholdDecrypt(encTx);
execute(tx);
}
}
}
Part XXI:
Decentralized
Services
Protocol
Verifiable
Random Function
(VRF) Service
Many
applications
require provably
fair randomness
that cannot be
manipulated by
any party.
PROXY Network
provides
threshold VRF,
where randomness
generation is
distributed
across agents.
KeyGen(t,
n):
Outputs
public
key PK
and
shares
sk₁,
..., skₙ
PartialEval(skᵢ,
x):
Outputs
partial
evaluation
yᵢ and
proof πᵢ
Combine(y₁,
π₁,
...,
yₜ,
πₜ):
Outputs
final
VRF
value y
Verify(PK,
x,
y):
Returns
true iff
y is the
correct
VRF
output
Algorithm
71:
Distributed
VRF (DVRF)
Based on BLS
signatures with
threshold key
Setup:
- Generator: G ∈
E(𝔽_p)
- Master secret:
s (never
reconstructed)
- Public key: PK
= s × G
- Shares: sᵢ
such that s = Σᵢ
λᵢ × sᵢ
(Lagrange)
PartialEval(skᵢ,
x):
1. Hash to
curve: H_x =
HashToCurve(x)
2. Compute
partial: Yᵢ =
skᵢ × H_x
3. Compute
Schnorr proof
πᵢ:
r ← random
R = r × G
c = H(G, PKᵢ,
H_x, Yᵢ, R)
z = r + c × skᵢ
πᵢ = (c, z)
4. Return (Yᵢ,
πᵢ)
Combine({(Yᵢ,
πᵢ)} for i ∈ S,
|S| ≥ t):
1. Verify each
partial:
For each i ∈ S:
R' = z × G - c ×
PKᵢ
c' = H(G, PKᵢ,
H_x, Yᵢ, R')
Require c' = c
2. Compute
Lagrange
coefficients:
λᵢ = Π_{j∈S,
j≠i} (j / (j -
i)) mod p
3. Combine: Y =
Σᵢ λᵢ × Yᵢ
4. Final
randomness: r =
H(Y)
5. Return (r, Y)
Verify(PK, x,
Y):
1. H_x =
HashToCurve(x)
2. Check
pairing: e(Y, G)
= e(H_x, PK)
3. Return true
iff pairing
holds
Proof of Reserve
Service
Algorithm
72:
Threshold
Proof of
Reserve
Goal: Prove
custodian holds
claimed reserves
without
revealing
details
Entities:
- Custodian:
Claims to hold R
tokens across
addresses A₁,
..., Aₘ
- PROXY Agents:
Sign attestation
of reserve proof
- Verifier:
On-chain
contract
checking
attestations
Protocol:
Phase 1: Balance
Aggregation
(Off-chain)
1. Each agent
queries
blockchain for
balances:
B = {(A₁, bal₁),
(A₂, bal₂), ...,
(Aₘ, balₘ)}
2. Agent
computes total:
T = Σⱼ balⱼ
3. Agent
computes Merkle
root: M =
MerkleRoot(B)
Phase 2:
Threshold
Attestation
4. Each agent
signs
attestation:
msg = (T, M,
block_height,
timestamp)
σᵢ =
ThresholdSign(skᵢ,
msg)
5. Collect ≥t
signatures
6. Combine: σ =
Combine(σ₁, ...,
σₜ)
Phase 3:
On-chain
Verification
7. Submit to PoR
contract:
function
verifyReserve(
uint256 total,
bytes32
merkleRoot,
uint256
blockHeight,
bytes signature
) external {
require(verifyThresholdSig(PROXY_PK,
keccak256(abi.encode(total,
merkleRoot,
blockHeight)),
signature
));
emit
ReserveProofVerified(total,
merkleRoot,
block.timestamp);
}
Security
Properties:
- Privacy:
Individual
balances not
revealed (only
total + Merkle
root)
- Liveness:
Proof generated
iff ≥t agents
agree
- Correctness:
Threshold
ensures majority
honest view
Keeper
Automation
Service
Algorithm
73:
Decentralized
Keeper
Network
Goal: Automated
execution of
smart contract
functions when
conditions met
Keeper
Registration:
1. Agent
registers as
keeper with
stake S_keeper
2. Agent
monitors
registered
contracts for
conditions
Condition
Monitoring:
function
checkUpkeep(bytes
calldata
checkData)
returns (bool
upkeepNeeded,
bytes memory
performData);
Distributed
Execution:
Round Robin
Assignment:
1. For each
registered
contract C:
- Compute slot:
slot =
block.number mod
n
- Assigned
keeper:
keeper[slot]
2. Assigned
keeper
evaluates:
(needed, data) =
C.checkUpkeep(checkData)
3. If needed:
a. Keeper
simulates
execution
locally
b. Keeper signs
execution
request:
req =
(C.address,
data, gasLimit,
timestamp)
σ =
Sign(sk_keeper,
req)
c. Submit to
network for
threshold
verification
Threshold
Execution:
4. If ≥t keepers
confirm
condition met:
- Combine
signatures
- Execute on
behalf of
network:
C.performUpkeep(data)
Reward
Distribution:
5. Executor
keeper receives:
reward =
gas_used ×
gas_price × (1 +
premium)
where premium ∈
[0.1, 0.3] based
on complexity
Slashing
Conditions:
- Failed
execution when
condition was
met: -5% stake
- False positive
(unnecessary
execution): -2%
stake
- Missed
execution
(condition met,
no action): -10%
stake
Part XXII:
Network
Deployment and
Operations
Node Hardware
Requirements
Component
Minimum
Recommended
Enterprise
CPU
8 cores,
3.0 GHz
16
cores,
3.5 GHz
32+
cores,
3.8 GHz
RAM
16 GB
64 GB
128 GB+
ECC
Storage
500 GB
NVMe
2 TB
NVMe
RAID
4 TB+
NVMe
RAID 10
Network
100 Mbps
1 Gbps
10 Gbps
HSM
Optional
Recommended
Required
(FIPS
140-2
L3)
Geographic
Distribution
Algorithm
74: Optimal
Agent
Placement
Goal: Minimize
latency while
maximizing
geographic
diversity
Input:
- n = 24 agents
to place
- Constraints:
max k agents per
jurisdiction
- Latency
matrix: L[i][j]
= RTT between
regions i, j
Optimization
Problem:
Minimize: Σᵢⱼ xᵢ
× xⱼ × L[i][j]
Subject to: Σᵢ
xᵢ = n
xᵢ ≤ k for all i
(jurisdiction
limit)
xᵢ ≥ 0, integer
Recommended
Distribution
(n=24, k=4):
Region | Agents
| Avg Latency to
Others
--------------------|--------|----------------------
US East
(Virginia) | 4 |
95ms
US West (Oregon)
| 2 | 120ms
EU West
(Ireland) | 4 |
85ms
EU Central
(Frankfurt)| 3 |
80ms
Asia (Singapore)
| 4 | 140ms
Asia (Tokyo) | 3
| 135ms
South America
(São Paulo) | 2|
160ms
Oceania (Sydney)
| 2 | 175ms
Network
Topology:
- Full mesh P2P
between all
agents
- Redundant ISP
connections (2+
per node)
- BGP anycast
for
client-facing
endpoints
Disaster
Recovery
Algorithm
75: Key
Share
Recovery
Protocol
Scenario: Agent
A_i loses key
share due to
hardware failure
Recovery
Requirements:
- At least t
agents must be
operational
- Recovery does
not reveal
secret to any
single party
Protocol
(Proactive
Secret Sharing
based):
Phase 1:
Recovery Request
1. A_i
broadcasts:
RecoveryRequest(i,
proof_of_identity)
2. Proof:
signature from
registered
backup key
Phase 2: Share
Regeneration
3. Each agent j
≠ i computes
recovery
contribution:
For l = 1 to
t-1:
rⱼₗ ← random ∈
Zₚ
Recovery
polynomial for
i:
Rⱼ(x) = Σₗ rⱼₗ ×
xˡ (degree t-1,
no constant
term)
4. Agent j sends
to agent i:
recovery_shareⱼ
= skⱼ + Rⱼ(i)
Phase 3: Share
Reconstruction
5. Agent i
collects ≥t
recovery shares
6. Uses Lagrange
interpolation to
recover skᵢ:
Let received
shares be from
set S
skᵢ = Σ_{j∈S} λⱼ
×
recovery_shareⱼ
where λⱼ are
Lagrange
coefficients for
point i
7. Verify: skᵢ ×
G should equal
PKᵢ (public
share)
Recovery Time
Objectives:
- Detection: < 5
minutes
(heartbeat
failure) -
Recovery
initiation:
< 1 hour -
Full
recovery: <
4 hours -
RTO
guarantee:
99.9% within
4 hours
Part
XXIII:
Formal
Security
Reductions
Reduction
to
Standard
Assumptions
Theorem
23.1
(Security
Reduction)
The
PROXY
threshold
ECDSA
protocol
is
EUF-CMA
secure
in the
random
oracle
model
under
the
following
assumptions:
DDH
(Decisional
Diffie-Hellman)
assumption
in
the
secp256k1
group
Semantic
security
of
Paillier
encryption
Strong
RSA
assumption
(for
range
proofs)
Proof
(Sketch).
We
construct
a
sequence
of
games:
Game
0:
Real
protocol
execution
Game
1:
Replace
random
oracle
H
with
truly
random
function.
By
random
oracle
assumption,
|Pr[W₀]
-
Pr[W₁]|
≤
negl(λ).
Game
2:
Abort
if
adversary
queries
H on
message
m*
before
receiving
signature.
By
unpredictability
of
threshold
signing
nonce,
|Pr[W₁]
-
Pr[W₂]|
≤
q_H
×
2^(-λ)
where
q_H
is
number
of
random
oracle
queries.
Game
3:
Replace
Paillier
encryptions
of
honest
shares
with
encryptions
of
0.
By
semantic
security
of
Paillier,
|Pr[W₂]
-
Pr[W₃]|
≤
Adv^{sem}_{Paillier}(λ).
Game
4:
Simulate
honest
parties'
DKG
commitments
without
knowing
the
secret.
By
DDH
assumption,
|Pr[W₃]
-
Pr[W₄]|
≤
Adv^{DDH}(λ).
In
Game
4,
the
adversary's
view
is
independent
of
honest
shares.
Thus
any
forgery
implies
solving
ECDLP.
Standard
reduction
to
ECDLP
completes
the
proof.
Definition
23.1
(Ideal
Functionality
F_ThreshSig)
The
ideal
threshold
signature
functionality
F_ThreshSig
is a
trusted
party
that:
On
input
(KeyGen,
sid)
from
all
parties:
generates
keypair
(sk,
pk),
stores
sk
internally,
outputs
pk
to
all
parties
On
input
(Sign,
sid,
m)
from
≥t
parties:
outputs
σ
=
Sign(sk,
m)
On
input
(Verify,
sid,
m,
σ):
outputs
Verify(pk,
m,
σ)
Algorithm
76:
UC
Simulator
Construction
Simulator
S for
PROXY
protocol:
Setup: S
controls
simulated
honest
parties
and all
communication
KeyGen
Simulation:
1. When
ideal
functionality
outputs
pk:
- S
samples
random
commitments
for
honest
parties
- S
programs
random
oracle
to be
consistent
with pk
- S
sends
simulated
DKG
transcripts
to
adversary
Signing
Simulation:
1. When
adversary
submits
sign
request
for
message
m:
2. S
extracts
≤t-1
corrupted
shares
from ZK
proofs
3. S
queries
ideal
functionality
F_ThreshSig
for σ =
Sign(m)
4. S
computes
what
honest
parties'
partial
signatures
must be:
For
honest
i:
σᵢ = σ -
Σⱼ∈corrupt
λⱼσⱼ
(mod p)
5. S
programs
random
oracle
to make
σᵢ
consistent
with
protocol
6. S
sends
simulated
transcripts
to
adversary
Indistinguishability:
- DDH
ensures
commitments
are
indistinguishable
-
Paillier
semantic
security
ensures
encrypted
shares
are
indistinguishable
- Random
oracle
programming
succeeds
with
overwhelming
probability
Conclusion:
PROXY
UC-realizes
F_ThreshSig
in the
(F_RO,
F_SecureChannel)-hybrid
model.
Concrete
Security
Bounds
Algorithm
77:
Security
Parameter
Selection
Target:
128-bit
security
against
classical
adversaries
Elliptic
Curve
(secp256k1):
- Group
order: n
≈ 2^256
- ECDLP
security:
128 bits
(Pollard's
rho: √n
operations)
-
Signature
size: 64
bytes
(r, s)
Paillier
Encryption:
-
Modulus:
N = pq,
|N| =
2048
bits
-
Security:
112 bits
against
NFS
-
Upgrade
path:
3072-bit
N for
128-bit
security
Range
Proofs
(Bulletproofs):
- Range:
[0,
2^64]
- Proof
size:
688
bytes
-
Verification
time:
10ms
Threshold
Parameters:
- Agents
n = 24
-
Threshold
t = 13
-
Security
against
collusion:
C(24,
12) =
2,704,156
combinations
-
Expected
time to
corrupt
13
agents
randomly:
Assuming
$10M/agent
and $1B
attack
budget:
P(success)
= C(24,
13) ×
(0.1)^13
×
(0.9)^11
≈
10^(-10)
Operational
Security:
- Key
refresh
period:
24 hours
- Share
exposure
window:
O(1 day)
-
Long-term
security:
Information-theoretic
(proactive
refresh)
Part
XXIV:
Cross-Chain
Interoperability
Protocol
Atomic
Cross-Chain
Messaging
PROXY
Network
enables
trustless
cross-chain
communication
through
threshold-signed
messages
that are
verifiable
on any
destination
blockchain.
This
section
provides
the
complete
mathematical
specification
for
cross-chain
message
passing.
Definition
24.1
(Cross-Chain
Message)
A
cross-chain
message
M is a
tuple:
M =
(src_chain,
dst_chain,
sender,
receiver,
payload,
nonce,
deadline)
The
message
is
authenticated
by
threshold
signature
σM
such
that:
Verify(PKPROXY,
H(M),
σM)
=
true
Algorithm
78:
Cross-Chain
Message
Protocol
Setup:
- Source
chain: S
with
finality
time T_S
-
Destination
chain: D
with
verification
contract
C_D
- PROXY
agents
monitoring
both
chains
Phase 1:
Message
Initiation
(Chain
S)
1. User
calls
source
contract:
Bridge.sendMessage(dstChain,
receiver,
payload,
deadline)
2.
Contract
emits
event:
MessageSent(nonce,
sender,
dstChain,
receiver,
payload,
deadline)
Phase 2:
Message
Attestation
(PROXY
Network)
3. Each
agent
observes
event
after
T_S
finality
4. Agent
validates:
- Source
contract
is
registered
bridge
- Nonce
is
strictly
increasing
-
Deadline
is >
current
time +
expected
delivery
5. Agent
signs
message
attestation:
m =
keccak256(srcChain,
dstChain,
sender,
receiver,
payload,
nonce)
σ_i =
ThresholdSign(sk_i,
m)
6.
Collect
t
signatures,
combine:
σ =
Combine(σ_1,
...,
σ_t)
Phase 3:
Message
Delivery
(Chain
D)
7.
Relayer
submits
to
destination:
Bridge.receiveMessage(srcChain,
sender,
payload,
nonce,
signature)
8.
Destination
contract
verifies:
function
receiveMessage(...,
bytes
signature)
external
{
bytes32
hash =
keccak256(abi.encode(...));
require(verifyThresholdSig(PROXY_PK,
hash,
signature));
require(nonce
==
expectedNonce[srcChain]++);
require(block.timestamp
< deadline);
IReceiver(receiver).onCrossChainMessage(sender,
payload);
}
Security
Properties:
-
Finality:
Message
delivered
only
after
source
finality
-
Ordering:
Nonces
enforce
strict
ordering
per
source
-
Timeout:
Deadline
prevents
stale
message
execution
Hash
Time-Locked
Contracts
(HTLC)
Algorithm
79:
Threshold-Enhanced
HTLC
Goal:
Atomic
swap
between
chains
A
and
B
with
PROXY
mediation
Participants:
-
Alice:
Has
asset
α
on
chain
A,
wants
β
on
chain
B
-
Bob:
Has
asset
β
on
chain
B,
wants
α
on
chain
A
-
PROXY:
Timeout
enforcement
and
dispute
resolution
Protocol:
Phase
1:
Secret
Generation
1.
Alice
generates
random
secret
s
←
{0,1}^256
2.
Alice
computes
hash:
h
=
H(s)
3.
PROXY
witnesses
and
stores
(h,
timestamp)
Phase
2:
Lock
on
Chain
A
4.
Alice
deploys
HTLC
on
chain
A:
contract
HTLC_A
{
bytes32
hashlock
=
h;
uint256
timelock
=
now
+
2T;
address
recipient
=
Bob;
function
claim(bytes32
secret)
{
require(H(secret)
==
hashlock);
require(now
< timelock);
transfer(recipient,
amount);
}
function
refund()
{
require(now>
=
timelock);
transfer(Alice,
amount);
}
}
Phase
3:
Lock
on
Chain
B
5.
PROXY
agents
verify
HTLC_A
deployment
6.
Bob
deploys
HTLC_B
with
same
h
but
shorter
timelock
T
Phase
4:
Claim
with
PROXY
Witness
7.
Alice
reveals
s
to
claim
from
HTLC_B
8.
PROXY
agents
witness
s
revelation
9.
PROXY
threshold-signs:
"secret
s
revealed
for
hash
h"
10.
Bob
uses
s
to
claim
from
HTLC_A
Improvement
over
Traditional
HTLC:
-
PROXY
provides
time
oracle
for
accurate
timelock
-
PROXY
can
mediate
disputes
if
network
partition
-
Threshold
signature
provides
MEV
protection
Merkle
Proof
Verification
Algorithm
80:
Cross-Chain
State
Proof
Goal:
Prove
state
S
exists
on
chain
A
to
chain
B
StateProof
=
{
stateRoot:
bytes32,
blockNumber:
uint256,
blockHash:
bytes32,
accountProof:
bytes[],
storageProof:
bytes[],
proxySignature:
bytes
}
Verification
on
Chain
B:
function
verifyStateProof(
bytes32
stateRoot,
address
account,
bytes32
slot,
bytes32
expectedValue,
bytes[]
accountProof,
bytes[]
storageProof,
bytes
proxySignature
)
returns
(bool)
{
bytes32
attestedRoot
=
keccak256(abi.encode(
SOURCE_CHAIN_ID,
blockNumber,
stateRoot
));
require(verifyThresholdSig(PROXY_PK,
attestedRoot,
proxySignature));
bytes
memory
accountRLP
=
verifyMerkleProof(
stateRoot,
keccak256(account),
accountProof
);
Account
memory
acc
=
decodeAccount(accountRLP);
bytes32
value
=
verifyMerkleProof(
acc.storageRoot,
keccak256(slot),
storageProof
);
return
value
==
expectedValue;
}
Part
XXV:
Privacy-Preserving
Computation
Layer
Secure
Multi-Party
Computation
PROXY
Network
implements
general-purpose
secure
computation
allowing
parties
to
compute
functions
on
private
inputs
without
revealing
those
inputs.
Definition
25.1
(MPC
Protocol)
An
(n,
t)-MPC
protocol
π
for
function
f
allows
n
parties
P₁,
...,
Pₙ
with
inputs
x₁,
...,
xₙ
to
compute
y
=
f(x₁,
...,
xₙ)
such
that:
Correctness:
All
honest
parties
output
correct
y
Privacy:
Coalition
of
≤t-1
learns
nothing
beyond
y
Fairness:
If
any
party
learns
y,
all
honest
parties
learn
y
Algorithm
81:
Garbled
Circuit
Evaluation
Goal:
Compute
f(x_A,
x_B)
where
Alice
has
x_A,
Bob
has
x_B
Preprocessing
(PROXY
as
Garbler):
1.
PROXY
agents
jointly
construct
garbled
circuit
G
for
f:
-
For
each
wire
w,
generate
two
labels:
W_0,
W_1
-
For
each
gate,
create
garbled
truth
table
-
Labels
encrypted
under
threshold
key
2.
Distribute
garbling:
Agent_i
holds
share
of
each
wire
label
Full
label
only
reconstructable
with
≥t
shares
Online
Phase:
3.
Alice
receives
her
input
labels
via
Oblivious
Transfer:
For
each
bit
b
of
x_A:
Label_b
=
OT(b,
W_0,
W_1)
4.
Bob
receives
his
input
labels
via
OT
5.
Circuit
evaluation:
For
each
gate:
Decrypt
garbled
table
entry
matching
input
labels
Obtain
output
wire
label
6.
Output
decoding:
Final
wire
label
→
output
bit
PROXY
attestation
confirms
correct
evaluation
Security:
-
Alice
learns
nothing
about
x_B
-
Bob
learns
nothing
about
x_A
-
PROXY
never
sees
inputs
(only
garbled
values)
Confidential
Transaction
Amounts
Algorithm
82:
Pedersen
Commitment
Signing
Goal:
Sign
transaction
with
hidden
amount
using
Pedersen
commitment
Pedersen
Commitment:
C
=
v
×
G
+
r
×
H
where:
-
v
=
transaction
value
-
r
=
blinding
factor
(random)
-
G,
H
=
independent
generators
Range
Proof
(Bulletproof):
Prove:
v
∈
[0,
2^64]
without
revealing
v
-
Proof
size:
O(log
n)
=
~688
bytes
for
64-bit
range
Threshold
Signing
with
Commitment:
Sign(m,
C,
v,
r)
where
m
=
H(recipient,
C):
1.
Each
agent
holds
share
of
signing
key:
sk_i
2.
Agents
do
NOT
know
v
or
r
(held
by
sender)
3.
Sender
provides:
-
Commitment
C
-
Range
proof
π
(proving
C
commits
to
valid
v)
4.
Each
agent
verifies:
-
Range
proof:
Verify(C,
π)
=
true
-
Balance
equation:
Sum(inputs)
=
Sum(outputs)
+
fee
5.
Agents
threshold-sign:
σ
=
Sign(sk,
H(m,
C,
π))
Privacy
Property:
-
Transaction
amount
hidden
in
C
-
Only
sender
knows
v,
r
-
PROXY
agents
verify
validity
without
learning
amount
Zero-Knowledge
Proof
Integration
Algorithm
83:
Threshold
ZK
Proof
Verification
Goal:
Verify
ZK
proof
across
distributed
agents
ZK
Proof
Types
Supported:
1.
Groth16:
Efficient
but
requires
trusted
setup
2.
PLONK:
Universal
setup,
larger
proofs
3.
STARKs:
No
trusted
setup,
largest
proofs
Distributed
Verification
Protocol:
Given:
Proof
π,
public
inputs
x,
verification
key
vk
Phase
1:
Proof
Distribution
1.
Relayer
broadcasts
(π,
x)
to
all
agents
Phase
2:
Parallel
Verification
For
Groth16:
2.
Each
agent
verifies
pairing
check:
e(A,
B)
=
e(α,
β)
×
e(L,
γ)
×
e(C,
δ)
3.
Agent
signs
result:
result_i
=
PairingCheck(π,
vk,
x)
σ_i
=
Sign(sk_i,
(π_hash,
result_i))
Phase
3:
Result
Aggregation
4.
If
all
≥t
agents
agree
result
=
true:
σ
=
CombineSignatures(σ_1,
...,
σ_t)
Emit:
ZKProofVerified(π_hash,
true,
σ)
Gas
Optimization:
-
Single
threshold
signature
vs
n
individual
verifications
-
On-chain
cost:
~100k
gas
(verification
+
sig)
Part
XXVI:
Regulatory
Compliance
Framework
KYC/AML
Integration
PROXY
Network
supports
optional
compliance
layers
for
institutional
users
requiring
regulatory
compliance
while
preserving
privacy
through
threshold
cryptography.
Definition
26.1
(Compliance
Oracle)
A
compliance
oracle
is
a
PROXY
sub-network
that:
Maintains
encrypted
KYC/AML
data
Provides
attestations
of
compliance
status
Never
reveals
identity
data
to
unauthorized
parties
Supports
regulatory
requests
with
proper
authorization
Algorithm
84:
Privacy-Preserving
KYC
Attestation
Entities:
-
User:
Wants
to
prove
compliance
without
revealing
identity
-
KYC
Provider:
Verified
user's
identity
-
PROXY
Compliance
Network:
Issues
attestations
-
DeFi
Protocol:
Requires
compliance
check
Protocol:
Phase
1:
KYC
Credential
Issuance
1.
User
completes
KYC
with
provider
2.
Provider
issues
verifiable
credential:
VC
=
{
subject:
blinded_user_id,
claims:
["KYC_LEVEL_2",
"NOT_SANCTIONED"],
issuer:
KYC_Provider_DID,
signature:
σ_provider
}
3.
User
generates
proving
key:
pk_zk
=
DeriveProvingKey(VC,
user_secret)
Phase
2:
Compliance
Proof
Generation
4.
User
generates
ZK
proof:
π
=
Prove(pk_zk,
VC,
required_claims)
Proof
demonstrates:
-
Valid
credential
from
approved
issuer
-
Credential
includes
required
claims
-
Credential
is
not
expired
-
User
controls
associated
address
5.
NO
identity
information
revealed
in
π
Phase
3:
Threshold
Attestation
6.
User
submits
π
to
PROXY
compliance
network
7.
Each
agent
verifies
ZK
proof:
valid_i
=
Verify(vk,
π,
public_inputs)
8.
If
valid,
agent
signs
attestation:
attestation
=
(user_address,
claims_hash,
expiry)
σ_i
=
ThresholdSign(sk_i,
attestation)
9.
Combined
attestation
published:
ComplianceAttestation(address,
claims_hash,
expiry,
σ)
Travel
Rule
Compliance
Algorithm
85:
Threshold-Encrypted
Travel
Rule
Data
Goal:
Check
if
address
is
sanctioned
without
revealing
check
pattern
Private
Set
Intersection
(PSI):
Input:
-
User:
address
a
-
Compliance
Network:
sanction
set
S
=
{s_1,
...,
s_m}
Protocol:
1.
User
blinds
address:
b
=
a
×
r
(using
ECC
point
multiplication)
2.
Send
blinded
query
to
PROXY
network
3.
Each
agent
holds
share
of
sanction
set:
S_i
⊂
S
such
that
∪S_i
=
S
4.
Agent
computes
PSI
on
blinded
input:
For
each
s
in
S_i:
c_s
=
s
×
r
(blinded
comparison)
5.
Return:
match_i
=
(b
∈
{c_s
for
s
in
S_i})
6.
Aggregate
results:
is_sanctioned
=
OR(match_1,
...,
match_n)
σ
=
ThresholdSign(sk,
(address_hash,
is_sanctioned))
Privacy
Properties:
-
Agents
don't
learn
which
address
is
queried
-
User
doesn't
learn
sanction
list
contents
-
Only
binary
result:
sanctioned
or
not
Part
XXVII:
Dynamic
Committee
Architecture
Decentralized
Agent
Network
PROXY
Network
is
a
fully
on-chain
decentralized
infrastructure
where
independent
operators
run
agent
nodes.
Unlike
centralized
custody
solutions,
no
single
entity
controls
the
network.
Security
derives
from
cryptographic
thresholds
and
economic
incentives,
not
trust
in
any
operator.
Definition
27.1
(Agent
Registry)
The
Agent
Registry
R
is
an
on-chain
data
structure:
R
=
{(Ai,
stakei,
pubkeyi,
statusi,
committeesi)
:
i
∈
[1,
N]}
where
N
is
unbounded
(infinite
agents
can
join),
stakei
≥
Smin
is
the
agent's
bonded
collateral,
and
status
∈
{Active,
Slashed,
Exiting}.
Definition
27.2
(Committee)
A
committee
C
is
a
subset
of
registered
agents
assigned
to
serve
a
specific
wallet
or
application:
C
=
(agents:
{A1,
...,
An},
threshold:
t,
publicKey:
PKC)
where
|agents|
=
n
is
the
committee
size,
t
=
⌈(2/3)n⌉
is
the
signing
threshold,
and
PKC
is
the
aggregated
public
key
derived
from
distributed
key
generation
among
committee
members.
Agent
Registration
Protocol
Algorithm
87:
Agent
Registration
On-Chain
Registration
Contract:
struct
Agent
{
address
operator;
//
EOA
controlling
the
agent
uint256
stake;
//
Bonded
PROXY
tokens
bytes
publicKey;
//
Agent's
signing
public
key
uint256
registrationBlock;
//
When
registered
uint8
status;
//
0=Pending,
1=Active,
2=Slashed,
3=Exiting
uint256
reputationScore;
//
Performance
metric
[0,
100]
address[]
committees;
//
Committees
this
agent
serves
}
function
register(bytes
calldata
publicKey)
external
payable
{
require(msg.value
>=
MIN_STAKE,
"Insufficient
stake");
require(agents[msg.sender].status
==
0,
"Already
registered");
//
Verify
public
key
is
valid
secp256k1
point
require(isValidPubKey(publicKey),
"Invalid
public
key");
agents[msg.sender]
=
Agent({
operator:
msg.sender,
stake:
msg.value,
publicKey:
publicKey,
registrationBlock:
block.number,
status:
1,
//
Active
reputationScore:
50,
//
Start
at
neutral
committees:
new
address[](0)
});
activeAgentCount++;
emit
AgentRegistered(msg.sender,
msg.value,
publicKey);
}
function
slash(address
agent,
bytes
calldata
proof)
external
{
require(verifyMisbehaviorProof(agent,
proof),
"Invalid
proof");
uint256
slashAmount
=
agents[agent].stake
*
SLASH_PERCENTAGE
/
100;
agents[agent].stake
-=
slashAmount;
agents[agent].status
=
2;
//
Slashed
//
Distribute
slashed
stake
to
reporters
and
treasury
payable(msg.sender).transfer(slashAmount
*
REPORTER_SHARE
/
100);
treasury.transfer(slashAmount
*
(100
-
REPORTER_SHARE)
/
100);
//
Trigger
resharing
for
all
affected
committees
for
(uint
i
=
0;
i
< agents[agent].committees.length;
i++)
{
_triggerResharing(agents[agent].committees[i]);
}
emit
AgentSlashed(agent,
slashAmount,
proof);
}
Committee
Formation
Algorithm
88:
Committee
Assignment
Goal:
Assign
n
agents
to
form
committee
for
a
new
wallet
Input:
-
requiredSize:
n
(determined
by
value-at-risk)
-
securityPreferences:
{minStake,
minReputation,
diversityRequirements}
Output:
Committee
C
with
n
agents
Protocol:
Phase
1:
Candidate
Selection
1.
Query
active
agents
from
registry:
candidates
=
{A
:
agents[A].status
==
Active}
2.
Filter
by
requirements:
candidates
=
filter(candidates,
where:
stake
>=
securityPreferences.minStake
AND
reputationScore
>=
securityPreferences.minReputation
AND
committees.length
< MAX_COMMITTEES_PER_AGENT
)
Phase
2:
Stake-Weighted
Random
Selection
3.
Compute
selection
weights:
For
each
candidate
A:
weight[A]=stake[A]
×
reputationScore[A]
/
100
4.
Generate
verifiable
randomness:
seed=VRF(block.prevrandao,
walletAddress,
nonce)
5.
Select
n
agents
using
weighted
sampling
without
replacement:
selected=[]
For
i
in
[1,
n]:
//
Cumulative
distribution
function
totalWeight=sum(weight[A]
for
A
in
candidates)
r=hash(seed,
i)
mod
totalWeight
cumulative=0
For
A
in
candidates:
cumulative
+=weight[A]
if
cumulative>
r:
selected.append(A)
candidates.remove(A)
break
Phase
3:
Diversity
Enforcement
6.
Verify
geographic
diversity:
regions
=
{getRegion(A)
for
A
in
selected}
require(|regions|
>=
MIN_REGIONS,
"Insufficient
geographic
diversity")
7.
Verify
operator
diversity:
operators
=
{getOperatorEntity(A)
for
A
in
selected}
require(|operators|
>=
n
*
0.8,
"Too
many
agents
from
same
operator")
Phase
4:
Distributed
Key
Generation
8.
Initiate
DKG
among
selected
agents:
(publicKey,
keyShares)
=
DKG(selected,
threshold=⌈(2/3)n⌉)
9.
Store
committee
on-chain:
committees[walletAddress]
=
Committee({
agents:
selected,
threshold:
⌈(2/3)n⌉,
publicKey:
publicKey,
createdAt:
block.timestamp
})
Return:
committees[walletAddress]
Theorem
27.1
(Committee
Security)
A
committee
C
with
n
agents
and
threshold
t
=
⌈(2/3)n⌉
provides
(t-1)-byzantine
fault
tolerance.
An
adversary
must
corrupt
at
least
t
agents
to:
Sign
unauthorized
transactions
Deny
service
(liveness
failure)
Learn
the
private
key
The
probability
of
random
selection
creating
a
majority-corrupt
committee
is:
P(corrupt
≥
t)
≤
C(m,t)
×
C(N-m,
n-t)
/
C(N,
n)
where
m
is
the
number
of
corrupt
agents
in
the
pool
of
N
total
agents.
Part
XXVIII:
Value-Based
Security
Scaling
Dynamic
Committee
Sizing
PROXY
Network
implements
adaptive
security
where
committee
size
scales
with
the
value
at
risk.
Higher-value
wallets
receive
larger
committees
with
stronger
security
guarantees,
while
lower-value
wallets
use
smaller
committees
for
efficiency.
Definition
28.1
(Value-at-Risk
Function)
The
committee
size
function
n(V)
maps
wallet
value
V
to
required
committee
size:
where
nmin
=
7,
nmax
=
100,
nbase
=
7,
Vunit
=
$100,000,
and
k
=
5.
Algorithm
89:
Committee
Size
Calculation
Security
Tier
Table:
|
Value
at
Risk
(V)
|
Committee
Size
(n)
|
Threshold
(t)
|
Security
Level
|
|---------------------|--------------------|--------------------|----------------|
|
V
< $10,000
|
7
|
5
|
Basic
|
|
$10K
≤
V
<
$100K
|
12
|
8
|
Standard
|
|
$100K
≤
V
<
$500K
|
24
|
16
|
Enhanced
|
|
$500K
≤
V
<
$1M
|
35
|
24
|
High
|
|
$1M
≤
V
<
$10M
|
50
|
34
|
Premium
|
|
$10M
≤
V
<
$100M
|
75
|
50
|
Institutional
|
|
V
≥
$100M
|
100
|
67
|
Maximum
|
Implementation:
function
calculateCommitteeSize(uint256
valueAtRisk)
pure
returns
(uint256
n,
uint256
t)
{
uint256
MIN_SIZE=7;
uint256
MAX_SIZE=100;
uint256
VALUE_UNIT=100_000e18;
//
$100K
in
wei
uint256
AGENTS_PER_UNIT=5;
//
Base
calculation
uint256
additionalAgents=(valueAtRisk
/
VALUE_UNIT)
*
AGENTS_PER_UNIT;
n=MIN_SIZE
+
additionalAgents;
//
Apply
bounds
if
(n>
MAX_SIZE)
n
=
MAX_SIZE;
if
(n
< MIN_SIZE)
n=MIN_SIZE;
//
Calculate
threshold
(2/3
majority)
t=(n
*
2
+
2)
/
3;
//
Ceiling
of
2n/3
return
(n,
t);
}
Attack
Cost
Analysis:
-
Attack
cost
C_attack=t
×
S_min
/
P_bribe
-
For
V=$1M:
t=34,
if
S_min=$50K
and
P_bribe=0.1:
C_attack=34
×
$50K
/
0.1=$17M>
>
$1M
(value
protected)
Automatic
Committee
Resizing
Algorithm
90:
Dynamic
Resizing
Protocol
Trigger:
Value
change
detected
(deposit,
withdrawal,
price
movement)
struct
ResizeEvent
{
address
wallet;
uint256
oldValue;
uint256
newValue;
uint256
oldSize;
uint256
newSize;
ResizeDirection
direction;
//
EXPAND
or
SHRINK
}
contract
CommitteeResizer
{
uint256
constant
RESIZE_THRESHOLD
=
20;
//
20%
change
triggers
resize
uint256
constant
COOLDOWN_BLOCKS
=
1000;
//
~4
hours
between
resizes
function
checkAndResize(address
wallet)
external
{
Committee
storage
c
=
committees[wallet];
require(block.number
>
c.lastResizeBlock
+
COOLDOWN_BLOCKS,
"Cooldown");
//
Get
current
value
from
oracle
uint256
currentValue
=
valueOracle.getWalletValue(wallet);
(uint256
requiredSize,
uint256
requiredThreshold)
=
calculateCommitteeSize(currentValue);
int256
sizeDelta
=
int256(requiredSize)
-
int256(c.agents.length);
uint256
percentChange
=
abs(sizeDelta)
*
100
/
c.agents.length;
if
(percentChange
< RESIZE_THRESHOLD)
{
return;
//
Change
not
significant
enough
}
if
(sizeDelta>
0)
{
//
EXPANSION:
Add
agents
_expandCommittee(wallet,
uint256(sizeDelta));
}
else
{
//
CONTRACTION:
Remove
agents
(requires
key
resharing)
_contractCommittee(wallet,
uint256(-sizeDelta));
}
c.threshold
=
requiredThreshold;
c.lastResizeBlock
=
block.number;
emit
CommitteeResized(wallet,
c.agents.length,
requiredSize,
currentValue);
}
function
_expandCommittee(address
wallet,
uint256
additionalAgents)
internal
{
//
Select
new
agents
from
pool
address[]
memory
newAgents
=
selectAgents(additionalAgents,
wallet);
//
Run
proactive
key
resharing
to
include
new
agents
//
This
redistributes
key
shares
without
changing
the
public
key
bytes32
resharingId
=
keyResharer.initiateExpansion(
wallet,
newAgents,
committees[wallet].agents
);
//
Add
to
committee
after
resharing
completes
for
(uint
i
=
0;
i
< newAgents.length;
i++)
{
committees[wallet].agents.push(newAgents[i]);
}
}
}
Volume-Based
Scaling
for
DeFi
Applications
Algorithm
91:
Transaction
Volume
Scaling
For
DeFi
protocols,
committee
size
also
considers
throughput
requirements:
struct
ApplicationMetrics
{
uint256
dailyVolume;
//
24h
transaction
volume
uint256
peakTPS;
//
Peak
transactions
per
second
uint256
averageLatency;
//
Current
signing
latency
uint256
targetLatency;
//
SLA
requirement
}
function
calculateVolumeBasedSize(
uint256
valueAtRisk,
ApplicationMetrics
memory
metrics
)
returns
(uint256
n,
uint256
t)
{
//
Base
size
from
value
at
risk
(uint256
baseSize,
)
=
calculateCommitteeSize(valueAtRisk);
//
Volume
adjustment
factor
uint256
volumeFactor
=
1;
if
(metrics.dailyVolume
>
100_000_000e18)
{
//
>
$100M/day
volumeFactor
=
3;
//
Triple
committee
for
high-volume
}
else
if
(metrics.dailyVolume
>
10_000_000e18)
{
//
>
$10M/day
volumeFactor
=
2;
//
Double
committee
}
//
Latency
consideration
(larger
committees
are
slower)
uint256
latencyAdjustment
=
0;
if
(metrics.targetLatency
< 500)
{
//
<
500ms
SLA
//
Prefer
smaller
committee
for
speed,
but
require
higher
stake
latencyAdjustment=baseSize
/
4;
//
Reduce
by
25%
}
n=(baseSize
*
volumeFactor)
-
latencyAdjustment;
n=clamp(n,
MIN_SIZE,
MAX_SIZE);
t=(n
*
2
+
2)
/
3;
return
(n,
t);
}
Example
Configurations:
|
Application
Type
|
Daily
Volume
|
Value
|
Committee
|
Threshold
|
|----------------------|--------------|--------|-----------|-----------|
|
Personal
Wallet
|
$10K
|
$50K
|
12
|
8
|
|
DeFi
Protocol
|
$50M
|
$10M
|
100
|
67
|
|
Exchange
Hot
Wallet
|
$500M
|
$100M
|
100
|
67
|
|
Cross-Chain
Bridge
|
$1B
|
$500M
|
100
|
67
|
Theorem
28.1
(Economic
Security
Guarantee)
For
a
wallet
with
value
V
protected
by
committee
of
size
n
with
minimum
stake
Smin
per
agent,
the
attack
cost
satisfies:
When
committee
membership
changes
(agents
added,
removed,
or
rotated),
key
shares
must
be
redistributed
without
changing
the
public
key
or
wallet
address.
PROXY
implements
proactive
secret
sharing
to
achieve
this
securely.
Definition
29.1
(Proactive
Secret
Sharing)
A
(t,
n)
→
(t',
n')
resharing
protocol
transforms
key
shares
held
by
n
parties
with
threshold
t
into
new
shares
for
n'
parties
with
threshold
t',
such
that:
The
underlying
secret
key
sk
remains
unchanged
The
public
key
PK
=
sk
×
G
remains
unchanged
Old
shares
become
invalid
after
resharing
Any
t
of
the
old
parties
can
abort
the
resharing
Fewer
than
t'
of
the
new
parties
learn
nothing
about
sk
Algorithm
92:
Committee
Expansion
Resharing
Scenario:
Expand
from
(t,
n)
to
(t',
n')
where
n'
>
n
Input:
-
Old
committee:
C
=
{P₁,
...,
Pₙ}
with
shares
{sk₁,
...,
skₙ}
-
New
agents:
N
=
{Pₙ₊₁,
...,
Pₙ'}
-
New
threshold:
t'
=
⌈(2/3)n'⌉
Protocol:
Phase
1:
Share
Refresh
(Old
Committee)
1.
Each
old
party
Pᵢ
generates
random
polynomial
of
degree
t'-1:
fᵢ(x)
=
skᵢ
+
aᵢ,₁x
+
aᵢ,₂x²
+
...
+
aᵢ,ₜ'₋₁x^(t'-1)
where
fᵢ(0)
=
skᵢ
(their
current
share)
2.
Each
Pᵢ
computes
shares
for
ALL
parties
(old
and
new):
For
j
∈
[1,
n']:
share_ij
=
fᵢ(j)
//
Encrypt
to
recipient's
public
key
encrypted_ij
=
Enc(PK_j,
share_ij)
3.
Each
Pᵢ
broadcasts:
-
Pedersen
commitments:
Cᵢ,ₖ
=
aᵢ,ₖ
×
G
+
rᵢ,ₖ
×
H
for
k
∈
[0,
t'-1]
-
Encrypted
shares:
{encrypted_ij
:
j
∈
[1,
n']}
Phase
2:
Share
Aggregation
(All
Parties)
4.
Each
party
Pⱼ
(old
or
new)
receives
encrypted
shares
from
≥t
old
parties
5.
Pⱼ
decrypts
and
verifies
each
share
against
commitments:
For
each
received
share_ij
from
Pᵢ:
Verify:
share_ij
×
G
==
Σₖ
Cᵢ,ₖ
×
j^k
6.
Pⱼ
computes
their
new
share:
sk'ⱼ
=
Σᵢ
share_ij
(sum
over
all
contributing
old
parties)
Phase
3:
Verification
7.
All
parties
verify
the
new
sharing
is
valid:
-
Public
key
unchanged:
Σⱼ
sk'ⱼ
×
Lⱼ(0)
×
G
==
PK
(using
Lagrange
coefficients)
-
Commitments
are
consistent
across
parties
Phase
4:
Key
Invalidation
8.
Old
parties
securely
delete
their
old
shares
skᵢ
9.
Only
new
shares
sk'ⱼ
are
valid
going
forward
Security
Properties:
-
Forward
secrecy:
Old
shares
unusable
after
resharing
-
Liveness:
Requires
t
honest
old
parties
to
complete
-
Secrecy:
t'-1
new
parties
learn
nothing
Committee
Contraction
Algorithm
93:
Committee
Contraction
Resharing
Scenario:
Contract
from
(t,
n)
to
(t',
n')
where
n'
< n Precondition:
n'
≥
t
(must
keep
enough
parties
for
original
threshold)
Protocol:
Phase
1:
Determine
Exiting
Agents
1.
Select
agents
to
remove
based
on:
-
Lowest
stake
(less
economic
commitment)
-
Lowest
reputation
score
-
Voluntary
exit
requests
-
Geographic
redundancy
(remove
from
over-represented
regions)
2.
exiting=selectAgentsToRemove(n
-
n')
remaining=committee.agents
-
exiting
Phase
2:
Resharing
Among
Remaining
3.
Remaining
agents
run
standard
resharing:
For
each
Pᵢ
∈
remaining:
Generate
polynomial
fᵢ(x)
of
degree
t'-1
Distribute
shares
to
remaining
parties
only
Phase
3:
Share
Reconstruction
and
Redistribution
4.
Remaining
parties
aggregate:
sk'ⱼ=Σᵢ
share_ij
for
j
∈
remaining
Phase
4:
Exiting
Agent
Protocol
5.
Exiting
agents
must:
-
Participate
in
resharing
for
liveness
-
Delete
their
shares
after
resharing
completes
-
Begin
stake
unbonding
period
(e.g.,
7
days)
6.
If
exiting
agent
refuses
to
participate:
-
Remaining
agents
can
still
complete
with
t
honest
parties
-
Non-cooperative
agent
is
slashed
Security
Consideration:
-
Exiting
agents
could
collude
before
deletion
-
Mitigation:
Use
TEE
(Trusted
Execution
Environment)
for
share
storage
-
Mitigation:
Short
resharing
window
+
stake
at
risk
Periodic
Key
Rotation
Algorithm
94:
Scheduled
Proactive
Refresh
Goal:
Refresh
key
shares
periodically
even
without
committee
changes
Rationale:
-
Limits
exposure
window
if
some
shares
are
compromised
-
Forces
adversary
to
compromise
t
shares
within
refresh
period
-
Provides
forward
secrecy
Parameters:
-
REFRESH_INTERVAL
=
24
hours
(configurable
per
committee)
-
Staggered
across
committees
to
avoid
network
congestion
Protocol:
Every
REFRESH_INTERVAL:
1.
Coordinator
(verifiable
random
selection)
initiates
refresh:
refreshId
=
hash(block.number,
committeeId)
coordinator
=
committee.agents[refreshId
mod
n]
2.
Coordinator
broadcasts:
RefreshRequest(committeeId,
epoch)
3.
Each
agent
Pᵢ
generates
refresh
polynomial:
rᵢ(x)
=
0
+
aᵢ,₁x
+
...
+
aᵢ,ₜ₋₁x^(t-1)
//
Note:
constant
term
is
0,
so
underlying
secret
unchanged
4.
Each
agent
distributes
refresh
shares:
refresh_ij
=
rᵢ(j)
for
all
j
∈
committee
5.
Each
agent
updates
their
share:
sk'ⱼ
=
skⱼ
+
Σᵢ
refresh_ij
6.
Verify:
Public
key
unchanged
(Σ
refresh
polynomials
has
0
constant
term)
7.
Old
shares
deleted,
new
shares
active
Security
Theorem:
After
epoch
e,
adversary
needs
t
shares
from
epoch
e
to
forge.
Shares
from
epoch
e-1
are
useless
even
if
all
n
are
compromised.
Theorem
29.1
(Resharing
Correctness)
After
any
resharing
protocol
execution:
The
secret
key
sk
=
Σᵢ
skᵢ
×
Lᵢ(0)
=
Σⱼ
sk'ⱼ
×
L'ⱼ(0)
is
preserved
The
public
key
PK
=
sk
×
G
is
unchanged
Wallet
addresses
derived
from
PK
remain
valid
Any
valid
(t',
n')-threshold
signature
over
the
new
shares
verifies
against
PK
Theorem
29.2
(Resharing
Security)
The
resharing
protocol
is
secure
against
an
adversary
controlling
up
to
f
< min(t,
t')
parties,
where:
f
corrupted
old
parties
cannot
prevent
resharing
(liveness)
f
corrupted
new
parties
learn
nothing
about
sk
(secrecy)
Combining
f
old
shares
with
f
new
shares
reveals
nothing
(mobile
adversary
resistance)
Proof:
The
secrecy
follows
from
the
information-theoretic
security
of
Shamir
secret
sharing.
Each
refresh
polynomial
has
degree
t'-1,
requiring
t'
evaluations
to
reconstruct.
Old
and
new
shares
are
on
different
polynomials
sharing
only
the
constant
term
sk,
which
is
protected
by
both
polynomials
independently.
On-Chain
Resharing
Verification
Algorithm
95:
On-Chain
Resharing
Proof
Goal:
Verify
resharing
completed
correctly
without
revealing
shares
On-Chain
Contract:
struct
ResharingProof
{
bytes32
commitmentRoot;
//
Merkle
root
of
all
commitments
uint256
participantBitmap;
//
Which
agents
participated
bytes[]
signatures;
//
Threshold
signatures
confirming
completion
uint256
newThreshold;
address[]
newCommittee;
}
function
verifyResharing(
address
wallet,
ResharingProof
calldata
proof
)
external
{
Committee
storage
c
=
committees[wallet];
//
Verify
sufficient
participation
from
old
committee
uint256
participants
=
popcount(proof.participantBitmap);
require(participants
>=
c.threshold,
"Insufficient
participation");
//
Verify
all
participating
agents
signed
the
completion
message
bytes32
message
=
keccak256(abi.encode(
wallet,
proof.commitmentRoot,
proof.newThreshold,
proof.newCommittee
));
require(
verifyThresholdSignature(c.publicKey,
message,
proof.signatures),
"Invalid
completion
signatures"
);
//
Verify
public
key
is
unchanged
(ZK
proof
or
trusted
committee
attestation)
//
In
practice:
committee
signs
statement
"PK
unchanged
after
resharing"
//
Update
committee
c.agents
=
proof.newCommittee;
c.threshold
=
proof.newThreshold;
c.lastResharingBlock
=
block.number;
emit
ResharingCompleted(wallet,
c.agents.length,
c.threshold);
}
Part
XXX:
Performance
and
Scalability
Architecture
106.
Throughput
Analysis
PROXY
Network
is
designed
to
achieve
100,000+
signatures
per
second
(SPS)
while
maintaining
sub-200ms
latency.
This
section
provides
rigorous
mathematical
analysis
of
the
performance
characteristics
and
the
architectural
decisions
enabling
this
throughput.
Definition
30.1
(Network
Throughput)
The
aggregate
throughput
T
of
the
PROXY
network
is
defined
as:
T
=
Σi=1C
τi
=
C
×
τavg
where
C
is
the
number
of
active
committees
and
τi
is
the
throughput
of
committee
i
in
signatures
per
second.
For
homogeneous
committees,
τavg
represents
average
committee
throughput.
Definition
30.2
(Committee
Throughput)
For
a
committee
with
n
agents,
threshold
t,
and
signing
latency
L,
the
maximum
throughput
is:
τ
=
P
/
L
where
P
is
the
parallelism
factor
(concurrent
signing
sessions)
and
L
is
end-to-end
latency
in
seconds.
Theorem
30.1
(100K
TPS
Achievability)
A
PROXY
network
with
C
=
1,000
committees,
each
achieving
τ
=
100
SPS,
provides
aggregate
throughput:
T
=
1,000
×
100
=
100,000
SPS
Proof:
Each
committee
operates
independently
and
can
sign
in
parallel.
With
FROST
protocol
achieving
L
=
50ms
latency
and
P
=
5
concurrent
sessions:
τ
=
P
/
L
=
5
/
0.05
=
100
SPS
per
committee
With
C
=
1,000
committees,
total
throughput
is
T
=
C
×
τ
=
100,000
SPS.
□
107.
FROST
Protocol
Implementation
FROST
(Flexible
Round-Optimized
Schnorr
Threshold
signatures)
reduces
the
communication
complexity
from
O(n²)
rounds
to
O(n)
with
a
single
online
round,
enabling
sub-50ms
signing
latency.
Algorithm
96:
FROST
Distributed
Key
Generation
Setup:
n
participants,
threshold
t
Phase
1:
Secret
Sharing
1.
Each
participant
Pᵢ:
a.
Generates
random
polynomial
fᵢ(x)
of
degree
t-1:
fᵢ(x)
=
aᵢ,₀
+
aᵢ,₁x
+
...
+
aᵢ,ₜ₋₁x^(t-1)
where
aᵢ,₀
is
Pᵢ's
secret
contribution
b.
Computes
commitments:
Cᵢ,ₖ
=
aᵢ,ₖ
×
G
for
k
∈
[0,
t-1]
c.
Sends
encrypted
share
fᵢ(j)
to
each
Pⱼ
Phase
2:
Share
Verification
2.
Each
Pⱼ
verifies
received
shares:
For
each
share
sᵢ,ⱼ
=
fᵢ(j)
from
Pᵢ:
Verify:
sᵢ,ⱼ
×
G
==
Σₖ
Cᵢ,ₖ
×
j^k
3.
If
verification
fails,
initiate
complaint
protocol
Phase
3:
Key
Derivation
4.
Each
Pⱼ
computes
their
long-term
secret
share:
skⱼ
=
Σᵢ
sᵢ,ⱼ
=
Σᵢ
fᵢ(j)
5.
Group
public
key:
PK
=
Σᵢ
Cᵢ,₀
=
Σᵢ
aᵢ,₀
×
G
Output:
(skⱼ,
PK)
for
each
participant
Algorithm
97:
FROST
Signing
-
Preprocessing
Phase
Goal:
Pre-compute
nonce
pairs
for
fast
online
signing
Each
participant
Pᵢ
(OFFLINE,
can
be
done
in
batches
of
10,000):
1.
Generate
random
nonce
pairs:
For
round
r
∈
[1,
NONCE_POOL_SIZE]:
dᵢ,ᵣ
←$
Z_q
(hiding
nonce)
eᵢ,ᵣ
←$
Z_q
(binding
nonce)
2.
Compute
nonce
commitments:
Dᵢ,ᵣ
=
dᵢ,ᵣ
×
G
Eᵢ,ᵣ
=
eᵢ,ᵣ
×
G
3.
Publish
commitment
list:
CommitmentList[i]
=
{(Dᵢ,₁,
Eᵢ,₁),
(Dᵢ,₂,
Eᵢ,₂),
...,
(Dᵢ,ₙ,
Eᵢ,ₙ)}
4.
Store
private
nonces
locally:
NoncePool[i]
=
{(dᵢ,₁,
eᵢ,₁),
(dᵢ,₂,
eᵢ,₂),
...,
(dᵢ,ₙ,
eᵢ,ₙ)}
Storage:
64
bytes
per
nonce
pair
×
10,000
=
640
KB
per
participant
Refresh:
When
pool
depletes
to
10%,
regenerate
in
background
Algorithm
98:
FROST
Signing
-
Online
Phase
Goal:
Sign
message
m
with
subset
S
of
t
participants
(SINGLE
ROUND)
Input:
-
Message
m
to
sign
-
Participant
set
S
⊆
[1,n]
with
|S|
=
t
-
Current
nonce
round
index
r
Protocol
(all
steps
happen
in
ONE
communication
round):
1.
Commitment
Aggregation:
For
each
i
∈
S:
ρᵢ
=
H(i,
m,
{(Dⱼ,ᵣ,
Eⱼ,ᵣ)
:
j
∈
S})
//
Binding
factor
Group
commitment:
R
=
Σᵢ∈S
(Dᵢ,ᵣ
+
ρᵢ
×
Eᵢ,ᵣ)
2.
Challenge
Computation:
c
=
H(R,
PK,
m)
//
Fiat-Shamir
challenge
3.
Partial
Signature
Generation
(each
Pᵢ
∈
S):
Lagrange
coefficient:
λᵢ
=
Πⱼ∈S,j≠i
(j
/
(j
-
i))
Partial
signature:
zᵢ
=
dᵢ,ᵣ
+
ρᵢ
×
eᵢ,ᵣ
+
λᵢ
×
skᵢ
×
c
4.
Signature
Aggregation:
z
=
Σᵢ∈S
zᵢ
Output:
σ
=
(R,
z)
Verification
(standard
Schnorr):
z
×
G
==
R
+
c
×
PK
Latency
Analysis:
-
Round
1
(network):
Broadcast
partial
signatures
zᵢ
-
Computation:
~1ms
for
each
participant
-
Network
latency:
~20-30ms
(P2P
gossip)
-
Total:
30-50ms
Theorem
30.2
(FROST
Security)
The
FROST
protocol
is
secure
under
the
Discrete
Logarithm
assumption
in
the
Random
Oracle
Model.
Specifically:
Unforgeability:
No
PPT
adversary
can
forge
a
valid
signature
without
corrupting
t
participants
Robustness:
Protocol
completes
if
at
least
t
participants
are
honest
For
extreme
throughput
scenarios,
PROXY
supports
BLS
(Boneh-Lynn-Shacham)
signatures
enabling
aggregation
of
multiple
signatures
into
a
single
constant-size
signature.
Definition
30.3
(BLS
Signature)
Using
pairing-friendly
curve
(BLS12-381):
Secret
key:
sk
∈
Z_q
Public
key:
PK
=
sk
×
G₂
∈
G₂
Signature:
σ
=
sk
×
H(m)
∈
G₁
Verification:
e(σ,
G₂)
=
e(H(m),
PK)
where
e:
G₁
×
G₂
→
G_T
is
the
bilinear
pairing.
Algorithm
99:
BLS
Threshold
Signing
Setup:
n
participants
with
threshold
t,
group
public
key
PK
Signing
(message
m):
1.
Each
participant
Pᵢ
computes
partial
signature:
σᵢ
=
skᵢ
×
H(m)
//
where
skᵢ
is
their
key
share
2.
Any
t
partial
signatures
can
be
combined:
σ
=
Σᵢ∈S
λᵢ
×
σᵢ
//
λᵢ
are
Lagrange
coefficients
Verification:
e(σ,
G₂)
==
e(H(m),
PK)
Latency:
Single
round,
~30ms
Algorithm
100:
BLS
Batch
Aggregation
Goal:
Aggregate
N
signatures
into
1
for
batch
verification
Input:
-
Messages:
m₁,
m₂,
...,
mₙ
-
Signatures:
σ₁,
σ₂,
...,
σₙ
-
Public
keys:
PK₁,
PK₂,
...,
PKₙ
(can
be
same
or
different)
Aggregation:
1.
σ_agg
=
Σᵢ
σᵢ
//
Simple
point
addition
in
G₁
Batch
Verification
(same
signer):
2a.
If
all
PKᵢ
=
PK:
e(σ_agg,
G₂)
==
e(Σᵢ
H(mᵢ),
PK)
Cost:
2
pairings
regardless
of
N
Savings:
(2N
-
2)
pairings
saved
Batch
Verification
(different
signers):
2b.
For
different
PKᵢ:
e(σ_agg,
G₂)
==
Πᵢ
e(H(mᵢ),
PKᵢ)
Cost:
N+1
pairings
Savings:
(N
-
1)
pairings
saved
Throughput
Impact:
-
Without
batching:
Verify
1000
sigs
=
2000
pairings
-
With
batching
(same
signer):
Verify
1000
sigs
=
2
pairings
-
Speedup:
1000x
for
verification
109.
Parallel
Committee
Architecture
Algorithm
101:
Committee
Load
Balancer
Goal:
Distribute
signing
requests
across
C
committees
for
maximum
throughput
Data
Structures:
struct
Committee
{
uint256
id;
address[]
agents;
uint256
pendingRequests;
uint256
avgLatency;
//
Moving
average
in
ms
uint256
successRate;
//
Last
1000
requests
bool
isHealthy;
}
Committee[]
committees;
//
All
active
committees
PriorityQueue
availableQueue;
//
Ordered
by
load
score
Load
Score
Calculation:
function
loadScore(Committee
c)
returns
(uint256)
{
//
Lower
is
better
return
(c.pendingRequests
*
100)
+
(c.avgLatency
/
10)
+
((100
-
c.successRate)
*
50);
}
Request
Routing:
function
routeSigningRequest(SignRequest
req)
returns
(Committee)
{
//
1.
Get
least
loaded
healthy
committee
Committee
best
=
availableQueue.peek();
//
2.
Check
if
overloaded
if
(best.pendingRequests
>
MAX_PENDING)
{
//
Scale
out:
create
new
committee
or
queue
request
return
handleOverload(req);
}
//
3.
Assign
request
best.pendingRequests++;
updateLoadScore(best);
//
4.
Apply
affinity
if
same
wallet
(for
nonce
consistency)
if
(walletAffinityMap[req.wallet]
==
best.id)
{
return
best;
}
return
best;
}
Health
Monitoring:
-
Ping
every
committee
every
5
seconds
-
Mark
unhealthy
if
latency
>
500ms
or
error
rate
>
5%
-
Auto-failover:
Reassign
pending
requests
to
healthy
committees
Algorithm
102:
Pipeline
Parallelism
Goal:
Maximize
throughput
by
overlapping
signing
operations
Traditional
Sequential:
Time:
|--Sign1--|--Sign2--|--Sign3--|--Sign4--|
Total:
4
×
50ms
=
200ms
for
4
signatures
Pipeline
Parallel:
Time:
|--Sign1--|
|--Sign2--|
|--Sign3--|
|--Sign4--|
Total:
50ms
+
3×10ms
=
80ms
for
4
signatures
(stagger
interval)
Implementation:
struct
SigningPipeline
{
uint256
staggerInterval;
//
Time
between
starting
consecutive
requests
uint256
maxConcurrent;
//
Max
parallel
signing
sessions
Queue
pending;
Map
active;
}
function
processPipeline(Pipeline
p)
{
while
(!p.pending.isEmpty()
&&
p.active.size()
< p.maxConcurrent)
{
req=p.pending.dequeue();
//
Start
signing
asynchronously
session=startAsyncSign(req);
p.active[session.id]=session;
//
Stagger
next
request
sleep(p.staggerInterval);
}
//
Collect
completed
signatures
for
(session
in
p.active.values())
{
if
(session.isComplete())
{
emitSignature(session.result);
p.active.remove(session.id);
}
}
}
Throughput
Formula:
T_pipeline=maxConcurrent
/
avgLatency
Example:
maxConcurrent=100,
avgLatency=50ms
T_pipeline=100
/
0.05=2000
SPS
per
committee
110.
Latency
Optimization
Definition
30.4
(End-to-End
Latency)
Total
signing
latency
L
consists
of:
L
=
Lnetwork
+
Lcompute
+
Lconsensus
+
Laggregate
where:
Lnetwork:
Network
round-trip
time
between
agents
(~20ms)
Lcompute:
Cryptographic
computation
time
(~5ms)
Lconsensus:
Agreement
on
signing
subset
(~10ms)
Laggregate:
Signature
combination
(~5ms)
Algorithm
103:
Geographic
Optimization
Goal:
Minimize
network
latency
through
strategic
agent
placement
Agent
Placement
Regions:
|
Region
|
Latency
to
other
regions
(ms)
|
|---------------|------------------------------|
|
US-East
|
US-West:
40,
EU:
80,
Asia:
150
|
|
US-West
|
US-East:
40,
Asia:
120,
EU:
120
|
|
EU-Central
|
US-East:
80,
US-West:
120,
Asia:
200
|
|
Asia-East
|
US-West:
120,
EU:
200,
US-East:
150
|
Committee
Formation
Strategy:
function
formLowLatencyCommittee(size
n,
threshold
t)
{
//
Prefer
agents
in
same
region
for
speed
region
=
selectRegionWithMostAgents();
sameRegionAgents
=
getAgentsInRegion(region);
if
(|sameRegionAgents|
>=
n)
{
//
All
agents
from
same
region:
Latency
~5ms
internal
return
selectTopStaked(sameRegionAgents,
n);
}
else
{
//
Mix:
prefer
neighboring
regions
primary
=
selectTopStaked(sameRegionAgents,
n
*
0.7);
neighbors
=
getNeighboringRegions(region);
secondary
=
selectFromRegions(neighbors,
n
*
0.3);
return
primary
∪
secondary;
}
}
Latency
Tiers:
|
Committee
Type
|
Agent
Distribution
|
Expected
Latency
|
|--------------------|----------------------|------------------|
|
Ultra-Fast
|
Single
datacenter
|
5-10ms
|
|
Regional
|
Single
region
|
10-20ms
|
|
Continental
|
Same
continent
|
20-40ms
|
|
Global
|
Multi-continent
|
50-100ms
|
111.
Hardware
Acceleration
Algorithm
104:
GPU-Accelerated
Batch
Signing
Goal:
Leverage
GPU
parallelism
for
massive
batch
signing
Standard
CPU
Performance:
-
ECDSA
sign:
~10,000
ops/sec
per
core
-
8-core
CPU:
~80,000
ops/sec
max
GPU-Accelerated
(NVIDIA
A100):
-
Parallel
ECDSA:
~500,000
ops/sec
-
Parallel
BLS:
~1,000,000
ops/sec
Implementation
(CUDA
pseudocode):
__global__
void
batchSign(
uint256*
messages,
//
N
messages
to
sign
uint256*
partialSigs,
//
Output
partial
signatures
uint256
secretShare,
//
This
agent's
key
share
uint256*
nonces,
//
Pre-computed
nonces
int
N
)
{
int
idx
=
blockIdx.x
*
blockDim.x
+
threadIdx.x;
if
(idx
>=
N)
return;
//
Each
thread
signs
one
message
uint256
msg
=
messages[idx];
uint256
nonce
=
nonces[idx];
//
Compute
partial
signature:
z
=
k
+
sk
*
H(R,
PK,
m)
uint256
R
=
scalarMultiply(G,
nonce);
uint256
c
=
hash(R,
PK,
msg);
uint256
z
=
modAdd(nonce,
modMul(secretShare,
c));
partialSigs[idx]
=
z;
}
//
Host
code
void
signBatch(Message[]
msgs,
int
N)
{
//
Copy
to
GPU
cudaMemcpy(d_messages,
msgs,
N
*
sizeof(uint256),
cudaMemcpyHostToDevice);
//
Launch
kernel:
256
threads
per
block
int
blocks
=
(N
+
255)
/
256;
batchSign
<<
>>(d_messages,
d_sigs,
sk,
d_nonces,
N);
//
Copy
results
back
cudaMemcpy(sigs,
d_sigs,
N
*
sizeof(uint256),
cudaMemcpyDeviceToHost);
}
Throughput
with
GPU:
-
Batch
size:
10,000
signatures
-
GPU
compute
time:
~10ms
-
Throughput:
10,000
/
0.01
=
1,000,000
partial
sigs/sec
per
GPU
-
Network
becomes
bottleneck,
not
computation
Part
XXXI:
Cost
Economics
and
Fee
Model
112.
Cost
Structure
Analysis
Definition
31.1
(Per-Signature
Cost)
The
total
cost
c(σ)
of
producing
a
threshold
signature
consists
of:
Stake
PROXY
tokens
to
get
signing
allocation
without
per-tx
fees
Staking
Formula:
signaturesPerMonth
=
stakedTokens
×
SIGNATURES_PER_TOKEN
Where:
SIGNATURES_PER_TOKEN
=
100
(adjustable
by
governance)
Example:
-
Stake
10,000
PROXY
tokens
-
Get:
10,000
×
100
=
1,000,000
signatures/month
-
At
PROXY
price
of
$1:
$10,000
staked
-
Opportunity
cost
at
5%
APY:
$500/year
=
$42/month
-
Effective
cost:
$42
/
1M
sigs
=
$0.000042
per
signature
Staking
Contract:
contract
ProxyStaking
{
mapping(address
=>
uint256)
public
stakedBalance;
mapping(address
=>
uint256)
public
usedSignatures;
mapping(address
=>
uint256)
public
lastResetTimestamp;
uint256
constant
SIGNATURES_PER_TOKEN
=
100;
uint256
constant
RESET_PERIOD
=
30
days;
function
stake(uint256
amount)
external
{
proxyToken.transferFrom(msg.sender,
address(this),
amount);
stakedBalance[msg.sender]
+=
amount;
}
function
getSignatureAllocation(address
user)
public
view
returns
(uint256)
{
return
stakedBalance[user]
*
SIGNATURES_PER_TOKEN;
}
function
useSignature(address
user)
external
onlyRouter
{
if
(block.timestamp
>
lastResetTimestamp[user]
+
RESET_PERIOD)
{
usedSignatures[user]
=
0;
lastResetTimestamp[user]
=
block.timestamp;
}
require(
usedSignatures[user]
< getSignatureAllocation(user), "Signature allocation exhausted"
);
usedSignatures[user]++;
}
}
Benefits:
1.
Predictable
costs
(no
per-tx
fee
volatility)
2.
Aligned
incentives
(stakers
want
network
success)
3.
Reduced
transaction
overhead
(no
micropayments)
4.
Price
appreciation
hedging
(tokens
may
appreciate)
115.
Operator
Economics
Algorithm
109:
Agent
Operator
Revenue
Model
Revenue
sources
for
node
operators:
1.
Signing
Fees:
-
Operators
receive
portion
of
signing
fees
-
Distribution:
stake-weighted
among
committee
members
revenuePerSignature
=
feePerSignature
×
OPERATOR_SHARE
where
OPERATOR_SHARE
=
0.7
(70%
to
operators,
30%
to
protocol)
Example:
$0.0001
fee
×
0.7
=
$0.00007
per
signature
per
committee
Per
agent
(7-member
committee):
$0.00007
/
7
=
$0.00001
2.
Staking
Rewards:
-
Protocol
issues
PROXY
tokens
to
staked
agents
-
Annual
inflation:
5%
of
total
supply
-
Distribution:
proportional
to
stake
×
uptime
annualReward
=
(stake
/
totalStaked)
×
annualInflation
×
uptimeFactor
3.
Slashing
Protection:
-
Honest
operators
avoid
slashing
-
Slashed
stakes
redistributed
to
faithful
operators
Monthly
Revenue
Estimate
(per
agent):
|
Volume
Tier
|
Signatures/Month
|
Revenue
(fees
only)
|
|-------------|------------------|---------------------|
|
Low
|
10M
|
$100
|
|
Medium
|
100M
|
$1,000
|
|
High
|
1B
|
$10,000
|
Operating
Costs
(per
agent):
|
Component
|
Monthly
Cost
|
|-----------------|--------------|
|
Server
(cloud)
|
$200-500
|
|
Bandwidth
|
$50-200
|
|
Monitoring
|
$50
|
|
Management
|
$100
|
|
Total
|
$400-850
|
Profitability:
-
Breakeven:
~50M
signatures/month
-
At
1B
signatures/month:
~$9,000
profit
per
agent
116.
Batch
Aggregation
Economics
Theorem
31.1
(Batch
Efficiency)
For
N
transactions
batched
into
a
single
aggregated
signature,
the
per-transaction
cost
reduces
to:
cbatch(tx)
=
c(σ)
/
N
+
cverify
/
N
As
N
→
∞,
cbatch(tx)
→
c(σ)
/
N,
achieving
arbitrary
cost
reduction.
Algorithm
110:
Optimal
Batch
Size
Calculation
Goal:
Determine
optimal
batch
size
balancing
cost
and
latency
Variables:
-
N:
batch
size
-
c_sign:
cost
to
produce
one
threshold
signature
-
c_verify:
on-chain
verification
cost
-
L_target:
maximum
acceptable
latency
-
λ:
transaction
arrival
rate
(tx/sec)
Cost
per
transaction
as
function
of
N:
C(N)
=
c_sign/N
+
c_verify/N
=
(c_sign
+
c_verify)/N
Latency
as
function
of
N:
L(N)
=
N/λ
//
Time
to
accumulate
N
transactions
Optimization:
Minimize
C(N)
subject
to
L(N)
≤
L_target
Optimal
N*
=
λ
×
L_target
Example:
-
λ
=
1000
tx/sec
(arrival
rate)
-
L_target
=
100ms
(max
latency)
-
N*
=
1000
×
0.1
=
100
transactions
per
batch
Cost
savings:
-
Without
batching:
$0.0001
per
tx
-
With
100-tx
batch:
$0.0001/100
=
$0.000001
per
tx
-
Savings:
100x
Part
XXXII:
Multi-Chain
Signature
Architecture
117.
Universal
Chain
Support
PROXY
Network
provides
native
signature
generation
for
all
blockchain
platforms
through
implementation
of
chain-specific
threshold
cryptographic
protocols.
This
section
formalizes
the
multi-chain
signature
architecture
enabling
a
single
wallet
to
transact
across
any
blockchain.
Definition
32.1
(Chain
Signature
Type)
Each
blockchain
B
requires
signatures
from
a
specific
cryptographic
scheme
SB:
Universal
chain
support
through
signature
type
routing:
ChainRegistry
=
{
//
ECDSA
secp256k1
chains
(~70%
of
blockchains)
ECDSA_CHAINS:
[
"ethereum",
"bsc",
"polygon",
"avalanche",
"arbitrum",
"optimism",
"base",
"zksync",
"fantom",
"cronos",
"celo",
"bitcoin_legacy",
"litecoin",
"dogecoin",
"bitcoin_cash",
"cosmos",
"osmosis",
"injective",
"sei",
"dydx"
],
//
Ed25519
chains
(~20%
of
blockchains)
ED25519_CHAINS:
[
"solana",
"aptos",
"sui",
"near",
"polkadot",
"cardano",
"tezos",
"algorand",
"stellar",
"ton"
],
//
Schnorr
secp256k1
chains
(~10%
of
blockchains)
SCHNORR_CHAINS:
[
"bitcoin_taproot",
"monero",
"zcash"
],
//
BLS
chains
(emerging)
BLS_CHAINS:
[
"ethereum_consensus",
"filecoin",
"chia"
]
}
function
getSignatureProtocol(chain:
string):
Protocol
{
if
(chain
in
ECDSA_CHAINS)
return
ThresholdECDSA_GG20;
if
(chain
in
ED25519_CHAINS)
return
ThresholdEd25519_FROST;
if
(chain
in
SCHNORR_CHAINS)
return
ThresholdSchnorr_FROST;
if
(chain
in
BLS_CHAINS)
return
ThresholdBLS;
throw
"Unsupported
chain";
}
function
sign(chain:
string,
tx:
Transaction,
committee:
Committee):
Signature
{
protocol
=
getSignatureProtocol(chain);
return
protocol.threshold_sign(tx,
committee);
}
118.
Threshold
ECDSA
Protocol
(GG20)
For
Ethereum,
BSC,
Polygon,
and
all
EVM-compatible
chains,
PROXY
implements
the
GG20
(Gennaro-Goldfeder
2020)
threshold
ECDSA
protocol
with
4-round
signing.
Setup:
n
parties,
threshold
t,
curve
secp256k1
with
generator
G,
order
q
Phase
1:
Paillier
Key
Setup
1.
Each
party
Pᵢ
generates
Paillier
key
pair:
(N_i,
p_i,
q_i)
where
N_i
=
p_i
×
q_i
(2048-bit
primes)
Public
key:
N_i
Private
key:
λ_i
=
lcm(p_i-1,
q_i-1)
2.
Each
Pᵢ
publishes
ZK
proof
that
N_i
is
valid
Paillier
modulus:
π_i
=
ZK{N_i
is
product
of
two
primes}
Phase
2:
Secret
Share
Generation
(Feldman
VSS)
3.
Each
Pᵢ
generates
random
polynomial
of
degree
t-1:
f_i(x)
=
a_{i,0}
+
a_{i,1}x
+
...
+
a_{i,t-1}x^{t-1}
(mod
q)
where
a_{i,0}
is
Pᵢ's
secret
contribution
4.
Each
Pᵢ
computes
and
broadcasts:
-
Feldman
commitments:
C_{i,k}
=
a_{i,k}
×
G
for
k
∈
[0,
t-1]
-
Encrypted
shares:
Enc_{Pj}(f_i(j))
for
each
Pⱼ
Phase
3:
Share
Verification
5.
Each
Pⱼ
verifies
received
shares:
f_i(j)
×
G
==
Σ_k
C_{i,k}
×
j^k
6.
If
verification
fails,
publish
complaint
and
abort
Phase
4:
Key
Derivation
7.
Each
Pⱼ
computes
their
secret
key
share:
x_j
=
Σ_i
f_i(j)
(mod
q)
8.
Public
key
derivation:
X
=
Σ_i
C_{i,0}
=
Σ_i
a_{i,0}
×
G
=
x
×
G
Output:
-
Each
Pⱼ
holds:
(x_j,
N_j,
λ_j)
-
Group
public
key:
X
-
Wallet
address:
keccak256(X)[-20:]
for
Ethereum
Goal:
Sign
message
m
with
threshold
t
of
n
parties
Input:
Message
hash
e
=
H(m),
signing
parties
S
with
|S|
=
t
Round
1:
Commitment
Phase
1.
Each
Pᵢ
∈
S:
-
Generates
random
k_i
∈
Z_q
and
γ_i
∈
Z_q
-
Computes
K_i
=
k_i
×
G
-
Broadcasts
commitment:
Com(K_i)
=
H(K_i)
Round
2:
Multiplicative-to-Additive
(MtA)
Conversion
2.
For
each
pair
(i,
j)
where
i
≠
j:
a.
Pᵢ
encrypts:
c_ij
=
Enc_{Pj}(k_i
×
γ_j
+
β_ij)
using
Pⱼ's
Paillier
key
b.
Pⱼ
decrypts
and
computes:
α_ji
=
Dec(c_ij)
-
β_ij
×
...
This
converts
multiplicative
shares
to
additive:
k
×
γ
=
Σ_{i∈S}
k_i
×
Σ_{j∈S}
γ_j
=
Σ_{i∈S}
δ_i
where
δ_i
=
k_i
×
γ_i
+
Σ_{j≠i}
(α_ij
+
β_ij)
Round
3:
Reveal
and
Compute
R
3.
Each
Pᵢ:
-
Opens
commitment:
reveals
K_i
-
All
verify:
K_i
matches
Com(K_i)
4.
Compute
group
nonce
point:
R
=
Σ_{i∈S}
K_i
=
k
×
G
r
=
R.x
mod
q
Round
4:
Partial
Signatures
5.
Each
Pᵢ
computes:
-
Lagrange
coefficient:
λ_i
=
Π_{j∈S,
j≠i}
(j
/
(j-i))
mod
q
-
Partial
signature:
s_i
=
k_i^{-1}
×
(e
+
r
×
λ_i
×
x_i)
mod
q
-
Broadcasts:
(s_i,
π_i)
where
π_i
is
ZK
proof
of
correctness
Round
5:
Aggregation
6.
Aggregate
signature:
s
=
Σ_{i∈S}
s_i
mod
q
7.
If
s
==
0
or
r
==
0:
restart
with
new
k
values
Output:
σ
=
(r,
s)
-
valid
ECDSA
signature
Verification
(standard
ECDSA):
u_1
=
e
×
s^{-1}
mod
q
u_2
=
r
×
s^{-1}
mod
q
R'
=
u_1
×
G
+
u_2
×
X
Accept
iff
R'.x
==
r
119.
Threshold
Ed25519
Protocol
Algorithm
114:
Threshold
Ed25519
(FROST
Variant)
Setup:
n
parties,
threshold
t,
Edwards
curve
Ed25519
Key
differences
from
secp256k1
FROST:
-
Base
point:
B
(Ed25519
generator)
-
Field:
GF(2^255
-
19)
-
Cofactor:
h
=
8
(requires
cofactor
clearing)
Key
Generation
(same
structure
as
Algorithm
82):
1.
Each
Pᵢ
generates
polynomial
f_i(x)
of
degree
t-1
2.
Feldman
VSS
with
commitments
C_{i,k}
=
a_{i,k}
×
B
3.
Each
Pⱼ
derives
share:
sk_j
=
Σ_i
f_i(j)
4.
Public
key:
PK
=
Σ_i
C_{i,0}
Signing
Protocol
(1
round
online):
Preprocessing
(offline):
1.
Each
Pᵢ
generates
nonce
pairs
for
batch:
For
r
in
[1,
POOL_SIZE]:
d_{i,r},
e_{i,r}
←$
Z_q
D_{i,r}
=
d_{i,r}
×
B
E_{i,r}
=
e_{i,r}
×
B
Publish:
{(D_{i,r},
E_{i,r})}
Online
Signing
(message
M):
2.
Select
signing
subset
S
⊆
[1,n],
|S|
=
t
3.
Retrieve
nonces
for
round
r:
For
each
i
∈
S:
(d_{i,r},
e_{i,r},
D_{i,r},
E_{i,r})
4.
Compute
binding
factors:
ρ_i
=
H("rho",
i,
M,
concatenate({D_{j,r},
E_{j,r}
:
j
∈
S}))
5.
Group
nonce:
R
=
Σ_{i∈S}
(D_{i,r}
+
ρ_i
×
E_{i,r})
6.
Challenge:
c
=
H("challenge",
R,
PK,
M)
//
SHA-512
for
Ed25519
7.
Each
Pᵢ
computes
partial
signature:
λ_i
=
Lagrange(i,
S)
//
Lagrange
coefficient
z_i
=
d_{i,r}
+
ρ_i
×
e_{i,r}
+
c
×
λ_i
×
sk_i
8.
Aggregate:
z
=
Σ_{i∈S}
z_i
Output:
σ
=
(R,
z)
-
64-byte
Ed25519
signature
Verification:
z
×
B
==
R
+
c
×
PK
Cofactor
handling:
For
strict
Ed25519:
multiply
R
and
PK
by
cofactor
h=8
before
verify
120.
Chain
Address
Derivation
Algorithm
115:
Universal
Address
Derivation
Given
group
public
key
PK,
derive
addresses
for
all
supported
chains:
function
deriveAddress(PK:
PublicKey,
chain:
Chain):
Address
{
switch(chain.type)
{
case
"ETHEREUM":
//
and
all
EVM
chains
//
PK
is
65
bytes:
0x04
||
x
(32
bytes)
||
y
(32
bytes)
uncompressed
=
serialize_uncompressed(PK);
hash
=
keccak256(uncompressed[1:]);
//
Skip
0x04
prefix
return
"0x"
+
hex(hash[-20:]);
//
Last
20
bytes
case
"BITCOIN_LEGACY":
//
P2PKH
compressed
=
serialize_compressed(PK);
//
33
bytes
hash
=
ripemd160(sha256(compressed));
checksum
=
sha256(sha256(0x00
+
hash))[:4];
return
base58(0x00
+
hash
+
checksum);
case
"BITCOIN_TAPROOT":
//
P2TR
(Schnorr)
x_only
=
PK.x;
//
32
bytes,
drop
y
coordinate
tweaked
=
taproot_tweak(x_only);
return
bech32m_encode("bc",
1,
tweaked);
case
"SOLANA":
//
Ed25519:
public
key
IS
the
address
return
base58(PK);
//
32-byte
Ed25519
public
key
case
"COSMOS":
compressed
=
serialize_compressed(PK);
hash
=
ripemd160(sha256(compressed));
return
bech32_encode("cosmos",
hash);
case
"APTOS":
//
Ed25519
with
auth
key
auth_key
=
sha3_256(PK
||
0x00);
//
0x00
=
Ed25519
scheme
return
"0x"
+
hex(auth_key);
case
"CARDANO":
//
Ed25519
extended
hash
=
blake2b_224(PK);
return
bech32_encode("addr",
0x01
+
hash);
}
}
//
Example:
One
DKG
→
addresses
for
all
chains
committee.runDKG()
→
PK
addresses
=
{
"ethereum":
deriveAddress(PK_ecdsa,
"ETHEREUM"),
//
0x1234...
"solana":
deriveAddress(PK_ed25519,
"SOLANA"),
//
Abc123...
"bitcoin":
deriveAddress(PK_schnorr,
"BITCOIN_TAPROOT"),
//
bc1p...
}
Part
XXXIII:
On-Chain
Decentralized
Infrastructure
121.
On-Chain
Architecture
Overview
PROXY
Network
is
a
fully
on-chain
decentralized
protocol
where
all
critical
state,
governance,
and
economics
are
enforced
by
smart
contracts.
This
section
details
the
on-chain
components
that
guarantee
decentralization
and
trustlessness.
Definition
33.1
(On-Chain
State)
The
PROXY
on-chain
state
Ω
consists
of:
Ω
=
(R,
C,
W,
S,
G)
where:
R:
Agent
Registry
-
all
registered
operators
and
their
stakes
C:
Committee
Assignments
-
which
agents
serve
which
wallets
W:
Wallet
Registry
-
DKG-derived
public
keys
for
each
wallet
S:
Slashing
Records
-
proved
misbehaviors
and
penalties
G:
Governance
State
-
proposals,
votes,
protocol
parameters
All
components
of
Ω
are
stored
on-chain
and
publicly
verifiable.
All
agents
met
minimum
stake:
agents[a].stake
≥
MIN_STAKE
Proof:
All
state
is
stored
in
on-chain
mappings
with
public
getters.
Signature
verification
uses
standard
ecrecover/Ed25519
verify
with
the
on-chain
stored
public
key.
Committee
membership
is
enumerable
on-chain.
□
Part
XVIII:
Research
Directions
and
Future
Work
Post-Quantum
Cryptography
Current
threshold
signature
schemes
rely
on
the
hardness
of
ECDLP,
which
is
vulnerable
to
quantum
computers
running
Shor's
algorithm.
This
section
outlines
our
research
roadmap
for
post-quantum
security.
Definition
18.1
(Post-Quantum
Security)
A
cryptographic
scheme
is
post-quantum
secure
if
it
remains
secure
against
adversaries
with
access
to
large-scale
quantum
computers
capable
of
running
Shor's
and
Grover's
algorithms.
Based
on
NIST
PQC
finalist
Dilithium:
KeyGen(1^λ,
t,
n):
1.
Generate
public
matrix
A
∈
R_q^{k×l}
2.
Each
party
i
generates
secret
share
(s1_i,
s2_i)
3.
Combine:
s1
=
Σᵢ
s1_i,
s2
=
Σᵢ
s2_i
4.
Public
key:
t
=
A·s1
+
s2
Sign(m):
1.
Each
party
samples
γᵢ
from
secret
distribution
2.
Combine:
w1
=
HighBits(A·γ)
via
MPC
3.
Challenge
c
=
H(μ
||
w1)
4.
Each
party
computes
zᵢ
=
γᵢ
+
c·sᵢ
5.
Combine
rejection
sampling
via
MPC
6.
Output
(c,
z)
Challenges:
-
Rejection
sampling
in
MPC
is
expensive
-
Signature
size:
~2.4KB
(vs
64
bytes
for
ECDSA)
-
Ongoing
research
area
Timeline:
Production-ready
by
2028
Zero-Knowledge
Proofs
Integration
Algorithm
121:
ZK-Enabled
Signing
Goal:
Prove
signature
validity
without
revealing
signature
Construction
using
zkSNARKs:
Public
Inputs:
-
Message
hash
h
-
Public
key
PK
-
Signature
commitment
C
=
H(σ)
Private
Inputs:
-
Signature
σ
=
(r,
s)
Circuit
Constraints:
1.
Valid
ECDSA:
(r,
s)
is
valid
signature
on
h
under
PK
2.
Commitment:
C
=
Poseidon(r
||
s)
Proof
System:
Groth16
or
PLONK
-
Prover
time:
~5
seconds
-
Proof
size:
288
bytes
(Groth16)
-
Verification:
~8ms
on-chain
Applications:
-
Private
voting
with
signature
privacy
-
Confidential
cross-chain
bridges
-
Anonymous
DeFi
transactions
Scalability
Research
Asynchronous
Threshold
Signatures
Theorem
18.1
(Asynchronous
Lower
Bound)
In
an
asynchronous
network
with
n
=
3t
+
1
parties
and
t
Byzantine
faults,
any
threshold
signature
protocol
requires
at
least
2
asynchronous
rounds
of
communication.
Algorithm
122:
Asynchronous
Threshold
Signing
Goal:
Sign
without
synchrony
assumptions
Protocol
(based
on
AVSS
+
ACS):
1.
Asynchronous
Share
Distribution
-
Each
party
broadcasts
encrypted
share
using
AVSS
-
Wait
for
t+1
valid
shares
(not
all
n)
2.
Asynchronous
Common
Subset
(ACS)
-
Agree
on
which
parties
participated
-
Byzantine
agreement
without
leader
3.
Reconstruction
-
Use
agreed
subset
for
Lagrange
interpolation
-
Combined
partial
signatures
from
agreed
set
Trade-offs:
-
More
resilient
to
network
partition
-
Higher
latency:
~2-3
seconds
-
Suitable
for
low-priority
operations
Decentralized
Agent
Market
Algorithm
123:
Agent
Reputation
System
Goal:
Automated
agent
selection
based
on
reputation
Reputation
Score
Components:
1.
Uptime:
fraction
of
blocks
agent
was
responsive
2.
Accuracy:
fraction
of
valid
partial
signatures
3.
Speed:
average
response
latency
4.
Stake:
normalized
stake
amount
5.
Tenure:
time
as
active
agent
Reputation
Formula:
R
=
w₁·Uptime
+
w₂·Accuracy
+
w₃·(1/Speed)
+
w₄·log(Stake)
+
w₅·log(Tenure)
where
Σwᵢ
=
1,
recommended:
(0.25,
0.30,
0.20,
0.15,
0.10)
Reputation
Updates:
-
Successful
signing:
R
←
R
+
δ₊
-
Failed/timeout:
R
←
R
-
δ₋
-
δ₋
>
δ₊
to
penalize
failures
more
Agent
Selection:
-
Probability
proportional
to
R
and
inverse
to
recent
usage
-
Ensures
diversity
while
favoring
reliable
agents
Cross-Chain
Atomic
Operations
Algorithm
124:
Atomic
Cross-Chain
Transfer
Goal:
Atomically
transfer
assets
across
chains
without
HTLCs
Participants:
-
User
U
-
PROXY
Network
P
(threshold
signers)
-
Source
Chain
A,
Destination
Chain
B
Protocol:
1.
U
locks
Asset_A
on
Chain
A
under
P's
key
2.
P
observes
lock,
verifies
conditions
3.
P
signs
release
of
Asset_B
on
Chain
B
4.
If
step
3
fails/times
out:
a.
P
signs
refund
on
Chain
A
b.
User
recovers
Asset_A
Atomicity
Guarantee:
-
P
either
signs
both
release
AND
keeps
lock
-
OR
P
signs
refund
AND
no
release
-
Threshold
ensures
no
single-party
can
break
atomicity
Advantage
over
HTLC:
-
No
user-provided
hashlock
required
-
Works
with
chains
that
don't
support
custom
scripts
-
Lower
on-chain
footprint
Formal
Verification
Roadmap
Component
Verification
Method
Status
Shamir's
Secret
Sharing
Coq
proof
Complete
Feldman
VSS
EasyCrypt
In
progress
GG20
Protocol
ProVerif
Planned
Q3
Smart
Contracts
Certora
Planned
Q4
Rust
Implementation
RustBelt
Research
phase
Appendix
C:
References
[1]
Shamir,
A.
"How
to
share
a
secret."
Communications
of
the
ACM,
22(11):612-613,
1979.
[2]
Feldman,
P.
"A
practical
scheme
for
non-interactive
verifiable
secret
sharing."
FOCS,
pp.
427-437,
1987.
[3]
Pedersen,
T.P.
"Non-interactive
and
information-theoretic
secure
verifiable
secret
sharing."
CRYPTO,
pp.
129-140,
1991.
[4]
Gennaro,
R.,
Jarecki,
S.,
Krawczyk,
H.,
Rabin,
T.
"Secure
distributed
key
generation
for
discrete-log
based
cryptosystems."
EUROCRYPT,
pp.
295-310,
1999.
[5]
Gennaro,
R.,
Goldfeder,
S.
"Fast
multiparty
threshold
ECDSA
with
fast
trustless
setup."
ACM
CCS,
pp.
1179-1194,
2018.
[6]
Gennaro,
R.,
Goldfeder,
S.
"One
round
threshold
ECDSA
with
identifiable
abort."
IACR
ePrint
2020/540,
2020.
[7]
Herzberg,
A.,
Jarecki,
S.,
Krawczyk,
H.,
Yung,
M.
"Proactive
secret
sharing,
or:
How
to
cope
with
perpetual
leakage."
CRYPTO,
pp.
339-352,
1995.
[8]
Canetti,
R.,
Gennaro,
R.,
Goldfeder,
S.,
Makriyannis,
N.,
Peled,
U.
"UC
non-interactive,
proactive,
threshold
ECDSA
with
identifiable
aborts."
ACM
CCS,
pp.
1769-1787,
2020.
[9]
Schnorr,
C.P.
"Efficient
signature
generation
by
smart
cards."
Journal
of
Cryptology,
4(3):161-174,
1991.
[10]
Paillier,
P.
"Public-key
cryptosystems
based
on
composite
degree
residuosity
classes."
EUROCRYPT,
pp.
223-238,
1999.
[11]
Boneh,
D.,
Lynn,
B.,
Shacham,
H.
"Short
signatures
from
the
Weil
pairing."
ASIACRYPT,
pp.
514-532,
2001.
[12]
Lindell,
Y.
"Fast
secure
two-party
ECDSA
signing."
CRYPTO,
pp.
613-644,
2017.
[13]
Damgård,
I.,
Keller,
M.,
Larraia,
E.,
Pastro,
V.,
Scholl,
P.,
Smart,
N.P.
"Practical
covertly
secure
MPC
for
dishonest
majority."
ASIACRYPT,
pp.
415-435,
2013.
[14]
Bacho,
R.,
Loss,
J.
"On
the
security
of
ECDSA
with
additive
key
derivation
and
presignatures."
EUROCRYPT,
pp.
365-395,
2022.
[15]
Groth,
J.
"On
the
size
of
pairing-based
non-interactive
arguments."
EUROCRYPT,
pp.
305-326,
2016.
[16]
Nakamoto,
S.
"Bitcoin:
A
peer-to-peer
electronic
cash
system."
2008.
[17]
Buterin,
V.
"Ethereum:
A
next-generation
smart
contract
and
decentralized
application
platform."
2014.
[18]
Garay,
J.,
Kiayias,
A.,
Leonardos,
N.
"The
bitcoin
backbone
protocol:
Analysis
and
applications."
EUROCRYPT,
pp.
281-310,
2015.
[19]
Pass,
R.,
Seeman,
L.,
Shelat,
A.
"Analysis
of
the
blockchain
protocol
in
asynchronous
networks."
EUROCRYPT,
pp.
643-673,
2017.
[20]
Kokoris-Kogias,
E.,
Jovanovic,
P.,
Gasser,
L.,
Gailly,
N.,
Syta,
E.,
Ford,
B.
"OmniLedger:
A
secure,
scale-out,
decentralized
ledger
via
sharding."
IEEE
S&P,
pp.
583-598,
2018.
[21]
Castro,
M.,
Liskov,
B.
"Practical
Byzantine
fault
tolerance."
OSDI,
pp.
173-186,
1999.
[22]
Buchman,
E.
"Tendermint:
Byzantine
fault
tolerance
in
the
age
of
blockchains."
PhD
thesis,
2016.
[24]
Hess,
F.
"Efficient
identity
based
signature
schemes
based
on
pairings."
SAC,
pp.
310-324,
2002.
[25]
Bowe,
S.,
Grigg,
J.,
Hopwood,
D.
"Halo:
Recursive
proof
composition
without
a
trusted
setup."
IACR
ePrint
2019/1021,
2019.
[26]
Ben-Sasson,
E.,
Chiesa,
A.,
Tromer,
E.,
Virza,
M.
"Succinct
non-interactive
zero
knowledge
for
a
von
Neumann
architecture."
USENIX
Security,
pp.
781-796,
2014.
[27]
Doerner,
J.,
Kondi,
Y.,
Lee,
E.,
Shelat,
A.
"Threshold
ECDSA
from
ECDSA
assumptions."
IEEE
S&P,
pp.
1051-1066,
2019.
[28]
Lindell,
Y.,
Nof,
A.
"Fast
secure
multiparty
ECDSA
with
practical
distributed
key
generation
and
applications
to
cryptocurrency
custody."
ACM
CCS,
pp.
1837-1854,
2018.
[29]
Damgård,
I.,
Jakobsen,
T.P.,
Nielsen,
J.B.,
Pagter,
J.I.,
Østergård,
M.B.
"Fast
threshold
ECDSA
with
honest
majority."
SCN,
pp.
382-400,
2020.
[30]
Katz,
J.,
Lindell,
Y.
"Introduction
to
Modern
Cryptography."
Chapman
and
Hall/CRC,
3rd
edition,
2020.