ОК. В конце концов я решил проблему. Я поставил сценарий.
Участники:
- Элис. Она хочет купить продукт.
- Джон. Он хочет, чтобы продать продукт.
- Магазин. Действует как рынок, обеспечивая всю необходимую инфраструктуру.
Сценарий: Алиса хочет купить продукт Джон предлагает. Они встречаются в магазин и согласовать цену. Они хотят использовать 2-в-3 mutisig сделки для того, чтобы гарантировать все идет гладко, как система условного депонирования. Допустим, что Алиса должна заплатить Джон BTC0.001. Здесь магазин приходит к сценарию и готовит сделку.
Магазин просит Джона и Элис для создания пары ключей, а также он создает свою собственную пару ключей, они выполнять команды getnewaddress, validateaddress и dumpprivkey
На данный момент мы имеем следующие входные данные (я буду использовать реальные данные из примера, формат Публичный / PrivateKey). Информация жирного шрифта на самом деле то, что участники представить в магазине.
- Алиса: 03ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb5 / L2RD2bMZzEwEvFw3pHD9oWZf32kR1NxeAYMjW4Qwnf7UpEVbVkUX
- Джон: 03cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e / L5ieGS7c5sY5NVSck7ZnBLtYbAiKBmRdAJQGArpKRwBWEi9cEFm6
- Магазин: 03becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c / L5KeMAjfbNMAF17x1Vo1KZXt1EZLQKYkJXEznX3APiiKSznCZzbw
Теперь магазин имеет 3 открытых ключей, мы предполагаем, что магазин знает свой собственный открытый ключ.
Магазин генерирует Bitcoin адреса для осуществления платежа, выполнив следующую команду:
createmultisig 2 «["03cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e", "03ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb5", "03becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c"]»
Выход:
{
"адрес" : "3M9ENELPqJKqDsU8BfEuoyEcKHVz78jJoE",
"redeemScript" : "522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53ae"
}
Как вы можете видеть, у нас есть еще два входа, адрес и redeemScript.
Теперь, это очень важно, чтобы
Магазин обнародует эту информацию между другими участниками. После этого момента мы предполагаем, что Джон и Элис знают redeemScript и адрес.
Следующий шаг. Магазин просит Алису перевести средства на генерируемый адрес. Алиса перечисляет средства.
Время проходит. Джон проверяет адрес и видит, что баланс в порядке. Таким образом, он отправляет продукт Алисе. Алиса получает продукт и хочет, чтобы высвободить средства для Джона.
На это указывает два возможных сценария. Если мы предположим, что магазин доверяет всем участникам операции могут быть выполнены в магазине автоматически. В противном случае, операция должна быть сделана Джоном. Давайте предположим, что в лучшем случае, что магазин является доверенным все так Джон предоставляет адрес, чтобы получить выплату средств Элис релизы ему.
Итак, я сказал, что Алиса получила продукт от Иоанна, и теперь она хочет, чтобы высвободить средства для него. Она предоставляет свой закрытый ключ в магазин. Магазин будет переводить средства из multisig сделки личного адреса Джона.
Входные данные для этого следующие:
- Multisig адрес: 3M9ENELPqJKqDsU8BfEuoyEcKHVz78jJoE
- redeemScript: 522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd25 2273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe291 0c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53ae
- Алиса частный ключ: L2RD2bMZzEwEvFw3pHD9oWZf32kR1NxeAYMjW4Qwnf7UpEVbVkUX
- Магазин закрытого ключа: L5KeMAjfbNMAF17x1Vo1KZXt1EZLQKYkJXEznX3APiiKSznCZzbw
Для того, чтобы протекала магазин должен собрать дополнительную информацию от blockchain.
В первую очередь необходимо магазин TXID для сделки. Для этого он может использовать blockchain.info, например, или его собственный внутренний blockchain анализатор, так как ссылки Bitcoin клиента не поддерживает эту функцию.
Допустим, он решает использовать blockchain.info, поэтому он делает запрос с multisig адрес: 3M9ENELPqJKqDsU8BfEuoyEcKHVz78jJoE. TXID является 30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a, это сделка, что Алиса выдается платить.
Теперь магазин имеет все детали для выдачи платежа Джона.
Шаг 1. Получить сырую сделку.
getrawtransaction 30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a
Вывод:
01000000022b9c78e5e1195c11720e09720d9f3afc0e7d32e7bc8bfa1276123c21b30eeec5000000006c49304602210083afb8b9e942eb685f54a901a40c0541114d30f4b41c66e01099dab737bd97f0022100b948c5ce1646b925dfcf117300c1fe33556b27192f7751de90289643114c24f9012102afdb375f849a6cc9dfd677f300e792e1189756faf674503db47cb635bb8b1303ffffffff373f2b7842530a1039b64dbf4fa297762cbf5d41eefd8a0185794342f491b577000000006b4830450220013f9228f06175327f7319c406207ad6357858bbf51d6736515bb3a9d508db29022100f1429410ec5c20bea03be5c6579136d9323c72061428be2b509eaf1642665a1b012102133ca1119814debbfe7f3d38baa70df8b849caa441a6a2c686c928b8172c27f3ffffffff01a08601000000000017a914d55f97790544910751f9bf46834131b6defcb5248700000000
Шаг 2. Сбор данных из сырой сделки. Магазин должен найти поле scriptPubKey (это шестнадцатеричное значение).
decoderawtransaction 01000000022b9c78e5e1195c11720e09720d9f3afc0e7d32e7bc8bfa1276123c21b30eeec5000000006c49304602210083afb8b9e942eb685f54a901a40c0541114d30f4b41c66e01099dab737bd97f0022100b948c5ce1646b925dfcf117300c1fe33556b27192f7751de90289643114c24f9012102afdb375f849a6cc9dfd677f300e792e1189756faf674503db47cb635bb8b1303ffffffff373f2b7842530a1039b64dbf4fa297762cbf5d41eefd8a0185794342f491b577000000006b4830450220013f9228f06175327f7319c406207ad6357858bbf51d6736515bb3a9d508db29022100f1429410ec5c20bea03be5c6579136d9323c72061428be2b509eaf1642665a1b012102133ca1119814debbfe7f3d38baa70df8b849caa441a6a2c686c928b8172c27f3ffffffff01a08601000000000017a914d55f97790544910751f9bf46834131b6defcb5248700000000
Вывод:
{
"TXID" : "30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a",
"версия" : 1,
"Locktime" : 0,
"Vin" : [
{
"TXID" : "c5ee0eb3213c127612fa8bbce7327d0efc3a9f0d72090e72115c19e1e5789c2b",
"Vout" : 0,
"scriptSig" : {
"как м" : "304602210083afb8b9e942eb685f54a901a40c0541114d30f4b41c66e01099dab737bd97f0022100b948c5ce1646b925dfcf117300c1fe33556b27192f7751de90289643114c24f901 02afdb375f849a6cc9dfd677f300e792e1189756faf674503db47cb635bb8b1303",
"наговор" : "49304602210083afb8b9e942eb685f54a901a40c0541114d30f4b41c66e01099dab737bd97f0022100b948c5ce1646b925dfcf117300c1fe33556b27192f7751de90289643114c24f9012102afdb375f849a6cc9dfd677f300e792e1189756faf674503db47cb635bb8b1303"
},
"последовательность" : 4294967295
},
{
"TXID" : "77b591f442437985018afdee415dbf2c7697a24fbf4db639100a5342782b3f37",
"Vout" : 0,
"scriptSig" : {
"как м" : "30450220013f9228f06175327f7319c406207ad6357858bbf51d6736515bb3a9d508db29022100f1429410ec5c20bea03be5c6579136d9323c72061428be2b509eaf1642665a1b01 02133ca1119814debbfe7f3d38baa70df8b849caa441a6a2c686c928b8172c27f3",
"наговор" : "4830450220013f9228f06175327f7319c406207ad6357858bbf51d6736515bb3a9d508db29022100f1429410ec5c20bea03be5c6579136d9323c72061428be2b509eaf1642665a1b012102133ca1119814debbfe7f3d38baa70df8b849caa441a6a2c686c928b8172c27f3"
},
"последовательность" : 4294967295
}
],
"Vout" : [
{
"стоимость" : 0.00100000,
"N" : 0,
"scriptPubKey" : {
"как м" : "OP_HASH160 d55f97790544910751f9bf46834131b6defcb524 OP_EQUAL",
"наговор" : "a914d55f97790544910751f9bf46834131b6defcb52487",
"reqSigs" : 1,
"тип" : "scripthash",
"адреса" : [
"3M9ENELPqJKqDsU8BfEuoyEcKHVz78jJoE"
]
}
}
]
}
Шаг 3. Создайте операцию для Джона.
createrawtransaction «[{"TXID":"30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a","Vout": 0,"scriptPubKey":"a914d55f97790544910751f9bf46834131b6defcb52487","redeemScript":"522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53ae"}]»«{"1NxTtvhRce68MTAbogosj9zCK5mTG493XZ": 0,001}»
Выход (сделка сама по себе не подписан):
01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce457400300000000000ffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000
Шаг 4. Подписать транзакция с первым ключом (ключ магазина).
signrawtransaction '01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce457400300000000000ffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000' «[{"TXID":"30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a","Vout": 0,"scriptPubKey":"a914d55f97790544910751f9bf46834131b6defcb52487","redeemScript":"522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53ae"}]»«["L5KeMAjfbNMAF17x1Vo1KZXt1EZLQKYkJXEznX3APiiKSznCZzbw"]»
Вывод:
{
"наговор" : "01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce4574003000000000b600493046022100ddeda29cb8553a1200add8f344c1a71e6ed433f5c0911c892aa73ea72e47d5d1022100ee6bf9ffbb2401e67ed0f3aebade755dd28b84ca9608fb0849b8685541f38761014c69522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53aeffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000",
"полный" : ложный
}
Шаг 5. Подписать сделку со вторым закрытым ключом (ключ Алисы).
signrawtransaction '01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce4574003000000000b600493046022100ddeda29cb8553a1200add8f344c1a71e6ed433f5c0911c892aa73ea72e47d5d1022100ee6bf9ffbb2401e67ed0f3aebade755dd28b84ca9608fb0849b8685541f38761014c69522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53aeffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000' «[{"TXID":"30007445ce2b81b17ad202cd8485a6d6d4607a8fe7da3bee1eddc5e129e6879a","Vout": 0,"scriptPubKey":"a914d55f97790544910751f9bf46834131b6defcb52487","redeemScript":"522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53ae"}]»«["L2RD2bMZzEwEvFw3pHD9oWZf32kR1NxeAYMjW4Qwnf7UpEVbVkUX"]»
Вывод:
{
"наговор" : "01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce4574003000000000fd000100493046022100ddeda29cb8553a1200add8f344c1a71e6ed433f5c0911c892aa73ea72e47d5d1022100ee6bf9ffbb2401e67ed0f3aebade755dd28b84ca9608fb0849b8685541f3876101493046022100b05e0e9b19546fc0ab712aad2c6a66874ae80050415c855fb8b1fadfba579e620221008f8502d5da831e7a837bdf3ffbca2a92deb7ad2aea749dcae7759555873faf8f014c69522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53aeffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000",
"полный" : правда
}
Шаг 6. Отправьте сделку Джон.
sendrawtransaction 01000000019a87e629e1c5dd1eee3bdae78f7a60d4d6a68584cd02d27ab1812bce4574003000000000fd000100493046022100ddeda29cb8553a1200add8f344c1a71e6ed433f5c0911c892aa73ea72e47d5d1022100ee6bf9ffbb2401e67ed0f3aebade755dd28b84ca9608fb0849b8685541f3876101493046022100b05e0e9b19546fc0ab712aad2c6a66874ae80050415c855fb8b1fadfba579e620221008f8502d5da831e7a837bdf3ffbca2a92deb7ad2aea749dcae7759555873faf8f014c69522103cb6c09843e606b59336b3272618077936bf962ecc35ae60f5028436e9ddec72e2103ccd252273248b3ebd34595976126361882edeb00af0c519b6b23e49341165bb52103becc7cf66dbfe2910c86ce2e63c6876db6620f931e207ce36bd9a2d446658e8c53aeffffffff01a0860100000000001976a914f0d7f86c2d958d62824e43e2e7814a17bf2887fd88ac00000000
Вывод:
3428e9c1bc3b9382af1cd5921a0f6f31b7b152194aef9302589dfa1877a58dde
Джон получает деньги.
Это все люди, сделка будет завершена.
Я думаю, что я буду обновлять эту тему позже с вещами, которые я буду идти улучшается.