Я попытаюсь дать упрощенный ответ, поскольку есть много деталей, которые не требуются для понимания решения.
Прежде всего, давайте посмотрим, из чего состоит транзакция:
- Данные транзакции:
- адрес, с которого приходят деньги
- адрес, на который отправляются деньги
- сумма
подпись данных транзакции, созданных с помощью вашего закрытого ключа ваш publi c ключ
Когда вы создаете адрес для людей, на которые будут переводить деньги, где это адрес откуда? Прежде всего, вы создаете пару открытого / закрытого ключей. Пара открытый / закрытый ключ - это результат сложной математики . Интересно, что вы можете делать с этими ключами. Вы можете подписать сообщение своим приватным ключом. Если у вашего друга есть ваш publi c ключ, он может проверить, что подпись действительна для этого сообщения, что означает, что они могут проверить, что это вы написали это сообщение.
В блокчейне адресом является sha256 ha sh ключа publi c.
Теперь, когда пришло время переводить деньги, вам нужно сделать две вещи:
- Показать, что вы владелец этого адреса. Вы делаете это, предоставляя ключ publi c. В этом случае майнеры могут использовать sh ваш publi c ключ, чтобы убедиться, что он приводит к адресу «от».
- Подтвердить, что вы владеете закрытым ключом. Вы делаете это, создавая подпись данных транзакции.
Если майнер изменяет адрес 'to', адрес 'from' или сумму, подпись данных транзакции не действителен больше.
Если майнер решает добавить новую подпись на основе измененных данных, он больше не будет проверять с помощью ключа publi c в транзакции.
Если майнер решает изменить подпись и publi c так, чтобы они совпадали, тогда адрес отправителя больше не будет правильным, поскольку это ha sh ключа publi c.
Я упустил некоторые детали, например:
- Адрес 'from' относится к предыдущей транзакции
- Сумма предыдущей транзакции должна быть полностью потрачена. Так что, если там слишком много, у вас будет второй адрес «куда», который находится под вашим контролем, в основном передавая остальное обратно себе
- Может быть много адресов «от» и «до». за одну транзакцию. Каждый адрес отправителя требует c ключа publi и подписи.
- На самом деле транзакция содержит сценарий, который говорит, как проверять адреса и подписи. Если вы расширите язык, используемый в этом скрипте, то вы говорите о смарт-контракте.
- Существуют закрытые ключи, которые могут генерировать несколько ключей publi c и, следовательно, несколько адресов, поэтому у вас нет для управления несколькими закрытыми ключами.
- Невозможно проверить, действителен ли адрес «Кому». Таким образом, вы можете переводить деньги на адрес, для которого ни у кого нет закрытого ключа.
Подробную информацию о том, что входит в транзакцию, можно найти здесь: https://en.bitcoin.it/wiki/Transaction