Ecoer Logo

@blockliberty

45

EOS BlockProducer (aka AnarchEOS)

steemit.com/@blockliberty
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS59.49%
Net Worth
3.685USD
STEEM
4.296STEEM
SBD
6.597SBD
Own SP
3.749SP

Detailed Balance

STEEM
balance
2.759STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
1.537STEEM
STEEM POWER
Own SP
3.749SP
Delegated Out
0.000SP
Delegation In
0.000SP
Effective Power
3.749SP
Reward SP (pending)
6.551SP
SBD
sbd_balance
0.004SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
6.593SBD
{
  "balance": "2.759 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "1.537 STEEM",
  "vesting_shares": "6105.036174 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "0.000000 VESTS",
  "sbd_balance": "0.004 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "6.593 SBD",
  "conversions": []
}

Account Info

nameblockliberty
id997072
rank959,942
reputation150388136749
created2018-05-15T05:04:06
recovery_accountblocktrades
proxyNone
post_count11
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-10-09T11:04:27
last_root_post2018-10-02T15:34:03
last_vote_time2018-06-26T02:37:24
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power9,800
delayed_votes0
balance2.759 STEEM
savings_balance0.000 STEEM
sbd_balance0.004 SBD
savings_sbd_balance0.000 SBD
vesting_shares6105.036174 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares0.000000 VESTS
reward_vesting_balance13275.580631 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update1970-01-01T00:00:00
last_account_update2018-10-09T12:33:48
minedNo
sbd_seconds0
sbd_last_interest_payment2018-10-02T18:53:39
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 997072,
  "name": "blockliberty",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6WF7QLCKX6WjpfKumuc4VdGqzEeKf8RPKNx7JiApmCkMarPXgT",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6p5qXc2kpxa3VwpdQy5bi4QTTQhbi4D9C7ugge6FWp18L1c27d",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "busy.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM4yCbqnLa1KAbUmNUYzPdXUmYni7ne5hGYenEwFchWt4GKYYHRd",
        1
      ]
    ]
  },
  "memo_key": "STM7YffEqY88HvgRhRRbUDgRnSLGPtBdggY4ymv3Ncda7RTwA4vSZ",
  "json_metadata": "{\"profile\":{\"profile_image\":\"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg\",\"cover_image\":\"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg\",\"name\":\"LibertyBlock\",\"about\":\"EOS BlockProducer (aka AnarchEOS)\",\"location\":\"Bhutan\",\"website\":\"http://libertyblock.io\"}}",
  "posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg\",\"cover_image\":\"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg\",\"name\":\"LibertyBlock\",\"about\":\"EOS BlockProducer (aka AnarchEOS)\",\"location\":\"Bhutan\",\"website\":\"http://libertyblock.io\"}}",
  "proxy": "",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_account_update": "2018-10-09T12:33:48",
  "created": "2018-05-15T05:04:06",
  "mined": false,
  "recovery_account": "blocktrades",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 11,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": 9800,
    "last_update_time": 1529980644
  },
  "downvote_manabar": {
    "current_mana": 0,
    "last_update_time": 1526360646
  },
  "voting_power": 9800,
  "balance": "2.759 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.004 SBD",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "2018-10-02T18:53:39",
  "sbd_last_interest_payment": "2018-10-02T18:53:39",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "reward_sbd_balance": "6.593 SBD",
  "reward_steem_balance": "1.537 STEEM",
  "reward_vesting_balance": "13275.580631 VESTS",
  "reward_vesting_steem": "6.551 STEEM",
  "vesting_shares": "6105.036174 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "0.000000 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "withdrawn": 0,
  "to_withdraw": 0,
  "withdraw_routes": 0,
  "curation_rewards": 0,
  "posting_rewards": 13099,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2018-10-09T11:04:27",
  "last_root_post": "2018-10-02T15:34:03",
  "last_vote_time": "2018-06-26T02:37:24",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": "150388136749",
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": [],
  "rank": 959942
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
2021/08/06 13:17:39
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authorcrypto-exchanges
permlinkqxf69d
title
body<h2>Crypto Exchange In Australia?</h2>This is a good article on the [best crypto exchange Australia](https://steemit.com/cryptocurrency/@crypto-exchanges/best-australia)!?
json metadata{"links":["https://steemit.com/cryptocurrency/@crypto-exchanges/best-australia"],"app":"steemit/0.2"}
Transaction InfoBlock #56130050/Trx 09ce8ca5388dcb60555660a4512e10159904bcfd
View Raw JSON Data
{
  "trx_id": "09ce8ca5388dcb60555660a4512e10159904bcfd",
  "block": 56130050,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2021-08-06T13:17:39",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "crypto-exchanges",
      "permlink": "qxf69d",
      "title": "",
      "body": "<h2>Crypto Exchange In Australia?</h2>This is a good article on the [best crypto exchange Australia](https://steemit.com/cryptocurrency/@crypto-exchanges/best-australia)!?",
      "json_metadata": "{\"links\":[\"https://steemit.com/cryptocurrency/@crypto-exchanges/best-australia\"],\"app\":\"steemit/0.2\"}"
    }
  ]
}
2019/06/30 21:46:39
voterfips
authorblockliberty
permlinkhow-to-vote-for-your-favorite-eos-block-producer-using-scatter
weight10000 (100.00%)
Transaction InfoBlock #34263284/Trx e124bb7a477d4d9c033f3dfa6c58d3d8ef76c4b8
View Raw JSON Data
{
  "trx_id": "e124bb7a477d4d9c033f3dfa6c58d3d8ef76c4b8",
  "block": 34263284,
  "trx_in_block": 24,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-06-30T21:46:39",
  "op": [
    "vote",
    {
      "voter": "fips",
      "author": "blockliberty",
      "permlink": "how-to-vote-for-your-favorite-eos-block-producer-using-scatter",
      "weight": 10000
    }
  ]
}
2019/05/15 06:04:57
parent authorblockliberty
parent permlinkeosio-wrap-eosio-sudo-demystified
authorsteemitboard
permlinksteemitboard-notify-blockliberty-20190515t060456000z
title
bodyCongratulations @blockliberty! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@blockliberty/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@blockliberty) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=blockliberty)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmRWbAjbeETEaqSPLcpwYX1JN5pZhdPffv4q6DaBs6xvZm/image.png"></a></td><td><a href="https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge">New japanese speaking community Steem Meetup badge</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #32921257/Trx 35c46baef586c69a6fc57a78a3ffc67e8282e213
View Raw JSON Data
{
  "trx_id": "35c46baef586c69a6fc57a78a3ffc67e8282e213",
  "block": 32921257,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-05-15T06:04:57",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "eosio-wrap-eosio-sudo-demystified",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-blockliberty-20190515t060456000z",
      "title": "",
      "body": "Congratulations @blockliberty! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@blockliberty/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@blockliberty) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=blockliberty)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmRWbAjbeETEaqSPLcpwYX1JN5pZhdPffv4q6DaBs6xvZm/image.png\"></a></td><td><a href=\"https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge\">New  japanese speaking community Steem Meetup badge</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
    }
  ]
}
2018/11/18 20:26:33
voteraltcoindaily
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #27817180/Trx 06cbcf661a80550e9687554273d91590a378da07
View Raw JSON Data
{
  "trx_id": "06cbcf661a80550e9687554273d91590a378da07",
  "block": 27817180,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-11-18T20:26:33",
  "op": [
    "vote",
    {
      "voter": "altcoindaily",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
2018/10/20 12:11:18
voterbonex
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #26972696/Trx 977547efa3f16820954ee1fdac05e8622a234f45
View Raw JSON Data
{
  "trx_id": "977547efa3f16820954ee1fdac05e8622a234f45",
  "block": 26972696,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-20T12:11:18",
  "op": [
    "vote",
    {
      "voter": "bonex",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
2018/10/11 10:06:42
voterabdulmanan7
authorblockliberty
permlinkhow-to-vote-for-your-favorite-eos-block-producer-using-scatter
weight10000 (100.00%)
Transaction InfoBlock #26711213/Trx d10b4abdfb54ecf0119753482fb816a7e9cd8768
View Raw JSON Data
{
  "trx_id": "d10b4abdfb54ecf0119753482fb816a7e9cd8768",
  "block": 26711213,
  "trx_in_block": 29,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-11T10:06:42",
  "op": [
    "vote",
    {
      "voter": "abdulmanan7",
      "author": "blockliberty",
      "permlink": "how-to-vote-for-your-favorite-eos-block-producer-using-scatter",
      "weight": 10000
    }
  ]
}
2018/10/10 17:26:30
parent authorblockliberty
parent permlinkeosio-wrap-eosio-sudo-demystified
authorsteemitboard
permlinksteemitboard-notify-blockliberty-20181010t172632000z
title
bodyCongratulations @blockliberty! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) : [![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/payout.png)](http://steemitboard.com/@blockliberty) Award for the total payout received <sub>_Click on the badge to view your Board of Honor._</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/spanish/@steemitboard/presentamos-el-ranking-de-steemitboard"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png"></a></td><td><a href="https://steemit.com/spanish/@steemitboard/presentamos-el-ranking-de-steemitboard">Presentamos el Ranking de SteemitBoard</a></td></tr></table> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #26691228/Trx 78db53d0c97842cff481c14210438b537366bacf
View Raw JSON Data
{
  "trx_id": "78db53d0c97842cff481c14210438b537366bacf",
  "block": 26691228,
  "trx_in_block": 24,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-10T17:26:30",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "eosio-wrap-eosio-sudo-demystified",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-blockliberty-20181010t172632000z",
      "title": "",
      "body": "Congratulations @blockliberty! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :\n\n[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/payout.png)](http://steemitboard.com/@blockliberty) Award for the total payout received\n\n<sub>_Click on the badge to view your Board of Honor._</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/spanish/@steemitboard/presentamos-el-ranking-de-steemitboard\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png\"></a></td><td><a href=\"https://steemit.com/spanish/@steemitboard/presentamos-el-ranking-de-steemitboard\">Presentamos el Ranking de SteemitBoard</a></td></tr></table>\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
    }
  ]
}
2018/10/10 15:17:00
parent authorblockliberty
parent permlinkre-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181009t110425572z
authorlukestokes
permlinkre-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181010t151700652z
title
bodyMakes sense. Blowing away the keys on an account would definitely nuke it out. I imagine the blockchain world will go crazy the first time this happens. The real question is if we're ready for a truly governed blockchain. Thanks for the replies.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #26688640/Trx 4131ab596541af3b4ad9a37ee6ca60d565580325
View Raw JSON Data
{
  "trx_id": "4131ab596541af3b4ad9a37ee6ca60d565580325",
  "block": 26688640,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-10T15:17:00",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181009t110425572z",
      "author": "lukestokes",
      "permlink": "re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181010t151700652z",
      "title": "",
      "body": "Makes sense. Blowing away the keys on an account would definitely nuke it out. I imagine the blockchain world will go crazy the first time this happens. The real question is if we're ready for a truly governed blockchain.\n\nThanks for the replies.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
blocklibertyreceived 2.237 SBD, 3.323 SP author reward for @blockliberty / eosio-wrap-eosio-sudo-demystified
2018/10/09 15:34:03
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
sbd payout2.237 SBD
steem payout0.000 STEEM
vesting payout5411.592350 VESTS
Transaction InfoBlock #26660188/Virtual Operation #5
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 26660188,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 5,
  "timestamp": "2018-10-09T15:34:03",
  "op": [
    "author_reward",
    {
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "sbd_payout": "2.237 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "5411.592350 VESTS"
    }
  ]
}
blocklibertyupdated their account properties
2018/10/09 12:33:48
accountblockliberty
posting{"weight_threshold":1,"account_auths":[["busy.app",1]],"key_auths":[["STM4yCbqnLa1KAbUmNUYzPdXUmYni7ne5hGYenEwFchWt4GKYYHRd",1]]}
memo keySTM7YffEqY88HvgRhRRbUDgRnSLGPtBdggY4ymv3Ncda7RTwA4vSZ
json metadata{"profile":{"profile_image":"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg","cover_image":"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg","name":"LibertyBlock","about":"EOS BlockProducer (aka AnarchEOS)","location":"Bhutan","website":"http://libertyblock.io"}}
Transaction InfoBlock #26656586/Trx 22b6e86705a6898288cbfd2f6a98e4b50ec4eccd
View Raw JSON Data
{
  "trx_id": "22b6e86705a6898288cbfd2f6a98e4b50ec4eccd",
  "block": 26656586,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T12:33:48",
  "op": [
    "account_update",
    {
      "account": "blockliberty",
      "posting": {
        "weight_threshold": 1,
        "account_auths": [
          [
            "busy.app",
            1
          ]
        ],
        "key_auths": [
          [
            "STM4yCbqnLa1KAbUmNUYzPdXUmYni7ne5hGYenEwFchWt4GKYYHRd",
            1
          ]
        ]
      },
      "memo_key": "STM7YffEqY88HvgRhRRbUDgRnSLGPtBdggY4ymv3Ncda7RTwA4vSZ",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg\",\"cover_image\":\"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg\",\"name\":\"LibertyBlock\",\"about\":\"EOS BlockProducer (aka AnarchEOS)\",\"location\":\"Bhutan\",\"website\":\"http://libertyblock.io\"}}"
    }
  ]
}
2018/10/09 11:43:54
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -11843,18 +11843,23 @@ posal:%0A%0A -1. +**1 .** %60eosio: @@ -12377,11 +12377,156 @@ ap%0A%0A +The %60change-sudo-wrap%60 branch has an open pull request to the eos-mainnet repo and will be merged in once the proposal has been approved. %0A%0A** 2 . +** %60eo @@ -12774,28 +12774,752 @@ sio.sudo/abi/eosio.sudo.abi) +%0A%0AIf you want to run a test transaction on a localnet or testnet you can do so with the following cleos commands after deploying the contract. Swap out the test user accounts with valid account names on your network:%0A%0A%60%60%60%0A cleos set account permission -s -j -d eptestusersa active EOS4uYQfroghuT2hGmdBofGNvJrygaFDHwQsT426fWAimtUhbcHJR owner %3E change.json%0Acleos wrap exec eptestusersb change.json%0A%60%60%60%0A%0AThe sequence of actions and result should look like this:%0A%0A!%5BScreenshot from 2018-10-09 07-41-24.png%5D(https://cdn.steemitimages.com/DQmbYRzGD3na5o7dRAvMi14fk7MHCdyYhS5y4hPdtGT1d6D/Screenshot%2520from%25202018-10-09%252007-41-24.png)%0A%0AYou can see at the end that the active key for the account has changed to the one we specified.
json metadata{"tags":["eos"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp","https://github.com/EOSIO/eosio.cdt/tree/v1.2.1","https://github.com/LibertyBlock/eos/tree/change-sudo-wrap","https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmbYRzGD3na5o7dRAvMi14fk7MHCdyYhS5y4hPdtGT1d6D/Screenshot%20from%202018-10-09%2007-41-24.png"]}
Transaction InfoBlock #26655588/Trx 0209169ae122a5e1e0de2fcb45ecf2ff001509d2
View Raw JSON Data
{
  "trx_id": "0209169ae122a5e1e0de2fcb45ecf2ff001509d2",
  "block": 26655588,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:43:54",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -11843,18 +11843,23 @@\n posal:%0A%0A\n-1.\n+**1 .**\n  %60eosio:\n@@ -12377,11 +12377,156 @@\n ap%0A%0A\n+The %60change-sudo-wrap%60 branch has an open pull request to the eos-mainnet repo and will be merged in once the proposal has been approved.  %0A%0A**\n 2 .\n+**\n  %60eo\n@@ -12774,28 +12774,752 @@\n sio.sudo/abi/eosio.sudo.abi)\n+%0A%0AIf you want to run a test transaction on a localnet or testnet you can do so with the following cleos commands after deploying the contract. Swap out the test user accounts with valid account names on your network:%0A%0A%60%60%60%0A cleos set account permission -s -j -d eptestusersa active EOS4uYQfroghuT2hGmdBofGNvJrygaFDHwQsT426fWAimtUhbcHJR owner %3E change.json%0Acleos wrap exec eptestusersb change.json%0A%60%60%60%0A%0AThe sequence of actions and result should look like this:%0A%0A!%5BScreenshot from 2018-10-09 07-41-24.png%5D(https://cdn.steemitimages.com/DQmbYRzGD3na5o7dRAvMi14fk7MHCdyYhS5y4hPdtGT1d6D/Screenshot%2520from%25202018-10-09%252007-41-24.png)%0A%0AYou can see at the end that the active key for the account has changed to the one we specified.\n",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\",\"https://github.com/EOSIO/eosio.cdt/tree/v1.2.1\",\"https://github.com/LibertyBlock/eos/tree/change-sudo-wrap\",\"https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmbYRzGD3na5o7dRAvMi14fk7MHCdyYhS5y4hPdtGT1d6D/Screenshot%20from%202018-10-09%2007-41-24.png\"]}"
    }
  ]
}
2018/10/09 11:28:12
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -12372,11 +12372,10 @@ ap%0A%0A - 2 + . %60e
json metadata{"tags":["eos"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp","https://github.com/EOSIO/eosio.cdt/tree/v1.2.1","https://github.com/LibertyBlock/eos/tree/change-sudo-wrap","https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26655274/Trx 54b4ef2831c124e2075b3e2599a86cfce38faf36
View Raw JSON Data
{
  "trx_id": "54b4ef2831c124e2075b3e2599a86cfce38faf36",
  "block": 26655274,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:28:12",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -12372,11 +12372,10 @@\n ap%0A%0A\n-  \n 2\n+ \n . %60e\n",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\",\"https://github.com/EOSIO/eosio.cdt/tree/v1.2.1\",\"https://github.com/LibertyBlock/eos/tree/change-sudo-wrap\",\"https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/10/09 11:27:33
voteralphabot
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight100 (1.00%)
Transaction InfoBlock #26655261/Trx a71e67d2950f55aafa1643cff9b0c64a580d66f4
View Raw JSON Data
{
  "trx_id": "a71e67d2950f55aafa1643cff9b0c64a580d66f4",
  "block": 26655261,
  "trx_in_block": 28,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:27:33",
  "op": [
    "vote",
    {
      "voter": "alphabot",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 100
    }
  ]
}
2018/10/09 11:27:24
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -12368,16 +12368,18 @@ o-wrap%0A%0A + 2. %60eosi
json metadata{"tags":["eos"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp","https://github.com/EOSIO/eosio.cdt/tree/v1.2.1","https://github.com/LibertyBlock/eos/tree/change-sudo-wrap","https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26655258/Trx f7969d8ee95988b915289a3a8aee431d8ff34d6c
View Raw JSON Data
{
  "trx_id": "f7969d8ee95988b915289a3a8aee431d8ff34d6c",
  "block": 26655258,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:27:24",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -12368,16 +12368,18 @@\n o-wrap%0A%0A\n+  \n 2. %60eosi\n",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\",\"https://github.com/EOSIO/eosio.cdt/tree/v1.2.1\",\"https://github.com/LibertyBlock/eos/tree/change-sudo-wrap\",\"https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/10/09 11:26:42
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -11661,9 +11661,990 @@ p%60%0A%0A -Check +You can view the proposal to deploy the %60eosio.sudo%60 code to the %60eosio.wrap%60 account with:%0A%0A%60%60%60%0Acleos multisig review libertyblock deploywrap%0A%60%60%60%0A%0AThere are 2 actions in the proposal:%0A%0A1. %60eosio::setcode%60: Set the code for the %60eosio.wrap%60 account. The code hash after deploying will be %601a4d66fc40479949e47c517f057efd76f9861f7c6c6d4eeefaeb156866209d0a%60. %0A%0AThe code was compiled with the following compilation dependences:%0A%0A* eosio.contracts v1.3.1 (any 1.2.x versions will work as well)%0A* eosio.cdt v1.2.1 (https://github.com/EOSIO/eosio.cdt/tree/v1.2.1)%0A* The %60change-sudo-wrap%60 branch of the LibertyBlock eos repo (a fork of the eos-mainnet repo): https://github.com/LibertyBlock/eos/tree/change-sudo-wrap%0A%0A2. %60eosio::setabi%60: Set the ABI for the %60eosio.wrap%60 account. The ABI used for this action can be found at %5Bhttps://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi%5D(https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi)
json metadata{"tags":["eos"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp","https://github.com/EOSIO/eosio.cdt/tree/v1.2.1","https://github.com/LibertyBlock/eos/tree/change-sudo-wrap","https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26655244/Trx 2154b29917661c6e0325cb66c8a9eb3c74429ac2
View Raw JSON Data
{
  "trx_id": "2154b29917661c6e0325cb66c8a9eb3c74429ac2",
  "block": 26655244,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:26:42",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -11661,9 +11661,990 @@\n p%60%0A%0A\n-Check\n+You can view the proposal to deploy the %60eosio.sudo%60 code to the %60eosio.wrap%60 account with:%0A%0A%60%60%60%0Acleos multisig review libertyblock deploywrap%0A%60%60%60%0A%0AThere are 2 actions in the proposal:%0A%0A1. %60eosio::setcode%60: Set the code for the %60eosio.wrap%60 account. The code hash after deploying will be %601a4d66fc40479949e47c517f057efd76f9861f7c6c6d4eeefaeb156866209d0a%60. %0A%0AThe code was compiled with the following compilation dependences:%0A%0A* eosio.contracts v1.3.1 (any 1.2.x versions will work as well)%0A* eosio.cdt v1.2.1 (https://github.com/EOSIO/eosio.cdt/tree/v1.2.1)%0A* The %60change-sudo-wrap%60 branch of the LibertyBlock eos repo (a fork of the eos-mainnet repo): https://github.com/LibertyBlock/eos/tree/change-sudo-wrap%0A%0A2. %60eosio::setabi%60: Set the ABI for the %60eosio.wrap%60 account. The ABI used for this action can be found at %5Bhttps://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi%5D(https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi)\n",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\",\"https://github.com/EOSIO/eosio.cdt/tree/v1.2.1\",\"https://github.com/LibertyBlock/eos/tree/change-sudo-wrap\",\"https://github.com/EOSIO/eosio.contracts/blob/v1.3.1/eosio.sudo/abi/eosio.sudo.abi\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/10/09 11:04:48
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -11661,7 +11661,9 @@ p%60%0A%0A -TBD +Check
json metadata{"tags":["eos","libertyblock","eosio-sudo","eosio-wrap"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26654807/Trx 70446ce26704f585304603363f0cdea4005f99e9
View Raw JSON Data
{
  "trx_id": "70446ce26704f585304603363f0cdea4005f99e9",
  "block": 26654807,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:04:48",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -11661,7 +11661,9 @@\n p%60%0A%0A\n-TBD\n+Check\n",
      "json_metadata": "{\"tags\":[\"eos\",\"libertyblock\",\"eosio-sudo\",\"eosio-wrap\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/10/09 11:04:27
parent authorlukestokes
parent permlinkre-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181008t124450802z
authorblockliberty
permlinkre-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181009t110425572z
title
bodyWe could blacklist by changing their keys to unusable values. The account would be inaccessible to everyone, the action wouldn't require constant vigilance from all producers, and 15/21 producers would be able to execute the action.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #26654800/Trx e45b7347913d1f00b97979de2a1f688c90f34e5b
View Raw JSON Data
{
  "trx_id": "e45b7347913d1f00b97979de2a1f688c90f34e5b",
  "block": 26654800,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-09T11:04:27",
  "op": [
    "comment",
    {
      "parent_author": "lukestokes",
      "parent_permlink": "re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181008t124450802z",
      "author": "blockliberty",
      "permlink": "re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181009t110425572z",
      "title": "",
      "body": "We could blacklist by changing their keys to unusable values.  The account would be inaccessible to everyone, the action wouldn't require constant vigilance from all producers, and 15/21 producers would be able to execute the action.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/08 12:44:51
parent authorblockliberty
parent permlinkre-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181005t042215215z
authorlukestokes
permlinkre-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181008t124450802z
title
bodyThanks for the reply. I agree, if someone was well-coordinated enough for an attack, they would most likely also be ready with signed transactions to do whatever it is they wanted to do (steal people's money, reset account keys, etc) Could you elaborate a bit more on the better blacklisting solution? I've known the blacklist approach is temporary (and very fragile) and an all-or-nothing approach which doesn't really follow other DPoS 2/3+1 approaches. How would EOSIO.WRAP improve this? Members of eosdacserver like myself have voiced our concerns, but we did go ahead and <a href="https://eosauthority.com/approval/view?scope=libertyblock&name=createwrap&lnc=en">approve the proposal</a> to create the account.
json metadata{"tags":["eos"],"links":["https://eosauthority.com/approval/view?scope=libertyblock&name=createwrap&lnc=en"],"app":"steemit/0.1"}
Transaction InfoBlock #26628021/Trx a3959263efae028376a4f41e3904e0302adc50be
View Raw JSON Data
{
  "trx_id": "a3959263efae028376a4f41e3904e0302adc50be",
  "block": 26628021,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-08T12:44:51",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181005t042215215z",
      "author": "lukestokes",
      "permlink": "re-blockliberty-re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181008t124450802z",
      "title": "",
      "body": "Thanks for the reply. I agree, if someone was well-coordinated enough for an attack, they would most likely also be ready with signed transactions to do whatever it is they wanted to do (steal people's money, reset account keys, etc)\n\nCould you elaborate a bit more on the better blacklisting solution? I've known the blacklist approach is temporary (and very fragile) and an all-or-nothing approach which doesn't really follow other DPoS 2/3+1 approaches. How would EOSIO.WRAP improve this?\n\nMembers of eosdacserver like myself have voiced our concerns, but we did go ahead and <a href=\"https://eosauthority.com/approval/view?scope=libertyblock&name=createwrap&lnc=en\">approve the proposal</a> to create the account.",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://eosauthority.com/approval/view?scope=libertyblock&name=createwrap&lnc=en\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/05 04:22:15
parent authorlukestokes
parent permlinkre-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t193849787z
authorblockliberty
permlinkre-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181005t042215215z
title
bodyif somebody votes in 15/21 bad BPs and runs an attack on the network we are screwed no matter what system we have in place. There aren't any specific actions on hold because of this right now though, no. The most immediate use case would be for blacklisting keys, we could do so more effectively instead of the current fragile system.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #26531633/Trx d1fc1c58711b612251ff08c20bb5f3a7837b429b
View Raw JSON Data
{
  "trx_id": "d1fc1c58711b612251ff08c20bb5f3a7837b429b",
  "block": 26531633,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-05T04:22:15",
  "op": [
    "comment",
    {
      "parent_author": "lukestokes",
      "parent_permlink": "re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t193849787z",
      "author": "blockliberty",
      "permlink": "re-lukestokes-re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181005t042215215z",
      "title": "",
      "body": "if somebody votes in 15/21 bad BPs and runs an attack on the network we are screwed no matter what system we have in place. There aren't any specific actions on hold because of this right now though, no. The most immediate use case would be for blacklisting keys, we could do so more effectively instead of the current fragile system.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/04 00:01:57
voteralexfeng
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #26497652/Trx 468471bf5af884f55b2265bab80704fd0e479bea
View Raw JSON Data
{
  "trx_id": "468471bf5af884f55b2265bab80704fd0e479bea",
  "block": 26497652,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-04T00:01:57",
  "op": [
    "vote",
    {
      "voter": "alexfeng",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
2018/10/03 19:38:48
parent authorblockliberty
parent permlinkre-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t192017877z
authorlukestokes
permlinkre-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t193849787z
title
bodyThanks for the reply. It still seems a bit odd to me to build a tool to make a process easier when that process hasn't been used at all yet. Are there actions related to the EOS 911 accounts that are on pause right now, waiting for this? If not, then I guess my question still stands. It worries me a bit based on lack of voter engagement (75% of token holders still aren't voting) so that a small number of people with a large number of tokens could vote in BPs they control and use functionality like this to quickly (and easily) do bad things.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #26492394/Trx a79b18ae2353596f8db11f0334699579b2999cb1
View Raw JSON Data
{
  "trx_id": "a79b18ae2353596f8db11f0334699579b2999cb1",
  "block": 26492394,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-03T19:38:48",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t192017877z",
      "author": "lukestokes",
      "permlink": "re-blockliberty-re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t193849787z",
      "title": "",
      "body": "Thanks for the reply. It still seems a bit odd to me to build a tool to make a process easier when that process hasn't been used at all yet. Are there actions related to the EOS 911 accounts that are on pause right now, waiting for this? If not, then I guess my question still stands. It worries me a bit based on lack of voter engagement (75% of token holders still aren't voting) so that a small number of people with a large number of tokens could vote in BPs they control and use functionality like this to quickly (and easily) do bad things.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/03 19:25:21
voterfastresteem
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight100 (1.00%)
Transaction InfoBlock #26492125/Trx fe2ae3cc792838bc4598862c4016f9669aee06e6
View Raw JSON Data
{
  "trx_id": "fe2ae3cc792838bc4598862c4016f9669aee06e6",
  "block": 26492125,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-03T19:25:21",
  "op": [
    "vote",
    {
      "voter": "fastresteem",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 100
    }
  ]
}
2018/10/03 19:25:12
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
body@@ -1849,21 +1849,16 @@ , it is -very importan @@ -1864,20 +1864,16 @@ nt that -all block pr
json metadata{"tags":["eos","libertyblock","eosio-sudo","eosio-wrap"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26492122/Trx 3b2f05d189a6e817cb5d3513ee24c9c60c42396a
View Raw JSON Data
{
  "trx_id": "3b2f05d189a6e817cb5d3513ee24c9c60c42396a",
  "block": 26492122,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-03T19:25:12",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "@@ -1849,21 +1849,16 @@\n , it is \n-very \n importan\n@@ -1864,20 +1864,16 @@\n nt that \n-all \n block pr\n",
      "json_metadata": "{\"tags\":[\"eos\",\"libertyblock\",\"eosio-sudo\",\"eosio-wrap\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/10/03 19:20:21
parent authorlukestokes
parent permlinkre-blockliberty-eosio-wrap-eosio-sudo-demystified-20181002t182152460z
authorblockliberty
permlinkre-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t192017877z
title
bodyAn example would be the EOS 911 accounts. Users that can prove with an Ethereum transaction that they lost their EOS key can request a key change from ECAF or directly from block producers. Many users have requested this specific service and my guess is this will become the first use case. I see this as another tool just like the referendum that will be needed for governance. It doesn't add new functionalities, but simplifies an existing one and makes it more transparent. Every action actually taken with this tool will still have to be approved by BPs.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #26492025/Trx 37c875acdc1ee16736ecb1b2b161e9dd0096590e
View Raw JSON Data
{
  "trx_id": "37c875acdc1ee16736ecb1b2b161e9dd0096590e",
  "block": 26492025,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-03T19:20:21",
  "op": [
    "comment",
    {
      "parent_author": "lukestokes",
      "parent_permlink": "re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181002t182152460z",
      "author": "blockliberty",
      "permlink": "re-lukestokes-re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181003t192017877z",
      "title": "",
      "body": "An example would be the EOS 911 accounts. Users that can prove with an Ethereum transaction that they lost their EOS key can request a key change from ECAF or directly from block producers. Many users have requested this specific service and my guess is this will become the first use case. \n\nI see this as another tool just like the referendum that will be needed for governance. It doesn't add new functionalities, but simplifies an existing one and makes it more transparent. Every action actually taken with this tool will still have to be approved by BPs.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/03 03:57:15
voterklumpkatt
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #26473575/Trx 974cf9a4bedfee984142049fd18400b9c7fc1d9f
View Raw JSON Data
{
  "trx_id": "974cf9a4bedfee984142049fd18400b9c7fc1d9f",
  "block": 26473575,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-03T03:57:15",
  "op": [
    "vote",
    {
      "voter": "klumpkatt",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
promotedpostsent 0.001 SBD to @blockliberty- "Hello, our user. We have created a system to deliver the article to more people. Resteem to 14.500+ Followers | @promotedpost Upvote ⏩(3500SP) | Upvote with min +200 Different account | Our post will ..."
2018/10/02 18:53:39
frompromotedpost
toblockliberty
amount0.001 SBD
memoHello, our user. We have created a system to deliver the article to more people. Resteem to 14.500+ Followers | @promotedpost Upvote ⏩(3500SP) | Upvote with min +200 Different account | Our post will be more popular and you will find new friends | Send 1 SBD or 1 STEEM to @promotedpost (URL as memo) Service Active
Transaction InfoBlock #26462706/Trx aca562ae392d1fcc0e44a5012ef78409f7e6d90d
View Raw JSON Data
{
  "trx_id": "aca562ae392d1fcc0e44a5012ef78409f7e6d90d",
  "block": 26462706,
  "trx_in_block": 26,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-02T18:53:39",
  "op": [
    "transfer",
    {
      "from": "promotedpost",
      "to": "blockliberty",
      "amount": "0.001 SBD",
      "memo": "Hello, our user. We have created a system to deliver the article to more people. Resteem to 14.500+ Followers | @promotedpost Upvote ⏩(3500SP) | Upvote with min +200 Different account | Our post will be more popular and you will find new friends | Send 1 SBD or 1 STEEM to @promotedpost (URL as memo) Service Active"
    }
  ]
}
2018/10/02 18:21:51
parent authorblockliberty
parent permlinkeosio-wrap-eosio-sudo-demystified
authorlukestokes
permlinkre-blockliberty-eosio-wrap-eosio-sudo-demystified-20181002t182152460z
title
bodyExcellent write up. Do you have some examples of how this will be used? I started a <a href="https://forums.eosgo.io/discussion/1584/questions-about-eosio-sudo-for-discussion#latest">conversation back in July</a> about this functionality, and I'm still not clear exactly how it would be used. > Currently, 15/21 block producers can already change an account's keys or modify an account's contract at the request of ECAF or an account's owner. Has any this been done yet on EOS and are there people wanting something to be done like this now? I wonder if we need to get our governance system in place first (referendum voting to approve a constitution which clarifies the role of arbitration, etc) before we make tools easier for BPs to use which have the potential of... well... messing something up. :) Thoughts?
json metadata{"tags":["eos"],"links":["https://forums.eosgo.io/discussion/1584/questions-about-eosio-sudo-for-discussion#latest"],"app":"steemit/0.1"}
Transaction InfoBlock #26462070/Trx 841b6bd179ed41ff25858d0262bda5c3607fcd88
View Raw JSON Data
{
  "trx_id": "841b6bd179ed41ff25858d0262bda5c3607fcd88",
  "block": 26462070,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-02T18:21:51",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "eosio-wrap-eosio-sudo-demystified",
      "author": "lukestokes",
      "permlink": "re-blockliberty-eosio-wrap-eosio-sudo-demystified-20181002t182152460z",
      "title": "",
      "body": "Excellent write up. Do you have some examples of how this will be used?\n\nI started a <a href=\"https://forums.eosgo.io/discussion/1584/questions-about-eosio-sudo-for-discussion#latest\">conversation back in July</a> about this functionality, and I'm still not clear exactly how it would be used.\n\n> Currently, 15/21 block producers can already change an account's keys or modify an account's contract at the request of ECAF or an account's owner. \n\nHas any this been done yet on EOS and are there people wanting something to be done like this now?\n\nI wonder if we need to get our governance system in place first (referendum voting to approve a constitution which clarifies the role of arbitration, etc) before we make tools easier for BPs to use which have the potential of... well... messing something up. :)\n\nThoughts?",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://forums.eosgo.io/discussion/1584/questions-about-eosio-sudo-for-discussion#latest\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/10/02 18:18:36
voterlukestokes
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #26462005/Trx 2671ee0a5d21db9008b7ce409ce095a7600146f0
View Raw JSON Data
{
  "trx_id": "2671ee0a5d21db9008b7ce409ce095a7600146f0",
  "block": 26462005,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-02T18:18:36",
  "op": [
    "vote",
    {
      "voter": "lukestokes",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
2018/10/02 16:15:27
voterfrei
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
weight10000 (100.00%)
Transaction InfoBlock #26459543/Trx 12804fe7fef44238e8b109b1f1b539a64abe9683
View Raw JSON Data
{
  "trx_id": "12804fe7fef44238e8b109b1f1b539a64abe9683",
  "block": 26459543,
  "trx_in_block": 20,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-02T16:15:27",
  "op": [
    "vote",
    {
      "voter": "frei",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "weight": 10000
    }
  ]
}
2018/10/02 15:34:03
parent author
parent permlinkeos
authorblockliberty
permlinkeosio-wrap-eosio-sudo-demystified
titleEosio.wrap (eosio.sudo) demystified
bodyThe `eosio.wrap` (formerly `eosio.sudo`) contract proposal and implementation has been a source of a lot of confusion and FUD in the past couple months. This post will walk through the code from the Block.one `eosio.sudo` contract, explain how it works, and address potential security concerns. # Brief FAQ Here's a quick overview of `eosio.wrap` before diving into the code. ## What is the relation between `eosio.wrap` and `eosio.sudo`? `eosio.wrap` is the system privileged account under which the `eosio.sudo` contract will be deployed. So `eosio.wrap` refers to the EOS mainnet account that implements `eosio.sudo`, while `eosio.sudo` refers to the code. The decision was made to rename `eosio.sudo` to `eosio.wrap` for the mainnet because the contract does not contain potential security flaws such as retroactive write ability that exist in a typical `sudo` implementation or provide additional superuser capabilities that are not typically available to block producers. All it does is wrap an existing functionality for readability and transparency, so the new name more accurately reflects how it operates. ## Why do we need `eosio.wrap`? `eosio.wrap` is a contract that simplifies Block Producer superuser actions by making them more readable and easier to audit. It does **not** grant block producers any additional powers that do not already exist within the system. Currently, 15/21 block producers can already change an account's keys or modify an account's contract at the request of ECAF or an account's owner. However, the current method is opaque and leaves undesirable side effects on specific system accounts. `eosio.wrap` allows for a cleaner method of implementing these important governance actions. # Code Review `eosio.wrap` will be a system contract with privileged authority and wide-reaching power. As such, it is very important that all block producers understand the code before agreeing to its implementation. Since the code was developed under the name `eosio.sudo` and still exists under that name, we will be using `eosio.sudo` interchangeably to refer to `eosio.wrap` in the code review. ## Header File Smart contract header files are generally where contract functions and tables are defined. The `eosio.sudo`header file is printed below: ``` #include <eosiolib/eosio.hpp> namespace eosio { class sudo : public contract { public: sudo( account_name self ):contract(self){} void exec(); }; } /// namespace eosio ``` What's curious about the file is not what it contains, but what it doesn't contain. The vast majority of the header file is standard contract boilerplate that is required in every contract. The only real line of code in the whole header file is this: ``` void exec(); ``` This defines a single contract function, `exec`, that takes no explicit arguments. As we will see later, the function actually does take input data, but it reads the data using low-level EOSIO methods instead of high-level function arguments. Importantly, the contract contains **no database tables**. The contract does not and cannot maintain state across actions, which means any authorizations it is granted for an action are limited to that action only. Unlike a typical `sudo` authorization in command line, `eosio.sudo` does not grant retroactive write privileges for a specified time period. This is one of the reasons we have proposed calling the contract `eosio.wrap` instead of `eosio.sudo`. ## ABI The ABI file is far more detailed than the header file. It contains specifics on exactly what data types need to be included in the function arguments to execute a sudo action successfully. Full details of the ABI are not required to understand the contract, so only necessary highlights will be described here. The full file is [here](https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi) if you are interested. ABI files define `actions` and `tables` that are publicly accessible to client software. The `structs` and `types` sections are helpers used to describe the data formats of the `tables` and `actions`. An important security note: ABI enforcement can be bypassed when executing transactions. Messages and actions passed to a contract do not have to conform to the ABI. The ABI is a guide, not a gatekeeper, as multiple prominent hacks have demonstrated. The true gatekeeper of a contract is the C-level `apply` function required in every contract. To avoid inserting difficult to read code with potential security holes into a contract, most developers use the `EOSIO_ABI` macro to wrap their `apply` function. We will see this pop up again when reviewing the contract code. As in the header file, the ABI contains one action and no database tables: ``` "actions": [{ "name": "exec", "type": "exec", "ricardian_contract": "" } ], "tables": [], ``` More detail about the structure of the `exec` function is provided in the `exec` struct. ``` "name": "exec", "base": "", "fields": [ {"name":"executer", "type":"account_name"}, {"name":"trx", "type":"transaction"} ] ``` Executing a function requires passing in an account, the executer, that will be used to pay the RAM and CPU fees, and a raw packed transaction. If you look deeper into the ABI, you'll see struct definitions for `transaction` and its sub-types `transaction_header`, `action`, `permission_level`, and `action`. These struct definitions make it seem like constructing the transaction portion is difficult, but in reality all it requires is passing in a standard EOS transaction JSON. Creating a transaction JSON is supported by cleos with the `-s -j -d` flags (skip signature, json output, don't broadcast). For example, the command ``` cleos set account permission -s -j -d kedartheiyer active EOS63QUijU5kuaeQ8d4GnVekisWWKjZ4XkoGxFRyhEVZbc1hndK8u ``` would output the following transaction JSON: ``` { "expiration": "2018-10-02T14:09:27", "ref_block_num": 26989, "ref_block_prefix": 3356355165, "max_net_usage_words": 0, "max_cpu_usage_ms": 0, "delay_sec": 0, "context_free_actions": [], "actions": [{ "account": "eosio", "name": "updateauth", "authorization": [{ "actor": "kedartheiyer", "permission": "active" } ], "data": "709577aae56b928200000000a8ed32320000000080ab26a70100000001000297f0db93cecf32d34b739a9735236f2cbc65f3bb2b4d8471b2746994f86668df01000000" } ], "transaction_extensions": [], "signatures": [], "context_free_data": [] } ``` This transaction JSON could now be used by block producers to construct a `sudo` action. ## The `exec` function The full source for the `eosio.sudo` main file is located [here](https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp). We will walk through the `exec` function in chunks and explain each bit as we go. The first line ensures that the authority for the account has been satisfied before attempting an execution. ``` void sudo::exec() { require_auth( _self ); ``` On the mainnet, `eosio.wrap` will be controlled by `eosio.prods`, so attempting to execute an action without the approval of 15/21 active block producers will immediately fail. The second block of code reads the action data into a memory buffer for later use. ``` constexpr size_t max_stack_buffer_size = 512; size_t size = action_data_size(); char* buffer = (char*)( max_stack_buffer_size < size ? malloc(size) : alloca(size) ); read_action_data( buffer, size ); ``` The EOSIO library provides 2 low-level functions to read raw action data: `action_data_size` and `read_action_data`. The raw action data is the byte representation of the arguments passed to an action. Transaction JSONs include hex representations of the raw action data in the `data` field of each action. For the transaction JSON we constructed in the previous section, the raw action data has the hex value `709577aae56b928200000000a8ed32320000000080ab26a70100000001000297f0db93cecf32d34b739a9735236f2cbc65f3bb2b4d8471b2746994f86668df01000000` The first 3 lines use the size of the action data to decide whether memory for the buffer should be allocated in the heap or the stack. Stack memory is cleared at the end of the function's execution, while heap memory in EOS is automatically freed at the end of an action. Confused readers can safely ignore this snippet with the assurance that no memory leaks will occur as a result. Once the location and size of the buffer is determined, the 4th line reads the raw action data into the buffer for later use. The next block of code uses the buffer to determine which account will pay for the wrapped transaction's RAM, NET, and CPU. ``` account_name executer; datastream<const char*> ds( buffer, size ); ds >> executer; ``` As you may recall, the `exec` function takes 2 ABI arguments, an `executer`and a `transaction`. Raw action data is nothing but a tightly packed series of ABI arguments, so the first 8 bytes of the raw action data contains the `executer` (`account_name` is an alias for `uint64_t`), while the remainder contains the transaction. A datastream is an efficient way of reading data from a buffer. `ds >> executer` reads the first 8 bytes of the buffer into the `executer` variable then moves the stream pointer to the next unread byte where the `transaction` argument begins. The next line of code verifies that the executor has signed the transaction. ``` require_auth( executer ); ``` This prevents an unwitting executor from accidentally having to pay the network costs for a transaction. Generally the proposer of a sudo transaction should set themselves as the executor. The last 2 lines of code create a deferred transaction with no delay from the wrapped transaction. A deferred transaction is required so that a) `eosio.wrap` can avoid paying the network costs for the wrapped transaction b) the success and failure of the wrapped transaction can be isolated from the wrapper ``` size_t trx_pos = ds.tellp(); send_deferred( (uint128_t(executer) << 64) | current_time(), executer, buffer+trx_pos, size-trx_pos ); ``` `send_deferred` takes a 128-bit ID, an executor, a pointer to a transaction buffer, and the transaction size in bytes as arguments. The details of `(uint128_t(executer) << 64) | current_time()` aren't important. All you need to know is that it creates a unique 128-bit ID that can be used to cancel the transaction later if necessary. `tellp` is used to determine the current position of the stream pointer, so `trx_pos`will contain the offset in bytes of the start of the `transaction`. # Deploying `eosio.wrap` Implementing `eosio.wrap` requires 15/21 BPs to approve two separate proposals. One to create the `eosio.wrap` account, another to deploy the `eosio.sudo` contract to `eosio.wrap`. The first transation has to be executed before the second can be proposed. ## Create `eosio.wrap` Account You can review the first createwrap transaction with: ```bash cleos multisig review libertyblock createwrap ``` This transaction contains 4 actions: 1. `eosio::newaccount`: Create the eosio.wrap account 2. `eosio::buyrambytes`: Buy 50 kB worth of RAM for the account. The EOS for the RAM purchase comes from the eosio account, which currently has an adequate balance of 12 EOS. 3. `eosio::delegatebw`: Stake 1 EOS for NET and 1 EOS for CPU for eosio.wrap. This isn't very important because we can always delegate more resources to the account later if needed. 4. `eosio::setpriv`: Make eosio.wrap a privileged account. ## Deploy `eosio.sudo` contract to `eosio.wrap` TBD
json metadata{"tags":["eos","libertyblock","eosio-sudo","eosio-wrap"],"links":["https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi","https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #26458716/Trx 15006593c4e3a9830100bd3e88dd92e76eead152
View Raw JSON Data
{
  "trx_id": "15006593c4e3a9830100bd3e88dd92e76eead152",
  "block": 26458716,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-10-02T15:34:03",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "eosio-wrap-eosio-sudo-demystified",
      "title": "Eosio.wrap (eosio.sudo) demystified",
      "body": "The `eosio.wrap` (formerly `eosio.sudo`) contract proposal and implementation has been a source of a lot of confusion and FUD in the past couple months. This post will walk through the code from the Block.one `eosio.sudo` contract, explain how it works, and address potential security concerns.\n\n# Brief FAQ\n\nHere's a quick overview of `eosio.wrap` before diving into the code.\n\n## What is the relation between `eosio.wrap` and `eosio.sudo`?\n\n`eosio.wrap` is the system privileged account under which the `eosio.sudo` contract will be deployed. So `eosio.wrap` refers to the EOS mainnet account that implements `eosio.sudo`, while `eosio.sudo` refers to the code. The decision was made to rename `eosio.sudo` to `eosio.wrap` for the mainnet because the contract does not contain  potential security flaws such as retroactive write ability that exist in a typical `sudo` implementation or provide additional superuser capabilities that are not typically available to block producers. All it does is wrap an existing functionality for readability and transparency, so the new name more accurately reflects how it operates.  \n\n## Why do we need `eosio.wrap`?\n\n`eosio.wrap` is a contract that simplifies Block Producer superuser actions by making them more readable and easier to audit. It does **not** grant block producers any additional powers that  do not already exist within the system. Currently, 15/21 block producers can already change an account's keys or modify an account's contract at the request of ECAF or an account's owner. However, the current method is opaque and leaves undesirable side effects on specific system accounts. `eosio.wrap` allows for a cleaner method of implementing these important governance actions.  \n\n# Code Review\n\n`eosio.wrap` will be a system contract with privileged authority and wide-reaching power. As such, it is very important that all block producers understand the code before agreeing to its implementation. Since the code was developed under the name `eosio.sudo` and still exists under that name, we will be using `eosio.sudo` interchangeably to refer to `eosio.wrap` in the code review.\n\n## Header File\n\nSmart contract header files are generally where contract functions and tables are defined. The `eosio.sudo`header file is printed below:\n\n```\n#include <eosiolib/eosio.hpp>\n\nnamespace eosio {\n\n   class sudo : public contract {\n      public:\n         sudo( account_name self ):contract(self){}\n\n         void exec();\n\n   };\n\n} /// namespace eosio\n```\n\nWhat's curious about the file is not what it contains, but what it doesn't contain. The vast majority of the header file is standard contract boilerplate that is required in every contract. The only real line of code in the whole header file is this:\n\n```\nvoid exec();\n```\n\nThis defines a single contract function, `exec`, that takes no explicit arguments. As we will see later, the function actually does take input data, but it reads the data using low-level EOSIO methods instead of high-level function arguments.\n\nImportantly, the contract contains **no database tables**.  The contract does not and cannot maintain state across actions, which means any authorizations it is granted for an action are limited to that action only. Unlike a typical `sudo` authorization in command line, `eosio.sudo` does not grant retroactive write privileges for a specified time period. This is one of the reasons we have proposed calling the contract `eosio.wrap` instead of `eosio.sudo`.\n\n## ABI\n\nThe ABI file is far more detailed than the header file. It contains specifics on exactly what data types need to be included in the function arguments to execute a sudo action successfully. Full details of the ABI are not required to understand the contract, so only necessary highlights will be described here. The full file is [here](https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi) if you are interested. \n\nABI files define `actions` and `tables` that are publicly accessible to client software. The `structs` and `types` sections are helpers used to describe the  data formats of the `tables` and `actions`. \n\nAn important security note: ABI enforcement can be bypassed when executing transactions. Messages and actions passed to a contract do not have to conform to the ABI. The ABI is a guide, not a gatekeeper, as multiple prominent hacks have demonstrated. \n\nThe true gatekeeper of a contract is the C-level `apply` function required in every contract. To avoid inserting difficult to read code with potential security holes into a contract,  most developers use the `EOSIO_ABI` macro to wrap their `apply` function. We will see this pop up again when reviewing the contract code. \n\nAs in the header file, the ABI contains one action and no database tables:\n\n```\n  \"actions\": [{\n      \"name\": \"exec\",\n      \"type\": \"exec\",\n      \"ricardian_contract\": \"\"\n    }\n  ],\n  \"tables\": [],\n```\n\nMore detail about the structure of the `exec` function is provided in the `exec` struct.\n\n```\n\"name\": \"exec\",\n\"base\": \"\",\n\"fields\": [\n    {\"name\":\"executer\", \"type\":\"account_name\"},\n    {\"name\":\"trx\", \"type\":\"transaction\"}\n]\n```\n\nExecuting a function requires passing in an account, the executer, that will be used to pay the RAM and CPU fees, and a raw packed transaction. \n\nIf you look deeper into the ABI, you'll see struct definitions for `transaction` and its sub-types `transaction_header`, `action`, `permission_level`, and `action`. These struct definitions make it seem like constructing the transaction portion is difficult, but in reality all it requires is passing in a standard EOS transaction JSON. \n\nCreating a transaction JSON is supported by cleos with the `-s -j -d` flags (skip signature, json output, don't broadcast). For example, the command\n\n```\ncleos set account permission -s -j -d kedartheiyer active EOS63QUijU5kuaeQ8d4GnVekisWWKjZ4XkoGxFRyhEVZbc1hndK8u\n```\n\nwould output the following transaction JSON:\n\n```\n{\n  \"expiration\": \"2018-10-02T14:09:27\",\n  \"ref_block_num\": 26989,\n  \"ref_block_prefix\": 3356355165,\n  \"max_net_usage_words\": 0,\n  \"max_cpu_usage_ms\": 0,\n  \"delay_sec\": 0,\n  \"context_free_actions\": [],\n  \"actions\": [{\n      \"account\": \"eosio\",\n      \"name\": \"updateauth\",\n      \"authorization\": [{\n          \"actor\": \"kedartheiyer\",\n          \"permission\": \"active\"\n        }\n      ],\n      \"data\": \"709577aae56b928200000000a8ed32320000000080ab26a70100000001000297f0db93cecf32d34b739a9735236f2cbc65f3bb2b4d8471b2746994f86668df01000000\"\n    }\n  ],\n  \"transaction_extensions\": [],\n  \"signatures\": [],\n  \"context_free_data\": []\n}\n```\n\nThis transaction JSON could now be used by block producers to construct a `sudo` action.\n\n## The `exec` function\n\nThe full source for the `eosio.sudo` main file is located [here](https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp). \n\nWe will walk through the `exec` function in chunks and explain each bit as we go. \n\nThe first line ensures that the authority for the account has been satisfied before attempting an execution.\n\n```\nvoid sudo::exec() {\n   require_auth( _self );\n```\n\nOn the mainnet, `eosio.wrap` will be controlled by `eosio.prods`, so attempting to execute an action without the approval of 15/21 active block producers will immediately fail. \n\nThe second block of code reads the action data into a memory buffer for later use. \n\n```\nconstexpr size_t max_stack_buffer_size = 512;\nsize_t size = action_data_size();\nchar* buffer = (char*)( max_stack_buffer_size < size ? malloc(size) : alloca(size) );\nread_action_data( buffer, size );\n```\n\nThe EOSIO library provides 2 low-level functions to read raw action data: `action_data_size` and `read_action_data`. The raw action data is the byte representation of the arguments passed to an action. Transaction JSONs include hex representations of the raw action data in the `data` field of each action. For the transaction JSON we constructed in the previous section, the raw action data has the hex value `709577aae56b928200000000a8ed32320000000080ab26a70100000001000297f0db93cecf32d34b739a9735236f2cbc65f3bb2b4d8471b2746994f86668df01000000`\n\nThe first 3 lines use the size of the action data to decide whether memory for the buffer should be allocated in the heap or the stack. Stack memory is cleared at the end of the function's execution, while heap memory in EOS is automatically freed at the end of an action. Confused readers can safely ignore this snippet with the assurance that no memory leaks will occur as a result.\n\nOnce the location and size of the buffer is determined, the 4th line reads the raw action data into the buffer for later use. \n\nThe next block of code uses the buffer to determine which account will pay for the wrapped transaction's RAM, NET, and CPU. \n\n```\naccount_name executer;\n\ndatastream<const char*> ds( buffer, size );\nds >> executer;\n```\n\nAs you may recall, the `exec` function takes 2 ABI arguments, an `executer`and a `transaction`. Raw action data is nothing but a tightly packed series of ABI arguments, so the first 8 bytes of the raw action data contains the `executer` (`account_name` is an alias for `uint64_t`), while the remainder contains the transaction.  \n\nA datastream is an efficient way of reading data from a buffer. `ds >> executer` reads the first 8 bytes of the buffer into the `executer`  variable then moves the stream pointer to the next unread byte where the `transaction` argument begins.\n\nThe next line of code verifies that the executor has signed the transaction.\n\n```\nrequire_auth( executer );\n```\n\nThis prevents an unwitting executor from accidentally having to pay the network costs for a transaction. Generally the proposer of a sudo transaction should set themselves as the executor. \n\nThe last 2 lines of code create a deferred transaction with no delay from the wrapped transaction. A deferred transaction is required so that \n\na) `eosio.wrap` can avoid paying the network costs for the wrapped transaction\nb) the success and failure of the wrapped transaction can be isolated from the wrapper\n\n```\nsize_t trx_pos = ds.tellp();\nsend_deferred( (uint128_t(executer) << 64) | current_time(), executer, buffer+trx_pos, size-trx_pos ); \n```\n\n`send_deferred` takes a 128-bit ID, an executor, a pointer to a transaction buffer, and the transaction size in bytes as arguments. \n\nThe details of `(uint128_t(executer) << 64) | current_time()` aren't important. All you need to know is that it creates a unique 128-bit ID that can be used to cancel the transaction later if necessary. \n\n`tellp` is used to determine the current position of the stream pointer, so `trx_pos`will contain the offset in bytes of the start of the `transaction`.\n\n# Deploying `eosio.wrap`\n\nImplementing `eosio.wrap` requires 15/21 BPs to approve two separate proposals. One to create the `eosio.wrap` account, another to deploy the `eosio.sudo` contract to `eosio.wrap`. The first transation has to be executed before the second can be proposed.\n\n## Create `eosio.wrap` Account\n\nYou can review the first createwrap transaction with:\n\n```bash\ncleos multisig review libertyblock createwrap\n```\n\nThis transaction contains 4 actions:\n\n1. `eosio::newaccount`: Create the eosio.wrap account\n2. `eosio::buyrambytes`: Buy 50 kB worth of RAM for the account. The EOS for the RAM purchase comes from the eosio account, which currently has an adequate balance of 12 EOS.\n3. `eosio::delegatebw`: Stake 1 EOS for NET and 1 EOS for CPU for eosio.wrap. This isn't very important because we can always delegate more resources to the account later if needed.\n4. `eosio::setpriv`: Make eosio.wrap a privileged account. \n\n\n ## Deploy `eosio.sudo` contract to `eosio.wrap`\n\nTBD",
      "json_metadata": "{\"tags\":[\"eos\",\"libertyblock\",\"eosio-sudo\",\"eosio-wrap\"],\"links\":[\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/abi/eosio.sudo.abi\",\"https://github.com/EOSIO/eosio.contracts/blob/master/eosio.sudo/src/eosio.sudo.cpp\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/09/04 12:41:33
votermickeytreport
authorblockliberty
permlinkhow-to-vote-for-your-favorite-eos-block-producer-using-greymass
weight10000 (100.00%)
Transaction InfoBlock #25665061/Trx 1a24e840444ae5ad92545732bf84abebdde745ac
View Raw JSON Data
{
  "trx_id": "1a24e840444ae5ad92545732bf84abebdde745ac",
  "block": 25665061,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-09-04T12:41:33",
  "op": [
    "vote",
    {
      "voter": "mickeytreport",
      "author": "blockliberty",
      "permlink": "how-to-vote-for-your-favorite-eos-block-producer-using-greymass",
      "weight": 10000
    }
  ]
}
2018/08/15 22:07:54
voterblockconomist
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #25100663/Trx faaba51da9197cefc2501d128db47eb3cadcb35d
View Raw JSON Data
{
  "trx_id": "faaba51da9197cefc2501d128db47eb3cadcb35d",
  "block": 25100663,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-15T22:07:54",
  "op": [
    "vote",
    {
      "voter": "blockconomist",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
2018/07/19 11:22:09
votersta99
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24310983/Trx 7ba59b79a233d0d9086d3c829a78010dafd46ae5
View Raw JSON Data
{
  "trx_id": "7ba59b79a233d0d9086d3c829a78010dafd46ae5",
  "block": 24310983,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-19T11:22:09",
  "op": [
    "vote",
    {
      "voter": "sta99",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/18 18:02:39
votershaikfarru
authorblockliberty
permlinkhow-to-vote-for-your-favorite-eos-block-producer-using-scatter
weight10000 (100.00%)
Transaction InfoBlock #24290207/Trx 70e57022e230c30d16ee3fad6e7e3cd3b52a33ff
View Raw JSON Data
{
  "trx_id": "70e57022e230c30d16ee3fad6e7e3cd3b52a33ff",
  "block": 24290207,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-18T18:02:39",
  "op": [
    "vote",
    {
      "voter": "shaikfarru",
      "author": "blockliberty",
      "permlink": "how-to-vote-for-your-favorite-eos-block-producer-using-scatter",
      "weight": 10000
    }
  ]
}
2018/07/16 07:17:48
voterslickshot
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight5400 (54.00%)
Transaction InfoBlock #24219780/Trx e9b71c69425badbe5795837be7a4a54222979e7f
View Raw JSON Data
{
  "trx_id": "e9b71c69425badbe5795837be7a4a54222979e7f",
  "block": 24219780,
  "trx_in_block": 41,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-16T07:17:48",
  "op": [
    "vote",
    {
      "voter": "slickshot",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 5400
    }
  ]
}
2018/07/16 07:17:45
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authorslickshot
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180716t071746307z
title
bodyHey guys at @blockliberty, Awesome awesome work you do for the EOS Platform problem is not to many people see it. The reason i'm here is because someone found your blog very high quality and I was lucky to review your blog for your whitelist application and I agree so I've approved the application, with this you can now use big Minnowbooster upvotes for an almost guaranteed profit in boosting your post and more exposure so more people see your awesome work. You guys are waaay smarter than I am so i guess no need to introduce Minnowbooster to you guys. Hope to see you guys get as much exposure as cypherglass someday! Try sending any amount of SBD to minnowbooster in your WALLET and add the link of your post that you want to get voted by minnowbooster in the MEMO Have a go and see for yourself. TIP: If you boost your post with MB with around 30 SBD or more you often get to hot almost immediately. TIP 2 : you can send miniscule amonts multiple times like 0.10 SBD and someone selling votes with MB will vote for your posts. TIP 3 : If you still dont understand but want to know more. This is the Discord Link for Minnowbooster you can ask all the question you want there and there is always a customer service rep that can answer your question. [https://discord.gg/mVcDtdA](https://discord.gg/mVcDtdA) Disclaimer : I'm not paid by MB to post this but I do use it myself and sell my votes in MB too. Have a look at my blog and see for yourself. To learn more. Read here. https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-epic-update-community-whitelist-now-online https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-insights-on-the-mb-vote-value-calculation
json metadata{"tags":["eos"],"users":["blockliberty"],"links":["https://discord.gg/mVcDtdA","https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-epic-update-community-whitelist-now-online","https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-insights-on-the-mb-vote-value-calculation"],"app":"steemit/0.1"}
Transaction InfoBlock #24219779/Trx 9174a6df9672dce3469c829cd937c8b5d4010072
View Raw JSON Data
{
  "trx_id": "9174a6df9672dce3469c829cd937c8b5d4010072",
  "block": 24219779,
  "trx_in_block": 37,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-16T07:17:45",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "slickshot",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180716t071746307z",
      "title": "",
      "body": "Hey guys at @blockliberty,\n\nAwesome awesome work you do for the EOS Platform problem is not to many people see it.\n\nThe reason i'm here is because  someone found your blog very high quality and I was lucky to review your blog for your whitelist application and  I agree so I've approved the application, with this you can now use big Minnowbooster upvotes for  an almost guaranteed profit in boosting your post and more exposure so more people see your awesome work.\n\nYou guys are waaay smarter than I am so i guess no need to introduce Minnowbooster to you guys.\n\nHope to see you guys get as much exposure as cypherglass someday!\n\n\n\nTry sending any amount of SBD to minnowbooster in your WALLET and add the link of your post that you want to get voted by minnowbooster in the MEMO\n\nHave a go and see for yourself. \n\nTIP:  If you boost your post with MB with around 30 SBD or more you often get to hot almost immediately. \n\nTIP 2 : you can send miniscule amonts multiple times like 0.10 SBD and someone selling votes with MB will vote for your posts.\n\nTIP 3 : If you still dont understand but want to know more. This is the Discord Link for Minnowbooster you can ask all the question you want there and there is always a customer service rep that can answer your question. [https://discord.gg/mVcDtdA](https://discord.gg/mVcDtdA)\n\nDisclaimer : I'm not paid by MB to post this but I do use it myself and sell my votes in MB too. Have a look at my blog and see for yourself. \n\n\n\n\nTo learn more. Read here.\n\n\nhttps://steemit.com/minnowbooster/@minnowbooster/minnowbooster-epic-update-community-whitelist-now-online\n\nhttps://steemit.com/minnowbooster/@minnowbooster/minnowbooster-insights-on-the-mb-vote-value-calculation",
      "json_metadata": "{\"tags\":[\"eos\"],\"users\":[\"blockliberty\"],\"links\":[\"https://discord.gg/mVcDtdA\",\"https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-epic-update-community-whitelist-now-online\",\"https://steemit.com/minnowbooster/@minnowbooster/minnowbooster-insights-on-the-mb-vote-value-calculation\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
minnowboostersent 0.001 SBD to @blockliberty- "Congrats! You have been accepted to the @minnowbooster Community driven Whitelist. You now have access to some nice perks, such as bigger upvote limits and the potential to earn bonus payments! Want t..."
2018/07/16 07:14:24
fromminnowbooster
toblockliberty
amount0.001 SBD
memoCongrats! You have been accepted to the @minnowbooster Community driven Whitelist. You now have access to some nice perks, such as bigger upvote limits and the potential to earn bonus payments! Want to contribute? Click here: https://www.minnowbooster.net/whitelist
Transaction InfoBlock #24219712/Trx c05c2c28a5118779412c9315305d4738845c1b63
View Raw JSON Data
{
  "trx_id": "c05c2c28a5118779412c9315305d4738845c1b63",
  "block": 24219712,
  "trx_in_block": 32,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-16T07:14:24",
  "op": [
    "transfer",
    {
      "from": "minnowbooster",
      "to": "blockliberty",
      "amount": "0.001 SBD",
      "memo": "Congrats! You have been accepted to the @minnowbooster Community driven Whitelist. You now have access to some nice perks, such as bigger upvote limits and the potential to earn bonus payments! Want to contribute? Click here: https://www.minnowbooster.net/whitelist"
    }
  ]
}
blocklibertyreceived 0.092 STEEM, 0.041 SBD, 0.156 SP author reward for @blockliberty / post-mortem-july-8-2018-bp-failure
2018/07/15 18:53:30
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
sbd payout0.041 SBD
steem payout0.092 STEEM
vesting payout253.561817 VESTS
Transaction InfoBlock #24204896/Virtual Operation #6
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 24204896,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 6,
  "timestamp": "2018-07-15T18:53:30",
  "op": [
    "author_reward",
    {
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "sbd_payout": "0.041 SBD",
      "steem_payout": "0.092 STEEM",
      "vesting_payout": "253.561817 VESTS"
    }
  ]
}
2018/07/13 08:59:15
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authordatajunky
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180713t085917154z
title
bodyI've set up a proxy account to vote for members who don't have the time to properly vett trusted Block Producers. If you want to contribute to the voting process but don't have time to check out who's the best and who's just a whale or exchange, then set your proxy vote to this account: https://eosflare.io/account/eoswatchdogs To EOS Community Members who want to improve the health and security of the EOS network, please consider voting for 30 Block Producers for a wider distribution of voting, or choose a proxy that you feel resonates with what you would want in a blockchain.
json metadata{"tags":["eos"],"links":["https://eosflare.io/account/eoswatchdogs"],"app":"steemit/0.1"}
Transaction InfoBlock #24135424/Trx e4fe86f272e774072d446db259f410676acdc7b8
View Raw JSON Data
{
  "trx_id": "e4fe86f272e774072d446db259f410676acdc7b8",
  "block": 24135424,
  "trx_in_block": 49,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-13T08:59:15",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "datajunky",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180713t085917154z",
      "title": "",
      "body": "I've set up a proxy account to vote for members who don't have the time to properly vett trusted Block Producers. If you want to contribute to the voting process but don't have time to check out who's the best and who's just a whale or exchange, then set your proxy vote to this account:  https://eosflare.io/account/eoswatchdogs \n\nTo EOS Community Members who want to improve the health and security of the EOS network, please consider voting for 30 Block Producers for a wider distribution of voting, or choose a proxy that you feel resonates with what you would want in a blockchain.",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://eosflare.io/account/eoswatchdogs\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/12 14:39:54
voterdrpradeepv
authorblockliberty
permlinkhow-to-vote-for-your-favorite-eos-block-producer-using-greymass
weight10000 (100.00%)
Transaction InfoBlock #24113452/Trx 354c91c554bd147f3e0da43207566eac0ad0f210
View Raw JSON Data
{
  "trx_id": "354c91c554bd147f3e0da43207566eac0ad0f210",
  "block": 24113452,
  "trx_in_block": 36,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-12T14:39:54",
  "op": [
    "vote",
    {
      "voter": "drpradeepv",
      "author": "blockliberty",
      "permlink": "how-to-vote-for-your-favorite-eos-block-producer-using-greymass",
      "weight": 10000
    }
  ]
}
2018/07/11 07:54:27
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authorwukoo
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180711t075425316z
title
bodyActually, There is NO DEFAULT value of this item in eos github repo. what you said "default" value 1024, it is from [eos-bios](https://github.com/eoscanada/eos-bios) created by eoscanada. when launching the eos mainnet, many bps used this config. But there are little peoples can explain what it really means. And No One explains this item and value, or suggest the value. Maybe it won't affect this good project and the good community, and the price of EOS.
json metadata{"tags":["eos"],"links":["https://github.com/eoscanada/eos-bios"],"app":"steemit/0.1"}
Transaction InfoBlock #24076557/Trx 33970b69adc16e49c55dc281d39a8fe65ba84d5a
View Raw JSON Data
{
  "trx_id": "33970b69adc16e49c55dc281d39a8fe65ba84d5a",
  "block": 24076557,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-11T07:54:27",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "wukoo",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180711t075425316z",
      "title": "",
      "body": "Actually, \nThere is NO DEFAULT value of this item in eos github repo. what you said \"default\" value 1024, it is from [eos-bios](https://github.com/eoscanada/eos-bios) created by eoscanada. when launching the eos mainnet, many bps used this config.\n\nBut there are little peoples can explain what it really means.  And No One explains this item and value, or suggest the value. Maybe it won't affect this good project and the good community, and the price of EOS.",
      "json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://github.com/eoscanada/eos-bios\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/10 21:45:18
voternaturealwysright
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24064377/Trx fccdf243d2b0ce4b93a2cec9e439a5fb69e7bdd8
View Raw JSON Data
{
  "trx_id": "fccdf243d2b0ce4b93a2cec9e439a5fb69e7bdd8",
  "block": 24064377,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-10T21:45:18",
  "op": [
    "vote",
    {
      "voter": "naturealwysright",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/09 14:25:09
votertusam
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24026787/Trx 3317afa3258b5469ec0875ee2a8cf29c94adc2b3
View Raw JSON Data
{
  "trx_id": "3317afa3258b5469ec0875ee2a8cf29c94adc2b3",
  "block": 24026787,
  "trx_in_block": 92,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T14:25:09",
  "op": [
    "vote",
    {
      "voter": "tusam",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/09 13:33:30
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authorfher98
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180709t133326764z
title
bodyHello, in the aftermath have you dound if theres any way in the config.ini to help the block catching up to another fullnode on the same LAN? Also, is it safe to just rsync the blockchain dir?
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #24025754/Trx d61fa97105ced9bb7d834bf8b8d99852552e3f6d
View Raw JSON Data
{
  "trx_id": "d61fa97105ced9bb7d834bf8b8d99852552e3f6d",
  "block": 24025754,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T13:33:30",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "fher98",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180709t133326764z",
      "title": "",
      "body": "Hello, in the aftermath have you dound if theres any way in the config.ini to help the block catching up to another fullnode on the same LAN?\n\nAlso, is it safe to just rsync the blockchain dir?",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/09 06:20:03
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -3025,16 +3025,355 @@ oday. %0A%0A +UPDATE: The audit is complete and we have a full understanding of the configuration settings from version 1.0.8 (the configs change from version to version so we will have to examine for new configurations every update). We have provided sample configs for API, peer, and producing nodes %5Bhere%5D(https://github.com/LibertyBlock/config). %0A%0A * A scri
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md","https://github.com/LibertyBlock/config"]}
Transaction InfoBlock #24017086/Trx bd85e422b6da9ef676ae2d005f344767be57dc6e
View Raw JSON Data
{
  "trx_id": "bd85e422b6da9ef676ae2d005f344767be57dc6e",
  "block": 24017086,
  "trx_in_block": 32,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T06:20:03",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -3025,16 +3025,355 @@\n oday. %0A%0A\n+UPDATE: The audit is complete and we have a full understanding of the configuration settings from version 1.0.8 (the configs change from version to version so we will have to examine for new configurations  every update). We have provided sample configs for API, peer, and producing nodes %5Bhere%5D(https://github.com/LibertyBlock/config). %0A%0A\n * A scri\n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\",\"https://github.com/LibertyBlock/config\"]}"
    }
  ]
}
2018/07/09 01:57:33
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -3309,18 +3309,19 @@ t time f -o r +om 2 hours
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24011838/Trx 8070cf8a44ec0964f656edc00543f48b87de0182
View Raw JSON Data
{
  "trx_id": "8070cf8a44ec0964f656edc00543f48b87de0182",
  "block": 24011838,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T01:57:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -3309,18 +3309,19 @@\n t time f\n-o\n r\n+om\n  2 hours\n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/09 01:54:45
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -3228,16 +3228,208 @@ gain. %0A%0A +UPDATE: We have tested a full restore from backup and cut down our restart time for 2 hours to 20 min. Next goal is to bring that down to 10 min, which should be doable by later this week. %0A%0A ## Techn
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24011782/Trx 443c279b34282564944dac82635fbacaadb31247
View Raw JSON Data
{
  "trx_id": "443c279b34282564944dac82635fbacaadb31247",
  "block": 24011782,
  "trx_in_block": 44,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T01:54:45",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -3228,16 +3228,208 @@\n gain. %0A%0A\n+UPDATE: We have tested a full restore from backup and cut down our restart time for 2 hours to 20 min. Next goal is to bring that down to 10 min, which should be doable by later this week.  %0A%0A\n ## Techn\n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/09 00:55:18
votermjhomb
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24010593/Trx f1d97280819e32caafa3b74be7077d5361efebca
View Raw JSON Data
{
  "trx_id": "f1d97280819e32caafa3b74be7077d5361efebca",
  "block": 24010593,
  "trx_in_block": 26,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T00:55:18",
  "op": [
    "vote",
    {
      "voter": "mjhomb",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/09 00:45:51
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authoreosrio
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180709t004551676z
title
bodyThis is the type of attitude that we need among BPs, keep up the good work!
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #24010404/Trx 1f7ee1ba4a34558ef1a3abf2e9f9b9854d1fb802
View Raw JSON Data
{
  "trx_id": "1f7ee1ba4a34558ef1a3abf2e9f9b9854d1fb802",
  "block": 24010404,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T00:45:51",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "eosrio",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180709t004551676z",
      "title": "",
      "body": "This is the type of attitude that we need among BPs, keep up the good work!",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/09 00:35:33
votereosrio
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24010198/Trx 34f42e022bf0eb3350baa5edb3c40ae8b2ca3bb3
View Raw JSON Data
{
  "trx_id": "34f42e022bf0eb3350baa5edb3c40ae8b2ca3bb3",
  "block": 24010198,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-09T00:35:33",
  "op": [
    "vote",
    {
      "voter": "eosrio",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/08 22:50:30
parent authorblockliberty
parent permlinkpost-mortem-july-8-2018-bp-failure
authorcloudguise
permlinkre-blockliberty-post-mortem-july-8-2018-bp-failure-20180708t225030992z
title
bodyExcellent! You deserve my vote.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #24008097/Trx 801d49fe34f524cc504a08f303ed13fcd97cfcc6
View Raw JSON Data
{
  "trx_id": "801d49fe34f524cc504a08f303ed13fcd97cfcc6",
  "block": 24008097,
  "trx_in_block": 27,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T22:50:30",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "post-mortem-july-8-2018-bp-failure",
      "author": "cloudguise",
      "permlink": "re-blockliberty-post-mortem-july-8-2018-bp-failure-20180708t225030992z",
      "title": "",
      "body": "Excellent! You deserve my vote.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/08 22:50:00
votercloudguise
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24008087/Trx e3122dac7fb823f9b94f1105bccc8c05750f904e
View Raw JSON Data
{
  "trx_id": "e3122dac7fb823f9b94f1105bccc8c05750f904e",
  "block": 24008087,
  "trx_in_block": 39,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T22:50:00",
  "op": [
    "vote",
    {
      "voter": "cloudguise",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/08 22:37:21
voterelautomatico
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24007834/Trx 8ae9a0bc1e8850997a1c5ad024b9f68477a9f61f
View Raw JSON Data
{
  "trx_id": "8ae9a0bc1e8850997a1c5ad024b9f68477a9f61f",
  "block": 24007834,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T22:37:21",
  "op": [
    "vote",
    {
      "voter": "elautomatico",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/08 20:59:30
votertsto
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight10000 (100.00%)
Transaction InfoBlock #24005877/Trx 10a7ab7cbbeed15e3e13076dae02d1c44cdb1af1
View Raw JSON Data
{
  "trx_id": "10a7ab7cbbeed15e3e13076dae02d1c44cdb1af1",
  "block": 24005877,
  "trx_in_block": 41,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T20:59:30",
  "op": [
    "vote",
    {
      "voter": "tsto",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 10000
    }
  ]
}
2018/07/08 20:47:51
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
bodyWe received an alert from our monitoring system that all our nodes went down simultaneously at 0230 UTC early this morning and were down for about 30 minutes before passing off production to a backup and 2 hours in total. We immediately alerted the other BPs in an emergency communication channel and determined that a few more BPs had gone down as well. Parsing through our logs, we noticed a "bad allocation" error that we ended up tracing back to a specific line in our config named `chain-state-db-size-mb`. This config controls the maximum size of the state tree storage in RAM and on disk. The default is 1024, when it should have been at 65535. The on-chain storage exceeded this value this morning which caused the nodes to freeze. The problem was identified and updated within 10 minutes (special thanks to Igor from EOSRio). The remainder of the downtime was spent re-syncing the database back to the current state. About 30 minutes after we went down, we attempted the first active BP deactivation on the mainnet. We unregistered our BP temporarily and allowed eosgenblockbp at the #22 slot to take over production until we came back up. While it is upsetting that our block producer missed blocks during this time, we are proud to set what should become a precedent for future BP downtimes by executing the first successful production handoff to a backup. ## Ricardian Contract Compliance Many producers have suggested that yesterday's downtime constituted a violation of the `regproducer` [Ricardian contract](https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md), specifically this portion: > Based on this statement: I, {{producer}}, agree not to set the RAM supply to more RAM than my nodes contain and to resign if I am unable to provide the RAM approved by 2/3+ producers, as shown in the system parameters. Our response on Telegram is reproduced here: > Our take on it: It was a mis-configuration, not a violation. Our nodes are all setup with 128GB of RAM and we have it all available to provide. We missed a config that required us to manually specify any usage over 1GB. I'm surprised the default was set that low in the software, but it is what it is. Now that we've added that configuration, we're providing the full 64GB the chain can support and we have an extra 64GB ready to go as well on each node ![](https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png) > as you can see, we support and have free the full RAM expected by the Ricardian contract. that's one of our nodes, but we have 4 more > We did not set the RAM supply to greater than what we have (128 GB) and we are able to comfortably provide the RAM approved by 2/3 of producers (64 GB). Those are the 2 strict requirements, and we violated neither ## Improvements to Infrastructure We performed a couple improvements to our infrastructure in response to the failure: * A line-by-line audit of our config that should be complete by later today. * A script that performs regular backups of the chain state and block log every 15 min. This should cut down our failover time from 2 hours to 10 minutes if all our nodes go down simultaneously again. ## Technical Notes * Replaying blocks with `--wasm-runtime wavm` is 3-4x faster than replaying with `binaryen`. You can switch back to `binaryen` once the node is fully synced. (thanks to Mini from EOS Argentina for that tip). It took 30 minutes to replay with `wavm` versus 2 hours with `binaryen`. * Catching up from the end of the replay point to the head block took 1 hour despite there only being a 10k block difference. We tried messing with the peer config multiple times with no luck. Blocks were syncing in spurts rather than consistently with an overall rate of about 250 / min. It might have been a network congestion issue since so many peers were trying to resync at the same time.
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24005644/Trx f917cfcc10f28a251feca83ab494a2cca7d9fc3b
View Raw JSON Data
{
  "trx_id": "f917cfcc10f28a251feca83ab494a2cca7d9fc3b",
  "block": 24005644,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T20:47:51",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "We received an alert from our monitoring system that all our nodes went down simultaneously at 0230 UTC early this morning and were down for about 30 minutes before passing off production to a backup and 2 hours in total. We immediately alerted the other BPs in an emergency communication channel and determined that a few more BPs had gone down as well. \n\nParsing through our logs, we noticed a \"bad allocation\" error that we ended up tracing back to a specific line in our config named `chain-state-db-size-mb`. This config controls the maximum size of the state tree storage in RAM and on disk. The default is 1024, when it should have been at 65535. The on-chain storage exceeded this value this morning which caused the nodes to freeze. The problem was identified and updated within 10 minutes (special thanks to Igor from EOSRio). The remainder of the downtime was spent re-syncing the database back to the current state. \n\nAbout 30 minutes after we went down, we attempted the first active BP deactivation on the mainnet. We unregistered our BP temporarily and allowed eosgenblockbp at the #22 slot to take over production until we came back up. While it is upsetting that our block producer missed blocks during this time, we are proud to set what should become a precedent for future BP downtimes by executing the first successful production handoff to a backup. \n\n## Ricardian Contract Compliance\n\nMany producers have suggested that yesterday's downtime constituted a violation of the `regproducer` [Ricardian contract](https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md), specifically this portion:\n\n> Based on this statement: I, {{producer}}, agree not to set the RAM supply to more RAM than my nodes contain and to resign if I am unable to provide the RAM approved by 2/3+ producers, as shown in the system parameters.\n\nOur response on Telegram is reproduced here:\n\n> Our take on it: It was a mis-configuration, not a violation. Our nodes are all setup with 128GB of RAM and we have it all available to provide. We missed a config that required us to manually specify any usage over 1GB. I'm surprised the default was set that low in the software, but it is what it is. Now that we've added that configuration, we're providing the full 64GB the chain can support and we have an extra 64GB ready to go as well on each node\n\n![](https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png)\n\n> as you can see, we support and have free the full RAM expected by the Ricardian contract. that's one of our nodes, but we have 4 more\n \n> We did not set the RAM supply to greater than what we have (128 GB) and we are able to comfortably provide the RAM approved by 2/3 of producers (64 GB). Those are the 2 strict requirements, and we violated neither\n\n## Improvements to Infrastructure\n\nWe performed a couple improvements to our infrastructure in response to the failure:\n\n* A line-by-line audit of our config that should be complete by later today. \n\n* A script that performs regular backups of the chain state and block log every 15 min. This should cut down our failover time from 2 hours to 10 minutes if all our nodes go down simultaneously again. \n\n## Technical Notes\n\n* Replaying blocks with `--wasm-runtime wavm` is 3-4x faster than replaying with `binaryen`. You can switch back to `binaryen` once the node is fully synced. (thanks to Mini from EOS Argentina for that tip). It took 30 minutes to replay with `wavm` versus 2 hours with `binaryen`.  \n\n* Catching up from the end of the replay point to the head block took 1 hour despite there only being a  10k block difference. We tried messing with the peer config multiple times with no luck. Blocks were syncing in spurts rather than consistently with an overall rate of about 250 / min. It might have been a network congestion issue since so many peers were trying to resync at the same time.",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/08 20:45:27
voterubg
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight100 (1.00%)
Transaction InfoBlock #24005596/Trx 8ee718c7173f58aed630ab44187dcb5e5cae5036
View Raw JSON Data
{
  "trx_id": "8ee718c7173f58aed630ab44187dcb5e5cae5036",
  "block": 24005596,
  "trx_in_block": 41,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T20:45:27",
  "op": [
    "vote",
    {
      "voter": "ubg",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 100
    }
  ]
}
2018/07/08 20:45:15
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -2950,22 +2950,11 @@ e:%0A%0A -The first is a +* A lin @@ -3029,32 +3029,18 @@ . %0A%0A -The second is a cron job +* A script tha @@ -3069,24 +3069,30 @@ kups of the +chain state and da @@ -3089,20 +3089,25 @@ ate and -data +block log every 1
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24005592/Trx 3cb5a2ff3a296726e50a44bfd65c774f05321cc6
View Raw JSON Data
{
  "trx_id": "3cb5a2ff3a296726e50a44bfd65c774f05321cc6",
  "block": 24005592,
  "trx_in_block": 33,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T20:45:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -2950,22 +2950,11 @@\n e:%0A%0A\n-The first is a\n+* A\n  lin\n@@ -3029,32 +3029,18 @@\n . %0A%0A\n-The second is a cron job\n+* A script\n  tha\n@@ -3069,24 +3069,30 @@\n kups of the \n+chain \n state and da\n@@ -3089,20 +3089,25 @@\n ate and \n-data\n+block log\n  every 1\n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/08 20:44:18
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -2825,16 +2825,432 @@ either%0A%0A +## Improvements to Infrastructure%0A%0AWe performed a couple improvements to our infrastructure in response to the failure:%0A%0AThe first is a line-by-line audit of our config that should be complete by later today. %0A%0AThe second is a cron job that performs regular backups of the state and data every 15 min. This should cut down our failover time from 2 hours to 10 minutes if all our nodes go down simultaneously again. %0A %0A## Tech
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24005573/Trx 2327bbf1735e4efbddaee251eaa867b1b121bb35
View Raw JSON Data
{
  "trx_id": "2327bbf1735e4efbddaee251eaa867b1b121bb35",
  "block": 24005573,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T20:44:18",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -2825,16 +2825,432 @@\n either%0A%0A\n+## Improvements to Infrastructure%0A%0AWe performed a couple improvements to our infrastructure in response to the failure:%0A%0AThe first is a line-by-line audit of our config that should be complete by later today. %0A%0AThe second is a cron job that performs regular backups of the state and data every 15 min. This should cut down our failover time from 2 hours to 10 minutes if all our nodes go down simultaneously again. %0A\n %0A## Tech\n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/08 19:12:45
voterbeetlevc
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
weight200 (2.00%)
Transaction InfoBlock #24003743/Trx 057c19ff1f657cb213062ad10df6bf321b535288
View Raw JSON Data
{
  "trx_id": "057c19ff1f657cb213062ad10df6bf321b535288",
  "block": 24003743,
  "trx_in_block": 43,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T19:12:45",
  "op": [
    "vote",
    {
      "voter": "beetlevc",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "weight": 200
    }
  ]
}
2018/07/08 19:01:45
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -321,17 +321,16 @@ ew more -e BPs had
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24003523/Trx 44117b59dd843c3b9e6e9708b03baae57d019579
View Raw JSON Data
{
  "trx_id": "44117b59dd843c3b9e6e9708b03baae57d019579",
  "block": 24003523,
  "trx_in_block": 61,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T19:01:45",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -321,17 +321,16 @@\n ew more \n-e\n BPs had \n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/08 18:59:33
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
body@@ -1372,81 +1372,1485 @@ . %0A%0A -Some notes for other BPs who may go through the same issue in the future: +## Ricardian Contract Compliance%0A%0AMany producers have suggested that yesterday's downtime constituted a violation of the %60regproducer%60 %5BRicardian contract%5D(https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md), specifically this portion:%0A%0A%3E Based on this statement: I, %7B%7Bproducer%7D%7D, agree not to set the RAM supply to more RAM than my nodes contain and to resign if I am unable to provide the RAM approved by 2/3+ producers, as shown in the system parameters.%0A%0AOur response on Telegram is reproduced here:%0A%0A%3E Our take on it: It was a mis-configuration, not a violation. Our nodes are all setup with 128GB of RAM and we have it all available to provide. We missed a config that required us to manually specify any usage over 1GB. I'm surprised the default was set that low in the software, but it is what it is. Now that we've added that configuration, we're providing the full 64GB the chain can support and we have an extra 64GB ready to go as well on each node%0A%0A!%5B%5D(https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png)%0A%0A%3E as you can see, we support and have free the full RAM expected by the Ricardian contract. that's one of our nodes, but we have 4 more%0A %0A%3E We did not set the RAM supply to greater than what we have (128 GB) and we are able to comfortably provide the RAM approved by 2/3 of producers (64 GB). Those are the 2 strict requirements, and we violated neither%0A%0A%0A## Technical Notes %0A%0A*
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown","image":["https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png"],"links":["https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md"]}
Transaction InfoBlock #24003479/Trx e0c54daab23a0da5c19ec925c5a6808e025b7084
View Raw JSON Data
{
  "trx_id": "e0c54daab23a0da5c19ec925c5a6808e025b7084",
  "block": 24003479,
  "trx_in_block": 48,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T18:59:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "@@ -1372,81 +1372,1485 @@\n . %0A%0A\n-Some notes for other BPs who may go through the same issue in the future:\n+## Ricardian Contract Compliance%0A%0AMany producers have suggested that yesterday's downtime constituted a violation of the %60regproducer%60 %5BRicardian contract%5D(https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md), specifically this portion:%0A%0A%3E Based on this statement: I, %7B%7Bproducer%7D%7D, agree not to set the RAM supply to more RAM than my nodes contain and to resign if I am unable to provide the RAM approved by 2/3+ producers, as shown in the system parameters.%0A%0AOur response on Telegram is reproduced here:%0A%0A%3E Our take on it: It was a mis-configuration, not a violation. Our nodes are all setup with 128GB of RAM and we have it all available to provide. We missed a config that required us to manually specify any usage over 1GB. I'm surprised the default was set that low in the software, but it is what it is. Now that we've added that configuration, we're providing the full 64GB the chain can support and we have an extra 64GB ready to go as well on each node%0A%0A!%5B%5D(https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png)%0A%0A%3E as you can see, we support and have free the full RAM expected by the Ricardian contract. that's one of our nodes, but we have 4 more%0A %0A%3E We did not set the RAM supply to greater than what we have (128 GB) and we are able to comfortably provide the RAM approved by 2/3 of producers (64 GB). Those are the 2 strict requirements, and we violated neither%0A%0A%0A## Technical Notes\n %0A%0A* \n",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://cdn.steemitimages.com/DQmXmJbmmxWbk1YpJrKYmdVh8FChLvNRviuf4es4K5m3HkM/image.png\"],\"links\":[\"https://github.com/EOS-Mainnet/governance/blob/master/eosio.system/eosio.system-regproducer-rc.md\"]}"
    }
  ]
}
2018/07/08 18:53:30
parent author
parent permlinkeos
authorblockliberty
permlinkpost-mortem-july-8-2018-bp-failure
titlePost-Mortem: July 8, 2018 BP failure
bodyWe received an alert from our monitoring system that all our nodes went down simultaneously at 0230 UTC early this morning and were down for about 30 minutes before passing off production to a backup and 2 hours in total. We immediately alerted the other BPs in an emergency communication channel and determined that a few more eBPs had gone down as well. Parsing through our logs, we noticed a "bad allocation" error that we ended up tracing back to a specific line in our config named `chain-state-db-size-mb`. This config controls the maximum size of the state tree storage in RAM and on disk. The default is 1024, when it should have been at 65535. The on-chain storage exceeded this value this morning which caused the nodes to freeze. The problem was identified and updated within 10 minutes (special thanks to Igor from EOSRio). The remainder of the downtime was spent re-syncing the database back to the current state. About 30 minutes after we went down, we attempted the first active BP deactivation on the mainnet. We unregistered our BP temporarily and allowed eosgenblockbp at the #22 slot to take over production until we came back up. While it is upsetting that our block producer missed blocks during this time, we are proud to set what should become a precedent for future BP downtimes by executing the first successful production handoff to a backup. Some notes for other BPs who may go through the same issue in the future: * Replaying blocks with `--wasm-runtime wavm` is 3-4x faster than replaying with `binaryen`. You can switch back to `binaryen` once the node is fully synced. (thanks to Mini from EOS Argentina for that tip). It took 30 minutes to replay with `wavm` versus 2 hours with `binaryen`. * Catching up from the end of the replay point to the head block took 1 hour despite there only being a 10k block difference. We tried messing with the peer config multiple times with no luck. Blocks were syncing in spurts rather than consistently with an overall rate of about 250 / min. It might have been a network congestion issue since so many peers were trying to resync at the same time.
json metadata{"tags":["eos","eos-blockproducer","blockproducer","libertyblock","eos-mainnet"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #24003358/Trx b72b915b0b78efb80deb1075296e76b51af260cb
View Raw JSON Data
{
  "trx_id": "b72b915b0b78efb80deb1075296e76b51af260cb",
  "block": 24003358,
  "trx_in_block": 47,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T18:53:30",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "eos",
      "author": "blockliberty",
      "permlink": "post-mortem-july-8-2018-bp-failure",
      "title": "Post-Mortem: July 8, 2018 BP failure",
      "body": "We received an alert from our monitoring system that all our nodes went down simultaneously at 0230 UTC early this morning and were down for about 30 minutes before passing off production to a backup and 2 hours in total. We immediately alerted the other BPs in an emergency communication channel and determined that a few more eBPs had gone down as well. \n\nParsing through our logs, we noticed a \"bad allocation\" error that we ended up tracing back to a specific line in our config named `chain-state-db-size-mb`. This config controls the maximum size of the state tree storage in RAM and on disk. The default is 1024, when it should have been at 65535. The on-chain storage exceeded this value this morning which caused the nodes to freeze. The problem was identified and updated within 10 minutes (special thanks to Igor from EOSRio). The remainder of the downtime was spent re-syncing the database back to the current state. \n\nAbout 30 minutes after we went down, we attempted the first active BP deactivation on the mainnet. We unregistered our BP temporarily and allowed eosgenblockbp at the #22 slot to take over production until we came back up. While it is upsetting that our block producer missed blocks during this time, we are proud to set what should become a precedent for future BP downtimes by executing the first successful production handoff to a backup. \n\nSome notes for other BPs who may go through the same issue in the future:\n\n* Replaying blocks with `--wasm-runtime wavm` is 3-4x faster than replaying with `binaryen`. You can switch back to `binaryen` once the node is fully synced. (thanks to Mini from EOS Argentina for that tip). It took 30 minutes to replay with `wavm` versus 2 hours with `binaryen`.  \n\n* Catching up from the end of the replay point to the head block took 1 hour despite there only being a  10k block difference. We tried messing with the peer config multiple times with no luck. Blocks were syncing in spurts rather than consistently with an overall rate of about 250 / min. It might have been a network congestion issue since so many peers were trying to resync at the same time.",
      "json_metadata": "{\"tags\":[\"eos\",\"eos-blockproducer\",\"blockproducer\",\"libertyblock\",\"eos-mainnet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/07/08 06:12:30
voterdollarvigilante
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight0 (0.00%)
Transaction InfoBlock #23988140/Trx 6a226b1208f7d3e9425349937dafa9597fc9375d
View Raw JSON Data
{
  "trx_id": "6a226b1208f7d3e9425349937dafa9597fc9375d",
  "block": 23988140,
  "trx_in_block": 24,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T06:12:30",
  "op": [
    "vote",
    {
      "voter": "dollarvigilante",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 0
    }
  ]
}
2018/07/08 06:12:21
voterdollarvigilante
authorblockliberty
permlinkeos-voting-faq-everything-you-need-to-know-about-the-block-producer-voting-process
weight0 (0.00%)
Transaction InfoBlock #23988137/Trx c93bb7620588ffff503e996ab09688d591f30b37
View Raw JSON Data
{
  "trx_id": "c93bb7620588ffff503e996ab09688d591f30b37",
  "block": 23988137,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-08T06:12:21",
  "op": [
    "vote",
    {
      "voter": "dollarvigilante",
      "author": "blockliberty",
      "permlink": "eos-voting-faq-everything-you-need-to-know-about-the-block-producer-voting-process",
      "weight": 0
    }
  ]
}
2018/07/04 10:54:06
parent authorblockliberty
parent permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
authorakif
permlinkre-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180704t105402739z
title
bodyI always follow you post and videos on crypto currency. Thats amazing what you do. continue you wonder full work
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #23878657/Trx ba30cd0d76076fab6cedf5226afdeb3ea0e18c8e
View Raw JSON Data
{
  "trx_id": "ba30cd0d76076fab6cedf5226afdeb3ea0e18c8e",
  "block": 23878657,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-04T10:54:06",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "author": "akif",
      "permlink": "re-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180704t105402739z",
      "title": "",
      "body": "I always follow you post and videos on crypto currency. Thats amazing what you do. continue you wonder full work",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/02 16:36:21
parent authorblockliberty
parent permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
authorxion30
permlinkre-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180702t163620730z
title
bodyGreat post nice one 👌
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #23837739/Trx e7458e82fe98e964738241b76a7a04c34893ba1f
View Raw JSON Data
{
  "trx_id": "e7458e82fe98e964738241b76a7a04c34893ba1f",
  "block": 23837739,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-02T16:36:21",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "author": "xion30",
      "permlink": "re-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180702t163620730z",
      "title": "",
      "body": "Great post nice one 👌",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/07/02 08:01:00
voterhanki
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #23827435/Trx ef71f52c817fb8b2d267f6c027bf92e63d2bc3ff
View Raw JSON Data
{
  "trx_id": "ef71f52c817fb8b2d267f6c027bf92e63d2bc3ff",
  "block": 23827435,
  "trx_in_block": 43,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-02T08:01:00",
  "op": [
    "vote",
    {
      "voter": "hanki",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
blocklibertyreceived 0.219 STEEM, 0.085 SBD, 0.358 SP author reward for @blockliberty / the-battle-for-crypto-governance-eos-vs-ethereum
2018/07/01 02:15:18
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
sbd payout0.085 SBD
steem payout0.219 STEEM
vesting payout582.619912 VESTS
Transaction InfoBlock #23791723/Virtual Operation #12
View Raw JSON Data
{
  "trx_id": "0000000000000000000000000000000000000000",
  "block": 23791723,
  "trx_in_block": 4294967295,
  "op_in_trx": 0,
  "virtual_op": 12,
  "timestamp": "2018-07-01T02:15:18",
  "op": [
    "author_reward",
    {
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "sbd_payout": "0.085 SBD",
      "steem_payout": "0.219 STEEM",
      "vesting_payout": "582.619912 VESTS"
    }
  ]
}
2018/06/30 20:26:03
parent authorblockliberty
parent permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
authordavidward
permlinkre-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180630t202526887z
title
body@@ -133,18 +133,18 @@ en Larim -an +er and Vit
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #23784739/Trx 4d4075fd3cda75e5f53fc2f7e603f8c9202d784f
View Raw JSON Data
{
  "trx_id": "4d4075fd3cda75e5f53fc2f7e603f8c9202d784f",
  "block": 23784739,
  "trx_in_block": 20,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-30T20:26:03",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "author": "davidward",
      "permlink": "re-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180630t202526887z",
      "title": "",
      "body": "@@ -133,18 +133,18 @@\n en Larim\n-an\n+er\n  and Vit\n",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/06/30 20:25:15
parent authorblockliberty
parent permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
authordavidward
permlinkre-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180630t202526887z
title
bodyI don't mean this in any prejudicial way whatsoever but I couldn't help but catch the capitalist versus communist perspectives between Lariman and Vitalik, respectively. Just had to throw that out there. Both are doing great work. Please keep it up.
json metadata{"tags":["eos"],"app":"steemit/0.1"}
Transaction InfoBlock #23784723/Trx 8925f1384a99c6433020420e17ffd17599b23530
View Raw JSON Data
{
  "trx_id": "8925f1384a99c6433020420e17ffd17599b23530",
  "block": 23784723,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-30T20:25:15",
  "op": [
    "comment",
    {
      "parent_author": "blockliberty",
      "parent_permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "author": "davidward",
      "permlink": "re-blockliberty-the-battle-for-crypto-governance-eos-vs-ethereum-20180630t202526887z",
      "title": "",
      "body": "I don't mean this in any prejudicial way whatsoever but I couldn't help but catch the capitalist versus communist perspectives between Lariman and Vitalik, respectively. Just had to throw that out there. Both are doing great work. Please keep it up.",
      "json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/06/30 10:03:00
voterswaminemo
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #23772280/Trx 6039bf091573959f4a850c8cf5da25cfe986825d
View Raw JSON Data
{
  "trx_id": "6039bf091573959f4a850c8cf5da25cfe986825d",
  "block": 23772280,
  "trx_in_block": 58,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-30T10:03:00",
  "op": [
    "vote",
    {
      "voter": "swaminemo",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
2018/06/30 04:41:33
voterperfectedpitch
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #23765852/Trx e5444374067b2fae167371e9e736dcce9174bb36
View Raw JSON Data
{
  "trx_id": "e5444374067b2fae167371e9e736dcce9174bb36",
  "block": 23765852,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-30T04:41:33",
  "op": [
    "vote",
    {
      "voter": "perfectedpitch",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
2018/06/30 01:11:12
voternextgencast
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #23761645/Trx 06cdc5786664fd6067489595629d4dfeee9ee2ec
View Raw JSON Data
{
  "trx_id": "06cdc5786664fd6067489595629d4dfeee9ee2ec",
  "block": 23761645,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-30T01:11:12",
  "op": [
    "vote",
    {
      "voter": "nextgencast",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
2018/06/29 23:35:36
voteretka
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight10000 (100.00%)
Transaction InfoBlock #23759734/Trx 429a665ba7c2b4c1d76c9faaf45ca36476549175
View Raw JSON Data
{
  "trx_id": "429a665ba7c2b4c1d76c9faaf45ca36476549175",
  "block": 23759734,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-29T23:35:36",
  "op": [
    "vote",
    {
      "voter": "etka",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 10000
    }
  ]
}
2018/06/29 21:54:00
voterlovemetouchme2
authorblockliberty
permlinkthe-battle-for-crypto-governance-eos-vs-ethereum
weight1100 (11.00%)
Transaction InfoBlock #23757703/Trx 71f3cace52466ff33fd37139be6b18aebba92aa1
View Raw JSON Data
{
  "trx_id": "71f3cace52466ff33fd37139be6b18aebba92aa1",
  "block": 23757703,
  "trx_in_block": 45,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-06-29T21:54:00",
  "op": [
    "vote",
    {
      "voter": "lovemetouchme2",
      "author": "blockliberty",
      "permlink": "the-battle-for-crypto-governance-eos-vs-ethereum",
      "weight": 1100
    }
  ]
}

Account Metadata

POSTING JSON METADATA
profile{"profile_image":"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg","cover_image":"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg","name":"LibertyBlock","about":"EOS BlockProducer (aka AnarchEOS)","location":"Bhutan","website":"http://libertyblock.io"}
JSON METADATA
profile{"profile_image":"https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg","cover_image":"https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg","name":"LibertyBlock","about":"EOS BlockProducer (aka AnarchEOS)","location":"Bhutan","website":"http://libertyblock.io"}
{
  "posting_json_metadata": {
    "profile": {
      "profile_image": "https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg",
      "cover_image": "https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg",
      "name": "LibertyBlock",
      "about": "EOS BlockProducer (aka AnarchEOS)",
      "location": "Bhutan",
      "website": "http://libertyblock.io"
    }
  },
  "json_metadata": {
    "profile": {
      "profile_image": "https://cdn.steemitimages.com/DQmYjSLXzqrRWu2NNzb4E5Gbc7JN33db1AgZS4xfcn98qrv/eosinternal.jpeg",
      "cover_image": "https://cdn.steemitimages.com/DQmZajwvXWpji1swYSdnd9PMkwpVhctbLFrxjMnMy71HXit/eoswave.jpeg",
      "name": "LibertyBlock",
      "about": "EOS BlockProducer (aka AnarchEOS)",
      "location": "Bhutan",
      "website": "http://libertyblock.io"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM6WF7QLCKX6WjpfKumuc4VdGqzEeKf8RPKNx7JiApmCkMarPXgT1/1
Active
Single Signature
Public Keys
STM6p5qXc2kpxa3VwpdQy5bi4QTTQhbi4D9C7ugge6FWp18L1c27d1/1
Posting
Single Signature
Public Keys
STM4yCbqnLa1KAbUmNUYzPdXUmYni7ne5hGYenEwFchWt4GKYYHRd1/1
App Permissions
Memo
STM7YffEqY88HvgRhRRbUDgRnSLGPtBdggY4ymv3Ncda7RTwA4vSZ
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6WF7QLCKX6WjpfKumuc4VdGqzEeKf8RPKNx7JiApmCkMarPXgT",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6p5qXc2kpxa3VwpdQy5bi4QTTQhbi4D9C7ugge6FWp18L1c27d",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "busy.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM4yCbqnLa1KAbUmNUYzPdXUmYni7ne5hGYenEwFchWt4GKYYHRd",
        1
      ]
    ]
  },
  "memo": "STM7YffEqY88HvgRhRRbUDgRnSLGPtBdggY4ymv3Ncda7RTwA4vSZ"
}

Witness Votes

0 / 30
No active witness votes.
[]