LearnBitcoin

Bitcoin Dev Archive 2014

BIP Draft: Atomic Cross Chain Transfer Protocol

4 messages, 30 Apr 2014. Started by Tier Nolan.

Tier Nolan (3), Luke Dashjr

Permalink Original thread on gnusha.org

Tier Nolan permalink original

Due to "popular" demand, I have created a BIP for cross chain atomic transfers.

Unlike the previous version, this version only requires hash locking. The previous version required a "selector" transaction based on if statements.

    OP_HASH160 OP_EQUAL_VERIFY [public key] OP_CHECKSIG
    OP_HASH160 OP_EQUAL_VERIFY OP_N [public key 1] ... [public key m]
OP_M OP_CHECK_MULTISIG

https://github.com/TierNolan/bips/blob/bip4x/bip-atom.mediawiki

Luke Dashjr in reply to Tier Nolan permalink original

On Wednesday, April 30, 2014 6:03:59 PM Tier Nolan wrote:

Quoted text (4 lines)
> Due to "popular" demand, I have created a BIP for cross chain atomic
> transfers.
>
> https://github.com/TierNolan/bips/blob/bip4x/bip-atom.mediawiki

Instead of TX0, TX1, etc, can you put some kind of meaningful identifier for these transactions?

TX1 and TX2 *cannot* be signed until after TX0 is completely signed by both parties. After TX0 is signed, but before TX2 is signed, either party could walk away or otherwise hold the funds hostage. The sequence of signing proposed in this BIP is *not possible to perform*. How did you implement and test this? :/

What is the purpose of the OP_EQUAL_VERIFY in TX4? I don't see a use...

IMO, there should be separate BIPs for the exchange itself, and the protocol to negotiate the exchange. I would recommend changing the latter from JSON-RPC to some extension of the Payment Protocol, if possible.

Perhaps it would be good to only support compressed keys, to discourage use of uncompressed ones..

Luke

Tier Nolan in reply to Luke Dashjr permalink original

On Wed, Apr 30, 2014 at 7:59 PM, Luke Dashjr <luke@dashjr•org> wrote:

Quoted text (4 lines)
> Instead of TX0, TX1, etc, can you put some kind of meaningful identifier
> for
> these transactions?
>

Sorry, that is the names come from the original thread, where I was outlining the idea. I updated the names.

Quoted text (2 lines)
> TX1 and TX2 *cannot* be signed until after TX0 is completely signed by both
> parties.

The bail in transactions are only signed by one of the parties. They are kept secret until the refund/payout transactions are all properly signed.

There is a malleability risk though, hence the need for the 3rd party.

It works on the same refund principle as payment channels.

After TX0 is signed, but before TX2 is signed, either party could

Quoted text (2 lines)
> walk away or otherwise hold the funds hostage. The sequence of signing
> proposed in this BIP is *not possible to perform*.

TX0 is not broadcast until the refund transactions are complete.

Quoted text (2 lines)
> How did you implement and test this? :/
>

This is a draft at the moment.

There is an implementation of (almost) this system but not by me. This proposal reduces the number of non-standard transaction types required.

A full implement is the next step.

Quoted text (2 lines)
> What is the purpose of the OP_EQUAL_VERIFY in TX4? I don't see a use...
>

That is a typo, I have updated it.

Quoted text (3 lines)
> IMO, there should be separate BIPs for the exchange itself, and the
> protocol
> to negotiate the exchange.

I can do that.

Quoted text (3 lines)
> I would recommend changing the latter from JSON-RPC
> to some extension of the Payment Protocol, if possible.
>

I wanted it to be as simple as possible, but I guess MIME is just a different way of doing things.

Quoted text (5 lines)
>
> Perhaps it would be good to only support compressed keys, to discourage
> use of
> uncompressed ones..
>

I would have no objection.

Quoted text (3 lines)
>
> Luke
>
Tier Nolan in reply to Tier Nolan permalink original

I updated again.

The new version only requires non-standard transactions on one of the two networks.

Next step is a simple TCP / RPC server that will implement the protocol to trade between testnet and mainnet. Timeouts of much less than 24 hours should be possible now.

On Wed, Apr 30, 2014 at 9:48 PM, Tier Nolan <tier.nolan@gmail•com> wrote:

Quoted text (77 lines)
> On Wed, Apr 30, 2014 at 7:59 PM, Luke Dashjr <luke@dashjr•org> wrote:
>
>> Instead of TX0, TX1, etc, can you put some kind of meaningful identifier
>> for
>> these transactions?
>>
>
> Sorry, that is the names come from the original thread, where I was
> outlining the idea.  I updated the names.
>
>
>> TX1 and TX2 *cannot* be signed until after TX0 is completely signed by
>> both
>> parties.
>
>
> The bail in transactions are only signed by one of the parties.  They are
> kept secret until the refund/payout transactions are all properly signed.
>
> There is a malleability risk though, hence the need for the 3rd party.
>
> It works on the same refund principle as payment channels.
>
> After TX0 is signed, but before TX2 is signed, either party could
>> walk away or otherwise hold the funds hostage. The sequence of signing
>> proposed in this BIP is *not possible to perform*.
>
>
> TX0 is not broadcast until the refund transactions are complete.
>
>
>> How did you implement and test this? :/
>>
>
> This is a draft at the moment.
>
> There is an implementation of (almost) this system but not by me.  This
> proposal reduces the number of non-standard transaction types required.
>
> A full implement is the next step.
>
>
>> What is the purpose of the OP_EQUAL_VERIFY in TX4? I don't see a use...
>>
>
> That is a typo, I have updated it.
>
>
>> IMO, there should be separate BIPs for the exchange itself, and the
>> protocol
>> to negotiate the exchange.
>
>
> I can do that.
>
>
>> I would recommend changing the latter from JSON-RPC
>> to some extension of the Payment Protocol, if possible.
>>
>
> I wanted it to be as simple as possible, but I guess MIME is just a
> different way of doing things.
>
>>
>> Perhaps it would be good to only support compressed keys, to discourage
>> use of
>> uncompressed ones..
>>
>
> I would have no objection.
>
>
>>
>> Luke
>>
>
>