Bitcoin Forum

Local => Discussions générales et utilisation du Bitcoin => Topic started by: kcud_dab on June 19, 2014, 11:01:19 PM



Title: Exemple d'utilisation d'une adresse multisig 2-2
Post by: kcud_dab on June 19, 2014, 11:01:19 PM
Voici le résultat de petis tests réalisés avec une adresse multisig.
Le but était de créer et de signer des tx avec une adresse n-m (il faut n clées sur les m pour signer une transaction) avec n = m = 2.

Thx à davout pour l'assistance sur le chan irc #bitcoin-fr, et à perl pour son exemple ici (https://bitcointalk.org/index.php?topic=482531.0) (sauf que je signe en une seule fois dans mon exemple).
(les autres sources c'est le forum en anglais ou google, donc vu qu'ils ne nous liront pas pas besoin de les remercier :-)

Bref :

###############################################
Préparation des 2 privates keys
###############################################


Création de 2 adresses avec vanity gen par ex :

Code:
$ ./vanitygen 1A
Pattern: 1A                                                                    
Address: 1AUACQnPPxWk34f4ru91rQym1rHRNmfyWF
Privkey: 5K7GrfvAczQYuAtJXmFByqf9GLJ74ydB1N7eqZGj8987KbmjLCT

Code:
$ ./vanitygen 1B
Pattern: 1B                                                                    
Address: 1BkvkS4dvt5uEM7hH6muYWLKvm3rCgzpD1
Privkey: 5Je1z9roEnhCtfDV8d6sCsDuyqZ9FXV6JcMspsUVMYf1UFFUG2U

Nous avons donc : 1AUACQnPPxWk34f4ru91rQym1rHRNmfyWF et 1BkvkS4dvt5uEM7hH6muYWLKvm3rCgzpD1

Import des adresses dans Bitcoin Core/bitcoind

Code:
 $ ./bitcoind importprivkey "5K7GrfvAczQYuAtJXmFByqf9GLJ74ydB1N7eqZGj8987KbmjLCT" 1A
$ ./bitcoind importprivkey "5Je1z9roEnhCtfDV8d6sCsDuyqZ9FXV6JcMspsUVMYf1UFFUG2U" 1B

Code:
$ ./bitcoind validateaddress 1AUACQnPPxWk34f4ru91rQym1rHRNmfyWF
{
    "isvalid" : true,
    "address" : "1AUACQnPPxWk34f4ru91rQym1rHRNmfyWF",
    "ismine" : true,
    "isscript" : false,
    "pubkey" : "04e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d40",
    "iscompressed" : false,
    "account" : "1A"
}
$ ./bitcoind validateaddress 1BkvkS4dvt5uEM7hH6muYWLKvm3rCgzpD1
{
    "isvalid" : true,
    "address" : "1BkvkS4dvt5uEM7hH6muYWLKvm3rCgzpD1",
    "ismine" : true,
    "isscript" : false,
    "pubkey" : "049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c4096",
    "iscompressed" : false,
    "account" : "1B"
}


###############################################
Création de l'adresse multisig 2-2
###############################################


Création :

Code:
$ ./bitcoind addmultisigaddress 2 '["04e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d40","049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c4096"]'
3FFXxVEhBtwgvWvqxNKuDdk18y1pWVBuFK

L'adresse 2-2 est donc : 3FFXxVEhBtwgvWvqxNKuDdk18y1pWVBuFK

Vérification :

Code:
$ ./bitcoind validateaddress 3FFXxVEhBtwgvWvqxNKuDdk18y1pWVBuFK
{
    "isvalid" : true,
    "address" : "3FFXxVEhBtwgvWvqxNKuDdk18y1pWVBuFK",
    "ismine" : true,
    "isscript" : true,
    "script" : "multisig",
    "hex" : "524104e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d4041049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c409652ae",
    "addresses" : [
        "1AUACQnPPxWk34f4ru91rQym1rHRNmfyWF",
        "1BkvkS4dvt5uEM7hH6muYWLKvm3rCgzpD1"
    ],
    "sigsrequired" : 2,
    "account" : ""
}


###############################################
On recharge le solde de l'adresse :-)
###############################################


Envoi depuis blockchain.info, txid : 679235f8a3d47774967506e644110d8e9525d6ef8e8b06dc59c4f70f666705b1
https://blockchain.info/tx/679235f8a3d47774967506e644110d8e9525d6ef8e8b06dc59c4f70f666705b1

Le but était de renvoyer les BTC à l'adresse d'où ils viennet, donc : 16KT1voxZq7jZEYfuS4xtkxy1naE2nYE6w

###############################################
Création de la transaction  
###############################################


On a besoin pour ça de connaitre les inputs disponibles (on prend comme input l'outpout de la transaction de recharge) :
https://blockchain.info/rawtx/679235f8a3d47774967506e644110d8e9525d6ef8e8b06dc59c4f70f666705b1

On renvoie 0.0001 BTC à l'adresse d'origine, ce qui fait 0.0002 - 0.0001 de fees (input(s) - output(s))

Code:
$ ./bitcoind createrawtransaction '[{"txid" : "679235f8a3d47774967506e644110d8e9525d6ef8e8b06dc59c4f70f666705b1", "vout" : 0}]' '{"16KT1voxZq7jZEYfuS4xtkxy1naE2nYE6w" : 0.0001}'
0100000001b10567660ff7c459dc068b8eefd625958e0d1144e60675967477d4a3f83592670000000000ffffffff0110270000000000001976a9143a55d552897303926437049aa348c1623a84575d88ac00000000

###############################################
Signature de la transactions
###############################################


Code:
$ ./bitcoind signrawtransaction "0100000001b10567660ff7c459dc068b8eefd625958e0d1144e60675967477d4a3f83592670000000000ffffffff0110270000000000001976a9143a55d552897303926437049aa348c1623a84575d88ac00000000" '[{"txid" : "679235f8a3d47774967506e644110d8e9525d6ef8e8b06dc59c4f70f666705b1", "vout" : 0, "scriptPubKey" : "a91494c004454d13a0db37d981400a128f02321564b187", "redeemScript" : "524104e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d4041049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c409652ae"}]' '["5K7GrfvAczQYuAtJXmFByqf9GLJ74ydB1N7eqZGj8987KbmjLCT","5Je1z9roEnhCtfDV8d6sCsDuyqZ9FXV6JcMspsUVMYf1UFFUG2U"]'
{
    "hex" : "0100000001b10567660ff7c459dc068b8eefd625958e0d1144e60675967477d4a3f835926700000000fd1a0100473044022039bb29798ea03d3c64e16ac57676e6b51321fe08a0764f1812e50887a5ee058c0220344770ec5f8bb74d4923adba319a36c37895415df4e810b4e8e262d7daab88d80147304402207dd14a57595d9904878a43c8a49744c3e13d20ad696767b4ec5a06b6434a839e02204612149133d595c1b918a51906bb3d332ea458c58f5c65d02958ff24839a0b57014c87524104e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d4041049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c409652aeffffffff0110270000000000001976a9143a55d552897303926437049aa348c1623a84575d88ac00000000",
    "complete" : true
}


###############################################
On broadcast la transaction sur le réseau
###############################################


Code:
$ ./bitcoind sendrawtransaction "0100000001b10567660ff7c459dc068b8eefd625958e0d1144e60675967477d4a3f835926700000000fd1a0100473044022039bb29798ea03d3c64e16ac57676e6b51321fe08a0764f1812e50887a5ee058c0220344770ec5f8bb74d4923adba319a36c37895415df4e810b4e8e262d7daab88d80147304402207dd14a57595d9904878a43c8a49744c3e13d20ad696767b4ec5a06b6434a839e02204612149133d595c1b918a51906bb3d332ea458c58f5c65d02958ff24839a0b57014c87524104e1ad0319283c15d3a4ba0a39478fafacdb723c9380d361133b96c760b5e450f7a7057e3c62f45d020c635f8c99e3978ed6690b98184275385171b6c7b9399d4041049fdcc896ac8ee36884cc6a35160ad5664b81d6ff0e56cc231ff9531358fadb6477159fc71253445104b366110b6e55799472e5024d213aa370207840ad4c409652aeffffffff0110270000000000001976a9143a55d552897303926437049aa348c1623a84575d88ac00000000"
error: {"code":-22,"message":"TX rejected"}

Comme vous pouvez le voir la transaction a été rejetée par mon bitcoind mais c'est parce que ma blockchain n'était pas à jour..., les mêmes commandes faites hier par davout avec les mêmes adresses fonctionnaient :
https://blockchain.info/tx/66b80651a37f9c58155ee72cab01c9cccbc276a2cb0e9a1ca420cbf962bd239a
J'ai refait un test avec la blockchain à jour sur une autre adresse 2-2 depuis, c'est passé comme une lettre à la poste (transaction en attente de confiramtion :-)


Title: Re: Exemple d'utilisation d'une adresse multisig 2-2
Post by: mangodream on June 20, 2014, 12:14:06 AM
Super intéressant, merci pour l'exemple ;)


Title: Re: Exemple d'utilisation d'une adresse multisig 2-2
Post by: yohannc on June 20, 2014, 09:18:54 PM
Donc si je comprends tu as fait une transaction en faisant une multi-signature.

C'est ça ?


Title: Re: Exemple d'utilisation d'une adresse multisig 2-2
Post by: kcud_dab on June 21, 2014, 07:42:28 AM
Donc si je comprends tu as fait une transaction en faisant une multi-signature.

C'est ça ?
C'est exactement ça.
2 clés qui permettent de signer des TX, 1 clé seule ne sert a rien