BlackMarket
Sr. Member
![*](https://bitcointalk.org/Themes/custom1/images/star.gif) ![*](https://bitcointalk.org/Themes/custom1/images/star.gif) ![*](https://bitcointalk.org/Themes/custom1/images/star.gif)
Offline
Activity: 322
Merit: 250
Super Smash Bros. Ultimate Available Now!
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
November 09, 2014, 08:55:55 PM |
|
this is amazing man thankyou ![Wink](https://bitcointalk.org/Smileys/default/wink.gif)
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 03, 2014, 01:35:35 PM |
|
A minor bug fix: yesterday bitikunn fixed the bug that caused newlines to disappear when displaying messages on the read tab.
Just to let you know, I've been working on automated message encoding lately and soon it will go live, so you no longer need to import addresses into your wallet manually in order to save your message in the block chain. when my automated encoder goes online, you can save your text even with wallet software that does not allow multisend.
|
|
|
|
luv2drnkbr
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 04, 2014, 08:26:51 PM Last edit: December 04, 2014, 08:40:33 PM by luv2drnkbr |
|
A side chain isn't necessary. This is exactly what OP_RETURN was *supposed* to be used for, so that you didn't bloat the utxo with unspendable transactions. You write your message and HASH it, and store the hash in an OP_RETURN. As long as you can keep the message intact, then since the hash is embedded, you can prove the message itself was timestamped at that date. By doing it that way, you still prove the message existed before a time, but you do it with the smallest possible footprint, and you aren't bloating the blockchain.
Now granted, you are *allowed* to do what you are doing. The whole purpose of bitcoin is the freedom to timestamp any statement. But there's a difference between being technically allowed to do something and not being a dick about abusing it. I very much hope a competitor comes along that does what you are doing but in a less shitty way.
Edit: For example, you could store the bulk of the message or even just its metadata on a side chain or other medium, and just the hash in Bitcoin's OP_RETURN. The side chain doesn't need to be as secure, because the authenticity of the message can be verified against the hash in Bitcoin's chain. So you could for example write a document, hash it, put the hash in an OP_RETURN, and then go make a namecoin name for the document with the hash and tx ID for the Bitcoin tx that has it, as well as a download link to the document. Even if the download link goes down, you can re-upload it elsewhere and update the namecoin info. Then you have an arbitrarily long verifiable document, just as secure as your method, but with no utxo bloat, and much less data clogging up the disks of users trying to help promote this great network.
The point of Bitcoin is that the data needs to be stored by every user to verify a chain of transactions. But for a single instance of data, you can store that data yourself, and use the OP_RETURN hash as the proof of existence. The data itself doesn't need to bloat the blockchain. There's no reason for other people to need to store it. It only matters to you and only needs to be reproduced by you. So if you can properly protect it and use Bitcoin to provably timestamp it, you get all the same security benefits.
Please please stop bloating the blockchain unnecessarily! There's a better way!
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 04, 2014, 09:00:31 PM |
|
...I very much hope a competitor comes along that does what you are doing but in a less shitty way.
Does the carrot they put into your butt still hurt sometimes? Is that the reason you came up with this post? I mean, you should be happy the carrot has no handle. Otherwise, you might get a heart attack next time someone decides to store their Valentine's Day wishes in the block chain. Using OP_RETURN is the shitty way because it's non standard and thus can theoretically be purged later. There's a word for people like you. What was it? Conceptual pedant? If there's a demand for such a service then there will be supply. People have been encoding plaintext in the block chain since the beginning of Bitcoin and they will continue doing it. Heck, even the great Satoshi Nakamoto has stored a plaintext message in the block chain. Do you see the hypocrisy already? By the way, cryptograffiti.info was originally not designed for storing messages in the block chain --- it was designed to discover and decode them.
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 04, 2014, 09:09:53 PM |
|
Please please stop bloating the blockchain unnecessarily! There's a better way!
I am aware of the possibility that message body could be stored anywhere and only the hash would be stored in the block chain. However, such a solution is no longer simple. People like simplicity and I cannot blame them for that. About bloating the block chain, go talk to satoshi dice or some other real bloater. Cryptograffiti.info is the last place that generates bloat. Think of it, if a hash of a message is the same length than the message itself then which one would you store in the block chain? I would laugh if you stored a hash of a 20 byte message in the block chain and the message itself in some side chain ![Cheesy](https://bitcointalk.org/Smileys/default/cheesy.gif)
|
|
|
|
molecular
Donator
Legendary
Offline
Activity: 2772
Merit: 1019
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 04, 2014, 10:03:08 PM |
|
You write your message and HASH it, and store the hash in an OP_RETURN. As long as you can keep the message intact
That's a different application (proof of existence), not storing of a message. Side-note: proof of existence can be done without OP_RETURN (by using sha256(document) as private key, deriving address from it and sending money to it). If the money is moved from that address (possible for anyone knowing document), the utxo resource is freed, too. Reliably (non-prunably) storing messages into the blockchain by definition bloats the blockchain. Since there's a price to be payed (coins destroyed, all other coins more valuable), I see don't see it as a big problem.
|
PGP key molecular F9B70769 fingerprint 9CDD C0D3 20F8 279F 6BE0 3F39 FC49 2362 F9B7 0769
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 05, 2014, 12:27:48 PM |
|
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 10, 2014, 12:58:18 AM |
|
As you can see http://cryptograffiti.info now has a new button just below the Import to wallet button. The Quick save to block chain button imports your message to one of my side projects --- paystamper --- which is currently in the beta phase but will go live soon. It allows you to store your message into the block chain with just a couple of mouse clicks. This feature is especially good for storing long texts into the block chain. Also, since paystamper is automatically constructing a raw transaction the stored plaintext will not get interrupted by the change address. Normally when you import the addresses to your wallet and make the transaction manually you have no way of controlling the position of the change address in the transaction. Bitcoin-core places it randomly somewhere. To be sure that your plaintext does not get interrupted by change address always use our newly finished quick save functionality. By doing so, you will also support further development of cryptograffiti.info. ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs28.postimg.org%2Fymyjjhijx%2Fquick_save.png&t=665&c=jwdrhU4PYOZ82Q)
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
December 27, 2014, 01:02:38 PM |
|
Here's some great news! Under the Write tab there is a button Import to Paystamper. PayStamper is essentially a means to let a dedicated cryptograffiti encoder save the message to the block chain for you. But that's not all you should know about that button. ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs15.postimg.org%2Fare8u0iu3%2Fcgd_write_tab.png&t=665&c=UlONvRC0AxmT1Q) Some time ago someone made a very interesting donation to cryptograffiti.info: https://blockchain.info/tx/075dacbc6eff01de36a1e03bb8b2fe58e49e9e5bd17f6e588b8ddf19f6bcb9e1![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs8.postimg.org%2F4tm7s9t39%2Fcgd_donation.png&t=665&c=WU5J8lHl5hBsvQ) As you can see, the donation contains duplicate output addresses (make sure to enable the Advanced mode at the bottom of blockchain.info's web page). So far I deemed it impossible to make Bitcoin transactions that contain duplicate outputs. However, it clearly is not impossible. Thanks to that particular donation I started to develop the needed functionality that would allow PayStamper to also include duplicate outputs in the same transaction. ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs17.postimg.org%2Fmarp9cvv3%2Fpaystamper_screen.png&t=665&c=WB_hhLhxbLuOxg) This functionality is now done. Whenever your message contains duplicate chunks and your normal wallet would not allow to make the transaction, import the message to PayStamper and it will save your text no matter how many duplicate outputs it contains. Because PayStamper is currently under development the paystamper.com and cryptograffiti.info/paystamper are not synchronized. The version that is pointed by the CryptoGraffiti.info's Write tab is the latest version of PayStamper so I'd recommend you use that link instead of going to paystamper.com. How to make a transaction to duplicate outputs? There are 2 ways. You could change the source code of your bitcoin-core wallet. Comment out the exception that is thrown on duplicate outputs when you attempt to create a raw transaction with RPC (see the highlighted line below, it's from rpcrawtransaction.cpp). ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs22.postimg.org%2Fnqn6feijl%2Fcreaterawtransaction.png&t=665&c=MhmHLbA_V66BkA) Or, the way paystamper does it --- before calling createrawtransaction replace the addresses with unique indexes that map your real output addresses. After receiving the hex string of the raw transaction replace the unique index address substrings with your actual output addresses. Here's the Lua code I implemented to do the trick explained above: function bitcoin_fun_create_raw_transaction(inputs, outputs) -- Because Lua dictionaries cannot have a predefined order we must -- construct this request manually. local outputlist = "{"; local k, v; local mapping = {}; local order = {}; local index; local index_hex; local hex; local salt = "MPGdJA7KX9TwBB7i"; for i=1, #outputs do k, v = next(outputs[i], nil);
index_hex = hash_SHA256(i..salt, false); index_hex = string.sub(index_hex, 1, 40); index = string.fromhex(index_hex); index = Bitcoin.stringToAddress(index); hex = Bitcoin.addressToString(k); hex = string.tohex(hex); mapping[index_hex] = hex; table.insert(order, index_hex); --log("mapping["..index_hex.."] = "..hex); outputlist = outputlist..'"'..index..'": '..v; if (i < #outputs) then outputlist = outputlist .. ", "; end; end; outputlist = outputlist .. "}"; local inputlist = JSON:encode(inputs); local request = '{\n'.. ' "id": 1, \n'.. ' "jsonrpc": "2.0", \n'.. ' "method": "createrawtransaction", \n'.. ' "params": [ '..inputlist..', '..outputlist..' ]\n'.. '}'; --warn(request); response = url_post("http://"..bitcoin.rpc_user..":" ..bitcoin.rpc_password.."@" ..bitcoin.rpc_ip..":" ..bitcoin.rpc_port.."/", request); --warn(response); if (response ~= nil) then local t = JSON:decode(response); if (t ~= nil and type(t) == "table") then if (type(t.error) == "table" and type(t.error.message) == "string" ) then log("Bitcoin createrawtransaction: "..t.error.message); else local k,v; local s = 1; local e; local bad = nil; -- Replace indexes with real output hex representations that may -- contain duplicates. for i=1, #order do k = order[i]; v = mapping[k];
s, e = string.find(t.result, k, s, true); if (s ~= nil and e ~= nil) then t.result = t.result:sub(1, s-1) .. v .. t.result:sub(e+1); s = e + 1; else bad = k; end; end; --warn(t.result); if (bad ~= nil) then warn("Index hex "..bad.." not found from raw transaction."); return nil; end; end; return t.result; end; end; return nil; end; This added functionality should be a lifesaver for people who want to save ASCII art or other texts that contain repetition to the block chain.
|
|
|
|
btczar
Newbie
Offline
Activity: 42
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 13, 2015, 12:23:04 PM |
|
Is it possible to store a bip38 encrypted private key in the blockchain...that way you only ever have to remember the block number, and your password, and you have access to your money right?
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 13, 2015, 01:12:24 PM |
|
Is it possible to store a bip38 encrypted private key in the blockchain...that way you only ever have to remember the block number, and your password, and you have access to your money right?
I'm pretty sure you can store anything in the block chain as long as your transaction is not larger than what the maximum block size allows it to be.
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 14, 2015, 11:53:26 AM |
|
Yesterday I received a very generous donation of 0.22742272 BTC from a bitcointalk user xumuku. You can see the donation details here and here. Turns out that people are missing for the functionality that would allow them to save UTF-8 encoded messages in the block chain. For example, messages in the Russian language. I immediately developed the required functionality to recognize UTF-8 messages in the bitcoin's block chain and our telnet interface already displays such messages correctly: ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs29.postimg.org%2Fcf7sh3saf%2Fcgd_utf8.png&t=665&c=Lt6lkw2rlufG_Q) You can use our telnet user interface by typing telnet carlnet.ee 4000 in your Linux terminal. bitikunn is currently working on the browser based interface of cryptograffiti.info to make it decode UTF-8 messages correctly too. He will soon add a possiblity to convert UTF-8 messages into bitcoin addresses. Also, this donation from xumuku is an ideal sample use case for cryptograffiti --- it allows you to attach a custom message to your donation (a feature request, for example).
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 14, 2015, 04:15:55 PM |
|
...And I just got PayStamper to display UTF-8 messages: ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs24.postimg.org%2Fg2a1f8jut%2Fpaystamper.png&t=665&c=f8nKNW0yozb6sQ)
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 15, 2015, 12:22:10 PM |
|
I hereby announce that CryptoGraffiti.info now has full support for UTF-8 encoding: ![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fs10.postimg.org%2Fx5yd3d6jt%2Fcgd.png&t=665&c=WB9qkydOBKqfVw)
|
|
|
|
btc_enigma
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 16, 2015, 07:13:48 PM |
|
Really great idea of using bitcoin address and nice implementation too ! Keep on the good work
About the controversy of not using OP_RETURN , I support this service. Until major wallets don't support OP_RETURN , I don't see a reason why such a simple service should not be used, when already SD is spamming the blockchain.
Can you add a search feature in Read , that would be great
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 20, 2015, 05:32:54 PM |
|
Really great idea of using bitcoin address and nice implementation too ! Keep on the good work
About the controversy of not using OP_RETURN , I support this service. Until major wallets don't support OP_RETURN , I don't see a reason why such a simple service should not be used, when already SD is spamming the blockchain.
Can you add a search feature in Read , that would be great
Yeah, search feature has long been in our TODO list. However, it would require a big amount of work and that's why we haven't yet implemented it. The guy who wanted UTF-8 support donated us 50$ worth of bitcoins. We implemented UTF-8 in 3 days. I think if we see people using cryptograffiti.info and making more donations then we could find some time to develop the search feature. I've also received a feature request for saving images in the block chain. I don't want to sound money greedy but donations are our main motivation to implement new features, since we're doing it from our free time.
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 21, 2015, 09:42:05 AM |
|
Ok, I will investigate what happened. The good news is that the error is order specific which means that the error can be reproduced with your order details (I already tried it and it failed again but another order from me with the details "test" was successful).
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 22, 2015, 12:50:09 PM |
|
Your message is now on the block chain, I saved it myself: https://blockchain.info/tx/ed30ffbf6e0fb58dcdd1aba2d8f8e9a01a32ce982acdd91dbc42c35733f4c08cI don't know why it fails because the encoder bot in my local machine does not fail. Only the stationary bot fails with an internal error and since it's located 20 km from me, I cannot immediately debug it. I will remotely disable it until the issue is sorted out. In the meantime our backup encoder should be able to handle all new orders.
|
|
|
|
Hyena
Legendary
Offline
Activity: 2114
Merit: 1015
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
February 25, 2015, 12:10:55 PM |
|
Your message is now on the block chain, I saved it myself: https://blockchain.info/tx/ed30ffbf6e0fb58dcdd1aba2d8f8e9a01a32ce982acdd91dbc42c35733f4c08cI don't know why it fails because the encoder bot in my local machine does not fail. Only the stationary bot fails with an internal error and since it's located 20 km from me, I cannot immediately debug it. I will remotely disable it until the issue is sorted out. In the meantime our backup encoder should be able to handle all new orders. Thank you very much for looking into this and handling my issue as good as possible! Hey, thanks for notifying me about this malfunction. Turned out that the PC that runs the encoder bot is sometimes slowed down due to heavy load on its CPU. Since I originally unlocked the wallet for just 5 seconds it turned out to be not enough and thus signing a raw transaction failed. I increased the time window to 30 seconds which should be more than enough.
|
|
|
|
|