Created
July 5, 2014 12:32
-
-
Save afk11/a9d5198c205879c25c01 to your computer and use it in GitHub Desktop.
Bitcore BIP32 key deriv + raw transaction signing (not working at present)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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