VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.007USD
STEEM
0.000STEEM
SBD
0.000SBD
Effective Power
5.007SP
├── Own SP
0.125SP
└── Incoming DelegationsDeleg
+4.882SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.125SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.882SP | SP |
| Effective Power | 5.007SP | SP |
| Reward SP (pending) | 0.000SP | 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 | 0.000SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "203.557164 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7940.102642 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | rajita |
| id | 975711 |
| rank | 279,486 |
| reputation | 0 |
| created | 2018-05-09T22:11:39 |
| recovery_account | steem |
| proxy | None |
| post_count | 1 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-05-09T22:24:57 |
| last_root_post | 2018-05-09T22:24:57 |
| last_vote_time | 1970-01-01T00:00:00 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 203.557164 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7940.102642 VESTS |
| reward_vesting_balance | 0.000000 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 | 1970-01-01T00:00:00 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM5RBMRwVSoL7saWCzzctPFsGxDyfojb2hcPL2gxbDMSxTCGktL4",
1
]
],
"weight_threshold": 1
},
"balance": "0.000 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2018-05-09T22:11:39",
"curation_rewards": 0,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779082068
},
"guest_bloggers": [],
"id": 975711,
"json_metadata": "{}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "1970-01-01T00:00:00",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2018-05-09T22:24:57",
"last_root_post": "2018-05-09T22:24:57",
"last_vote_time": "1970-01-01T00:00:00",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6AkYBYwHR8AkBcquDH3UZxDLuPvoW1PZC7kR1SqS7i3uqJ1ZaE",
"mined": false,
"name": "rajita",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM5k3bVfCuiNGAKfzqkJ5VU2VE3LLLLHRAXt9fNMYxxdxk4rJb5b",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 1,
"post_history": [],
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8CLS1GDf4YZKoX1BEwYRCWiFi9VLXwysecnDsnb9VrDP9KPD4v",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "",
"posting_rewards": 0,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "7940.102642 VESTS",
"recovery_account": "steem",
"reputation": 0,
"reset_account": "null",
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_steem": "0.000 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": "1970-01-01T00:00:00",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "203.557164 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779082068
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 279486
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 05:27:48
2026/05/18 05:27:48
| delegatee | rajita |
| delegator | steem |
| vesting shares | 7940.102642 VESTS |
| Transaction Info | Block #106149671/Trx 909d6e4733ba48ed064ca4ea95f01e1b838109ac |
View Raw JSON Data
{
"block": 106149671,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "7940.102642 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-18T05:27:48",
"trx_id": "909d6e4733ba48ed064ca4ea95f01e1b838109ac",
"trx_in_block": 0,
"virtual_op": 0
}2026/05/13 01:00:39
2026/05/13 01:00:39
| delegatee | rajita |
| delegator | steem |
| vesting shares | 5227.892237 VESTS |
| Transaction Info | Block #106001058/Trx 0ac62fb3302e19528a3f4692e76ff7d1376d03b0 |
View Raw JSON Data
{
"block": 106001058,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "5227.892237 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-13T01:00:39",
"trx_id": "0ac62fb3302e19528a3f4692e76ff7d1376d03b0",
"trx_in_block": 1,
"virtual_op": 0
}2026/04/26 04:40:48
2026/04/26 04:40:48
| delegatee | rajita |
| delegator | steem |
| vesting shares | 7952.618398 VESTS |
| Transaction Info | Block #105517181/Trx 9fba04869bcb79d5a7356d54ee0f034908d3e8ef |
View Raw JSON Data
{
"block": 105517181,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "7952.618398 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-04-26T04:40:48",
"trx_id": "9fba04869bcb79d5a7356d54ee0f034908d3e8ef",
"trx_in_block": 0,
"virtual_op": 0
}2026/01/23 21:48:45
2026/01/23 21:48:45
| delegatee | rajita |
| delegator | steem |
| vesting shares | 5269.439056 VESTS |
| Transaction Info | Block #102868597/Trx 7bb7e4d632bf379e81c4cbfd8b237a9b7b4725b3 |
View Raw JSON Data
{
"block": 102868597,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "5269.439056 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-01-23T21:48:45",
"trx_id": "7bb7e4d632bf379e81c4cbfd8b237a9b7b4725b3",
"trx_in_block": 0,
"virtual_op": 0
}2024/12/17 16:59:30
2024/12/17 16:59:30
| delegatee | rajita |
| delegator | steem |
| vesting shares | 5433.658253 VESTS |
| Transaction Info | Block #91314825/Trx 11f497680c773fc9a8aa2c29f458a1d46c635378 |
View Raw JSON Data
{
"block": 91314825,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "5433.658253 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2024-12-17T16:59:30",
"trx_id": "11f497680c773fc9a8aa2c29f458a1d46c635378",
"trx_in_block": 1,
"virtual_op": 0
}2023/11/14 08:41:06
2023/11/14 08:41:06
| delegatee | rajita |
| delegator | steem |
| vesting shares | 5602.791785 VESTS |
| Transaction Info | Block #79868985/Trx a23ae6000a22b834574ec179469b08adf7c5c45b |
View Raw JSON Data
{
"block": 79868985,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "5602.791785 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-11-14T08:41:06",
"trx_id": "a23ae6000a22b834574ec179469b08adf7c5c45b",
"trx_in_block": 7,
"virtual_op": 0
}2023/09/22 09:24:51
2023/09/22 09:24:51
| delegatee | rajita |
| delegator | steem |
| vesting shares | 8539.700571 VESTS |
| Transaction Info | Block #78361695/Trx 02c1dab48ebc977c866a177ff11d8e4dde8dbf67 |
View Raw JSON Data
{
"block": 78361695,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "8539.700571 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-09-22T09:24:51",
"trx_id": "02c1dab48ebc977c866a177ff11d8e4dde8dbf67",
"trx_in_block": 0,
"virtual_op": 0
}2022/11/03 16:59:54
2022/11/03 16:59:54
| delegatee | rajita |
| delegator | steem |
| vesting shares | 8761.752009 VESTS |
| Transaction Info | Block #69119584/Trx 80b5556270c141394d43e03ac3fcdfc3e0224531 |
View Raw JSON Data
{
"block": 69119584,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "8761.752009 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-11-03T16:59:54",
"trx_id": "80b5556270c141394d43e03ac3fcdfc3e0224531",
"trx_in_block": 4,
"virtual_op": 0
}2022/01/17 22:16:54
2022/01/17 22:16:54
| delegatee | rajita |
| delegator | steem |
| vesting shares | 8981.859610 VESTS |
| Transaction Info | Block #60822933/Trx fd3c5b63ec11b525ab1b723546e22f9546104b3c |
View Raw JSON Data
{
"block": 60822933,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "8981.859610 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-01-17T22:16:54",
"trx_id": "fd3c5b63ec11b525ab1b723546e22f9546104b3c",
"trx_in_block": 14,
"virtual_op": 0
}2021/06/14 05:30:00
2021/06/14 05:30:00
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9166.053898 VESTS |
| Transaction Info | Block #54613306/Trx f334b52bdf14e5d9e0d50a240f50890334920c16 |
View Raw JSON Data
{
"block": 54613306,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9166.053898 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2021-06-14T05:30:00",
"trx_id": "f334b52bdf14e5d9e0d50a240f50890334920c16",
"trx_in_block": 13,
"virtual_op": 0
}2020/12/11 15:42:54
2020/12/11 15:42:54
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9353.475872 VESTS |
| Transaction Info | Block #49360592/Trx 326848dc2179b51a4cdebe881aa4ea43c64ed8fd |
View Raw JSON Data
{
"block": 49360592,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9353.475872 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-11T15:42:54",
"trx_id": "326848dc2179b51a4cdebe881aa4ea43c64ed8fd",
"trx_in_block": 5,
"virtual_op": 0
}2020/12/06 09:18:57
2020/12/06 09:18:57
| delegatee | rajita |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49212121/Trx 43fdd7b04dc8fb1042099d8a3940d5bf9b7c6432 |
View Raw JSON Data
{
"block": 49212121,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "1912.543513 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-06T09:18:57",
"trx_id": "43fdd7b04dc8fb1042099d8a3940d5bf9b7c6432",
"trx_in_block": 1,
"virtual_op": 0
}2020/12/05 19:20:51
2020/12/05 19:20:51
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9359.683726 VESTS |
| Transaction Info | Block #49195676/Trx 6f578b02bdeb83e5f4ffdaaea0a5db42bd64e734 |
View Raw JSON Data
{
"block": 49195676,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9359.683726 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-05T19:20:51",
"trx_id": "6f578b02bdeb83e5f4ffdaaea0a5db42bd64e734",
"trx_in_block": 11,
"virtual_op": 0
}2020/11/03 01:08:27
2020/11/03 01:08:27
| delegatee | rajita |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48268992/Trx b711813e7c76cffaffc779be95ed5c6d75537b73 |
View Raw JSON Data
{
"block": 48268992,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "1920.017158 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-11-03T01:08:27",
"trx_id": "b711813e7c76cffaffc779be95ed5c6d75537b73",
"trx_in_block": 5,
"virtual_op": 0
}2020/05/09 10:21:15
2020/05/09 10:21:15
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9562.489085 VESTS |
| Transaction Info | Block #43222437/Trx af8e318ec4c31858b33273f042c771a91979b60c |
View Raw JSON Data
{
"block": 43222437,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9562.489085 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-09T10:21:15",
"trx_id": "af8e318ec4c31858b33273f042c771a91979b60c",
"trx_in_block": 0,
"virtual_op": 0
}2020/05/08 14:38:51
2020/05/08 14:38:51
| delegatee | rajita |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43199353/Trx 41b1899acffae5820a371698622e350eec2b7834 |
View Raw JSON Data
{
"block": 43199353,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "1953.311140 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T14:38:51",
"trx_id": "41b1899acffae5820a371698622e350eec2b7834",
"trx_in_block": 20,
"virtual_op": 0
}2019/07/26 15:27:30
2019/07/26 15:27:30
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9727.178959 VESTS |
| Transaction Info | Block #35003198/Trx d78272eee06d597f7a7290a4a6502b3bcbccfa79 |
View Raw JSON Data
{
"block": 35003198,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9727.178959 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-07-26T15:27:30",
"trx_id": "d78272eee06d597f7a7290a4a6502b3bcbccfa79",
"trx_in_block": 37,
"virtual_op": 0
}2019/05/09 23:23:18
2019/05/09 23:23:18
| author | steemitboard |
| body | Congratulations @rajita! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@rajita/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@rajita) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=rajita)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05">SteemitBoard - Witness Update</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | rajita |
| parent permlink | best-practices-for-building-blockchain-solutions-with-solidity-part-i |
| permlink | steemitboard-notify-rajita-20190509t232317000z |
| title | |
| Transaction Info | Block #32769295/Trx ddd2b83fcd83254416e84b3a2191786966a4549c |
View Raw JSON Data
{
"block": 32769295,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @rajita! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@rajita/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@rajita) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=rajita)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05\"><img src=\"https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05\">SteemitBoard - Witness Update</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "rajita",
"parent_permlink": "best-practices-for-building-blockchain-solutions-with-solidity-part-i",
"permlink": "steemitboard-notify-rajita-20190509t232317000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-05-09T23:23:18",
"trx_id": "ddd2b83fcd83254416e84b3a2191786966a4549c",
"trx_in_block": 6,
"virtual_op": 0
}2018/08/08 23:19:48
2018/08/08 23:19:48
| delegatee | rajita |
| delegator | steem |
| vesting shares | 9925.846121 VESTS |
| Transaction Info | Block #24900566/Trx c02973a2567f79a645bf9fe7e5556dd42b027a57 |
View Raw JSON Data
{
"block": 24900566,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "9925.846121 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-08-08T23:19:48",
"trx_id": "c02973a2567f79a645bf9fe7e5556dd42b027a57",
"trx_in_block": 19,
"virtual_op": 0
}2018/05/10 00:55:03
2018/05/10 00:55:03
| author | rajita |
| permlink | best-practices-for-building-blockchain-solutions-with-solidity-part-i |
| voter | sensation |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22293827/Trx ffeaa451342c5f3af90479183ae69048db4b8392 |
View Raw JSON Data
{
"block": 22293827,
"op": [
"vote",
{
"author": "rajita",
"permlink": "best-practices-for-building-blockchain-solutions-with-solidity-part-i",
"voter": "sensation",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-05-10T00:55:03",
"trx_id": "ffeaa451342c5f3af90479183ae69048db4b8392",
"trx_in_block": 3,
"virtual_op": 0
}2018/05/09 23:48:12
2018/05/09 23:48:12
| delegatee | rajita |
| delegator | steem |
| vesting shares | 30329.925965 VESTS |
| Transaction Info | Block #22292490/Trx 85bfa29a3b11369b45b612899bf8b9e251bd5715 |
View Raw JSON Data
{
"block": 22292490,
"op": [
"delegate_vesting_shares",
{
"delegatee": "rajita",
"delegator": "steem",
"vesting_shares": "30329.925965 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-09T23:48:12",
"trx_id": "85bfa29a3b11369b45b612899bf8b9e251bd5715",
"trx_in_block": 16,
"virtual_op": 0
}rajitapublished a new post: best-practices-for-building-blockchain-solutions-with-solidity-part-i2018/05/09 22:24:57
rajitapublished a new post: best-practices-for-building-blockchain-solutions-with-solidity-part-i
2018/05/09 22:24:57
| author | rajita |
| body | (https://steemitimages.com/DQmW5rmVB4A53cLciZH6zs6Ez26EVQTz65nYCP9iSQHG1nc/blockchain.jpg) Overview The purpose of this article is to consolidate findings around design and development best practices in the Solidity environment. While blockchain technologies are still evolving, it is implicitly understood that some of the best practices outlined in this article are subject to change and subject to debate. As the market continues to evolve, it is imperative that discussions around governance and standards of excellence happen on a continual basis. As such, feedback is highly welcome. Guidelines that are specifically geared towards building Dapps, in many cases, leverage and build upon software best practices that have existed in the Information Technology industry for decades. This article intends to be a starting point, or at least one of the starting points, for a conversation around Solidity best practices on the Linkedin forum. Furthermore, this article intends to be the first in a series of articles that subsequently cover advanced topics via collaboration with other blockchain professionals. Scope The content here is geared towards Ethereum Solidity. This article will touch upon recommendations for nomenclature, account management, user interface development, error handling, security, inheritance, performance and scalability, and robustness. Upward migration and deployment using truffle are out of scope for this installment. The intended audience is blockchain enthusiasts. The Solidity snippets illustrated herein are compatible with the 0.4.23 parser and the Javascript snippets use ES6 syntax. Please note that for the sake of conciseness, the snippets are fragmented. I) Nomenclature for Solidity Contracts 1. Smart contract names are typically nouns with the starting letter in upper case and the rest in lower. 2. The above bullet applies to struct declarations as well since they describe abstract entities. 3. All variable declarations should be in lower case. II) Account Management 1. Passwords and private keys should be saved as soon as they are generated. The password will be needed when unlocking an account. 2. In order to safeguard your password, accounts should be unlocked in interactive mode as opposed to typing the password at the command line where it might be captured in the console history. The danger of exposing the password on the screen is evident in b) or using --password parameter in a). Choose a) over b). a) geth --unlock <account_address> By executing this line, you will be prompted for the password (for the reasons explained above, it is not advisable to use the --password parameter in this command). b) web3.eth.personal.unlockAccount(<account_address>, < pass_word >) 3. The 12-word mnemonic (seed-phrase) generated by Metamask should be stored somewhere safe. In the event private keys are lost or misplaced, the mnemonic can be used to regenerate the existing set of accounts. III) User Interfaces Decentralized solutions need special considerations when it comes to developing intuitive and interactive end-user applications. End users do not interact with a smart contract directly but with the front-end app that provides an interface between the user and the Dapp. For illustration purposes, it is assumed that UI is built with Javascript. 1. Present Users with Confirmation dialogs informing them with the irreversibility of transactions. Blockchain transactions are architected for immutability in a P2P distributed environment. The end user needs to be aware that they cannot create a support ticket with a central authority that can reverse the unintended transaction like they did with traditional apps. As such, it's best practice to prompt the end user with a confirmation dialog with the salient features of the transaction especially all the financial attributes involved, giving the user the option to scrutinize the values one more time so they can choose to proceed or cancel. 2. Consider the channels used for consuming the Dapp; mobile, web or both. 3. Provision UI widgets that account for latency. While transaction latency largely depends on the consensus algorithm, it is best practice to provision widgets such as button spinners or Progress views that let the end user know that the transaction may not be processed instantaneously given the nature of the blockchain. This is especially true of Proof-Of-Work consensus algorithms as used by Solidity currently. 4. Rendering of UI for mobile clients with slow connections. Server-side rendering might alleviate some of the frustration of an end user's Dapp experience from a cell phone interface on a slow connection. In these scenarios, using a utility such as Next.js can create some initial HTML content on the screen while the javascript code is rendered by the react utility inside the browser. On the flip side, if the browser (client) has to do all the work, that might leave users with an empty screen for a while until rendering completes. 5. UI widget and page visibility Since the blockchain relies on users to perform transactions based on assigned authority, UI design should follow suit by presenting the appropriate functionality to authorized users. In the design phase, it needs to be determined which pages/screens different users have access to, what widgets they can see and what actions they can perform. 6. Ensure that the render() method accounts for any changes to the state of the contract. By doing so, you can ensure that new values appear on the screen without a manual refresh. 7. Wrap transaction calls in try-catch blocks. All calls to the smart contract from the front-end app should be wrapped in try-catch blocks so that a user-friendly error is returned to the message on the UI component such as a form. This is covered further in the next section. IV) Error Handling 1. Use try-catch blocks. As covered in the earlier section on UI, try-catch blocks should be used when invoking smart contract methods from the application and error messages should be displayed on the UI. This is cleaner and easier than doing explicit input validations, etc. 2. Capture error messages. In the event of an error, ensure that the UI component (such a form) re-renders by capturing the value of the error object in a state variable. class IndexPage extends Component { state = {errorMsg: ''} onClick = async () => { try { //invoke a call to the smart contract } catch (err) { this.setState({errorMsg: err.message}); } ….. } render() { /*Use a react or semantic-ui-react component like Message to return the value of state variable errorMsg to the user. When using a Form, be sure to add an error property to the Form. */ } } The above is preferable to Metamask returning a cryptic error in the console but no user-friendly message to the user in a contained widget. V) Security The smart contract needs to ensure that functions that modify the state of the blockchain (transactions) can only be invoked by the authorized parties. Create reusable modifiers to qualify functions instead of implementing checks at the code-level inside the function (in order to keep the snippets concise, the constructor function that assigns the msg.sender attribute to the manager variable will not be written below. Please assume that it exists in the contract). Given the following options, choose a) over b). a) contract Game { address manager; modifier restricted() { require(msg.sender == manager); _; (the underscore servers as a placeholder for code substitution ) } function pickWinner (uint i) public restricted returns (address) { ….. ….. } } b) contract Game { address manager; function pickWinner (uint i) public returns (address) { require(msg.sender == manager); //(where manager is a wallet address of the manager of the contract) …... ….. } } In a), we have defined a reusable modifier that can be applied to multiple functions, that substitutes the underscore with the function code after checking for AuthZ. In a), the function can focus on its core logic instead of checking for Auth issues. VI) Inheritance Reusability across multiple contracts should be considered in the design phase. It's very likely that there will be other smart contracts in the future that will require a manager. In that event, the previous section could be rewritten in the following way (as mentioned in the previous section, please assume that the constructor exists). contract Manageable{ address manager; modifier restricted() { require(msg.sender == manager); _; // (the underscore serves as a placeholder for code substitution from the function) } } import "./Manageable.sol"; //for the sake of simplicity for this article, assume it's in the same folder contract Game is Manageable{ function pickWinner(uint i) public restricted returns (address) { ….. } } This method and notation eliminates redundant declarations of the manager variable across multiple contracts and also makes the restricted modifier reusable with a two-fold benefit. 1. Functions can focus on the business/transaction related code and not have to keep up with AuthZ changes. 2. Core AuthZ functionality can be managed in one spot, which might reduce the amount of regression testing. VII) Performance/Scalability and Gas Consumption 1. While blockchain algorithms are evolving in order to alleviate gas charges to the user, the deployment of smart contract code entails gas, as does any transaction that alters data/state on the blockchain. Computationally intensive functions that require high processing power and high bandwidth cost more than those that require less. The following recommendations can not only decrease said costs but also create more readable, maintainable and efficient code. 2. Where possible, replace array traversals that use loops with mapping lookups. 3. Arrays are suitable for collections where all that is needed for a lookup is an index. 4. When using uint for variable declarations, if the maximum size is identified and set in stone during design-time, a precision in the maximum number of digits is recommended in the declaration, for instance, uint16, uint32, etc. 5. Examine code for the possibility of infinite loops by checking if terminal conditions are met in all scenarios. 6. If a multi-part expression is going to be referenced multiple times, consider saving it to a variable and referencing the variable instead within if statements, etc. 7. Infrastructure auto-scalability should be provisioned either horizontally or vertically (depending on what is appropriate) for mining nodes when anticipating peak loads. VIII) Robustness In addition to implementing all of the above practices towards building robust code, the safest way to ensure robustness is through creating comprehensive, repeatable and automated test cases. Node.js provides various test frameworks such as mocha, chai, and jest that allow you to interact with smart contracts. 1. Put Remix to Use Before starting to write test code using any of the frameworks mentioned above, the use of Remix (https://remix.ethereum.org/) is highly recommended for testing the smart contract. Remix is a browser-based on-the-fly development and testing platform. It allows access to 10 accounts with 10 pseudo ether each inside an embedded JavaScript VM that makes testing contract calls fast and convenient. 2. Using test frameworks Create test cases for every use case that the contract covers. Specifically, every financial transaction should be accounted for. 3. Verify balances Sender and receiver wallets should be validated against the exact expected debit and credit amounts as well as gas consumption where appropriate. The contract balance should be validated regularly against expected amounts. Beginning and ending balances should be verified for accuracy. 4. Ensure all test cases pass before UI design/development and upstream migration. Design and thoroughly test the contract before UI development. Making changes to the smart contract and UI code after UI development could entail substantial work and is therefore not recommended. All test suites should be executed successfully before deploying to testnet or mainnet or any network that requires real currency. Test cases should be validated using assertions. 5. Plan for performance testing System peak loads should be anticipated based on the SLAs and should be simulated prior to testnet deployments. 6. Consider async nature of transactions. As mentioned in the UI section, calls to web3 from javascript should be wrapped in try-catch blocks, Within the try block, smart contract function calls should be wrapped with async-await due to the asynchronous nature of calls to web3, which serves as the bridge between Javascript and the Ethereum network. In the snippet below, the ES6 syntax allows the use of async/await instead of promises and also provides a cleaner and compact look. onClick = async () => { const accounts = await web3.eth.getAccounts(); /*assume web3 module was imported …. } Conclusion As covered at the beginning of the document, these are still early days of a revolutionary technology that is currently very much in flux. It is therefore incumbent upon all of us to evaluate architectural and development practices on a regular basis and contribute our findings to the community. This document is not meant to be viewed as a Bible for development but rather as a starting point for a conversation. Any blockchain solution's ultimate goal should be to enhance and enrich the end user's experience. There is no substitution for communication with end users so that they are proactively informed with how their experiences with blockchain solutions will deviate from that of traditional centralized solutions, which might have spanned decades. Any suggestions/corrections related to the content of this document are absolutely welcome. Image credits: 1) istockphoto.com - Person looking at Blockchain Concept on Screen, Standard license |
| json metadata | {"tags":["cryptocurrency","ethereum","solidity","bestpractices","blockchain"],"image":["https://steemitimages.com/DQmW5rmVB4A53cLciZH6zs6Ez26EVQTz65nYCP9iSQHG1nc/blockchain.jpg"],"links":["https://remix.ethereum.org/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cryptocurrency |
| permlink | best-practices-for-building-blockchain-solutions-with-solidity-part-i |
| title | Best Practices for Building Blockchain Solutions with Solidity - Part I |
| Transaction Info | Block #22290825/Trx 3b3845cdce30ac1eb97c2057a70b493c36fc81c1 |
View Raw JSON Data
{
"block": 22290825,
"op": [
"comment",
{
"author": "rajita",
"body": "(https://steemitimages.com/DQmW5rmVB4A53cLciZH6zs6Ez26EVQTz65nYCP9iSQHG1nc/blockchain.jpg)\n\nOverview \n\nThe purpose of this article is to consolidate findings around design and development best practices in the Solidity environment. While blockchain technologies are still evolving, it is implicitly understood that some of the best practices outlined in this article are subject to change and subject to debate. As the market continues to evolve, it is imperative that discussions around governance and standards of excellence happen on a continual basis. As such, feedback is highly welcome. Guidelines that are specifically geared towards building Dapps, in many cases, leverage and build upon software best practices that have existed in the Information Technology industry for decades. \n\nThis article intends to be a starting point, or at least one of the starting points, for a conversation around Solidity best practices on the Linkedin forum. Furthermore, this article intends to be the first in a series of articles that subsequently cover advanced topics via collaboration with other blockchain professionals. \n\nScope \n\nThe content here is geared towards Ethereum Solidity. This article will touch upon recommendations for nomenclature, account management, user interface development, error handling, security, inheritance, performance and scalability, and robustness. Upward migration and deployment using truffle are out of scope for this installment. The intended audience is blockchain enthusiasts. The Solidity snippets illustrated herein are compatible with the 0.4.23 parser and the Javascript snippets use ES6 syntax. Please note that for the sake of conciseness, the snippets are fragmented. \n\n I) Nomenclature for Solidity Contracts \n1. Smart contract names are typically nouns with the starting letter in upper case and the rest in lower. \n\n2. The above bullet applies to struct declarations as well since they describe abstract entities. \n\n3. All variable declarations should be in lower case. \n\n II) Account Management \n1. Passwords and private keys should be saved as soon as they are generated. The password will be needed when unlocking an account. \n\n2. In order to safeguard your password, accounts should be unlocked in interactive mode as opposed to typing the password at the command line where it might be captured in the console history. The danger of exposing the password on the screen is evident in b) or using --password parameter in a). Choose a) over b). \n\na) geth --unlock <account_address> By executing this line, you will be prompted for the password (for the reasons explained above, it is not advisable to use the --password parameter in this command). \n\nb) web3.eth.personal.unlockAccount(<account_address>, < pass_word >) \n\n3. The 12-word mnemonic (seed-phrase) generated by Metamask should be stored somewhere safe. In the event private keys are lost or misplaced, the mnemonic can be used to regenerate the existing set of accounts. \n\nIII) User Interfaces \n\nDecentralized solutions need special considerations when it comes to developing intuitive and interactive end-user applications. End users do not interact with a smart contract directly but with the front-end app that provides an interface between the user and the Dapp. For illustration purposes, it is assumed that UI is built with Javascript. \n\n1. Present Users with Confirmation dialogs informing them with the irreversibility of transactions. \nBlockchain transactions are architected for immutability in a P2P distributed environment. The end user needs to be aware that they cannot create a support ticket with a central authority that can reverse the unintended transaction like they did with traditional apps. As such, it's best practice to prompt the end user with a confirmation dialog with the salient features of the transaction especially all the financial attributes involved, giving the user the option to scrutinize the values one more time so they can choose to proceed or cancel. \n\n2. Consider the channels used for consuming the Dapp; mobile, web or both.\n\n3. Provision UI widgets that account for latency. \nWhile transaction latency largely depends on the consensus algorithm, it is best practice to provision widgets such as button spinners or Progress views that let the end user know that the transaction may not be processed instantaneously given the nature of the blockchain. This is especially true of Proof-Of-Work consensus algorithms as used by Solidity currently. \n\n4. Rendering of UI for mobile clients with slow connections. \nServer-side rendering might alleviate some of the frustration of an end user's Dapp experience from a cell phone interface on a slow connection. In these scenarios, using a utility such as Next.js can create some initial HTML content on the screen while the javascript code is rendered by the react utility inside the browser. On the flip side, if the browser (client) has to do all the work, that might leave users with an empty screen for a while until rendering completes. \n\n5. UI widget and page visibility \nSince the blockchain relies on users to perform transactions based on assigned authority, UI design should follow suit by presenting the appropriate functionality to authorized users. In the design phase, it needs to be determined which pages/screens different users have access to, what widgets they can see and what actions they can perform. \n\n6. Ensure that the render() method accounts for any changes to the state of the contract.\nBy doing so, you can ensure that new values appear on the screen without a manual refresh. \n\n7. Wrap transaction calls in try-catch blocks.\nAll calls to the smart contract from the front-end app should be wrapped in try-catch blocks so that a user-friendly error is returned to the message on the UI component such as a form. This is covered further in the next section. \n\nIV) Error Handling \n\n1. Use try-catch blocks.\nAs covered in the earlier section on UI, try-catch blocks should be used when invoking smart contract methods from the application and error messages should be displayed on the UI. This is cleaner and easier than doing explicit input validations, etc. \n\n2. Capture error messages.\nIn the event of an error, ensure that the UI component (such a form) re-renders by capturing the value of the error object in a state variable. \n\n class IndexPage extends Component { \n\n state = {errorMsg: ''} \n\n onClick = async () => { \n\n try { \n\n //invoke a call to the smart contract \n\n } \n\n catch (err) { \n\n this.setState({errorMsg: err.message});\n\n} \n\n ….. \n\n} \n\nrender() { \n\n /*Use a react or semantic-ui-react component like Message to return the value of state variable errorMsg to the user. When using a Form, be sure to add an error property to the Form. */\n\n} \n\n} \n\nThe above is preferable to Metamask returning a cryptic error in the console but no user-friendly message to the user in a contained widget. \n\n V) Security \nThe smart contract needs to ensure that functions that modify the state of the blockchain (transactions) can only be invoked by the authorized parties. \n\nCreate reusable modifiers to qualify functions instead of implementing checks at the code-level inside the function (in order to keep the snippets concise, the constructor function that assigns the msg.sender attribute to the manager variable will not be written below. Please assume that it exists in the contract). Given the following options, choose a) over b). \n\na) contract Game { \n\n address manager; \n\n modifier restricted() { \n\n require(msg.sender == manager); \n\n _; (the underscore servers as a placeholder for code substitution ) \n\n } \n\n function pickWinner (uint i) public restricted returns (address) { \n\n ….. \n\n ….. \n\n } \n\n} \n\nb) contract Game { \n\n address manager; \n\n function pickWinner (uint i) public returns (address) { \n\n require(msg.sender == manager); //(where manager is a wallet address of the manager of the contract) \n\n …... \n\n ….. \n\n } \n\n } \n\nIn a), we have defined a reusable modifier that can be applied to multiple functions, that substitutes the underscore with the function code after checking for AuthZ. In a), the function can focus on its core logic instead of checking for Auth issues. \n\nVI) Inheritance \n\nReusability across multiple contracts should be considered in the design phase. It's very likely that there will be other smart contracts in the future that will require a manager. In that event, the previous section could be rewritten in the following way (as mentioned in the previous section, please assume that the constructor exists). \n\ncontract Manageable{ \n\n address manager; \n\n modifier restricted() { \n\n require(msg.sender == manager); \n\n _; // (the underscore serves as a placeholder for code substitution from the function) \n\n } \n\n } \n\n \n\nimport \"./Manageable.sol\"; //for the sake of simplicity for this article, assume it's in the same folder \n\ncontract Game is Manageable{ \n\n function pickWinner(uint i) public restricted returns (address) { \n\n ….. \n\n } \n\n} \n\nThis method and notation eliminates redundant declarations of the manager variable across multiple contracts and also makes the restricted modifier reusable with a two-fold benefit. \n\n1. Functions can focus on the business/transaction related code and not have to keep up with AuthZ changes. \n\n2. Core AuthZ functionality can be managed in one spot, which might reduce the amount of regression testing. \n\nVII) Performance/Scalability and Gas Consumption \n\n1. While blockchain algorithms are evolving in order to alleviate gas charges to the user, the deployment of smart contract code entails gas, as does any transaction that alters data/state on the blockchain. Computationally intensive functions that require high processing power and high bandwidth cost more than those that require less. The following recommendations can not only decrease said costs but also create more readable, maintainable and efficient code. \n\n2. Where possible, replace array traversals that use loops with mapping lookups. \n\n3. Arrays are suitable for collections where all that is needed for a lookup is an index. \n\n4. When using uint for variable declarations, if the maximum size is identified and set in stone during design-time, a precision in the maximum number of digits is recommended in the declaration, for instance, uint16, uint32, etc. \n\n5. Examine code for the possibility of infinite loops by checking if terminal conditions are met in all scenarios. \n\n6. If a multi-part expression is going to be referenced multiple times, consider saving it to a variable and referencing the variable instead within if statements, etc. \n\n7. Infrastructure auto-scalability should be provisioned either horizontally or vertically (depending on what is appropriate) for mining nodes when anticipating peak loads. \n\nVIII) Robustness \n\nIn addition to implementing all of the above practices towards building robust code, the safest way to ensure robustness is through creating comprehensive, repeatable and automated test cases. \n\nNode.js provides various test frameworks such as mocha, chai, and jest that allow you to interact with smart contracts. \n\n1. Put Remix to Use\nBefore starting to write test code using any of the frameworks mentioned above, the use of Remix (https://remix.ethereum.org/) is highly recommended for testing the smart contract. Remix is a browser-based on-the-fly development and testing platform. It allows access to 10 accounts with 10 pseudo ether each inside an embedded JavaScript VM that makes testing contract calls fast and convenient. \n\n2. Using test frameworks\nCreate test cases for every use case that the contract covers. Specifically, every financial transaction should be accounted for.\n\n3. Verify balances\nSender and receiver wallets should be validated against the exact expected debit and credit amounts as well as gas consumption where appropriate. The contract balance should be validated regularly against expected amounts. Beginning and ending balances should be verified for accuracy. \n\n4. Ensure all test cases pass before UI design/development and upstream migration.\nDesign and thoroughly test the contract before UI development. Making changes to the smart contract and UI code after UI development could entail substantial work and is therefore not recommended. All test suites should be executed successfully before deploying to testnet or mainnet or any network that requires real currency. Test cases should be validated using assertions. \n\n5. Plan for performance testing\nSystem peak loads should be anticipated based on the SLAs and should be simulated prior to testnet deployments. \n\n6. Consider async nature of transactions.\nAs mentioned in the UI section, calls to web3 from javascript should be wrapped in try-catch blocks, Within the try block, smart contract function calls should be wrapped with async-await due to the asynchronous nature of calls to web3, which serves as the bridge between Javascript and the Ethereum network. In the snippet below, the ES6 syntax allows the use of async/await instead of promises and also provides a cleaner and compact look. \n\n onClick = async () => { \n\n const accounts = await web3.eth.getAccounts(); /*assume web3 module was imported \n\n …. \n\n }\n\nConclusion \n\nAs covered at the beginning of the document, these are still early days of a revolutionary technology that is currently very much in flux. It is therefore incumbent upon all of us to evaluate architectural and development practices on a regular basis and contribute our findings to the community. This document is not meant to be viewed as a Bible for development but rather as a starting point for a conversation. \n\nAny blockchain solution's ultimate goal should be to enhance and enrich the end user's experience. There is no substitution for communication with end users so that they are proactively informed with how their experiences with blockchain solutions will deviate from that of traditional centralized solutions, which might have spanned decades. Any suggestions/corrections related to the content of this document are absolutely welcome. \n\n Image credits: \n\n1) istockphoto.com - Person looking at Blockchain Concept on Screen, Standard license",
"json_metadata": "{\"tags\":[\"cryptocurrency\",\"ethereum\",\"solidity\",\"bestpractices\",\"blockchain\"],\"image\":[\"https://steemitimages.com/DQmW5rmVB4A53cLciZH6zs6Ez26EVQTz65nYCP9iSQHG1nc/blockchain.jpg\"],\"links\":[\"https://remix.ethereum.org/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cryptocurrency",
"permlink": "best-practices-for-building-blockchain-solutions-with-solidity-part-i",
"title": "Best Practices for Building Blockchain Solutions with Solidity - Part I"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-09T22:24:57",
"trx_id": "3b3845cdce30ac1eb97c2057a70b493c36fc81c1",
"trx_in_block": 45,
"virtual_op": 0
}2018/05/09 22:11:39
2018/05/09 22:11:39
| active | {"account_auths":[],"key_auths":[["STM5RBMRwVSoL7saWCzzctPFsGxDyfojb2hcPL2gxbDMSxTCGktL4",1]],"weight_threshold":1} |
| creator | steem |
| delegation | 30690.000000 VESTS |
| extensions | [] |
| fee | 0.100 STEEM |
| json metadata | {} |
| memo key | STM6AkYBYwHR8AkBcquDH3UZxDLuPvoW1PZC7kR1SqS7i3uqJ1ZaE |
| new account name | rajita |
| owner | {"account_auths":[],"key_auths":[["STM5k3bVfCuiNGAKfzqkJ5VU2VE3LLLLHRAXt9fNMYxxdxk4rJb5b",1]],"weight_threshold":1} |
| posting | {"account_auths":[],"key_auths":[["STM8CLS1GDf4YZKoX1BEwYRCWiFi9VLXwysecnDsnb9VrDP9KPD4v",1]],"weight_threshold":1} |
| Transaction Info | Block #22290559/Trx 68e575b957ca2111b1a38a52135a11ed122d248f |
View Raw JSON Data
{
"block": 22290559,
"op": [
"account_create_with_delegation",
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM5RBMRwVSoL7saWCzzctPFsGxDyfojb2hcPL2gxbDMSxTCGktL4",
1
]
],
"weight_threshold": 1
},
"creator": "steem",
"delegation": "30690.000000 VESTS",
"extensions": [],
"fee": "0.100 STEEM",
"json_metadata": "{}",
"memo_key": "STM6AkYBYwHR8AkBcquDH3UZxDLuPvoW1PZC7kR1SqS7i3uqJ1ZaE",
"new_account_name": "rajita",
"owner": {
"account_auths": [],
"key_auths": [
[
"STM5k3bVfCuiNGAKfzqkJ5VU2VE3LLLLHRAXt9fNMYxxdxk4rJb5b",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8CLS1GDf4YZKoX1BEwYRCWiFi9VLXwysecnDsnb9VrDP9KPD4v",
1
]
],
"weight_threshold": 1
}
}
],
"op_in_trx": 0,
"timestamp": "2018-05-09T22:11:39",
"trx_id": "68e575b957ca2111b1a38a52135a11ed122d248f",
"trx_in_block": 42,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779082068
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779082068
},
"rc_account": {
"account": "rajita",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779082068
}
}
}Account Metadata
| POSTING JSON METADATA | |
| None | |
| JSON METADATA | |
| None |
{
"posting_json_metadata": {},
"json_metadata": {}
}Auth Keys
Owner
Single Signature
Public Keys
STM5k3bVfCuiNGAKfzqkJ5VU2VE3LLLLHRAXt9fNMYxxdxk4rJb5b1/1
Active
Single Signature
Public Keys
STM5RBMRwVSoL7saWCzzctPFsGxDyfojb2hcPL2gxbDMSxTCGktL41/1
Posting
Single Signature
Public Keys
STM8CLS1GDf4YZKoX1BEwYRCWiFi9VLXwysecnDsnb9VrDP9KPD4v1/1
Memo
STM6AkYBYwHR8AkBcquDH3UZxDLuPvoW1PZC7kR1SqS7i3uqJ1ZaE
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM5k3bVfCuiNGAKfzqkJ5VU2VE3LLLLHRAXt9fNMYxxdxk4rJb5b",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM5RBMRwVSoL7saWCzzctPFsGxDyfojb2hcPL2gxbDMSxTCGktL4",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8CLS1GDf4YZKoX1BEwYRCWiFi9VLXwysecnDsnb9VrDP9KPD4v",
1
]
],
"weight_threshold": 1
},
"memo": "STM6AkYBYwHR8AkBcquDH3UZxDLuPvoW1PZC7kR1SqS7i3uqJ1ZaE"
}Witness Votes
0 / 30
No active witness votes.
[]