Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.034USD
STEEM
0.000STEEM
SBD
0.000SBD
Effective Power
5.001SP
├── Own SP
0.634SP
└── Incoming Deleg
+4.367SP

Detailed Balance

STEEM
balance
0.000STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.634SP
Delegated Out
0.000SP
Delegation In
4.367SP
Effective Power
5.001SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "1032.326829 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7111.332977 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

namef4tca7
id301959
rank1,421,085
reputation15142622
created2017-08-08T02:40:33
recovery_accountsteem
proxyNone
post_count1
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2017-09-01T11:43:06
last_root_post2017-09-01T11:43:06
last_vote_time1970-01-01T00:00:00
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.000 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares1032.326829 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares7111.332977 VESTS
reward_vesting_balance0.000000 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_update1970-01-01T00:00:00
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 301959,
  "name": "f4tca7",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM5Eb2ZhkB1VdW4wHg8A9uYbtuRsj67psXdvpDNknj4xYJJi3FDP",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM81CAfKj5U2u3XQK59dM3rVfTxwS8tWYPv7QUu4PWf7yWMycm6a",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6MnGLfJ5fMkSG64HMR481w8ZvJwXKBUy3zR5NsJG7RK8dAQqoH",
        1
      ]
    ]
  },
  "memo_key": "STM4uYg4cSN3xxEGvnWyunon8nUpRsA5aGto42FudVLdL9rBh45xT",
  "json_metadata": "",
  "posting_json_metadata": "",
  "proxy": "",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_account_update": "1970-01-01T00:00:00",
  "created": "2017-08-08T02:40:33",
  "mined": false,
  "recovery_account": "steem",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 1,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": "8143659806",
    "last_update_time": 1779062970
  },
  "downvote_manabar": {
    "current_mana": 2035914951,
    "last_update_time": 1779062970
  },
  "voting_power": 0,
  "balance": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.000 SBD",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "1970-01-01T00:00:00",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "vesting_shares": "1032.326829 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7111.332977 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "withdrawn": 0,
  "to_withdraw": 0,
  "withdraw_routes": 0,
  "curation_rewards": 0,
  "posting_rewards": 0,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2017-09-01T11:43:06",
  "last_root_post": "2017-09-01T11:43:06",
  "last_vote_time": "1970-01-01T00:00:00",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": 15142622,
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": [],
  "rank": 1421085
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 4.367 SP to @f4tca7
2026/05/18 00:09:30
delegatorsteem
delegateef4tca7
vesting shares7111.332977 VESTS
Transaction InfoBlock #106143336/Trx e5b30a1acc46e968cc00225ad85629b5b2902b85
View Raw JSON Data
{
  "trx_id": "e5b30a1acc46e968cc00225ad85629b5b2902b85",
  "block": 106143336,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-05-18T00:09:30",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "7111.332977 VESTS"
    }
  ]
}
steemdelegated 2.701 SP to @f4tca7
2026/05/12 03:26:45
delegatorsteem
delegateef4tca7
vesting shares4399.122572 VESTS
Transaction InfoBlock #105975237/Trx 3cdcdc8945090c79e8b3fffe8b851052abde1c8a
View Raw JSON Data
{
  "trx_id": "3cdcdc8945090c79e8b3fffe8b851052abde1c8a",
  "block": 105975237,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-05-12T03:26:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "4399.122572 VESTS"
    }
  ]
}
steemdelegated 4.375 SP to @f4tca7
2026/04/25 23:30:36
delegatorsteem
delegateef4tca7
vesting shares7123.848733 VESTS
Transaction InfoBlock #105510990/Trx 02c986c31850531411f55e18680a23de87832c00
View Raw JSON Data
{
  "trx_id": "02c986c31850531411f55e18680a23de87832c00",
  "block": 105510990,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-04-25T23:30:36",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "7123.848733 VESTS"
    }
  ]
}
steemdelegated 2.727 SP to @f4tca7
2026/01/23 07:32:21
delegatorsteem
delegateef4tca7
vesting shares4440.669391 VESTS
Transaction InfoBlock #102851494/Trx a82c3402cdc596b7507ad41cc1b5c046747c8231
View Raw JSON Data
{
  "trx_id": "a82c3402cdc596b7507ad41cc1b5c046747c8231",
  "block": 102851494,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-01-23T07:32:21",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "4440.669391 VESTS"
    }
  ]
}
steemdelegated 2.828 SP to @f4tca7
2024/12/17 02:51:45
delegatorsteem
delegateef4tca7
vesting shares4604.888588 VESTS
Transaction InfoBlock #91297910/Trx 75795a431182fc52534e8aa82c02dc4de0c01d02
View Raw JSON Data
{
  "trx_id": "75795a431182fc52534e8aa82c02dc4de0c01d02",
  "block": 91297910,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2024-12-17T02:51:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "4604.888588 VESTS"
    }
  ]
}
steemdelegated 2.932 SP to @f4tca7
2023/11/13 18:34:30
delegatorsteem
delegateef4tca7
vesting shares4774.022120 VESTS
Transaction InfoBlock #79852110/Trx 0b679ab5604d1ad58ee14eb6f37362485212eeb2
View Raw JSON Data
{
  "trx_id": "0b679ab5604d1ad58ee14eb6f37362485212eeb2",
  "block": 79852110,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2023-11-13T18:34:30",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "4774.022120 VESTS"
    }
  ]
}
steemdelegated 4.735 SP to @f4tca7
2023/09/21 21:42:45
delegatorsteem
delegateef4tca7
vesting shares7711.300906 VESTS
Transaction InfoBlock #78347686/Trx 957a3b7275beb81b2e59a299210171cdf2ff5df3
View Raw JSON Data
{
  "trx_id": "957a3b7275beb81b2e59a299210171cdf2ff5df3",
  "block": 78347686,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2023-09-21T21:42:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "7711.300906 VESTS"
    }
  ]
}
steemdelegated 4.872 SP to @f4tca7
2022/11/03 11:31:42
delegatorsteem
delegateef4tca7
vesting shares7932.982344 VESTS
Transaction InfoBlock #69113052/Trx 6792b940d4c44e453f089ca884aeffe37bda6c79
View Raw JSON Data
{
  "trx_id": "6792b940d4c44e453f089ca884aeffe37bda6c79",
  "block": 69113052,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2022-11-03T11:31:42",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "7932.982344 VESTS"
    }
  ]
}
steemdelegated 5.007 SP to @f4tca7
2022/01/17 10:48:27
delegatorsteem
delegateef4tca7
vesting shares8153.515575 VESTS
Transaction InfoBlock #60809234/Trx d53deb7a474e9299c0c2c5cae4b881647a83f973
View Raw JSON Data
{
  "trx_id": "d53deb7a474e9299c0c2c5cae4b881647a83f973",
  "block": 60809234,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2022-01-17T10:48:27",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8153.515575 VESTS"
    }
  ]
}
steemdelegated 5.120 SP to @f4tca7
2021/06/14 00:44:06
delegatorsteem
delegateef4tca7
vesting shares8337.284233 VESTS
Transaction InfoBlock #54607630/Trx 1cdcc083be2f9fe1e6419088e497d5c48e2ef1aa
View Raw JSON Data
{
  "trx_id": "1cdcc083be2f9fe1e6419088e497d5c48e2ef1aa",
  "block": 54607630,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2021-06-14T00:44:06",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8337.284233 VESTS"
    }
  ]
}
steemdelegated 5.235 SP to @f4tca7
2020/12/11 11:03:00
delegatorsteem
delegateef4tca7
vesting shares8524.706207 VESTS
Transaction InfoBlock #49355091/Trx ee73071acb880ac0a9c4570fb47fbe2c44732d56
View Raw JSON Data
{
  "trx_id": "ee73071acb880ac0a9c4570fb47fbe2c44732d56",
  "block": 49355091,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-12-11T11:03:00",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8524.706207 VESTS"
    }
  ]
}
steemdelegated 1.174 SP to @f4tca7
2020/12/06 04:40:18
delegatorsteem
delegateef4tca7
vesting shares1912.543513 VESTS
Transaction InfoBlock #49206657/Trx 7246a15de13a3a5a51fe16a8721de8ec77e00d95
View Raw JSON Data
{
  "trx_id": "7246a15de13a3a5a51fe16a8721de8ec77e00d95",
  "block": 49206657,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-12-06T04:40:18",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "1912.543513 VESTS"
    }
  ]
}
steemdelegated 5.239 SP to @f4tca7
2020/12/05 14:41:12
delegatorsteem
delegateef4tca7
vesting shares8530.914061 VESTS
Transaction InfoBlock #49190190/Trx bc248e7624924270d45a7bc1b8021d04f9808735
View Raw JSON Data
{
  "trx_id": "bc248e7624924270d45a7bc1b8021d04f9808735",
  "block": 49190190,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-12-05T14:41:12",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8530.914061 VESTS"
    }
  ]
}
steemdelegated 1.179 SP to @f4tca7
2020/11/02 15:24:30
delegatorsteem
delegateef4tca7
vesting shares1920.017158 VESTS
Transaction InfoBlock #48257529/Trx 65194d4cc714f34ea65050decdffb94362eaf8eb
View Raw JSON Data
{
  "trx_id": "65194d4cc714f34ea65050decdffb94362eaf8eb",
  "block": 48257529,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-11-02T15:24:30",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "1920.017158 VESTS"
    }
  ]
}
steemdelegated 5.363 SP to @f4tca7
2020/05/09 05:37:24
delegatorsteem
delegateef4tca7
vesting shares8733.719420 VESTS
Transaction InfoBlock #43216899/Trx 33d3d10f197a66d61ea1fcc26eba111b616803d1
View Raw JSON Data
{
  "trx_id": "33d3d10f197a66d61ea1fcc26eba111b616803d1",
  "block": 43216899,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-05-09T05:37:24",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8733.719420 VESTS"
    }
  ]
}
steemdelegated 1.200 SP to @f4tca7
2020/05/08 09:12:51
delegatorsteem
delegateef4tca7
vesting shares1953.311140 VESTS
Transaction InfoBlock #43192986/Trx 10f26b8e7e90b228647a8baf3f734a83e9297623
View Raw JSON Data
{
  "trx_id": "10f26b8e7e90b228647a8baf3f734a83e9297623",
  "block": 43192986,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-05-08T09:12:51",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "1953.311140 VESTS"
    }
  ]
}
steemdelegated 5.371 SP to @f4tca7
2020/04/15 21:33:00
delegatorsteem
delegateef4tca7
vesting shares8746.696839 VESTS
Transaction InfoBlock #42562485/Trx cb9cbd899eacb43669e00056b1f19258d1243855
View Raw JSON Data
{
  "trx_id": "cb9cbd899eacb43669e00056b1f19258d1243855",
  "block": 42562485,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-04-15T21:33:00",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8746.696839 VESTS"
    }
  ]
}
2019/08/08 03:38:33
parent authorf4tca7
parent permlinkintroduction-to-the-sha-256-hash-function
authorsteemitboard
permlinksteemitboard-notify-f4tca7-20190808t033832000z
title
bodyCongratulations @f4tca7! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@f4tca7/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/@f4tca7) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=f4tca7)_</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"]}
Transaction InfoBlock #35361941/Trx c129618bf844b0d8c4c1533f48e33619267726e8
View Raw JSON Data
{
  "trx_id": "c129618bf844b0d8c4c1533f48e33619267726e8",
  "block": 35361941,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-08-08T03:38:33",
  "op": [
    "comment",
    {
      "parent_author": "f4tca7",
      "parent_permlink": "introduction-to-the-sha-256-hash-function",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-f4tca7-20190808t033832000z",
      "title": "",
      "body": "Congratulations @f4tca7! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@f4tca7/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/@f4tca7) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=f4tca7)_</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\"]}"
    }
  ]
}
steemdelegated 5.491 SP to @f4tca7
2019/05/12 14:47:54
delegatorsteem
delegateef4tca7
vesting shares8942.319644 VESTS
Transaction InfoBlock #32845361/Trx 076940b178a7f75c81798bddfaf25dc6a40d4717
View Raw JSON Data
{
  "trx_id": "076940b178a7f75c81798bddfaf25dc6a40d4717",
  "block": 32845361,
  "trx_in_block": 30,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-05-12T14:47:54",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "8942.319644 VESTS"
    }
  ]
}
steemdelegated 5.614 SP to @f4tca7
2018/05/16 20:16:45
delegatorsteem
delegateef4tca7
vesting shares9141.872079 VESTS
Transaction InfoBlock #22489836/Trx 668bb5576992b8a7b832f21817a805a2e0393822
View Raw JSON Data
{
  "trx_id": "668bb5576992b8a7b832f21817a805a2e0393822",
  "block": 22489836,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-05-16T20:16:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "9141.872079 VESTS"
    }
  ]
}
steemdelegated 18.134 SP to @f4tca7
2018/04/21 20:42:42
delegatorsteem
delegateef4tca7
vesting shares29529.841119 VESTS
Transaction InfoBlock #21771142/Trx eb28ba261e1241b1c6c0b05881472ad2dc431a63
View Raw JSON Data
{
  "trx_id": "eb28ba261e1241b1c6c0b05881472ad2dc431a63",
  "block": 21771142,
  "trx_in_block": 30,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-21T20:42:42",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "29529.841119 VESTS"
    }
  ]
}
2018/02/10 23:13:42
voterleonardbaboi
authorf4tca7
permlinkintroduction-to-the-sha-256-hash-function
weight5000 (50.00%)
Transaction InfoBlock #19760113/Trx 91cf892f18999d4617c528c237698b8e02c6dd87
View Raw JSON Data
{
  "trx_id": "91cf892f18999d4617c528c237698b8e02c6dd87",
  "block": 19760113,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-10T23:13:42",
  "op": [
    "vote",
    {
      "voter": "leonardbaboi",
      "author": "f4tca7",
      "permlink": "introduction-to-the-sha-256-hash-function",
      "weight": 5000
    }
  ]
}
2018/01/13 16:18:39
parent authorf4tca7
parent permlinkintroduction-to-the-sha-256-hash-function
authormosef
permlinkre-f4tca7-introduction-to-the-sha-256-hash-function-20180113t161838940z
title
bodyGreat post with good detail. I appreciated how you broke down the message padding and the block parsing. I also really appreciated the high-level concept overviews. Very helpful for newbie like me :)
json metadata{"tags":["cryptocurrency"],"app":"steemit/0.1"}
Transaction InfoBlock #18946250/Trx 6a9e73fed8a5bdc2058adb9d252b93c47735a172
View Raw JSON Data
{
  "trx_id": "6a9e73fed8a5bdc2058adb9d252b93c47735a172",
  "block": 18946250,
  "trx_in_block": 53,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-01-13T16:18:39",
  "op": [
    "comment",
    {
      "parent_author": "f4tca7",
      "parent_permlink": "introduction-to-the-sha-256-hash-function",
      "author": "mosef",
      "permlink": "re-f4tca7-introduction-to-the-sha-256-hash-function-20180113t161838940z",
      "title": "",
      "body": "Great post with good detail.  I appreciated how you broke down the message padding and the block parsing.  I also really appreciated the high-level concept overviews.  Very helpful for newbie like me :)",
      "json_metadata": "{\"tags\":[\"cryptocurrency\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
2018/01/13 16:17:00
votermosef
authorf4tca7
permlinkintroduction-to-the-sha-256-hash-function
weight10000 (100.00%)
Transaction InfoBlock #18946217/Trx 0c86e8527b0125deb87173cd4870922781d33ab5
View Raw JSON Data
{
  "trx_id": "0c86e8527b0125deb87173cd4870922781d33ab5",
  "block": 18946217,
  "trx_in_block": 86,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-01-13T16:17:00",
  "op": [
    "vote",
    {
      "voter": "mosef",
      "author": "f4tca7",
      "permlink": "introduction-to-the-sha-256-hash-function",
      "weight": 10000
    }
  ]
}
steemdelegated 18.259 SP to @f4tca7
2017/12/12 22:26:39
delegatorsteem
delegateef4tca7
vesting shares29733.673171 VESTS
Transaction InfoBlock #18032716/Trx 954a5c69f5a1350ef51ec32cfef707bad0ee2ed1
View Raw JSON Data
{
  "trx_id": "954a5c69f5a1350ef51ec32cfef707bad0ee2ed1",
  "block": 18032716,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-12-12T22:26:39",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "f4tca7",
      "vesting_shares": "29733.673171 VESTS"
    }
  ]
}
2017/09/01 11:45:18
voterranjanoinam
authorf4tca7
permlinkintroduction-to-the-sha-256-hash-function
weight10000 (100.00%)
Transaction InfoBlock #15084103/Trx b88ad198df0203b700567fe5fd821dea4500a5a1
View Raw JSON Data
{
  "trx_id": "b88ad198df0203b700567fe5fd821dea4500a5a1",
  "block": 15084103,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-09-01T11:45:18",
  "op": [
    "vote",
    {
      "voter": "ranjanoinam",
      "author": "f4tca7",
      "permlink": "introduction-to-the-sha-256-hash-function",
      "weight": 10000
    }
  ]
}
2017/09/01 11:43:06
parent author
parent permlinkcryptocurrency
authorf4tca7
permlinkintroduction-to-the-sha-256-hash-function
titleIntroduction to the SHA-256 hash function
body# Introduction to the SHA-256 hash function This article aims to give an introduction into the SHA-256 hash algorithm. It is accompanied by a Java-implementation at https://github.com/f4tca7/Sha256 ([2]). SHA-256 was chosen as it's one of the most commonly used (and state-of-the-art) hash functions in existence. Also, if someone understands SHA-256, understanding the other hash functions of the SHA-2 family is an easy task. The main motivation for this article was to give readers interested in how SHA-2 hash functions work a more "gentle" description, compared to the very formal articles that I found were predominant (e.g. at Wikipedia or NIST). This article is aimed at people with a working knowledge of Java or a similar programming language and who are somewhat familiar with bitwise operations. ## Hash Functions - A hash function takes an arbitrary string as input. The input is commonly called "message". - It produces an output that is FIXED in length. For SHA-256 the output is always 256 bit long. The output is commonly called "Message Digest" or "Hash Value" or just "Hash". Below, hash function outputs will be called `H(x)` - Its algorithm finishes in a reasonable amount of time - It's useful to compare two messages for equality, even if we don't know the messages themselves. Meaning that we can say if ` H(x) = H(y), also message x = message y ` ## Security Properties Of Hash Functions The below properties aim to give an idea of what's required for a secure cryptographic hash function. It's not intended to be a comprehensive list. - Hiding property (or Pre-image resistance): Just knowing `H(x)`, you cannot deduct `x`. However, this only holds up if message `x` is not chosen from a "likely" set of values. "Likely" here means that x cannot be realistically guessed by an attacker. - Collision Free: A collision occurs if for two different messages the same hash value is calculated. "Collision free" means that it is infeasible to find two messages `x` and `y`, with `x != y`, so that `H(x) = H(y)`. Meaning it should be near impossible that two different messages result in the same hash value. Now, of course collisions will always exist because the number of possible inputs (an input can be of any size) is far larger than the number of possible outputs (an output is always of a fixed length). However, for SHA-2 hash functions, the effort require to find those collisions is enormous. - Puzzle friendliness, especially relevant for cryptocurrencies: - Suppose we know two values `x` and `y`. `x` is part of the hash function input message, `y` is the hash function output. - A hash function is puzzle friendly if it is infeasible to find a third value `k`, so that H(k | x ) = y. `k | x` means just concatenation of `k` and `x` (e.g. if `k = 1100` and `x = 0011` then `k | x = 1100 0011`). - We assume `k` to be a random value from a very spread-out set of values. - This property is e.g. used to construct the Bitcoin proof-of-work mining puzzle. Here a miner has to iterate over `k` (`x` is given in this scenario, it is a hash of the block that's being mined), and tries to find a value `y` that is in a certain range. For bitcoin concretely, `y` needs to be smaller than a specific value determined roughly every two weeks by the Bitcoin software. ## SHA-2 - SHA stands for "Secure Hash Algorithm" - SHA-2 is a family of cryptographic hash functions - All members of the SHA-2 family share the same general approach and algorithm, but differ in sizes and constraints of inputs, outputs and working variables. For example, when working on a 32-bit architecture, it might make more sense to use SHA-256 instead of SHA-512, because SHA-256 works with 32-bit words, whereas SHA-512 works with 64-bit words. ### Members of the SHA-2 family are: | Algorithm | Message Size (bits) | Block Size (bits) | Word Size (bits) | Message Digest Size (bits) | |-------------|---------------------|-------------------|------------------|----------------------------| | SHA-224 | < 2^64 | 512 | 32 | 224 | | SHA-256 | < 2^64 | 512 | 32 | 256 | | SHA-384 | < 2^128 | 1024 | 64 | 384 | | SHA-512 | < 2^128 | 1024 | 64 | 512 | | SHA-512/224 | < 2^128 | 1024 | 64 | 224 | | SHA-512/256 | < 2^128 | 1024 | 64 | 256 | Table from [1] ## SHA-256 This section will introduce the SHA-256 algorithm itself. It is mainly based on the NIST description found at http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf ([1]) ### High-level Overview ![sha256_1.PNG](https://steemitimages.com/DQmSnVuxU45js5j1GwTVzRJG9rW23Sa9shUVnpjiTRiy6gZ/sha256_1.PNG) On a high level, SHA-256 works like this: 1. Take the input message and make sure its length (in bits) a multiple of 512 bits. This is done by adding a padding. 2. Take the passed message and parse it into `N` 512-bit blocks. 3. Iterate over all blocks from step 2: 1. Initialize the message schedule, a sequence of 64 32-bit words 2. Initialize eight working variables `a ... h` with the hash values `H0 ... H7` from the previous iteration (for the first iteration, `H0 ... H7` are initialized with constants). 3. Perform 64 iterations where working variables `a ... h` are rotated in a certain manner. This is the heart of the hash function. In this step, the message is inserted into the hash using lots of bitwise mixing. 4. Compute the new intermediate hash values `H0 ... H7` as `H0 = H0 + a`, `H1 = H1 + b` and so on. 4. Concatenate `H0 ... H7` as the message digest and return it. ### Step 1: Pad the input message ![sha256_2_padding.PNG](https://steemitimages.com/DQmYpHERjF2D5Qbipas3CsXoXfYBxT1tmhhqaEZdVnWmgRD/sha256_2_padding.PNG) Before beginning to process the message, we have to add a padding. This is to make sure the message length (in bits) is a multiple of 512. The reason is that the algorithm will process the input message block-by-block, each block having a length of 512 bit. SHA-2 uses a `10 * l` padding scheme, meaning a 1 bit is appended, followed by many zeros, followed by the length `l` of the input message. Padding of the message works as follows: - Append one bit `1` to the message - Fill up with zeros until the message is a multiple by 512 - Construct message length `l` as 64 bit number, and insert (not append) it to the end of the padding Example: - Message: "abc" = `0110 0001 0110 0010 0110 0011` - Add bit `1`: `0110 0001 0110 0010 0110 0011 1` - Add zeros so the message is a multiple of 512. In this case, the message length is 24 plus one for the bit we added. That means we have to append `512 - 1 - 24 = 487` zeros: `0110 0001 0110 0010 0110 0011 1 00 ... 487 zeros` - Now, insert the message length as 64-bit number. Message length is 24 decimal which is `0001 1000` binary. So our message will look like `0110 0001 0110 0010 0110 0011 1 00 ... 00 00 .. 0001 1000`. - Finally the padded message consists of: - The message input (24bit) - One bit `1` - 423 zero bits - 64 bit block with the message length - ... in total 512 bit A sample Java implementation of padding a message can be found at ([2]) in method `private byte[] padMsg(byte[] msg)` ### Step 2: Parse the message into 512-bit blocks Now that we have the message as multiple of 512, we need to cut it down into digestible chunks. This is rather straightforward, we take the message and split it into `N` 512-bit/64-byte blocks. Each block itself is split into sixteen 32-bit words. Reason is that each of those words will be addressed during further processing. A sample Java implementation of padding a message can be found at ([2]) in method `private byte [][] parseMsg(byte[] paddedMsg)` ### Step 3: Iterate over `N` blocks Perform N iterations, meaning one iteration for each block of the input message. In the following description, index `i` will be used as index for this iteration **Helper functions operations and constants** - An addition `+` is defined as addition modulo 2^32. Basically, this means that we cut off everything that wouldn't fit into a 32-bit word. Note that in the Java implementation at ([2]), regular addition is used. This is because we work with 32-bit integers here, so an addition is implicitly modulo 2^32. A number of helper functions are referenced below. Those are described in more detail in section "Helper Functions". Basically, they are used to create bitwise mixers, where multiple inputs form one output, and it's infeasible to deduct the inputs knowing only the output. - Sigma0 - Sigma1 - Ch - Maj - ROTR Two sets of constants are used: 1. Eight 32-bit words for the initial hash values of `H0 ... H7` 2. Sixty-four 32-bit words `K0 ... K63` used in the hash computation #### 3.1 : Prepare the message schedule ![sha256_3_schedule.PNG](https://steemitimages.com/DQmP39nYs8CN3R1z7FWMQRD419z7BaE4mWgLEeeRTb42h1o/sha256_3_schedule.PNG) The message schedule is a sequence of 64 32-bit words which will be used in a later stage. It is constructed as: ``` W[t] = M[i][t] for 0 <= t <= 15. M[i] is the message block that is currently processed in the top-level loop W[t] = Sigma1(W[t-2]) + W[t-7] + Sigma0(W[t-17]) + W[t-16] for 16 <= t <= 63. ``` A sample implementation of message schedule construction can be found in ([2]) in function `private void fillWords(byte[] block)` #### 3.2 : Initialize working variables In this step we use eight working variables `a ... h`. Those variables will be used to update the hash value in one step of the iteration. - In the first iteration, `a ... h` are initialized with constants (see section "Constants" or [1], section 5.3.3). - In each subsequent iteration, `a ... h` are initialized with the hash values `H0 ... H7` from the previous iteration For a code sample of T1, T2 computation, see `// 2. Initialize working variables with hash values of previous iteration` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2]. #### 3.3 Compute the working variables In this step, we perform 64 iterations `t = 0 ... 63`. In each iteration, we shift the values of the working variables to the right, so that `h = g`, `g = f`, `f = e` and so on. Additionally, we compute values of working variables `a` and `e` as follows: ``` e = d + T1 a = T1 + T2 ``` ![sha256_4_calc_1.PNG](https://steemitimages.com/DQmWXxKa13ihwt3iLRqFtsiV3RioRq85qzJJ4LDdATGL2z9/sha256_4_calc_1.PNG) T1 and T2 are temporary values which are computed as follows: ``` T1 = h + Sum1(e) + Ch(e, f, g) + K[t] + W[t] T2 = Sum0(a) + Maj(a, b, c) ``` T1 and T2 serve the purpose of mixing the message into the hash value. They are designed so that it's infeasible to conclude the inputs of T1, T2 if only the output is known. For a code sample of T1, T2 computation, see `// 3. Compute updated working variables` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2]. ![sha256_4_calc_2.PNG](https://steemitimages.com/DQmVdz3V4ZtoRzLon1REqHRXeDzHS1DpHzQr4r3vQvZWzSC/sha256_4_calc_2.PNG) ![sha256_4_calc_3.PNG](https://steemitimages.com/DQmbqng6DKCbqArNykW31gH9fGVMHejFapn5pDaJkAt4HeX/sha256_4_calc_3.PNG) Leading to a complete iteration that looks like: ``` T1 = h + Sum1(e) + Ch(e, f, g) + K[t] + W[t] T2 = Sum0(a) + Maj(a, b, c) h = g g = f f = e e = d + T1 d = c c = b b = a a = T1 + T2 ``` For a code sample, see `// 3. Compute updated working variables` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2]. #### 3.4 Update hash values After computing the working variables `a ... h`, the new intermediate hash values are calculated. This is done by a simple addition to of `a ... h` to the hash values of the previous iteration `H0 ... H7`, so that `H0 = a + H0, H1 = b + H1` and so on For a code sample, see `4. Update hash values` in `private byte[] digestMsg(byte[][] parsedMsg)` in ([2]). ### 4. Finalize the hash value After running one iteration for each message block, the hash values `H0 ... H7` are concatenated into one 256-bit hash value. For a code sample see the bottom of method `private byte[] digestMsg(byte[][] parsedMsg)` in ([2]). ## Helper functions A number of helper functions are employed in the hash calculation. This section adds further explanation and gives examples for better understanding. ### ROTR ... "Rotate Right" function A bitwise rotate right is a right shift where the overflow is added to the left side. In the sample below, we rotate the integer 124 right by 2 bits. int the result you see that the two least significant bits `01` of the input become the two most significant bits of the output. ``` /** * Sample for ROTR(2, 124) * * | is the bitwise OR operator * >>> is the bitwise UNSIGNED RIGHT SHIFT operator (meaning the output will always be filled with zeros from the left) * << is the bitwise LEFT SHIFT operator * * * n: 2 * x: 0000 0000 0000 0000 0000 0000 ‭0111 1101‬ * x >> 2: 0000 0000 0000 0000 0000 0000‭ ‭0001 1111 * x << (32-n): 0100 0000 0000 0000 0000 0000 0000 0000 * ---------------------------------------------------- *(x >>> n) | (x << (32-n)): * 0100 0000 0000 0000 0000 0000 0001 1111 */ private int ROTR(int n, int x) { return (x >>> n) | (x << (32-n)); } ``` ### Ch(x, y, z) ... "Choose" function Ch stands for "Choose". If bit at position n in input x == 1, then bit n in result is the same as bit n of input y. Otherwise, take bit n of input z. In the result below, you see the four most significant bits are `1111`. Thus, the value of input `y` is chosen for the output (`0000`). The opposite for the four least significant bits. ``` /** * Sample * & is the bitwise AND operator * ^ is the bitwise XOR operator * ~ is the bitwise INVERSE operator * * * x: 1111 0000 * y: 0000 0000 * z: 1111 1111 * ------------ * -> 0000 1111 * * x & y: * 1111 0000 * & 0000 0000 * = 0000 0000 * * ~x & z * 0000 1111 * & 1111 1111 * = 0000 1111 * * (x & y) ^ (~x & z ) * 0000 0000 * ^ 0000 1111 * = 0000 1111 * * @return */ private int Ch(int x, int y, int z) { return (x & y) ^ (~x & z); } ``` ### Maj(x, y, z) ... "Majority" function Maj stands for "Majority". If a minimum 2 of 3 bits at position n in inputs x, y, z are `1`, the majority of bits is considered `1`. Thus, bit at position n in result will be 1. Otherwise 0. ``` /** * Sample * & is the bitwise AND operator * ^ is the bitwise XOR operator * * x: 1101 1101 * y: 1011 0011 * z: 1101 0011 * ------------ * -> 1101 0011 * * x & y: * 1101 1101 * & 1011 0011 * = 1001 0001 * * x & z: * 1101 1101 * & 1101 0011 * = 1101 0001 * * y & z: * 1011 0011 * & 1101 0011 * = 1001 0011 * * (x & y) ^ (x & z ) ^ (y & z ) * 1001 0001 * ^ 1101 0001 * ^ 1001 0011 * = 1101 0011 */ private int Maj(int x, int y, int z) { return (x & y) ^ (x & z ) ^ (y & z ); } ``` ### Sum0(x) ``` /** * ^ is the bitwise XOR operator * * Sample for: *x = 0110 1010 0000 1001 1110 0110 0110 0111: * * ROTR(2, x): * 1101 1010 1000 0010 0111 1001 1001 1001 * * ROTR(13, x): * 0011 0011 0011 1011 0101 0000 0100 1111 * * ROTR(22, x): * 0010 0111 1001 1001 1001 1101 1010 1000 * * 1101 1010 1000 0010 0111 1001 1001 1001 * ^ 0011 0011 0011 1011 0101 0000 0100 1111 * ^ 0010 0111 1001 1001 1001 1101 1010 1000 * ----------------------------------------- * 1100 1110 0010 0000 1011 0100 0111 1110 * */ private int Sum0(int x) { int a = ROTR(2, x); int b = ROTR(13, x); int c = ROTR(22, x); int ret = a ^ b ^ c; return ret; } ``` ### Sum1(x) ``` /** * Sample for *x = 1111 1010 0010 1010 0100 0110 0000 0110: * * ROTR(6, x): * 0001 1011 1110 1000 1010 1001 0001 1000 * * ROTR(11, x): * 1100 0000 1101 1111 0100 0101 0100 1000 * * ROTR(25, x): * 0001 0101 0010 0011 0000 0011 0111 1101 * * 0001 1011 1110 1000 1010 1001 0001 1000 * ^ 1100 0000 1101 1111 0100 0101 0100 1000 * ^ 0001 0101 0010 0011 0000 0011 0111 1101 * ----------------------------------------- * 1100 1110 0001 0100 1110 1111 0010 1101 * * */ private int Sum1(int x) { int a = ROTR(6, x); int b = ROTR(11, x); int c = ROTR(25, x); int ret = a ^ b ^ c; return ret; } ``` ### Sigma0(x) ``` /** * ^ is the bitwise XOR operator * * Sample for *x = 0110 0010 0110 0011 0110 0100 0110 0101: * * ROTR(7, x): * 1100 1010 1100 0100 1100 0110 1100 1000 * * ROTR(18, x): * 1101 1001 0001 1001 0101 1000 1001 1000 * * x >>> 3: * 0000 1100 0100 1100 0110 1100 1000 1100 * * 1100 1010 1100 0100 1100 0110 1100 1000 * ^ 1101 1001 0001 1001 0101 1000 1001 1000 * ^ 0000 1100 0100 1100 0110 1100 1000 1100 * ----------------------------------------- * 0001 1111 1001 0001 1111 0010 1101 1100 * * */ private int Sigma0(int x) { int a = ROTR(7, x); int b = ROTR(18, x); int c = x >>> 3; int ret = a ^ b ^ c; return ret; } ``` ### Sigma1(x) ``` /** * ^ is the bitwise XOR operator * * Sample for *x = 1110 1011 1000 0000 0001 0010 1010 1101: * * ROTR(17, x): * 0000 1001 0101 0110 1111 0101 1100 0000 * * ROTR(19, x): * 0000 0010 0101 0101 1011 1101 0111 0000 * * x >>> 10: * 0000 0000 0011 1010 1110 0000 0000 0100 * * 0000 1001 0101 0110 1111 0101 1100 0000 * ^ 0000 0010 0101 0101 1011 1101 0111 0000 * ^ 0000 0000 0011 1010 1110 0000 0000 0100 * ----------------------------------------- * 0000 1011 0011 1001 1010 1000 1011 0100 * */ private int Sigma1(int x) { int a = ROTR(17, x); int b = ROTR(19, x); int c = x >>> 10; int ret = a ^ b ^ c; return ret; } ``` ## Constants ``` // Section 5.5.3 H = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }; ``` ``` K = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; ``` [1]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf [2]: https://github.com/f4tca7/Sha256/blob/master/src/org/toni/crypto/hashing/Sha256.java
json metadata{"tags":["cryptocurrency","bitcoin","crypto"],"image":["https://steemitimages.com/DQmSnVuxU45js5j1GwTVzRJG9rW23Sa9shUVnpjiTRiy6gZ/sha256_1.PNG","https://steemitimages.com/DQmYpHERjF2D5Qbipas3CsXoXfYBxT1tmhhqaEZdVnWmgRD/sha256_2_padding.PNG","https://steemitimages.com/DQmP39nYs8CN3R1z7FWMQRD419z7BaE4mWgLEeeRTb42h1o/sha256_3_schedule.PNG","https://steemitimages.com/DQmWXxKa13ihwt3iLRqFtsiV3RioRq85qzJJ4LDdATGL2z9/sha256_4_calc_1.PNG","https://steemitimages.com/DQmVdz3V4ZtoRzLon1REqHRXeDzHS1DpHzQr4r3vQvZWzSC/sha256_4_calc_2.PNG","https://steemitimages.com/DQmbqng6DKCbqArNykW31gH9fGVMHejFapn5pDaJkAt4HeX/sha256_4_calc_3.PNG"],"links":["https://github.com/f4tca7/Sha256","https://github.com/f4tca7/Sha256/blob/master/src/org/toni/crypto/hashing/Sha256.java","http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #15084059/Trx b044347a995f30764309df1000d76d5894affd7f
View Raw JSON Data
{
  "trx_id": "b044347a995f30764309df1000d76d5894affd7f",
  "block": 15084059,
  "trx_in_block": 19,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-09-01T11:43:06",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "cryptocurrency",
      "author": "f4tca7",
      "permlink": "introduction-to-the-sha-256-hash-function",
      "title": "Introduction to the SHA-256 hash function",
      "body": "# Introduction to the SHA-256 hash function\n\nThis article aims to give an introduction into the SHA-256 hash algorithm. It is accompanied by a Java-implementation at https://github.com/f4tca7/Sha256 ([2]). SHA-256 was chosen as it's one of the most commonly used (and state-of-the-art) hash functions in existence. Also, if someone understands SHA-256, understanding the other hash functions of the SHA-2 family is an easy task.\nThe main motivation for this article was to give readers interested in how SHA-2 hash functions work a more \"gentle\" description, compared to the very formal articles that I found were predominant (e.g. at Wikipedia or NIST).\nThis article is aimed at people with a working knowledge of Java or a similar programming language and who are somewhat familiar with bitwise operations. \n\n## Hash Functions\n- A hash function takes an arbitrary string as input. The input is commonly called \"message\".\n- It produces an output that is FIXED in length. For SHA-256 the output is always 256 bit long. The output is commonly called \"Message Digest\" or \"Hash Value\" or just \"Hash\". Below, hash function outputs will be called `H(x)`\n- Its algorithm finishes in a reasonable amount of time\n- It's useful to compare two messages for equality, even if we don't know the messages themselves. Meaning that we can say if ` H(x) = H(y), also message x = message y `\n\n## Security Properties Of Hash Functions\nThe below properties aim to give an idea of what's required for a secure cryptographic hash function. It's not intended to be a comprehensive list.\n- Hiding property (or Pre-image resistance): Just knowing `H(x)`, you cannot deduct `x`. However, this only holds up if message `x` is not chosen from a \"likely\" set of values. \"Likely\" here means that x cannot be realistically guessed by an attacker.\n- Collision Free: A collision occurs if for two different messages the same hash value is calculated. \"Collision free\" means that it is infeasible to find two messages `x` and `y`, with `x != y`, so that `H(x) = H(y)`. Meaning it should be near impossible that two different messages result in the same hash value. Now, of course collisions will always exist because the number of possible inputs (an input can be of any size) is far larger than the number of possible outputs (an output is always of a fixed length). However, for SHA-2 hash functions, the effort require to find those collisions is enormous.\n- Puzzle friendliness, especially relevant for cryptocurrencies: \n  - Suppose we know two values `x` and `y`. `x` is part of the hash function input message, `y` is the hash function output. \n  - A hash function is puzzle friendly if it is infeasible to find a third value `k`, so that H(k | x ) = y. `k | x` means just concatenation of `k` and `x` (e.g. if `k = 1100` and `x = 0011` then `k | x = 1100 0011`). \n  - We assume `k` to be a random value from a very spread-out set of values.\n  - This property is e.g. used to construct the Bitcoin proof-of-work mining puzzle. Here a miner has to iterate over `k` (`x` is given in this scenario, it is a hash of the block that's being mined), and tries to find a value `y` that is in a certain range. For bitcoin concretely, `y` needs to be smaller than a specific value determined roughly every two weeks by the Bitcoin software.\n\n\n## SHA-2\n- SHA stands for \"Secure Hash Algorithm\"\n- SHA-2 is a family of cryptographic hash functions\n- All members of the SHA-2 family share the same general approach and algorithm, but differ in sizes and constraints of inputs, outputs and working variables. For example, when working on a 32-bit architecture, it might make more sense to use SHA-256 instead of SHA-512, because SHA-256 works with 32-bit words, whereas SHA-512 works with 64-bit words.\n\n\n### Members of the SHA-2 family are: \n\n| Algorithm   | Message Size (bits) | Block Size (bits) | Word Size (bits) | Message Digest Size (bits) |\n|-------------|---------------------|-------------------|------------------|----------------------------|\n| SHA-224     | < 2^64              | 512               | 32               | 224                        |\n| SHA-256     | < 2^64              | 512               | 32               | 256                        |\n| SHA-384     | < 2^128             | 1024              | 64               | 384                        |\n| SHA-512     | < 2^128             | 1024              | 64               | 512                        |\n| SHA-512/224 | < 2^128             | 1024              | 64               | 224                        |\n| SHA-512/256 | < 2^128             | 1024              | 64               | 256                        |\n\nTable from [1]\n\n## SHA-256\n\nThis section will introduce the SHA-256 algorithm itself. It is mainly based on the NIST description found at \nhttp://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf ([1])\n\n### High-level Overview\n\n![sha256_1.PNG](https://steemitimages.com/DQmSnVuxU45js5j1GwTVzRJG9rW23Sa9shUVnpjiTRiy6gZ/sha256_1.PNG)\n\nOn a high level, SHA-256 works like this:\n\n1. Take the input message and make sure its length (in bits) a multiple of 512 bits. This is done by adding a padding.\n2. Take the passed message and parse it into `N` 512-bit blocks. \n3. Iterate over all blocks from step 2:\n   1. Initialize the message schedule, a sequence of 64 32-bit words\n   2. Initialize eight working variables `a ... h` with the hash values `H0 ... H7` from the previous iteration (for the first iteration, `H0 ... H7` are initialized with constants).\n   3. Perform 64 iterations where working variables `a ... h` are rotated in a certain manner. This is the heart of the hash function. In this step, the message is inserted into the hash using lots of bitwise mixing.\n   4. Compute the new intermediate hash values `H0 ... H7` as `H0 = H0 + a`, `H1 = H1 + b` and so on.\n4. Concatenate `H0 ... H7` as the message digest and return it.\n\n### Step 1: Pad the input message\n\n![sha256_2_padding.PNG](https://steemitimages.com/DQmYpHERjF2D5Qbipas3CsXoXfYBxT1tmhhqaEZdVnWmgRD/sha256_2_padding.PNG)\n\nBefore beginning to process the message, we have to add a padding. This is to make sure the message length (in bits) is a multiple of 512. The reason is that the algorithm will process the input message block-by-block, each block having a length of 512 bit.\n\nSHA-2 uses a `10 * l` padding scheme, meaning a 1 bit is appended, followed by many zeros, followed by the length `l` of the input message.\n\nPadding of the message works as follows:\n- Append one bit `1` to the message\n- Fill up with zeros until the message is a multiple by 512\n- Construct message length `l` as 64 bit number, and insert (not append) it to the end of the padding\n\nExample:\n- Message: \"abc\" = `0110 0001 0110 0010 0110 0011`\n- Add bit `1`: `0110 0001 0110 0010 0110 0011 1`\n- Add zeros so the message is a multiple of 512. In this case, the message length is 24 plus one for the bit we added. That means we have to append `512 - 1 - 24 = 487` zeros: `0110 0001 0110 0010 0110 0011 1 00 ... 487 zeros` \n- Now, insert the message length as 64-bit number. Message length is 24 decimal which is `0001 1000` binary. So our message will look like `0110 0001 0110 0010 0110 0011 1 00 ... 00 00 .. 0001 1000`.\n- Finally the padded message consists of:\n  - The message input (24bit)\n  - One bit `1`\n  - 423 zero bits\n  - 64 bit block with the message length\n  - ... in total 512 bit\n\nA sample Java implementation of padding a message can be found at ([2]) in method `private byte[] padMsg(byte[] msg)`\n\n\n### Step 2: Parse the message into 512-bit blocks\n\nNow that we have the message as multiple of 512, we need to cut it down into digestible chunks. \nThis is rather straightforward, we take the message and split it into `N` 512-bit/64-byte blocks.\nEach block itself is split into sixteen 32-bit words. Reason is that each of those words will be addressed during further processing.\n\nA sample Java implementation of padding a message can be found at ([2]) in method `private byte [][] parseMsg(byte[] paddedMsg)`\n\n### Step 3: Iterate over `N` blocks\n\nPerform N iterations, meaning one iteration for each block of the input message.\nIn the following description, index `i` will be used as index for this iteration\n\n**Helper functions operations and constants**\n\n- An addition `+` is defined as addition modulo 2^32. Basically, this means that we cut off everything that wouldn't fit into a 32-bit word. Note that in the Java implementation at ([2]), regular addition is used. This is because we work with 32-bit integers here, so an addition is implicitly modulo 2^32.\n\nA number of helper functions are referenced below. Those are described in more detail in section \"Helper Functions\". Basically, they are used to create bitwise mixers, where multiple inputs form one output, and it's infeasible to deduct the inputs knowing only the output.\n- Sigma0\n- Sigma1\n- Ch\n- Maj\n- ROTR\n\nTwo sets of constants are used:\n1. Eight 32-bit words for the initial hash values of `H0 ... H7`\n2. Sixty-four 32-bit words `K0 ... K63` used in the hash computation\n\n#### 3.1 : Prepare the message schedule\n\n![sha256_3_schedule.PNG](https://steemitimages.com/DQmP39nYs8CN3R1z7FWMQRD419z7BaE4mWgLEeeRTb42h1o/sha256_3_schedule.PNG)\n\nThe message schedule is a sequence of 64 32-bit words which will be used in a later stage. It is constructed as:\n```\nW[t] = M[i][t]   for 0 <= t <= 15. M[i] is the message block that is currently processed in the top-level loop\nW[t] = Sigma1(W[t-2]) + W[t-7] + Sigma0(W[t-17]) + W[t-16] for 16 <= t <= 63.\n```\n\nA sample implementation of message schedule construction can be found in ([2]) in function `private void fillWords(byte[] block)`  \n\n#### 3.2 : Initialize working variables\n\nIn this step we use eight working variables `a ... h`. Those variables will be used to update the hash value in one step of the iteration.\n\n- In the first iteration, `a ... h` are initialized with constants (see section \"Constants\" or [1], section 5.3.3).\n- In each subsequent iteration, `a ... h` are initialized with the hash values `H0 ... H7` from the previous iteration\n\nFor a code sample of T1, T2 computation, see `// 2. Initialize working variables with hash values of previous iteration` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2].\n\n#### 3.3 Compute the working variables\n\nIn this step, we perform 64 iterations `t = 0 ... 63`.\n\nIn each iteration, we shift the values of the working variables to the right, so that `h = g`, `g = f`, `f = e` and so on. \n\n\nAdditionally, we compute values of working variables `a` and `e` as follows:\n\n```\ne = d + T1\na = T1 + T2\n```\n\n![sha256_4_calc_1.PNG](https://steemitimages.com/DQmWXxKa13ihwt3iLRqFtsiV3RioRq85qzJJ4LDdATGL2z9/sha256_4_calc_1.PNG)\n\nT1 and T2 are temporary values which are computed as follows:\n```\nT1 = h + Sum1(e) + Ch(e, f, g) + K[t] + W[t]\nT2 = Sum0(a) + Maj(a, b, c) \n```\nT1 and T2 serve the purpose of mixing the message into the hash value. They are designed so that it's infeasible to conclude the inputs of T1, T2 if only the output is known. \nFor a code sample of T1, T2 computation, see `// 3. Compute updated working variables` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2].\n\n![sha256_4_calc_2.PNG](https://steemitimages.com/DQmVdz3V4ZtoRzLon1REqHRXeDzHS1DpHzQr4r3vQvZWzSC/sha256_4_calc_2.PNG)\n\n![sha256_4_calc_3.PNG](https://steemitimages.com/DQmbqng6DKCbqArNykW31gH9fGVMHejFapn5pDaJkAt4HeX/sha256_4_calc_3.PNG)\n\n\nLeading to a complete iteration that looks like:\n```\nT1 = h + Sum1(e) + Ch(e, f, g) + K[t] + W[t]\nT2 = Sum0(a) + Maj(a, b, c) \nh = g\ng = f\nf = e\ne = d + T1\nd = c\nc = b\nb = a\na = T1 + T2\n```\nFor a code sample, see `// 3. Compute updated working variables` in `private byte[] digestMsg(byte[][] parsedMsg)` in [2].\n\n\n#### 3.4 Update hash values\n\nAfter computing the working variables `a ... h`, the new intermediate hash values are calculated. This is done by a simple addition to of `a ... h` to the hash values of the previous iteration `H0 ... H7`, so that `H0 = a + H0, H1 = b + H1` and so on\n\nFor a code sample, see `4. Update hash values` in `private byte[] digestMsg(byte[][] parsedMsg)` in ([2]).\n\n\n### 4. Finalize the hash value\n\nAfter running one iteration for each message block, the hash values `H0 ... H7` are concatenated into one 256-bit hash value.\nFor a code sample see the bottom of method `private byte[] digestMsg(byte[][] parsedMsg)` in ([2]).\n\n## Helper functions\n\nA number of helper functions are employed in the hash calculation. This section adds further explanation and gives examples for better understanding.\n\n### ROTR ... \"Rotate Right\" function\n\nA bitwise rotate right is a right shift where the overflow is added to the left side. In the sample below, we rotate the integer 124 right by 2 bits. int the result you see that the two least significant bits `01` of the input become the two most significant bits of the output.\n```\n/**\n* Sample for ROTR(2, 124)\n*\n* | is the bitwise OR operator\n* >>> is the bitwise UNSIGNED RIGHT SHIFT operator (meaning the output will always be filled with zeros from the left)\n* << is the bitwise LEFT SHIFT operator\n*\n*\n* n: 2\n* x:           0000 0000 0000 0000 0000 0000 ‭0111 1101‬\n* x >> 2:      0000 0000 0000 0000 0000 0000‭ ‭0001 1111 \n* x << (32-n): 0100 0000 0000 0000 0000 0000 0000 0000\n* ----------------------------------------------------\n*(x >>> n) | (x << (32-n)):\n*              0100 0000 0000 0000 0000 0000 0001 1111\n*/\nprivate int ROTR(int n, int x) {\n  return (x >>> n) | (x << (32-n));\n}\t   \n```   \n\n### Ch(x, y, z) ... \"Choose\" function\nCh stands for \"Choose\". If bit at position n in input x == 1, then bit n in result is the same as bit n of input y. Otherwise, take bit n of input z.\n\nIn the result below, you see the four most significant bits are `1111`. Thus, the value of input `y` is chosen for the output (`0000`). The opposite for the four least significant bits.\n\n```\n/** \n* Sample\n* & is the bitwise AND operator\n* ^ is the bitwise XOR operator\n* ~ is the bitwise INVERSE operator\n*\n*\n* x: 1111 0000\n* y: 0000 0000\n* z: 1111 1111\n* ------------\n* -> 0000 1111\n* \n*   x & y:\n*   1111 0000\n* & 0000 0000\n* = 0000 0000\n* \n*   ~x & z\n*   0000 1111\n* & 1111 1111\n* = 0000 1111\n* \n*   (x & y) ^ (~x & z )\n*   0000 0000\n* ^ 0000 1111\n* = 0000 1111\n*      \n* @return \n*/\nprivate int Ch(int x, int y, int z) {\n  return (x & y) ^ (~x & z);\t\t \n}\n```\n\n### Maj(x, y, z) ... \"Majority\" function\n\nMaj stands for \"Majority\". If a minimum 2 of 3 bits at position n in inputs x, y, z are `1`, the majority of bits is considered `1`. Thus, bit at position n in result will be 1. Otherwise 0.\n\n```\n/**\n* Sample \n* & is the bitwise AND operator\n* ^ is the bitwise XOR operator\n* \n* x: 1101 1101\n* y: 1011 0011\n* z: 1101 0011\n* ------------ \n* -> 1101 0011\n*  \n*   x & y:\n*   1101 1101\n* & 1011 0011\n* = 1001 0001 \n*  \n*   x & z:\n*   1101 1101\n* & 1101 0011 \n* = 1101 0001\n* \n*   y & z:\n*   1011 0011\n* & 1101 0011 \n* = 1001 0011   \n* \n*   (x & y) ^ (x & z ) ^ (y & z )\n*   1001 0001\n* ^ 1101 0001\n* ^ 1001 0011\n* = 1101 0011 \n*/\t\nprivate int Maj(int x, int y, int z) {\n  return (x & y) ^ (x & z ) ^ (y & z );\n}\t\n```\n\n### Sum0(x)\n\n```\n/**\n* ^ is the bitwise XOR operator\n*\n* Sample for:\n*x = 0110 1010 0000 1001 1110 0110 0110 0111:\n* \n*    ROTR(2, x):\n*    1101 1010 1000 0010 0111 1001 1001 1001\n* \n*    ROTR(13, x):\n*    0011 0011 0011 1011 0101 0000 0100 1111\n* \n*    ROTR(22, x):\n*    0010 0111 1001 1001 1001 1101 1010 1000\n* \n*    1101 1010 1000 0010 0111 1001 1001 1001\n*  ^ 0011 0011 0011 1011 0101 0000 0100 1111\n*  ^ 0010 0111 1001 1001 1001 1101 1010 1000\n*  -----------------------------------------  \n*    1100 1110 0010 0000 1011 0100 0111 1110\n*    \n*/\nprivate int Sum0(int x) {\n  int a = ROTR(2, x);\n  int b = ROTR(13, x);\n  int c = ROTR(22, x);\n  int ret = a ^ b ^ c;\n    return ret;\n}\n```\n\n### Sum1(x)\n\n```\n/**\n* Sample for \n*x = 1111 1010 0010 1010 0100 0110 0000 0110:\n* \n*    ROTR(6, x):\n*    0001 1011 1110 1000 1010 1001 0001 1000\n*    \n*    ROTR(11, x):\n*    1100 0000 1101 1111 0100 0101 0100 1000\n*    \n*    ROTR(25, x):\n*    0001 0101 0010 0011 0000 0011 0111 1101\n*    \n*     0001 1011 1110 1000 1010 1001 0001 1000\n*   ^ 1100 0000 1101 1111 0100 0101 0100 1000 \n*   ^ 0001 0101 0010 0011 0000 0011 0111 1101 \n*   -----------------------------------------   \n*     1100 1110 0001 0100 1110 1111 0010 1101\n* \n* \n*/\nprivate int Sum1(int x) {\n  int a = ROTR(6, x);\n  int b = ROTR(11, x);\n  int c = ROTR(25, x);\n  int ret = a ^ b ^ c;\n  return ret;\n}  \n```\n\n\n### Sigma0(x)\n\n```\n/**\n* ^ is the bitwise XOR operator\n*\n* Sample for \n*x = 0110 0010 0110 0011 0110 0100 0110 0101:\n* \n*    ROTR(7, x):\n*    1100 1010 1100 0100 1100 0110 1100 1000\n*    \n*    ROTR(18, x):\n*    1101 1001 0001 1001 0101 1000 1001 1000\n*    \n*    x >>> 3:\n*    0000 1100 0100 1100 0110 1100 1000 1100\n*    \n*     1100 1010 1100 0100 1100 0110 1100 1000\n*   ^ 1101 1001 0001 1001 0101 1000 1001 1000 \n*   ^ 0000 1100 0100 1100 0110 1100 1000 1100 \n*   -----------------------------------------   \n*     0001 1111 1001 0001 1111 0010 1101 1100\n* \n* \n*/\nprivate int Sigma0(int x) {\n  int a = ROTR(7, x);\n  int b = ROTR(18, x);\n  int c = x >>> 3;        \n  int ret = a ^ b ^ c;\n  return ret;\n} \n```    \n\n### Sigma1(x)\n\n```\n/**\n* ^ is the bitwise XOR operator\n*\n* Sample for \n*x = 1110 1011 1000 0000 0001 0010 1010 1101:\n* \n*    ROTR(17, x):\n*    0000 1001 0101 0110 1111 0101 1100 0000\n*    \n*    ROTR(19, x):\n*    0000 0010 0101 0101 1011 1101 0111 0000\n*    \n*    x >>> 10:\n*    0000 0000 0011 1010 1110 0000 0000 0100\n*    \n*     0000 1001 0101 0110 1111 0101 1100 0000\n*   ^ 0000 0010 0101 0101 1011 1101 0111 0000 \n*   ^ 0000 0000 0011 1010 1110 0000 0000 0100 \n*   -----------------------------------------   \n*     0000 1011 0011 1001 1010 1000 1011 0100\n* \t   \n*/    \nprivate int Sigma1(int x) {\n  int a = ROTR(17, x);\n  int b = ROTR(19, x);\n  int c = x >>> 10;        \n  int ret = a ^ b ^ c;\n  return ret;\n}   \n```    \n\n## Constants\n```\n// Section 5.5.3\nH = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 };\n```\t\n```\nK = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n      0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n      0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n      0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n      0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n      0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n      0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n      0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 };\n```\n\n\n[1]: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\n\n[2]: https://github.com/f4tca7/Sha256/blob/master/src/org/toni/crypto/hashing/Sha256.java",
      "json_metadata": "{\"tags\":[\"cryptocurrency\",\"bitcoin\",\"crypto\"],\"image\":[\"https://steemitimages.com/DQmSnVuxU45js5j1GwTVzRJG9rW23Sa9shUVnpjiTRiy6gZ/sha256_1.PNG\",\"https://steemitimages.com/DQmYpHERjF2D5Qbipas3CsXoXfYBxT1tmhhqaEZdVnWmgRD/sha256_2_padding.PNG\",\"https://steemitimages.com/DQmP39nYs8CN3R1z7FWMQRD419z7BaE4mWgLEeeRTb42h1o/sha256_3_schedule.PNG\",\"https://steemitimages.com/DQmWXxKa13ihwt3iLRqFtsiV3RioRq85qzJJ4LDdATGL2z9/sha256_4_calc_1.PNG\",\"https://steemitimages.com/DQmVdz3V4ZtoRzLon1REqHRXeDzHS1DpHzQr4r3vQvZWzSC/sha256_4_calc_2.PNG\",\"https://steemitimages.com/DQmbqng6DKCbqArNykW31gH9fGVMHejFapn5pDaJkAt4HeX/sha256_4_calc_3.PNG\"],\"links\":[\"https://github.com/f4tca7/Sha256\",\"https://github.com/f4tca7/Sha256/blob/master/src/org/toni/crypto/hashing/Sha256.java\",\"http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
steemcreated a new account: @f4tca7
2017/08/08 02:40:33
fee0.500 STEEM
delegation57000.000000 VESTS
creatorsteem
new account namef4tca7
owner{"weight_threshold":1,"account_auths":[],"key_auths":[["STM5Eb2ZhkB1VdW4wHg8A9uYbtuRsj67psXdvpDNknj4xYJJi3FDP",1]]}
active{"weight_threshold":1,"account_auths":[],"key_auths":[["STM81CAfKj5U2u3XQK59dM3rVfTxwS8tWYPv7QUu4PWf7yWMycm6a",1]]}
posting{"weight_threshold":1,"account_auths":[],"key_auths":[["STM6MnGLfJ5fMkSG64HMR481w8ZvJwXKBUy3zR5NsJG7RK8dAQqoH",1]]}
memo keySTM4uYg4cSN3xxEGvnWyunon8nUpRsA5aGto42FudVLdL9rBh45xT
json metadata
extensions[]
Transaction InfoBlock #14383203/Trx 7deb2d490dbdddac9dcc0b5cff52c20a3c4a41c6
View Raw JSON Data
{
  "trx_id": "7deb2d490dbdddac9dcc0b5cff52c20a3c4a41c6",
  "block": 14383203,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2017-08-08T02:40:33",
  "op": [
    "account_create_with_delegation",
    {
      "fee": "0.500 STEEM",
      "delegation": "57000.000000 VESTS",
      "creator": "steem",
      "new_account_name": "f4tca7",
      "owner": {
        "weight_threshold": 1,
        "account_auths": [],
        "key_auths": [
          [
            "STM5Eb2ZhkB1VdW4wHg8A9uYbtuRsj67psXdvpDNknj4xYJJi3FDP",
            1
          ]
        ]
      },
      "active": {
        "weight_threshold": 1,
        "account_auths": [],
        "key_auths": [
          [
            "STM81CAfKj5U2u3XQK59dM3rVfTxwS8tWYPv7QUu4PWf7yWMycm6a",
            1
          ]
        ]
      },
      "posting": {
        "weight_threshold": 1,
        "account_auths": [],
        "key_auths": [
          [
            "STM6MnGLfJ5fMkSG64HMR481w8ZvJwXKBUy3zR5NsJG7RK8dAQqoH",
            1
          ]
        ]
      },
      "memo_key": "STM4uYg4cSN3xxEGvnWyunon8nUpRsA5aGto42FudVLdL9rBh45xT",
      "json_metadata": "",
      "extensions": []
    }
  ]
}

Account Metadata

POSTING JSON METADATA
None
JSON METADATA
None
{
  "posting_json_metadata": {},
  "json_metadata": {}
}

Auth Keys

Owner
Single Signature
Public Keys
STM5Eb2ZhkB1VdW4wHg8A9uYbtuRsj67psXdvpDNknj4xYJJi3FDP1/1
Active
Single Signature
Public Keys
STM81CAfKj5U2u3XQK59dM3rVfTxwS8tWYPv7QUu4PWf7yWMycm6a1/1
Posting
Single Signature
Public Keys
STM6MnGLfJ5fMkSG64HMR481w8ZvJwXKBUy3zR5NsJG7RK8dAQqoH1/1
Memo
STM4uYg4cSN3xxEGvnWyunon8nUpRsA5aGto42FudVLdL9rBh45xT
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM5Eb2ZhkB1VdW4wHg8A9uYbtuRsj67psXdvpDNknj4xYJJi3FDP",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM81CAfKj5U2u3XQK59dM3rVfTxwS8tWYPv7QUu4PWf7yWMycm6a",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM6MnGLfJ5fMkSG64HMR481w8ZvJwXKBUy3zR5NsJG7RK8dAQqoH",
        1
      ]
    ]
  },
  "memo": "STM4uYg4cSN3xxEGvnWyunon8nUpRsA5aGto42FudVLdL9rBh45xT"
}

Witness Votes

0 / 30
No active witness votes.
[]