According to mempool, it looks like a pretty boring transaction with nothing going on. But in secret, a lot of really fancy cryptography took place.
Specifically this contract was executed:
{ details: 'n/a', expires: 14400, network: 'main', paths: [ [ 'heads', 10000, 'bc1qdzyjapwgnpem283aexjfym5ns3snkwjrwtz5kv' ], [ 'tails', 10000, 'bc1qqdua5pjqkmy074qhy0xweazj7ta7nsl08e7jpz' ] ], payments: [ [ 5000, 'bc1qtffw6glz5jc4fkxfxd7m549h3seayd7fq9svw6' ] ], programs: [ [ 'close', 'heads', 'proof', 1, '9997a497d964fc1a62885b05a51166a65a90df00492c8d7cf61d6accf54803be' ], [ 'close', 'tails', 'proof', 1, '9094567ba7245794198952f68e5723ac5866ad2f67dd97223db40e14c15b092e' ] ], schedule: [ [ 7200, 'close', 'heads|tails' ] ], title: 'Basic two-party contract with third-party dispute resolution.', value: 15000, version: 1 }
The contract was settled by the escrow agent asynchronously, without taking custody or interacting with the previous owner. Instead, the funds were deposited into a musig-based covenant transaction. And in the interim, the fate of a bitcoin in escrow was decided by a coin-flip.
With that, I'd like to announce that the BitEscrow beta program is officially launched.
There is still a lot of documentation that and other things that needs to be published, so please bear with me while I rush to get that done. We are in the middle of moving to a new office. A lot is going to be updated and released in the next few weeks.
Myself and Tristan have poured our hearts into this project, and it is a love-letter of sorts to Bitcoin and all the great people that make the magic-internet-money scene such a wonderful space.
Please feel free to check out the README.md at the link, if you are curious about the secret sauce behind the greatest escrow on the planet, backed by the hardest money every invented
ps: there's a lot of really great resources in there, for doing fun things such as taproot scripts and musig signatures (and putting bitcoin core through the ringer). Everything in there is open source.
pps: I tried to release this post the same time-of-day as the genesis block, but the fees are high and blocks are slow. the previous block took an hour fml πŸ’€πŸ’€πŸ’€
Topher and I have poured a lot of time and effort into BitEscrow - and we’re just getting started.
Ask us anything if you have any questions
reply
Congrats guys!
Can you describe the process at a user level (ie ignoring contract intricacies) in a little more detail? Who paid what, signed what, and in what order? How does the escrow get settled?
reply
Sure. we are still planning out the MVP that uses our API, so there are a lot more finer details to iron out before the whole customer journey is solid.
That said, the process should look something like this:
  1. Alice (or Bob) creates a contract and fills out the details of said contract, i.e title, desc, etc
  2. Bob deposits funds into the contract via the payment page
  3. Fulfillment of goods or services take place
Now, there are two routes this can take.
Happy path: 4a. Bob is satisfied with the order / service and confirms this with the agent via the dashboard 5a. Alice receives the funds and all parties walk away satisfied
Unhappy path: 4b. Bob is Unsatisfied with the order / service and tells this with the to agent via the support page - a dispute is opened 5b. Evidence is presented from both parties and depending on the strength of the evidence from parties, the "winner" is decided 6b. The winning party receives the funds
There are a lot more complexities that can happen, but this should be a high level overview of the customer journey.
Our philosophy is to make this process as simple / fast as possible for your grandma who uses Bitcoin.
reply
I was able to create, fund, and settle a contract without having to use bitcoin core or anything technical, just our client library.
for the perspective of using the client:
  1. draft a proposal then submit it to create a contract.
  2. the contract (and client) let's you generate an address, which you can send funds to.
  3. use the client to check the address for payment and it will register / fund the contract, now the contract will activate once the funds clear
  4. once the contract is active, you can use the client to submit arguments to the VM, such as "close" on "tails" path. If you have rights to settle, the agent will close and broadcast the "tails" transaction
reply
Any plans to integrate with Nostr? My conjecture is the "Alice proposes a contract to Bob" step seems like an event that would make sense for Nostr.
reply
For funding a contract, we are rolling out a cool cryptography feature called disposable keys, which was developed with nostr in mind. It will let you generate a key locally on your machine for the deposit signing, then throw away the key. You can elect a key in cold storage to be a recovery key just in case, so you can use your npub to create disposable ephemeral signing keys that can be recovered by your nsec in a worst case scenario.
Also, the proof generation that is used for user authentication and interacting with the contract VM, is all secretly nostr notes underneath the hood :-) so nostr signing devices can interact with our API
reply
Yes. Nostr was going to be the original plan for the in app chat, but we ripped it out so that you can communicate off platform if you so desire.
That said, we are thinking of putting it back in at some point.
@BlueSlime made a library for this to make it easy if you want to check it out:
there are also other nostr libraries you can check out that he made.
reply
It's always tails!
This looks so cool. Can't wait to dig in. I'm sure questions to come.
reply
Thanks! There will be full documentation soon enough. In the mean time you can check out the readme
reply
Congratulation πŸ€™
reply
reply
The title made me think this was some poor persons savings.
Congratulations! Looks like Bitcoin is on the way to a very diverse future. In these early years its impossible to imagine all the opportunity
reply
Woohoo!! πŸ‘πŸ‘
reply
reply
We plan on having a full release announcement soon, stay tuned!
reply
Congrats, I can't wait to check this out
reply
Thanks :)
reply