'use strict'; var run = function() { // replace '../bitcore' with 'bitcore' if you use this code elsewhere. var bitcore = require('../bitcore'); var networks = require('../networks'); var Script = bitcore.Script; var WalletKey = bitcore.WalletKey; var buffertools = bitcore.buffertools; var Address = bitcore.Address; var util = bitcore.util; var opts = { network: networks.testnet }; var p = console.log; var wk = new WalletKey(opts); wk.generate(); var wkObj = wk.storeObj(); var s = Script.createPubKeyOut(wk.privKey.public); p('\nScript PubKey:'); p('\tHex : ' + buffertools.toHex(s.buffer)); p('\tHuman : ' + s.toHumanReadable()); p('\tKey -------------------------------'); console.log('\tPrivate: ' + wkObj.priv); console.log('\tPublic : ' + wkObj.pub); console.log('\tAddr : ' + wkObj.addr); s = Script.createPubKeyHashOut(wk.privKey.public); p('\nScript PubKeyHash:'); p('\tHex : ' + buffertools.toHex(s.buffer)); p('\tHuman : ' + s.toHumanReadable()); p('\tKey -------------------------------'); console.log('\tPrivate: ' + wkObj.priv); console.log('\tPublic : ' + wkObj.pub); console.log('\tAddr : ' + wkObj.addr); var wks = []; var pubs = []; for (var i = 0; i < 5; i++) { wks[i] = new WalletKey(opts); wks[i].generate(); pubs.push(wks[i].privKey.public); } s = Script.createMultisig(3, pubs); p('\nScript MultiSig (3 out of 5 required signatures):'); p('\tHex : ' + buffertools.toHex(s.buffer)); p('\tHuman : ' + s.toHumanReadable()); for (i = 0; i < 5; i++) { wkObj = wks[i].storeObj(); p('\tKey [' + i + '] -------------------------------'); console.log('\tPrivate: ' + wkObj.priv); console.log('\tPublic : ' + wkObj.pub); console.log('\tAddr : ' + wkObj.addr); } var hash = util.sha256ripe160(s.buffer); s = Script.createP2SH(hash); p('\nScript P2SH:'); p('\tHex : ' + buffertools.toHex(s.buffer)); p('\tHuman : ' + s.toHumanReadable()); p('\tScript Hash: ' + buffertools.toHex(hash)); var a = new Address(networks.livenet.P2SHVersion, hash); p('\tp2sh Addr: ' + a.toString()); }; module.exports.run = run; if (require.main === module) { run(); }