Skip to content

Instantly share code, notes, and snippets.

@melvincarvalho
Forked from afk11/gist:a9d5198c205879c25c01
Last active August 29, 2015 14:07
Show Gist options
  • Save melvincarvalho/6f17f6e227837e93de53 to your computer and use it in GitHub Desktop.
Save melvincarvalho/6f17f6e227837e93de53 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<title>User Registration</title>
<script src="bitcorelatest.js"></script>
<script>
// Derive given private key index..
function get_bip32_key(path) {
var bitcore = require('bitcore');
var seed = bitcore.util.sha256ripe160("435eb84a7dee2822cdd6c64db19f6262f31ddbaf07968e3a17a84c0e70c1e825plp");
var hkey = bitcore.HierarchicalKey.seed(seed).derive(path);
var buf = new bitcore.buffertools.Buffer(hkey.eckey.private, 'hex');
var priv_key = new bitcore.PrivateKey(bitcore.networks.livenet.privKeyVersion, buf, true);
var wif = priv_key.as('base58');
var address = bitcore.Address.fromPubKey(hkey.eckey.public, bitcore.networks.livenet.addressVersion).as('base58');
// Returns whole object, ie, for eckey.
return hkey;
}
function get_bip32_key_p() {
return {
wif:"KwRtgcVyY3GFqTGa8tXFqDpaJsLDBb6RDxevx3FTMaCkfYt1KeXu",
address:"1FgpvvivM9t91v3x1juVqhxW91cJULkt5K"
};
}
function get_wallet_key(hkey) {
// Extract WIF from hkey.
var bitcore = require('bitcore');
var buf = new bitcore.buffertools.Buffer(hkey.eckey.private, 'hex');
var priv_key = new bitcore.PrivateKey(bitcore.networks.livenet.privKeyVersion, buf, true);
var wif = priv_key.as('base58');
return wif;
}
function parse_transaction() {
// Parse an element containing the transaction.
var bitcore = require('bitcore');
var raw_transaction = document.getElementById('raw_transaction').value;
var tx_buffer = new bitcore.buffertools.Buffer(raw_transaction, 'hex');
var tx2 = new bitcore.Transaction();
tx2.parse(tx_buffer);
return tx2;
}
function get_utxos() {
// Hard code UTXO's for now, should be automated eventually.
var v = [
{
address: "3FiwAZDygqq3CEjrLdAwRecsHTeipv8arQ",
txid: "1ecda8063e6c151b48d8af4eeaea6598ca6aa9581b37ff46af69b4105176c811",
vout: 0,
ts: 1404212033,
scriptPubKey: 'a91499ee9eeb90c5c77d0219b3c6cab32823aad9b6dc87',
amount: 0.0004,
confirmations: 40
}
];
return v;
}
function get_outs() {
// See above; hardcoded, but will be decoded from raw tx eventually.
return [
{address:"1Dw8i8iJEQ7CirWsYRrG68yjrNoEorRgMD",amount:0.000102},
{address:"1Q8wv3hmifmrkgYAziJibMWybubNbpV1sh",amount:0.000198}
];
}
function get_hashMap(info) {
var bitcore = require('bitcore');
var map = {};
map[info.address] = info.scriptBufHex;
return map;
}
function go() {
var bitcore = require('bitcore');
var bip32 = get_bip32_key("m/0'/1");
//var bip32 = get_bip32_key_p();
var serialize_keys = [];
var public_keys = ["0297c0561ee76e84465f424f2625f4af8d0037bce55119166ff9ecd5460ed40a65","02967615111830662669a747c06e5a62caceb08db6ae63f6308f543b41d7ab3ebf","04fc97d46d5c117eb3c631af52dade567d6ecce84935f3f0ce5df869fe120760f2ee4ecdec9f9efccbe05fb1debca6da055198cfe8adab8795e271916edae9ebc2"];
for(var i = 0; i < public_keys.length; i++) {
var c = new bitcore.buffertools.Buffer(public_keys[i]);
serialize_keys.push(c);
}
var opts = {nreq:2, pubkeys:public_keys};
// info { script, scriptBufHex, hash, address }
var info = bitcore.TransactionBuilder.infoForP2sh(opts);
var scriptPubKey = bitcore.Script.createP2SH(info.hash);
var orig_tx = parse_transaction();
var hashMap = get_hashMap(info);
var wallet = get_wallet_key(bip32);
var utxos = get_utxos();
var outs = get_outs();
var signed_transaction = new bitcore.TransactionBuilder()
.setUnspent(utxos)
.setHashToScriptMap(hashMap)
.setOutputs(outs)
.sign([wallet])
.build();
console.log("complete? "+signed_transaction.isComplete() );
var txHex = signed_transaction.serialize().toString('hex');
console.log("txhex: "+txHex);
}
</script>
</head>
<body>
<!-- scriptSig: 0 <rs> -->
<input type="hidden" id="raw_transaction" name="raw_transaction" value="0100000001aac8f18064cd9adff7c01c5af68e2e7db3f89a3d89a5a68288effda51ef0f606000000008c004c8952210297c0561ee76e84465f424f2625f4af8d0037bce55119166ff9ecd5460ed40a652102967615111830662669a747c06e5a62caceb08db6ae63f6308f543b41d7ab3ebf4104fc97d46d5c117eb3c631af52dade567d6ecce84935f3f0ce5df869fe120760f2ee4ecdec9f9efccbe05fb1debca6da055198cfe8adab8795e271916edae9ebc253aeffffffff02d8270000000000001976a9148dde681a2482740d5022bfd61a00c5c9ecc6b7fe88ac584d0000000000001976a914fdcba528f3f350b6ebf95d9ab1bff1172265764a88ac00000000" />
<input type="hidden" id="redeem_script" name="redeem_script" value="52210297c0561ee76e84465f424f2625f4af8d0037bce55119166ff9ecd5460ed40a652102967615111830662669a747c06e5a62caceb08db6ae63f6308f543b41d7ab3ebf4104fc97d46d5c117eb3c631af52dade567d6ecce84935f3f0ce5df869fe120760f2ee4ecdec9f9efccbe05fb1debca6da055198cfe8adab8795e271916edae9ebc253ae" />
<input type="hidden" id="password" name="password" value="435eb84a7dee2822cdd6c64db19f6262f31ddbaf07968e3a17a84c0e70c1e825plp" placeholder="Password" /><br />
<input type="submit" name="submit" value="Submit" onclick="go()" />
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment