2016-07-28 3 views
1

Я новичок в blockchain. Я понимаю, что blockchain ведет записи обо всех транзакциях, и каждая транзакция подписывается с закрытым ключом. Однако почему никто не может ввести произвольное количество транзакций биткойнов? Скажем, адрес имеет только 1 биткойн, но его владелец может создать транзакцию из 100 биткойнов и все еще подписывать ее. Что такое механизм Биткойна для проверки исходящих и входящих сумм транзакции?Как проверяет транзакцию на транзакцию цепочки

ответ

0

Возможно, это link о том, как работа биткойнов будет вам полезной. Посмотрите раздел «Что делать, если количество входных и выходных данных не совпадает?»

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

1

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

Биткойн-адреса технически не имеют «баланса» в смысле традиционной банковской книги. Вместо этого адрес имеет возможность тратить транзакции, которые были отправлены на него.

Чтобы углубиться в технические подробности, давайте посмотрим на адрес 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 БТД после половины вдвое меньше, чем полтора назад) плюс транзакционные сборы за все транзакции, содержащиеся в блоке.

+0

я вижу. Итак, каждая новая транзакция возникла из предыдущего права транзакции? Скажем, если у вас есть два входа, один - 2 бит, другой - 1 бит, что дает вам всего 3 бит. и вы хотите потратить 2,5 бит, так что для каждого входа будет две транзакции, верно? – Yangrui

+1

@yangrui За исключением транзакций с коинбазой, все транзакции ссылаются (и при этом препятствуют любой другой транзакции от ссылки) предыдущей транзакции. Если у вас есть две отдельные транзакции: одна для 2 БТД и другая для 1 БТД, вы должны создать одну транзакцию, которая проводит обе входные транзакции, заплатит 2,5 БТД кому-то и выплатит оставшиеся 0,5 БТД на адрес изменения, который вы контролируете (или 0,5 минус плата за транзакцию, которую вы хотите оплатить, так как суммарные входы минус итоговые выходы = txFee). Транзакции могут быть потрачены или не израсходованы, вы никогда не сможете частично провести транзакцию. –

Смежные вопросы