Storing `string` is expensive on smart-contracts and charge us expensive fees even if we want to store them in `Events`. Instead I want to store each string's decoded version in a smart-contract in order to save some memory and gas-fee charge. Overall, when I return string's decoded version, it also should be able to decoded into the original string.

As an example I want to pass my string as [compressing base64 input][1] format and its [code][2]. But when I stored compressed base64 string on a smart-contract, its returned version is not same as the one I passed.

Example `example.js`:

    var Base64String = require('./base64-string');

    var string = "QmWmyoMoctfbAaiEs2G46gpeUmhqFRDW6KWo64y5r581Vm";
    console.log("Size of sample is: " + string.length);
    var compressed = Base64String.compress(string);
    console.log("compressed:" + compressed)
    console.log("Size of compressed sample is: " + compressed.length);
    string = Base64String.decompress(compressed);
    console.log("Sample is: " + string);

Results node `example.js`: //as you can see 46 length string is compressed into 19 length.

    Size of sample is: 46
    compressed: ł斦쪃⡲ퟛƨ蒳憸幒桪ᔐ훨ꖨ릯鼵嗐
    Size of compressed sample is: 19
    Sample is: QmWmyoMoctfbAaiEs2G46gpeUmhqFRDW6KWo64y5r581VmAA


----------------------------

Passed base64 compressed string: //I want to store it on my smart-contract.

    ł斦쪃⡲ퟛƨ蒳憸幒桪ᔐ훨ꖨ릯鼵嗐

    Contract.set("ł斦쪃⡲ퟛƨ蒳憸幒桪ᔐ훨ꖨ릯鼵嗐");

From the smart-contract its returned version seems not same as the string I passed. // `Contract.get()`

    ł斦쪃⡲<d7db>ƨ蒳憸幒桪ᔐ훨<a5a8>릯鼵嗐

Overall: `"ł斦쪃⡲ퟛƨ蒳憸幒桪ᔐ훨ꖨ릯鼵嗐" != "ł斦쪃⡲<d7db>ƨ蒳憸幒桪ᔐ훨<a5a8>릯鼵嗐"`

Please note that I have tried this on remix-solidity.

-

    pragma solidity ^0.4.0;
    contract Contract {
        string str;

        function set(string val) public {
            str = val;
        }

        function get() public constant returns (string) {
            return str;
        }
    }

**[Q]** How should I pass compressed base64 string into a smart-contract? or basically what should I do to store my string compressed version on a smart-contract that when I returned it, it should match with the string I passed?

Thank you for your valuable time and help.


  [1]: http://pieroxy.net/blog/pages/lz-string/guide.html
  [2]: https://github.com/pieroxy/lz-string/blob/master/libs/base64-string.js