Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS88.19%
Net Worth
0.714USD
STEEM
0.607STEEM
SBD
1.338SBD
Effective Power
5.007SP
├── Own SP
0.630SP
└── Incoming Deleg
+4.377SP

Detailed Balance

STEEM
balance
0.607STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.630SP
Delegated Out
0.000SP
Delegation In
4.377SP
Effective Power
5.007SP
Reward SP (pending)
0.219SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
1.338SBD
{
  "balance": "0.607 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "1024.525985 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7119.133821 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "1.338 SBD",
  "conversions": []
}

Account Info

nameferro
id546470
rank373,822
reputation4503454139
created2018-01-02T06:45:54
recovery_accountsteem
proxyNone
post_count6
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-04-23T10:54:36
last_root_post2018-01-15T04:19:42
last_vote_time2018-04-23T10:56:09
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.607 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares1024.525985 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares7119.133821 VESTS
reward_vesting_balance448.543195 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-01-15T04:03:54
minedNo
sbd_seconds0
sbd_last_interest_payment2018-01-09T11:57:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5aVsKGc3SYwdkz9PyvHHbbkSLPWiX8nuxqdgd614BGK8918cZz",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "balance": "0.607 STEEM",
  "can_vote": true,
  "comment_count": 0,
  "created": "2018-01-02T06:45:54",
  "curation_rewards": 0,
  "delegated_vesting_shares": "0.000000 VESTS",
  "downvote_manabar": {
    "current_mana": 2035914951,
    "last_update_time": 1779063435
  },
  "guest_bloggers": [],
  "id": 546470,
  "json_metadata": "{\"profile\":{\"profile_image\":\"https://i.imgsafe.org/c2/c265a6d06e.png\",\"location\":\"Australia\",\"cover_image\":\"https://i.imgsafe.org/c2/c28116ad95.jpeg\",\"name\":\"ferro\"}}",
  "last_account_recovery": "1970-01-01T00:00:00",
  "last_account_update": "2018-01-15T04:03:54",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_post": "2018-04-23T10:54:36",
  "last_root_post": "2018-01-15T04:19:42",
  "last_vote_time": "2018-04-23T10:56:09",
  "lifetime_vote_count": 0,
  "market_history": [],
  "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx",
  "mined": false,
  "name": "ferro",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "other_history": [],
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8asukoXwqNWjUcxDn6poxJ9ZpphF66suuqAZR5uBdvrGPbZdkt",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "pending_claimed_accounts": 0,
  "post_bandwidth": 0,
  "post_count": 6,
  "post_history": [],
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5y2iFuyJJ4zJkzYPH5ssG9JCXNCNWdUNw2UeXhVYPgh9ZgpPEs",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://i.imgsafe.org/c2/c265a6d06e.png\",\"location\":\"Australia\",\"cover_image\":\"https://i.imgsafe.org/c2/c28116ad95.jpeg\",\"name\":\"ferro\"}}",
  "posting_rewards": 438,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "proxy": "",
  "received_vesting_shares": "7119.133821 VESTS",
  "recovery_account": "steem",
  "reputation": "4503454139",
  "reset_account": "null",
  "reward_sbd_balance": "1.338 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "448.543195 VESTS",
  "reward_vesting_steem": "0.219 STEEM",
  "savings_balance": "0.000 STEEM",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "sbd_balance": "0.000 SBD",
  "sbd_last_interest_payment": "2018-01-09T11:57:00",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "2018-01-09T11:57:00",
  "tags_usage": [],
  "to_withdraw": 0,
  "transfer_history": [],
  "vesting_balance": "0.000 STEEM",
  "vesting_shares": "1024.525985 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "vote_history": [],
  "voting_manabar": {
    "current_mana": "8143659806",
    "last_update_time": 1779063435
  },
  "voting_power": 0,
  "withdraw_routes": 0,
  "withdrawn": 0,
  "witness_votes": [],
  "witnesses_voted_for": 0,
  "rank": 373822
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 4.377 SP to @ferro
2026/05/18 00:17:15
delegateeferro
delegatorsteem
vesting shares7119.133821 VESTS
Transaction InfoBlock #106143490/Trx 33071baf81b67fcc5ac34f6429f7d793a9a3c26d
View Raw JSON Data
{
  "block": 106143490,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "7119.133821 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-18T00:17:15",
  "trx_id": "33071baf81b67fcc5ac34f6429f7d793a9a3c26d",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 2.709 SP to @ferro
2026/05/12 03:59:12
delegateeferro
delegatorsteem
vesting shares4406.923416 VESTS
Transaction InfoBlock #105975886/Trx 356736e7baf5a594684f2c7a90f9cda7ac564063
View Raw JSON Data
{
  "block": 105975886,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "4406.923416 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-12T03:59:12",
  "trx_id": "356736e7baf5a594684f2c7a90f9cda7ac564063",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 4.384 SP to @ferro
2026/04/25 23:38:03
delegateeferro
delegatorsteem
vesting shares7131.649577 VESTS
Transaction InfoBlock #105511139/Trx faba9bbe1284588011804fcc672d531e602f4f4b
View Raw JSON Data
{
  "block": 105511139,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "7131.649577 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-04-25T23:38:03",
  "trx_id": "faba9bbe1284588011804fcc672d531e602f4f4b",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 2.735 SP to @ferro
2026/01/23 07:53:42
delegateeferro
delegatorsteem
vesting shares4448.470235 VESTS
Transaction InfoBlock #102851921/Trx 525cffb0bebad58b2b13ff401f38830cda138434
View Raw JSON Data
{
  "block": 102851921,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "4448.470235 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-01-23T07:53:42",
  "trx_id": "525cffb0bebad58b2b13ff401f38830cda138434",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 2.836 SP to @ferro
2024/12/17 03:12:45
delegateeferro
delegatorsteem
vesting shares4612.689432 VESTS
Transaction InfoBlock #91298329/Trx 2bc9ee1df1e7a8db9f4d6ff5ddc805e905f7b2ac
View Raw JSON Data
{
  "block": 91298329,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "4612.689432 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2024-12-17T03:12:45",
  "trx_id": "2bc9ee1df1e7a8db9f4d6ff5ddc805e905f7b2ac",
  "trx_in_block": 4,
  "virtual_op": 0
}
steemdelegated 2.940 SP to @ferro
2023/11/13 18:55:27
delegateeferro
delegatorsteem
vesting shares4781.822964 VESTS
Transaction InfoBlock #79852526/Trx df83fdb9857e00a73ae09a2c43d5508e19d2944f
View Raw JSON Data
{
  "block": 79852526,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "4781.822964 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-11-13T18:55:27",
  "trx_id": "df83fdb9857e00a73ae09a2c43d5508e19d2944f",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 4.746 SP to @ferro
2023/09/21 21:52:03
delegateeferro
delegatorsteem
vesting shares7719.101750 VESTS
Transaction InfoBlock #78347872/Trx 56b779c3c1d1e3a5e95e703e3a5f00be63fed352
View Raw JSON Data
{
  "block": 78347872,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "7719.101750 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-09-21T21:52:03",
  "trx_id": "56b779c3c1d1e3a5e95e703e3a5f00be63fed352",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 4.882 SP to @ferro
2022/11/03 11:39:33
delegateeferro
delegatorsteem
vesting shares7940.783188 VESTS
Transaction InfoBlock #69113207/Trx edf05994460fa8df82556c1ad5bb8b9a2ced189e
View Raw JSON Data
{
  "block": 69113207,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "7940.783188 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-11-03T11:39:33",
  "trx_id": "edf05994460fa8df82556c1ad5bb8b9a2ced189e",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 5.017 SP to @ferro
2022/01/17 10:55:45
delegateeferro
delegatorsteem
vesting shares8161.316419 VESTS
Transaction InfoBlock #60809379/Trx 49a9e22343cb0d2788b2c8d6b48224df69a79035
View Raw JSON Data
{
  "block": 60809379,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8161.316419 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-01-17T10:55:45",
  "trx_id": "49a9e22343cb0d2788b2c8d6b48224df69a79035",
  "trx_in_block": 39,
  "virtual_op": 0
}
steemdelegated 5.130 SP to @ferro
2021/06/14 00:51:03
delegateeferro
delegatorsteem
vesting shares8345.085077 VESTS
Transaction InfoBlock #54607768/Trx 1e79a0c9e3cb9cf6674f2880d5baa390b6e94e50
View Raw JSON Data
{
  "block": 54607768,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8345.085077 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2021-06-14T00:51:03",
  "trx_id": "1e79a0c9e3cb9cf6674f2880d5baa390b6e94e50",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 5.246 SP to @ferro
2020/12/11 11:09:36
delegateeferro
delegatorsteem
vesting shares8532.507051 VESTS
Transaction InfoBlock #49355221/Trx d00e37339809392d9cd3dabb4065e6c4b70b2249
View Raw JSON Data
{
  "block": 49355221,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8532.507051 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-11T11:09:36",
  "trx_id": "d00e37339809392d9cd3dabb4065e6c4b70b2249",
  "trx_in_block": 12,
  "virtual_op": 0
}
steemdelegated 1.176 SP to @ferro
2020/12/06 04:46:51
delegateeferro
delegatorsteem
vesting shares1912.543513 VESTS
Transaction InfoBlock #49206786/Trx a7c30e3e422ae4d05fe5203332f1e0c897772014
View Raw JSON Data
{
  "block": 49206786,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "1912.543513 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-06T04:46:51",
  "trx_id": "a7c30e3e422ae4d05fe5203332f1e0c897772014",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 5.249 SP to @ferro
2020/12/05 14:47:48
delegateeferro
delegatorsteem
vesting shares8538.714905 VESTS
Transaction InfoBlock #49190318/Trx 7ee6badd92e0caa65211584e584b0b4f5230f74e
View Raw JSON Data
{
  "block": 49190318,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8538.714905 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-05T14:47:48",
  "trx_id": "7ee6badd92e0caa65211584e584b0b4f5230f74e",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 1.180 SP to @ferro
2020/11/02 15:43:03
delegateeferro
delegatorsteem
vesting shares1920.017158 VESTS
Transaction InfoBlock #48257894/Trx 5785f591d34a655508aabb75b0a98b762bb3b44a
View Raw JSON Data
{
  "block": 48257894,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "1920.017158 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-11-02T15:43:03",
  "trx_id": "5785f591d34a655508aabb75b0a98b762bb3b44a",
  "trx_in_block": 7,
  "virtual_op": 0
}
steemdelegated 5.374 SP to @ferro
2020/05/09 05:44:12
delegateeferro
delegatorsteem
vesting shares8741.520264 VESTS
Transaction InfoBlock #43217033/Trx f79eab53c5f8ac7e220358f3af4b5f283555b02d
View Raw JSON Data
{
  "block": 43217033,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8741.520264 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-09T05:44:12",
  "trx_id": "f79eab53c5f8ac7e220358f3af4b5f283555b02d",
  "trx_in_block": 5,
  "virtual_op": 0
}
steemdelegated 1.201 SP to @ferro
2020/05/08 09:20:39
delegateeferro
delegatorsteem
vesting shares1953.311140 VESTS
Transaction InfoBlock #43193136/Trx 141ea8e3c348bf5c132310cf628d82882524361d
View Raw JSON Data
{
  "block": 43193136,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "1953.311140 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-08T09:20:39",
  "trx_id": "141ea8e3c348bf5c132310cf628d82882524361d",
  "trx_in_block": 2,
  "virtual_op": 0
}
2020/01/02 08:01:21
authorsteemitboard
bodyCongratulations @ferro! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ferro/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@ferro) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=ferro)_</sub> ###### [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"]}
parent authorferro
parent permlinktetris-bot-update
permlinksteemitboard-notify-ferro-20200102t080120000z
title
Transaction InfoBlock #39570682/Trx a14bbea0d6b90265b3fd7a80ab7d38cbb6b9c71c
View Raw JSON Data
{
  "block": 39570682,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @ferro! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ferro/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@ferro) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=ferro)_</sub>\n\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\"]}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-update",
      "permlink": "steemitboard-notify-ferro-20200102t080120000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-01-02T08:01:21",
  "trx_id": "a14bbea0d6b90265b3fd7a80ab7d38cbb6b9c71c",
  "trx_in_block": 4,
  "virtual_op": 0
}
steemdelegated 5.481 SP to @ferro
2019/07/12 05:13:30
delegateeferro
delegatorsteem
vesting shares8914.882806 VESTS
Transaction InfoBlock #34588582/Trx fa9a695c4eec6efe0454d480e556b9bf0dab2428
View Raw JSON Data
{
  "block": 34588582,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "8914.882806 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-07-12T05:13:30",
  "trx_id": "fa9a695c4eec6efe0454d480e556b9bf0dab2428",
  "trx_in_block": 1,
  "virtual_op": 0
}
2019/01/02 07:44:12
authorsteemitboard
bodyCongratulations @ferro! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ferro/birthday1.png</td><td>1 Year on Steemit</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@ferro)_</sub> > 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"]}
parent authorferro
parent permlinktetris-bot-update
permlinksteemitboard-notify-ferro-20190102t074411000z
title
Transaction InfoBlock #29097229/Trx 7d051a3276f40fd0f8e84a867258fca82ccf37c8
View Raw JSON Data
{
  "block": 29097229,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @ferro! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ferro/birthday1.png</td><td>1 Year on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@ferro)_</sub>\n\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\"]}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-update",
      "permlink": "steemitboard-notify-ferro-20190102t074411000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-01-02T07:44:12",
  "trx_id": "7d051a3276f40fd0f8e84a867258fca82ccf37c8",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 5.603 SP to @ferro
2018/07/23 11:52:27
delegateeferro
delegatorsteem
vesting shares9113.726600 VESTS
Transaction InfoBlock #24426697/Trx 80fa5ac17a5f54aebe339ce6f059971843a276ee
View Raw JSON Data
{
  "block": 24426697,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "9113.726600 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-07-23T11:52:27",
  "trx_id": "80fa5ac17a5f54aebe339ce6f059971843a276ee",
  "trx_in_block": 10,
  "virtual_op": 0
}
steemdelegated 18.133 SP to @ferro
2018/05/18 19:23:24
delegateeferro
delegatorsteem
vesting shares29494.993940 VESTS
Transaction InfoBlock #22546360/Trx 4aa5eeb9d5a71a748e55be9c9347f7a42194c2de
View Raw JSON Data
{
  "block": 22546360,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "29494.993940 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-05-18T19:23:24",
  "trx_id": "4aa5eeb9d5a71a748e55be9c9347f7a42194c2de",
  "trx_in_block": 53,
  "virtual_op": 0
}
2018/04/23 11:58:03
authorferro
permlinkre-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z
voterdatarevolution
weight10000 (100.00%)
Transaction InfoBlock #21818243/Trx 4d5ebaad58590378f6cb0da9d255e0dfe92a15eb
View Raw JSON Data
{
  "block": 21818243,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z",
      "voter": "datarevolution",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-23T11:58:03",
  "trx_id": "4d5ebaad58590378f6cb0da9d255e0dfe92a15eb",
  "trx_in_block": 30,
  "virtual_op": 0
}
2018/04/23 11:57:57
authordatarevolution
bodythey're certainly more polite most of the time. thanks so much! stay tuned for many more
json metadata{"tags":["blockchain"],"app":"steemit/0.1"}
parent authorferro
parent permlinkre-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z
permlinkre-ferro-re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t115758734z
title
Transaction InfoBlock #21818241/Trx 2903489cc317f3474bf2a8ed0010f4e95f363542
View Raw JSON Data
{
  "block": 21818241,
  "op": [
    "comment",
    {
      "author": "datarevolution",
      "body": "they're certainly more polite most of the time. thanks so much! stay tuned for many more",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z",
      "permlink": "re-ferro-re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t115758734z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-23T11:57:57",
  "trx_id": "2903489cc317f3474bf2a8ed0010f4e95f363542",
  "trx_in_block": 57,
  "virtual_op": 0
}
2018/04/23 10:56:09
authorferro
permlinkre-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z
voterferro
weight10000 (100.00%)
Transaction InfoBlock #21817005/Trx 14b608341b18697268d54d149437e50eb2998db7
View Raw JSON Data
{
  "block": 21817005,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-23T10:56:09",
  "trx_id": "14b608341b18697268d54d149437e50eb2998db7",
  "trx_in_block": 39,
  "virtual_op": 0
}
2018/04/23 10:54:36
authorferro
bodyLook at all these lovely bots. Better than humans if you ask me. Great Article BTW
json metadata{"tags":["blockchain"],"app":"steemit/0.1"}
parent authordatarevolution
parent permlinkhow-will-blockchain-disrupt-the-advertising-industry
permlinkre-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z
title
Transaction InfoBlock #21816974/Trx 51c7c2307437af0994ca070c28391805925a8fb1
View Raw JSON Data
{
  "block": 21816974,
  "op": [
    "comment",
    {
      "author": "ferro",
      "body": "Look at all these lovely bots. Better than humans if you ask me. Great Article BTW",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "datarevolution",
      "parent_permlink": "how-will-blockchain-disrupt-the-advertising-industry",
      "permlink": "re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-23T10:54:36",
  "trx_id": "51c7c2307437af0994ca070c28391805925a8fb1",
  "trx_in_block": 42,
  "virtual_op": 0
}
2018/04/23 10:52:42
authordatarevolution
permlinkhow-will-blockchain-disrupt-the-advertising-industry
voterferro
weight10000 (100.00%)
Transaction InfoBlock #21816936/Trx 2fb709aef3f849accf5950ff507a963f32cf63f8
View Raw JSON Data
{
  "block": 21816936,
  "op": [
    "vote",
    {
      "author": "datarevolution",
      "permlink": "how-will-blockchain-disrupt-the-advertising-industry",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-23T10:52:42",
  "trx_id": "2fb709aef3f849accf5950ff507a963f32cf63f8",
  "trx_in_block": 5,
  "virtual_op": 0
}
2018/04/21 07:14:51
authormarcfrvncis
permlinkplasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots
voterferro
weight10000 (100.00%)
Transaction InfoBlock #21754992/Trx 38da84146a844e19ab4aa5df124b408a4b8d9d08
View Raw JSON Data
{
  "block": 21754992,
  "op": [
    "vote",
    {
      "author": "marcfrvncis",
      "permlink": "plasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-21T07:14:51",
  "trx_id": "38da84146a844e19ab4aa5df124b408a4b8d9d08",
  "trx_in_block": 48,
  "virtual_op": 0
}
2018/04/19 11:51:48
authorpvtrickheaton
permlinkplasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots
voterferro
weight10000 (100.00%)
Transaction InfoBlock #21702938/Trx 83771147b155d686b640504496674dbcb78fb904
View Raw JSON Data
{
  "block": 21702938,
  "op": [
    "vote",
    {
      "author": "pvtrickheaton",
      "permlink": "plasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-04-19T11:51:48",
  "trx_id": "83771147b155d686b640504496674dbcb78fb904",
  "trx_in_block": 4,
  "virtual_op": 0
}
ferrofollowed @shoumi
2018/01/16 11:20:48
idfollow
json["follow",{"follower":"ferro","following":"shoumi","what":["blog"]}]
required auths[]
required posting auths["ferro"]
Transaction InfoBlock #19026643/Trx 2aea2924825e5a5eff1909a54d68c39edbf11aa1
View Raw JSON Data
{
  "block": 19026643,
  "op": [
    "custom_json",
    {
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"ferro\",\"following\":\"shoumi\",\"what\":[\"blog\"]}]",
      "required_auths": [],
      "required_posting_auths": [
        "ferro"
      ]
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-16T11:20:48",
  "trx_id": "2aea2924825e5a5eff1909a54d68c39edbf11aa1",
  "trx_in_block": 7,
  "virtual_op": 0
}
ferroreceived 0.261 SBD, 0.057 SP author reward for @ferro / tetris-bot-in-python-part-1
2018/01/16 10:02:33
authorferro
permlinktetris-bot-in-python-part-1
sbd payout0.261 SBD
steem payout0.000 STEEM
vesting payout92.143607 VESTS
Transaction InfoBlock #19025077/Virtual Operation #7
View Raw JSON Data
{
  "block": 19025077,
  "op": [
    "author_reward",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "sbd_payout": "0.261 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "92.143607 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-16T10:02:33",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 7
}
ktoryaupvoted (100.00%) @ferro / tetris-bot-update
2018/01/15 13:54:00
authorferro
permlinktetris-bot-update
voterktorya
weight10000 (100.00%)
Transaction InfoBlock #19000914/Trx 62a8f214a95e7f7b23acbcc85fe8b82fbc0ad8c3
View Raw JSON Data
{
  "block": 19000914,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-update",
      "voter": "ktorya",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T13:54:00",
  "trx_id": "62a8f214a95e7f7b23acbcc85fe8b82fbc0ad8c3",
  "trx_in_block": 62,
  "virtual_op": 0
}
ferroupvoted (100.00%) @ferro / tetris-bot-update
2018/01/15 04:19:42
authorferro
permlinktetris-bot-update
voterferro
weight10000 (100.00%)
Transaction InfoBlock #18989448/Trx c173970873279581ca63efbdb6c5074f29eb19e3
View Raw JSON Data
{
  "block": 18989448,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-update",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T04:19:42",
  "trx_id": "c173970873279581ca63efbdb6c5074f29eb19e3",
  "trx_in_block": 9,
  "virtual_op": 0
}
ferroupdated options for tetris-bot-update
2018/01/15 04:19:42
allow curation rewardstrue
allow votestrue
authorferro
extensions[]
max accepted payout1000000.000 SBD
percent steem dollars0
permlinktetris-bot-update
Transaction InfoBlock #18989448/Trx c173970873279581ca63efbdb6c5074f29eb19e3
View Raw JSON Data
{
  "block": 18989448,
  "op": [
    "comment_options",
    {
      "allow_curation_rewards": true,
      "allow_votes": true,
      "author": "ferro",
      "extensions": [],
      "max_accepted_payout": "1000000.000 SBD",
      "percent_steem_dollars": 0,
      "permlink": "tetris-bot-update"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T04:19:42",
  "trx_id": "c173970873279581ca63efbdb6c5074f29eb19e3",
  "trx_in_block": 9,
  "virtual_op": 0
}
ferropublished a new post: tetris-bot-update
2018/01/15 04:19:42
authorferro
body![bottomRight.PNG](https://steemitimages.com/DQmQrswP6LwLn7bS9EfdvUeziD7s1NXqyroQ2yZu5Mr3e8N/bottomRight.PNG) Hello all, Just a quick update on the progress of the Tetris bot. I've decide to not use machine learning after doing a little bit of research I found the random nature of the block sequence makes it extremely difficult to train a machine learning bot. Thus I've decide to create an algorithm with "goals" that the bot strives to achieve. At the moment these include: * Placing blocks without holes * Prioritise coverage over the x axis * Strive to have to have the surrounding blocks the same height Obviously more goals will be added through development to improve the bots efficiency, however this is a solid foundation. Right now I'm filming the dinosaur tamagotchi which should be up soon. I will continue to update you guys on the progress of the bot as it unfolds. Regards Ferro, Be Happy Life is Beautiful ^_^
json metadata{"tags":["diy","gaming"],"image":["https://steemitimages.com/DQmQrswP6LwLn7bS9EfdvUeziD7s1NXqyroQ2yZu5Mr3e8N/bottomRight.PNG"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkdiy
permlinktetris-bot-update
titleTetris Bot (UPDATE)
Transaction InfoBlock #18989448/Trx c173970873279581ca63efbdb6c5074f29eb19e3
View Raw JSON Data
{
  "block": 18989448,
  "op": [
    "comment",
    {
      "author": "ferro",
      "body": "![bottomRight.PNG](https://steemitimages.com/DQmQrswP6LwLn7bS9EfdvUeziD7s1NXqyroQ2yZu5Mr3e8N/bottomRight.PNG)\n\nHello all, \n\nJust a quick update on the progress of the Tetris bot. I've decide to not use machine learning after doing a little bit of research I found the random nature of the block sequence makes it extremely difficult to train a machine learning bot. \n\nThus I've decide to create an algorithm with \"goals\" that the bot strives to achieve.  At the moment these include:\n* Placing blocks without holes  \n* Prioritise coverage over the x axis\n* Strive to have to have the surrounding blocks the same height \n\nObviously more goals will be added through development to improve the bots efficiency, however this is a solid foundation. Right now I'm filming the dinosaur tamagotchi which should be up soon. I will continue to update you guys on the progress of the bot as it unfolds. \n\nRegards Ferro,\nBe Happy Life is Beautiful ^_^",
      "json_metadata": "{\"tags\":[\"diy\",\"gaming\"],\"image\":[\"https://steemitimages.com/DQmQrswP6LwLn7bS9EfdvUeziD7s1NXqyroQ2yZu5Mr3e8N/bottomRight.PNG\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "diy",
      "permlink": "tetris-bot-update",
      "title": "Tetris Bot (UPDATE)"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T04:19:42",
  "trx_id": "c173970873279581ca63efbdb6c5074f29eb19e3",
  "trx_in_block": 9,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/15 04:03:54
accountferro
json metadata{"profile":{"profile_image":"https://i.imgsafe.org/c2/c265a6d06e.png","location":"Australia","cover_image":"https://i.imgsafe.org/c2/c28116ad95.jpeg","name":"ferro"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18989132/Trx f3e200a803e155a31b7127c95a50f7da4437eb39
View Raw JSON Data
{
  "block": 18989132,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://i.imgsafe.org/c2/c265a6d06e.png\",\"location\":\"Australia\",\"cover_image\":\"https://i.imgsafe.org/c2/c28116ad95.jpeg\",\"name\":\"ferro\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T04:03:54",
  "trx_id": "f3e200a803e155a31b7127c95a50f7da4437eb39",
  "trx_in_block": 29,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/15 04:01:45
accountferro
json metadata{"profile":{"profile_image":"https://i.imgsafe.org/c2/c265a6d06e.png","location":"Australia","cover_image":"https://imgur.com/a/kRah7","name":"ferro"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18989089/Trx d6d93b88a4c86a631dbd0baadd6659e42b1ed309
View Raw JSON Data
{
  "block": 18989089,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://i.imgsafe.org/c2/c265a6d06e.png\",\"location\":\"Australia\",\"cover_image\":\"https://imgur.com/a/kRah7\",\"name\":\"ferro\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T04:01:45",
  "trx_id": "d6d93b88a4c86a631dbd0baadd6659e42b1ed309",
  "trx_in_block": 2,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/15 03:57:06
accountferro
json metadata{"profile":{"profile_image":"https://imgsafe.org/image/c265a6d06e","location":"Australia","cover_image":"https://imgur.com/a/kRah7","name":"ferro"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18988996/Trx dd3f2a586b5f600c38974d6e3b741389c6e653c6
View Raw JSON Data
{
  "block": 18988996,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://imgsafe.org/image/c265a6d06e\",\"location\":\"Australia\",\"cover_image\":\"https://imgur.com/a/kRah7\",\"name\":\"ferro\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T03:57:06",
  "trx_id": "dd3f2a586b5f600c38974d6e3b741389c6e653c6",
  "trx_in_block": 20,
  "virtual_op": 0
}
2018/01/15 03:54:21
authorferro
bodyGreat article! very useful to structure my own ^_^
json metadata{"tags":["steemit"],"app":"steemit/0.1"}
parent authorgold84
parent permlinkre-thecryptofiend-markdown-basics-for-beginners-20180105t202442786z
permlinkre-gold84-re-thecryptofiend-markdown-basics-for-beginners-20180115t035414193z
title
Transaction InfoBlock #18988943/Trx 63305e0820dc8c0b7cc6d3d024e404296be5333b
View Raw JSON Data
{
  "block": 18988943,
  "op": [
    "comment",
    {
      "author": "ferro",
      "body": "Great article! very useful to structure my own ^_^",
      "json_metadata": "{\"tags\":[\"steemit\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "gold84",
      "parent_permlink": "re-thecryptofiend-markdown-basics-for-beginners-20180105t202442786z",
      "permlink": "re-gold84-re-thecryptofiend-markdown-basics-for-beginners-20180115t035414193z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-15T03:54:21",
  "trx_id": "63305e0820dc8c0b7cc6d3d024e404296be5333b",
  "trx_in_block": 12,
  "virtual_op": 0
}
2018/01/12 09:44:30
authormwkthang
bodyI think our family motto is to always work hard, be humble, kind, and thoughtful about others around us.
json metadata{"tags":["technology"],"app":"steemit/0.1"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-20180112t094430833z
title
Transaction InfoBlock #18909646/Trx 21782adf582069e4b56940d7720307c477124418
View Raw JSON Data
{
  "block": 18909646,
  "op": [
    "comment",
    {
      "author": "mwkthang",
      "body": "I think our family motto is to always work hard, be humble, kind, and thoughtful about others around us.",
      "json_metadata": "{\"tags\":[\"technology\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-20180112t094430833z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-12T09:44:30",
  "trx_id": "21782adf582069e4b56940d7720307c477124418",
  "trx_in_block": 23,
  "virtual_op": 0
}
2018/01/12 04:37:09
authormwkthang
bodyGolf is deceptively simple and endlessly complicated; it satisfies the soul and frustrates the intellect. It is at the same time rewarding and maddening - and it is without a doubt the greatest game mankind has ever invented.
json metadata{"tags":["technology"],"app":"steemit/0.1"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-20180112t043710240z
title
Transaction InfoBlock #18903507/Trx eb0c33139f6628c451e53a135b701b044bee41f3
View Raw JSON Data
{
  "block": 18903507,
  "op": [
    "comment",
    {
      "author": "mwkthang",
      "body": "Golf is deceptively simple and endlessly complicated; it satisfies the soul and frustrates the intellect. It is at the same time rewarding and maddening - and it is without a doubt the greatest game mankind has ever invented.",
      "json_metadata": "{\"tags\":[\"technology\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-20180112t043710240z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-12T04:37:09",
  "trx_id": "eb0c33139f6628c451e53a135b701b044bee41f3",
  "trx_in_block": 28,
  "virtual_op": 0
}
2018/01/12 03:21:24
authormwkthang
bodyThe game has its ups and downs, but you can never lose focus of your individual goals and you can't let yourself be beat because of lack of effort.
json metadata{"tags":["technology"],"app":"steemit/0.1"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-20180112t032125768z
title
Transaction InfoBlock #18901996/Trx ff3e8711cc117338ea32321e905e0e6ba41088c6
View Raw JSON Data
{
  "block": 18901996,
  "op": [
    "comment",
    {
      "author": "mwkthang",
      "body": "The game has its ups and downs, but you can never lose focus of your individual goals and you can't let yourself be beat because of lack of effort.",
      "json_metadata": "{\"tags\":[\"technology\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-20180112t032125768z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-12T03:21:24",
  "trx_id": "ff3e8711cc117338ea32321e905e0e6ba41088c6",
  "trx_in_block": 50,
  "virtual_op": 0
}
2018/01/12 02:43:09
authormwkthang
bodyNow, it's my belief that Python is a lot easier than to teach to students programming and teach them C or C++ or Java at the same time because all the details of the languages are so much harder. Other scripting languages really don't work very well there either.
json metadata{"tags":["technology"],"app":"steemit/0.1"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-20180112t024308502z
title
Transaction InfoBlock #18901232/Trx e567e42a4b74893cc285c80543c65245d70152db
View Raw JSON Data
{
  "block": 18901232,
  "op": [
    "comment",
    {
      "author": "mwkthang",
      "body": "Now, it's my belief that Python is a lot easier than to teach to students programming and teach them C or C++ or Java at the same time because all the details of the languages are so much harder. Other scripting languages really don't work very well there either.",
      "json_metadata": "{\"tags\":[\"technology\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-20180112t024308502z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-12T02:43:09",
  "trx_id": "e567e42a4b74893cc285c80543c65245d70152db",
  "trx_in_block": 5,
  "virtual_op": 0
}
2018/01/11 22:11:09
authormwkthang
bodyI decided to work on things that obsess women because women can't resist things like lace, sequins, animal prints and python.
json metadata{"tags":["technology"],"app":"steemit/0.1"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-20180111t221109867z
title
Transaction InfoBlock #18895794/Trx 461b38933cde63a09fd14d76aa18f941e09b33a0
View Raw JSON Data
{
  "block": 18895794,
  "op": [
    "comment",
    {
      "author": "mwkthang",
      "body": "I decided to work on things that obsess women because women can't resist things like lace, sequins, animal prints and python.",
      "json_metadata": "{\"tags\":[\"technology\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-20180111t221109867z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-11T22:11:09",
  "trx_id": "461b38933cde63a09fd14d76aa18f941e09b33a0",
  "trx_in_block": 60,
  "virtual_op": 0
}
ferroreceived 1.077 SBD, 0.219 SP author reward for @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/10 01:33:12
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
sbd payout1.077 SBD
steem payout0.000 STEEM
vesting payout356.399588 VESTS
Transaction InfoBlock #18842246/Virtual Operation #11
View Raw JSON Data
{
  "block": 18842246,
  "op": [
    "author_reward",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "sbd_payout": "1.077 SBD",
      "steem_payout": "0.000 STEEM",
      "vesting_payout": "356.399588 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-10T01:33:12",
  "trx_id": "0000000000000000000000000000000000000000",
  "trx_in_block": 4294967295,
  "virtual_op": 11
}
2018/01/09 11:57:21
authorthehumanbot
bodyUpvoted on behalf of @thehumanbot and it's allies. Write less but write great original content, which is the key to success in Steemit. If you are using any image or video, cite proper source. Even if its your own image or video, it's worth mention the same. Also be careful to avoid duplicate posting. Great Original Works are rewarded by top Curators, refer posts from my Step-Brother @humanbot for more details.If you like this initiative, you can follow me in [SteemAuto](https://steemauto.com/) and upvote the posts, that I upvote. And remember to do some charity when you are rich by contributing to me. Check out my [Introduction Post](https://steemit.com/utopian-io/@thehumanbot/the-human-bot-a-new-beginning-in-steemit) for more details. If you have any concerns or feedback with my way of operation, raise it with @sanmi , my operator who is freaking in Steemit chat most of the time.
json metadata{"tags":["thehumanbot"],"users":["thehumanbot","humanbot","thehumanbot","sanmi"],"links":["https://steemauto.com/","https://steemit.com/utopian-io/@thehumanbot/the-human-bot-a-new-beginning-in-steemit"],"app":"SteemJ-Core/0.4.2","format":"markdown"}
parent authorferro
parent permlinktetris-bot-in-python-part-1
permlinkre-ferro-tetris-bot-in-python-part-1-1515499043022t9299615d-97e9-4eb5-8795-01fc19e6297fuid
title
Transaction InfoBlock #18825939/Trx 685af4b259422e9064e0ed58515c662e499bff0c
View Raw JSON Data
{
  "block": 18825939,
  "op": [
    "comment",
    {
      "author": "thehumanbot",
      "body": "Upvoted on behalf of @thehumanbot and it's allies. Write less but write great original content, which is the key to success in Steemit. If you are using any image or video, cite proper source. Even if its your own image or video, it's worth mention the same. Also be careful to avoid duplicate posting.\nGreat Original Works are rewarded by top Curators, refer posts from my Step-Brother @humanbot for more details.If you like this initiative, you can follow me in [SteemAuto](https://steemauto.com/) and upvote the posts, that I upvote. \n And remember to do some charity when you are rich by contributing to me. Check out my [Introduction Post](https://steemit.com/utopian-io/@thehumanbot/the-human-bot-a-new-beginning-in-steemit) for more details. If you have any concerns or feedback with my way of operation, raise it with @sanmi , my operator who is freaking in Steemit chat most of the time.",
      "json_metadata": "{\"tags\":[\"thehumanbot\"],\"users\":[\"thehumanbot\",\"humanbot\",\"thehumanbot\",\"sanmi\"],\"links\":[\"https://steemauto.com/\",\"https://steemit.com/utopian-io/@thehumanbot/the-human-bot-a-new-beginning-in-steemit\"],\"app\":\"SteemJ-Core/0.4.2\",\"format\":\"markdown\"}",
      "parent_author": "ferro",
      "parent_permlink": "tetris-bot-in-python-part-1",
      "permlink": "re-ferro-tetris-bot-in-python-part-1-1515499043022t9299615d-97e9-4eb5-8795-01fc19e6297fuid",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:21",
  "trx_id": "685af4b259422e9064e0ed58515c662e499bff0c",
  "trx_in_block": 46,
  "virtual_op": 0
}
2018/01/09 11:57:18
authorferro
permlinktetris-bot-in-python-part-1
voterthehumanbot
weight10000 (100.00%)
Transaction InfoBlock #18825938/Trx 9e260cd736f4fb61a00ed0679ff6d5966c6bb256
View Raw JSON Data
{
  "block": 18825938,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "thehumanbot",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:18",
  "trx_id": "9e260cd736f4fb61a00ed0679ff6d5966c6bb256",
  "trx_in_block": 45,
  "virtual_op": 0
}
2018/01/09 11:57:15
authorferro
permlinktetris-bot-in-python-part-1
votersomadeb
weight10000 (100.00%)
Transaction InfoBlock #18825937/Trx c9aec757afb4561ff3be6329ba7dec3d8ca1fb27
View Raw JSON Data
{
  "block": 18825937,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "somadeb",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:15",
  "trx_id": "c9aec757afb4561ff3be6329ba7dec3d8ca1fb27",
  "trx_in_block": 42,
  "virtual_op": 0
}
2018/01/09 11:57:15
authorferro
permlinktetris-bot-in-python-part-1
voterranjangjang
weight10000 (100.00%)
Transaction InfoBlock #18825937/Trx 08e959cc95509e668dfc5bd7e541e72f58fd6b31
View Raw JSON Data
{
  "block": 18825937,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "ranjangjang",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:15",
  "trx_id": "08e959cc95509e668dfc5bd7e541e72f58fd6b31",
  "trx_in_block": 6,
  "virtual_op": 0
}
2018/01/09 11:57:12
authorferro
permlinktetris-bot-in-python-part-1
votersweetbbsr
weight10000 (100.00%)
Transaction InfoBlock #18825936/Trx 3d4b6b4f690b6a54f6a3cad3e1ffaa71c487cb8d
View Raw JSON Data
{
  "block": 18825936,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "sweetbbsr",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:12",
  "trx_id": "3d4b6b4f690b6a54f6a3cad3e1ffaa71c487cb8d",
  "trx_in_block": 25,
  "virtual_op": 0
}
2018/01/09 11:57:09
authorferro
permlinktetris-bot-in-python-part-1
votersamarbbsr
weight10000 (100.00%)
Transaction InfoBlock #18825935/Trx d9696bc466307914ec5c631778117f927e70141d
View Raw JSON Data
{
  "block": 18825935,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "samarbbsr",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:09",
  "trx_id": "d9696bc466307914ec5c631778117f927e70141d",
  "trx_in_block": 3,
  "virtual_op": 0
}
2018/01/09 11:57:06
authorferro
permlinktetris-bot-in-python-part-1
votersushnanda
weight10000 (100.00%)
Transaction InfoBlock #18825934/Trx c55ed292584d5e89229c922db6b3fdc01ee894dd
View Raw JSON Data
{
  "block": 18825934,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "sushnanda",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:06",
  "trx_id": "c55ed292584d5e89229c922db6b3fdc01ee894dd",
  "trx_in_block": 0,
  "virtual_op": 0
}
2018/01/09 11:57:03
authorferro
permlinktetris-bot-in-python-part-1
votersoubhagya
weight10000 (100.00%)
Transaction InfoBlock #18825933/Trx 6abab8cfe9b9111b0963840d38cd7ee11b5fc187
View Raw JSON Data
{
  "block": 18825933,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "soubhagya",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:03",
  "trx_id": "6abab8cfe9b9111b0963840d38cd7ee11b5fc187",
  "trx_in_block": 3,
  "virtual_op": 0
}
2018/01/09 11:57:00
authorferro
permlinktetris-bot-in-python-part-1
voterxpnexindia
weight10000 (100.00%)
Transaction InfoBlock #18825932/Trx 9c3c6f6a7cd6944962e2312987079b1a0d258a7f
View Raw JSON Data
{
  "block": 18825932,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "xpnexindia",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:00",
  "trx_id": "9c3c6f6a7cd6944962e2312987079b1a0d258a7f",
  "trx_in_block": 9,
  "virtual_op": 0
}
ferrosent 0.760 SBD to @null- "@ferro/tetris-bot-in-python-part-1"
2018/01/09 11:57:00
amount0.760 SBD
fromferro
memo@ferro/tetris-bot-in-python-part-1
tonull
Transaction InfoBlock #18825932/Trx cc5988ee652fbcaf004a7a3504f24228de81fa79
View Raw JSON Data
{
  "block": 18825932,
  "op": [
    "transfer",
    {
      "amount": "0.760 SBD",
      "from": "ferro",
      "memo": "@ferro/tetris-bot-in-python-part-1",
      "to": "null"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:57:00",
  "trx_id": "cc5988ee652fbcaf004a7a3504f24228de81fa79",
  "trx_in_block": 7,
  "virtual_op": 0
}
ferrobought 1.000 STEEM for 0.760 SBD from @ferro
2018/01/09 11:48:39
current orderid1515498515
current ownerkusadasi
current pays0.760 SBD
open orderid1515497720
open ownerferro
open pays1.000 STEEM
Transaction InfoBlock #18825765/Trx 9aa9beb7039547f7ad5ce69e70c125df1b873897
View Raw JSON Data
{
  "block": 18825765,
  "op": [
    "fill_order",
    {
      "current_orderid": 1515498515,
      "current_owner": "kusadasi",
      "current_pays": "0.760 SBD",
      "open_orderid": 1515497720,
      "open_owner": "ferro",
      "open_pays": "1.000 STEEM"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:48:39",
  "trx_id": "9aa9beb7039547f7ad5ce69e70c125df1b873897",
  "trx_in_block": 33,
  "virtual_op": 3
}
ferroblockchain operation: limit order create
2018/01/09 11:35:24
amount to sell1.000 STEEM
expiration1969-12-31T23:59:59
fill or killfalse
min to receive0.760 SBD
orderid1515497720
ownerferro
Transaction InfoBlock #18825500/Trx 191f1e2cad4035dad845d3c2837c8fefac4d0d5c
View Raw JSON Data
{
  "block": 18825500,
  "op": [
    "limit_order_create",
    {
      "amount_to_sell": "1.000 STEEM",
      "expiration": "1969-12-31T23:59:59",
      "fill_or_kill": false,
      "min_to_receive": "0.760 SBD",
      "orderid": 1515497720,
      "owner": "ferro"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:35:24",
  "trx_id": "191f1e2cad4035dad845d3c2837c8fefac4d0d5c",
  "trx_in_block": 10,
  "virtual_op": 0
}
ferroblockchain operation: limit order cancel
2018/01/09 11:34:18
orderid1515497433
ownerferro
Transaction InfoBlock #18825478/Trx 63447f8712f1b1ffd44f97305b0f36c79aa4d8d9
View Raw JSON Data
{
  "block": 18825478,
  "op": [
    "limit_order_cancel",
    {
      "orderid": 1515497433,
      "owner": "ferro"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:34:18",
  "trx_id": "63447f8712f1b1ffd44f97305b0f36c79aa4d8d9",
  "trx_in_block": 8,
  "virtual_op": 0
}
ferroblockchain operation: limit order create
2018/01/09 11:30:39
amount to sell1.000 STEEM
expiration1969-12-31T23:59:59
fill or killfalse
min to receive1.000 SBD
orderid1515497433
ownerferro
Transaction InfoBlock #18825405/Trx 58c69152c5a2f5b798c4e18b1e5b1c4f47c7c8c6
View Raw JSON Data
{
  "block": 18825405,
  "op": [
    "limit_order_create",
    {
      "amount_to_sell": "1.000 STEEM",
      "expiration": "1969-12-31T23:59:59",
      "fill_or_kill": false,
      "min_to_receive": "1.000 SBD",
      "orderid": 1515497433,
      "owner": "ferro"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:30:39",
  "trx_id": "58c69152c5a2f5b798c4e18b1e5b1c4f47c7c8c6",
  "trx_in_block": 43,
  "virtual_op": 0
}
blocktradessent 1.607 STEEM to @ferro
2018/01/09 11:24:21
amount1.607 STEEM
fromblocktrades
memo
toferro
Transaction InfoBlock #18825279/Trx 8d51940e573cd32b16373f998c0d613f53135fb6
View Raw JSON Data
{
  "block": 18825279,
  "op": [
    "transfer",
    {
      "amount": "1.607 STEEM",
      "from": "blocktrades",
      "memo": "",
      "to": "ferro"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T11:24:21",
  "trx_id": "8d51940e573cd32b16373f998c0d613f53135fb6",
  "trx_in_block": 35,
  "virtual_op": 0
}
2018/01/09 10:12:48
authorferro
permlinktetris-bot-in-python-part-1
voterferro
weight10000 (100.00%)
Transaction InfoBlock #18823849/Trx c02a80fb0771ebf1e45dd7263e6555c8c5075380
View Raw JSON Data
{
  "block": 18823849,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "tetris-bot-in-python-part-1",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T10:12:48",
  "trx_id": "c02a80fb0771ebf1e45dd7263e6555c8c5075380",
  "trx_in_block": 21,
  "virtual_op": 0
}
ferropublished a new post: tetris-bot-in-python-part-1
2018/01/09 10:02:33
authorferro
body![Cover_Image.png](https://steemitimages.com/DQmQ7y9KPXtgHRpKWE16bp7xHR22sGzkqnMWQmzqtfSdE4w/Cover_Image.png) Hello all, Ferro here! This will be part 1 of a 2 part series, where I'll teach you how to create a bot that plays Tetris. I got the idea to create a bot whilst playing Tetris. The difficulty got so hard that the limiting factor was my reaction time as the blocks dropped almost instantly. Instead of getting better at the game, my solution was to create a bot and then claim the score as my own \ (^_^) / These series of articles will take you along the journey of the development cycle of this bot. To be completely honest, I don't know what I'm doing thus this will be quite an ad-hoc approach. There might be an incredibly simple way to tackle some of the challenges I faced and if anyone can offer any suggestions please! leave them, I need it. <h2>Synopsis</h2> To create the bot I decided to use the python programming language as A) I was familiar with it and B) the libraries are really useful to interact with the game. The version of Tetris that we'll be using can be found [here](https://tetris.com/play-tetris). This version allows you to hold a block and also see the next three blocks. The game uses Flash Player to work so I found it difficult to interact with the code of the game itself. My solution to this problem was to take screenshots of the game and siphon the data from that. I won't be teaching you how to install python or get the library's that we'll be using, however a quick Google search should do the trick. The version of Python we'll be using is **python 3.6.3** **List of libraries we'll be using** * pyscreenshot * time * pyautogui * PIL (pillow) The objective of the bot is to get the most points possible. The easiest way to maximise points is to clear 4 lines at once. This is called a Tetris. One approach to this is to make a well on the right hand side and use the line piece. Similar to the image below ![tetris.png](https://steemitimages.com/DQmaXCkfXz9jZMvLw2qBe9uDMGZvaQ2H1z2d5ndtduUkiup/tetris.png) <h2>PART 1 - Creating a hook into the game. </h2> Before we get into creating the AI we have to construct an interface that the bot can use to interact with the environment. We can view this as reading and writing to the game. This article will be split into to segments, the first will be reading data from the game and the second will be writing to it. <h3>Reading the game data </h3> A method we'll be using to read the data from the game is to consistently take screenshots and read the colour values of specific pixels to recreate the data that the bot can read. To do this will be using two libraries one of which is called pillow or PIL for short. This library has a fantastic at obtaining data from an image. The second library is called pyscreenshot, as the name suggests it takes screenshots. ![fullScreenShot.PNG](https://steemitimages.com/DQmQd2CmEF9gUucxzEdowbuyPQEsqz2Qjh5ACEGHRX1VJSf/fullScreenShot.PNG) This code will be used to take an initial screenshot of the Tetris game you should get an image similar to this. ![FULLSCREEN.png](https://steemitimages.com/DQmaYpEibYZJpZvc29pgKMphf7vKNshNPRH3VXNw1FYAHsR/FULLSCREEN.png) To save us headaches in the future we're going to reduce the screen capture size so that its set around the game screen. To do this we need to define specific pixel coordinates. Originally the method I used to get the screen coordinates was to open the screenshot in paint and manually find the corner coordinates. This proved to be inefficient as different resolutions have different coordinates for the corners. Fortunately for us, the Tetris game screen is locked to a specific size. Thus if we find the coordinates of an object inside of the screen space we can calculate the constants to find the corners. This is explained by the diagram below. ![gettingGameSpace.png](https://steemitimages.com/DQmcanot4LJifxPtBxtJLu7X8cXrVMUuW9kvvp4G6QuRJC7/gettingGameSpace.png) To get the coordinates of the hold/next tabs we'll use a library called piautogui. This library has a bunch of functionality that we'll be using to control the game. A handy function that it possesses is to find PNG's on the screen. Download the two [images](https://imgur.com/a/eNYHV) naming them '*next.png*' and '*hold.png*'. Also download the [code](https://pastebin.com/APCZMJ57) into the same directory. Run the code whilst the game is open. You should have an output similar to this. ![output.PNG](https://steemitimages.com/DQmVE3A1j1vqmzcHcML6aKZ6Tx6bMTb1vCSTbaFenFyJpGs/output.PNG) Now that we have the coordinates values we can add them to the [code](https://pastebin.com/fgeYRPSZ) shown below under the section *please change*. Make this a new file called screenshot.py. We'll be using this chunk of code consistently in the future. Now we should be able to take a screenshot just of the game screen. ![screenShot.PNG](https://steemitimages.com/DQme7A6Kpkeboh4ouKyxUZJkp8CoPiDu7UZcmbmDVCWnnMk/screenShot.PNG) ![testing1.png](https://steemitimages.com/DQmWXmXKyTnT2jta8RPs1tPzDanpg9y13wyq2DDMUHHXCyQ/testing1.png) <h4>Reading Game Grid </h4> Now that we have a refined image we can start to siphon the data. Our first task will be to create the virtualisation of the game grid. We will record the data by inputting either a 1 for a block present, or a 0 for a blank space in a 2 dimensional array. Our bot will see the grid like the image below. ![matrix.png](https://steemitimages.com/DQmRTzaBZ3NdDhjkqDYWwGnvx1JQiPSZpuWAya4qBH2c1e1/matrix.png) By loading the *im* variable we are able to find the rgb value of specific pixels from the image. This [code](https://pastebin.com/SSW8geae) will get the rgb values of the centre pixel of every cell. It'll check if it's a colour and it'll add 1 accordingly to the 2 dimensional array. In the code make sure to change the coordinates value pending on your resolution. ![matrix_grab.PNG](https://steemitimages.com/DQmZL6tc7oGkZ6R1aPcV5LLByTt26FVuXufjzWT557LsVgV/matrix_grab.PNG) <h4> Reading Current, Holding and Next Blocks </h4> For all three of these variables we'll use the same method to extract data from them . The method that I found most effective is to detect the colour of the block to figure out what shape it is. For example a line block is light blue. However, the blocks aren't a solid colour and have many different hues. To calculate the type we need to check if a colour is within a certain domain. This is where things start to get tricky. It's very difficult to create a domain for different shades of a certain colour using RGB values. This is because RGB values don't increase linearly up the colour spectrum. The graph explains it best. The top colour spectrum is partitioned using a HSV colour scheme and the bottom uses the RGB colour scheme. As you can see even a minor difference in hue of the HSV colour scheme can produce wildly altered values for the RGB scale making it very difficult to create a domain. ![HSV-rainbow-with-desc.jpg](https://steemitimages.com/DQmSSAebUPvKw5fSHdEP6RRoqWyn6jHL2mgu8zp9BhZr9Ai/HSV-rainbow-with-desc.jpg) As the python library we're using only gives us RGB values we need to convert these to HSV then check them with the domains of each colour. Luckily there's a mathematical equation to convert these values. Even luckier for us someone else is already written it in python, so time to copy and paste. http://code.activestate.com/recipes/576919-python-rgb-and-hsv-conversion/ Now to create the domains! I did this by grabbing random points inside each of the blocks finding the lightest and darkest hue and setting the bounces to the domain using those points. I've constructed a little diagram to elaborate this. Look at us playing with colour wheels to make a tetris bot, the rabbit hole has no bounds /(^ x ^)\ ![HSL colour wheel.png](https://steemitimages.com/DQmP4fToZzK1XXaNHbJAcGFXUu2cCPZXn4av7j52NJvN2Zz/HSL%20colour%20wheel.png) The [code](https://pastebin.com/jHTdgL2D) for the section is much longer than the previous . Thus I won't show screenshot as most likely everyone's going to copy and paste it. In this code I have implemented the auto-calibration so the code should be able to run out of the box. Make sure that '*hold.png*' and '*next.png*' are in the directory with the code, as well as this [image](https://imgur.com/a/0pmQb) named '*playButton.png*' Below is a diagram of all the points we'll be capturing, however if the calibration worked they should already be scaled to your screen so you don't have to worry about it. If you run into a problem you'll get a *none type error*. If numerous people get this I'll update the article to include the procedure as it's quite lengthy and tedious. ![current,hold,next.png](https://steemitimages.com/DQmbJ8tzsDokmBZL9vvawVwA4jy6kn1pLfkqvzamcsgxaUM/current%2Chold%2Cnext.png) <h3> Writing data to tetris </h3> The code implemented to write data to the game is quite small as it's heavily intertwined with the AI's logic. This will be expanded in the second part of this series. We'll be using pyautogui to virtually press the appropriate button. To test that the code is correctly implemented we'll write a quick procedure that moves the block to the left hand side and instantly drops it, followed by holding the next block. Here is the [code](https://pastebin.com/ZKnCwKHP) and it should look similar to this. ![auto_write.PNG](https://steemitimages.com/DQmRw78WkRQLyQXWSNep6tCGmWPCBBzYSHgFMasvtRjZtzW/auto_write.PNG) <h2>Conclusion </h2> Congratulations!! You've taken the first steps to create a bot. A good analogy to summarise this article is that we gave our bot senses. Although these functions seem isolated once we've developed the AI architecture we can glue them all together. In the next tutorial we'll give our bot a brain (arguably much more exciting). If I skimmed over something or plainly left it out, please tell me. I'll be more than happy to explain things in greater depths if people are interested. Hope you guys enjoyed my first tutorial. Peace,
json metadata{"tags":["technology","game","howto","python","tutorial"],"image":["https://steemitimages.com/DQmQ7y9KPXtgHRpKWE16bp7xHR22sGzkqnMWQmzqtfSdE4w/Cover_Image.png","https://steemitimages.com/DQmaXCkfXz9jZMvLw2qBe9uDMGZvaQ2H1z2d5ndtduUkiup/tetris.png","https://steemitimages.com/DQmQd2CmEF9gUucxzEdowbuyPQEsqz2Qjh5ACEGHRX1VJSf/fullScreenShot.PNG","https://steemitimages.com/DQmaYpEibYZJpZvc29pgKMphf7vKNshNPRH3VXNw1FYAHsR/FULLSCREEN.png","https://steemitimages.com/DQmcanot4LJifxPtBxtJLu7X8cXrVMUuW9kvvp4G6QuRJC7/gettingGameSpace.png","https://steemitimages.com/DQmVE3A1j1vqmzcHcML6aKZ6Tx6bMTb1vCSTbaFenFyJpGs/output.PNG","https://steemitimages.com/DQme7A6Kpkeboh4ouKyxUZJkp8CoPiDu7UZcmbmDVCWnnMk/screenShot.PNG","https://steemitimages.com/DQmWXmXKyTnT2jta8RPs1tPzDanpg9y13wyq2DDMUHHXCyQ/testing1.png","https://steemitimages.com/DQmRTzaBZ3NdDhjkqDYWwGnvx1JQiPSZpuWAya4qBH2c1e1/matrix.png","https://steemitimages.com/DQmZL6tc7oGkZ6R1aPcV5LLByTt26FVuXufjzWT557LsVgV/matrix_grab.PNG","https://steemitimages.com/DQmSSAebUPvKw5fSHdEP6RRoqWyn6jHL2mgu8zp9BhZr9Ai/HSV-rainbow-with-desc.jpg","https://steemitimages.com/DQmP4fToZzK1XXaNHbJAcGFXUu2cCPZXn4av7j52NJvN2Zz/HSL%20colour%20wheel.png","https://steemitimages.com/DQmbJ8tzsDokmBZL9vvawVwA4jy6kn1pLfkqvzamcsgxaUM/current%2Chold%2Cnext.png","https://steemitimages.com/DQmRw78WkRQLyQXWSNep6tCGmWPCBBzYSHgFMasvtRjZtzW/auto_write.PNG"],"links":["https://tetris.com/play-tetris","https://imgur.com/a/eNYHV","https://pastebin.com/APCZMJ57","https://pastebin.com/fgeYRPSZ","https://pastebin.com/SSW8geae","http://code.activestate.com/recipes/576919-python-rgb-and-hsv-conversion/","https://pastebin.com/jHTdgL2D","https://imgur.com/a/0pmQb","https://pastebin.com/ZKnCwKHP"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinktechnology
permlinktetris-bot-in-python-part-1
titleTetris Bot In Python! (Part 1)
Transaction InfoBlock #18823645/Trx 502c2bc79396d4f759f6269fcf994d754559cd49
View Raw JSON Data
{
  "block": 18823645,
  "op": [
    "comment",
    {
      "author": "ferro",
      "body": "![Cover_Image.png](https://steemitimages.com/DQmQ7y9KPXtgHRpKWE16bp7xHR22sGzkqnMWQmzqtfSdE4w/Cover_Image.png)\n\nHello all, Ferro here! \n\nThis will be part 1 of a 2 part series, where I'll teach you how to create a bot that plays Tetris. I got the idea to create a bot whilst playing Tetris. The difficulty got so hard that the limiting factor was my reaction time as the blocks dropped almost instantly. Instead of getting better at the game, my solution was to create a bot and then claim the score as my own \\ (^_^) /\n\nThese series of articles will take you along the journey of the development cycle of this bot. To be completely honest, I don't know what I'm doing thus this will be quite an ad-hoc approach. There might be an incredibly simple way to tackle some of the challenges I faced and if anyone can offer any suggestions please! leave them, I need it. \n\n<h2>Synopsis</h2>\n\nTo create the bot I decided to use the python programming language as A) I was familiar with it and B) the libraries are really useful to interact with the game. The version of Tetris that we'll be using can be found [here](https://tetris.com/play-tetris). This version allows you to hold a block and also see the next three blocks. The game uses Flash Player to work so I found it difficult to interact with the code of the game itself. My solution to this problem was to take screenshots of the game and siphon the data from that. I won't be teaching you how to install python or get the library's that we'll be using, however a quick Google search should do the trick. The version of Python we'll be using is  **python 3.6.3**\n\n**List of libraries we'll be using**\n* pyscreenshot\n* time\n* pyautogui\n* PIL (pillow)\n\nThe objective of the bot is to get the most points possible. The easiest way to maximise points is to clear 4 lines at once. This is called a Tetris. One approach to this is to make a well on the right hand side and use the line piece.  Similar to the image below\n\n![tetris.png](https://steemitimages.com/DQmaXCkfXz9jZMvLw2qBe9uDMGZvaQ2H1z2d5ndtduUkiup/tetris.png)\n\n\n\n\n<h2>PART 1 - Creating a hook into the game. </h2>\n\nBefore we get into creating the AI we have to construct an interface that the bot can use to interact with the environment.  We can view this as reading and writing to the game. This article will be split into to segments, the first will be reading data from the game  and the second will be writing to it.\n\n<h3>Reading the game data </h3>\n\nA method we'll be using to read the data from the game is to consistently take screenshots and read the colour values of specific pixels to recreate the data that the bot can read. To do this will be using two libraries one of which is called pillow or PIL for short. This library has a fantastic at obtaining data from an image. The second library is called pyscreenshot, as the name suggests it takes screenshots. \n\n![fullScreenShot.PNG](https://steemitimages.com/DQmQd2CmEF9gUucxzEdowbuyPQEsqz2Qjh5ACEGHRX1VJSf/fullScreenShot.PNG)\n\nThis code will be used to take an initial screenshot of the Tetris game you should get an image similar to this.\n\n![FULLSCREEN.png](https://steemitimages.com/DQmaYpEibYZJpZvc29pgKMphf7vKNshNPRH3VXNw1FYAHsR/FULLSCREEN.png)\n\nTo save us headaches in the future we're going to reduce the screen capture size so that its set around the game screen. To do this we need to define specific pixel coordinates. Originally the method I used to get the screen coordinates was to open the screenshot in paint and manually find the corner coordinates. This proved to be inefficient as different resolutions have different coordinates for the corners. Fortunately for us, the Tetris game screen is locked to a specific size. Thus if we find the coordinates of an object inside of the screen space we can calculate the constants to find the corners. This is explained by the diagram below.\n\n![gettingGameSpace.png](https://steemitimages.com/DQmcanot4LJifxPtBxtJLu7X8cXrVMUuW9kvvp4G6QuRJC7/gettingGameSpace.png)\n\nTo get the coordinates of the hold/next tabs we'll use a library called piautogui.  This library has a bunch of functionality that we'll be using to control the game. A handy function that it possesses is to find PNG's on the screen. Download the two [images](https://imgur.com/a/eNYHV) naming them '*next.png*' and '*hold.png*'. Also download the [code](https://pastebin.com/APCZMJ57) into the same directory.\n\n Run the code whilst the game is open. You should have an output similar to this. \n\n![output.PNG](https://steemitimages.com/DQmVE3A1j1vqmzcHcML6aKZ6Tx6bMTb1vCSTbaFenFyJpGs/output.PNG)\n\nNow that we have the coordinates values we can add them to the [code](https://pastebin.com/fgeYRPSZ) shown below under the section *please change*. Make this a new file called screenshot.py. We'll be using this chunk of code consistently in the future. Now we should be able to take a screenshot just of the game screen.\n\n ![screenShot.PNG](https://steemitimages.com/DQme7A6Kpkeboh4ouKyxUZJkp8CoPiDu7UZcmbmDVCWnnMk/screenShot.PNG)\n\n![testing1.png](https://steemitimages.com/DQmWXmXKyTnT2jta8RPs1tPzDanpg9y13wyq2DDMUHHXCyQ/testing1.png)\n\n<h4>Reading Game Grid </h4>\n\nNow that we have a refined  image we can start to siphon the data. Our first task will be to create the virtualisation of the game grid. We will record the data by inputting either a 1 for a block present, or a 0 for a blank space in a 2 dimensional array. Our bot will see the grid like the image below.\n\n![matrix.png](https://steemitimages.com/DQmRTzaBZ3NdDhjkqDYWwGnvx1JQiPSZpuWAya4qBH2c1e1/matrix.png)\n\nBy loading the *im* variable we are able to find the rgb value of specific pixels from the image. This [code](https://pastebin.com/SSW8geae) will get the rgb values of the centre pixel of every cell.  It'll check if it's a colour and it'll add 1 accordingly to the 2 dimensional array. In the code make sure to change the coordinates value pending on your resolution. \n\n![matrix_grab.PNG](https://steemitimages.com/DQmZL6tc7oGkZ6R1aPcV5LLByTt26FVuXufjzWT557LsVgV/matrix_grab.PNG)\n\n<h4> Reading Current, Holding and Next Blocks </h4>\n\nFor all three of these variables we'll use the same method to extract data from them . The method that I found most effective is to detect the colour of the block to figure out what shape it is. For example a line block is light blue. However, the blocks aren't a solid colour and have many different hues. To calculate the type we need to check if a colour is within a certain domain. \n\nThis is where things start to get tricky. It's very difficult to create a domain for different shades of a certain colour using RGB values. This is because RGB values don't increase linearly up the colour spectrum. The graph explains it best. The top colour spectrum is partitioned using a HSV colour scheme and the bottom uses the RGB colour scheme. As you can see even a minor difference in hue of the HSV colour scheme can produce wildly altered values for the RGB scale making it very difficult to create a domain.\n\n![HSV-rainbow-with-desc.jpg](https://steemitimages.com/DQmSSAebUPvKw5fSHdEP6RRoqWyn6jHL2mgu8zp9BhZr9Ai/HSV-rainbow-with-desc.jpg)\n\nAs the python library we're using only gives us RGB values we need to convert these to HSV then check them with the domains of each colour. Luckily there's a mathematical equation to convert these values. Even luckier for us someone else is already written it in python, so time to copy and paste.\nhttp://code.activestate.com/recipes/576919-python-rgb-and-hsv-conversion/  \nNow to create the domains! I did this by grabbing random points inside each of the blocks finding the lightest and darkest hue and setting the bounces to the domain using those points. I've constructed a little diagram to elaborate this. Look at us playing with colour wheels to make a tetris bot, the rabbit hole has no bounds  /(^ x ^)\ \n\n![HSL colour wheel.png](https://steemitimages.com/DQmP4fToZzK1XXaNHbJAcGFXUu2cCPZXn4av7j52NJvN2Zz/HSL%20colour%20wheel.png)\n\nThe [code](https://pastebin.com/jHTdgL2D) for the section is much longer than the previous . Thus I  won't show screenshot as most likely everyone's going to copy and paste it.  In this code I have implemented the auto-calibration so the code should be able to run out of the box. Make sure that '*hold.png*' and '*next.png*' are in the  directory with the code, as well as  this [image](https://imgur.com/a/0pmQb) named '*playButton.png*' Below is a diagram of all the points we'll be capturing, however if the calibration worked they should already be scaled to your screen so you don't have to worry about it. If you run into a problem you'll get a *none type error*. If numerous people get this I'll update the article to include the procedure as it's quite lengthy and tedious.\n\n![current,hold,next.png](https://steemitimages.com/DQmbJ8tzsDokmBZL9vvawVwA4jy6kn1pLfkqvzamcsgxaUM/current%2Chold%2Cnext.png)\n\n\n\n<h3> Writing data to tetris </h3>\n\nThe code implemented to write data to the game is quite small as it's heavily intertwined with the AI's logic. This will be expanded in the second part of this series. We'll be using pyautogui to virtually press the appropriate button. To test that the code is correctly implemented we'll write a quick procedure that  moves the block to the left hand side and instantly drops it, followed by holding the next block. Here is the [code](https://pastebin.com/ZKnCwKHP) and it should look similar to this.\n\n![auto_write.PNG](https://steemitimages.com/DQmRw78WkRQLyQXWSNep6tCGmWPCBBzYSHgFMasvtRjZtzW/auto_write.PNG)\n\n<h2>Conclusion </h2>\n\nCongratulations!! You've taken the first steps to create a bot. A good analogy to summarise this article is that we gave our bot senses.  Although these functions seem isolated once we've developed the AI architecture we can glue them all together. In the next tutorial we'll give our bot a brain (arguably much more exciting). If I skimmed over something or plainly left it out, please tell me. I'll be more than happy to explain things in greater depths if people are interested.  Hope you guys enjoyed my first tutorial. \n\nPeace,",
      "json_metadata": "{\"tags\":[\"technology\",\"game\",\"howto\",\"python\",\"tutorial\"],\"image\":[\"https://steemitimages.com/DQmQ7y9KPXtgHRpKWE16bp7xHR22sGzkqnMWQmzqtfSdE4w/Cover_Image.png\",\"https://steemitimages.com/DQmaXCkfXz9jZMvLw2qBe9uDMGZvaQ2H1z2d5ndtduUkiup/tetris.png\",\"https://steemitimages.com/DQmQd2CmEF9gUucxzEdowbuyPQEsqz2Qjh5ACEGHRX1VJSf/fullScreenShot.PNG\",\"https://steemitimages.com/DQmaYpEibYZJpZvc29pgKMphf7vKNshNPRH3VXNw1FYAHsR/FULLSCREEN.png\",\"https://steemitimages.com/DQmcanot4LJifxPtBxtJLu7X8cXrVMUuW9kvvp4G6QuRJC7/gettingGameSpace.png\",\"https://steemitimages.com/DQmVE3A1j1vqmzcHcML6aKZ6Tx6bMTb1vCSTbaFenFyJpGs/output.PNG\",\"https://steemitimages.com/DQme7A6Kpkeboh4ouKyxUZJkp8CoPiDu7UZcmbmDVCWnnMk/screenShot.PNG\",\"https://steemitimages.com/DQmWXmXKyTnT2jta8RPs1tPzDanpg9y13wyq2DDMUHHXCyQ/testing1.png\",\"https://steemitimages.com/DQmRTzaBZ3NdDhjkqDYWwGnvx1JQiPSZpuWAya4qBH2c1e1/matrix.png\",\"https://steemitimages.com/DQmZL6tc7oGkZ6R1aPcV5LLByTt26FVuXufjzWT557LsVgV/matrix_grab.PNG\",\"https://steemitimages.com/DQmSSAebUPvKw5fSHdEP6RRoqWyn6jHL2mgu8zp9BhZr9Ai/HSV-rainbow-with-desc.jpg\",\"https://steemitimages.com/DQmP4fToZzK1XXaNHbJAcGFXUu2cCPZXn4av7j52NJvN2Zz/HSL%20colour%20wheel.png\",\"https://steemitimages.com/DQmbJ8tzsDokmBZL9vvawVwA4jy6kn1pLfkqvzamcsgxaUM/current%2Chold%2Cnext.png\",\"https://steemitimages.com/DQmRw78WkRQLyQXWSNep6tCGmWPCBBzYSHgFMasvtRjZtzW/auto_write.PNG\"],\"links\":[\"https://tetris.com/play-tetris\",\"https://imgur.com/a/eNYHV\",\"https://pastebin.com/APCZMJ57\",\"https://pastebin.com/fgeYRPSZ\",\"https://pastebin.com/SSW8geae\",\"http://code.activestate.com/recipes/576919-python-rgb-and-hsv-conversion/\",\"https://pastebin.com/jHTdgL2D\",\"https://imgur.com/a/0pmQb\",\"https://pastebin.com/ZKnCwKHP\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "technology",
      "permlink": "tetris-bot-in-python-part-1",
      "title": "Tetris Bot In Python! (Part 1)"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T10:02:33",
  "trx_id": "502c2bc79396d4f759f6269fcf994d754559cd49",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 18.259 SP to @ferro
2018/01/08 19:34:33
delegateeferro
delegatorsteem
vesting shares29700.474015 VESTS
Transaction InfoBlock #18806312/Trx 6f88f33c8d3a0e24809fce6e5e87abd47d038f53
View Raw JSON Data
{
  "block": 18806312,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "ferro",
      "delegator": "steem",
      "vesting_shares": "29700.474015 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-08T19:34:33",
  "trx_id": "6f88f33c8d3a0e24809fce6e5e87abd47d038f53",
  "trx_in_block": 1,
  "virtual_op": 0
}
2018/01/03 13:01:27
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterferro
weight10000 (100.00%)
Transaction InfoBlock #18654568/Trx d699c5b8155222f905fee8cb5d13a64b9a1f1a46
View Raw JSON Data
{
  "block": 18654568,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "ferro",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T13:01:27",
  "trx_id": "d699c5b8155222f905fee8cb5d13a64b9a1f1a46",
  "trx_in_block": 47,
  "virtual_op": 0
}
2018/01/03 07:24:57
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterfonsetucker
weight20 (0.20%)
Transaction InfoBlock #18647842/Trx 40b653c87e2d56f3801c93ae49704f37959f9881
View Raw JSON Data
{
  "block": 18647842,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "fonsetucker",
      "weight": 20
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T07:24:57",
  "trx_id": "40b653c87e2d56f3801c93ae49704f37959f9881",
  "trx_in_block": 30,
  "virtual_op": 0
}
2018/01/03 07:24:57
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterthinknzombie
weight100 (1.00%)
Transaction InfoBlock #18647842/Trx 0193c72731ca895935d89a7ee2dc77a1e8913872
View Raw JSON Data
{
  "block": 18647842,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "thinknzombie",
      "weight": 100
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T07:24:57",
  "trx_id": "0193c72731ca895935d89a7ee2dc77a1e8913872",
  "trx_in_block": 12,
  "virtual_op": 0
}
2018/01/03 07:21:06
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterausbitbank
weight100 (1.00%)
Transaction InfoBlock #18647765/Trx cdbb20673a23a2d6c723a91d16d874c4cee31d1d
View Raw JSON Data
{
  "block": 18647765,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "ausbitbank",
      "weight": 100
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T07:21:06",
  "trx_id": "cdbb20673a23a2d6c723a91d16d874c4cee31d1d",
  "trx_in_block": 13,
  "virtual_op": 0
}
2018/01/03 07:19:48
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterwelcoming
weight2500 (25.00%)
Transaction InfoBlock #18647739/Trx b44cd02882990d3dc47677aae590c376415aae95
View Raw JSON Data
{
  "block": 18647739,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "welcoming",
      "weight": 2500
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T07:19:48",
  "trx_id": "b44cd02882990d3dc47677aae590c376415aae95",
  "trx_in_block": 18,
  "virtual_op": 0
}
2018/01/03 07:19:48
authorwelcoming
bodyHaha, sounds like you are up to fun projects :) Maybe you can do a report on you Pacman with a video on @dtube? :)
json metadata{"tags":["introduceyourself"],"users":["dtube"],"app":"steemit/0.1"}
parent authorferro
parent permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
permlinkre-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t071947793z
title
Transaction InfoBlock #18647739/Trx f94db894279f9e786adcc6e547d37acbd8207ad7
View Raw JSON Data
{
  "block": 18647739,
  "op": [
    "comment",
    {
      "author": "welcoming",
      "body": "Haha, sounds like you are up to fun projects :) Maybe you can do a report on you Pacman with a video on @dtube? :)",
      "json_metadata": "{\"tags\":[\"introduceyourself\"],\"users\":[\"dtube\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "permlink": "re-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t071947793z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T07:19:48",
  "trx_id": "f94db894279f9e786adcc6e547d37acbd8207ad7",
  "trx_in_block": 8,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/03 05:28:39
accountferro
json metadata{"profile":{"profile_image":"https://ibb.co/kErNxG","location":"Australia","cover_image":"https://imgur.com/a/kRah7","name":"ferro"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18645520/Trx 3f2bce9a56b8b568764091681bffd41e6ceea135
View Raw JSON Data
{
  "block": 18645520,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://ibb.co/kErNxG\",\"location\":\"Australia\",\"cover_image\":\"https://imgur.com/a/kRah7\",\"name\":\"ferro\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T05:28:39",
  "trx_id": "3f2bce9a56b8b568764091681bffd41e6ceea135",
  "trx_in_block": 10,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/03 05:28:33
accountferro
json metadata{"profile":{"profile_image":"https://ibb.co/kErNxG","location":"Australia","cover_image":"https://imgur.com/a/kRah7"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18645518/Trx 0cee006d521df8d05c3324f6080e73ea469b02d5
View Raw JSON Data
{
  "block": 18645518,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://ibb.co/kErNxG\",\"location\":\"Australia\",\"cover_image\":\"https://imgur.com/a/kRah7\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T05:28:33",
  "trx_id": "0cee006d521df8d05c3324f6080e73ea469b02d5",
  "trx_in_block": 12,
  "virtual_op": 0
}
ferroupdated their account properties
2018/01/03 05:26:00
accountferro
json metadata{"profile":{"profile_image":"https://ibb.co/kErNxG","location":"Australia"}}
memo keySTM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
Transaction InfoBlock #18645467/Trx 6ef9b9a59119d89276019eff1b9dc6705f97730f
View Raw JSON Data
{
  "block": 18645467,
  "op": [
    "account_update",
    {
      "account": "ferro",
      "json_metadata": "{\"profile\":{\"profile_image\":\"https://ibb.co/kErNxG\",\"location\":\"Australia\"}}",
      "memo_key": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T05:26:00",
  "trx_id": "6ef9b9a59119d89276019eff1b9dc6705f97730f",
  "trx_in_block": 25,
  "virtual_op": 0
}
2018/01/03 04:56:42
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
votervsimon
weight10000 (100.00%)
Transaction InfoBlock #18644881/Trx 698b9842396f76dfbc1d661f3906528f94293b1b
View Raw JSON Data
{
  "block": 18644881,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "vsimon",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T04:56:42",
  "trx_id": "698b9842396f76dfbc1d661f3906528f94293b1b",
  "trx_in_block": 18,
  "virtual_op": 0
}
2018/01/03 03:23:09
authorferro
permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
voterfisherck
weight10000 (100.00%)
Transaction InfoBlock #18643010/Trx 46776d907b21e574256505c62939cf2debaa33ef
View Raw JSON Data
{
  "block": 18643010,
  "op": [
    "vote",
    {
      "author": "ferro",
      "permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "voter": "fisherck",
      "weight": 10000
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T03:23:09",
  "trx_id": "46776d907b21e574256505c62939cf2debaa33ef",
  "trx_in_block": 38,
  "virtual_op": 0
}
2018/01/03 02:57:15
authorthinkhappy
bodyhttps://steemit.com/poetry/@thinkhappy/the-breath-of-life The Breath of Life short poetry writting
json metadata{"tags":["introduceyourself"],"links":["https://steemit.com/poetry/@thinkhappy/the-breath-of-life"],"app":"steemit/0.1"}
parent authorferro
parent permlinkhello-world-i-m-ferro-the-hobbyist-tinkerer
permlinkre-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t025714005z
title
Transaction InfoBlock #18642492/Trx 10f8db27dfd66a19fc7ef5b7e8718a23fd8f03b5
View Raw JSON Data
{
  "block": 18642492,
  "op": [
    "comment",
    {
      "author": "thinkhappy",
      "body": "https://steemit.com/poetry/@thinkhappy/the-breath-of-life\nThe Breath of Life short poetry writting",
      "json_metadata": "{\"tags\":[\"introduceyourself\"],\"links\":[\"https://steemit.com/poetry/@thinkhappy/the-breath-of-life\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "ferro",
      "parent_permlink": "hello-world-i-m-ferro-the-hobbyist-tinkerer",
      "permlink": "re-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t025714005z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T02:57:15",
  "trx_id": "10f8db27dfd66a19fc7ef5b7e8718a23fd8f03b5",
  "trx_in_block": 2,
  "virtual_op": 0
}
2018/01/03 02:18:00
authorferro
bodyThanks man, great idea!! I'll make a post of my progression today.
json metadata{"tags":["introduceyourself"],"app":"steemit/0.1"}
parent authorinterested
parent permlinkre-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t014346902z
permlinkre-interested-re-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t021748970z
title
Transaction InfoBlock #18641707/Trx 7870b7c123bc340cd79a96bd0caaeba77f08a32d
View Raw JSON Data
{
  "block": 18641707,
  "op": [
    "comment",
    {
      "author": "ferro",
      "body": "Thanks man, great idea!! I'll make a post of my progression today.",
      "json_metadata": "{\"tags\":[\"introduceyourself\"],\"app\":\"steemit/0.1\"}",
      "parent_author": "interested",
      "parent_permlink": "re-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t014346902z",
      "permlink": "re-interested-re-ferro-hello-world-i-m-ferro-the-hobbyist-tinkerer-20180103t021748970z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-03T02:18:00",
  "trx_id": "7870b7c123bc340cd79a96bd0caaeba77f08a32d",
  "trx_in_block": 2,
  "virtual_op": 0
}

Account Metadata

POSTING JSON METADATA
profile{"profile_image":"https://i.imgsafe.org/c2/c265a6d06e.png","location":"Australia","cover_image":"https://i.imgsafe.org/c2/c28116ad95.jpeg","name":"ferro"}
JSON METADATA
profile{"profile_image":"https://i.imgsafe.org/c2/c265a6d06e.png","location":"Australia","cover_image":"https://i.imgsafe.org/c2/c28116ad95.jpeg","name":"ferro"}
{
  "posting_json_metadata": {
    "profile": {
      "profile_image": "https://i.imgsafe.org/c2/c265a6d06e.png",
      "location": "Australia",
      "cover_image": "https://i.imgsafe.org/c2/c28116ad95.jpeg",
      "name": "ferro"
    }
  },
  "json_metadata": {
    "profile": {
      "profile_image": "https://i.imgsafe.org/c2/c265a6d06e.png",
      "location": "Australia",
      "cover_image": "https://i.imgsafe.org/c2/c28116ad95.jpeg",
      "name": "ferro"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM8asukoXwqNWjUcxDn6poxJ9ZpphF66suuqAZR5uBdvrGPbZdkt1/1
Active
Single Signature
Public Keys
STM5aVsKGc3SYwdkz9PyvHHbbkSLPWiX8nuxqdgd614BGK8918cZz1/1
Posting
Single Signature
Public Keys
STM5y2iFuyJJ4zJkzYPH5ssG9JCXNCNWdUNw2UeXhVYPgh9ZgpPEs1/1
Memo
STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx
{
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8asukoXwqNWjUcxDn6poxJ9ZpphF66suuqAZR5uBdvrGPbZdkt",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5aVsKGc3SYwdkz9PyvHHbbkSLPWiX8nuxqdgd614BGK8918cZz",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5y2iFuyJJ4zJkzYPH5ssG9JCXNCNWdUNw2UeXhVYPgh9ZgpPEs",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "memo": "STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx"
}

Witness Votes

0 / 30
No active witness votes.
[]