var run = function ( ) {
bitcore = typeof ( bitcore ) === 'undefined' ? require ( '../bitcore' ) : bitcore ;
var networks = require ( '../networks' ) ;
var WalletKey = bitcore . WalletKey ;
var Script = bitcore . Script ;
var Builder = bitcore . TransactionBuilder ;
var opts = { network : networks . testnet } ;
console . log ( '## Network: ' + opts . network . name ) ;
var input = { } ;
input . addr = "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp" ;
input . priv = "cS62Ej4SobZnpFQYN1PEEBr2KWf5sgRYYnELtumcG6WVCfxno39V" ;
// Complete with the corresponding UTXO you want to use
var utxos = [
{
address : "n2hoFVbPrYQf7RJwiRy1tkbuPPqyhAEfbp" ,
txid : "e4bc22d8c519d3cf848d710619f8480be56176a4a6548dfbe865ab3886b578b5" ,
vout : 1 ,
ts : 1396290442 ,
scriptPubKey : "76a914e867aad8bd361f57c50adc37a0c018692b5b0c9a88ac" ,
amount : 0.3795 ,
confirmations : 7
}
] ;
var privs = [
"cMpKwGr5oxEacN95WFKNEq6tTcvi11regFwS3muHvGYVxMPJX8JA" ,
"cVf32m9MR4vxcPwKNJuPepUe8XrHD2z63eCk76d6njRGyCkXpkSM" ,
"cQ2sVRFX4jQYMLhWyzz6jTQ2xju51P36968ecXnPhRLKLH677eKR" ,
"cSw7x9ERcmeWCU3yVBT6Nz7b9JiZ5yjUB7JMhBUv9UM7rSaDpwX9" ,
"cRQBM8qM4ZXJGP1De4D5RtJm7Q6FNWQSMx7YExxzgn2ehjM3haxW" ,
] ;
var pubkeys = [ ]
privs . forEach ( function ( p ) {
var wk = new WalletKey ( opts ) ;
wk . fromObj ( { priv : p } ) ;
pubkeys . push ( bitcore . buffertools . toHex ( wk . privKey . public ) ) ;
} ) ;
// multisig p2sh
var opts = { nreq : 3 , pubkeys : pubkeys } ;
// p2scriphash p2sh
//var opts = [{address: an_address}];
var info = Builder . infoForP2sh ( opts , 'testnet' ) ;
var p2shScript = info . scriptBufHex ;
var p2shAddress = info . address ;
var outs = [ { address : p2shAddress , amount : 0.05 } ] ;
var tx = new Builder ( opts )
. setUnspent ( utxos )
. setOutputs ( outs )
. sign ( [ input . priv ] )
. build ( ) ;
var txHex = tx . serialize ( ) . toString ( 'hex' ) ;
console . log ( '## p2sh address: ' + p2shAddress ) ; //TODO
console . log ( '\n1) SEND TO P2SH TX: ' , txHex ) ;
console . log ( '[this example originally generated TXID: c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7 on testnet]\n\n\thttp://test.bitcore.io/tx/c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7\n\n' ) ;
//save scriptPubKey
var scriptPubKey = tx . outs [ 0 ] . s . toString ( 'hex' ) ;
/ *
*
* REDDEEM TX
* /
var utxos2 = [
{
address : p2shAddress ,
txid : "c2e50d1c8c581d8c4408378b751633f7eb86687fc5f0502be7b467173f275ae7" ,
vout : 0 ,
ts : 1396375187 ,
scriptPubKey : scriptPubKey ,
amount : 0.05 ,
confirmations : 1
}
] ;
outs = [ { address : input . addr , amount : 0.04 } ] ;
var hashMap = { } ;
hashMap [ p2shAddress ] = p2shScript ;
var b = new Builder ( opts )
. setUnspent ( utxos2 )
. setHashToScriptMap ( hashMap )
. setOutputs ( outs )
. sign ( privs ) ;
tx = b . build ( ) ;
console . log ( 'Builder:' ) ;
console . log ( '\tSignatures:' + tx . countInputMissingSignatures ( 0 ) ) ;
console . log ( '\t#isFullySigned:' + b . isFullySigned ( ) ) ;
console . log ( 'TX:' ) ;
console . log ( '\t #isComplete:' + tx . isComplete ( ) ) ;
var txHex = tx . serialize ( ) . toString ( 'hex' ) ;
console . log ( '2) REDEEM SCRIPT: ' , txHex ) ;
console . log ( '[this example originally generated TXID: 8284aa3b6f9c71c35ecb1d61d05ae78c8ca1f36940eaa615b50584dfc3d95cb7 on testnet]\n\n\thttp://test.bitcore.io/tx/8284aa3b6f9c71c35ecb1d61d05ae78c8ca1f36940eaa615b50584dfc3d95cb7\n\n' ) ;
/ *
// To send TX with RPC:
var RpcClient = bitcore . RpcClient ;
var config = {
protocol : 'http' ,
user : 'user' ,
pass : 'pass' ,
host : '127.0.0.1' ,
port : '18332' ,
} ;
var rpc = new RpcClient ( config ) ;
rpc . sendRawTransaction ( txHex , function ( err , ret ) {
console . log ( 'err' , err ) ; //TODO
console . log ( 'ret' , ret ) ; //TODO
process . exit ( - 1 ) ;
} ) ;
} ;
* /
} ;
// This is just for browser & mocha compatibility
if ( typeof module !== 'undefined' ) {
module . exports . run = run ;
if ( require . main === module ) {
run ( ) ;
}
} else {
run ( ) ;
}