The unresolved issue of liquidity lock requirements must be addressed before the Ark protocol can be deemed ready for public deployment. This issue pertains specifically to the mechanics of spending outputs within the Ark protocol, which directly impact its scalability and efficiency in managing off-chain transactions.
In the Ark Protocol, a timelock is imposed on non-leaf transactions, allowing the Ark Server to reclaim the associated outputs once the timelock expires. However, this timelock mechanism significantly amplifies the Ark Server's liquidity requirements, as it necessitates maintaining locked funds over extended periods, thereby impacting the system's overall capital efficiency.
To address this issue, I propose utilizing a multi-key address scheme analogous to the structure employed in Silent Payments. This approach not only mitigates the liquidity challenges but also introduces the added advantage of enabling Ark Providers to reorganize and group transactions based on anticipated spending intervals, thereby optimizing liquidity managemnt.
- Ark ( A ) --> The Ark Server
- Bob ( nonce n , Bob_scan_key Bc, Bob_spend_key Bs )
- Charlie ( nonce n , Charlie_scan_key Cc, Charile_spend_key Cs )
- Bob_nonce (n) = hash(bs.A) + hash(random_secret_known_to_bob)
- Bob_scan_key (Bc) = (bs.A || random_secret_know_to_bob).G
- Bob_scan_secret (bc) = (bs.A || random_secret_know_to_bob).G
- Bob_spend_key (Bs) = bs.G
- Bob (n, Bc, Bs) ---> Bob Ark Address
- Note that a new Ark Address is always generated by the receiver whenever payment is to be made, which (Bs) is expected to be static.
In Ark, payments work in such flow: Bob -> Ark -> Charlie (atomic)
- Bob gives Charlie Ark Address to the Ark Server
- Server Decodes and derives ( n , Cc, Cs )
- Server computes k = hash(random_secret_known_to_charlie) = n - hash(a.Cs)
- Ark creates a leaf transaction and includes a forefeitig tapscript spending condtion for Charlie and Ark:
- forfeiting_tapscript = OP_SHA256 k OP_EQUAL OP_DATA_32 <asp_pubkey> OP_CHECKSIGVERIFY OP_DATA_32 Cs OP_CHECKSIG.
- P = NUMS_H + [taproot].G
- Ark sends fund to P.
- If Bob also sends fund to Dave, Ark provider then creates a non leaf transaction which includes a key spend path, using Musig key aggregation:
- Internal_Pubkey = H(Bc, Dc, A). Bc + Dc + A
- Internal_Privkey = H(Bc, Dc, A). bc + dc + a
- Q = Internal_Key + [scirpt_path].G The Inernal Key can be created recursively to the root transaction.
By ensuring that Bs remains static, the Ark Provider can group transactions more effectively, separating keys with frequent transactions into a distinct branch from those with infrequent transactions. This approach helps to significantly enhance liquidity management.