Hey bennyhodl, great work on dlcdevkit. I have been building a PoW-gated Schnorr attestation oracle called pow-attest (https://attest.powforge.dev) and think it would slot in cleanly as a fourth oracle implementation alongside kormir, nostr, and p2p_derivatives.
What pow-attest does
Two condition types supported right now:
github_pr_merged -- locks a DLC contract that releases when a specific PR gets merged
github_issue_closed -- same idea but for issue close
Registration is PoW-gated (SHA-256 hashcash, difficulty 18). The oracle signs attestations with BIP-340 Schnorr using key 2bc78390c94d8bbb96ac3e6940462ba2812418d871e701c1a845fdb1dfd4a0e5, attestation tag DLC/oracle/attestation/v0. The use case is bug-bounty auto-release: lock funds to a DLC, merge the PR, oracle signs RELEASED.
There is a JS client already shipped (@powforge/attest-client on npm) and I would love to add a Rust client behind a pow-attest feature flag, same shape as p2p_derivatives.rs.
Compatibility questions before I open a PR
I dug into the ddk_manager::Oracle trait and found two things worth asking about:
-
oracle_announcement_signature -- our /api/v1/bounty/:id/announcement endpoint returns JSON without a Schnorr signature over the OracleEvent TLV. Looking at p2p_derivatives.rs I am not sure if dlcdevkit enforces this or if it is advisory. Happy to add the signature server-side if it is required.
-
event_descriptor -- our outcomes are binary (RELEASED / PENDING). I am planning to map this to EnumerationEventDescriptor { outcomes: ["RELEASED", "PENDING"] } in the Rust client. Does that look right to you, or would a DigitDecompositionEventDescriptor be more appropriate for the manager internals?
Proposed PR shape
ddk/src/oracle/pow_attest.rs (~150 LOC, mirrors p2p_derivatives.rs)
ddk/examples/pow_attest.rs (mirrors lightning.rs, swaps KormirOracleClient for PowAttestOracleClient)
- Feature flag:
pow-attest in ddk/Cargo.toml
Happy to answer any questions about the oracle design. Just wanted to check in before surprising you with a PR out of nowhere.
Hey bennyhodl, great work on dlcdevkit. I have been building a PoW-gated Schnorr attestation oracle called pow-attest (https://attest.powforge.dev) and think it would slot in cleanly as a fourth oracle implementation alongside kormir, nostr, and p2p_derivatives.
What pow-attest does
Two condition types supported right now:
github_pr_merged-- locks a DLC contract that releases when a specific PR gets mergedgithub_issue_closed-- same idea but for issue closeRegistration is PoW-gated (SHA-256 hashcash, difficulty 18). The oracle signs attestations with BIP-340 Schnorr using key
2bc78390c94d8bbb96ac3e6940462ba2812418d871e701c1a845fdb1dfd4a0e5, attestation tagDLC/oracle/attestation/v0. The use case is bug-bounty auto-release: lock funds to a DLC, merge the PR, oracle signs RELEASED.There is a JS client already shipped (
@powforge/attest-clienton npm) and I would love to add a Rust client behind apow-attestfeature flag, same shape asp2p_derivatives.rs.Compatibility questions before I open a PR
I dug into the
ddk_manager::Oracletrait and found two things worth asking about:oracle_announcement_signature-- our/api/v1/bounty/:id/announcementendpoint returns JSON without a Schnorr signature over the OracleEvent TLV. Looking atp2p_derivatives.rsI am not sure if dlcdevkit enforces this or if it is advisory. Happy to add the signature server-side if it is required.event_descriptor-- our outcomes are binary (RELEASED / PENDING). I am planning to map this toEnumerationEventDescriptor { outcomes: ["RELEASED", "PENDING"] }in the Rust client. Does that look right to you, or would aDigitDecompositionEventDescriptorbe more appropriate for the manager internals?Proposed PR shape
ddk/src/oracle/pow_attest.rs(~150 LOC, mirrorsp2p_derivatives.rs)ddk/examples/pow_attest.rs(mirrorslightning.rs, swapsKormirOracleClientforPowAttestOracleClient)pow-attestinddk/Cargo.tomlHappy to answer any questions about the oracle design. Just wanted to check in before surprising you with a PR out of nowhere.