create account

Electrum Bitcoin Wallet - Code Audit by profitgenerator

View this thread on: hive.blogpeakd.comecency.com
· @profitgenerator ·
$4.15
Electrum Bitcoin Wallet - Code Audit
<center>![code-1839406_1920.jpg](https://steemitimages.com/DQmdki3qum8qswe4TSA7tJCrDqrSfjbSudGbyMzomfVQQ7Q/code-1839406_1920.jpg)</center>
<br/>



If you are still not amazed by the power that the Python Language is capable of, then in this part we are going to learn how to generate a Bitcoin address or a wallet in python. I just love how easy it is to communicate with your computer if you have a Linux OS through python and how many interesting projects you can make with it.

In this article I am going to analyze the source code of Electrum, the Bitcoin wallet that is purely written in Python, and it should work with any python 2.x and I believe even with python 3.x package, by default, all dependencies that this software uses are in the default packages. So no additional software is needed it's self-sustainable.

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

### Disclaimer: Use this code and information at your own risk, I shall not be responsible for any damages resulting from the use of the modified code, nor the information provided in this article. It's not recommended to modify the code that generates private keys if you don't know what you are doing!

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


<br/>

# Playing with the Code

<br/>

I have downloaded the latest version of the Electrum's source code from Github:
* https://github.com/spesmilo/electrum/releases/tag/2.8.3

The seed generator file is basically located in `lib` it's named `mnemonic.py` and the function is `make_seed()`, it’s this block of code:

![ms1.png](https://steemitimages.com/DQmcJLuFQvRakNhq2hw8ZpitjhEfNvZuqG2GHg9m9i3oAf1/ms1.png)

 Which you can actually call from the terminal as well, through an internal command. So if you have Electrum installed, then I think it’s like this:

`electrum make_seed --nbits 125`

This would create a 125 bit seed for you, if you have Electrum installed, but you can also call that mnemonic script through another python file, and customize it for example (like generate multiple ones, or integrate it with some other code).

We will create a new file named `testcall.py` from where we will call this Mnemonic code, it has to be in the same `lib` folder though. It looks like this:

![tc1.png](https://steemitimages.com/DQmfTqA52Mj1C9YuW6PpikhJNvmSvGTSgk6SuTwweBTfVss/tc1.png)

And if we call it from the terminal using `python testcall.py` command:

![tc1term.png](https://steemitimages.com/DQmZUfa6xtbjLQSexAMwRP7sZRMLXWTJvkh1uEhgMvTbZzG/tc1term.png)

Basically we are importing the `Mnemonic` class from the `mnemonic.py` file just calling it as `mnemonic`. I haven’t talked about classes yet, they are in the more advanced parts of the Python language, basically they are object that bind together functions. Here the `make_seed()` function is contained inside the `Mnemonic` class, and it’s called through that, together with other functions that depend on eachother. It could be done with just 1 function, but using it like this is more elegant and less error prone since it can handle exceptions. I am not a very good expert in Classes, so I’m just gonna leave it like this.

In the `Mnemonic` class you can define 1 parameter, the language, which has the following values:
* `None` = English
* `en` = English
* `es` = Spanish
* `zh` = Chinese
* `ja` = Japanese
* `pt` = Portuguese

You can see the country codes in the `i18n.py` file, but only these have wordlists available for now, visible in the `wordlist` folder. Basically here is how you create a Chinese seed just replace that argument with the country code:

`print Mnemonic('zh').make_seed('standard', 132, 1)`

And this will give out some seed in Chinese:

![chin1.png](https://steemitimages.com/DQmP4pU3QEo4r5ZSqfkfBXXjGpRh5yQnSqGDiyToxHrXHnj/chin1.png)

There are also multiple types of seeds you can generate, which you can see in the `version.py` file:
* `standard` - Normal wallet
* `segwit` - Support for upcoming Segregated Witness softfork based addresses of Bitcoin
* `2fa` - Two Factor Authentication based Wallets

* The next argument is the `num_bits` variable which from the command line is called with `nbits` command, basically just the number of bits entropy your seed will have (recommended minimum 128 for security)

* The last argument is the `custom_entropy`, basically just an integer with which you multiply your seed number, just in case your RNG is bad, this replaces a part of the secret with the customly generated number by you, of the same entropy size.

So if I call it like this, where I chose a custom entropy number, this would generate a seed this way, of course the entropy number has to be a secret as well:

`print Mnemonic('en').make_seed('standard', 132, 2349823353453453459428932342349489238)`

I don’t really recommend using this code, it looks kind of weird to me, I am not cryptographic expert but I just don’t like how this inserts entropy into your number. I have heard that multiplying numbers decreases entropy, so I am not sure about this part of the code. In fact I am going to message the dev about this issue, see what his response is about this. However no worries, the default wallet generation doesn’t call the custom entropy part, so if you are generating a wallet in Electrum through the GUI, or leaving it at `1` value, then this is of no concern to you. 


<br/>

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

<br/>

# Auditing the Seed Generator

<br/>

Ok so now that we know how to generate a seed, let’s see what exactly does the seed generator do. After all anyone using Electrum has to rely on the security and integrity of this code, otherwise you can lose all your money if this code were to be written badly. So we really have to trust this code 100% if we want to store a lot of Bitcoin in Electrum. So let’s analyze it.

So let’s analyze the `make_seed()` function, this is where the action is, first of all I will put many `print` codes in it to print out each variable at each step:

![AU1.png](https://steemitimages.com/DQmTFkyXLmcBxLR9pyywpsV2GVRoTTgZ5vbv9GQK3qcGWp3/AU1.png)

Basically I just print out the each variable at each step. Ok so we are calling the `make_seed()` function from our `testcall.py` file with `python testcall.py` command. Where the testcall file is like this:

`print Mnemonic('en').make_seed('standard', 132, 1)`

Just a standard seed generation, it prints out these:

![AU2.png](https://steemitimages.com/DQmVc24bGFDtvQJEdsXSe5YmGVwA8ZpiUeX4QYb6QpoQ412/AU2.png)

<Br/>

### Well let’s take it step by step. 

* First the `version.py` is imported where the codes of the file is, it basically translates that `standard` argument into `01` which will be the prefix of the seed later. So it sets the prefix to a `01` string.
* Then the `bwp` (bits per word) variable takes the log<sub>2</sub> value of the length of the word list, I mean how many words there are in there, in this case the English list: `english.txt`. There are 2048 words in the English list, and log<sub>2</sub> of that is 11.
* Then the `num_bits` is divided by `bwp` and rounded up, turned into an integer and multiplied by `bwp` again. I don’t know why this is necessary since it gives back the same value, I guess it’s just some kind of precaution.
* `n_custom` becomes 0 if we leave the `custom_entropy` at default 1, so that no extra entropy is added
*  `n` again, it remains the same as the `num_bits` input if no custom entropy is added.
* So basically if you generate a default wallet with no extra entropy, then the `n` variable becomes the main number holding the amount of entropy you define initially through `num_bits`. So in our case it remains equivalent since we don’t add anything.
* Then `my_entropy` will just pick a random number between 0 and 2<sup>n</sup>, where `n` is the same `n`, so it will be a large number, this is the prototype to the seed.
* Then we go into a while loop to search for a random number that starts with `01` which will serve as a checksum of the seed.
* If the custom entropy is 0, then basically we just add 1 to the  `my_entropy` number until the first 2 bits become 0 and 1. Actually the first 2 bits of it’s hashed format. So that happens is that it encodes it with `mnemonic_encode(i)` and right after it decodes it with mnemonic_decode(seed) I guess to test if the number can be encoded in words, otherwise it would give some error. That is what the `assert` command does, it tests for errors.
* Then it goes into the `is_new_seed()` function, if you generate a seed now, if you import and older seed in the old format then it goes into the old function. But this code that I executed above goes into the new function. This is where the magic happens. The `is_new_seed()` function is actually located in the `bitcoin.py` file:

![isnew.png](https://steemitimages.com/DQmeLXCKGepb63hKTRuJ2A1d3uiZNML2q7x2cQcbSsrV8L8/isnew.png)

* What happens here is interesting, first the seed gets normalized with the `normalize_text()` function in the `mnenonic.py` file, I think the Chinese or other strange languages get transmuted into ASCII text I believe. So this function does not much with the English wordlist.
* Then is when things get interesting, it takes the HMAC-SHA512 hash of the seed list, in the English text version of it basically in our case. And it checks the first 2 characters to be `01`, since we called a `standard` wallet. Electrum defines the standard wallet as a seed whose HMAC-SHA512 encoded with `Seed version` starts with `01`, a Segwit wallet whose HMAC-SHA512 encoded with `Seed version` starts with `02` and so on… So basically that `while` loop increments that `my_entropy` variable by 1 until the wordlist that it gives back whose HMAC-SHA512 encoded with `Seed version` starts with `01` in our case. After it found that number, it exits the loop, and it returns the seed:

`because sister decrease neither cool more car galaxy one upset high allow`

That’s it, that is how basically Electrum generates a seed. And this seed’s HMAC-SHA512 sum will start with `01`, you can even check it yourself. So in Linux you can install a tool called [GTKHash](http://gtkhash.sourceforge.net/) to calculate hashes, so let me demonstrate, we take the the seed, and add the [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) message `Seed version` as defined in that function:

![hmac1.png](https://steemitimages.com/DQmZtmm8VkB2StkA1nnqY7mjoscLbvRKxCZV1iqbFGnroG9/hmac1.png)

So as you can see if we add the [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) message `Seed version` together with the seed it gives us the 512 bit hash that will start with `01` so in this case this is a valid default seed compatible with Electrum.

Of course the [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) system is unbreakable, especially the 512 bit version of it is probably quantum computer resistant, so there is no way to reverse engineer the seed from this system.

However there is 1 issue, if we fix the first 2 characters of the hex format, where obviously the HMAC-SHA512 output is in hexadecimal format, well that loses entropy.

So that is why we start with 132 bits of entropy, because we lose about 4 bits of entropy, and hence the output at the end will only have 128 bits of entropy which his what we want by default, it’s safe to use 128 bits of entropy, in fact it’s recommended to only use above 120 bits now, given how powerful computers get.

So we start with 132 bits, we lose some bits due to fixing the first 2 characters, and then we remain with 128 bits which is computationally secure. To brute force this it requires a supercomputer to go through 2<sup>128</sup> combinations which is pretty much impossible since there is not enough energy on Earth to go through that many combinations, in fact some people say that you can’t even count until this number range, not to mention hashing and other memory intensive operations


<br/>

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

<br/>

# Conclusion

It looks like Electrum is safe to use. It has passed my audit, although I am no crypto expert but from what I have researched and learned it looks safe to me.

I am still skeptical about that `custom_entropy` thing, I should ask the dev what that does exactly, but other than that, default wallet generation is flawless. There are no backdoors in my opinion.

After all many thousands of people use Electrum, especially people holding large amounts there so it better damn be safe to use, and in my opinion it is.

I have analyzed it’s main seed generation code in this article. Of course the code is a lot more than this, but we already know that if you generate a seed on an Offline Computer with it, it should be safe. Now I haven’t looked into the network related parts of it, but I trust them to be safe.

<Br/>

### It’s a cool wallet, use it if you want: https://electrum.org

<Br/>

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

**Sources:**
* Electrum software is the `Copyright of Thomas Voegtlin` licensed with [MIT license](https://opensource.org/licenses/MIT).
* Python is a trademark of the [Python Software Foundation](https://www.python.org/psf/)

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


<CENTER><H1>Upvote, ReSteem & <a href="https://steemit.com/@profitgenerator" target='_blank'><img src='https://s4.postimg.org/cfz9b1mnh/bluebutton.png' border='0' alt='bluebutton'/></a></H1>
</CENTER>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
authorprofitgenerator
permlinkelectrum-bitcoin-wallet-code-audit
categoryprogramming
json_metadata{"tags":["programming","python","bitcoin","security","education"],"image":["https://steemitimages.com/DQmdki3qum8qswe4TSA7tJCrDqrSfjbSudGbyMzomfVQQ7Q/code-1839406_1920.jpg","https://steemitimages.com/DQmcJLuFQvRakNhq2hw8ZpitjhEfNvZuqG2GHg9m9i3oAf1/ms1.png","https://steemitimages.com/DQmfTqA52Mj1C9YuW6PpikhJNvmSvGTSgk6SuTwweBTfVss/tc1.png","https://steemitimages.com/DQmZUfa6xtbjLQSexAMwRP7sZRMLXWTJvkh1uEhgMvTbZzG/tc1term.png","https://steemitimages.com/DQmP4pU3QEo4r5ZSqfkfBXXjGpRh5yQnSqGDiyToxHrXHnj/chin1.png","https://steemitimages.com/DQmTFkyXLmcBxLR9pyywpsV2GVRoTTgZ5vbv9GQK3qcGWp3/AU1.png","https://steemitimages.com/DQmVc24bGFDtvQJEdsXSe5YmGVwA8ZpiUeX4QYb6QpoQ412/AU2.png","https://steemitimages.com/DQmeLXCKGepb63hKTRuJ2A1d3uiZNML2q7x2cQcbSsrV8L8/isnew.png","https://steemitimages.com/DQmZtmm8VkB2StkA1nnqY7mjoscLbvRKxCZV1iqbFGnroG9/hmac1.png","https://s4.postimg.org/cfz9b1mnh/bluebutton.png"],"links":["https://github.com/spesmilo/electrum/releases/tag/2.8.3","http://gtkhash.sourceforge.net/","https://en.wikipedia.org/wiki/Hash-based_message_authentication_code","https://electrum.org","https://opensource.org/licenses/MIT","https://www.python.org/psf/","https://steemit.com/@profitgenerator"],"app":"steemit/0.1","format":"markdown"}
created2017-07-10 09:54:18
last_update2017-07-10 09:54:18
depth0
children11
last_payout2017-07-17 09:54:18
cashout_time1969-12-31 23:59:59
total_payout_value3.417 HBD
curator_payout_value0.738 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length13,368
author_reputation68,549,319,463,075
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd0
post_id7,968,472
net_rshares1,133,673,110,570
author_curate_reward""
vote details (43)
@chaimyu ·
Thanks!
properties (22)
authorchaimyu
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20180301t084319378z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2018-03-01 08:43:24
last_update2018-03-01 08:43:24
depth1
children0
last_payout2018-03-08 08:43:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length7
author_reputation4,692,484,611,160
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id41,329,590
net_rshares0
@cryptonews-24 ·
nice , usefull post
👍  
properties (23)
authorcryptonews-24
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t095629769z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 09:56:30
last_update2017-07-10 09:56:30
depth1
children0
last_payout2017-07-17 09:56:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length19
author_reputation48,438,326,115
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,968,623
net_rshares989,194,218
author_curate_reward""
vote details (1)
@izbing ·
This is the wallet I use. In any case thank you for this super tutorial.
properties (22)
authorizbing
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t100022748z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:00:24
last_update2017-07-10 10:00:24
depth1
children1
last_payout2017-07-17 10:00:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length72
author_reputation6,706,719,896,087
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,968,893
net_rshares0
@profitgenerator ·
Yes I figured many people use this wallet including myself. I have analyzed the code myself especially the seed generator part, because I was skeptical about it at first. I don't really trust javascript based stuff that much, it often has crappy rng. But in this case this python code, which I kind of understand well, is written pretty well.

So Voegtlin did a good job with it, it's a good software, trustworthy.
properties (22)
authorprofitgenerator
permlinkre-izbing-re-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t102202000z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:22:12
last_update2017-07-10 10:22:12
depth2
children0
last_payout2017-07-17 10:22:12
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length414
author_reputation68,549,319,463,075
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,970,409
net_rshares0
@profitgenerator ·
$0.09
Opened a thread about that `custom_entropy` issue:
* https://bitcointalk.org/index.php?topic=2012226.0

It has to be investigated more thoroughly, it could be a potential bug.
👍  
properties (23)
authorprofitgenerator
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t105054200z
categoryprogramming
json_metadata{"tags":["programming"],"links":["https://bitcointalk.org/index.php?topic=2012226.0"],"app":"steemit/0.1"}
created2017-07-10 10:51:09
last_update2017-07-10 10:51:09
depth1
children0
last_payout2017-07-17 10:51:09
cashout_time1969-12-31 23:59:59
total_payout_value0.085 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length175
author_reputation68,549,319,463,075
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,972,538
net_rshares23,772,530,077
author_curate_reward""
vote details (1)
@softjoker ·
Very interesting post :) thanks to the author! :)
properties (22)
authorsoftjoker
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t100216877z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:02:18
last_update2017-07-10 10:02:18
depth1
children0
last_payout2017-07-17 10:02:18
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length49
author_reputation140,667,705,730
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,969,015
net_rshares0
@steemitboard ·
Congratulations @profitgenerator! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/posts.png)](http://steemitboard.com/@profitgenerator) Award for the number of posts published

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)

If you no longer want to receive notifications, reply to this comment with the word `STOP`

> By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!
properties (22)
authorsteemitboard
permlinksteemitboard-notify-profitgenerator-20170710t105836000z
categoryprogramming
json_metadata{"image":["https://steemitboard.com/img/notifications.png"]}
created2017-07-10 10:58:36
last_update2017-07-10 10:58:36
depth1
children0
last_payout2017-07-17 10:58:36
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length708
author_reputation38,975,615,169,260
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,973,138
net_rshares0
@teslalifestyle ·
$0.09
Going to go through this post in more detail later this week, I'll edit and let you know how the experience goes. I just installed Linux on one of my laptops so quite excited to give this a go the same way you did it. Thanks for sharing and all the time you put into it highly appreciate the content.
👍  
properties (23)
authorteslalifestyle
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t104156977z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:41:57
last_update2017-07-10 10:41:57
depth1
children0
last_payout2017-07-17 10:41:57
cashout_time1969-12-31 23:59:59
total_payout_value0.085 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length300
author_reputation999,859,975,504
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,971,818
net_rshares23,772,530,077
author_curate_reward""
vote details (1)
@whd ·
Nice post, one thing, you don't need Linux to run python :)
properties (22)
authorwhd
permlinkre-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t100338730z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:03:39
last_update2017-07-10 10:03:39
depth1
children2
last_payout2017-07-17 10:03:39
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length59
author_reputation17,817,550,622,492
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,969,087
net_rshares0
@profitgenerator ·
Yes you don't but I find it more easy to use on Linux. I never liked Windows commands.
properties (22)
authorprofitgenerator
permlinkre-whd-re-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t100643200z
categoryprogramming
json_metadata{"tags":["programming"],"app":"steemit/0.1"}
created2017-07-10 10:06:57
last_update2017-07-10 10:06:57
depth2
children1
last_payout2017-07-17 10:06:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length86
author_reputation68,549,319,463,075
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,969,326
net_rshares0
@whd ·
If you ever had to use windows, check this https://msdn.microsoft.com/en-us/commandline/wsl/about
properties (22)
authorwhd
permlinkre-profitgenerator-re-whd-re-profitgenerator-electrum-bitcoin-wallet-code-audit-20170710t101504413z
categoryprogramming
json_metadata{"tags":["programming"],"links":["https://msdn.microsoft.com/en-us/commandline/wsl/about"],"app":"steemit/0.1"}
created2017-07-10 10:15:03
last_update2017-07-10 10:15:03
depth3
children0
last_payout2017-07-17 10:15:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length97
author_reputation17,817,550,622,492
root_title"Electrum Bitcoin Wallet - Code Audit"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id7,969,889
net_rshares0