@prolic
28Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist
steemit.com/@prolicVOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS53.10%
Net Worth
2.976USD
STEEM
0.001STEEM
SBD
0.000SBD
Own SP
51.310SP
Detailed Balance
| STEEM | ||
| balance | 0.001STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 51.310SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 0.000SP | SP |
| Effective Power | 51.310SP | 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.001 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "83460.555652 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | prolic |
| id | 126291 |
| rank | 39,770 |
| reputation | 1910831112 |
| created | 2017-01-14T05:12:42 |
| recovery_account | steem |
| proxy | None |
| post_count | 5 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-04-23T14:27:12 |
| last_root_post | 2018-04-23T14:27:12 |
| last_vote_time | 2017-09-20T13:23:51 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 9,800 |
| delayed_votes | 0 |
| balance | 0.001 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 83460.555652 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 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 | 2018-06-29T19:51:12 |
| 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": [
[
"STM51ryKkUn9KHP7Y5E1ag686vTtqH9hnPxmq5wssuMvLgsQKiQnx",
1
]
],
"weight_threshold": 1
},
"balance": "0.001 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2017-01-14T05:12:42",
"curation_rewards": 0,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1484370762
},
"guest_bloggers": [],
"id": 126291,
"json_metadata": "{\"profile\":{\"profile_image\":\"https://avatars2.githubusercontent.com/u/394428?v=3&s=460\",\"about\":\"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist\",\"location\":\"Philippines\",\"website\":\"http://www.sasaprolic.com/\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2018-06-29T19:51:12",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2018-04-23T14:27:12",
"last_root_post": "2018-04-23T14:27:12",
"last_vote_time": "2017-09-20T13:23:51",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6HFc88q1yLFkY5bPjjNW1QBAJyXrLpD3Ash3RKbSfLo1F1mvP1",
"mined": false,
"name": "prolic",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM79AAYqqzwugCoMzfP6FZ75nfP453BgpeFJ9pQPLm36jP6sK1Fy",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 10065,
"post_count": 5,
"post_history": [],
"posting": {
"account_auths": [
[
"dtube.app",
1
]
],
"key_auths": [
[
"STM5rmSzdA38vQCajTEpzfCDAXpwzPAEPh4rmDLa7PaUT7DtWKgg6",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://avatars2.githubusercontent.com/u/394428?v=3&s=460\",\"about\":\"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist\",\"location\":\"Philippines\",\"website\":\"http://www.sasaprolic.com/\"}}",
"posting_rewards": 0,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "0.000000 VESTS",
"recovery_account": "steem",
"reputation": 1910831112,
"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": "83460.555652 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": 9800,
"last_update_time": 1505913831
},
"voting_power": 9800,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 39770
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2020/01/14 05:46:27
2020/01/14 05:46:27
| author | steemitboard |
| body | Congratulations @prolic! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@prolic/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@prolic) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=prolic)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | prolic |
| parent permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| permlink | steemitboard-notify-prolic-20200114t054626000z |
| title | |
| Transaction Info | Block #39912932/Trx b0d9cf7da34ceeb1fd9c5277568d471ed777a0cb |
View Raw JSON Data
{
"block": 39912932,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @prolic! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@prolic/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@prolic) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=prolic)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "prolic",
"parent_permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"permlink": "steemitboard-notify-prolic-20200114t054626000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2020-01-14T05:46:27",
"trx_id": "b0d9cf7da34ceeb1fd9c5277568d471ed777a0cb",
"trx_in_block": 8,
"virtual_op": 0
}2019/08/22 15:30:03
2019/08/22 15:30:03
| amount | 0.001 STEEM |
| from | dtube |
| memo | Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube |
| to | prolic |
| Transaction Info | Block #35778612/Trx c59dd61a3464f7d1318aa36069024e05d21a164e |
View Raw JSON Data
{
"block": 35778612,
"op": [
"transfer",
{
"amount": "0.001 STEEM",
"from": "dtube",
"memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
"to": "prolic"
}
],
"op_in_trx": 0,
"timestamp": "2019-08-22T15:30:03",
"trx_id": "c59dd61a3464f7d1318aa36069024e05d21a164e",
"trx_in_block": 22,
"virtual_op": 0
}2019/01/14 08:33:09
2019/01/14 08:33:09
| author | steemitboard |
| body | Congratulations @prolic! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@prolic/birthday2.png</td><td>2 Years on Steemit</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@prolic)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | prolic |
| parent permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| permlink | steemitboard-notify-prolic-20190114t083308000z |
| title | |
| Transaction Info | Block #29443504/Trx 4146bfd214ef00eea1acef89ebf65e8ee5cfb21c |
View Raw JSON Data
{
"block": 29443504,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @prolic! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@prolic/birthday2.png</td><td>2 Years on Steemit</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@prolic)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "prolic",
"parent_permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"permlink": "steemitboard-notify-prolic-20190114t083308000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-01-14T08:33:09",
"trx_id": "4146bfd214ef00eea1acef89ebf65e8ee5cfb21c",
"trx_in_block": 6,
"virtual_op": 0
}keithyoungbloodupvoted (100.00%) @prolic / authorization-and-event-sourcing-with-prooph-and-zf2-zf32018/11/04 03:02:36
keithyoungbloodupvoted (100.00%) @prolic / authorization-and-event-sourcing-with-prooph-and-zf2-zf3
2018/11/04 03:02:36
| author | prolic |
| permlink | authorization-and-event-sourcing-with-prooph-and-zf2-zf3 |
| voter | keithyoungblood |
| weight | 10000 (100.00%) |
| Transaction Info | Block #27393419/Trx 2eac1d194890a4aefbba566a8fa03badcc54b037 |
View Raw JSON Data
{
"block": 27393419,
"op": [
"vote",
{
"author": "prolic",
"permlink": "authorization-and-event-sourcing-with-prooph-and-zf2-zf3",
"voter": "keithyoungblood",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-11-04T03:02:36",
"trx_id": "2eac1d194890a4aefbba566a8fa03badcc54b037",
"trx_in_block": 23,
"virtual_op": 0
}prolicfollowed @samuel-johnson2018/06/29 19:51:36
prolicfollowed @samuel-johnson
2018/06/29 19:51:36
| id | follow |
| json | ["follow",{"follower":"prolic","following":"samuel-johnson","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["prolic"] |
| Transaction Info | Block #23755255/Trx 434bb491167554139feffbc556ebef96ec8406c0 |
View Raw JSON Data
{
"block": 23755255,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"prolic\",\"following\":\"samuel-johnson\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"prolic"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-06-29T19:51:36",
"trx_id": "434bb491167554139feffbc556ebef96ec8406c0",
"trx_in_block": 47,
"virtual_op": 0
}prolicupdated their account properties2018/06/29 19:51:12
prolicupdated their account properties
2018/06/29 19:51:12
| account | prolic |
| json metadata | {"profile":{"profile_image":"https://avatars2.githubusercontent.com/u/394428?v=3&s=460","about":"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist","location":"Philippines","website":"http://www.sasaprolic.com/"}} |
| memo key | STM6HFc88q1yLFkY5bPjjNW1QBAJyXrLpD3Ash3RKbSfLo1F1mvP1 |
| posting | {"account_auths":[["dtube.app",1]],"key_auths":[["STM5rmSzdA38vQCajTEpzfCDAXpwzPAEPh4rmDLa7PaUT7DtWKgg6",1]],"weight_threshold":1} |
| Transaction Info | Block #23755247/Trx 5120e543e24a07b55a1aa30315f54642935df95d |
View Raw JSON Data
{
"block": 23755247,
"op": [
"account_update",
{
"account": "prolic",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://avatars2.githubusercontent.com/u/394428?v=3&s=460\",\"about\":\"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist\",\"location\":\"Philippines\",\"website\":\"http://www.sasaprolic.com/\"}}",
"memo_key": "STM6HFc88q1yLFkY5bPjjNW1QBAJyXrLpD3Ash3RKbSfLo1F1mvP1",
"posting": {
"account_auths": [
[
"dtube.app",
1
]
],
"key_auths": [
[
"STM5rmSzdA38vQCajTEpzfCDAXpwzPAEPh4rmDLa7PaUT7DtWKgg6",
1
]
],
"weight_threshold": 1
}
}
],
"op_in_trx": 0,
"timestamp": "2018-06-29T19:51:12",
"trx_id": "5120e543e24a07b55a1aa30315f54642935df95d",
"trx_in_block": 9,
"virtual_op": 0
}shamgupvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 23:23:42
shamgupvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 23:23:42
| author | prolic |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| voter | shamg |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21831558/Trx bb0c4167662af7b6d125357858f47e23e94a5331 |
View Raw JSON Data
{
"block": 21831558,
"op": [
"vote",
{
"author": "prolic",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"voter": "shamg",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T23:23:42",
"trx_id": "bb0c4167662af7b6d125357858f47e23e94a5331",
"trx_in_block": 13,
"virtual_op": 0
}simona2001upvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 23:23:39
simona2001upvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 23:23:39
| author | prolic |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| voter | simona2001 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21831557/Trx 5e23309d3f4c9c6506d438a75ca1a9c86110eaaf |
View Raw JSON Data
{
"block": 21831557,
"op": [
"vote",
{
"author": "prolic",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"voter": "simona2001",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T23:23:39",
"trx_id": "5e23309d3f4c9c6506d438a75ca1a9c86110eaaf",
"trx_in_block": 60,
"virtual_op": 0
}uryvsupvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 23:23:39
uryvsupvoted (100.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 23:23:39
| author | prolic |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| voter | uryvs |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21831557/Trx 5d9293d9f28101057ab149a46b5d084c1c46f697 |
View Raw JSON Data
{
"block": 21831557,
"op": [
"vote",
{
"author": "prolic",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"voter": "uryvs",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T23:23:39",
"trx_id": "5d9293d9f28101057ab149a46b5d084c1c46f697",
"trx_in_block": 28,
"virtual_op": 0
}2018/04/23 14:27:36
2018/04/23 14:27:36
| author | cheetah |
| body | Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: http://www.sasaprolic.com/ |
| json metadata | |
| parent author | prolic |
| parent permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| permlink | cheetah-re-prolicwhy-there-will-be-no-kafka-eventstore-in-prooph |
| title | |
| Transaction Info | Block #21821234/Trx 955a83424aa52772c4b7210641dfce90948a590e |
View Raw JSON Data
{
"block": 21821234,
"op": [
"comment",
{
"author": "cheetah",
"body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttp://www.sasaprolic.com/",
"json_metadata": "",
"parent_author": "prolic",
"parent_permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"permlink": "cheetah-re-prolicwhy-there-will-be-no-kafka-eventstore-in-prooph",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T14:27:36",
"trx_id": "955a83424aa52772c4b7210641dfce90948a590e",
"trx_in_block": 40,
"virtual_op": 0
}cheetahupvoted (0.08%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 14:27:30
cheetahupvoted (0.08%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 14:27:30
| author | prolic |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| voter | cheetah |
| weight | 8 (0.08%) |
| Transaction Info | Block #21821232/Trx 7da4d48dd0d02673976411bbeb7a6748793e6918 |
View Raw JSON Data
{
"block": 21821232,
"op": [
"vote",
{
"author": "prolic",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"voter": "cheetah",
"weight": 8
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T14:27:30",
"trx_id": "7da4d48dd0d02673976411bbeb7a6748793e6918",
"trx_in_block": 7,
"virtual_op": 0
}ax3upvoted (1.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 14:27:21
ax3upvoted (1.00%) @prolic / why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 14:27:21
| author | prolic |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| voter | ax3 |
| weight | 100 (1.00%) |
| Transaction Info | Block #21821229/Trx 51ed5f322396024756697a503cf4a49c1ea53d29 |
View Raw JSON Data
{
"block": 21821229,
"op": [
"vote",
{
"author": "prolic",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"voter": "ax3",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T14:27:21",
"trx_id": "51ed5f322396024756697a503cf4a49c1ea53d29",
"trx_in_block": 51,
"virtual_op": 0
}prolicpublished a new post: why-there-will-be-no-kafka-eventstore-in-prooph2018/04/23 14:27:12
prolicpublished a new post: why-there-will-be-no-kafka-eventstore-in-prooph
2018/04/23 14:27:12
| author | prolic |
| body | tl;dr When even Greg Young, the author of the original EventStore implementation (http://geteventstore.com/) says that it's a bad idea to implement a Kafka EventStore, than it's a bad idea. The prooph-team will not provide a Kafka EventStore implementation. Before we begin, let's see what requirements we need from an event-store: - Concurrency checks When an event with same version is appended twice to the event-store, only the first attempt is allowed to succeed. This is very important, imagine you have multiple processes inserting event to an existing stream, let's say we have an an existing aggregate with only one event (version 1). Now two processes insert two events, so we have: event 1, event 2, event 2', event 3, event 3'. Next another process is inserting an event 4. If the consumer of the stream has to decide whether or not an event belongs to the stream, it's a hard decision now, because we could have the following possible event streams: event 1, event 2, event 3, event 4 or event 1, event 2', event 3, event 4 or event 1, event 2, event 3', event 4 or event 1, event 2', event 3', event 4. Additionally you can't rely on timing (let's say event 2 was inserted slightly before event 2'), because on a different data center the order could be the other way around. The matter complicates the further the event stream goes. And this is not a blockchain-like problem, where simply the longest chain wins, because sometimes, there will be no more additional events to an existing stream. I have to add, that this concurrency check requirement and version constraint might not be needed for all use-cases, in some applications it might be okay to just record whatever happened and versions / order don't matter at all (or not that much), but for a general purpose event-store implementation (where you don't wanna put dozens of warnings, and stuff), this will only bring problems and lot of bug-reports. - One stream per aggregate In the original event-store implementation of Greg Young (https://github.com/EventStore/EventStore), there is by default one stream per aggregate. That means that not all events related to aggregate type "User" are stored in a single stream, but that we have one stream for each aggregate, f.e. "User-<user_id_1>", "User-<user_id_2>", "User-<user_id_3>", ... This option is also available for prooph-event-store, limiting the usage to disallow this strategy is possibile, but not really wanted. To quote Greg Young: "You need stream per aggregate not type. You can do single aggregate instance for all instances but it's yucky" - Store forever While at first glance obvious, the event store should persist the event forever, it's not allowed to be removed, garbage collected or deleted on server shutdown. - Querying event offset Another quite obvious thing to consider at first: Given you loaded an aggregate from a snapshot, you already have it at a specific version (let's say event version is 10 f.e.). Then you only need to load events starting from 11. This is especially important, once you have thousands of events in an aggregate (imagine you would need to load all 5000 events again, instead of only the last 3, event when you have a snapshot). Even more important when one stream per aggregate is not possible. Now let's look at what Kafka has to offer: - Concurrency checks Well, Kafka hasn't that. It would not be such a problem with something like actor model, to quote Greg Young again: >> I also really like the idea of in memory models (especially when built >> up as actors in say erlang or akka). One of the main benefits here is >> that the actor infrastructure can assure you a single instance in the >> cluster and gets rid of things like the need for optimistic concurrency. >> >> Greg This this one is a really big issue. - One stream per aggregate If I have thousands of aggregates and each have a topic, Kafka (and ZooKeeper specifically) will explode. These are real problems with Kafka. ZooKeeper can't handle 10M partitions right now. - Store forever On Kafka events expire! Yes really, they expire! Fortunately enough, with never versions of Kafka, you can configure it to not expire messages at all (day saved!). - Querying event offset Here we go, that's not possibile with Kafka! Combine that with the "One stream per aggregate" problem, and here we go full nightmare. It's simply not reasonable to read millions or even billions of events, just to replay the 5 events you're interessted in to your aggregate root. Way around some limitations: - Use some actor modelish implementation (like Akka) - this would solve the "Concurrency checks" issue and well as the "Queryingevent offset" issue, because you can use stuff like "idempotent producer semantics" (to track producer id and position in event stream) and in-memory checks of aggregates, to go around the concurrency checks requirement. But prooph are PHP components and even if we would implement some akka-like infrastructure, that would be a rare use-case that someone wanted to use this implementation. Another interessting quote from Greg Young about an Kafka EventStore: >> Most systems have some amount of data that is "live" and some much >> larger amount of data that is essentially "historical" a perfect example >> of this might be mortgage applications in a bank. There is some tiny % >> that are currently in process in the system and a vast number that are >> "done". >> >> If you wanted to just put everything into one stream you would need to >> hydrate all of them and keep them in memory (even the ones you really >> don't care about any more). >> >> This can turn into a very expensive operation/decision. >> >> Cheers, >> >> Greg and also this one: >> Most of the systems discussed are not really event sourced they just >> raise events and are distributing them. They do not keep their events as >> their source of truth (they just throw them away). They don't do things >> like replaying (which is kind of the benchmark) >> >> Not everyone who sends a message is "event sourcing" >> >> Greg Final thoughts: Kafka is great for stream processing. With enqueue (github.com/php-enqueue/enqueue-dev) and prooph's enqueue-producer (github.com/prooph/psb-enqueue-producer/) you can already send messages to Kafka for processing. So send your messages to Kafka, if you need or want to. In my opinion a Kafka EventStore implementation would be very limited and not useful for most of the PHP applications build. Therefor I think there will never be a Kafka EventStore implementation (not in prooph, nor in any other programming language - correct me if I'm wrong and you know an open source Kafka EventStore implementation somewhere!). When even Greg Young things a Kafka EventStore is a bad idea, I'm at least not the only one out there. References: Most of the Greg Young quotes about an Kafka EventStore are taken from here: https://groups.google.com/forum/#!topic/dddcqrs/rm02iCfffUY I recommend this thread for everyone you wants to dig deaper into the problems with Kafka as an EventStore. |
| json metadata | {"tags":["php","prooph","kafka","programming"],"links":["http://geteventstore.com/","https://github.com/EventStore/EventStore","https://groups.google.com/forum/#!topic/dddcqrs/rm02iCfffUY"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | php |
| permlink | why-there-will-be-no-kafka-eventstore-in-prooph |
| title | Why there will be no Kafka EventStore in prooph |
| Transaction Info | Block #21821226/Trx 57613daa8f5e1f3d72cd095014bdc76a2c10276a |
View Raw JSON Data
{
"block": 21821226,
"op": [
"comment",
{
"author": "prolic",
"body": "tl;dr\n\n\nWhen even Greg Young, the author of the original EventStore implementation (http://geteventstore.com/) says that it's a bad idea to implement a Kafka EventStore, than it's a bad idea. The prooph-team will not provide a Kafka EventStore implementation.\n\n\nBefore we begin, let's see what requirements we need from an event-store:\n\n\n- Concurrency checks\n\n When an event with same version is appended twice to the event-store, only the first attempt is allowed to succeed. This is very important, imagine you have multiple processes inserting event to an existing stream, let's say we have an an existing aggregate with only one event (version 1). Now two processes insert two events, so we have: event 1, event 2, event 2', event 3, event 3'. Next another process is inserting an event 4. If the consumer of the stream has to decide whether or not an event belongs to the stream, it's a hard decision now, because we could have the following possible event streams: event 1, event 2, event 3, event 4 or event 1, event 2', event 3, event 4 or event 1, event 2, event 3', event 4 or event 1, event 2', event 3', event 4. Additionally you can't rely on timing (let's say event 2 was inserted slightly before event 2'), because on a different data center the order could be the other way around. The matter complicates the further the event stream goes. And this is not a blockchain-like problem, where simply the longest chain wins, because sometimes, there will be no more additional events to an existing stream. I have to add, that this concurrency check requirement and version constraint might not be needed for all use-cases, in some applications it might be okay to just record whatever happened and versions / order don't matter at all (or not that much), but for a general purpose event-store implementation (where you don't wanna put dozens of warnings, and stuff), this will only bring problems and lot of bug-reports.\n\n\n- One stream per aggregate\n\n In the original event-store implementation of Greg Young (https://github.com/EventStore/EventStore), there is by default one stream per aggregate. That means that not all events related to aggregate type \"User\" are stored in a single stream, but that we have one stream for each aggregate, f.e. \"User-<user_id_1>\", \"User-<user_id_2>\", \"User-<user_id_3>\", ...\n\n This option is also available for prooph-event-store, limiting the usage to disallow this strategy is possibile, but not really wanted.\n\n To quote Greg Young: \"You need stream per aggregate not type. You can do single aggregate instance for all instances but it's yucky\"\n\n\n- Store forever\n\n While at first glance obvious, the event store should persist the event forever, it's not allowed to be removed, garbage collected or deleted on server shutdown.\n\n\n- Querying event offset\n\n Another quite obvious thing to consider at first: Given you loaded an aggregate from a snapshot, you already have it at a specific version (let's say event version is 10 f.e.). Then you only need to load events starting from 11. This is especially important, once you have thousands of events in an aggregate (imagine you would need to load all 5000 events again, instead of only the last 3, event when you have a snapshot). Even more important when one stream per aggregate is not possible.\n\n \n\n\nNow let's look at what Kafka has to offer:\n\n\n- Concurrency checks\n\n\n Well, Kafka hasn't that. It would not be such a problem with something like actor model, to quote Greg Young again:\n\n >> I also really like the idea of in memory models (especially when built\n\n >> up as actors in say erlang or akka). One of the main benefits here is\n\n >> that the actor infrastructure can assure you a single instance in the\n\n >> cluster and gets rid of things like the need for optimistic concurrency.\n\n >>\n\n >> Greg\n\n This this one is a really big issue.\n\n\n- One stream per aggregate\n\n If I have thousands of aggregates and each have a topic, Kafka (and ZooKeeper specifically) will explode. These are real problems with Kafka. ZooKeeper can't handle 10M partitions right now.\n\n\n- Store forever\n\n On Kafka events expire! Yes really, they expire! Fortunately enough, with never versions of Kafka, you can configure it to not expire messages at all (day saved!).\n\n\n- Querying event offset\n\n Here we go, that's not possibile with Kafka! Combine that with the \"One stream per aggregate\" problem, and here we go full nightmare. It's simply not reasonable to read millions or even billions of events, just to replay the 5 events you're interessted in to your aggregate root.\n\n\nWay around some limitations:\n\n\n- Use some actor modelish implementation (like Akka) - this would solve the \"Concurrency checks\" issue and well as the\n\n \"Queryingevent offset\" issue, because you can use stuff like \"idempotent producer semantics\" (to track producer id and position in event stream) and in-memory checks of aggregates, to go around the concurrency checks requirement. But prooph are PHP components and even if we would implement some akka-like infrastructure, that would be a rare use-case that someone wanted to use this implementation.\n\n \n\n \n\nAnother interessting quote from Greg Young about an Kafka EventStore:\n\n\n>> Most systems have some amount of data that is \"live\" and some much\n\n>> larger amount of data that is essentially \"historical\" a perfect example\n\n>> of this might be mortgage applications in a bank. There is some tiny %\n\n>> that are currently in process in the system and a vast number that are\n\n>> \"done\".\n\n>>\n\n>> If you wanted to just put everything into one stream you would need to\n\n>> hydrate all of them and keep them in memory (even the ones you really\n\n>> don't care about any more).\n\n>>\n\n>> This can turn into a very expensive operation/decision.\n\n>>\n\n>> Cheers,\n\n>>\n\n>> Greg\n\n\nand also this one:\n\n\n>> Most of the systems discussed are not really event sourced they just\n\n>> raise events and are distributing them. They do not keep their events as\n\n>> their source of truth (they just throw them away). They don't do things\n\n>> like replaying (which is kind of the benchmark)\n\n>>\n\n>> Not everyone who sends a message is \"event sourcing\"\n\n>>\n\n>> Greg\n\n\nFinal thoughts:\n\n\nKafka is great for stream processing. With enqueue (github.com/php-enqueue/enqueue-dev) and prooph's enqueue-producer (github.com/prooph/psb-enqueue-producer/) you can already send messages to Kafka for processing. So send your messages to Kafka, if you need or want to.\n\nIn my opinion a Kafka EventStore implementation would be very limited and not useful for most of the PHP applications build. Therefor I think there will never be a Kafka EventStore implementation (not in prooph, nor in any other programming language - correct me if I'm wrong and you know an open source Kafka EventStore implementation somewhere!).\n\nWhen even Greg Young things a Kafka EventStore is a bad idea, I'm at least not the only one out there.\n\n\nReferences:\n\n\nMost of the Greg Young quotes about an Kafka EventStore are taken from here: https://groups.google.com/forum/#!topic/dddcqrs/rm02iCfffUY\n\nI recommend this thread for everyone you wants to dig deaper into the problems with Kafka as an EventStore.",
"json_metadata": "{\"tags\":[\"php\",\"prooph\",\"kafka\",\"programming\"],\"links\":[\"http://geteventstore.com/\",\"https://github.com/EventStore/EventStore\",\"https://groups.google.com/forum/#!topic/dddcqrs/rm02iCfffUY\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "php",
"permlink": "why-there-will-be-no-kafka-eventstore-in-prooph",
"title": "Why there will be no Kafka EventStore in prooph"
}
],
"op_in_trx": 0,
"timestamp": "2018-04-23T14:27:12",
"trx_id": "57613daa8f5e1f3d72cd095014bdc76a2c10276a",
"trx_in_block": 25,
"virtual_op": 0
}2017/09/20 13:38:54
2017/09/20 13:38:54
| author | prolic |
| permlink | 3izhf8rx |
| voter | ubg |
| weight | 100 (1.00%) |
| Transaction Info | Block #15633332/Trx 535a740509495e9487cb5545f0a1054974e724bf |
View Raw JSON Data
{
"block": 15633332,
"op": [
"vote",
{
"author": "prolic",
"permlink": "3izhf8rx",
"voter": "ubg",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T13:38:54",
"trx_id": "535a740509495e9487cb5545f0a1054974e724bf",
"trx_in_block": 26,
"virtual_op": 0
}2017/09/20 13:23:51
2017/09/20 13:23:51
| author | prolic |
| permlink | 3izhf8rx |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #15633031/Trx b98fe117e457b9eb6cc4c419356a2f8c4428c452 |
View Raw JSON Data
{
"block": 15633031,
"op": [
"vote",
{
"author": "prolic",
"permlink": "3izhf8rx",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T13:23:51",
"trx_id": "b98fe117e457b9eb6cc4c419356a2f8c4428c452",
"trx_in_block": 3,
"virtual_op": 0
}2017/09/20 13:20:42
2017/09/20 13:20:42
| author | prolic |
| permlink | 3izhf8rx |
| voter | ipfs01 |
| weight | 1500 (15.00%) |
| Transaction Info | Block #15632968/Trx 77fc90e8305f5dde2134b7529783efc9bae31eef |
View Raw JSON Data
{
"block": 15632968,
"op": [
"vote",
{
"author": "prolic",
"permlink": "3izhf8rx",
"voter": "ipfs01",
"weight": 1500
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T13:20:42",
"trx_id": "77fc90e8305f5dde2134b7529783efc9bae31eef",
"trx_in_block": 16,
"virtual_op": 0
}2017/09/20 13:19:54
2017/09/20 13:19:54
| allow curation rewards | true |
| allow votes | true |
| author | prolic |
| extensions | [[0,{"beneficiaries":[{"account":"dtube","weight":2500}]}]] |
| max accepted payout | 1000000.000 SBD |
| percent steem dollars | 10000 |
| permlink | 3izhf8rx |
| Transaction Info | Block #15632952/Trx c2ee51b094e32f65f366ecadf5a29aca71da3865 |
View Raw JSON Data
{
"block": 15632952,
"op": [
"comment_options",
{
"allow_curation_rewards": true,
"allow_votes": true,
"author": "prolic",
"extensions": [
[
0,
{
"beneficiaries": [
{
"account": "dtube",
"weight": 2500
}
]
}
]
],
"max_accepted_payout": "1000000.000 SBD",
"percent_steem_dollars": 10000,
"permlink": "3izhf8rx"
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T13:19:54",
"trx_id": "c2ee51b094e32f65f366ecadf5a29aca71da3865",
"trx_in_block": 2,
"virtual_op": 0
}2017/09/20 13:19:54
2017/09/20 13:19:54
| author | prolic |
| body | <center><a href='https://dtube.video/#!/v/prolic/3izhf8rx'><img src='https://ipfs.io/ipfs/QmRwUHrnRWoRD8ckq8KBNi3vdipDi1qT3wp4jtz2AsrJau'></a></center><hr>Changes and new features in prooph event-store v7 github.com/prooph/event-store github.com/prooph/pdo-event-store gitter.im/prooph/improoph<hr><a href='https://dtube.video/#!/v/prolic/3izhf8rx'>► Watch on DTube</a><br /><a href='https://earth.i.ipfs.io/ipfs/QmcHvTxXofubT5aQ3dEVa8oski3CyJRAuvLikAeAoKPDLp'>► Watch Source (IPFS)</a> |
| json metadata | {"video":{"info":{"title":"Prooph Event Store v7","snaphash":"QmRwUHrnRWoRD8ckq8KBNi3vdipDi1qT3wp4jtz2AsrJau","author":"prolic","permlink":"3izhf8rx"},"content":{"videohash":"QmcHvTxXofubT5aQ3dEVa8oski3CyJRAuvLikAeAoKPDLp","description":"Changes and new features in prooph event-store v7 \n\ngithub.com/prooph/event-store\ngithub.com/prooph/pdo-event-store\n\ngitter.im/prooph/improoph","tags":["dtube","dtube-prooph","dtube-php","dtube-eventsourcing","dtube-ddd"]},"_id":"4913edea8a7c0b5a571e8e6acf212ff7"},"tags":["dtube","dtube-prooph","dtube-php","dtube-eventsourcing","dtube-ddd"],"app":"dtube/0.3"} |
| parent author | |
| parent permlink | dtube |
| permlink | 3izhf8rx |
| title | Prooph Event Store v7 |
| Transaction Info | Block #15632952/Trx c2ee51b094e32f65f366ecadf5a29aca71da3865 |
View Raw JSON Data
{
"block": 15632952,
"op": [
"comment",
{
"author": "prolic",
"body": "<center><a href='https://dtube.video/#!/v/prolic/3izhf8rx'><img src='https://ipfs.io/ipfs/QmRwUHrnRWoRD8ckq8KBNi3vdipDi1qT3wp4jtz2AsrJau'></a></center><hr>Changes and new features in prooph event-store v7 \n\ngithub.com/prooph/event-store\ngithub.com/prooph/pdo-event-store\n\ngitter.im/prooph/improoph<hr><a href='https://dtube.video/#!/v/prolic/3izhf8rx'>► Watch on DTube</a><br /><a href='https://earth.i.ipfs.io/ipfs/QmcHvTxXofubT5aQ3dEVa8oski3CyJRAuvLikAeAoKPDLp'>► Watch Source (IPFS)</a>",
"json_metadata": "{\"video\":{\"info\":{\"title\":\"Prooph Event Store v7\",\"snaphash\":\"QmRwUHrnRWoRD8ckq8KBNi3vdipDi1qT3wp4jtz2AsrJau\",\"author\":\"prolic\",\"permlink\":\"3izhf8rx\"},\"content\":{\"videohash\":\"QmcHvTxXofubT5aQ3dEVa8oski3CyJRAuvLikAeAoKPDLp\",\"description\":\"Changes and new features in prooph event-store v7 \\n\\ngithub.com/prooph/event-store\\ngithub.com/prooph/pdo-event-store\\n\\ngitter.im/prooph/improoph\",\"tags\":[\"dtube\",\"dtube-prooph\",\"dtube-php\",\"dtube-eventsourcing\",\"dtube-ddd\"]},\"_id\":\"4913edea8a7c0b5a571e8e6acf212ff7\"},\"tags\":[\"dtube\",\"dtube-prooph\",\"dtube-php\",\"dtube-eventsourcing\",\"dtube-ddd\"],\"app\":\"dtube/0.3\"}",
"parent_author": "",
"parent_permlink": "dtube",
"permlink": "3izhf8rx",
"title": "Prooph Event Store v7"
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T13:19:54",
"trx_id": "c2ee51b094e32f65f366ecadf5a29aca71da3865",
"trx_in_block": 2,
"virtual_op": 0
}2017/09/20 12:28:33
2017/09/20 12:28:33
| id | follow |
| json | ["follow",{"follower":"prolic","following":"dtube","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["prolic"] |
| Transaction Info | Block #15631925/Trx 5c04850957b865280c786d578a01509caace9ebb |
View Raw JSON Data
{
"block": 15631925,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"prolic\",\"following\":\"dtube\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"prolic"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-09-20T12:28:33",
"trx_id": "5c04850957b865280c786d578a01509caace9ebb",
"trx_in_block": 9,
"virtual_op": 0
}prolicupvoted (100.00%) @oliver-janich / spam-attack-a-new-method-of-censorship-seems-emerges-on-facebook2017/03/14 04:18:57
prolicupvoted (100.00%) @oliver-janich / spam-attack-a-new-method-of-censorship-seems-emerges-on-facebook
2017/03/14 04:18:57
| author | oliver-janich |
| permlink | spam-attack-a-new-method-of-censorship-seems-emerges-on-facebook |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #10156816/Trx a5467f404c8e33340d1d77addffe8c111330f5e1 |
View Raw JSON Data
{
"block": 10156816,
"op": [
"vote",
{
"author": "oliver-janich",
"permlink": "spam-attack-a-new-method-of-censorship-seems-emerges-on-facebook",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-03-14T04:18:57",
"trx_id": "a5467f404c8e33340d1d77addffe8c111330f5e1",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @screenname / re-rip-udo-ulfkotte-20170115t010827
prolicupvoted (100.00%) @screenname / re-rip-udo-ulfkotte-20170115t010827
| author | screenname |
| permlink | re-rip-udo-ulfkotte-20170115t010827 |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495418/Trx 7db664186fc1745cf38a1791f150d6aa18f874e7 |
View Raw JSON Data
{
"block": 8495418,
"op": [
"vote",
{
"author": "screenname",
"permlink": "re-rip-udo-ulfkotte-20170115t010827",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:29:36",
"trx_id": "7db664186fc1745cf38a1791f150d6aa18f874e7",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @homeartpictures / re-polluxone-rip-udo-ulfkotte-20170114t150704700z
prolicupvoted (100.00%) @homeartpictures / re-polluxone-rip-udo-ulfkotte-20170114t150704700z
| author | homeartpictures |
| permlink | re-polluxone-rip-udo-ulfkotte-20170114t150704700z |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495416/Trx 54fd8f57f5a79a06ac0bcb56070dd6b7331f1b2a |
View Raw JSON Data
{
"block": 8495416,
"op": [
"vote",
{
"author": "homeartpictures",
"permlink": "re-polluxone-rip-udo-ulfkotte-20170114t150704700z",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:29:30",
"trx_id": "54fd8f57f5a79a06ac0bcb56070dd6b7331f1b2a",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @pollux.one / rip-udo-ulfkotte
prolicupvoted (100.00%) @pollux.one / rip-udo-ulfkotte
| author | pollux.one |
| permlink | rip-udo-ulfkotte |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495412/Trx f36c7c69f10ec06a158fc87c8df5e864975eaa9c |
View Raw JSON Data
{
"block": 8495412,
"op": [
"vote",
{
"author": "pollux.one",
"permlink": "rip-udo-ulfkotte",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:29:18",
"trx_id": "f36c7c69f10ec06a158fc87c8df5e864975eaa9c",
"trx_in_block": 0,
"virtual_op": 0
}| author | stevemilne |
| permlink | the-real-truth-about-the-trump-intelligence-dossier-and-the-mi6-agent-involved |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495373/Trx df20075b621ff562e880f2beebfe96e5418c7f32 |
View Raw JSON Data
{
"block": 8495373,
"op": [
"vote",
{
"author": "stevemilne",
"permlink": "the-real-truth-about-the-trump-intelligence-dossier-and-the-mi6-agent-involved",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:27:21",
"trx_id": "df20075b621ff562e880f2beebfe96e5418c7f32",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / civil-rights-fairness-fascism
prolicupvoted (100.00%) @larkenrose / civil-rights-fairness-fascism
| author | larkenrose |
| permlink | civil-rights-fairness-fascism |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495351/Trx b8b3bb547f438cef20931cf2481f07ab64e933f6 |
View Raw JSON Data
{
"block": 8495351,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "civil-rights-fairness-fascism",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:26:15",
"trx_id": "b8b3bb547f438cef20931cf2481f07ab64e933f6",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / star-spangled-bullpoop
prolicupvoted (100.00%) @larkenrose / star-spangled-bullpoop
| author | larkenrose |
| permlink | star-spangled-bullpoop |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495350/Trx a2e4382f6474ea81d92daef3da89331c9430e2c2 |
View Raw JSON Data
{
"block": 8495350,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "star-spangled-bullpoop",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:26:12",
"trx_id": "a2e4382f6474ea81d92daef3da89331c9430e2c2",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / a-test-of-consistency
prolicupvoted (100.00%) @larkenrose / a-test-of-consistency
| author | larkenrose |
| permlink | a-test-of-consistency |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495348/Trx aee1afee778494a567ae547a338afc5950c5ff0d |
View Raw JSON Data
{
"block": 8495348,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "a-test-of-consistency",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:26:06",
"trx_id": "aee1afee778494a567ae547a338afc5950c5ff0d",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / dissecting-the-statist-mind
prolicupvoted (100.00%) @larkenrose / dissecting-the-statist-mind
| author | larkenrose |
| permlink | dissecting-the-statist-mind |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495347/Trx 04beb1c3ae7d60984ae443bf9dbd65f6a8f20cd1 |
View Raw JSON Data
{
"block": 8495347,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "dissecting-the-statist-mind",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:26:03",
"trx_id": "04beb1c3ae7d60984ae443bf9dbd65f6a8f20cd1",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / can-we-trust-the-market
prolicupvoted (100.00%) @larkenrose / can-we-trust-the-market
| author | larkenrose |
| permlink | can-we-trust-the-market |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495345/Trx e09ef807bb93cce96b437d4d0aa90722d714a9a1 |
View Raw JSON Data
{
"block": 8495345,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "can-we-trust-the-market",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:25:57",
"trx_id": "e09ef807bb93cce96b437d4d0aa90722d714a9a1",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / dmv-a-study-in-stupidity
prolicupvoted (100.00%) @larkenrose / dmv-a-study-in-stupidity
| author | larkenrose |
| permlink | dmv-a-study-in-stupidity |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495335/Trx c6e7a714a15640f3e450c598f541d34c6b16cb22 |
View Raw JSON Data
{
"block": 8495335,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "dmv-a-study-in-stupidity",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:25:27",
"trx_id": "c6e7a714a15640f3e450c598f541d34c6b16cb22",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / in-your-home-town
prolicupvoted (100.00%) @larkenrose / in-your-home-town
| author | larkenrose |
| permlink | in-your-home-town |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495334/Trx 9094048c036864cbe6127a73aed6e49896a87ccc |
View Raw JSON Data
{
"block": 8495334,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "in-your-home-town",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:25:24",
"trx_id": "9094048c036864cbe6127a73aed6e49896a87ccc",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / good-intentions-politics-evil-crap
prolicupvoted (100.00%) @larkenrose / good-intentions-politics-evil-crap
| author | larkenrose |
| permlink | good-intentions-politics-evil-crap |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495331/Trx 41db5a812c7224a47a9e5626872bb7aa3b7aef99 |
View Raw JSON Data
{
"block": 8495331,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "good-intentions-politics-evil-crap",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:25:15",
"trx_id": "41db5a812c7224a47a9e5626872bb7aa3b7aef99",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / choosing-the-battleground
prolicupvoted (100.00%) @larkenrose / choosing-the-battleground
| author | larkenrose |
| permlink | choosing-the-battleground |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495330/Trx 39ea0daaf8c48bd91261af131936bb5d8a14a6c1 |
View Raw JSON Data
{
"block": 8495330,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "choosing-the-battleground",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:25:12",
"trx_id": "39ea0daaf8c48bd91261af131936bb5d8a14a6c1",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / all-i-am-asking
prolicupvoted (100.00%) @larkenrose / all-i-am-asking
| author | larkenrose |
| permlink | all-i-am-asking |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495226/Trx aba2c445451528a2dc1c80489d9ed910ad69665b |
View Raw JSON Data
{
"block": 8495226,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "all-i-am-asking",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:20:00",
"trx_id": "aba2c445451528a2dc1c80489d9ed910ad69665b",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / line-in-the-sand
prolicupvoted (100.00%) @larkenrose / line-in-the-sand
| author | larkenrose |
| permlink | line-in-the-sand |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495226/Trx 8a9dce376d78e2fb8dfd45d01bf657ca7417a32a |
View Raw JSON Data
{
"block": 8495226,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "line-in-the-sand",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:20:00",
"trx_id": "8a9dce376d78e2fb8dfd45d01bf657ca7417a32a",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / how-to-enslave-the-world
prolicupvoted (100.00%) @larkenrose / how-to-enslave-the-world
| author | larkenrose |
| permlink | how-to-enslave-the-world |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495225/Trx dc03579e3b8195d7340f0341c930125145acf862 |
View Raw JSON Data
{
"block": 8495225,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "how-to-enslave-the-world",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:57",
"trx_id": "dc03579e3b8195d7340f0341c930125145acf862",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / political-mythology-101-part-one
prolicupvoted (100.00%) @larkenrose / political-mythology-101-part-one
| author | larkenrose |
| permlink | political-mythology-101-part-one |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495224/Trx bc09097f65e0135aab233940b2bbacc43fbf811d |
View Raw JSON Data
{
"block": 8495224,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "political-mythology-101-part-one",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:54",
"trx_id": "bc09097f65e0135aab233940b2bbacc43fbf811d",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / political-mythology-101-part-three
prolicupvoted (100.00%) @larkenrose / political-mythology-101-part-three
| author | larkenrose |
| permlink | political-mythology-101-part-three |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495222/Trx 9d46e750bf77f4aa49b0beaee648c36258a1cd82 |
View Raw JSON Data
{
"block": 8495222,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "political-mythology-101-part-three",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:48",
"trx_id": "9d46e750bf77f4aa49b0beaee648c36258a1cd82",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / love-it-or-leave-it
prolicupvoted (100.00%) @larkenrose / love-it-or-leave-it
| author | larkenrose |
| permlink | love-it-or-leave-it |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495220/Trx 8cc4ed8505d3c3e46a18bbd4086fb24ba857f614 |
View Raw JSON Data
{
"block": 8495220,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "love-it-or-leave-it",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:42",
"trx_id": "8cc4ed8505d3c3e46a18bbd4086fb24ba857f614",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / you-should-be-offended
prolicupvoted (100.00%) @larkenrose / you-should-be-offended
| author | larkenrose |
| permlink | you-should-be-offended |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495217/Trx 8096c986db43968c0d951ac7e0ab02712795442c |
View Raw JSON Data
{
"block": 8495217,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "you-should-be-offended",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:33",
"trx_id": "8096c986db43968c0d951ac7e0ab02712795442c",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / government-evil-no-joke
prolicupvoted (100.00%) @larkenrose / government-evil-no-joke
| author | larkenrose |
| permlink | government-evil-no-joke |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495215/Trx 113d0a5154cb14f64d627457fcdfe4bcabb66def |
View Raw JSON Data
{
"block": 8495215,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "government-evil-no-joke",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:27",
"trx_id": "113d0a5154cb14f64d627457fcdfe4bcabb66def",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / arguing-with-yourself
prolicupvoted (100.00%) @larkenrose / arguing-with-yourself
| author | larkenrose |
| permlink | arguing-with-yourself |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495209/Trx abe0788e1425c53edcd6584394b6b75b219fc9e1 |
View Raw JSON Data
{
"block": 8495209,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "arguing-with-yourself",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:19:09",
"trx_id": "abe0788e1425c53edcd6584394b6b75b219fc9e1",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / principles-and-predictions
prolicupvoted (100.00%) @larkenrose / principles-and-predictions
| author | larkenrose |
| permlink | principles-and-predictions |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495203/Trx 580b5a1333622bc9f3160587cbc7e4b6a2ebcc48 |
View Raw JSON Data
{
"block": 8495203,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "principles-and-predictions",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:51",
"trx_id": "580b5a1333622bc9f3160587cbc7e4b6a2ebcc48",
"trx_in_block": 13,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / the-power-vacuum-argument
prolicupvoted (100.00%) @larkenrose / the-power-vacuum-argument
| author | larkenrose |
| permlink | the-power-vacuum-argument |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495203/Trx 50bbfd48e93e2f6565ff5d15c029517c4f196370 |
View Raw JSON Data
{
"block": 8495203,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "the-power-vacuum-argument",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:51",
"trx_id": "50bbfd48e93e2f6565ff5d15c029517c4f196370",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / rebel-posers
prolicupvoted (100.00%) @larkenrose / rebel-posers
| author | larkenrose |
| permlink | rebel-posers |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495202/Trx 41c95b39919fbd99dda690431a7881cad0cfee70 |
View Raw JSON Data
{
"block": 8495202,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "rebel-posers",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:48",
"trx_id": "41c95b39919fbd99dda690431a7881cad0cfee70",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / law-and-order-sucks
prolicupvoted (100.00%) @larkenrose / law-and-order-sucks
| author | larkenrose |
| permlink | law-and-order-sucks |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495201/Trx a8d7b081b0c23f019dbb05b876c1189273c6fad7 |
View Raw JSON Data
{
"block": 8495201,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "law-and-order-sucks",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:45",
"trx_id": "a8d7b081b0c23f019dbb05b876c1189273c6fad7",
"trx_in_block": 5,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / supply-and-demand-steemit-style
prolicupvoted (100.00%) @larkenrose / supply-and-demand-steemit-style
| author | larkenrose |
| permlink | supply-and-demand-steemit-style |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495199/Trx 5059dee3deb1946338a95272bd12938601211908 |
View Raw JSON Data
{
"block": 8495199,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "supply-and-demand-steemit-style",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:39",
"trx_id": "5059dee3deb1946338a95272bd12938601211908",
"trx_in_block": 3,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / never-forget
prolicupvoted (100.00%) @larkenrose / never-forget
| author | larkenrose |
| permlink | never-forget |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495198/Trx b39740bd694219a775cc7cb5130cee45354f8005 |
View Raw JSON Data
{
"block": 8495198,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "never-forget",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:36",
"trx_id": "b39740bd694219a775cc7cb5130cee45354f8005",
"trx_in_block": 9,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / raising-human-livestock
prolicupvoted (100.00%) @larkenrose / raising-human-livestock
| author | larkenrose |
| permlink | raising-human-livestock |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495196/Trx b721b8dbeeee10612e9eb2f954f21ff172b95d12 |
View Raw JSON Data
{
"block": 8495196,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "raising-human-livestock",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:30",
"trx_id": "b721b8dbeeee10612e9eb2f954f21ff172b95d12",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / authoritarianism-as-security-blanket
prolicupvoted (100.00%) @larkenrose / authoritarianism-as-security-blanket
| author | larkenrose |
| permlink | authoritarianism-as-security-blanket |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495195/Trx 11dbc9841c11413052cac5bc95ad33ec73f09fd1 |
View Raw JSON Data
{
"block": 8495195,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "authoritarianism-as-security-blanket",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:27",
"trx_id": "11dbc9841c11413052cac5bc95ad33ec73f09fd1",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / except-when-we-do-it
prolicupvoted (100.00%) @larkenrose / except-when-we-do-it
| author | larkenrose |
| permlink | except-when-we-do-it |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495194/Trx 75e2bff36671e57400a13a2019e2a06a1a4b15f1 |
View Raw JSON Data
{
"block": 8495194,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "except-when-we-do-it",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:24",
"trx_id": "75e2bff36671e57400a13a2019e2a06a1a4b15f1",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / democracy-tricking-the-profoundly-gullible
prolicupvoted (100.00%) @larkenrose / democracy-tricking-the-profoundly-gullible
| author | larkenrose |
| permlink | democracy-tricking-the-profoundly-gullible |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495193/Trx 8b608134c8e113685757b5c5f25152c20b1721a5 |
View Raw JSON Data
{
"block": 8495193,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "democracy-tricking-the-profoundly-gullible",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:21",
"trx_id": "8b608134c8e113685757b5c5f25152c20b1721a5",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / capitalism-good-or-bad-part-1-of-a-series
prolicupvoted (100.00%) @larkenrose / capitalism-good-or-bad-part-1-of-a-series
| author | larkenrose |
| permlink | capitalism-good-or-bad-part-1-of-a-series |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495192/Trx 2d2922c6f34a3ebbdd9aaa18af1947f07b616bb9 |
View Raw JSON Data
{
"block": 8495192,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "capitalism-good-or-bad-part-1-of-a-series",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:18",
"trx_id": "2d2922c6f34a3ebbdd9aaa18af1947f07b616bb9",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / collective-vs-private-ownership-part-2-of-a-series
prolicupvoted (100.00%) @larkenrose / collective-vs-private-ownership-part-2-of-a-series
| author | larkenrose |
| permlink | collective-vs-private-ownership-part-2-of-a-series |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495191/Trx 476495b7e334ec11ab34f93f49784b00d692531b |
View Raw JSON Data
{
"block": 8495191,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "collective-vs-private-ownership-part-2-of-a-series",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:15",
"trx_id": "476495b7e334ec11ab34f93f49784b00d692531b",
"trx_in_block": 3,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / money-good-or-bad-part-3-of-a-series
prolicupvoted (100.00%) @larkenrose / money-good-or-bad-part-3-of-a-series
| author | larkenrose |
| permlink | money-good-or-bad-part-3-of-a-series |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495191/Trx 5b6918a7decaf7759409386cd22fd55eadaef2f6 |
View Raw JSON Data
{
"block": 8495191,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "money-good-or-bad-part-3-of-a-series",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:18:15",
"trx_id": "5b6918a7decaf7759409386cd22fd55eadaef2f6",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @steemvest17 / re-larkenrose-what-muslims-believe-20161218t174756053z
prolicupvoted (100.00%) @steemvest17 / re-larkenrose-what-muslims-believe-20161218t174756053z
| author | steemvest17 |
| permlink | re-larkenrose-what-muslims-believe-20161218t174756053z |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495152/Trx a54b39b9186c7b17cd82ae13859f596bc55d5029 |
View Raw JSON Data
{
"block": 8495152,
"op": [
"vote",
{
"author": "steemvest17",
"permlink": "re-larkenrose-what-muslims-believe-20161218t174756053z",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:16:18",
"trx_id": "a54b39b9186c7b17cd82ae13859f596bc55d5029",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / what-muslims-believe
prolicupvoted (100.00%) @larkenrose / what-muslims-believe
| author | larkenrose |
| permlink | what-muslims-believe |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495129/Trx b3ea1e3986699f886fe7f1586a1212bce65588fa |
View Raw JSON Data
{
"block": 8495129,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "what-muslims-believe",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:15:09",
"trx_id": "b3ea1e3986699f886fe7f1586a1212bce65588fa",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / elm-grove-song
prolicupvoted (100.00%) @larkenrose / elm-grove-song
| author | larkenrose |
| permlink | elm-grove-song |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495093/Trx 25087009f1180977bcd106e2c3dbf9bd469ea0ca |
View Raw JSON Data
{
"block": 8495093,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "elm-grove-song",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:13:21",
"trx_id": "25087009f1180977bcd106e2c3dbf9bd469ea0ca",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / freedom-principles-and-immigration
prolicupvoted (100.00%) @larkenrose / freedom-principles-and-immigration
| author | larkenrose |
| permlink | freedom-principles-and-immigration |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495092/Trx 610474842539583d70bcbfbcfef2699854b1f1f8 |
View Raw JSON Data
{
"block": 8495092,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "freedom-principles-and-immigration",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:13:18",
"trx_id": "610474842539583d70bcbfbcfef2699854b1f1f8",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / hierarchy-good-or-bad-part-4-of-a-series
prolicupvoted (100.00%) @larkenrose / hierarchy-good-or-bad-part-4-of-a-series
| author | larkenrose |
| permlink | hierarchy-good-or-bad-part-4-of-a-series |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495092/Trx 0554e0275558fbd24ce8be886fd23a8dceef9e71 |
View Raw JSON Data
{
"block": 8495092,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "hierarchy-good-or-bad-part-4-of-a-series",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:13:18",
"trx_id": "0554e0275558fbd24ce8be886fd23a8dceef9e71",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / wanted-road-pirate
prolicupvoted (100.00%) @larkenrose / wanted-road-pirate
| author | larkenrose |
| permlink | wanted-road-pirate |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495090/Trx e407acb6e2f488f390fce84c40cf99c96ced4581 |
View Raw JSON Data
{
"block": 8495090,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "wanted-road-pirate",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:13:12",
"trx_id": "e407acb6e2f488f390fce84c40cf99c96ced4581",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / it-s-a-free-country
prolicupvoted (100.00%) @larkenrose / it-s-a-free-country
| author | larkenrose |
| permlink | it-s-a-free-country |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495087/Trx 5cbb41df2d021fdf380a148a307123af386f1ee8 |
View Raw JSON Data
{
"block": 8495087,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "it-s-a-free-country",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:13:03",
"trx_id": "5cbb41df2d021fdf380a148a307123af386f1ee8",
"trx_in_block": 0,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / a-tyrant-s-eye-view
prolicupvoted (100.00%) @larkenrose / a-tyrant-s-eye-view
| author | larkenrose |
| permlink | a-tyrant-s-eye-view |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495085/Trx 8d5b84305aa7ce21b78b3b77797ba9d500140a2d |
View Raw JSON Data
{
"block": 8495085,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "a-tyrant-s-eye-view",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:12:57",
"trx_id": "8d5b84305aa7ce21b78b3b77797ba9d500140a2d",
"trx_in_block": 3,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / government-always-a-bad-deal
prolicupvoted (100.00%) @larkenrose / government-always-a-bad-deal
| author | larkenrose |
| permlink | government-always-a-bad-deal |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495083/Trx 8f1145e88d38fdeb4fee79ca8a6388b0a9eb7ecf |
View Raw JSON Data
{
"block": 8495083,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "government-always-a-bad-deal",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:12:51",
"trx_id": "8f1145e88d38fdeb4fee79ca8a6388b0a9eb7ecf",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / hope-and-change-no-really
prolicupvoted (100.00%) @larkenrose / hope-and-change-no-really
| author | larkenrose |
| permlink | hope-and-change-no-really |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495082/Trx 4a4b23d496eedf4c5b7a85297f91419632d71daf |
View Raw JSON Data
{
"block": 8495082,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "hope-and-change-no-really",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:12:48",
"trx_id": "4a4b23d496eedf4c5b7a85297f91419632d71daf",
"trx_in_block": 2,
"virtual_op": 0
}prolicupvoted (100.00%) @larkenrose / oppression-symptoms-and-causes
prolicupvoted (100.00%) @larkenrose / oppression-symptoms-and-causes
| author | larkenrose |
| permlink | oppression-symptoms-and-causes |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8495081/Trx 7786b5e2e25149a724bc88c4401cf2d8d15f4e70 |
View Raw JSON Data
{
"block": 8495081,
"op": [
"vote",
{
"author": "larkenrose",
"permlink": "oppression-symptoms-and-causes",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:12:45",
"trx_id": "7786b5e2e25149a724bc88c4401cf2d8d15f4e70",
"trx_in_block": 1,
"virtual_op": 0
}prolicfollowed @larkenrose
prolicfollowed @larkenrose
| id | follow |
| json | ["follow",{"follower":"prolic","following":"larkenrose","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["prolic"] |
| Transaction Info | Block #8495078/Trx e3932778c6c6608e4176386de859d7b898057abd |
View Raw JSON Data
{
"block": 8495078,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"prolic\",\"following\":\"larkenrose\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"prolic"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T10:12:36",
"trx_id": "e3932778c6c6608e4176386de859d7b898057abd",
"trx_in_block": 1,
"virtual_op": 0
}zulfahmiauliaupvoted (100.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
zulfahmiauliaupvoted (100.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| voter | zulfahmiaulia |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8493740/Trx e959ca1ca4d5ced71baca95ff0415b091cee88ac |
View Raw JSON Data
{
"block": 8493740,
"op": [
"vote",
{
"author": "prolic",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"voter": "zulfahmiaulia",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T09:05:39",
"trx_id": "e959ca1ca4d5ced71baca95ff0415b091cee88ac",
"trx_in_block": 0,
"virtual_op": 0
}fyrstikkenupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
fyrstikkenupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| voter | fyrstikken |
| weight | 200 (2.00%) |
| Transaction Info | Block #8493671/Trx fc8c76c691eda7e380fdcc51e9433a297af4f0e0 |
View Raw JSON Data
{
"block": 8493671,
"op": [
"vote",
{
"author": "prolic",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"voter": "fyrstikken",
"weight": 200
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T09:02:12",
"trx_id": "fc8c76c691eda7e380fdcc51e9433a297af4f0e0",
"trx_in_block": 0,
"virtual_op": 0
}fyrst-witnessupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
fyrst-witnessupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| voter | fyrst-witness |
| weight | 200 (2.00%) |
| Transaction Info | Block #8493623/Trx 7ac153bb33c9624b723d58874beb420ff04d306b |
View Raw JSON Data
{
"block": 8493623,
"op": [
"vote",
{
"author": "prolic",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"voter": "fyrst-witness",
"weight": 200
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T08:59:48",
"trx_id": "7ac153bb33c9624b723d58874beb420ff04d306b",
"trx_in_block": 1,
"virtual_op": 0
}steemspeakupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
steemspeakupvoted (2.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| voter | steemspeak |
| weight | 200 (2.00%) |
| Transaction Info | Block #8493565/Trx 47b781402c79c3fd94c8e81ad3f6517624e2fde1 |
View Raw JSON Data
{
"block": 8493565,
"op": [
"vote",
{
"author": "prolic",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"voter": "steemspeak",
"weight": 200
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T08:56:54",
"trx_id": "47b781402c79c3fd94c8e81ad3f6517624e2fde1",
"trx_in_block": 1,
"virtual_op": 0
}prolicupvoted (100.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
prolicupvoted (100.00%) @prolic / inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| voter | prolic |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8493104/Trx 262ceb2096e026d3d37c2556b3251717ea252dcf |
View Raw JSON Data
{
"block": 8493104,
"op": [
"vote",
{
"author": "prolic",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"voter": "prolic",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T08:33:51",
"trx_id": "262ceb2096e026d3d37c2556b3251717ea252dcf",
"trx_in_block": 0,
"virtual_op": 0
}prolicpublished a new post: inheritance-with-aggregate-roots-in-proophevent-store
prolicpublished a new post: inheritance-with-aggregate-roots-in-proophevent-store
| author | prolic |
| body | If you want to make inheritance work with aggregate roots using a common repository for all subtypes, this can be achieved very easily. You need the latest ProophEvent-Store v6.1 (http://getprooph.org/) to do this. ## An example Consider the following use case: ```php <?php abstract class User extends \Prooph\EventSourcing\AggregateRoot { protected $name; protected $email; public function name() { return $this->name; } public function email() { return $this->email; } protected function whenUserWasRegisterd(UserWasRegisterd $event) { $this->name = $event->name(); $this->email = $event->email(); } } class Admin extends User { public static function register($name, $email) { $self = new self(); $self->recordThat(UserWasRegisterd::withData('admin', $name, $email); return $self; } } class Member extends User { public static function register($name, $email) { $self = new self(); $self->recordThat(UserWasRegisterd::withData('member', $name, $email); return $self; } } ``` So in order to make this work, you need 3 small changes in your application. ## Step 1: Create a UserAggregateTranslator ```php <?php final class UserAggregateTranslator extends \Prooph\EventSourcing\EventStoreIntegration\AggregateTranslator { /** * @param \Prooph\EventStore\Aggregate\AggregateType $aggregateType * @param \Iterator $historyEvents * @return object reconstructed AggregateRoot */ public function reconstituteAggregateFromHistory( \Prooph\EventStore\Aggregate\AggregateType $aggregateType, \Iterator $historyEvents ) { $aggregateRootDecorator = $this->getAggregateRootDecorator(); $firstEvent = $historyEvents->current(); $type = $firstEvent->type(); if ($type === 'admin') { return $aggregateRootDecorator->fromHistory(Admin::class, $historyEvents); } elseif ($type === 'member') { return $aggregateRootDecorator->fromHistory(Member::class, $historyEvents); } } } ``` ## Step 2: Change the assertion method in the EventStoreUserCollection ```php <?php final class EventStoreUserCollection extends \Prooph\EventStore\Aggregate\AggregateRepository { public function add(User $user) { $this->addAggregateRoot($user); } public function get(UserId $userId) { return $this->getAggregateRoot($userId->toString()); } protected function assertAggregateType($eventSourcedAggregateRoot) { \Assert\Assertion::isInstanceOf($eventSourcedAggregateRoot, User::class); } } ``` ## Step 3: Make use of your custom AggregateTranslator ```php <?php final class EventStoreUserCollectionFactory { public function __invoke(ContainerInterface $container) { return new EventStoreUserCollection( $container->get(EventStore::class), AggregateType::fromAggregateRootClass(User::class), new UserAggregateTranslator() ); } } ``` If you use the provided container factory (\Prooph\EventStore\Container\Aggregate\AbstractAggregateRepositoryFactory) then you can also just change the `aggregate_translator` key in your config to point to the new `UserAggregateTranslator` and register the `UserAggregateTranslator` in your container. |
| json metadata | {"tags":["programming","php","prooph","eventsourcing","ddd"],"links":["http://getprooph.org/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | programming |
| permlink | inheritance-with-aggregate-roots-in-proophevent-store |
| title | Inheritance with Aggregate Roots in ProophEvent-Store |
| Transaction Info | Block #8493104/Trx 262ceb2096e026d3d37c2556b3251717ea252dcf |
View Raw JSON Data
{
"block": 8493104,
"op": [
"comment",
{
"author": "prolic",
"body": "If you want to make inheritance work with aggregate roots using a common repository for all subtypes, this can be achieved very easily. You need the latest ProophEvent-Store v6.1 (http://getprooph.org/) to do this.\n\n## An example\n\nConsider the following use case:\n\n```php\n<?php\nabstract class User extends \\Prooph\\EventSourcing\\AggregateRoot\n{\n protected $name;\n\n protected $email;\n\n public function name()\n {\n return $this->name;\n }\n\n public function email()\n {\n return $this->email;\n }\n\n protected function whenUserWasRegisterd(UserWasRegisterd $event)\n {\n $this->name = $event->name();\n $this->email = $event->email();\n }\n}\n\nclass Admin extends User\n{\n public static function register($name, $email)\n {\n $self = new self();\n $self->recordThat(UserWasRegisterd::withData('admin', $name, $email);\n\n return $self;\n }\n}\n\nclass Member extends User\n{\n public static function register($name, $email)\n {\n $self = new self();\n $self->recordThat(UserWasRegisterd::withData('member', $name, $email);\n\n return $self;\n }\n}\n```\n\nSo in order to make this work, you need 3 small changes in your application.\n\n\n## Step 1: Create a UserAggregateTranslator\n\n```php\n<?php\nfinal class UserAggregateTranslator extends \\Prooph\\EventSourcing\\EventStoreIntegration\\AggregateTranslator\n{\n /**\n * @param \\Prooph\\EventStore\\Aggregate\\AggregateType $aggregateType\n * @param \\Iterator $historyEvents\n * @return object reconstructed AggregateRoot\n */\n public function reconstituteAggregateFromHistory(\n \\Prooph\\EventStore\\Aggregate\\AggregateType $aggregateType, \n \\Iterator $historyEvents\n ) {\n $aggregateRootDecorator = $this->getAggregateRootDecorator();\n\n $firstEvent = $historyEvents->current();\n $type = $firstEvent->type();\n\n if ($type === 'admin') {\n return $aggregateRootDecorator->fromHistory(Admin::class, $historyEvents);\n } elseif ($type === 'member') {\n return $aggregateRootDecorator->fromHistory(Member::class, $historyEvents);\n }\n }\n}\n```\n\n\n## Step 2: Change the assertion method in the EventStoreUserCollection\n\n```php\n<?php\nfinal class EventStoreUserCollection extends \n \\Prooph\\EventStore\\Aggregate\\AggregateRepository\n{\n public function add(User $user)\n {\n $this->addAggregateRoot($user);\n }\n public function get(UserId $userId)\n {\n return $this->getAggregateRoot($userId->toString());\n }\n protected function assertAggregateType($eventSourcedAggregateRoot)\n {\n \\Assert\\Assertion::isInstanceOf($eventSourcedAggregateRoot, User::class);\n }\n}\n```\n\n\n## Step 3: Make use of your custom AggregateTranslator\n\n```php\n<?php\nfinal class EventStoreUserCollectionFactory\n{\n public function __invoke(ContainerInterface $container)\n {\n return new EventStoreUserCollection(\n $container->get(EventStore::class),\n AggregateType::fromAggregateRootClass(User::class),\n new UserAggregateTranslator()\n );\n }\n}\n```\n\n\nIf you use the provided container factory (\\Prooph\\EventStore\\Container\\Aggregate\\AbstractAggregateRepositoryFactory) then you can also just change the `aggregate_translator` key in your config to point to the new `UserAggregateTranslator` and register the `UserAggregateTranslator` in your container.",
"json_metadata": "{\"tags\":[\"programming\",\"php\",\"prooph\",\"eventsourcing\",\"ddd\"],\"links\":[\"http://getprooph.org/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "programming",
"permlink": "inheritance-with-aggregate-roots-in-proophevent-store",
"title": "Inheritance with Aggregate Roots in ProophEvent-Store"
}
],
"op_in_trx": 0,
"timestamp": "2017-01-15T08:33:51",
"trx_id": "262ceb2096e026d3d37c2556b3251717ea252dcf",
"trx_in_block": 0,
"virtual_op": 0
}prolicfollowed @dollarvigilante
prolicfollowed @dollarvigilante
| id | follow |
| json | ["follow",{"follower":"prolic","following":"dollarvigilante","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["prolic"] |
| Transaction Info | Block #8466449/Trx 574fcdc34715cdf635fca47fda948a43682116b6 |
View Raw JSON Data
{
"block": 8466449,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"prolic\",\"following\":\"dollarvigilante\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"prolic"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-01-14T10:18:51",
"trx_id": "574fcdc34715cdf635fca47fda948a43682116b6",
"trx_in_block": 0,
"virtual_op": 0
}breezinupvoted (100.00%) @prolic / authorization-and-event-sourcing-with-prooph-and-zf2-zf3
breezinupvoted (100.00%) @prolic / authorization-and-event-sourcing-with-prooph-and-zf2-zf3
| author | prolic |
| permlink | authorization-and-event-sourcing-with-prooph-and-zf2-zf3 |
| voter | breezin |
| weight | 10000 (100.00%) |
| Transaction Info | Block #8465663/Trx 32183ed140d588e3753c917464d2bb042ab1b6ce |
View Raw JSON Data
{
"block": 8465663,
"op": [
"vote",
{
"author": "prolic",
"permlink": "authorization-and-event-sourcing-with-prooph-and-zf2-zf3",
"voter": "breezin",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-01-14T09:39:30",
"trx_id": "32183ed140d588e3753c917464d2bb042ab1b6ce",
"trx_in_block": 0,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress53.10%
{
"voting_manabar": {
"current_mana": 9800,
"last_update_time": 1505913831
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1484370762
},
"rc_account": {
"account": "prolic",
"max_rc": "85481304625",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "85481304625",
"last_update_time": 1537887600
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"https://avatars2.githubusercontent.com/u/394428?v=3&s=460","about":"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist","location":"Philippines","website":"http://www.sasaprolic.com/"} |
| JSON METADATA | |
| profile | {"profile_image":"https://avatars2.githubusercontent.com/u/394428?v=3&s=460","about":"Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist","location":"Philippines","website":"http://www.sasaprolic.com/"} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "https://avatars2.githubusercontent.com/u/394428?v=3&s=460",
"about": "Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist",
"location": "Philippines",
"website": "http://www.sasaprolic.com/"
}
},
"json_metadata": {
"profile": {
"profile_image": "https://avatars2.githubusercontent.com/u/394428?v=3&s=460",
"about": "Open Source Software Developer, Prooph Maintainer and Anarcho-Capitalist",
"location": "Philippines",
"website": "http://www.sasaprolic.com/"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM79AAYqqzwugCoMzfP6FZ75nfP453BgpeFJ9pQPLm36jP6sK1Fy1/1
Active
Single Signature
Public Keys
STM51ryKkUn9KHP7Y5E1ag686vTtqH9hnPxmq5wssuMvLgsQKiQnx1/1
Posting
Single Signature
Public Keys
STM5rmSzdA38vQCajTEpzfCDAXpwzPAEPh4rmDLa7PaUT7DtWKgg61/1
App Permissions
@dtube.app1/1
Memo
STM6HFc88q1yLFkY5bPjjNW1QBAJyXrLpD3Ash3RKbSfLo1F1mvP1
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM79AAYqqzwugCoMzfP6FZ75nfP453BgpeFJ9pQPLm36jP6sK1Fy",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM51ryKkUn9KHP7Y5E1ag686vTtqH9hnPxmq5wssuMvLgsQKiQnx",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [
[
"dtube.app",
1
]
],
"key_auths": [
[
"STM5rmSzdA38vQCajTEpzfCDAXpwzPAEPh4rmDLa7PaUT7DtWKgg6",
1
]
],
"weight_threshold": 1
},
"memo": "STM6HFc88q1yLFkY5bPjjNW1QBAJyXrLpD3Ash3RKbSfLo1F1mvP1"
}Witness Votes
0 / 30
No active witness votes.
[]