-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Single-Funder DLC for Crowdfunding #117
Comments
Welcome @carlaKC ! Some thoughts: Neat use case :) I like it TLDR; This can definitely be solved using DLC oracles! Not all too much has to be done (on paper anyway, in terms of building server code there is a non-trivial amount of work involved but nothing too crazy). PTLCs using DLC oracles might be a better solution compared to DLCs, noting that both can be supported simultaneously if that would be beneficial. I think there are two ways this could work:
It just so happens that these two approaches are fully compatible! That means that assuming some sane registry of relevant PTLCs and DLCs, the receiver could support both kinds and have oracles count funds from both. The resulting signature from the oracle could then be used to unlock both kinds of contracts. From a general privacy perspective DLCs have a lighter on-chain footprint than PTLCs but for this use case, contracts must be publicly revealed in order to be counted towards the total so I don't think it is a significant consideration. As I mentioned, in either way of this being done, the oracle signing So long as 3 or 5 or whatever number of truly trustworthy oracles exist this vastly reduces the chances that you were accidentally wrong in trusting an oracle and that they've been bribed or compromised. In either approach, using a threshold of multiple oracles (chosen by the user, different funders can use different oracles according to their preferences) maximizes trust-minimization (i.e. minimizes trust the most that can be done on BTC) and all trust is placed solely in the threshold set of oracles (of each funders choosing) with no trust resting on the funder or receiver. To the best of my knowledge, there is no easy way to hide much at all about individual funders' contracts from the oracle. With ZKPs it is possible to prove that some amount has been met in some set of blocks but not only does this require a lot of extra work on the receiver's end but it also trusts the receiver not to reveal this information, and worst of all the complexity of such a ZKP is super duper HUGE. Probably not worth it, at least in the current state of the crypto libraries I'm familiar with. Might be a fun project for some PhD student someday though haha |
In terms of practically implementing software to support this use case, I believe the following is what is required:
If the DLC approach is taken:
If the PTLC approach is taken:
|
Welcome to the spec @carlaKC :) Crowdfunding is a really interesting use-case for the Bitcoin ecosystem and AFAIK it hasn't been Let's discuss more the problem before to examine potential solutions. Crowdfunding as a Trustless Multi-Payer-Single-Payee (MPSP) Payment SchemeLet's say you have Alice, Bob and Caroll making the pledge between them to pay Dave 0.1 BTC, at Thus, we're aiming for this trustless property, each payment to Dave isn't only atomic on its own We're also aiming to make this crowdfunding application scalable. Let's examine BitcoinACKs as an Lastly, about privacy, you have different viewpoints to consider. Funders would like to hide their A first onchain solution : Trustless SIGHASH_ANYONECANPAY transactionThere is a old-known solution to enable crowdfunding, which is relying on SIGHASH_ANYONECANPAY It's nicely trustless, as the transaction will be valid only if the fundee gathered enough inputs In fact, some folks tried to build a bitcoin crowdfunding platform few years ago but it never reached momentum. A second offchain solution : Accumulative MPPMPP are cool and at the protocol-level, there is no requirement that all the chunk are coming from
I think this scheme is correct but it comes at least with 2 strong weaknesses, a) the fundee has to A third offchain solution : PTLCs with Arbiter OraclesThe whole interactivity and public provability of the crowdfunding state can be removed by relying Let's sketch such protocol.
I think this protocol is quite nice because it's scalable and quite good about privacy, funder W.r.t to the proof systems requirement, AFAICT, you don't need general statement ZKPs. Those ones Hopefully, this would help you to clarify the crowdfunding properties you're aiming for before to Lastly, if you understand off-chain you understand onchain too, we're using the same transactions :p |
Hi dlc-spec!
I've been thinking about another form of DLC that could have some interesting applications - a single funded DLC used specifically for crowdsourcing funding in a trustless manner. This is a very rough idea, and may not work at all, but I just wanted to put it out there for discussion.
Problem
Crowd-funding with Bitcoin (so far) requires trust. Gross. Typically this would take two forms:
Idea
A simplified, single-funded DLC could be used to setup trust-minimized crowdsourcing for projects, depending only on an oracle that signs the outcome of the conditions for funding. I'm not a script-wizard, but the paths for the contract could be as follows:
Examples
Traditional Crowd Funding
goal_met
orgoal_not_met
by examining all registered txns to calculate total committed amt at the decided upon blockh/t to BitcoinACKs PR pledges, which gave me this idea.
Motivation
There are likely some trust issues with the oracle knowing the amount pledged, perhaps there is some zero knowledge magic that one could do, but even without that I think this takes a step in the direction of less trusted funding models?
The text was updated successfully, but these errors were encountered: