-
-
Save matthieu/d78bd39a6709c5be3dcd to your computer and use it in GitHub Desktop.
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<title>Block Cypher</title> | |
<!-- Bootstrap --> | |
<link href="css/bootstrap.css" rel="stylesheet"> | |
<link href="css/font-awesome.css" rel="stylesheet"> | |
<link href="css/style.css" rel="stylesheet"> | |
<link href="css/custom.css" rel="stylesheet"> | |
<link href="css/prism.css" rel="stylesheet"> | |
<!--link href="css/animation.css" rel="stylesheet"--> | |
<link href="css/allinone_carousel.css" rel="stylesheet" type="text/css"> | |
<link href='http://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'> | |
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | |
<!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | |
<!--[if lt IE 9]> | |
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> | |
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | |
<![endif]--> | |
</head> | |
<body> | |
<!-- nav st--> | |
<nav class="navbar navbar-default navbar-fixed-top" role="navigation"> | |
<div class="container"> | |
<!-- Brand and toggle get grouped for better mobile display --> | |
<div class="navbar-header"> | |
<button type="button" class="navbar-toggle collapsed"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> | |
<a class="navbar-brand" href="#"> | |
<img src="img/logo_50px.png" alt=""> | |
<div class="navbar-name">B<span class="smaller">LOCK</span><span class="alt-color">C<span class="smaller">YPHER</span></span></div> | |
</a> | |
</div> | |
<!-- Collect the nav links, forms, and other content for toggling --> | |
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | |
<div class="single-page-nav"> | |
<ul class="nav navbar-nav navbar-right"> | |
<li><a href="../reference.html">Reference</a></li> | |
</ul> | |
<ul class="nav navbar-nav navbar-right"> | |
<li><a href="../index.html">Documentation</a></li> | |
</ul> | |
<ul class="nav navbar-nav navbar-right"> | |
<li><a href="http://www.blockcypher.com">Home</a></li> | |
</ul> | |
</div> | |
</div> | |
<!-- /.navbar-collapse --> | |
</div> | |
<!-- /.container-fluid --> | |
</nav> | |
<!-- nav nd--> | |
<!-- bg-primary st--> | |
<section id="home" class="bg-primary"> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-md-12 text-center"> | |
<h1>BlockCypher ❤ BitHack</h1> | |
<h2>@blockcypher — [email protected] — ☏ 415-868-5675</h2> | |
</div> | |
</div> | |
</div> | |
</div> | |
</section> | |
<section id="main" class="bg-danger"> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-md-12"> | |
<form role="form" class="form-inline"> | |
<div class="form-group"> | |
<input type="text" class="box form-control input-lg" maxlength="40" width="40" style="width: 300px;" placeholder="Type something good and short..."/> | |
<button type="button" class="send btn btn-primary btn-lg" id="browser-websocket">Send it over!</button> | |
</div> | |
</form> | |
<div class="log" style="font-size: 24px; padding-top: 30px; min-height: 300px;"></div> | |
<script src="js/prism.js"></script> | |
<script src="js/bitcoinjs-min.js"></script> | |
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script> | |
</div> | |
</div> | |
</div> | |
</section> | |
<!--Footer st --> | |
<footer> | |
<div class="container"> | |
<div class="row"> | |
<div class="col-md-12 col-sm-6 col-md-6"> | |
<p>We are social <a href="https://twitter.com/blockcypher"><i class="fa fa-twitter"></i></a> <a href="https://www.facebook.com/blockcypher"><i class="fa fa-facebook"></i></a> <!--a href="#"><i class="fa fa-linkedin"></i></a--> </p> | |
</div> | |
<div class="col-md-12 col-sm-6 col-md-6"> | |
<p class="text-right">© 2014 - BlockCypher</p> | |
</div> | |
</div> | |
</div> | |
</footer> | |
<!--Footer nd --> | |
<script> | |
var bytesToHex = Bitcoin.convert.bytesToHex; | |
var hexToBytes = Bitcoin.convert.hexToBytes; | |
var mula = { | |
private : "1af97b1f428ac89b7d35323ea7a68aba8cad178a04eddbbf591f65671bae48a2", | |
public : "03bb318b00de944086fad67ab78a832eb1bf26916053ecd3b14a3f48f9fbe0821f", | |
address : "mtWg6ccLiZWw2Et7E5UqmHsYgrAi5wqiov" | |
} | |
function hexToString(hexstr) { return Bitcoin.convert.bytesToString(Bitcoin.convert.hexToBytes(hexstr)); }; | |
function sign(data, address) { | |
var key = Bitcoin.ECKey.fromHex(address.private); | |
data.pubkeys = []; | |
data.signatures = data.tosign.map(function(tosign) { | |
data.pubkeys.push(address.public); | |
return bytesToHex(key.sign(hexToBytes(tosign))); | |
}); | |
return data; | |
} | |
function sendNullData(str) { | |
var newtx = { | |
"inputs": [{"addresses": [mula.address]}], | |
"outputs": [{addresses: [str], value: 1, script_type: "null-data"}] | |
}; | |
$.post("http://api.blockcypher.com/v1/btc/test3/txs/new", JSON.stringify(newtx), function(tx) { | |
var signedtx = sign(tx, mula); | |
$.post("http://api.blockcypher.com/v1/btc/test3/txs/send", JSON.stringify(signedtx), function(senttx) { | |
console.log("Sent", senttx.tx.hash); | |
}); | |
}); | |
} | |
$(function() { | |
$(".send").click(function() { sendNullData($(".box").val()); $(".box").val(''); }) | |
var ws = new WebSocket("ws://socket.blockcypher.com/v1/btc/test3"); | |
setInterval(function() {ws.send(JSON.stringify({event: 'ping'}))}, 5000) | |
ws.onmessage = function(evt) { | |
var tx = JSON.parse(evt.data); | |
if (tx.hash) { | |
$('.log').prepend("<div>"+tx.received.substring(11, 19)+" | "+tx.hash.substring(0, 8)+ | |
"... > " + hexToString(tx.outputs[0].script.substring(2)) + "</div>"); | |
} | |
} | |
ws.onopen = function(event) { | |
ws.send(JSON.stringify({event: "unconfirmed-tx", script: "null-data"})); | |
} | |
}); | |
</script> | |
</body> | |
</html> |
Nothing should have changed with that address, I'd guess it's more likely related to a decoding issue when using bitcoin-js. What version are you using, the one linked with this script?
I fetched it from https://cdnjs.cloudflare.com/ajax/libs/bitcoinjs-lib/0.2.0-1/bitcoinjs-min.js. But http://api.blockcypher.com/v1/btc/test3/txs/new is returning 400 at line 135 itself, before decoding.
Here's the payload:
{"inputs":[{"addresses":["mnXp7HZ7aH4PjT21Q2BvWzeCdigXo1CQGX"]}], "outputs":[{"addresses":["Mystring"],"value":1,"script_type":"null-data"}]}:
Bump
I keep getting this error when attaching a 32 byte hash to a OP_RETURN:
Error creating transaction skeleton: {
errors: [ { error: 'Error no data to embed for OP_RETURN output 1.' } ],
my txskeleton:
Creating transaction skeleton with requestBody: {
"inputs": [
{
"addresses": [
"bc1qu05e8nvpy5f9pyyxs9c76drvksfqsy6gztf70u"
]
}
],
"outputs": [
{
"addresses": [
"bc1quul9kxpd63mghcgj6h5gc7g5c2zqmnmzex94ml"
],
"value": 700
},
{
"script_type": "null-data",
"data": "84e4111fc915e6465cc024512b590a93e7fd99bdc4b50f15e45b7cae3c7588ea",
"value": 0
}
],
"token": "8a2fe74g171c45379ad7bc3b655510ef"
}
any ideas?
Hi matthieu, /txs/new returns "Error building transaction: Address mystring is of unknown size." when I try the above code. Has there been a change in the blockcypher APIs request format since you wrote this? I went through the documentation, but it doesn't has clear examples for OP_return transactions..