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 DelegationsDeleg
+4.377SP
Detailed Balance
| STEEM | ||
| balance | 0.607STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.630SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.377SP | SP |
| Effective Power | 5.007SP | SP |
| Reward SP (pending) | 0.219SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 1.338SBD | SBD |
{
"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
| name | ferro |
| id | 546470 |
| rank | 373,822 |
| reputation | 4503454139 |
| created | 2018-01-02T06:45:54 |
| recovery_account | steem |
| proxy | None |
| post_count | 6 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-04-23T10:54:36 |
| last_root_post | 2018-01-15T04:19:42 |
| last_vote_time | 2018-04-23T10:56:09 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.607 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1024.525985 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7119.133821 VESTS |
| reward_vesting_balance | 448.543195 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-01-15T04:03:54 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 2018-01-09T11:57:00 |
| savings_sbd_last_interest_payment | 1970-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
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 00:17:15
2026/05/18 00:17:15
| delegatee | ferro |
| delegator | steem |
| vesting shares | 7119.133821 VESTS |
| Transaction Info | Block #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
}2026/05/12 03:59:12
2026/05/12 03:59:12
| delegatee | ferro |
| delegator | steem |
| vesting shares | 4406.923416 VESTS |
| Transaction Info | Block #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
}2026/04/25 23:38:03
2026/04/25 23:38:03
| delegatee | ferro |
| delegator | steem |
| vesting shares | 7131.649577 VESTS |
| Transaction Info | Block #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
}2026/01/23 07:53:42
2026/01/23 07:53:42
| delegatee | ferro |
| delegator | steem |
| vesting shares | 4448.470235 VESTS |
| Transaction Info | Block #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
}2024/12/17 03:12:45
2024/12/17 03:12:45
| delegatee | ferro |
| delegator | steem |
| vesting shares | 4612.689432 VESTS |
| Transaction Info | Block #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
}2023/11/13 18:55:27
2023/11/13 18:55:27
| delegatee | ferro |
| delegator | steem |
| vesting shares | 4781.822964 VESTS |
| Transaction Info | Block #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
}2023/09/21 21:52:03
2023/09/21 21:52:03
| delegatee | ferro |
| delegator | steem |
| vesting shares | 7719.101750 VESTS |
| Transaction Info | Block #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
}2022/11/03 11:39:33
2022/11/03 11:39:33
| delegatee | ferro |
| delegator | steem |
| vesting shares | 7940.783188 VESTS |
| Transaction Info | Block #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
}2022/01/17 10:55:45
2022/01/17 10:55:45
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8161.316419 VESTS |
| Transaction Info | Block #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
}2021/06/14 00:51:03
2021/06/14 00:51:03
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8345.085077 VESTS |
| Transaction Info | Block #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
}2020/12/11 11:09:36
2020/12/11 11:09:36
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8532.507051 VESTS |
| Transaction Info | Block #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
}2020/12/06 04:46:51
2020/12/06 04:46:51
| delegatee | ferro |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #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
}2020/12/05 14:47:48
2020/12/05 14:47:48
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8538.714905 VESTS |
| Transaction Info | Block #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
}2020/11/02 15:43:03
2020/11/02 15:43:03
| delegatee | ferro |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #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
}2020/05/09 05:44:12
2020/05/09 05:44:12
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8741.520264 VESTS |
| Transaction Info | Block #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
}2020/05/08 09:20:39
2020/05/08 09:20:39
| delegatee | ferro |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #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
2020/01/02 08:01:21
| author | steemitboard |
| body | Congratulations @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 author | ferro |
| parent permlink | tetris-bot-update |
| permlink | steemitboard-notify-ferro-20200102t080120000z |
| title | |
| Transaction Info | Block #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
}2019/07/12 05:13:30
2019/07/12 05:13:30
| delegatee | ferro |
| delegator | steem |
| vesting shares | 8914.882806 VESTS |
| Transaction Info | Block #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
2019/01/02 07:44:12
| author | steemitboard |
| body | Congratulations @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 author | ferro |
| parent permlink | tetris-bot-update |
| permlink | steemitboard-notify-ferro-20190102t074411000z |
| title | |
| Transaction Info | Block #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
}2018/07/23 11:52:27
2018/07/23 11:52:27
| delegatee | ferro |
| delegator | steem |
| vesting shares | 9113.726600 VESTS |
| Transaction Info | Block #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
}2018/05/18 19:23:24
2018/05/18 19:23:24
| delegatee | ferro |
| delegator | steem |
| vesting shares | 29494.993940 VESTS |
| Transaction Info | Block #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
2018/04/23 11:58:03
| author | ferro |
| permlink | re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z |
| voter | datarevolution |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/04/23 11:57:57
| 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 | |
| Transaction Info | Block #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
2018/04/23 10:56:09
| author | ferro |
| permlink | re-datarevolution-how-will-blockchain-disrupt-the-advertising-industry-20180423t105423228z |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/04/23 10:54:36
| 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 | |
| Transaction Info | Block #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
}ferroupvoted (100.00%) @datarevolution / how-will-blockchain-disrupt-the-advertising-industry2018/04/23 10:52:42
ferroupvoted (100.00%) @datarevolution / how-will-blockchain-disrupt-the-advertising-industry
2018/04/23 10:52:42
| author | datarevolution |
| permlink | how-will-blockchain-disrupt-the-advertising-industry |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/04/21 07:14:51
| author | marcfrvncis |
| permlink | plasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/04/19 11:51:48
| author | pvtrickheaton |
| permlink | plasma-based-social-media-platform-touch-goes-live-no-advertising-or-bots |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}2018/01/16 11:20:48
2018/01/16 11:20:48
| id | follow |
| json | ["follow",{"follower":"ferro","following":"shoumi","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["ferro"] |
| Transaction Info | Block #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-12018/01/16 10:02:33
ferroreceived 0.261 SBD, 0.057 SP author reward for @ferro / tetris-bot-in-python-part-1
2018/01/16 10:02:33
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| sbd payout | 0.261 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 92.143607 VESTS |
| Transaction Info | Block #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-update2018/01/15 13:54:00
ktoryaupvoted (100.00%) @ferro / tetris-bot-update
2018/01/15 13:54:00
| author | ferro |
| permlink | tetris-bot-update |
| voter | ktorya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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-update2018/01/15 04:19:42
ferroupvoted (100.00%) @ferro / tetris-bot-update
2018/01/15 04:19:42
| author | ferro |
| permlink | tetris-bot-update |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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-update2018/01/15 04:19:42
ferroupdated options for tetris-bot-update
2018/01/15 04:19:42
| allow curation rewards | true |
| allow votes | true |
| author | ferro |
| extensions | [] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 0 |
| permlink | tetris-bot-update |
| Transaction Info | Block #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-update2018/01/15 04:19:42
ferropublished a new post: tetris-bot-update
2018/01/15 04:19:42
| author | ferro |
| body |  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 permlink | diy |
| permlink | tetris-bot-update |
| title | Tetris Bot (UPDATE) |
| Transaction Info | Block #18989448/Trx c173970873279581ca63efbdb6c5074f29eb19e3 |
View Raw JSON Data
{
"block": 18989448,
"op": [
"comment",
{
"author": "ferro",
"body": "\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 properties2018/01/15 04:03:54
ferroupdated their account properties
2018/01/15 04:03:54
| 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 |
| Transaction Info | Block #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 properties2018/01/15 04:01:45
ferroupdated their account properties
2018/01/15 04:01:45
| 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 |
| Transaction Info | Block #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 properties2018/01/15 03:57:06
ferroupdated their account properties
2018/01/15 03:57:06
| 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 |
| Transaction Info | Block #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
2018/01/15 03:54:21
| 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 | |
| Transaction Info | Block #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
2018/01/12 09:44:30
| 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 | |
| Transaction Info | Block #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
2018/01/12 04:37:09
| 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 | |
| Transaction Info | Block #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
2018/01/12 03:21:24
| 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 | |
| Transaction Info | Block #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
2018/01/12 02:43:09
| 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 | |
| Transaction Info | Block #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
2018/01/11 22:11:09
| 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 | |
| Transaction Info | Block #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-tinkerer2018/01/10 01:33:12
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
| 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 |
| Transaction Info | Block #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
2018/01/09 11:57:21
| 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. 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 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 | |
| Transaction Info | Block #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
}thehumanbotupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:18
thehumanbotupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:18
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | thehumanbot |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}somadebupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:15
somadebupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:15
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | somadeb |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}ranjangjangupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:15
ranjangjangupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:15
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | ranjangjang |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}sweetbbsrupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:12
sweetbbsrupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:12
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | sweetbbsr |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}samarbbsrupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:09
samarbbsrupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:09
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | samarbbsr |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}sushnandaupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:06
sushnandaupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:06
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | sushnanda |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}soubhagyaupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:03
soubhagyaupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:03
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | soubhagya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}xpnexindiaupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 11:57:00
xpnexindiaupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 11:57:00
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | xpnexindia |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}2018/01/09 11:57:00
2018/01/09 11:57:00
| amount | 0.760 SBD |
| from | ferro |
| memo | @ferro/tetris-bot-in-python-part-1 |
| to | null |
| Transaction Info | Block #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
}2018/01/09 11:48:39
2018/01/09 11:48:39
| current orderid | 1515498515 |
| current owner | kusadasi |
| current pays | 0.760 SBD |
| open orderid | 1515497720 |
| open owner | ferro |
| open pays | 1.000 STEEM |
| Transaction Info | Block #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 create2018/01/09 11:35:24
ferroblockchain operation: limit order create
2018/01/09 11:35:24
| 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 |
| Transaction Info | Block #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 cancel2018/01/09 11:34:18
ferroblockchain operation: limit order cancel
2018/01/09 11:34:18
| orderid | 1515497433 |
| owner | ferro |
| Transaction Info | Block #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 create2018/01/09 11:30:39
ferroblockchain operation: limit order create
2018/01/09 11:30:39
| 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 |
| Transaction Info | Block #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 @ferro2018/01/09 11:24:21
blocktradessent 1.607 STEEM to @ferro
2018/01/09 11:24:21
| amount | 1.607 STEEM |
| from | blocktrades |
| memo | |
| to | ferro |
| Transaction Info | Block #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
}ferroupvoted (100.00%) @ferro / tetris-bot-in-python-part-12018/01/09 10:12:48
ferroupvoted (100.00%) @ferro / tetris-bot-in-python-part-1
2018/01/09 10:12:48
| author | ferro |
| permlink | tetris-bot-in-python-part-1 |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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-12018/01/09 10:02:33
ferropublished a new post: tetris-bot-in-python-part-1
2018/01/09 10:02:33
| author | ferro |
| body |  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  <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.  This code will be used to take an initial screenshot of the Tetris game you should get an image similar to this.  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.  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.  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.   <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.  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.  <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.  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 ^)\  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.  <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.  <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 permlink | technology |
| permlink | tetris-bot-in-python-part-1 |
| title | Tetris Bot In Python! (Part 1) |
| Transaction Info | Block #18823645/Trx 502c2bc79396d4f759f6269fcf994d754559cd49 |
View Raw JSON Data
{
"block": 18823645,
"op": [
"comment",
{
"author": "ferro",
"body": "\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\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\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\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\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\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 \n\n\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\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\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\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\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\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\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
}2018/01/08 19:34:33
2018/01/08 19:34:33
| delegatee | ferro |
| delegator | steem |
| vesting shares | 29700.474015 VESTS |
| Transaction Info | Block #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
}ferroupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 13:01:27
ferroupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 13:01:27
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | ferro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}fonsetuckerupvoted (0.20%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 07:24:57
fonsetuckerupvoted (0.20%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 07:24:57
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | fonsetucker |
| weight | 20 (0.20%) |
| Transaction Info | Block #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
}thinknzombieupvoted (1.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 07:24:57
thinknzombieupvoted (1.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 07:24:57
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | thinknzombie |
| weight | 100 (1.00%) |
| Transaction Info | Block #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
}ausbitbankupvoted (1.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 07:21:06
ausbitbankupvoted (1.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 07:21:06
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | ausbitbank |
| weight | 100 (1.00%) |
| Transaction Info | Block #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
}welcomingupvoted (25.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 07:19:48
welcomingupvoted (25.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 07:19:48
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | welcoming |
| weight | 2500 (25.00%) |
| Transaction Info | Block #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
2018/01/03 07:19:48
| 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 | |
| Transaction Info | Block #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 properties2018/01/03 05:28:39
ferroupdated their account properties
2018/01/03 05:28:39
| 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 |
| Transaction Info | Block #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 properties2018/01/03 05:28:33
ferroupdated their account properties
2018/01/03 05:28:33
| account | ferro |
| json metadata | {"profile":{"profile_image":"https://ibb.co/kErNxG","location":"Australia","cover_image":"https://imgur.com/a/kRah7"}} |
| memo key | STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx |
| Transaction Info | Block #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 properties2018/01/03 05:26:00
ferroupdated their account properties
2018/01/03 05:26:00
| account | ferro |
| json metadata | {"profile":{"profile_image":"https://ibb.co/kErNxG","location":"Australia"}} |
| memo key | STM6QtemJj6VHKgoKMTLgxc35pDkEyySJ6hesrNg8zcrzX5mZGjCx |
| Transaction Info | Block #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
}vsimonupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 04:56:42
vsimonupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 04:56:42
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | vsimon |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
}fisherckupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer2018/01/03 03:23:09
fisherckupvoted (100.00%) @ferro / hello-world-i-m-ferro-the-hobbyist-tinkerer
2018/01/03 03:23:09
| author | ferro |
| permlink | hello-world-i-m-ferro-the-hobbyist-tinkerer |
| voter | fisherck |
| weight | 10000 (100.00%) |
| Transaction Info | Block #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
2018/01/03 02:57:15
| author | thinkhappy |
| body | https://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 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 | |
| Transaction Info | Block #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
2018/01/03 02:18:00
| 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 | |
| Transaction Info | Block #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
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress88.19%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779063435
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779063435
},
"rc_account": {
"account": "ferro",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779063435
}
}
}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.
[]