Difference between revisions of "MultiSig (Multisignature)"

From Terracoin Wiki
Jump to: navigation, search
 
Line 1: Line 1:
[[Multisignature Example]]
+
==Multisignature Example==
   
  +
This document presents a worked example to demonstrate multisig functionality in TerracoinCore. While the transactions are no longer visible on the current testnet blockchain and some address formats or RPC responses may differ slightly from the version shown here, the principle and commands are the same.
[[Complex Multisignature Example]]
 
  +
  +
Step 1: Create three addresses
  +
seller
  +
seller@testnet03:~$ ./terracoin-cli getnewaddress
  +
n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk
  +
seller@testnet03:~$ ./terracoin-cli validateaddress n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk
  +
{
  +
"isvalid" : true,
  +
"address" : "n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
seller@testnet03:~$ ./terracoin-cli dumpprivkey n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk
  +
cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx
  +
buyer
  +
buyer@testnet03:~$ ./terracoin-cli getnewaddress
  +
mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u
  +
buyer@testnet03:~$ ./terracoin-cli validateaddress mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u
  +
{
  +
"isvalid" : true,
  +
"address" : "mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
buyer@testnet03:~$ ./terracoin-cli dumpprivkey mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u
  +
cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU
  +
arbiter
  +
arbiter@testnet03:~$ ./terracoin-cli getnewaddress
  +
n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN
  +
arbiter@testnet03:~$ ./terracoin-cli validateaddress n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN
  +
{
  +
"isvalid" : true,
  +
"address" : "n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
arbiter@testnet03:~$ ./terracoin-cli dumpprivkey n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN
  +
cUbDFL81a2w6urAGZf7ecGbdzM82pdHLeCaPXdDp71s96SzDV49M
  +
Result: Three keypairs (public/private)
  +
  +
seller: 02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e / cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx
  +
buyer: 0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c / cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU
  +
arbiter: 0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce / cUbDFL81a2w6urAGZf7ecGbdzM82pdHLeCaPXdDp71s96SzDV49M
  +
Step 2: Create multisig address
  +
The createmultisig command takes as variables the number n signatures of m keys (supplied as json array) required. In this example, 2 of 3 keys are required to sign the transaction.
  +
  +
Note: The address can be created by anyone, as long as the public keys and their sequence are known (resulting address and redeemScript are identical, see below).
  +
  +
seller
  +
seller@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]'
  +
{
  +
"address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
  +
"redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"
  +
}
  +
buyer
  +
buyer@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]'
  +
{
  +
"address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
  +
"redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"
  +
}
  +
arbiter
  +
arbiter@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]'
  +
{
  +
"address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
  +
"redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"
  +
}
  +
Step 3: The buyer funds the multisig address
  +
This works the same as a usual transaction:
  +
  +
buyer
  +
buyer@testnet03:~$ ./terracoin-cli sendtoaddress 2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf 777.77
  +
a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951
  +
The seller/arbiter can trace the transaction by its txid in the testnet block explorer → https://testnet-insight.dashevo.org/insight/tx/a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951<!--Fix this link to Terracoin testnet link-->
  +
  +
Or from the console:
  +
  +
buyer
  +
seller@testnet03:~$ ./terracoin-cli getrawtransaction a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951 1
  +
{
  +
"hex" : "010000001a2e514dd90f666e3de4cddd22682ae1ca7225988656369d98228c742482fee16b010000006b48304502200ea8dddd404aac644fd382d3089480f2c9a6ce753a3c4fc0b12ac81afe8ffa3b022100d88f698a0d9fefbbf76240790530fe7e23bf6b354a1feedb4effa99813405b00012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff3181c52614be8742c36665b6a287a2d6c7970494b0a341ff9595c1c9a8f23aa2010000006b483045022041ee176da4df13adc782c9ff2afdb24c4e1b61b450895486388431bf1a88b81f02210082be1b3bd20d3f121c971fb745cba52523f6b8093ec93df5987c9beb302c19ac012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff332356f7d5e4264302ca4cc0f38d2a75a9b4c1df4bc4f94044f8a8fab81b7e1b010000006b483045022100dc322074961ae5e2e8cb11828301b1e083eff9ed6078aa064c52ed70d52737410220776b99c8552bbc2e644c7450ef8502d3497c3de7196b176f1c49cca18d1ff09f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff388b56a8a74338ce10e931dc198ed25fa4cb7213e0ea9905d32a3e902366661f010000006b48304502206d2cdfe9af498e9e46f88d0bd881746bf2dae182664d03f7a635ff599bdee84b022100bf3a7b88ed80b30d8915a2ae34d546defbc9a660ebf941afb4aa29461e0b4c95012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff44578d7579bef2a204359f8c878993480b306193d954ee735c53f8b3e076c3ea010000006c4930460221008a67da5764934392437fa9e05483e4b29204fd5d78dea01f744d4a23c403881b022100c77e58307f58953b578de568138659b4efd2fadaec51917c2270fab0bd4a57a6012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4a3b7b666ce8f249ef4f253b7f718fb5cc2f21f899608d319bcc04c75ec47353010000006b48304502203ca5a0559647ee0d1790714296396ca0bca27a3ef3e68f76706c63da9cd3684f0221008c9529f7a54d89440f8dca89c1c47725821012670d05a70681b57f182b069a74012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4ab5d98908e4424929bfdba3d6402e6b45db60a622b4df8c73da1b37bdb949a4010000006b48304502210094da4e007ba94cdb47a8c4805dab4b93dc475a44340a9b6f6d7956d49749e3d3022077b94861995ffe3f59429bf5b873914d3c1157f23f018697650bc3bd2dc2de1f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4cd58c1ad5b0ffd8556deff402854d94a79222799916be8e0f88d0cca3c38c85010000006b483045022030e72eec0386c83489efff8f3c71aed8eec0265565cddeb1492aab6644cc63220221008d6df06656dae12dae573b860d65045f088e4df5e2127902231d8edd4196ef1d012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff501ff2345fc47b9b7749afcc32e790fdbe5d22fd96b2c5d0522d4cad0cd5566f010000006a47304402204e9bc23796974fdf323c49399ca7db76e2238630add4c617631549f4595af4a80220658038b14884c1a0d730de79c7e2769d4d28135ed7896e7aff01ca94c8edf7bb012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff5020fe72d4c1038213cc3e1b99f5b313c4b2d57f1e0d9abba90860dc5c38630a010000006a473044022071b7cca6a7d72fef4b46ad425c23c37f28c72501e5e61821f00e022c4c8ef49502200d8ba406fe336d64a8ae909cad20d0ffe302cd977900013ea72b37c488550625012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff59f32023d4225cc193182e81444f00f6d95652a9458daa08f4324ab4bdac7bed010000006b4830450221009e0f701840c01c2c37e2baec0ea2c43d517126107ef874c3d68f32dfa2e4f05f02206d1306dee274267598d5ab8d7c4c26346d25d8118b30a6921b9b238307916d6e012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff05b5b8ecaf7bcbd5fdfc64fd7dbd6ebfee18dcaf57e00b6711ba0abe4329eb23010000006a47304402200515822e6d9641c72f1af7968ba63d47463caffeca03733750b0866ef123fe00022071fd40bac12aa1d36244fc5391162b70ec306a5ed2dffef3a3d4995524317a10012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff09cc372e4409bcbacd85adb17918ca5b20427dc280b44bd4f234fb698ac07fc6010000006b483045022051e5c430110e8b0d85693c421031f14abf89bee1a14702e6655a1eaa2663927c0221009a54781fddd4093032507f12fe8a97ce926a743851a1a56c2ca70026ce98b7e6012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff0963f2cc80666835ae8c5939ac3011d2962ae88e872cdc13257cfb0188f83c7a010000006b483045022032fd819b1cdb8f506e27f26b3e46330c498b965386c3e96c34dceeff2a517cf7022100a4c34d77ed25116dc05ca7d783bd6cb91c1e38db0541878dac72f2d63d4b7c11012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff14cff38ccbdd840ffc491614e9b5167edb6ad6b9eeaf8e3dc30feaeefa39d820010000006c493046022100f4d6dfce7778acee6bdcf9f2ec39dbf902b6ca977b8622c886eadddefa01bf5502210089b3c2d23b5fc5b03d2d6ea4bf28f04b98342b02dd7d2020a6466bddd85c3d50012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff63750bbce93657a59fe3472fce714eafa09791fcf7f687f30a923162f2ba5196010000006c493046022100bbbf84829fcc2ec70bc6d77cfc69f512c1a14359958eee46243001908dc2a0ab0221008f1fbda61fcfccb78fe6d4e6385e8f508035676ef82654425bb704727f1e59b4012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff6466da482404f4a719f7eb16798d05878af2c36ad7174e2b68964693f39e954b010000006a47304402204d57344da5a1a29ea800215d19ada89787b1026f7e47c2f2f1ea0ef82bec5b6d02203039bd98546843a99d9e6749819875a4d996a682c57a192d9e5cef9b694a028b012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff8b0b4a84522fded19446eef3fdd94cc0f7449c71b6e0080837d5f240c78ce03b010000006c493046022100c152177ec49bb572d70976b53c10d0c4be55584975d657c43e87fbaac8c081ec0221009dd150697257cf769c3e90afbde88fbbe5f95c17c561883546537644ed628f6f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff8d7078622b75fc2c3ea1094d07099b0e460a7f7a4c53cf225d066f919f17daf6010000006b483045022100e440d404867748cfba792119faae12d286b265a185cec86215fe2737ec1e7ca402207770447154f81564f7022b375943c2b7eaf3d05a3281c6f5c70328b098423d7d012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff98c23cc59412943bfedba3b4a48bb2f97f58c119946e5c492031c43a36dd576e010000006c493046022100910cf6fb057269e5e02fa44fc2ba03925d9e0e3232d3d5a66aac440db9627f9f022100b656d982dec47000de616f21a331b1fb5e19d1ab312c5845f5f1538dac4dd301012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff9d4851f00e3c2fa22816adc55703fcb539ae0fe218f369f23af079964a6225fc020000006c4930460221009918ee137e4aead4760c79dbe940556ae1ecb7935a653543b486f4198f16cc6a022100f82e04cd970f2c5fd8dd48813e38f87c10ed8fa7b45eec1854562948f9d43a1b012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffa13c3221f0e08289657208bccf7b466ea5795c591751065a20b16f00892bd598010000006b483045022073d9fed13def14a655fd423f5c4fa63e46eeea76668cdf8bb89d96630890760d022100f70edce3513c9cbc671f92dc0b4d97c5edc0d9d26f4e726bb2d66776a3b9e411012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffcac4f229bd19c47cd15ee9355af8383531a960ba0e0f3e8e4fa0a607ab2000d9010000006b483045022100967624e60a7670e849eb7500cf185620fd65de10d1e5f7cef9131d3c6403cb5f022005182af16fba1b7dbdd27a8935205b439c6034d566c6f14950aba6bb328cbf79012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffcbf8cb94ee2bcda1c9ceb54feaf6815441f722b70c4f7569525cc9dee7cbbdc2010000006b4830450221008cfcfdc62f0a398e2419ebd56cf067e2abadf8116936250939b9fa763dd428680220052c6d316189d5f7164d2423aae99e97d05165f3e5c7d138e2858f0adab4ebba012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffdbad6da5900987f77e5bcf714c935889fbea2d3ff388586a331fe42e0a82efe0010000006c493046022100e80d73130bcd25faa73764f4ff6c05e1b401f3960b7ef30b4244daaf5fce953a022100b99a55caaaa312df54c7d743791052c3e8392725becf91d2aa886d2e8259af10012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689fffffffffdc2d56fd131ae16837fc86e3015c9e78077dd36b6a2591cf1d500c584bbcc6a010000006b483045022100d13e5a55a4a71e039603bd2d3d76a757c63b1d199bcf340e3f2eeb5bed10897c022046a43ecc6cd8295981bde38c34c29708e402db59fc93e657196fc3032858d967012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff0240d6de1b1200000017a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87c02fdf67000000001976a914b8d899f7193a7b3278be037b006c8f08998ebef388ac00000000",
  +
"txid" : "a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951",
  +
"version" : 1,
  +
"locktime" : 0,
  +
[...]
  +
"vout" : [
  +
{
  +
"value" : 777.77000000,
  +
"n" : 0,
  +
"scriptPubKey" : {
  +
"asm" : "OP_HASH160 15c85c2472f5941b60a49462a2cfd0d17ab49d1c OP_EQUAL",
  +
"hex" : "a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87",
  +
"reqSigs" : 1,
  +
"type" : "scripthash",
  +
"addresses" : [
  +
"2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf"
  +
]
  +
}
  +
},
  +
[...]
  +
],
  +
"blockhash" : "000000034def806f348cadf6a80660aed1cfc30ccbd1492a8ea87062800ea94d",
  +
"confirmations" : 3,
  +
"time" : 1409224896,
  +
"blocktime" : 1409224896
  +
}
  +
Step 4: Spending the multisig
  +
Now we assume the deal is complete, the buyer got the goods and everyone is happy. Now the seller wants to get his TRC. As a 2-of-3 multisig was used, the transaction must be signed by 2 parties (seller + buyer or arbiter). The seller creates a transaction (we will reuse his public address from above):
  +
  +
seller
  +
seller@testnet03:~$ ./terracoin-cli createrawtransaction '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0}]' '{"n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk":777.77}'
  +
010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a80000000000ffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000
  +
and partially signs it, using the redeemScript, scriptPubKey and his private Key
  +
  +
seller
  +
seller@testnet03:~$ ./terracoin-cli signrawtransaction '010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a80000000000ffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000' '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0,"scriptPubKey":"a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87","redeemScript":"522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"}]' '["cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx"]'
  +
{
  +
"hex" : "010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000b500483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa4014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000",
  +
"complete" : false
  +
}
  +
Note that the output hex is getting longer, but complete flag is "false" as the transaction needs another signature. So now either the buyer or the arbiter can complete the signature of the transaction, using the output from above and their private key. Let's assume the buyer is completing the signature.
  +
  +
buyer
  +
buyer@testnet03:~$ ./terracoin-cli signrawtransaction '010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000b500483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa4014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000' '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0,"scriptPubKey":"a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87","redeemScript":"522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"}]' '["cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU"]'
  +
{
  +
"hex" : "010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000fdff0000483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa401493046022100dc3f61fdb7b8ea7ec729682d355646c922f5512054c4985534e6b91040c5bd660221008b48c117ec95814f573d33bca981cb703fdd9fa6e52aa8fe67423e06cad87215014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000",
  +
"complete" : true
  +
}
  +
The signature is complete now, and either of the parties can transmit the transaction to the network:
  +
  +
buyer
  +
buyer@testnet03:~$ ./terracoin-cli sendrawtransaction 010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000fdff0000483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa401493046022100dc3f61fdb7b8ea7ec729682d355646c922f5512054c4985534e6b91040c5bd660221008b48c117ec95814f573d33bca981cb703fdd9fa6e52aa8fe67423e06cad87215014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000
  +
cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71
  +
Again, this transaction can be traced in the explorer → https://testnet-insight.dashevo.org/insight/tx/cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71
  +
  +
And the seller is happy to receive his coins at his public address:
  +
  +
seller
  +
seller@testnet03:~$ terracoin-cli listtransactions "" 1
  +
[
  +
{
  +
"account" : "",
  +
"address" : "n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk",
  +
"category" : "receive",
  +
"amount" : 777.77000000,
  +
"confirmations" : 17,
  +
"blockhash" : "000000067a13e9bd5c1d5ff48cb4b9f8414a6adcc470656262731bfd013510dd",
  +
"blockindex" : 9,
  +
"blocktime" : 1409228449,
  +
"txid" : "cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71",
  +
"time" : 1409227887,
  +
"timereceived" : 1409227887
  +
}
  +
]
  +
Credits:
  +
This example is based on:
  +
  +
https://people.xiph.org/~greg/escrowexample.txt
  +
  +
https://gist.github.com/gavinandresen/3966071
  +
  +
https://bitcoin.org/en/developer-examples#p2sh-multisig
  +
 
==Complex Multisignature Example==
  +
  +
This example is based on the process described in the multisignature example and also uses a 2 of 3 multisig address (two of the three signatories need to sign any transaction). Instead of doing an escrow transaction with one input and one output of the same size, this example shows a more complex transaction with more than one input and the amount to send is different to the sum of the inputs, thus creating change/second output.
  +
  +
Unlike in the other example, I will be introducing the commands in the console (Tools > Debug console) of the Terracoin Core wallet. Of course, the results will be same if you follow the procedure from the command line. You just need to add ./terracoin-cli before every command, but if you are using the wallet through the command line you already know that.
  +
  +
I've done this example in mainnet to show things exactly as they are, but please practice in testnet before playing with this yourself. The wallets used are all empty now and won't be used again ever. Never, never, never, ever share your private keys! I only do it here to illustrate the example.
  +
  +
0. Addresses used to sign the multisig
  +
Each of the parties involved in the multisig needs to use a regular address under their control to sign the multisig address. Once the address is chosen, each party need to get the public and private key of that address. The first one will be used to create the multisig. The second one will be used to sign the transactions.
  +
  +
What you need:
  +
  +
Valid Terracoin address
  +
Command 1:
  +
  +
validateaddress <terracoin address>
  +
Result 1:
  +
  +
A block of information in which one of the lines says pubkey: '<pubkey>'
  +
Command 2:
  +
  +
dumpprivkey <terracoin address>
  +
Result 2:
  +
  +
<private key>
  +
Keep the private key in a secure place. With it and the address anyone could take control of that address.
  +
  +
Example:
  +
  +
We'll use three different addresses and get their public and private keys for later usage.
  +
  +
Address 1
  +
Address 1 is XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8
  +
  +
>validateaddress XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8
  +
>{
  +
"isvalid" : true,
  +
"address" : "XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe09",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
  +
>dumpprivkey XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8
  +
>XJ2BYs6CXzU6iyNXpiKdNn5MJRaFMd3C8ZxG4MJcvumnFUb4LCsN
  +
Address 2
  +
Address 2 is XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv
  +
  +
>validateaddress XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv
  +
>{
  +
"isvalid" : true,
  +
"address" : "XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a1",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
  +
  +
>dumpprivkey XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv
  +
>XEAEtxdUsHb77hDXLoPPsc9qxtzyqBzxbdVh5cJsuERpf1opopYu
  +
Address 3
  +
Address 3 is XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC
  +
  +
>validateaddress XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC
  +
>{
  +
"isvalid" : true,
  +
"address" : "XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC",
  +
"ismine" : true,
  +
"isscript" : false,
  +
"pubkey" : "03893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a",
  +
"iscompressed" : true,
  +
"account" : ""
  +
}
  +
  +
>dumpprivkey XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC
  +
>XJ6eMaQQaXB6x5z6NpSHjgdqcECskNaVpMqA12CnmUqQSdGqZGub
  +
  +
  +
1. Creation of the multisig address
  +
This can be done by any of the parts involved.
  +
  +
What you need:
  +
  +
Public keys of the addresses associated with the multisig.
  +
Command:
  +
  +
createmultisig 2 '["<pubkey1>", "<pubkey2>", "<pubkey3>"]'
  +
The '2' is the number of signatures required to sign any transaction. It is possible to use more public keys and a different number of signatures, with the maximum at 30 addresses and 15 signatures.
  +
  +
Result:
  +
  +
<mulisig address> <redeemption script>
  +
If the order of the public keys is the same, the result will be the same, no matter who does this step.
  +
  +
It is extremely important to keep the redemption script because it is needed to do any transaction. Multisig addresses don't reside in a wallet and have private/public keys, they live in the blockchain and have a redemption script.
  +
  +
Example:
  +
  +
We'll create the multisig address using the three public keys obtained in the previous step. Two signatures will be required.
  +
  +
Creation of multisig address
  +
>createmultisig 2 '["026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe09", "032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a1", "03893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a"]'
  +
>{
  +
"address" : "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL",
  +
"redeemScript" : "5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"
  +
}
  +
  +
  +
2. Funding the multisig
  +
A multisig works exactly as a regular address to receive funds. Anyone can send without any special procedure. Some exchanges or services may produce an error when trying to send to a multisig if they are running an old version of the daemon, but this is very unlikely. If you find one of those instances, please report and send from another wallet.
  +
  +
In this case, I'll do two different transactions to have two inputs to use later.
  +
  +
You'll need to keep track of the transaction ids because you'll need them later to spend from the multisig.
  +
  +
Example:
  +
  +
First transaction id: 50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784
  +
Vout: 1
  +
Amount: 1.2 TRC
  +
  +
Second transaction id: 60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc
  +
Vout: 1
  +
Amount: 1.397 TRC
  +
  +
You can always get this information from the blockchain explorer because the transactions look exactly as any other transaction.
  +
  +
  +
  +
  +
  +
3. Sending from the multisig
  +
The process to send from a multisig is tedious because it can't be done from the GUI of the wallet and it has a few steps:
  +
  +
Signatory 1 creates of a raw transaction
  +
Signatory 1 signs the raw transaction
  +
Signatory 1 sends the information to signatory 2
  +
Signatory 2 signs the raw transaction
  +
Signatory 2 broadcasts the raw transaction to the network
  +
3.1 Creation of the raw transaction
  +
Any of the signatories can do this, but the usual thing will be that the first signatory do it.
  +
  +
What you need:
  +
  +
Transaction ids of the outputs of transactions to the multisig that are going to be used, with their amount and output index number (vout). You can get all data from the blockchain explorer
  +
Addresses to be paid and amounts
  +
The amounts of the outputs used (now inputs) need to be the same as the amounts paid. If there is any difference, it will be considered fee, so you need to check that numbers to avoid paying a huge fee by mistake. This means that you need to create the change of the transaction manually if there is any. In the case of a multisig, there are no other addresses in the same wallet to receive the change, so you'll need to pay the change to the multisig address.
  +
  +
You can manually calculate the fee by calculating the size of the transaction. Multisig transactions are bigger than standard transactions and vary in size because of the script they carry (maximum size allowed is 520 bytes), so calculating the size of the transaction is not easy. Also, if you are dealing with very small outputs, it is possible that you'll need to include another output to pay the fee and that will change the size again and may change the fee. To avoid spending a lot of time with this calculations I recommend paying a higher fee than usual, let's say 0.002 TRC, and that will solve almost every case. If you get a code 22 error when broadcasting the transaction you'll know it is because the fee is not enough and you will need to recalculate.
  +
  +
Command:
  +
  +
createrawtransaction '[{"txid":"<transaction id>","vout":<output index number>}, {"txid":"<transaction id>","vout":<output index number>}...]' '{"<Address to pay>":<amount>, "<Address to pay>":<amount>...}'
  +
Notice how in the first part of the command we have the outputs, with the data of each output inside curly brackets and each output separated with commas. And how in the second part we have the addresses paid with their amounts, separated with commas. The ellipsis are not needed, they simply represent that you could keep introducing inputs/outputs in the same way.
  +
  +
Result:
  +
  +
<long hex of the transaction>
  +
Example:
  +
  +
We'll send 1.8 TRC to the address Xcy4V4iAugosK9eWt82y6HKmEmZu4TuD5X. We'll pay a fee of 0.002 TRC and send the change (0.795 TRC) back to the multisig address.
  +
  +
Create raw transaction
  +
>createrawtransaction '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1}]' '{"Xcy4V4iAugosK9eWt82y6HKmEmZu4TuD5X":1.8, "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL":0.795}'
  +
  +
>01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf9500100000000ffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf600100000000ffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000
  +
  +
  +
3.2 Signature of the raw transaction
  +
This will usually be done by the creator of the transaction.
  +
  +
What you need:
  +
  +
Hex of the transaction created in the previous step
  +
Private key of the address used to sign by signatory 1
  +
Transaction ids of the outputs of transactions to the multisig that are going to be used, with their output index number (vout) and scriptPubKey hex. Most of the data you'll have from the previous step. To obtain the scriptPubKey hex you only need to type in the console:
  +
  +
getrawtransaction <transaction id> 1
  +
Don't forget the '1' at the end or you'll get a crazy block of data instead of an array. You'll get a lot of information for every vout in that transaction. The one you need is the hex string of the vout you are using.
  +
  +
Command:
  +
  +
signrawtransaction '<long hex of the transaction obtained in the previous step>' '[{"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}, {"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}...]' '["<signatory private key>"]'
  +
Result:
  +
  +
Array with <even longer hex of the transation> and a 'false' statement that indicates that the transaction is not yet fully signed.
  +
Example:
  +
  +
The owner of address 1 will sign the transaction. First he'll get the scriptPubKey from the transactions received using the command getrawtransaction.
  +
  +
Get raw transactions data
  +
>getrawtransaction 50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784 1
  +
>{
  +
"hex" : "01000000019d4b4e841753700cb255bd622e1b91074bfc19db1eb87fcdd7c534cf6d6f7b13000000006a47304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701210381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903ffffffff02c087b70a000000001976a914c0cf8285d89ab0d7d650d14762b0c54b60a806cc88ac000e27070000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000",
  +
"txid" : "50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784",
  +
"version" : 1,
  +
"locktime" : 0,
  +
"vin" : [
  +
{
  +
"txid" : "137b6f6dcf34c5d7cd7fb81edb19fc4b07911b2e62bd55b20c705317844e4b9d",
  +
"vout" : 0,
  +
"scriptSig" : {
  +
"asm" : "304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701 0381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903",
  +
"hex" : "47304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701210381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903"
  +
},
  +
"sequence" : 4294967295
  +
}
  +
],
  +
"vout" : [
  +
{
  +
"value" : 1.79800000,
  +
"n" : 0,
  +
"scriptPubKey" : {
  +
"asm" : "OP_DUP OP_HASH160 c0cf8285d89ab0d7d650d14762b0c54b60a806cc OP_EQUALVERIFY OP_CHECKSIG",
  +
"hex" : "76a914c0cf8285d89ab0d7d650d14762b0c54b60a806cc88ac",
  +
"reqSigs" : 1,
  +
"type" : "pubkeyhash",
  +
"addresses" : [
  +
"XtGLA83wYYYyhiENCwLYj32t8VDRJHWbcP"
  +
]
  +
}
  +
},
  +
{
  +
"value" : 1.20000000,
  +
"n" : 1,
  +
"scriptPubKey" : {
  +
"asm" : "OP_HASH160 25e3ff8ede18aeeacc948d17e641af482ac693d2 OP_EQUAL",
  +
"hex" : "a91425e3ff8ede18aeeacc948d17e641af482ac693d287",
  +
"reqSigs" : 1,
  +
"type" : "scripthash",
  +
"addresses" : [
  +
"359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL"
  +
]
  +
}
  +
}
  +
],
  +
"blockhash" : "0000000000025959d4dccb43857cdb806380353f5cf42e698d284b79f712d972",
  +
"confirmations" : 44,
  +
"time" : 1417558942,
  +
"blocktime" : 1417558942
  +
}
  +
  +
  +
>getrawtransaction 60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc 1
  +
>{
  +
"hex" : "01000000018497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf950000000006b4830450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d30121037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169dbffffffff02005a6202000000001976a9144005d5f5156a45bfdf016204e8fdaa950304b95988ac20a753080000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000",
  +
"txid" : "60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc",
  +
"version" : 1,
  +
"locktime" : 0,
  +
"vin" : [
  +
{
  +
"txid" : "50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784",
  +
"vout" : 0,
  +
"scriptSig" : {
  +
"asm" : "30450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d301 037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169db",
  +
"hex" : "4830450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d30121037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169db"
  +
},
  +
"sequence" : 4294967295
  +
}
  +
],
  +
"vout" : [
  +
{
  +
"value" : 0.40000000,
  +
"n" : 0,
  +
"scriptPubKey" : {
  +
"asm" : "OP_DUP OP_HASH160 4005d5f5156a45bfdf016204e8fdaa950304b959 OP_EQUALVERIFY OP_CHECKSIG",
  +
"hex" : "76a9144005d5f5156a45bfdf016204e8fdaa950304b95988ac",
  +
"reqSigs" : 1,
  +
"type" : "pubkeyhash",
  +
"addresses" : [
  +
"XgXN51N5BBYa8dd6xBQwZqjG6mRSotj3oX"
  +
]
  +
}
  +
},
  +
{
  +
"value" : 1.39700000,
  +
"n" : 1,
  +
"scriptPubKey" : {
  +
"asm" : "OP_HASH160 25e3ff8ede18aeeacc948d17e641af482ac693d2 OP_EQUAL",
  +
"hex" : "a91425e3ff8ede18aeeacc948d17e641af482ac693d287",
  +
"reqSigs" : 1,
  +
"type" : "scripthash",
  +
"addresses" : [
  +
"359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL"
  +
]
  +
}
  +
}
  +
],
  +
"blockhash" : "0000000000025959d4dccb43857cdb806380353f5cf42e698d284b79f712d972",
  +
"confirmations" : 44,
  +
"time" : 1417558942,
  +
"blocktime" : 1417558942
  +
}
  +
  +
First signature of transaction
  +
>signrawtransaction '01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf9500100000000ffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf600100000000ffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000' '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}]' '["XJ2BYs6CXzU6iyNXpiKdNn5MJRaFMd3C8ZxG4MJcvumnFUb4LCsN"]'
  +
>{
  +
"hex" : "01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000b4004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000b500483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a05014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000",
  +
"complete" : false
  +
}
  +
  +
  +
  +
  +
3.3 Signatory 1 sends the information to signatory 2
  +
Signatory 1 will need to send the crazy long hex to signatory 2. Aside of that, it is useful if he also sends the data of outputs used in the transaction so he doesn't have to look for them.
  +
  +
3.4 Signatory 2 signs the transaction
  +
What you need:
  +
  +
Hex of the transaction sent by signatory 1
  +
Private key of the address used to sign by signatory 2
  +
Transaction ids of the outputs of transactions to the multisig that are going to be used, with their output index number (vout) and scriptPubKey hex. Signatory 1 can provide this.
  +
Command:
  +
  +
signrawtransaction '<hex of the transaction sent by signatory 1>' '[{"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}, {"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}...]' '["<signatory private key>"]'
  +
Result:
  +
  +
Array with <hilariously long hex of the transation> and a 'true' statement that indicates that the transaction is now fully signed.
  +
Example:
  +
  +
The owner of address 2 signs the transaction.
  +
  +
Second signature of transaction
  +
>signrawtransaction '01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000b4004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000b500483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a05014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000' '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}]' '["XEAEtxdUsHb77hDXLoPPsc9qxtzyqBzxbdVh5cJsuERpf1opopYu"]'
  +
>{
  +
"hex" : "01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000fc004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb0147304402207725bec0286380d6ec91ed786f5dc766d4555d2e9a3b7e02e088ebf01d74387702201377d7a5e2e357bd5d5c156422850df3ecd006ce9c0614504b034aa774c6fa96014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000fdfd0000483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a0501473044022065a7abab6bf28a7b9047639da02d651e260d036c40fe25eec0e79dd7f9c4fdba0220386155b9318b2b8fd3bc715cf022c54d2dfacc984cac4937bca117253e659ee5014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000",
  +
"complete" : true
  +
}
  +
  +
  +
3.5 Broadcast of the transaction
  +
This will usually be done by signatory 2, but once it is fully signed anyone could do it. This is the easiest step.
  +
  +
What you need:
  +
  +
Hilariously long hex of the transation from the previous step
  +
Command:
  +
  +
sendrawtransaction <hilariously long hex of the transation>
  +
Result:
  +
  +
<transaction id>
  +
And it is done. Sit down, relax and watch this beautiful transaction get included in a block.
  +
  +
Example:
  +
  +
The owner of address 2 sends the transaction to the network and gets the transaction id.
  +
  +
Transaction broadcast
  +
>sendrawtransaction 01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000fc004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb0147304402207725bec0286380d6ec91ed786f5dc766d4555d2e9a3b7e02e088ebf01d74387702201377d7a5e2e357bd5d5c156422850df3ecd006ce9c0614504b034aa774c6fa96014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000fdfd0000483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a0501473044022065a7abab6bf28a7b9047639da02d651e260d036c40fe25eec0e79dd7f9c4fdba0220386155b9318b2b8fd3bc715cf022c54d2dfacc984cac4937bca117253e659ee5014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000
  +
>a2d087c1423532abce2f439d2f3278ae260ea48c87778dffb9fe79e1a7042e40
  +
Credits and more info
  +
Multisignature example by Holger Schinzel
  +
  +
Escrow example by Gavin Adresen
  +
  +
BIP0016 - Pay to Script Hash by Gavin Adresen
  +
  +
Bitcoin developer examples - P2SH Multisig
  +
  +
Transaction fees in Bitcoin wiki
  +
  +
Transactions in Bitcoin wiki

Revision as of 01:05, 20 March 2018

Multisignature Example

This document presents a worked example to demonstrate multisig functionality in TerracoinCore. While the transactions are no longer visible on the current testnet blockchain and some address formats or RPC responses may differ slightly from the version shown here, the principle and commands are the same.

Step 1: Create three addresses seller seller@testnet03:~$ ./terracoin-cli getnewaddress n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk seller@testnet03:~$ ./terracoin-cli validateaddress n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk {

   "isvalid" : true,
   "address" : "n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk",
   "ismine" : true,
   "isscript" : false,
   "pubkey" : "02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e",
   "iscompressed" : true,
   "account" : ""

} seller@testnet03:~$ ./terracoin-cli dumpprivkey n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx buyer buyer@testnet03:~$ ./terracoin-cli getnewaddress mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u buyer@testnet03:~$ ./terracoin-cli validateaddress mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u {

   "isvalid" : true,
   "address" : "mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u",
   "ismine" : true,
   "isscript" : false,
   "pubkey" : "0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c",
   "iscompressed" : true,
   "account" : ""

} buyer@testnet03:~$ ./terracoin-cli dumpprivkey mp5orHuaFaHCXFSCeYvUPL7H16JU8fKG6u cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU arbiter arbiter@testnet03:~$ ./terracoin-cli getnewaddress n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN arbiter@testnet03:~$ ./terracoin-cli validateaddress n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN {

   "isvalid" : true,
   "address" : "n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN",
   "ismine" : true,
   "isscript" : false,
   "pubkey" : "0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce",
   "iscompressed" : true,
   "account" : ""

} arbiter@testnet03:~$ ./terracoin-cli dumpprivkey n1cZSyQXhach5rrj2tm5wg6JC7uZ3qPNiN cUbDFL81a2w6urAGZf7ecGbdzM82pdHLeCaPXdDp71s96SzDV49M Result: Three keypairs (public/private)

seller: 02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e / cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx buyer: 0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c / cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU arbiter: 0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce / cUbDFL81a2w6urAGZf7ecGbdzM82pdHLeCaPXdDp71s96SzDV49M Step 2: Create multisig address The createmultisig command takes as variables the number n signatures of m keys (supplied as json array) required. In this example, 2 of 3 keys are required to sign the transaction.

Note: The address can be created by anyone, as long as the public keys and their sequence are known (resulting address and redeemScript are identical, see below).

seller seller@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]' {

   "address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
   "redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"

} buyer

buyer@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]'

{

   "address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
   "redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"

} arbiter

arbiter@testnet03:~$ ./terracoin-cli createmultisig 2 '["02a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e","0315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c","0287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce"]'

{

   "address" : "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf",
   "redeemScript" : "522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"

} Step 3: The buyer funds the multisig address This works the same as a usual transaction:

buyer buyer@testnet03:~$ ./terracoin-cli sendtoaddress 2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf 777.77 a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951 The seller/arbiter can trace the transaction by its txid in the testnet block explorer → https://testnet-insight.dashevo.org/insight/tx/a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951

Or from the console:

buyer seller@testnet03:~$ ./terracoin-cli getrawtransaction a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951 1 {

   "hex" : "010000001a2e514dd90f666e3de4cddd22682ae1ca7225988656369d98228c742482fee16b010000006b48304502200ea8dddd404aac644fd382d3089480f2c9a6ce753a3c4fc0b12ac81afe8ffa3b022100d88f698a0d9fefbbf76240790530fe7e23bf6b354a1feedb4effa99813405b00012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff3181c52614be8742c36665b6a287a2d6c7970494b0a341ff9595c1c9a8f23aa2010000006b483045022041ee176da4df13adc782c9ff2afdb24c4e1b61b450895486388431bf1a88b81f02210082be1b3bd20d3f121c971fb745cba52523f6b8093ec93df5987c9beb302c19ac012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff332356f7d5e4264302ca4cc0f38d2a75a9b4c1df4bc4f94044f8a8fab81b7e1b010000006b483045022100dc322074961ae5e2e8cb11828301b1e083eff9ed6078aa064c52ed70d52737410220776b99c8552bbc2e644c7450ef8502d3497c3de7196b176f1c49cca18d1ff09f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff388b56a8a74338ce10e931dc198ed25fa4cb7213e0ea9905d32a3e902366661f010000006b48304502206d2cdfe9af498e9e46f88d0bd881746bf2dae182664d03f7a635ff599bdee84b022100bf3a7b88ed80b30d8915a2ae34d546defbc9a660ebf941afb4aa29461e0b4c95012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff44578d7579bef2a204359f8c878993480b306193d954ee735c53f8b3e076c3ea010000006c4930460221008a67da5764934392437fa9e05483e4b29204fd5d78dea01f744d4a23c403881b022100c77e58307f58953b578de568138659b4efd2fadaec51917c2270fab0bd4a57a6012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4a3b7b666ce8f249ef4f253b7f718fb5cc2f21f899608d319bcc04c75ec47353010000006b48304502203ca5a0559647ee0d1790714296396ca0bca27a3ef3e68f76706c63da9cd3684f0221008c9529f7a54d89440f8dca89c1c47725821012670d05a70681b57f182b069a74012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4ab5d98908e4424929bfdba3d6402e6b45db60a622b4df8c73da1b37bdb949a4010000006b48304502210094da4e007ba94cdb47a8c4805dab4b93dc475a44340a9b6f6d7956d49749e3d3022077b94861995ffe3f59429bf5b873914d3c1157f23f018697650bc3bd2dc2de1f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff4cd58c1ad5b0ffd8556deff402854d94a79222799916be8e0f88d0cca3c38c85010000006b483045022030e72eec0386c83489efff8f3c71aed8eec0265565cddeb1492aab6644cc63220221008d6df06656dae12dae573b860d65045f088e4df5e2127902231d8edd4196ef1d012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff501ff2345fc47b9b7749afcc32e790fdbe5d22fd96b2c5d0522d4cad0cd5566f010000006a47304402204e9bc23796974fdf323c49399ca7db76e2238630add4c617631549f4595af4a80220658038b14884c1a0d730de79c7e2769d4d28135ed7896e7aff01ca94c8edf7bb012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff5020fe72d4c1038213cc3e1b99f5b313c4b2d57f1e0d9abba90860dc5c38630a010000006a473044022071b7cca6a7d72fef4b46ad425c23c37f28c72501e5e61821f00e022c4c8ef49502200d8ba406fe336d64a8ae909cad20d0ffe302cd977900013ea72b37c488550625012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff59f32023d4225cc193182e81444f00f6d95652a9458daa08f4324ab4bdac7bed010000006b4830450221009e0f701840c01c2c37e2baec0ea2c43d517126107ef874c3d68f32dfa2e4f05f02206d1306dee274267598d5ab8d7c4c26346d25d8118b30a6921b9b238307916d6e012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff05b5b8ecaf7bcbd5fdfc64fd7dbd6ebfee18dcaf57e00b6711ba0abe4329eb23010000006a47304402200515822e6d9641c72f1af7968ba63d47463caffeca03733750b0866ef123fe00022071fd40bac12aa1d36244fc5391162b70ec306a5ed2dffef3a3d4995524317a10012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff09cc372e4409bcbacd85adb17918ca5b20427dc280b44bd4f234fb698ac07fc6010000006b483045022051e5c430110e8b0d85693c421031f14abf89bee1a14702e6655a1eaa2663927c0221009a54781fddd4093032507f12fe8a97ce926a743851a1a56c2ca70026ce98b7e6012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff0963f2cc80666835ae8c5939ac3011d2962ae88e872cdc13257cfb0188f83c7a010000006b483045022032fd819b1cdb8f506e27f26b3e46330c498b965386c3e96c34dceeff2a517cf7022100a4c34d77ed25116dc05ca7d783bd6cb91c1e38db0541878dac72f2d63d4b7c11012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff14cff38ccbdd840ffc491614e9b5167edb6ad6b9eeaf8e3dc30feaeefa39d820010000006c493046022100f4d6dfce7778acee6bdcf9f2ec39dbf902b6ca977b8622c886eadddefa01bf5502210089b3c2d23b5fc5b03d2d6ea4bf28f04b98342b02dd7d2020a6466bddd85c3d50012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff63750bbce93657a59fe3472fce714eafa09791fcf7f687f30a923162f2ba5196010000006c493046022100bbbf84829fcc2ec70bc6d77cfc69f512c1a14359958eee46243001908dc2a0ab0221008f1fbda61fcfccb78fe6d4e6385e8f508035676ef82654425bb704727f1e59b4012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff6466da482404f4a719f7eb16798d05878af2c36ad7174e2b68964693f39e954b010000006a47304402204d57344da5a1a29ea800215d19ada89787b1026f7e47c2f2f1ea0ef82bec5b6d02203039bd98546843a99d9e6749819875a4d996a682c57a192d9e5cef9b694a028b012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff8b0b4a84522fded19446eef3fdd94cc0f7449c71b6e0080837d5f240c78ce03b010000006c493046022100c152177ec49bb572d70976b53c10d0c4be55584975d657c43e87fbaac8c081ec0221009dd150697257cf769c3e90afbde88fbbe5f95c17c561883546537644ed628f6f012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff8d7078622b75fc2c3ea1094d07099b0e460a7f7a4c53cf225d066f919f17daf6010000006b483045022100e440d404867748cfba792119faae12d286b265a185cec86215fe2737ec1e7ca402207770447154f81564f7022b375943c2b7eaf3d05a3281c6f5c70328b098423d7d012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff98c23cc59412943bfedba3b4a48bb2f97f58c119946e5c492031c43a36dd576e010000006c493046022100910cf6fb057269e5e02fa44fc2ba03925d9e0e3232d3d5a66aac440db9627f9f022100b656d982dec47000de616f21a331b1fb5e19d1ab312c5845f5f1538dac4dd301012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff9d4851f00e3c2fa22816adc55703fcb539ae0fe218f369f23af079964a6225fc020000006c4930460221009918ee137e4aead4760c79dbe940556ae1ecb7935a653543b486f4198f16cc6a022100f82e04cd970f2c5fd8dd48813e38f87c10ed8fa7b45eec1854562948f9d43a1b012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffa13c3221f0e08289657208bccf7b466ea5795c591751065a20b16f00892bd598010000006b483045022073d9fed13def14a655fd423f5c4fa63e46eeea76668cdf8bb89d96630890760d022100f70edce3513c9cbc671f92dc0b4d97c5edc0d9d26f4e726bb2d66776a3b9e411012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffcac4f229bd19c47cd15ee9355af8383531a960ba0e0f3e8e4fa0a607ab2000d9010000006b483045022100967624e60a7670e849eb7500cf185620fd65de10d1e5f7cef9131d3c6403cb5f022005182af16fba1b7dbdd27a8935205b439c6034d566c6f14950aba6bb328cbf79012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffcbf8cb94ee2bcda1c9ceb54feaf6815441f722b70c4f7569525cc9dee7cbbdc2010000006b4830450221008cfcfdc62f0a398e2419ebd56cf067e2abadf8116936250939b9fa763dd428680220052c6d316189d5f7164d2423aae99e97d05165f3e5c7d138e2858f0adab4ebba012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffffdbad6da5900987f77e5bcf714c935889fbea2d3ff388586a331fe42e0a82efe0010000006c493046022100e80d73130bcd25faa73764f4ff6c05e1b401f3960b7ef30b4244daaf5fce953a022100b99a55caaaa312df54c7d743791052c3e8392725becf91d2aa886d2e8259af10012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689fffffffffdc2d56fd131ae16837fc86e3015c9e78077dd36b6a2591cf1d500c584bbcc6a010000006b483045022100d13e5a55a4a71e039603bd2d3d76a757c63b1d199bcf340e3f2eeb5bed10897c022046a43ecc6cd8295981bde38c34c29708e402db59fc93e657196fc3032858d967012103954bfa8b6b1b0f1f5624ea2925b18cd1477fde2087eada1a51323a6617172689ffffffff0240d6de1b1200000017a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87c02fdf67000000001976a914b8d899f7193a7b3278be037b006c8f08998ebef388ac00000000",
   "txid" : "a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951",
   "version" : 1,
   "locktime" : 0,

[...]

   "vout" : [
       {
           "value" : 777.77000000,
           "n" : 0,
           "scriptPubKey" : {
               "asm" : "OP_HASH160 15c85c2472f5941b60a49462a2cfd0d17ab49d1c OP_EQUAL",
               "hex" : "a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87",
               "reqSigs" : 1,
               "type" : "scripthash",
               "addresses" : [
                   "2MuEQCZh7VB8pNrT4bj1CFZQh2oK7XZYLQf"
               ]
           }
       },

[...]

   ],
   "blockhash" : "000000034def806f348cadf6a80660aed1cfc30ccbd1492a8ea87062800ea94d",
   "confirmations" : 3,
   "time" : 1409224896,
   "blocktime" : 1409224896

} Step 4: Spending the multisig Now we assume the deal is complete, the buyer got the goods and everyone is happy. Now the seller wants to get his TRC. As a 2-of-3 multisig was used, the transaction must be signed by 2 parties (seller + buyer or arbiter). The seller creates a transaction (we will reuse his public address from above):

seller seller@testnet03:~$ ./terracoin-cli createrawtransaction '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0}]' '{"n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk":777.77}' 010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a80000000000ffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000 and partially signs it, using the redeemScript, scriptPubKey and his private Key

seller seller@testnet03:~$ ./terracoin-cli signrawtransaction '010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a80000000000ffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000' '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0,"scriptPubKey":"a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87","redeemScript":"522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"}]' '["cVQVgBr8sW4FTPYz16BSCo1PcAfDhpJArgMPdLxKZQWcVFwMXRXx"]' {

   "hex" : "010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000b500483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa4014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000",
   "complete" : false

} Note that the output hex is getting longer, but complete flag is "false" as the transaction needs another signature. So now either the buyer or the arbiter can complete the signature of the transaction, using the output from above and their private key. Let's assume the buyer is completing the signature.

buyer buyer@testnet03:~$ ./terracoin-cli signrawtransaction '010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000b500483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa4014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000' '[{"txid":"a8b3bf5bcace91a8dbbddbf9b7eb027efb9bd001792f043ecf7b558aaa3cb951","vout":0,"scriptPubKey":"a91415c85c2472f5941b60a49462a2cfd0d17ab49d1c87","redeemScript":"522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53ae"}]' '["cP9DFmEDb11waWbQ8eG1YUoZCGe59BBxJF3kk95PTMXuG9HzcxnU"]' {

   "hex" : "010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000fdff0000483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa401493046022100dc3f61fdb7b8ea7ec729682d355646c922f5512054c4985534e6b91040c5bd660221008b48c117ec95814f573d33bca981cb703fdd9fa6e52aa8fe67423e06cad87215014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000",
   "complete" : true

} The signature is complete now, and either of the parties can transmit the transaction to the network:

buyer buyer@testnet03:~$ ./terracoin-cli sendrawtransaction 010000000151b93caa8a557bcf3e042f7901d09bfb7e02ebb7f9dbbddba891ceca5bbfb3a800000000fdff0000483045022051a7f0e95a5066859ce37fe64a6e7ab6e30bfe9a68d9d3f1453064052eab5625022100c0067a33d2ee02478d89fc1a71f3a93c883db022e970886181c50ca9afc3dfa401493046022100dc3f61fdb7b8ea7ec729682d355646c922f5512054c4985534e6b91040c5bd660221008b48c117ec95814f573d33bca981cb703fdd9fa6e52aa8fe67423e06cad87215014c69522102a862b412ff9e3afd01a2873a02622897f6df92e3fc85597788b898309fec882e210315617694c9d93f0ce92769e050a6868ffc74d229077379c0af8bfb193c3d351c210287ce6cf69b85593ce7db801874c9a2fb1b653dbe5dd9ebfa73e98b710af9e9ce53aeffffffff0140d6de1b120000001976a914d728be76cd74b5d148eba2a49246b80dac12f73e88ac00000000 cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71 Again, this transaction can be traced in the explorer → https://testnet-insight.dashevo.org/insight/tx/cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71

And the seller is happy to receive his coins at his public address:

seller seller@testnet03:~$ terracoin-cli listtransactions "" 1 [

   {
       "account" : "",
       "address" : "n18cPEtj4ZfToPZxRszUz2XPts4eGsxiPk",
       "category" : "receive",
       "amount" : 777.77000000,
       "confirmations" : 17,
       "blockhash" : "000000067a13e9bd5c1d5ff48cb4b9f8414a6adcc470656262731bfd013510dd",
       "blockindex" : 9,
       "blocktime" : 1409228449,
       "txid" : "cf1a75672006a05b38d94acabb783f81976c9e83a8de4da9cbec0de711cf2d71",
       "time" : 1409227887,
       "timereceived" : 1409227887
   }

] Credits: This example is based on:

https://people.xiph.org/~greg/escrowexample.txt

https://gist.github.com/gavinandresen/3966071

https://bitcoin.org/en/developer-examples#p2sh-multisig

Complex Multisignature Example

This example is based on the process described in the multisignature example and also uses a 2 of 3 multisig address (two of the three signatories need to sign any transaction). Instead of doing an escrow transaction with one input and one output of the same size, this example shows a more complex transaction with more than one input and the amount to send is different to the sum of the inputs, thus creating change/second output.

Unlike in the other example, I will be introducing the commands in the console (Tools > Debug console) of the Terracoin Core wallet. Of course, the results will be same if you follow the procedure from the command line. You just need to add ./terracoin-cli before every command, but if you are using the wallet through the command line you already know that.

I've done this example in mainnet to show things exactly as they are, but please practice in testnet before playing with this yourself. The wallets used are all empty now and won't be used again ever. Never, never, never, ever share your private keys! I only do it here to illustrate the example.

0. Addresses used to sign the multisig Each of the parties involved in the multisig needs to use a regular address under their control to sign the multisig address. Once the address is chosen, each party need to get the public and private key of that address. The first one will be used to create the multisig. The second one will be used to sign the transactions.

What you need:

Valid Terracoin address Command 1:

validateaddress <terracoin address> Result 1:

A block of information in which one of the lines says pubkey: '<pubkey>' Command 2:

dumpprivkey <terracoin address> Result 2:

<private key> Keep the private key in a secure place. With it and the address anyone could take control of that address.

Example:

We'll use three different addresses and get their public and private keys for later usage.

Address 1 Address 1 is XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8

>validateaddress XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8 >{ "isvalid" : true, "address" : "XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8", "ismine" : true, "isscript" : false, "pubkey" : "026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe09", "iscompressed" : true, "account" : "" }

>dumpprivkey XvCxqiSj7AULnZNXYJ5zeASstW7gz52Lj8 >XJ2BYs6CXzU6iyNXpiKdNn5MJRaFMd3C8ZxG4MJcvumnFUb4LCsN Address 2 Address 2 is XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv

>validateaddress XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv >{ "isvalid" : true, "address" : "XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv", "ismine" : true, "isscript" : false, "pubkey" : "032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a1", "iscompressed" : true, "account" : "" }


>dumpprivkey XiVQMztV7UmeubeJxJpbXn8Da3cPXc5urv >XEAEtxdUsHb77hDXLoPPsc9qxtzyqBzxbdVh5cJsuERpf1opopYu Address 3 Address 3 is XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC

>validateaddress XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC >{ "isvalid" : true, "address" : "XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC", "ismine" : true, "isscript" : false, "pubkey" : "03893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a", "iscompressed" : true, "account" : "" }

>dumpprivkey XhUCZ4KHjZatLKKiKMpZDCs7oRADRm9eSC >XJ6eMaQQaXB6x5z6NpSHjgdqcECskNaVpMqA12CnmUqQSdGqZGub


1. Creation of the multisig address This can be done by any of the parts involved.

What you need:

Public keys of the addresses associated with the multisig. Command:

createmultisig 2 '["<pubkey1>", "<pubkey2>", "<pubkey3>"]' The '2' is the number of signatures required to sign any transaction. It is possible to use more public keys and a different number of signatures, with the maximum at 30 addresses and 15 signatures.

Result:

<mulisig address> <redeemption script> If the order of the public keys is the same, the result will be the same, no matter who does this step.

It is extremely important to keep the redemption script because it is needed to do any transaction. Multisig addresses don't reside in a wallet and have private/public keys, they live in the blockchain and have a redemption script.

Example:

We'll create the multisig address using the three public keys obtained in the previous step. Two signatures will be required.

Creation of multisig address >createmultisig 2 '["026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe09", "032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a1", "03893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a"]' >{ "address" : "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL", "redeemScript" : "5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae" }


2. Funding the multisig A multisig works exactly as a regular address to receive funds. Anyone can send without any special procedure. Some exchanges or services may produce an error when trying to send to a multisig if they are running an old version of the daemon, but this is very unlikely. If you find one of those instances, please report and send from another wallet.

In this case, I'll do two different transactions to have two inputs to use later.

You'll need to keep track of the transaction ids because you'll need them later to spend from the multisig.

Example:

First transaction id: 50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784 Vout: 1 Amount: 1.2 TRC

Second transaction id: 60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc Vout: 1 Amount: 1.397 TRC

You can always get this information from the blockchain explorer because the transactions look exactly as any other transaction.



3. Sending from the multisig The process to send from a multisig is tedious because it can't be done from the GUI of the wallet and it has a few steps:

Signatory 1 creates of a raw transaction Signatory 1 signs the raw transaction Signatory 1 sends the information to signatory 2 Signatory 2 signs the raw transaction Signatory 2 broadcasts the raw transaction to the network 3.1 Creation of the raw transaction Any of the signatories can do this, but the usual thing will be that the first signatory do it.

What you need:

Transaction ids of the outputs of transactions to the multisig that are going to be used, with their amount and output index number (vout). You can get all data from the blockchain explorer Addresses to be paid and amounts The amounts of the outputs used (now inputs) need to be the same as the amounts paid. If there is any difference, it will be considered fee, so you need to check that numbers to avoid paying a huge fee by mistake. This means that you need to create the change of the transaction manually if there is any. In the case of a multisig, there are no other addresses in the same wallet to receive the change, so you'll need to pay the change to the multisig address.

You can manually calculate the fee by calculating the size of the transaction. Multisig transactions are bigger than standard transactions and vary in size because of the script they carry (maximum size allowed is 520 bytes), so calculating the size of the transaction is not easy. Also, if you are dealing with very small outputs, it is possible that you'll need to include another output to pay the fee and that will change the size again and may change the fee. To avoid spending a lot of time with this calculations I recommend paying a higher fee than usual, let's say 0.002 TRC, and that will solve almost every case. If you get a code 22 error when broadcasting the transaction you'll know it is because the fee is not enough and you will need to recalculate.

Command:

createrawtransaction '[{"txid":"<transaction id>","vout":<output index number>}, {"txid":"<transaction id>","vout":<output index number>}...]' '{"<Address to pay>":<amount>, "<Address to pay>":<amount>...}' Notice how in the first part of the command we have the outputs, with the data of each output inside curly brackets and each output separated with commas. And how in the second part we have the addresses paid with their amounts, separated with commas. The ellipsis are not needed, they simply represent that you could keep introducing inputs/outputs in the same way.

Result:

<long hex of the transaction> Example:

We'll send 1.8 TRC to the address Xcy4V4iAugosK9eWt82y6HKmEmZu4TuD5X. We'll pay a fee of 0.002 TRC and send the change (0.795 TRC) back to the multisig address.

Create raw transaction >createrawtransaction '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1}]' '{"Xcy4V4iAugosK9eWt82y6HKmEmZu4TuD5X":1.8, "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL":0.795}'

>01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf9500100000000ffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf600100000000ffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000


3.2 Signature of the raw transaction This will usually be done by the creator of the transaction.

What you need:

Hex of the transaction created in the previous step Private key of the address used to sign by signatory 1 Transaction ids of the outputs of transactions to the multisig that are going to be used, with their output index number (vout) and scriptPubKey hex. Most of the data you'll have from the previous step. To obtain the scriptPubKey hex you only need to type in the console:

getrawtransaction <transaction id> 1 Don't forget the '1' at the end or you'll get a crazy block of data instead of an array. You'll get a lot of information for every vout in that transaction. The one you need is the hex string of the vout you are using.

Command:

signrawtransaction '<long hex of the transaction obtained in the previous step>' '[{"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}, {"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}...]' '["<signatory private key>"]' Result:

Array with <even longer hex of the transation> and a 'false' statement that indicates that the transaction is not yet fully signed. Example:

The owner of address 1 will sign the transaction. First he'll get the scriptPubKey from the transactions received using the command getrawtransaction.

Get raw transactions data >getrawtransaction 50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784 1 >{ "hex" : "01000000019d4b4e841753700cb255bd622e1b91074bfc19db1eb87fcdd7c534cf6d6f7b13000000006a47304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701210381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903ffffffff02c087b70a000000001976a914c0cf8285d89ab0d7d650d14762b0c54b60a806cc88ac000e27070000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000", "txid" : "50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784", "version" : 1, "locktime" : 0, "vin" : [ { "txid" : "137b6f6dcf34c5d7cd7fb81edb19fc4b07911b2e62bd55b20c705317844e4b9d", "vout" : 0, "scriptSig" : { "asm" : "304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701 0381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903", "hex" : "47304402207a2aa961bea5e652a7856f50918326ab952f229d32499b047dd47cfe9a8fe26402202f4e56ab50e29cb94f92ea378442b80295ddf5712e5a1e186cacaecfeed45d9701210381a58e09f94aada16b331307fb53c88196e5ed427e42d9d4d6ae3473187a8903" }, "sequence" : 4294967295 } ], "vout" : [ { "value" : 1.79800000, "n" : 0, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 c0cf8285d89ab0d7d650d14762b0c54b60a806cc OP_EQUALVERIFY OP_CHECKSIG", "hex" : "76a914c0cf8285d89ab0d7d650d14762b0c54b60a806cc88ac", "reqSigs" : 1, "type" : "pubkeyhash", "addresses" : [ "XtGLA83wYYYyhiENCwLYj32t8VDRJHWbcP" ] } }, { "value" : 1.20000000, "n" : 1, "scriptPubKey" : { "asm" : "OP_HASH160 25e3ff8ede18aeeacc948d17e641af482ac693d2 OP_EQUAL", "hex" : "a91425e3ff8ede18aeeacc948d17e641af482ac693d287", "reqSigs" : 1, "type" : "scripthash", "addresses" : [ "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL" ] } } ], "blockhash" : "0000000000025959d4dccb43857cdb806380353f5cf42e698d284b79f712d972", "confirmations" : 44, "time" : 1417558942, "blocktime" : 1417558942 }


>getrawtransaction 60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc 1 >{ "hex" : "01000000018497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf950000000006b4830450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d30121037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169dbffffffff02005a6202000000001976a9144005d5f5156a45bfdf016204e8fdaa950304b95988ac20a753080000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000", "txid" : "60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc", "version" : 1, "locktime" : 0, "vin" : [ { "txid" : "50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784", "vout" : 0, "scriptSig" : { "asm" : "30450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d301 037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169db", "hex" : "4830450220732a8ff7341551cd21eb098f901ff553aeaaf7e8f34cbdd1f2befced5396d683022100e885ca09fe3e8fbd3cf55cf19c1763cdce234d819702fa191aa8e39554c501d30121037673d7a1055dc51a64660ba578b49dab6a23fd950a4d9906ee713412fd2169db" }, "sequence" : 4294967295 } ], "vout" : [ { "value" : 0.40000000, "n" : 0, "scriptPubKey" : { "asm" : "OP_DUP OP_HASH160 4005d5f5156a45bfdf016204e8fdaa950304b959 OP_EQUALVERIFY OP_CHECKSIG", "hex" : "76a9144005d5f5156a45bfdf016204e8fdaa950304b95988ac", "reqSigs" : 1, "type" : "pubkeyhash", "addresses" : [ "XgXN51N5BBYa8dd6xBQwZqjG6mRSotj3oX" ] } }, { "value" : 1.39700000, "n" : 1, "scriptPubKey" : { "asm" : "OP_HASH160 25e3ff8ede18aeeacc948d17e641af482ac693d2 OP_EQUAL", "hex" : "a91425e3ff8ede18aeeacc948d17e641af482ac693d287", "reqSigs" : 1, "type" : "scripthash", "addresses" : [ "359N4Eq8EDv2ePhcFshWa8NeZMTCBWmaCL" ] } } ], "blockhash" : "0000000000025959d4dccb43857cdb806380353f5cf42e698d284b79f712d972", "confirmations" : 44, "time" : 1417558942, "blocktime" : 1417558942 }

First signature of transaction >signrawtransaction '01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf9500100000000ffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf600100000000ffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000' '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}]' '["XJ2BYs6CXzU6iyNXpiKdNn5MJRaFMd3C8ZxG4MJcvumnFUb4LCsN"]' >{ "hex" : "01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000b4004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000b500483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a05014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000", "complete" : false }



3.3 Signatory 1 sends the information to signatory 2 Signatory 1 will need to send the crazy long hex to signatory 2. Aside of that, it is useful if he also sends the data of outputs used in the transaction so he doesn't have to look for them.

3.4 Signatory 2 signs the transaction What you need:

Hex of the transaction sent by signatory 1 Private key of the address used to sign by signatory 2 Transaction ids of the outputs of transactions to the multisig that are going to be used, with their output index number (vout) and scriptPubKey hex. Signatory 1 can provide this. Command:

signrawtransaction '<hex of the transaction sent by signatory 1>' '[{"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}, {"txid":"<transaction id>","vout":<output index number>,"scriptPubKey":"<scriptPubKey hex>","redeemScript":"<redeemScript>"}...]' '["<signatory private key>"]' Result:

Array with <hilariously long hex of the transation> and a 'true' statement that indicates that the transaction is now fully signed. Example:

The owner of address 2 signs the transaction.

Second signature of transaction >signrawtransaction '01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000b4004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000b500483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a05014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000' '[{"txid":"50f96b51bf594b0998babb9fe7a4f3399b6c04c3836c1a7cde0e4a2413b29784","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}, {"txid":"60bfdb8aaf9fda189fcd2fce086da97bfb3e7fd3cb586f435e7ff1eb3f3041bc","vout":1,"scriptPubKey":"a91425e3ff8ede18aeeacc948d17e641af482ac693d287","redeemScript":"5221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53ae"}]' '["XEAEtxdUsHb77hDXLoPPsc9qxtzyqBzxbdVh5cJsuERpf1opopYu"]' >{ "hex" : "01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000fc004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb0147304402207725bec0286380d6ec91ed786f5dc766d4555d2e9a3b7e02e088ebf01d74387702201377d7a5e2e357bd5d5c156422850df3ecd006ce9c0614504b034aa774c6fa96014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000fdfd0000483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a0501473044022065a7abab6bf28a7b9047639da02d651e260d036c40fe25eec0e79dd7f9c4fdba0220386155b9318b2b8fd3bc715cf022c54d2dfacc984cac4937bca117253e659ee5014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000", "complete" : true }


3.5 Broadcast of the transaction This will usually be done by signatory 2, but once it is fully signed anyone could do it. This is the easiest step.

What you need:

Hilariously long hex of the transation from the previous step Command:

sendrawtransaction <hilariously long hex of the transation> Result:

<transaction id> And it is done. Sit down, relax and watch this beautiful transaction get included in a block.

Example:

The owner of address 2 sends the transaction to the network and gets the transaction id.

Transaction broadcast >sendrawtransaction 01000000028497b213244a0ede7c1a6c83c3046c9b39f3a4e79fbbba98094b59bf516bf95001000000fc004730440220282a525d4254babb991853ca55cc7ffe6a2dbdc76771e34cf6c05f2ae7ab5caa022069698132015411873be76a727c5dcf47895f1439076f62b013f14558db93efdb0147304402207725bec0286380d6ec91ed786f5dc766d4555d2e9a3b7e02e088ebf01d74387702201377d7a5e2e357bd5d5c156422850df3ecd006ce9c0614504b034aa774c6fa96014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffffbc41303febf17f5e436f58cbd37f3efb7ba96d08ce2fcd9f18da9faf8adbbf6001000000fdfd0000483045022100b8c2d316a855f56b196c27925162769987b323f99072b6f199919519e350a08e02205387d8bf0deaa9965384f4648adfe4edb73b72ed0d834a2be79574bbb6493a0501473044022065a7abab6bf28a7b9047639da02d651e260d036c40fe25eec0e79dd7f9c4fdba0220386155b9318b2b8fd3bc715cf022c54d2dfacc984cac4937bca117253e659ee5014c695221026c80e3efcdd4247ee29ee73829023aa3bcd464b709879128085d661c5a24fe0921032840e4d6aa1bea14d964e559f7b0ac01eac27274a03333d19faae8bee33c28a12103893120d3e2bac81f5bb6dbd320feed1f57ca39dd57a8c1266b9372acae45de8a53aeffffffff020095ba0a000000001976a914190177df014c749fb3ecad30e9e286988135165988ace012bd040000000017a91425e3ff8ede18aeeacc948d17e641af482ac693d28700000000 >a2d087c1423532abce2f439d2f3278ae260ea48c87778dffb9fe79e1a7042e40 Credits and more info Multisignature example by Holger Schinzel

Escrow example by Gavin Adresen

BIP0016 - Pay to Script Hash by Gavin Adresen

Bitcoin developer examples - P2SH Multisig

Transaction fees in Bitcoin wiki

Transactions in Bitcoin wiki