Я новичок в blockchain. Я понимаю, что blockchain ведет записи обо всех транзакциях, и каждая транзакция подписывается с закрытым ключом. Однако почему никто не может ввести произвольное количество транзакций биткойнов? Скажем, адрес имеет только 1 биткойн, но его владелец может создать транзакцию из 100 биткойнов и все еще подписывать ее. Что такое механизм Биткойна для проверки исходящих и входящих сумм транзакции?Как проверяет транзакцию на транзакцию цепочки
ответ
Возможно, это link о том, как работа биткойнов будет вам полезной. Посмотрите раздел «Что делать, если количество входных и выходных данных не совпадает?»
Кроме того, поскольку Blockchain использует распределенную книгу, все узлы будут проверять транзакцию до ее принятия. Кроме того, в цепочке должны быть аудиторы, которые гарантируют, что мошеннические действия не будут выполняться. Надеюсь это поможет.
Блокноия Биткойна содержит исторический отчет обо всех транзакциях, которые когда-либо происходили на нем. Клиенты, безусловно, могут выбирать меньше, а блок-цепочку можно обрезать, не сохраняя транзакции, которые уже были потрачены давно.
Биткойн-адреса технически не имеют «баланса» в смысле традиционной банковской книги. Вместо этого адрес имеет возможность тратить транзакции, которые были отправлены на него.
Чтобы углубиться в технические подробности, давайте посмотрим на адрес 1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98
(который у меня есть).
Недавно я получил небольшую транзакцию 0.004 BTC, в транзакции с TxID 432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705
.
The (гекс-кодировке) необработанные данные этой сделки: 0100000001e9a24c1d1b8d10b13482cdcbbb90d894577292c4d0c0c1427411fb9d82ea710c010000006b483045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c6001210390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62ffffffff01801a0600000000001976a914f97df8f593e0056d337c274fd81a163f47a17d3788ac00000000
Что в удобной для восприятия человеком форме:
{
"txid": "432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705",
"size": 192,
"version": 1,
"locktime": 0,
"vin": [
{
"txid": "0c71ea829dfb117442c1c0d0c492725794d890bbcbcd8234b1108d1b1d4ca2e9",
"vout": 1,
"scriptSig": {
"asm": "3045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c60[ALL] 0390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62",
"hex": "483045022100d9a5433c1381b39b7e02b0b0f042990e7c16cfea252b05ccfef2e85c2dab2a6f022057c7def782fe3b0d7e5e0eae277d2a5890844da7d72309817a2dac22a6307c6001210390d78cb0c1d34d4417db7e0a9a9f125a689dc29dc2197a01a5f827a20f870f62"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.00400000,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 f97df8f593e0056d337c274fd81a163f47a17d37 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914f97df8f593e0056d337c274fd81a163f47a17d3788ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98"
]
}
}
]
}
Таким образом, адрес 1PkCAVKjPz1YK7iJwT8xTLxBXR1av8dL98
может "провести" операцию 432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705
. Выходное значение этой транзакции равно 0,004 BTC, поэтому я не могу совершить транзакцию Bitcoin, которая пытается потратить больше. Однако давайте попробуем это сделать.
Я создам необработанную транзакцию, которая пытается вывести 0.01 BTC в 1MgLu9L7ftmGQM84xhKYKw8pTXiSANwggs
из транзакции с выходным балансом 0.004 BTC:
bitcoin-rpc createrawtransaction '[{"txid":"432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705","vout":0}]' '{"1MgLu9L7ftmGQM84xhKYKw8pTXiSANwggs":0.01}'
Возвращает необработанные сделки:
010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe9427430000000000ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000
Затем я могу подписать сделку:
bitcoin-rpc signrawtransaction 010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe9427430000000000ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000
, который возвращает:
{
"hex": "010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe942743000000006b483045022100ce3fad8ccdee48f1fe9060ef81624d3bbe721293feb8ee06a96751e65b9c423e0220106a3e80d5fdf93df5dbf037d8cfd32af70a405586e12294c937308a3c57b10e012102f2acb810346866908108dd86462ee5400b15786739f5e908711d2d15d9dd2238ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000",
"complete": true
}
И я могу взять который возвратил hex, который является действительной формой atted сделки, и представить его в сеть:
bitcoin-rpc sendrawtransaction 010000000105e7a355a6c2492a70d90ce0c9d44d44249ab57aeb0efbca7562052ebe942743000000006b483045022100ce3fad8ccdee48f1fe9060ef81624d3bbe721293feb8ee06a96751e65b9c423e0220106a3e80d5fdf93df5dbf037d8cfd32af70a405586e12294c937308a3c57b10e012102f2acb810346866908108dd86462ee5400b15786739f5e908711d2d15d9dd2238ffffffff0140420f00000000001976a914e2d3595bd0a55c16f4b19f5cd996568dd7e811f688ac00000000
Что дает мне ошибку:
66: insufficient priority (code -26)
Это ошибка на стороне клиента, но если бы я успешно транслировать необработанные операции в сеть, другие сверстники будут просто искать ссылочную (или «потраченную») транзакцию 432794be2e056275cafb0eeb7ab59a24444dd4c9e00cd9702a49c2a655a3e705
и видеть, что итоговая сумма моей новой транзакции больше, чем итоговая сумма транзакции, которую я пытаюсь потратить.
Существует одно исключение из этого правила: транзакции с коинбазой генерируют биткойны для шахтеров и, таким образом, им разрешено выдавать правильную блочную субсидию (первоначально 50 БТД, но в настоящее время 12,5 БТД после половины вдвое меньше, чем полтора назад) плюс транзакционные сборы за все транзакции, содержащиеся в блоке.
Я знаю, что этот пост уже стар, но есть полный список для проверки достоверности Bitcoin передаст:
- 1. Как использовать транзакции (начать транзакцию, совершить транзакцию)?
- 2. Как совершить транзакцию и выполнить транзакцию на сервере sql?
- 3. Firebase: Как нажать на транзакцию?
- 4. Как отменить транзакцию на Android?
- 5. Как прервать транзакцию HTTP
- 6. как форматировать транзакцию Id?
- 7. Как использовать транзакцию DatastoreIO
- 8. OrientDB - как отключить транзакцию?
- 9. Как реализовать транзакцию?
- 10. GAE: Как отменить транзакцию?
- 11. oracle Как узнать транзакцию?
- 12. Как выполнить повторную транзакцию
- 13. Разрешение на транзакцию SQL-запроса
- 14. LazyInitializationException несмотря на весеннюю транзакцию?
- 15. Максимальное количество вставок на транзакцию
- 16. Как проверить транзакцию электронной торговли?
- 17. Как провести транзакцию TCP/IP
- 18. как идентифицировать транзакцию с IPN
- 19. Отклонить транзакцию в StoreKit
- 20. Как удалить транзакцию электронной коммерции?
- 21. Как реализовать транзакцию в knex?
- 22. MongoDB - моделировать транзакцию
- 23. C# Создайте скрытую транзакцию
- 24. Как вы поддерживаете транзакцию indexeddb?
- 25. Неверное связующее транзакцию
- 26. Как мне запрограммировать «распределенную транзакцию»?
- 27. SqlBulkCopy автоматически запускает транзакцию?
- 28. Как реагировать на неудачную транзакцию (Django)
- 29. Как вернуть одну транзакцию на одного клиента
- 30. Отложить транзакцию sql
я вижу. Итак, каждая новая транзакция возникла из предыдущего права транзакции? Скажем, если у вас есть два входа, один - 2 бит, другой - 1 бит, что дает вам всего 3 бит. и вы хотите потратить 2,5 бит, так что для каждого входа будет две транзакции, верно? – Yangrui
@yangrui За исключением транзакций с коинбазой, все транзакции ссылаются (и при этом препятствуют любой другой транзакции от ссылки) предыдущей транзакции. Если у вас есть две отдельные транзакции: одна для 2 БТД и другая для 1 БТД, вы должны создать одну транзакцию, которая проводит обе входные транзакции, заплатит 2,5 БТД кому-то и выплатит оставшиеся 0,5 БТД на адрес изменения, который вы контролируете (или 0,5 минус плата за транзакцию, которую вы хотите оплатить, так как суммарные входы минус итоговые выходы = txFee). Транзакции могут быть потрачены или не израсходованы, вы никогда не сможете частично провести транзакцию. –