LocalCryptos запускает торговлю Bitcoin Cash в качестве своей 5-й криптовалюты

Теперь пользователи могут покупать и продавать Bitcoin Cash (BCH) на самом популярном, некастодиальном P2P крипторынке.

Почти год прошел с тех пор, как мы добавили новую криптовалюту в LocalCryptos, и многие из вас запрашивали Bitcoin Cash в качестве следующего варианта нашей некастодиальной формулы. Ожидание наконец-то закончилось.

Начиная с сегодня, P2P торговля Bitcoin Cash доступна на LocalCryptos.

Как будет работать смарт-контракт на Bitcoin Cash?

Bitcoin Cash-это форк BTC, что означает, что он обладает аналогичными возможностями смарт-контракта “Биткоин-скрипт”. В отличие от наших скриптов для смарт-контрактов, Bitcoin, Litecoin, и Dash, LocalCryptos использует “OP_CHECKDATASIG” op-code который доступен только в транзакциях Bitcoin Cash.

Обычный пользователь не заметит разницы между этим новым типом смарт-контракта, так как результат практически идентичен LocalCryptos’ скрипту для некастодиального BTC смарт-контракта. Однако, с точки зрения программирования, скрипт Bitcoin Cash P2SH, является более простым и интуитивно понятным, и он имеет некоторые преимущества.

Как и в случае со всеми смарт-контрактами на LocalCryptos, мы технически не можем возвращать средства обратно на смарт-контракт escrow. Мы участвуем только в том случае, если возникает спор об оплате, и после этого у нас есть возможность направить BCH покупателю или продавцу. Нажмите здесь, чтобы узнать больше о криптографической магии, которая делает это возможным.

Разумеется, ваш кошелек Bitcoin Cash на LocalCryptos также защищен. Ваши ключи—ваши монеты. Разработчики могут просмотреть наши аннотированные шаблоны скриптов для Bitcoin Cash в нижней части этого объявления.

Некоторые факты о Bitcoin Cash:

  • Bitcoin Cash (BCH) был создан в 2017 году в результате Bitcoin форка.
  • Он был создан из-за спроса на вариант Bitcoin чтобы обрабатывать больше количества транзакций на блок, что, по мнению сторонников, потребует увеличения размера блока блокчейна.
  • В результате такого подхода к проблеме масштабируемости Bitcoin Cash не поддерживает отдельные транзакции (в отличие от Bitcoin и Litecoin).
  • Несмотря на различия, обе монеты по — прежнему имеют много общего-они обе добывают монеты в соответствии с алгоритмом консенсуса Proof-of-Work, их общее предложение монет ограничено 21 миллионом, и обе поддерживаютpay-to-public-key-hash (P2PKH) и pay-to-script-hash (P2SH) адреса.
  • Средняя комиссия за транзакцию Bitcoin Cash обычно составляет менее 1¢ — практически бесплатно!

Как работает некастодиальный смарт-контракт Bitcoin Cash

Как и в случае со скриптами, которые мы разработали для других криптосистем, наш код смарт-контракта Bitcoin Cash, является открытым исходным кодом.

Этот скрипт работает аналогично транзакции Bitcoin с несколькими подписями, за исключением того, что участвующим сторонам не нужно договариваться о том, как и когда расходуются Bitcoin Cash. Оракул, который может быть продавцом, покупателем или арбитром, в зависимости от обстоятельств сделки, не имеет возможности устанавливать условия для транзакции, в отличие от традиционных кошельков с несколькими подписями.

Это связано с тем, что в традиционном кошельке с несколькими подписями все стороны должны подписать полную транзакцию, включая все выходы и входы, в то время как в транзакции смарт-контракта, которые использует OP_CHECKDATASIG, оракулу просто нужно предоставить победителю подпись, которую они могут использовать в любое время, чтобы разблокировать BCH любым способом по своему выбору.

Этот тип механизма условного депонирования по цепочке дает покупателю и продавцу возможность осуществлять обмен без разрешения, а арбитру-возможность вмешиваться в качестве посредника, в случае спора об оплате.

Депозит продавца в смарт-контракте Escrow

Чтобы перевести Bitcoin Cash на смарт-контракт, продавец генерирует транзакцию с двумя выходами. Один выход - это депонирование покупателю, а другой-возвращаемая плата. Если сделка не будет успешной, продавец может потребовать возврата комиссии.

В обычных сделках продавец позволит покупателю потратить выход смарт-контракта. Это не требует нашего вмешательства. Аналогично, если покупатель решит отменить сделку по собственному желанию, продавец может потратить выход без нашей помощи. Первый сценарий-это “высвобождение”, а второй - “возвращение”.

В случае возникновения спора об оплате арбитр может вмешаться и выступить в качестве посредника. Арбитр может направить средства только продавцу или покупателю, по своему усмотрению. Скрипт комиссии позволяет арбитру взимать ее после высвобождения смарт-контракта или вернуть комиссию продавцу, если сделка не удалась.

Шаблон выхода смарт-контракта

OP_DUP # После этого нам нужно снова использовать байт
# Получить хэшированные открытые ключи, с которыми нам нужно сравнить (наши и oracle)
OP_1
OP_EQUAL
OP_IF
  <hash160(SellerPubKey)> # Oracle pub ключ
  <hash160(BuyerPubKey)> # Spender pub ключ
OP_ELSE
  OP_DUP
  OP_2 # = выпуск из арбитра
  OP_EQUAL
  OP_IF
    <hash160(ArbPubKey)> # Oracle pub ключ
    <hash160(BuyerPubKey)> # Spender pub ключ
  OP_ELSE
    OP_DUP
    OP_3 # = возврат от покупателя
    OP_EQUAL
    OP_IF
      <hash160(BuyerPubKey)> # Oracle pub ключ
      <hash160(SellerPubKey)> # Spender pub ключ
    OP_ELSE
      OP_DUP
      OP_4 # = возврат от арбитра
      OP_EQUALVERIFY # должно быть правдой, иначе сообщение неизвестно
      <hash160(ArbPubKey)> # Oracle pub ключ
      <hash160(SellerPubKey)> # Spender pub ключ
    OP_ENDIF
  OP_ENDIF
OP_ENDIF
# Поместите хэшированные открытые ключи в alt stack
OP_TOALTSTACK
OP_TOALTSTACK # Stack эффективно сбрасывается на вход
# В Stack alt у нас есть: [ hash160(SpenderPubKey), hash160(OraclePubKey) ]
<EscrowKey> # Добавьте nonce к ключу смарт-контракта, чтобы создать сообщение
OP_CAT # Stack is [ ..., <OraclePubKey>, <0x01 || EscrowKey> ]
OP_SWAP # Используйте это позже; сначала проверьте хэш открытого ключа oracle
OP_DUP
OP_HASH160
OP_FROMALTSTACK # Возьмите hashed pub ключ из alt stack
OP_EQUALVERIFY # Public key проверен; теперь проверьте подпись oracle
OP_CHECKDATASIGVERIFY # Теперь проверьте отправителя
OP_DUP
OP_HASH160
OP_FROMALTSTACK
OP_EQUALVERIFY
OP_CHECKSIG

Шаблон выхода комиссии

Это комиссионная часть сделки. Если сделка не удалась, плата может быть возвращена продавцом; если сделка будет успешной, выход комиссии будет вычтен LocalCryptos.

OP_DEPTH # Размер stack подсчета
OP_2
OP_EQUAL # Содержит ли входной stack только два элемента?
OP_IF # Если да, то это плата за сбор владельцем; простой PKG
  OP_DUP
  OP_HASH160
  <hash160(ArbPubKey)>
  OP_EQUALVERIFY
  OP_CHECKSIG
OP_ELSE # Продавец тратит "возвращенный" (т. е. отмененный) депозит
  OP_DUP
  OP_3 # = возврат от покупателя
  OP_EQUAL
  OP_IF
    <hash160(BuyerPubKey)> # Oracle pub ключ
  OP_ELSE
    OP_DUP
    OP_4 # = возврат от арбитра
    OP_EQUALVERIFY #должно быть правдой, иначе сообщение неизвестно
    <hash160(ArbPubKey)> # Oracle pub ключ
  OP_ENDIF
  <hash160(SellerPubKey)> # Spender pub ключ
  # Поместите хэшированные открытые ключи в Stack alt
  OP_TOALTSTACK
  OP_TOALTSTACK # Stack эффективно сбрасывается на вход
  # В alt stack у нас есть: [ hash160(SpenderPubKey), hash160(OraclePubKey) ]
  <EscrowKey> # Добавьте nonce к ключу смарт-контракта, чтобы создать сообщение
  OP_CAT # Stack is [ ..., <OraclePubKey>, <0x01 || EscrowKey> ]
  OP_SWAP # Используйте это позже; сначала проверьте хэш открытого ключа oracle
  OP_DUP
  OP_HASH160
  OP_FROMALTSTACK # Возьмите hashed pub key из alt stack
  OP_EQUALVERIFY # Public keyпроверен; теперь проверьте подпись oracle
  OP_CHECKDATASIGVERIFY # Проверьте отправителя
  OP_DUP
  OP_HASH160
  OP_FROMALTSTACK
  OP_EQUALVERIFY
  OP_CHECKSIG
OP_ENDIF

Подпись скрипта

Чтобы потратить выход смарт-контракта, тратящий должен указать в своей транзакции Bitcoin Cash scriptSig:

<Sig> <SpenderPubKey> <OracleSignature> <OraclePubKey> <ActionByte>
# Пример: <Sig> <OwnPubkey> <SignatureFromSeller> <SellerPubKey> OP_1
  1. <ActionByte> является байтом, соответствующим выполняемой ситуации.
    • 1: Смарт-контракт высвобождается продавцом
    • 2: Смарт-контракт высвобождается арбитром
    • 3: Смарт-контракт возвращается покупателем
    • 4: Смарт-контракт возвращается арбитром
  2. <OraclePubKey> является открытым ключом лица, подписывающего сообщение о выпуске/возврате.
    • 1: <OraclePubKey> = <SellerPubKey>
    • 2: <OraclePubKey> = <ArbPubKey> (контролируется LocalCryptos)
    • 3: <OraclePubKey> = <BuyerPubKey>
    • 4: <OraclePubKey> = <ArbPubKey> (контролируется LocalCryptos)
  3. <OracleSignature> является ли подпись от оракула ECDSA(<ActionByte> || <EscrowKey>). <EscrowKey> уникален, поэтому подписи нельзя повторно использовать во всех смарт-контрактах.
  4. <SpenderPubKey> является key ключом покупателя, если выпуск, в противном случае public ключом продавца.
  5. <Sig> является подписью транзакции от тратящего.