Как оффчейн-транзакции обрабатываются биткойнами?

Я пытаюсь выяснить, как на самом деле транзакции обрабатываются биткойнами.

Я просматриваю полный список методов RPC, и для некоторых наиболее интересных методов отсутствует документация.

шаг

Я знаю, что есть два метода перемещения биткойнов между адресами: либо через прямую транзакцию p2p, либо через так называемую транзакцию вне сети . Если я правильно понимаю, встроенный кошелек bitcoind позволяет нам отправлять транзакции вне сети с помощью метода перемещения . К сожалению, это не очень хорошо документировано, но я хочу точно знать, как это работает.

Вот документация для него:

move <fromaccount> <toaccount> <amount> [minconf=1] [comment]

Move from one account in your wallet to another
  1. Итак, если на счете А один BTC, а на счете Б ноль. Что произойдет, если я сначала переведу один BTC из A в B, используя транзакцию вне сети, а затем выполню прямую транзакцию в размере 1 BTC из B в C?

  2. Кроме того, для чего minconfнужен параметр? Насколько я понимаю, транзакции вне сети не требуют подтверждений.

Отправлено из

Вот документация для метода sendfrom :

sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Will send the given amount to the given address, ensuring the account has a valid balance using [minconf] confirmations. Returns the transaction ID if successful (not in JSON object).

Для отправки биткойнов требуется учетная запись.

  1. Что делать, если у меня есть несколько адресов/транзакций для указанной учетной записи? Какую стратегию использует биткойн, чтобы определить, с каких адресов совершать транзакции и сколько биткойнов использовать с каждого?

  2. Для какого minconfпараметра?

отправить по адресу

sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Returns the transaction ID <txid> if successful.
  1. Аккаунт не указан для этого звонка. Какой аккаунт будет использовать биткойн? По умолчанию?

  2. Почему нет minconfпараметра для этого?

Многие страницы в вики устарели, вы также можете ознакомиться с Справочником разработчика биткойнов . Эта вики-страница устарела, но объясняет функциональность учетных записей Bitcoin Core . Как объяснил Шабахат М. Аюби ниже, функция учетных записей в Bitcoin Core устарела.

Ответы (2)

Во-первых, существует множество типов оффчейн-транзакций. Любое движение стоимости в BTC, которое напрямую не соответствует транзакции в блокчейне, может быть классифицировано как таковое. Это включает в себя:

  1. дать кому-то компьютер/телефон с кошельком с BTC
  2. предоставление кому-либо приватного ключа/физического биткойна.
  3. предоставление кому-либо доступа к общей учетной записи веб-кошелька
  4. отправка денег с одного счета на другой в рамках одной и той же услуги (что просто уменьшает баланс одного человека и увеличивает баланс другого)
  5. платежные каналы, в том числе Lightning, которые согласовывают небольшое количество транзакций, что соответствует чистому эффекту гораздо большего количества переводов стоимости.

Команда moveв bitcoind не приводит к транзакции вне сети; он просто увеличивает один внутренний счетчик и уменьшает другой. Это точно вне сети, но назвать это транзакцией сложно. Все, что вы сделали, это изменили способ подсчета денег, которые вы уже контролируете.

Сервис (например, № 4 выше) потенциально может использовать команду перемещения bitcoind для реализации (простой) системы транзакций вне сети. Но это, по крайней мере, требует настройки, при которой у нескольких людей есть учетные записи в вашей системе, и они рассматривают вас как хранителя своих денег.

Что касается вопросов, которые вы задаете:

  1. Аккаунты — это полностью независимое понятие от адресов. С точки зрения bitcoind, баланса адресов не существует. Есть баланс кошелька (сколько всего монет контролирует кошелек) и балансы счетов (которые являются просто внутренними счетчиками бобов, не связанными ни с чем в блокчейне). Когда новая транзакция отправляет M денег на адрес A, а адрес A связан со счетом C, баланс кошелька увеличивается на M, а баланс счета для C увеличивается. Когда вы отправляете деньги с помощью sendfrom, указанный счет списывается. Но фактическая транзакция, созданная в сети, всегда использует любые монеты, которые контролирует кошелек. Опять же: нет никакой связи между монетами в цепочке (выходами транзакций) и остатками на счетах.

  2. Команда перемещения использовалась для проверки баланса на счете, подлежащем дебетованию, и терпела неудачу, если ей не хватало подсчета только транзакций с как минимум minconfподтверждениями. Этот функционал был давно удален, а параметр minconf теперь игнорируется.

  3. Биткойн рассматривает весь кошелек как владельца монет и будет использовать любые монеты, доступные для любой транзакции, которую он создает. Нет никакой связи между монетами и счетами. sendfromпросто позволяет вам указать, какой баланс счета уменьшить.

  4. sendfromвыполняет проверку баланса дебетованной учетной записи и завершится ошибкой, если она сделает баланс учетной записи отрицательным, считая только кредитные транзакции с как минимум minconfподтверждениями. Эта функция не очень надежна, так как сборы могут сделать счет отрицательным, несмотря на предыдущую проверку баланса.

  5. sendtoaddressвсегда списывает средства со счета "" и не проверяет баланс на нем, поэтому баланс счета "" может стать отрицательным (пока баланс кошелька - сумма остатков на счетах - положителен). Опять же: это никоим образом не ограничивает, какие монеты используются для построения транзакции.

  6. Поскольку sendtoaddressпроверка баланса не выполняется, minconfпараметр никак не влияет. Обычно все монеты с 1 подтверждением (если они приходят из других кошельков) или 0 подтверждением (если они приходят от вас) можно потратить, хотя, например, spendzeroconfchangeнастройка изменяет это).

Как уже указывалось, система баланса счета и команда перемещения устарели, потому что их очень сложно понять и правильно использовать. Если вам нужен учет, внедрите его самостоятельно сверху.

Спасибо, Питер, за развернутый ответ. Теперь это действительно прояснило для меня ситуацию. Кроме того, мы решили внедрить собственную систему учета и рассматривать биткойн-кошелек как единую общую учетную запись для всех клиентов, как вы предложили в последнем предложении.

Проще говоря, оффчейн-транзакция означает, что стороны, участвующие в транзакции, в основном обмениваются своими закрытыми ключами. Скажем, вы хотите заплатить своему другу 1 BTC. Вы бы просто передали закрытый ключ на свой адрес, содержащий 1 BTC. Перейдите по этой ссылке для более подробной информации. Теперь перейдем к вашим вопросам.

  1. Во-первых, обратите внимание, что учетные записи и moveAPI устарели и больше не используются. Просто для пояснения, учетные записи — это не что иное, как набор адресов в вашем биткойн-кошельке. Теперь команда перемещения фактически переводит BTC с адресов в одной учетной записи на другую. Вы никак не сможете убедить биткойн-клиента поделиться закрытым ключом и не перемещать средства (потому что у него уже есть все закрытые ключи). Так что сценарий, который вы привели, не имеет смысла.

  2. Minconf предназначен для того, чтобы клиент знал, что нужно использовать только те выходные данные транзакций, которые имеют столько минимальных подтверждений, сколько вы предоставили.

  3. sendfrom также устарел, поскольку учетные записи устарели. Что делает биткойн-кошелек, так это то, что он объединяет средства со всех ваших адресов для отправки денег на указанный адрес (если значение, которое вы хотите отправить, недоступно на одном адресе).

  4. то же, что пункт 2

  5. Как я уже сказал, учетные записи устарели, поэтому он будет использовать адрес, значение которого превышает указанное, а если нет, комбинировать адреса для отправки денег на адрес получателя.

  6. то же, что пункт 2

Редактировать: Пункт 1: Команда перемещения просто уменьшает виртуальный внутренний виртуальный баланс одной учетной записи и увеличивает другую, но не перемещает BTC. Исправлено Питером Вуилле

Спасибо за ваш ответ. Это немного проясняет это для меня. Кроме того, как узнать, какие функции или вызовы API устарели или нет? Похоже, что документация плохая и сильно устарела.
Через терминал попробуйте набрать апи без требуемых параметров, например, просто наберите move и прочитайте вывод, вы бы увидели, что там написано, что он устарел, но его все еще можно использовать.
Команда перемещения не перемещает средства с одного адреса на другой. Он просто уменьшает один внутренний виртуальный баланс и увеличивает другой. Аккаунты не являются адресами. Их действительно планируется удалить в будущей версии (частично потому, что их очень сложно понять).