Pages:
Author

Topic: CryptoGraffiti - Block Chain Message Encoder & Decoder - page 6. (Read 35471 times)

member
Activity: 113
Merit: 10
As much as I like seeing things like cryptograffiti.info I wonder if making it really easy to store images in the blockchain could be very dangerous for Bitcoin.
For example shady people will for sure start use it to store their illegal pictures into the blockchain, not erasable for all eternity.
Storing the blockchain on your machine then becomes a de facto crime.
If you make it possible to view embedded pictures on cryptograffiti.info just visiting the site will become a crime.

Think about if you really want such a situation and if the benefits of a small donation will outweigh the long term disadvantages to bitcoin itself or to your website!

Edit:
I am aware that storing things on the blockchain has been possible for a long time and it is probably already being abused for things I mentioned about. But it kind of is not very widely known and perhaps it's best if we could keep it that way...
Seriously, if the press will pick up on what crap can or is already stored on the blockchain it's goodbye bitcoin.
legendary
Activity: 2114
Merit: 1015
Yesterday cryptograffiti.info received a generous donation of ~0.9 bitcoins from the bitcointalk forum user xumuku. xumuku's wish is that we would implement functionality that is required to store images in the Bitcoin's block chain. As of today, me and bitikunn have started the early development of the requested feature. I will keep you updated about the progress in this topic, but I must say that this may take between several weeks to a month due to the functional complexity of this task. Your donations motivate us to enhance CryptoGraffiti.info. If you like what we're doing, please consider donating us some bitcoins as it makes a huge difference for us.
legendary
Activity: 2114
Merit: 1015
Your message is now on the block chain, I saved it myself:
https://blockchain.info/tx/ed30ffbf6e0fb58dcdd1aba2d8f8e9a01a32ce982acdd91dbc42c35733f4c08c

I 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.
legendary
Activity: 2114
Merit: 1015
I have tried to sent two message (order 883 and 884) with Pay Stamper and they both failed. Can you check what happened?




883 TXID: 2f7a4f16035998d71a501b467dd700279926f41f3a88b8cfa89c5322242e1295
884 TXID: 71e171e9ab1f955b52d25b190201adf85a6b1ca1592de19f188b8fc530986d4f

Your message is now on the block chain, I saved it myself:
https://blockchain.info/tx/ed30ffbf6e0fb58dcdd1aba2d8f8e9a01a32ce982acdd91dbc42c35733f4c08c

I 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.
legendary
Activity: 2114
Merit: 1015
I have tried to sent two message (order 883 and 884) with Pay Stamper and they both failed. Can you check what happened?




883 TXID: 2f7a4f16035998d71a501b467dd700279926f41f3a88b8cfa89c5322242e1295
884 TXID: 71e171e9ab1f955b52d25b190201adf85a6b1ca1592de19f188b8fc530986d4f

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).
legendary
Activity: 2114
Merit: 1015
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.
hero member
Activity: 692
Merit: 569
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
legendary
Activity: 2114
Merit: 1015
I hereby announce that CryptoGraffiti.info now has full support for UTF-8 encoding:

legendary
Activity: 2114
Merit: 1015
...And I just got PayStamper to display UTF-8 messages:
legendary
Activity: 2114
Merit: 1015
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:


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).
legendary
Activity: 2114
Merit: 1015
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.
newbie
Activity: 42
Merit: 0
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?
legendary
Activity: 2114
Merit: 1015
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.



Some time ago someone made a very interesting donation to cryptograffiti.info:
https://blockchain.info/tx/075dacbc6eff01de36a1e03bb8b2fe58e49e9e5bd17f6e588b8ddf19f6bcb9e1



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.



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).


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:
Code:
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.
legendary
Activity: 2114
Merit: 1015
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.

legendary
Activity: 2114
Merit: 1015
is this a Commodore 64 soundtrack with the use of the famous C64 SID?

https://www.youtube.com/watch?feature=player_embedded&v=oKIiFSDtEnA



I guess so, I love keygen music. I have added keygen soundtracks to nearly every video I have made Cheesy, for example check out these:
http://www.hyena.net.ee/?p=127
http://www.hyena.net.ee/?p=199
http://www.hyena.net.ee/?p=173

edit: found some more
https://www.youtube.com/watch?v=SQ39yMmWKlc
https://www.youtube.com/watch?v=fvvJ2PoqqBo
legendary
Activity: 2856
Merit: 1520
Bitcoin Legal Tender Countries: 2 of 206
is this a Commodore 64 soundtrack with the use of the famous C64 SID?

https://www.youtube.com/watch?feature=player_embedded&v=oKIiFSDtEnA

donator
Activity: 2772
Merit: 1019
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.
legendary
Activity: 2114
Merit: 1015
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
legendary
Activity: 2114
Merit: 1015
...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.
Code:
return;
hero member
Activity: 793
Merit: 1026
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!
Pages:
Jump to: