VOTING POWER0.00%
DOWNVOTE POWER0.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS83.69%
Net Worth
0.450USD
STEEM
8.358STEEM
SBD
0.000SBD
Own SP
0.000SP
Detailed Balance
| STEEM | ||
| balance | 8.358STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.000SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 0.000SP | SP |
| Effective Power | 0.000SP | 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": "8.358 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "0.000000 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 | friedger |
| id | 277543 |
| rank | 1,932,691 |
| reputation | 206638246617 |
| created | 2017-07-24T10:47:00 |
| recovery_account | steem |
| proxy | None |
| post_count | 24 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 2 |
| last_post | 2019-11-12T11:59:39 |
| last_root_post | 2018-08-03T21:55:09 |
| last_vote_time | 2019-11-25T13:42:12 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 8.358 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 0.000000 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 | 16275573452 |
| to_withdraw | 16275573452 |
| 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 | 2017-12-15T09:57:06 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 2020-06-03T15:28:45 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 277543,
"name": "friedger",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7bhsUMiQihW8ubSNuDT7wTXDXTzUebAbFDVj3R97MskS2uiGZP",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM61JrFvBfuigoeqhZECTZRrPD6SgNME1q3RPeiNxTZBhxa3QR5L",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM5epCNmJfExKRLV4nbTjQrQQUWqVF66fKCeT6FeNk3RuXYnqNdJ",
1
]
]
},
"memo_key": "STM6ww7oyUY6XhUTaQ3LLBPxUZT5DHSCvwMzA8rbNSzunzxFjRk7B",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0\"}}",
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0\"}}",
"proxy": "",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "2017-12-15T09:57:06",
"created": "2017-07-24T10:47:00",
"mined": false,
"recovery_account": "steem",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 24,
"can_vote": true,
"voting_manabar": {
"current_mana": "16275573452",
"last_update_time": 1588930305
},
"downvote_manabar": {
"current_mana": 4068893363,
"last_update_time": 1588930305
},
"voting_power": 0,
"balance": "8.358 STEEM",
"savings_balance": "0.000 STEEM",
"sbd_balance": "0.000 SBD",
"sbd_seconds": "0",
"sbd_seconds_last_update": "2020-06-03T15:28:45",
"sbd_last_interest_payment": "2020-06-03T15:28:45",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_steem": "0.000 STEEM",
"vesting_shares": "0.000000 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": "16275573452",
"to_withdraw": "16275573452",
"withdraw_routes": 0,
"curation_rewards": 0,
"posting_rewards": 14868,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 2,
"last_post": "2019-11-12T11:59:39",
"last_root_post": "2018-08-03T21:55:09",
"last_vote_time": "2019-11-25T13:42:12",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"vesting_balance": "0.000 STEEM",
"reputation": "206638246617",
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [
"steemitboard",
"utopian-io"
],
"tags_usage": [],
"guest_bloggers": [],
"rank": 1932691
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2024/08/19 12:19:27
2024/08/19 12:19:27
| parent author | friedger |
| parent permlink | adding-a-favorites-list-to-the-truffle-pet-shop-tutorial-via-blockstack |
| author | davidosik |
| permlink | sigswf |
| title | |
| body | Hi to all. I have two favorite dogs and I order all their products from Petlab Co. By buying in bulk and taking advantage of offers and discounts, I get high-quality products at reasonable prices. When I need advice, <a href="https://petlab-co.pissedconsumer.com/customer-service.html">petlab co customer service</a> always helps me. So I am completely satisfied with their service. |
| json metadata | {"links":["https://petlab-co.pissedconsumer.com/customer-service.html"],"app":"steemit/0.2"} |
| Transaction Info | Block #87864770/Trx 784a5d563e5442b9fea05d6819cbd51ae6319de4 |
View Raw JSON Data
{
"trx_id": "784a5d563e5442b9fea05d6819cbd51ae6319de4",
"block": 87864770,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2024-08-19T12:19:27",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "adding-a-favorites-list-to-the-truffle-pet-shop-tutorial-via-blockstack",
"author": "davidosik",
"permlink": "sigswf",
"title": "",
"body": "Hi to all. I have two favorite dogs and I order all their products from Petlab Co. By buying in bulk and taking advantage of offers and discounts, I get high-quality products at reasonable prices. When I need advice, <a href=\"https://petlab-co.pissedconsumer.com/customer-service.html\">petlab co customer service</a> always helps me. So I am completely satisfied with their service.",
"json_metadata": "{\"links\":[\"https://petlab-co.pissedconsumer.com/customer-service.html\"],\"app\":\"steemit/0.2\"}"
}
]
}friedgerreceived 2.091 STEEM from power down installment (2.499 SP)2020/07/01 15:38:39
friedgerreceived 2.091 STEEM from power down installment (2.499 SP)
2020/07/01 15:38:39
| from account | friedger |
| to account | friedger |
| withdrawn | 4068.893363 VESTS |
| deposited | 2.091 STEEM |
| Transaction Info | Block #44730750/Virtual Operation #2 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 44730750,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 2,
"timestamp": "2020-07-01T15:38:39",
"op": [
"fill_vesting_withdraw",
{
"from_account": "friedger",
"to_account": "friedger",
"withdrawn": "4068.893363 VESTS",
"deposited": "2.091 STEEM"
}
]
}friedgerreceived 2.090 STEEM from power down installment (2.499 SP)2020/06/24 15:38:39
friedgerreceived 2.090 STEEM from power down installment (2.499 SP)
2020/06/24 15:38:39
| from account | friedger |
| to account | friedger |
| withdrawn | 4068.893363 VESTS |
| deposited | 2.090 STEEM |
| Transaction Info | Block #44531170/Virtual Operation #12 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 44531170,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 12,
"timestamp": "2020-06-24T15:38:39",
"op": [
"fill_vesting_withdraw",
{
"from_account": "friedger",
"to_account": "friedger",
"withdrawn": "4068.893363 VESTS",
"deposited": "2.090 STEEM"
}
]
}friedgerreceived 2.089 STEEM from power down installment (2.499 SP)2020/06/17 15:38:39
friedgerreceived 2.089 STEEM from power down installment (2.499 SP)
2020/06/17 15:38:39
| from account | friedger |
| to account | friedger |
| withdrawn | 4068.893363 VESTS |
| deposited | 2.089 STEEM |
| Transaction Info | Block #44331702/Virtual Operation #2 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 44331702,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 2,
"timestamp": "2020-06-17T15:38:39",
"op": [
"fill_vesting_withdraw",
{
"from_account": "friedger",
"to_account": "friedger",
"withdrawn": "4068.893363 VESTS",
"deposited": "2.089 STEEM"
}
]
}friedgerreceived 2.088 STEEM from power down installment (2.499 SP)2020/06/10 15:38:39
friedgerreceived 2.088 STEEM from power down installment (2.499 SP)
2020/06/10 15:38:39
| from account | friedger |
| to account | friedger |
| withdrawn | 4068.893363 VESTS |
| deposited | 2.088 STEEM |
| Transaction Info | Block #44132544/Virtual Operation #2 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 44132544,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 2,
"timestamp": "2020-06-10T15:38:39",
"op": [
"fill_vesting_withdraw",
{
"from_account": "friedger",
"to_account": "friedger",
"withdrawn": "4068.893363 VESTS",
"deposited": "2.088 STEEM"
}
]
}friedgercustom json: notify2020/06/04 09:10:33
friedgercustom json: notify
2020/06/04 09:10:33
| required auths | [] |
| required posting auths | ["friedger"] |
| id | notify |
| json | ["setLastRead",{"date":"2020-06-04T09:10:33"}] |
| Transaction Info | Block #43954804/Trx 32bd35f003e37234cc30898690b02f764c77562b |
View Raw JSON Data
{
"trx_id": "32bd35f003e37234cc30898690b02f764c77562b",
"block": 43954804,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-06-04T09:10:33",
"op": [
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"friedger"
],
"id": "notify",
"json": "[\"setLastRead\",{\"date\":\"2020-06-04T09:10:33\"}]"
}
]
}friedgersent 118.366 STEEM to @deepcrypto8- "100816843"2020/06/03 15:42:12
friedgersent 118.366 STEEM to @deepcrypto8- "100816843"
2020/06/03 15:42:12
| from | friedger |
| to | deepcrypto8 |
| amount | 118.366 STEEM |
| memo | 100816843 |
| Transaction Info | Block #43934163/Trx a8970ec94eaf548b926be6c48552537dfc514586 |
View Raw JSON Data
{
"trx_id": "a8970ec94eaf548b926be6c48552537dfc514586",
"block": 43934163,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-06-03T15:42:12",
"op": [
"transfer",
{
"from": "friedger",
"to": "deepcrypto8",
"amount": "118.366 STEEM",
"memo": "100816843"
}
]
}friedgerstarted power down of 9.995 SP2020/06/03 15:38:39
friedgerstarted power down of 9.995 SP
2020/06/03 15:38:39
| account | friedger |
| vesting shares | 16275.573452 VESTS |
| Transaction Info | Block #43934092/Trx 29eba06bbb222c94e903f123e12d18d66a685062 |
View Raw JSON Data
{
"trx_id": "29eba06bbb222c94e903f123e12d18d66a685062",
"block": 43934092,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-06-03T15:38:39",
"op": [
"withdraw_vesting",
{
"account": "friedger",
"vesting_shares": "16275.573452 VESTS"
}
]
}2020/06/03 15:30:15
2020/06/03 15:30:15
| current owner | kdex |
| current orderid | 1591198210 |
| current pays | 118.352 STEEM |
| open owner | friedger |
| open orderid | 1591198101 |
| open pays | 23.545 SBD |
| Transaction Info | Block #43933927/Trx b32ff409a28d2fa5919ef54e20f7ad1de3b0aa72 |
View Raw JSON Data
{
"trx_id": "b32ff409a28d2fa5919ef54e20f7ad1de3b0aa72",
"block": 43933927,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 1,
"timestamp": "2020-06-03T15:30:15",
"op": [
"fill_order",
{
"current_owner": "kdex",
"current_orderid": 1591198210,
"current_pays": "118.352 STEEM",
"open_owner": "friedger",
"open_orderid": 1591198101,
"open_pays": "23.545 SBD"
}
]
}friedgerblockchain operation: limit order create2020/06/03 15:28:45
friedgerblockchain operation: limit order create
2020/06/03 15:28:45
| owner | friedger |
| orderid | 1591198101 |
| amount to sell | 23.545 SBD |
| min to receive | 118.352 STEEM |
| fill or kill | false |
| expiration | 2020-06-30T15:26:55 |
| Transaction Info | Block #43933897/Trx 476620f505035dc3396f9784d974ec19d50d7a31 |
View Raw JSON Data
{
"trx_id": "476620f505035dc3396f9784d974ec19d50d7a31",
"block": 43933897,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-06-03T15:28:45",
"op": [
"limit_order_create",
{
"owner": "friedger",
"orderid": 1591198101,
"amount_to_sell": "23.545 SBD",
"min_to_receive": "118.352 STEEM",
"fill_or_kill": false,
"expiration": "2020-06-30T15:26:55"
}
]
}2020/05/08 09:31:45
2020/05/08 09:31:45
| delegator | steem |
| delegatee | friedger |
| vesting shares | 0.000000 VESTS |
| Transaction Info | Block #43193353/Trx 5bbaa4792c80bd9ef5854748fba1f7132c53defd |
View Raw JSON Data
{
"trx_id": "5bbaa4792c80bd9ef5854748fba1f7132c53defd",
"block": 43193353,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-08T09:31:45",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "0.000000 VESTS"
}
]
}2020/02/24 14:01:06
2020/02/24 14:01:06
| delegator | steem |
| delegatee | friedger |
| vesting shares | 1960.959419 VESTS |
| Transaction Info | Block #41101114/Trx 2834f8c1f013b61e30aa3eb1004fac661e6dc7f5 |
View Raw JSON Data
{
"trx_id": "2834f8c1f013b61e30aa3eb1004fac661e6dc7f5",
"block": 41101114,
"trx_in_block": 20,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-02-24T14:01:06",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "1960.959419 VESTS"
}
]
}2020/02/02 14:04:36
2020/02/02 14:04:36
| delegator | steem |
| delegatee | friedger |
| vesting shares | 21314.756832 VESTS |
| Transaction Info | Block #40468984/Trx 81e1955c6aa74c8e85d8f1da85484d68ccf44314 |
View Raw JSON Data
{
"trx_id": "81e1955c6aa74c8e85d8f1da85484d68ccf44314",
"block": 40468984,
"trx_in_block": 34,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-02-02T14:04:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "21314.756832 VESTS"
}
]
}friedgerupvoted (100.00%) @runkod / runkod-update-12019/11/25 13:42:12
friedgerupvoted (100.00%) @runkod / runkod-update-1
2019/11/25 13:42:12
| voter | friedger |
| author | runkod |
| permlink | runkod-update-1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #38485083/Trx 0825abd0b77f33e53520c8f3188a6361d9f01894 |
View Raw JSON Data
{
"trx_id": "0825abd0b77f33e53520c8f3188a6361d9f01894",
"block": 38485083,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-25T13:42:12",
"op": [
"vote",
{
"voter": "friedger",
"author": "runkod",
"permlink": "runkod-update-1",
"weight": 10000
}
]
}runkodreplied to @friedger / re-friedger-20191116t171750531z2019/11/16 15:17:51
runkodreplied to @friedger / re-friedger-20191116t171750531z
2019/11/16 15:17:51
| parent author | friedger |
| parent permlink | q0uunf |
| author | runkod |
| permlink | re-friedger-20191116t171750531z |
| title | |
| body | For now, it works only with users who has blockstack id to be able to map/route to correct files. Maybe in future, there will be options 🙂 |
| json metadata | {"tags":["esteem"],"app":"esteem/2.2.2-surfer","format":"markdown+html","community":"esteem.app"} |
| Transaction Info | Block #38228261/Trx 5e4860f6cf343d5f63f6d05324637b3be6070b3d |
View Raw JSON Data
{
"trx_id": "5e4860f6cf343d5f63f6d05324637b3be6070b3d",
"block": 38228261,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-16T15:17:51",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "q0uunf",
"author": "runkod",
"permlink": "re-friedger-20191116t171750531z",
"title": "",
"body": "For now, it works only with users who has blockstack id to be able to map/route to correct files. Maybe in future, there will be options 🙂",
"json_metadata": "{\"tags\":[\"esteem\"],\"app\":\"esteem/2.2.2-surfer\",\"format\":\"markdown+html\",\"community\":\"esteem.app\"}"
}
]
}runkodreplied to @friedger / re-friedger-20191116t43042170z2019/11/16 02:30:42
runkodreplied to @friedger / re-friedger-20191116t43042170z
2019/11/16 02:30:42
| parent author | friedger |
| parent permlink | q0uua1 |
| author | runkod |
| permlink | re-friedger-20191116t43042170z |
| title | |
| body | Yes, we have some plans on this area too, once we have done detailed analysis of potential solutions. We will let community know 😉 |
| json metadata | {"tags":["esteem"],"app":"esteem/2.2.2-surfer","format":"markdown+html","community":"esteem.app"} |
| Transaction Info | Block #38212956/Trx abbc65e2ca5af1233761e345540debeaf8a9f1db |
View Raw JSON Data
{
"trx_id": "abbc65e2ca5af1233761e345540debeaf8a9f1db",
"block": 38212956,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-16T02:30:42",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "q0uua1",
"author": "runkod",
"permlink": "re-friedger-20191116t43042170z",
"title": "",
"body": "Yes, we have some plans on this area too, once we have done detailed analysis of potential solutions. We will let community know 😉",
"json_metadata": "{\"tags\":[\"esteem\"],\"app\":\"esteem/2.2.2-surfer\",\"format\":\"markdown+html\",\"community\":\"esteem.app\"}"
}
]
}2019/11/12 12:03:12
2019/11/12 12:03:12
| required auths | [] |
| required posting auths | ["friedger"] |
| id | follow |
| json | ["follow",{"follower":"friedger","following":"runkod","what":["blog"]}] |
| Transaction Info | Block #38109451/Trx dc6b86f5411dbd6af0ba3f39e6997cc1a63f110a |
View Raw JSON Data
{
"trx_id": "dc6b86f5411dbd6af0ba3f39e6997cc1a63f110a",
"block": 38109451,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-12T12:03:12",
"op": [
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"friedger"
],
"id": "follow",
"json": "[\"follow\",{\"follower\":\"friedger\",\"following\":\"runkod\",\"what\":[\"blog\"]}]"
}
]
}2019/11/12 11:59:39
2019/11/12 11:59:39
| parent author | runkod |
| parent permlink | runkod-under-the-hood |
| author | friedger |
| permlink | q0uunf |
| title | |
| body | > Is it working on a blockchain? Relatively. Blockstack keeps some records of Gaia storage on a blockchain. @runkod I would say that there is no record of gaia storage on a blockchain. Currently there is only the blockstack id / owner address association stored on chain. I don't even see a lookup of a blockstack id in the code. Would runkod work also for anonymous users (i.e. without a public blockstack id, just an address)? |
| json metadata | {"users":["runkod"],"app":"steemit/0.1"} |
| Transaction Info | Block #38109380/Trx 981cde86b81df609052b663c48cca79f7da0b004 |
View Raw JSON Data
{
"trx_id": "981cde86b81df609052b663c48cca79f7da0b004",
"block": 38109380,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-12T11:59:39",
"op": [
"comment",
{
"parent_author": "runkod",
"parent_permlink": "runkod-under-the-hood",
"author": "friedger",
"permlink": "q0uunf",
"title": "",
"body": "> Is it working on a blockchain?\nRelatively. Blockstack keeps some records of Gaia storage on a blockchain.\n\n@runkod I would say that there is no record of gaia storage on a blockchain. Currently there is only the blockstack id / owner address association stored on chain. I don't even see a lookup of a blockstack id in the code. Would runkod work also for anonymous users (i.e. without a public blockstack id, just an address)?",
"json_metadata": "{\"users\":[\"runkod\"],\"app\":\"steemit/0.1\"}"
}
]
}2019/11/12 11:51:39
2019/11/12 11:51:39
| parent author | ash |
| parent permlink | re-runkod-20191112t115946545z |
| author | friedger |
| permlink | q0uua1 |
| title | |
| body | Currently, runkod does not use any domain service, does it? It just uses the storage that the hosting user provides. |
| json metadata | {"app":"steemit/0.1"} |
| Transaction Info | Block #38109221/Trx 6ec28b8aa5bcd142699a14f571440b0c8ff5e6bb |
View Raw JSON Data
{
"trx_id": "6ec28b8aa5bcd142699a14f571440b0c8ff5e6bb",
"block": 38109221,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-12T11:51:39",
"op": [
"comment",
{
"parent_author": "ash",
"parent_permlink": "re-runkod-20191112t115946545z",
"author": "friedger",
"permlink": "q0uua1",
"title": "",
"body": "Currently, runkod does not use any domain service, does it? It just uses the storage that the hosting user provides.",
"json_metadata": "{\"app\":\"steemit/0.1\"}"
}
]
}friedgerupvoted (100.00%) @runkod / runkod-under-the-hood2019/11/12 11:48:45
friedgerupvoted (100.00%) @runkod / runkod-under-the-hood
2019/11/12 11:48:45
| voter | friedger |
| author | runkod |
| permlink | runkod-under-the-hood |
| weight | 10000 (100.00%) |
| Transaction Info | Block #38109163/Trx 8d4a4257e5b22b92f8a3b2cd95a512590664219a |
View Raw JSON Data
{
"trx_id": "8d4a4257e5b22b92f8a3b2cd95a512590664219a",
"block": 38109163,
"trx_in_block": 9,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-12T11:48:45",
"op": [
"vote",
{
"voter": "friedger",
"author": "runkod",
"permlink": "runkod-under-the-hood",
"weight": 10000
}
]
}2019/10/15 17:27:15
2019/10/15 17:27:15
| voter | runkod |
| author | friedger |
| permlink | pzcxv5 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #37311067/Trx 79f979b55e9ed7cdd25f994986027b1fa69afcba |
View Raw JSON Data
{
"trx_id": "79f979b55e9ed7cdd25f994986027b1fa69afcba",
"block": 37311067,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-15T17:27:15",
"op": [
"vote",
{
"voter": "runkod",
"author": "friedger",
"permlink": "pzcxv5",
"weight": 10000
}
]
}runkodreplied to @friedger / re-friedger-20191015t20269412z2019/10/15 17:26:09
runkodreplied to @friedger / re-friedger-20191015t20269412z
2019/10/15 17:26:09
| parent author | friedger |
| parent permlink | pzcxv5 |
| author | runkod |
| permlink | re-friedger-20191015t20269412z |
| title | |
| body | Thank you @friedger for feedback and support! Please do let us know if you have some feature requests. 🙇 |
| json metadata | {"tags":["esteem"],"app":"esteem/2.2.0-surfer","format":"markdown+html","community":"esteem.app"} |
| Transaction Info | Block #37311045/Trx 92885a33df9b467d384f3b8b9221131aa1e607ca |
View Raw JSON Data
{
"trx_id": "92885a33df9b467d384f3b8b9221131aa1e607ca",
"block": 37311045,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-15T17:26:09",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "pzcxv5",
"author": "runkod",
"permlink": "re-friedger-20191015t20269412z",
"title": "",
"body": "Thank you @friedger for feedback and support! Please do let us know if you have some feature requests. 🙇",
"json_metadata": "{\"tags\":[\"esteem\"],\"app\":\"esteem/2.2.0-surfer\",\"format\":\"markdown+html\",\"community\":\"esteem.app\"}"
}
]
}2019/10/14 09:53:18
2019/10/14 09:53:18
| delegator | steem |
| delegatee | friedger |
| vesting shares | 21511.254397 VESTS |
| Transaction Info | Block #37273277/Trx 0d97065934e957c6230944043201eb462f4b0832 |
View Raw JSON Data
{
"trx_id": "0d97065934e957c6230944043201eb462f4b0832",
"block": 37273277,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-14T09:53:18",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "21511.254397 VESTS"
}
]
}2019/10/14 09:22:21
2019/10/14 09:22:21
| parent author | runkod |
| parent permlink | introducing-runkod-decentralized-dapp-hosting |
| author | friedger |
| permlink | pzcxv5 |
| title | |
| body | @@ -152,8 +152,83 @@ and use. +%0A%0AI am looking forward to a more detailed description about how this works. |
| json metadata | {"app":"steemit/0.1","links":["https://oitimesheet.runkodapps.com"]} |
| Transaction Info | Block #37272658/Trx 742cf96b71490ad20706ea37b6ba169e57491f34 |
View Raw JSON Data
{
"trx_id": "742cf96b71490ad20706ea37b6ba169e57491f34",
"block": 37272658,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-14T09:22:21",
"op": [
"comment",
{
"parent_author": "runkod",
"parent_permlink": "introducing-runkod-decentralized-dapp-hosting",
"author": "friedger",
"permlink": "pzcxv5",
"title": "",
"body": "@@ -152,8 +152,83 @@\n and use.\n+%0A%0AI am looking forward to a more detailed description about how this works.\n",
"json_metadata": "{\"app\":\"steemit/0.1\",\"links\":[\"https://oitimesheet.runkodapps.com\"]}"
}
]
}2019/10/14 09:19:27
2019/10/14 09:19:27
| parent author | runkod |
| parent permlink | introducing-runkod-decentralized-dapp-hosting |
| author | friedger |
| permlink | pzcxv5 |
| title | |
| body | @@ -10,16 +10,17 @@ blished +%5B oitimesh @@ -37,16 +37,53 @@ apps.com +%5D(https://oitimesheet.runkodapps.com) for hos |
| json metadata | {"app":"steemit/0.1","links":["https://oitimesheet.runkodapps.com"]} |
| Transaction Info | Block #37272600/Trx 81b18dbc5878473d77fff2865ce7c7e891f1c343 |
View Raw JSON Data
{
"trx_id": "81b18dbc5878473d77fff2865ce7c7e891f1c343",
"block": 37272600,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-14T09:19:27",
"op": [
"comment",
{
"parent_author": "runkod",
"parent_permlink": "introducing-runkod-decentralized-dapp-hosting",
"author": "friedger",
"permlink": "pzcxv5",
"title": "",
"body": "@@ -10,16 +10,17 @@\n blished \n+%5B\n oitimesh\n@@ -37,16 +37,53 @@\n apps.com\n+%5D(https://oitimesheet.runkodapps.com)\n for hos\n",
"json_metadata": "{\"app\":\"steemit/0.1\",\"links\":[\"https://oitimesheet.runkodapps.com\"]}"
}
]
}2019/10/14 09:18:42
2019/10/14 09:18:42
| parent author | runkod |
| parent permlink | introducing-runkod-decentralized-dapp-hosting |
| author | friedger |
| permlink | pzcxv5 |
| title | |
| body | I have published oitimesheet.runkodapps.com for hosting of my development branch. It was quick and easy to setup and use. |
| json metadata | {"app":"steemit/0.1"} |
| Transaction Info | Block #37272585/Trx e0234b0bec93ed1627640e6d100551ad4bce86f6 |
View Raw JSON Data
{
"trx_id": "e0234b0bec93ed1627640e6d100551ad4bce86f6",
"block": 37272585,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-14T09:18:42",
"op": [
"comment",
{
"parent_author": "runkod",
"parent_permlink": "introducing-runkod-decentralized-dapp-hosting",
"author": "friedger",
"permlink": "pzcxv5",
"title": "",
"body": "I have published oitimesheet.runkodapps.com for hosting of my development branch. It was quick and easy to setup and use.",
"json_metadata": "{\"app\":\"steemit/0.1\"}"
}
]
}friedgerupvoted (100.00%) @runkod / introducing-runkod-decentralized-dapp-hosting2019/10/14 09:14:30
friedgerupvoted (100.00%) @runkod / introducing-runkod-decentralized-dapp-hosting
2019/10/14 09:14:30
| voter | friedger |
| author | runkod |
| permlink | introducing-runkod-decentralized-dapp-hosting |
| weight | 10000 (100.00%) |
| Transaction Info | Block #37272501/Trx c11c7f1f90bed4fd63dfc1abdd4504ac45248c3e |
View Raw JSON Data
{
"trx_id": "c11c7f1f90bed4fd63dfc1abdd4504ac45248c3e",
"block": 37272501,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-14T09:14:30",
"op": [
"vote",
{
"voter": "friedger",
"author": "runkod",
"permlink": "introducing-runkod-decentralized-dapp-hosting",
"weight": 10000
}
]
}2019/07/24 11:45:18
2019/07/24 11:45:18
| parent author | friedger |
| parent permlink | auto-feed-monsters-or-the-value-of-nfts |
| author | steemitboard |
| permlink | steemitboard-notify-friedger-20190724t114518000z |
| title | |
| body | Congratulations @friedger! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@friedger/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@friedger) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=friedger)_</sub> > You can upvote this notification to help all Steem users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #34941614/Trx 52f98068a7ab19611823f69f42e2453747efec23 |
View Raw JSON Data
{
"trx_id": "52f98068a7ab19611823f69f42e2453747efec23",
"block": 34941614,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-07-24T11:45:18",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "auto-feed-monsters-or-the-value-of-nfts",
"author": "steemitboard",
"permlink": "steemitboard-notify-friedger-20190724t114518000z",
"title": "",
"body": "Congratulations @friedger! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@friedger/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@friedger) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=friedger)_</sub>\n\n\n> You can upvote this notification to help all Steem users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2019/07/21 22:23:33
2019/07/21 22:23:33
| delegator | steem |
| delegatee | friedger |
| vesting shares | 1986.713377 VESTS |
| Transaction Info | Block #34868054/Trx 4a1d55e4ab334ae5e64e4d231ca081c61667ffc5 |
View Raw JSON Data
{
"trx_id": "4a1d55e4ab334ae5e64e4d231ca081c61667ffc5",
"block": 34868054,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-07-21T22:23:33",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "1986.713377 VESTS"
}
]
}2019/07/19 03:45:48
2019/07/19 03:45:48
| delegator | steem |
| delegatee | friedger |
| vesting shares | 13530.170749 VESTS |
| Transaction Info | Block #34788212/Trx fb9856edacf5573026017c903d5e0828971ab9e2 |
View Raw JSON Data
{
"trx_id": "fb9856edacf5573026017c903d5e0828971ab9e2",
"block": 34788212,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-07-19T03:45:48",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "13530.170749 VESTS"
}
]
}friedgerclaimed reward balance: 0.013 STEEM, 0.009 SBD, 0.027 SP2019/06/14 08:58:18
friedgerclaimed reward balance: 0.013 STEEM, 0.009 SBD, 0.027 SP
2019/06/14 08:58:18
| account | friedger |
| reward steem | 0.013 STEEM |
| reward sbd | 0.009 SBD |
| reward vests | 44.605536 VESTS |
| Transaction Info | Block #33787856/Trx fc5ba3fd1a875746b6ef9d85622787be5ed00dfd |
View Raw JSON Data
{
"trx_id": "fc5ba3fd1a875746b6ef9d85622787be5ed00dfd",
"block": 33787856,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-06-14T08:58:18",
"op": [
"claim_reward_balance",
{
"account": "friedger",
"reward_steem": "0.013 STEEM",
"reward_sbd": "0.009 SBD",
"reward_vests": "44.605536 VESTS"
}
]
}xoniupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts2019/05/28 21:43:54
xoniupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts
2019/05/28 21:43:54
| voter | xoni |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| weight | 10000 (100.00%) |
| Transaction Info | Block #33314147/Trx 18a6a28638af209a50e4f23c84e7883766833a8d |
View Raw JSON Data
{
"trx_id": "18a6a28638af209a50e4f23c84e7883766833a8d",
"block": 33314147,
"trx_in_block": 42,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-05-28T21:43:54",
"op": [
"vote",
{
"voter": "xoni",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"weight": 10000
}
]
}2019/04/22 11:14:21
2019/04/22 11:14:21
| voter | devann |
| author | friedger |
| permlink | re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z |
| weight | 400 (4.00%) |
| Transaction Info | Block #32265405/Trx 87499727c1561b44a8722481851903a5121eb8c7 |
View Raw JSON Data
{
"trx_id": "87499727c1561b44a8722481851903a5121eb8c7",
"block": 32265405,
"trx_in_block": 27,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-04-22T11:14:21",
"op": [
"vote",
{
"voter": "devann",
"author": "friedger",
"permlink": "re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z",
"weight": 400
}
]
}2019/04/22 05:27:33
2019/04/22 05:27:33
| parent author | friedger |
| parent permlink | re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z |
| author | devann |
| permlink | re-friedger-re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190422t052731351z |
| title | |
| body | Thanks for the info @friedger. The 24+ DIDs are provisional, which means they are not available yet. |
| json metadata | {"tags":["blockchain"],"users":["friedger"],"app":"steemit/0.1"} |
| Transaction Info | Block #32258470/Trx 0fdbe2bd3f445c30aa2e973e8a90fc963c151f8a |
View Raw JSON Data
{
"trx_id": "0fdbe2bd3f445c30aa2e973e8a90fc963c151f8a",
"block": 32258470,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-04-22T05:27:33",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z",
"author": "devann",
"permlink": "re-friedger-re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190422t052731351z",
"title": "",
"body": "Thanks for the info @friedger. The 24+ DIDs are provisional, which means they are not available yet.",
"json_metadata": "{\"tags\":[\"blockchain\"],\"users\":[\"friedger\"],\"app\":\"steemit/0.1\"}"
}
]
}2019/04/22 01:47:30
2019/04/22 01:47:30
| delegator | steem |
| delegatee | friedger |
| vesting shares | 13729.001288 VESTS |
| Transaction Info | Block #32254070/Trx 185bcb18c6287886ccc488fcdc3815e1fa03e232 |
View Raw JSON Data
{
"trx_id": "185bcb18c6287886ccc488fcdc3815e1fa03e232",
"block": 32254070,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-04-22T01:47:30",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "13729.001288 VESTS"
}
]
}2019/04/21 22:05:30
2019/04/21 22:05:30
| parent author | devann |
| parent permlink | re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t153437780z |
| author | friedger |
| permlink | re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z |
| title | |
| body | There is much more to these decentralized names. There is a W3C community group working on decentralized identifiers (DIDs), the DID foundation, the reboot web of trust events,.. You can find 24+ different decentralized identity providers already. See the w3c registry: https://w3c-ccg.github.io/did-method-registry/#the-registry I would say blockstack.org is one of the leading players in the decentralized domain name system. |
| json metadata | {"tags":["blockchain"],"links":["https://w3c-ccg.github.io/did-method-registry/#the-registry"],"app":"steemit/0.1"} |
| Transaction Info | Block #32249630/Trx c935efbb4bb04499d28b7d0c281e4e04ba2335ae |
View Raw JSON Data
{
"trx_id": "c935efbb4bb04499d28b7d0c281e4e04ba2335ae",
"block": 32249630,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-04-21T22:05:30",
"op": [
"comment",
{
"parent_author": "devann",
"parent_permlink": "re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t153437780z",
"author": "friedger",
"permlink": "re-devann-re-bunnychum-unstoppable-domains-another-step-towards-decentralized-internet-or-booking-open-20190421t220529212z",
"title": "",
"body": "There is much more to these decentralized names. There is a W3C community group working on decentralized identifiers (DIDs), the DID foundation, the reboot web of trust events,..\n\nYou can find 24+ different decentralized identity providers already. See the w3c registry: https://w3c-ccg.github.io/did-method-registry/#the-registry\n\nI would say blockstack.org is one of the leading players in the decentralized domain name system.",
"json_metadata": "{\"tags\":[\"blockchain\"],\"links\":[\"https://w3c-ccg.github.io/did-method-registry/#the-registry\"],\"app\":\"steemit/0.1\"}"
}
]
}2018/11/29 05:31:06
2018/11/29 05:31:06
| delegator | steem |
| delegatee | friedger |
| vesting shares | 2013.698284 VESTS |
| Transaction Info | Block #28115937/Trx 121640fd710dbd9123e1345e79008c14c8630c3b |
View Raw JSON Data
{
"trx_id": "121640fd710dbd9123e1345e79008c14c8630c3b",
"block": 28115937,
"trx_in_block": 20,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-11-29T05:31:06",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "2013.698284 VESTS"
}
]
}2018/11/26 17:33:36
2018/11/26 17:33:36
| delegator | steem |
| delegatee | friedger |
| vesting shares | 13978.794212 VESTS |
| Transaction Info | Block #28044013/Trx d102316a4bd807994cd099b2ac0d27e2dcbc1763 |
View Raw JSON Data
{
"trx_id": "d102316a4bd807994cd099b2ac0d27e2dcbc1763",
"block": 28044013,
"trx_in_block": 26,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-11-26T17:33:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "13978.794212 VESTS"
}
]
}gaboesquivelupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts2018/10/07 04:32:18
gaboesquivelupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts
2018/10/07 04:32:18
| voter | gaboesquivel |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| weight | 10000 (100.00%) |
| Transaction Info | Block #26589393/Trx da20a43173b34ddafe32876093c2254505f06660 |
View Raw JSON Data
{
"trx_id": "da20a43173b34ddafe32876093c2254505f06660",
"block": 26589393,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-10-07T04:32:18",
"op": [
"vote",
{
"voter": "gaboesquivel",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"weight": 10000
}
]
}2018/08/30 05:29:09
2018/08/30 05:29:09
| parent author | friedger |
| parent permlink | auto-feed-monsters-or-the-value-of-nfts |
| author | friedger |
| permlink | re-friedger-auto-feed-monsters-or-the-value-of-nfts-20180830t052908986z |
| title | |
| body | If you setup buddy.works, make sure that you set the version of eos-dev image to 1.1.0 (not 1.2.+). Version 1.2.+ would be used if you leave `latestet` in the version field. The version is set in the environment section of the action  |
| json metadata | {"tags":["eos"],"image":["https://cdn.steemitimages.com/DQmdcSRL2jRZjf9pUnnhdpzLrUM1hBNQaoTS8HPwUx6vpBF/Bildschirmfoto%20vom%202018-08-30%2007-28-24.png"],"app":"steemit/0.1"} |
| Transaction Info | Block #25512503/Trx 302f4f5e51b3da1d0f383b8fda0bfffcbdebfe51 |
View Raw JSON Data
{
"trx_id": "302f4f5e51b3da1d0f383b8fda0bfffcbdebfe51",
"block": 25512503,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-30T05:29:09",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "auto-feed-monsters-or-the-value-of-nfts",
"author": "friedger",
"permlink": "re-friedger-auto-feed-monsters-or-the-value-of-nfts-20180830t052908986z",
"title": "",
"body": "If you setup buddy.works, make sure that you set the version of eos-dev image to 1.1.0 (not 1.2.+). Version 1.2.+ would be used if you leave `latestet` in the version field.\n\nThe version is set in the environment section of the action ",
"json_metadata": "{\"tags\":[\"eos\"],\"image\":[\"https://cdn.steemitimages.com/DQmdcSRL2jRZjf9pUnnhdpzLrUM1hBNQaoTS8HPwUx6vpBF/Bildschirmfoto%20vom%202018-08-30%2007-28-24.png\"],\"app\":\"steemit/0.1\"}"
}
]
}cryptolionsupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts2018/08/18 19:57:42
cryptolionsupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts
2018/08/18 19:57:42
| voter | cryptolions |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| weight | 10000 (100.00%) |
| Transaction Info | Block #25184430/Trx 8024a7195934c139067168de143c2131880f8923 |
View Raw JSON Data
{
"trx_id": "8024a7195934c139067168de143c2131880f8923",
"block": 25184430,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-18T19:57:42",
"op": [
"vote",
{
"voter": "cryptolions",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"weight": 10000
}
]
}2018/08/18 15:09:18
2018/08/18 15:09:18
| parent author | friedger |
| parent permlink | auto-feed-monsters-or-the-value-of-nfts |
| author | leordev |
| permlink | re-friedger-auto-feed-monsters-or-the-value-of-nfts-20180818t150915871z |
| title | |
| body | I loved it, my challenge to you or the community is to create a bot that auto battle lol! |
| json metadata | {"community":"busy","app":"busy/2.5.6","format":"markdown","tags":["eos"],"users":[],"links":[],"image":[]} |
| Transaction Info | Block #25178662/Trx fc45e32e9bc8c0c5c5e1f3fb7b1847350902a218 |
View Raw JSON Data
{
"trx_id": "fc45e32e9bc8c0c5c5e1f3fb7b1847350902a218",
"block": 25178662,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-18T15:09:18",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "auto-feed-monsters-or-the-value-of-nfts",
"author": "leordev",
"permlink": "re-friedger-auto-feed-monsters-or-the-value-of-nfts-20180818t150915871z",
"title": "",
"body": "I loved it, my challenge to you or the community is to create a bot that auto battle lol!",
"json_metadata": "{\"community\":\"busy\",\"app\":\"busy/2.5.6\",\"format\":\"markdown\",\"tags\":[\"eos\"],\"users\":[],\"links\":[],\"image\":[]}"
}
]
}leordevupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts2018/08/18 15:08:30
leordevupvoted (100.00%) @friedger / auto-feed-monsters-or-the-value-of-nfts
2018/08/18 15:08:30
| voter | leordev |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| weight | 10000 (100.00%) |
| Transaction Info | Block #25178646/Trx 29c59d69a48f7edf9899535ed39f25789744df92 |
View Raw JSON Data
{
"trx_id": "29c59d69a48f7edf9899535ed39f25789744df92",
"block": 25178646,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-18T15:08:30",
"op": [
"vote",
{
"voter": "leordev",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"weight": 10000
}
]
}2018/08/18 15:04:54
2018/08/18 15:04:54
| voter | leordev |
| author | friedger |
| permlink | exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract |
| weight | 10000 (100.00%) |
| Transaction Info | Block #25178574/Trx edca3b9b703892edcc0da408c4476544e68951df |
View Raw JSON Data
{
"trx_id": "edca3b9b703892edcc0da408c4476544e68951df",
"block": 25178574,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-18T15:04:54",
"op": [
"vote",
{
"voter": "leordev",
"author": "friedger",
"permlink": "exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract",
"weight": 10000
}
]
}leordevupvoted (100.00%) @friedger / collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos2018/08/18 14:45:15
leordevupvoted (100.00%) @friedger / collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos
2018/08/18 14:45:15
| voter | leordev |
| author | friedger |
| permlink | collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos |
| weight | 10000 (100.00%) |
| Transaction Info | Block #25178181/Trx 7b4aba53898638896956b8b6ff0bdf1cdf24bc86 |
View Raw JSON Data
{
"trx_id": "7b4aba53898638896956b8b6ff0bdf1cdf24bc86",
"block": 25178181,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-18T14:45:15",
"op": [
"vote",
{
"voter": "leordev",
"author": "friedger",
"permlink": "collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos",
"weight": 10000
}
]
}friedgerpublished a new post: auto-feed-monsters-or-the-value-of-nfts2018/08/03 22:02:42
friedgerpublished a new post: auto-feed-monsters-or-the-value-of-nfts
2018/08/03 22:02:42
| parent author | |
| parent permlink | eos |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| title | Auto-feed Monsters or The Value of NFTs |
| body | In the previous two posts about monsters ([Collect monsters](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos) and [Exchange monsters](https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract)) I talked about how monsters can be non-fungible tokens(NFTs). This post is more directed to the users of the monsters game or NFTs in general.  ## Auto-feed There are a few requests in the monstereos channel, how to feed monsters while on vacation or away from the internet. Ideas mentioned were monster caring services or handing over private keys. Both is not recommended - you never know who is on the other side. When [buddy.works](https://buddy.works), a continuous integration service announced support for EOS it was clear that this could be the solution to the feeding problem. So, I created a new EOS account [noctambulist](https://eosweb.net/account/noctambulist) and transferred around 1 EOS, enough to run the monster actions. In the online service https://apps.buddy.works do the following: 1. Create a new project 1. Add a new pipeline, choose a name, select `recurrent`, choose every 12h 1. Add a new action from `Blockchain`, choose `Build EOS` 1. In the `Run commands` text area past the following lines, replacing the pet_id `3673`with your monster id and the account `noctambulist` with your account name. ```` cleos wallet create cleos wallet import --private-key ${PRIVAT_KEY} cleos -u https://eu.eosdac.io push action monstereosio feedpet '{"pet_id": 3673}' -p noctambulist ```` Finally, go back to the pipeline page and add a new variable `PRIVAT_KEY` with the private key of the account (use the active key, not owner key). Make sure that encryption is enabled! Note that during the execution the private key is never shown. However, while pasting the private key into the text field I felt reassured that only 1 EOS is held in the account. Now, you just have to wait for 12h or hit `Run pipeline` button to see it work. ## Warning Many things can go wrong! There is no guarantee that the monster is fed. The buddy.works service could break down, the transaction could be lost due to network problems, etc. As a user you are not notified. Furthermore, the warnings that are usually given about the monster already being fed, or not awake or so are not shown. Having said that, the monster #3673, named `Sleepy1` is still alive and happy at the time of writing.  ## Value of NFTs This leads to the question how to determine the value of NFTs. In some games it is **scarcity**, in others it is **time based** or **money** invested, or all it. For collectables like NFTs, in most cases the value is not rationally justified. In monstereos, there is only a time-based aspect of it as creation is free and no shops are available yet. With the introduction of auto-feeding it becomes even more unclear, how to determine the value of monsters. If auto-feeding is against the rules is still to be discussed, and if so, how this can be detected as the chain does not distinguishes between actions from humans or bots. ## Conclusion It is easy to setup a feeding service, if you are prepared to enter your private key into a web site. |
| json metadata | {"tags":["eos","monstereos","nft"],"image":["https://cdn.steemitimages.com/DQmfS1VaQXrqFkRDLH3UJCUmTjcKGuuW1PpkDfomKRsqLjx/monster-105-pixeled.png","https://cdn.steemitimages.com/DQmYrWcJVGrtzVGmTqb8xUUFatppp5dNTUzQTpVAB7VuRCy/sleepy1.png"],"links":["https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos","https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract","https://buddy.works","https://eosweb.net/account/noctambulist","https://apps.buddy.works"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24755085/Trx d60aea2f548245c96fdb14d3474c113091fe2b0e |
View Raw JSON Data
{
"trx_id": "d60aea2f548245c96fdb14d3474c113091fe2b0e",
"block": 24755085,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-03T22:02:42",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "eos",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"title": "Auto-feed Monsters or The Value of NFTs",
"body": "In the previous two posts about monsters ([Collect monsters](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos) and [Exchange monsters](https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract)) I talked about how monsters can be non-fungible tokens(NFTs). This post is more directed to the users of the monsters game or NFTs in general.\n\n\n\n## Auto-feed\nThere are a few requests in the monstereos channel, how to feed monsters while on vacation or away from the internet. Ideas mentioned were monster caring services or handing over private keys. Both is not recommended - you never know who is on the other side. \n\nWhen [buddy.works](https://buddy.works), a continuous integration service announced support for EOS it was clear that this could be the solution to the feeding problem. So, I created a new EOS account [noctambulist](https://eosweb.net/account/noctambulist) and transferred around 1 EOS, enough to run the monster actions. \n\nIn the online service https://apps.buddy.works do the following:\n1. Create a new project\n1. Add a new pipeline, choose a name, select `recurrent`, choose every 12h\n1. Add a new action from `Blockchain`, choose `Build EOS`\n1. In the `Run commands` text area past the following lines, replacing the pet_id `3673`with your monster id and the account `noctambulist` with your account name.\n\n````\ncleos wallet create\ncleos wallet import --private-key ${PRIVAT_KEY}\ncleos -u https://eu.eosdac.io push action monstereosio feedpet '{\"pet_id\": 3673}' -p noctambulist \n````\n\nFinally, go back to the pipeline page and add a new variable `PRIVAT_KEY` with the private key of the account (use the active key, not owner key). Make sure that encryption is enabled! Note that during the execution the private key is never shown. However, while pasting the private key into the text field I felt reassured that only 1 EOS is held in the account.\n\nNow, you just have to wait for 12h or hit `Run pipeline` button to see it work.\n\n## Warning\nMany things can go wrong! There is no guarantee that the monster is fed. The buddy.works service could break down, the transaction could be lost due to network problems, etc. As a user you are not notified. Furthermore, the warnings that are usually given about the monster already being fed, or not awake or so are not shown.\n\nHaving said that, the monster #3673, named `Sleepy1` is still alive and happy at the time of writing.\n\n\n\n## Value of NFTs\nThis leads to the question how to determine the value of NFTs. In some games it is **scarcity**, in others it is **time based** or **money** invested, or all it. For collectables like NFTs, in most cases the value is not rationally justified. \n\nIn monstereos, there is only a time-based aspect of it as creation is free and no shops are available yet. With the introduction of auto-feeding it becomes even more unclear, how to determine the value of monsters. If auto-feeding is against the rules is still to be discussed, and if so, how this can be detected as the chain does not distinguishes between actions from humans or bots.\n\n## Conclusion\nIt is easy to setup a feeding service, if you are prepared to enter your private key into a web site.",
"json_metadata": "{\"tags\":[\"eos\",\"monstereos\",\"nft\"],\"image\":[\"https://cdn.steemitimages.com/DQmfS1VaQXrqFkRDLH3UJCUmTjcKGuuW1PpkDfomKRsqLjx/monster-105-pixeled.png\",\"https://cdn.steemitimages.com/DQmYrWcJVGrtzVGmTqb8xUUFatppp5dNTUzQTpVAB7VuRCy/sleepy1.png\"],\"links\":[\"https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos\",\"https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract\",\"https://buddy.works\",\"https://eosweb.net/account/noctambulist\",\"https://apps.buddy.works\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}friedgerpublished a new post: auto-feed-monsters-or-the-value-of-nfts2018/08/03 21:55:09
friedgerpublished a new post: auto-feed-monsters-or-the-value-of-nfts
2018/08/03 21:55:09
| parent author | |
| parent permlink | eos |
| author | friedger |
| permlink | auto-feed-monsters-or-the-value-of-nfts |
| title | Auto-feed Monsters or The value of NFTs |
| body | In the previous two posts about monsters ([Collect monsters](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos) and [Exchange monsters](https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract)) I talked about how monsters can be non-fungible tokens(NFTs). This post is more directed to the users of the monsters game or NFTs in general.  ## Auto-feed There are a few requests in the monstereos channel, how to feed monsters while on vacation or away from the internet. Ideas mentioned were monster caring services or handing over private keys. Both is not recommended - you never know who is on the other side. When [buddy.works](https://buddy.works), a continuous integration service announced support for EOS it was clear that this could be the solution to the feeding problem. So, I created a new EOS account [noctambulist](https://eosweb.net/account/noctambulist) and transferred around 1 EOS, enough to run the monster actions. In the online service https://apps.buddy.works do the following: 1. Create a new project 1. Add a new pipeline, choose a name, select `recurrent`, choose every 12h 1. Add a new action from `Blockchain`, choose `Build EOS` 1. In the `Run commands` text area past the following lines, replacing the pet_id `3673`with your monster id and the account `noctambulist` with your account name. ```` cleos wallet create cleos wallet import --private-key ${PRIVAT_KEY} cleos -u https://eu.eosdac.io push action monstereosio feedpet '{"pet_id": 3673}' -p noctambulist ```` Finally, go back to the pipeline page and add a new variable `PRIVAT_KEY` with the private key of the account (use the active key, not owner key). Make sure that encryption is enabled! Note that during the execution the private key is never shown. However, while pasting the private key into the text field I felt reassured that only 1 EOS is held in the account. Now, you just have to wait for 12h or hit `Run pipeline` button to see it work. ## Warning Many things can go wrong! There is no guarantee that the monster is fed. The buddy.works service could break down, the transaction could be lost due to network problems, etc. As a user you are not notified. Furthermore, the warnings that are usually given about the monster already being fed, or not awake or so are not shown. Having said that, the monster #3673, named `Sleepy1` is still alive and happy at the time of writing.  ## Value of NFTs This leads to the question how to determine the value of NFTs. In some games it is **scarcity**, in others it is **time based** or **money** invested, or all it. For collectables like NFTs, in most cases the value is not rationally justified. In monstereos, there is only a time-based aspect of it as creation is free and no shops are available yet. With the introduction of auto-feeding it becomes even more unclear, how to determine the value of monsters. If auto-feeding is against the rules is still to be discussed, and if so, how this can be detected as the chain does not distinguishes between actions from humans or bots. ## Conclusion It is easy to setup a feeding service, if you are prepared to enter your private key into a web site. |
| json metadata | {"tags":["eos","monstereos","nft"],"image":["https://cdn.steemitimages.com/DQmfS1VaQXrqFkRDLH3UJCUmTjcKGuuW1PpkDfomKRsqLjx/monster-105-pixeled.png","https://cdn.steemitimages.com/DQmYrWcJVGrtzVGmTqb8xUUFatppp5dNTUzQTpVAB7VuRCy/sleepy1.png"],"links":["https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos","https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract","https://buddy.works","https://eosweb.net/account/noctambulist","https://apps.buddy.works"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24754934/Trx 721479a00e8672834c8f90721474bf8080a902c2 |
View Raw JSON Data
{
"trx_id": "721479a00e8672834c8f90721474bf8080a902c2",
"block": 24754934,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-03T21:55:09",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "eos",
"author": "friedger",
"permlink": "auto-feed-monsters-or-the-value-of-nfts",
"title": "Auto-feed Monsters or The value of NFTs",
"body": "In the previous two posts about monsters ([Collect monsters](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos) and [Exchange monsters](https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract)) I talked about how monsters can be non-fungible tokens(NFTs). This post is more directed to the users of the monsters game or NFTs in general.\n\n\n\n## Auto-feed\nThere are a few requests in the monstereos channel, how to feed monsters while on vacation or away from the internet. Ideas mentioned were monster caring services or handing over private keys. Both is not recommended - you never know who is on the other side. \n\nWhen [buddy.works](https://buddy.works), a continuous integration service announced support for EOS it was clear that this could be the solution to the feeding problem. So, I created a new EOS account [noctambulist](https://eosweb.net/account/noctambulist) and transferred around 1 EOS, enough to run the monster actions. \n\nIn the online service https://apps.buddy.works do the following:\n1. Create a new project\n1. Add a new pipeline, choose a name, select `recurrent`, choose every 12h\n1. Add a new action from `Blockchain`, choose `Build EOS`\n1. In the `Run commands` text area past the following lines, replacing the pet_id `3673`with your monster id and the account `noctambulist` with your account name.\n\n````\ncleos wallet create\ncleos wallet import --private-key ${PRIVAT_KEY}\ncleos -u https://eu.eosdac.io push action monstereosio feedpet '{\"pet_id\": 3673}' -p noctambulist \n````\n\nFinally, go back to the pipeline page and add a new variable `PRIVAT_KEY` with the private key of the account (use the active key, not owner key). Make sure that encryption is enabled! Note that during the execution the private key is never shown. However, while pasting the private key into the text field I felt reassured that only 1 EOS is held in the account.\n\nNow, you just have to wait for 12h or hit `Run pipeline` button to see it work.\n\n## Warning\nMany things can go wrong! There is no guarantee that the monster is fed. The buddy.works service could break down, the transaction could be lost due to network problems, etc. As a user you are not notified. Furthermore, the warnings that are usually given about the monster already being fed, or not awake or so are not shown.\n\nHaving said that, the monster #3673, named `Sleepy1` is still alive and happy at the time of writing.\n\n\n\n## Value of NFTs\nThis leads to the question how to determine the value of NFTs. In some games it is **scarcity**, in others it is **time based** or **money** invested, or all it. For collectables like NFTs, in most cases the value is not rationally justified. \n\nIn monstereos, there is only a time-based aspect of it as creation is free and no shops are available yet. With the introduction of auto-feeding it becomes even more unclear, how to determine the value of monsters. If auto-feeding is against the rules is still to be discussed, and if so, how this can be detected as the chain does not distinguishes between actions from humans or bots.\n\n## Conclusion\nIt is easy to setup a feeding service, if you are prepared to enter your private key into a web site.",
"json_metadata": "{\"tags\":[\"eos\",\"monstereos\",\"nft\"],\"image\":[\"https://cdn.steemitimages.com/DQmfS1VaQXrqFkRDLH3UJCUmTjcKGuuW1PpkDfomKRsqLjx/monster-105-pixeled.png\",\"https://cdn.steemitimages.com/DQmYrWcJVGrtzVGmTqb8xUUFatppp5dNTUzQTpVAB7VuRCy/sleepy1.png\"],\"links\":[\"https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos\",\"https://steemit.com/eos/@friedger/exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract\",\"https://buddy.works\",\"https://eosweb.net/account/noctambulist\",\"https://apps.buddy.works\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}friedgerpublished a new post: exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract2018/08/02 20:02:30
friedgerpublished a new post: exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract
2018/08/02 20:02:30
| parent author | |
| parent permlink | eos |
| author | friedger |
| permlink | exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract |
| title | Exchange monsters or How to implement transfers of NFTs between contracts |
| body | ## Market for Monsters In the last [monstereos post](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos), I wrote about making monsters of the tamagochi game [monstereos.io](http://monstereos.io) non-fungible tokens (NFTs) that can be exchanged between users with a simple method call. Now, let's bring in some value. The NFT should only be transferred if a certain amount of tokens were transferred to the owner and thereby create a market for monsters.  To setup the monster market a new contract was created (monstereosmt). It contains the actions for asking and bidding for monsters. Without going into the aspects of finding matching offers and bids let's assume that an offer (created by the monster owner with the [offerpet action](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md)) was accepted by a bidder and the owner updated the offer to include the name of the new owner, i.e. the bidder. ## Simple Transfer For the simple transfer discussed in the previous post (without value), the market contract needs to ask the game contract to update the ownership of the monster. This is because tables are world-readable, but only writable by the owning contract. So, an action needs to be added to the game contract that the market contract can call. For monstereos, the `claimpet` action of the market can be called by the new owner. That action should then call the `transferpet` action in the game contract. This is the code: action(permission_level{_self, N(active)}, N(monstereosio), N(transferpet), std::make_tuple(pet.id, newowner)).send(); The action is send in the name of the contract, hence the permission level with self. The action to perform is `transferpet` of contract `monstereosio`. Finally, the parameters are added. Sending an action from a contract needs the `eosio.code` permission for the market account. This is done once with cleos like this: cleos set account permission monstereosmt active \ '{"threshold": 1, "keys": [{ "key": "'${EOS_KEY}'", "weight": 1 }], "accounts": [{ "permission": {"actor": "monstereosmt", "permission": "eosio.code"}, "weight": 1 }]}' owner -p monstereosmt On the other side, in the game contract the `transferpet` method was added. However, it is important that the method is not added to the ABI, otherwise every contract could call this method. And then in the method, the authorization of the market contract needs to be verified: require_auth(N(monstereosmt)); ## Transfer with Value Monsters that have been well fed and have played many battles are valuable and the new owner might be prepared to send some tokens in exchange for the monster. In order, to add value to a transfer the following steps are needed: 1. **Transfer to escrow**: The bidder uses the token contract to transfer the agreed amount to the game escrow account (monstereosio in this case) 2. **Verify offer and transfer**: The game contract validates the transferred amount, token symbol, and the identities of the owner and bidder with the offer. 3. **Change ownership**: The game contract changes ownership. 4. **Transfer funds from escrow**: The game contract transfers the tokens to the previous owner of the owner. 5. **Tidy up**: The offer is deleted by the market contract which finalizes the transfer For 1., it is just a call to the transfer action of the `eosio.token` contract, sending from the new owner to the game account. However, now it becomes interesting. What is needed to react on the transfer? As described in EOS stackexchange, the market contract needs to adjust the `apply` method in the `EOSIO_ABI` macro. Currently, it is only possible to define your own `EOSIO_ABI_EX` accepting actions from the token contract by adding an other if-condition: code == N(eosio.token) This means all actions of the token contract that are implemented in the market contract are called in the market contract as well. In this case, it is only the `transfer` method. [*Protip*: Use a base file like `pet.cpp` and two main files like `petcode.cpp` and `petabi.cpp` to compile the wasm code using the `EOSIO_ABI_EX` and to generate the abi file using `EOS_ABI` (see [github for details](https://github.com/friedger/monstereos/tree/market_value/contracts/pet))] In monstereosio, the transfer method was also used to update the account balance of the user, keeping up to date the amount the user transferred to the game. Now, the transfer method is extended with the handling of transferring ownership, bundled in method `_handletransf`. In this method the memo of the transfer is inspected and the contained offer id extracted. With the offer id the details are retrieved from the table of the market contract using the type `_tb_offers` defined in the headers file (and abi) of the market contract. _tb_offers offers(N(monstereosmt), N(monstereosmt)) The second parameter is `N(monstereosmt)` as there is only one global table. Some contracts us one table for each user. The call should then be like this: _tb_offers offers(N(monstereosmt), N(pet.owner)) After the offer was retrieved from the table, the amount, symbol, owner and offer type is validated. Once, the transfer can go ahead the token is transferred to the old owner of the monster, the ownership of the monster table is updated. For transferring the asset the game contract needs to have the permission to send actions. As described above, this is done with a single cleos call but this time for account `monstereosio`: cleos set account permission monstereosio active \ '{"threshold": 1, "keys": [{ "key": "'${EOS_KEY}'", "weight": 1 }], "accounts": [{ "permission": {"actor": "monstereosio", "permission": "eosio.code"}, "weight": 1 }]}' owner -p monstereosio Finally, the balance of the new owner account is decreased as it was increased at the beginning of the transfer of ownership. However, this is not necessarily needed for other use cases of NFTs. ## Conclusion Sending an action from one contract to another can be done with `action(...).send()` if the contract account has permission `eosio.code`. This works even if the action is not included in the ABI. The action is executed with the authority of the sending account. |
| json metadata | {"tags":["eos","monstereos","nft"],"image":["https://cdn.steemitimages.com/DQmdtiVBRZsCY8c4BLmcGfDD4qMAGbFVPaN5QBfLk3N9jj1/imageedit_23_3254665918.gif"],"links":["https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos","http://monstereos.io","https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md","https://github.com/friedger/monstereos/tree/market_value/contracts/pet"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24723891/Trx 2aef929fc7cb6a7a81982361b21ae5b8b98c0eb3 |
View Raw JSON Data
{
"trx_id": "2aef929fc7cb6a7a81982361b21ae5b8b98c0eb3",
"block": 24723891,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-02T20:02:30",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "eos",
"author": "friedger",
"permlink": "exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract",
"title": "Exchange monsters or How to implement transfers of NFTs between contracts",
"body": "## Market for Monsters\nIn the last [monstereos post](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos), I wrote about making monsters of the tamagochi game [monstereos.io](http://monstereos.io) non-fungible tokens (NFTs) that can be exchanged between users with a simple method call. Now, let's bring in some value. The NFT should only be transferred if a certain amount of tokens were transferred to the owner and thereby create a market for monsters.\n\n\n\nTo setup the monster market a new contract was created (monstereosmt). It contains the actions for asking and bidding for monsters. Without going into the aspects of finding matching offers and bids let's assume that an offer (created by the monster owner with the [offerpet action](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md)) was accepted by a bidder and the owner updated the offer to include the name of the new owner, i.e. the bidder.\n\n## Simple Transfer\nFor the simple transfer discussed in the previous post (without value), the market contract needs to ask the game contract to update the ownership of the monster. This is because tables are world-readable, but only writable by the owning contract. So, an action needs to be added to the game contract that the market contract can call. For monstereos, the `claimpet` action of the market can be called by the new owner. That action should then call the `transferpet` action in the game contract. This is the code:\n\n action(permission_level{_self, N(active)}, N(monstereosio), N(transferpet), std::make_tuple(pet.id, newowner)).send();\n\nThe action is send in the name of the contract, hence the permission level with self. The action to perform is `transferpet` of contract `monstereosio`. Finally, the parameters are added. Sending an action from a contract needs the `eosio.code` permission for the market account. This is done once with cleos like this:\n\n cleos set account permission monstereosmt active \\\n '{\"threshold\": 1,\n \"keys\": [{\n \"key\": \"'${EOS_KEY}'\",\n \"weight\": 1\n }],\n \"accounts\": [{\n \"permission\": {\"actor\": \"monstereosmt\",\n \"permission\": \"eosio.code\"},\n \"weight\": 1\n }]}' owner -p monstereosmt\n\nOn the other side, in the game contract the `transferpet` method was added. However, it is important that the method is not added to the ABI, otherwise every contract could call this method. And then in the method, the authorization of the market contract needs to be verified:\n\n require_auth(N(monstereosmt));\n\n## Transfer with Value\nMonsters that have been well fed and have played many battles are valuable and the new owner might be prepared to send some tokens in exchange for the monster. In order, to add value to a transfer the following steps are needed:\n\n1. **Transfer to escrow**: The bidder uses the token contract to transfer the agreed amount to the game escrow account (monstereosio in this case)\n2. **Verify offer and transfer**: The game contract validates the transferred amount, token symbol, and the identities of the owner and bidder with the offer.\n3. **Change ownership**: The game contract changes ownership.\n4. **Transfer funds from escrow**: The game contract transfers the tokens to the previous owner of the owner.\n5. **Tidy up**: The offer is deleted by the market contract which finalizes the transfer\n\nFor 1., it is just a call to the transfer action of the `eosio.token` contract, sending from the new owner to the game account. However, now it becomes interesting. What is needed to react on the transfer?\n\nAs described in EOS stackexchange, the market contract needs to adjust the `apply` method in the `EOSIO_ABI` macro. Currently, it is only possible to define your own `EOSIO_ABI_EX` accepting actions from the token contract by adding an other if-condition: \n\n code == N(eosio.token)\n\nThis means all actions of the token contract that are implemented in the market contract are called in the market contract as well. In this case, it is only the `transfer` method.\n\n[*Protip*: Use a base file like `pet.cpp` and two main files like `petcode.cpp` and `petabi.cpp` to compile the wasm code using the `EOSIO_ABI_EX` and to generate the abi file using `EOS_ABI` (see [github for details](https://github.com/friedger/monstereos/tree/market_value/contracts/pet))]\n\nIn monstereosio, the transfer method was also used to update the account balance of the user, keeping up to date the amount the user transferred to the game. Now, the transfer method is extended with the handling of transferring ownership, bundled in method `_handletransf`.\n\nIn this method the memo of the transfer is inspected and the contained offer id extracted. With the offer id the details are retrieved from the table of the market contract using the type `_tb_offers` defined in the headers file (and abi) of the market contract.\n\n _tb_offers offers(N(monstereosmt), N(monstereosmt))\n\nThe second parameter is `N(monstereosmt)` as there is only one global table. Some contracts us one table for each user. The call should then be like this:\n\n _tb_offers offers(N(monstereosmt), N(pet.owner))\n\nAfter the offer was retrieved from the table, the amount, symbol, owner and offer type is validated. Once, the transfer can go ahead the token is transferred to the old owner of the monster, the ownership of the monster table is updated. For transferring the asset the game contract needs to have the permission to send actions. As described above, this is done with a single cleos call but this time for account `monstereosio`:\n\n cleos set account permission monstereosio active \\\n '{\"threshold\": 1,\n \"keys\": [{\n \"key\": \"'${EOS_KEY}'\",\n \"weight\": 1\n }],\n \"accounts\": [{\n \"permission\": {\"actor\": \"monstereosio\",\n \"permission\": \"eosio.code\"},\n \"weight\": 1\n }]}' owner -p monstereosio\n\nFinally, the balance of the new owner account is decreased as it was increased at the beginning of the transfer of ownership. However, this is not necessarily needed for other use cases of NFTs.\n\n## Conclusion\nSending an action from one contract to another can be done with `action(...).send()` if the contract account has permission `eosio.code`. This works even if the action is not included in the ABI. The action is executed with the authority of the sending account.",
"json_metadata": "{\"tags\":[\"eos\",\"monstereos\",\"nft\"],\"image\":[\"https://cdn.steemitimages.com/DQmdtiVBRZsCY8c4BLmcGfDD4qMAGbFVPaN5QBfLk3N9jj1/imageedit_23_3254665918.gif\"],\"links\":[\"https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos\",\"http://monstereos.io\",\"https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md\",\"https://github.com/friedger/monstereos/tree/market_value/contracts/pet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}friedgerpublished a new post: exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract2018/08/02 07:59:42
friedgerpublished a new post: exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract
2018/08/02 07:59:42
| parent author | |
| parent permlink | eos |
| author | friedger |
| permlink | exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract |
| title | Exchange monsters or How to implement transfers of NFTs between contract |
| body | ## Market for Monsters In the last [monstereos post](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos), I wrote about making monsters of the tamagochi game [monstereos.io](http://monstereos.io) non-fungible tokens (NFTs) that can be exchanged between users with a simple method call. Now, let's bring in some value. The NFT should only be transferred if a certain amount of tokens were transferred to the owner and thereby create a market for monsters.  To setup the monster market a new contract was created (monstereosmt). It contains the actions for asking and bidding for monsters. Without going into the aspects of finding matching offers and bids let's assume that an offer (created by the monster owner with the [offerpet action](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md)) was accepted by a bidder and the owner updated the offer to include the name of the new owner, i.e. the bidder. ## Simple Transfer For the simple transfer discussed in the previous post (without value), the market contract needs to ask the game contract to update the ownership of the monster. This is because tables are world-readable, but only writable by the owning contract. So, an action needs to be added to the game contract that the market contract can call. For monstereos, the `claimpet` action of the market can be called by the new owner. That action should then call the `transferpet` action in the game contract. This is the code: action(permission_level{_self, N(active)}, N(monstereosio), N(transferpet), std::make_tuple(pet.id, newowner)).send(); The action is send in the name of the contract, hence the permission level with self. The action to perform is `transferpet` of contract `monstereosio`. Finally, the parameters are added. Sending an action from a contract needs the `eosio.code` permission for the market account. This is done once with cleos like this: cleos set account permission monstereosmt active \ '{"threshold": 1, "keys": [{ "key": "'${EOS_KEY}'", "weight": 1 }], "accounts": [{ "permission": {"actor": "monstereosmt", "permission": "eosio.code"}, "weight": 1 }]}' owner -p monstereosmt On the other side, in the game contract the `transferpet` method was added. However, it is important that the method is not added to the ABI, otherwise every contract could call this method. And then in the method, the authorization of the market contract needs to be verified: require_auth(N(monstereosmt)); ## Transfer with Value Monsters that have been well fed and have played many battles are valuable and the new owner might be prepared to send some tokens in exchange for the monster. In order, to add value to a transfer the following steps are needed: 1. **Transfer to escrow**: The bidder uses the token contract to transfer the agreed amount to the game escrow account (monstereosio in this case) 2. **Verify offer and transfer**: The game contract validates the transferred amount, token symbol, and the identities of the owner and bidder with the offer. 3. **Change ownership**: The game contract changes ownership. 4. **Transfer funds from escrow**: The game contract transfers the tokens to the previous owner of the owner. 5. **Tidy up**: The offer is deleted by the market contract which finalizes the transfer For 1., it is just a call to the transfer action of the `eosio.token` contract, sending from the new owner to the game account. However, now it becomes interesting. What is needed to react on the transfer? As described in EOS stackexchange, the market contract needs to adjust the `apply` method in the `EOSIO_ABI` macro. Currently, it is only possible to define your own `EOSIO_ABI_EX` accepting actions from the token contract by adding an other if-condition: code == N(eosio.token) This means all actions of the token contract that are implemented in the market contract are called in the market contract as well. In this case, it is only the `transfer` method. [*Protip*: Use a base file like `pet.cpp` and two main files like `petcode.cpp` and `petabi.cpp` to compile the wasm code using the `EOSIO_ABI_EX` and to generate the abi file using `EOS_ABI` (see [github for details](https://github.com/friedger/monstereos/tree/market_value/contracts/pet))] In monstereosio, the transfer method was also used to update the account balance of the user, keeping up to date the amount the user transferred to the game. Now, the transfer method is extended with the handling of transferring ownership, bundled in method `_handletransf`. In this method the memo of the transfer is inspected and the contained offer id extracted. With the offer id the details are retrieved from the table of the market contract using the type `_tb_offers` defined in the headers file (and abi) of the market contract. _tb_offers offers(N(monstereosmt), N(monstereosmt)) The second parameter is `N(monstereosmt)` as there is only one global table. Some contracts us one table for each user. The call should then be like this: _tb_offers offers(N(monstereosmt), N(pet.owner)) After the offer was retrieved from the table, the amount, symbol, owner and offer type is validated. Once, the transfer can go ahead the token is transferred to the old owner of the monster, the ownership of the monster table is updated. For transferring the asset the game contract needs to have the permission to send actions. As described above, this is done with a single cleos call but this time for account `monstereosio`: cleos set account permission monstereosio active \ '{"threshold": 1, "keys": [{ "key": "'${EOS_KEY}'", "weight": 1 }], "accounts": [{ "permission": {"actor": "monstereosio", "permission": "eosio.code"}, "weight": 1 }]}' owner -p monstereosio Finally, the balance of the new owner account is decreased as it was increased at the beginning of the transfer of ownership. However, this is not necessarily needed for other use cases of NFTs. ## Conclusion Sending an action from one contract to another can be done with `action(...).send()` if the contract account has permission `eosio.code`. This works even if the action is not included in the ABI. The action is executed with the authority of the sending account. |
| json metadata | {"tags":["eos","monstereos","nft"],"image":["https://cdn.steemitimages.com/DQmdtiVBRZsCY8c4BLmcGfDD4qMAGbFVPaN5QBfLk3N9jj1/imageedit_23_3254665918.gif"],"links":["https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos","http://monstereos.io","https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md","https://github.com/friedger/monstereos/tree/market_value/contracts/pet"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24709439/Trx 94affe3cffc2d5b45618b6477454ad1cac4bd309 |
View Raw JSON Data
{
"trx_id": "94affe3cffc2d5b45618b6477454ad1cac4bd309",
"block": 24709439,
"trx_in_block": 20,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-02T07:59:42",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "eos",
"author": "friedger",
"permlink": "exchange-monsters-or-how-to-implement-transfers-of-nfts-between-contract",
"title": "Exchange monsters or How to implement transfers of NFTs between contract",
"body": "## Market for Monsters\nIn the last [monstereos post](https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos), I wrote about making monsters of the tamagochi game [monstereos.io](http://monstereos.io) non-fungible tokens (NFTs) that can be exchanged between users with a simple method call. Now, let's bring in some value. The NFT should only be transferred if a certain amount of tokens were transferred to the owner and thereby create a market for monsters.\n\n\n\nTo setup the monster market a new contract was created (monstereosmt). It contains the actions for asking and bidding for monsters. Without going into the aspects of finding matching offers and bids let's assume that an offer (created by the monster owner with the [offerpet action](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md)) was accepted by a bidder and the owner updated the offer to include the name of the new owner, i.e. the bidder.\n\n## Simple Transfer\nFor the simple transfer discussed in the previous post (without value), the market contract needs to ask the game contract to update the ownership of the monster. This is because tables are world-readable, but only writable by the owning contract. So, an action needs to be added to the game contract that the market contract can call. For monstereos, the `claimpet` action of the market can be called by the new owner. That action should then call the `transferpet` action in the game contract. This is the code:\n\n action(permission_level{_self, N(active)}, N(monstereosio), N(transferpet), std::make_tuple(pet.id, newowner)).send();\n\nThe action is send in the name of the contract, hence the permission level with self. The action to perform is `transferpet` of contract `monstereosio`. Finally, the parameters are added. Sending an action from a contract needs the `eosio.code` permission for the market account. This is done once with cleos like this:\n\n cleos set account permission monstereosmt active \\\n '{\"threshold\": 1,\n \"keys\": [{\n \"key\": \"'${EOS_KEY}'\",\n \"weight\": 1\n }],\n \"accounts\": [{\n \"permission\": {\"actor\": \"monstereosmt\",\n \"permission\": \"eosio.code\"},\n \"weight\": 1\n }]}' owner -p monstereosmt\n\nOn the other side, in the game contract the `transferpet` method was added. However, it is important that the method is not added to the ABI, otherwise every contract could call this method. And then in the method, the authorization of the market contract needs to be verified:\n\n require_auth(N(monstereosmt));\n\n## Transfer with Value\nMonsters that have been well fed and have played many battles are valuable and the new owner might be prepared to send some tokens in exchange for the monster. In order, to add value to a transfer the following steps are needed:\n\n1. **Transfer to escrow**: The bidder uses the token contract to transfer the agreed amount to the game escrow account (monstereosio in this case)\n2. **Verify offer and transfer**: The game contract validates the transferred amount, token symbol, and the identities of the owner and bidder with the offer.\n3. **Change ownership**: The game contract changes ownership.\n4. **Transfer funds from escrow**: The game contract transfers the tokens to the previous owner of the owner.\n5. **Tidy up**: The offer is deleted by the market contract which finalizes the transfer\n\nFor 1., it is just a call to the transfer action of the `eosio.token` contract, sending from the new owner to the game account. However, now it becomes interesting. What is needed to react on the transfer?\n\nAs described in EOS stackexchange, the market contract needs to adjust the `apply` method in the `EOSIO_ABI` macro. Currently, it is only possible to define your own `EOSIO_ABI_EX` accepting actions from the token contract by adding an other if-condition: \n\n code == N(eosio.token)\n\nThis means all actions of the token contract that are implemented in the market contract are called in the market contract as well. In this case, it is only the `transfer` method.\n\n[*Protip*: Use a base file like `pet.cpp` and two main files like `petcode.cpp` and `petabi.cpp` to compile the wasm code using the `EOSIO_ABI_EX` and to generate the abi file using `EOS_ABI` (see [github for details](https://github.com/friedger/monstereos/tree/market_value/contracts/pet))]\n\nIn monstereosio, the transfer method was also used to update the account balance of the user, keeping up to date the amount the user transferred to the game. Now, the transfer method is extended with the handling of transferring ownership, bundled in method `_handletransf`.\n\nIn this method the memo of the transfer is inspected and the contained offer id extracted. With the offer id the details are retrieved from the table of the market contract using the type `_tb_offers` defined in the headers file (and abi) of the market contract.\n\n _tb_offers offers(N(monstereosmt), N(monstereosmt))\n\nThe second parameter is `N(monstereosmt)` as there is only one global table. Some contracts us one table for each user. The call should then be like this:\n\n _tb_offers offers(N(monstereosmt), N(pet.owner))\n\nAfter the offer was retrieved from the table, the amount, symbol, owner and offer type is validated. Once, the transfer can go ahead the token is transferred to the old owner of the monster, the ownership of the monster table is updated. For transferring the asset the game contract needs to have the permission to send actions. As described above, this is done with a single cleos call but this time for account `monstereosio`:\n\n cleos set account permission monstereosio active \\\n '{\"threshold\": 1,\n \"keys\": [{\n \"key\": \"'${EOS_KEY}'\",\n \"weight\": 1\n }],\n \"accounts\": [{\n \"permission\": {\"actor\": \"monstereosio\",\n \"permission\": \"eosio.code\"},\n \"weight\": 1\n }]}' owner -p monstereosio\n\nFinally, the balance of the new owner account is decreased as it was increased at the beginning of the transfer of ownership. However, this is not necessarily needed for other use cases of NFTs.\n\n## Conclusion\nSending an action from one contract to another can be done with `action(...).send()` if the contract account has permission `eosio.code`. This works even if the action is not included in the ABI. The action is executed with the authority of the sending account.",
"json_metadata": "{\"tags\":[\"eos\",\"monstereos\",\"nft\"],\"image\":[\"https://cdn.steemitimages.com/DQmdtiVBRZsCY8c4BLmcGfDD4qMAGbFVPaN5QBfLk3N9jj1/imageedit_23_3254665918.gif\"],\"links\":[\"https://steemit.com/eos/@friedger/collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos\",\"http://monstereos.io\",\"https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md\",\"https://github.com/friedger/monstereos/tree/market_value/contracts/pet\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}friedgerpublished a new post: collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos2018/07/27 13:39:06
friedgerpublished a new post: collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos
2018/07/27 13:39:06
| parent author | |
| parent permlink | eos |
| author | friedger |
| permlink | collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos |
| title | Collect Monsters or How to implement non-fungible tokens on EOS |
| body | # The Game [Monstereos](http://monstereos.io) is named the first game implemented on the EOS blockchain. It is a [Tamagotchi](https://en.wikipedia.org/wiki/Tamagotchi) alike game where the user has to care for their monsters. There are no creation fees for new monsters. The user has just to pay for the storage (< 400 bytes). Have a go, and try it out! Note that your monsters need to rest for 4 hours after birth and they can live for 20 hours without feeding. (This is also explained in the ricardian contract of the create action.)  With your monsters, you can now also play in a battle arena. You meet with another user, everyone chooses one of the monsters to play and then you start attacking each other. Depending on the properties of the monster you have a different choice of attack methods. If you know the properties of the other monsters you have higher chances to win the game. There are 109 different types of monsters and each monster becomes unique by its name and its id. The monster can there be identified globally as `monstereosio:pets:2558` (first the contract account, then the place of storage/table name, then the id). # Non-fungible tokens With the global identifier, monsters become [non-fungible tokens](https://en.wikipedia.org/wiki/Non-fungible_token). On the Ethereum blockchain, the properties of NFTs are defined in [EIP-721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) and the standard requires the following methods: * balanceOf(owner) * ownerOf(tokenId) * \*transferFrom(from, to, tokenId) * .. and more methods about approved addresses ## ownerOf Non-fungible tokens (NFTs) have only one owner and you can find the owner by using e.g. cleos get table monstereosio monstereosio pets -L 2558 -l 1 This means one row (`-l 1`) starting from primary key with id 2558 (`-L 2558`) is queried. Hence, the owner can be found by querying the table and looking for property `owner` in the result of `get table`. ## tokenOfOwner On the other hand, the NFTs of a owner can be found with cleos get table monstereosio monstereosio pets -L owner -U ownerX --key-type i64 --index 2 This call assumes that the second index of the table `pets` is the index by owner. For the upper limit (`-U)` a name should be used that follows `owner` and preceeds the next user. As names are limited to 12 characters appending one letter to `owner` like `ownerX` is a good choice to just receive the NFTs of the owner. ## transfer When transferring a monster between users **without** payment it does not need more than an update of the table row in the `transfernft(owner, newowner, tokenId)` action. pets.modify(itr_pet, 0, [&](auto &r) { r.owner = newowner; }); The code is taken from [github.com/leordev/monstereos](https://github.com/leordev/monstereos/blob/master/contracts/pet/pet.cpp) The ricardian contract for that action could contain a part like the following: ### Intent The intent of the `{{ transfernft }}` action is to transfer ownership of the given digital asset to {{ newowner }}. Consequently move the cost for RAM of storing to the asset to {{ newowner }}. {{actor}} confirms that {{newowner}} has agreed to pay for these costs and adhere to the contracts associated with the digital asset. ### Term This Contract expires after the code was executed. The text was adapted from [github.com/friedger/monstereos](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md) # Conclusion Non-fungible tokens can be implemented using multi_index tables with the following conventions: * Tokens are identified by `contract:table_name:id` * The token table has a column `owner` * The second index of the token table is by column `owner` * The contract has a method `transfernft` For Monstereos, the ricardian contract of the `createpet` action defines the rights and obligations of a monster owner. If and how this is applicable to the general concept of NFTs needs to be discussed. Futhermore, NFTs should be transferable with a value associated to the token. This becomes more tricky on the EOS blockchain. The contract has to listen for a certain `eosio.token::transfer` action and then react on that. I will explain the solution for monstereos in the next article. |
| json metadata | {"tags":["eos","monstereos","nft"],"image":["https://cdn.steemitimages.com/DQmNMKRLb3QVgiJ5FdAXWkrQAsZ75or29yZLQu9R81Vty9V/monster-105.png"],"links":["http://monstereos.io","https://en.wikipedia.org/wiki/Tamagotchi","https://en.wikipedia.org/wiki/Non-fungible_token","https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md","https://github.com/leordev/monstereos/blob/master/contracts/pet/pet.cpp","https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24543927/Trx 43d961220cb05384d4610af1280eeb3c6468f696 |
View Raw JSON Data
{
"trx_id": "43d961220cb05384d4610af1280eeb3c6468f696",
"block": 24543927,
"trx_in_block": 56,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-27T13:39:06",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "eos",
"author": "friedger",
"permlink": "collect-monsters-or-how-to-implement-non-fungible-tokens-on-eos",
"title": "Collect Monsters or How to implement non-fungible tokens on EOS",
"body": "# The Game\n[Monstereos](http://monstereos.io) is named the first game implemented on the EOS blockchain. It is a [Tamagotchi](https://en.wikipedia.org/wiki/Tamagotchi) alike game where the user has to care for their monsters. There are no creation fees for new monsters. The user has just to pay for the storage (< 400 bytes). Have a go, and try it out! Note that your monsters need to rest for 4 hours after birth and they can live for 20 hours without feeding. (This is also explained in the ricardian contract of the create action.)\n\n\n\nWith your monsters, you can now also play in a battle arena. You meet with another user, everyone chooses one of the monsters to play and then you start attacking each other. Depending on the properties of the monster you have a different choice of attack methods. If you know the properties of the other monsters you have higher chances to win the game. There are 109 different types of monsters and each monster becomes unique by its name and its id. The monster can there be identified globally as `monstereosio:pets:2558` (first the contract account, then the place of storage/table name, then the id).\n\n# Non-fungible tokens\n\nWith the global identifier, monsters become [non-fungible tokens](https://en.wikipedia.org/wiki/Non-fungible_token). On the Ethereum blockchain, the properties of NFTs are defined in [EIP-721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) and the standard requires the following methods:\n* balanceOf(owner)\n* ownerOf(tokenId)\n* \\*transferFrom(from, to, tokenId)\n* .. and more methods about approved addresses\n\n## ownerOf\nNon-fungible tokens (NFTs) have only one owner and you can find the owner by using e.g. \n \n cleos get table monstereosio monstereosio pets -L 2558 -l 1\n\nThis means one row (`-l 1`) starting from primary key with id 2558 (`-L 2558`) is queried.\n\nHence, the owner can be found by querying the table and looking for property `owner` in the result of `get table`. \n\n## tokenOfOwner\nOn the other hand, the NFTs of a owner can be found with\n\n cleos get table monstereosio monstereosio pets -L owner -U ownerX --key-type i64 --index 2\n\nThis call assumes that the second index of the table `pets` is the index by owner. For the upper limit (`-U)` a name should be used that follows `owner` and preceeds the next user. As names are limited to 12 characters appending one letter to `owner` like `ownerX` is a good choice to just receive the NFTs of the owner.\n\n\n## transfer\nWhen transferring a monster between users **without** payment it does not need more than an update of the table row in the `transfernft(owner, newowner, tokenId)` action. \n\n pets.modify(itr_pet, 0, [&](auto &r) {\n r.owner = newowner;\n });\nThe code is taken from [github.com/leordev/monstereos](https://github.com/leordev/monstereos/blob/master/contracts/pet/pet.cpp)\n\nThe ricardian contract for that action could contain a part like the following:\n\n ### Intent\n The intent of the `{{ transfernft }}` action is to transfer ownership of the given digital asset to {{ newowner }}. Consequently move the cost for RAM of storing to the asset to {{ newowner }}. {{actor}} confirms that {{newowner}} has agreed to pay for these costs and adhere to the contracts associated with the digital asset.\n \n ### Term\n This Contract expires after the code was executed.\n\nThe text was adapted from [github.com/friedger/monstereos](https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md)\n\n# Conclusion\nNon-fungible tokens can be implemented using multi_index tables with the following conventions:\n* Tokens are identified by `contract:table_name:id`\n* The token table has a column `owner`\n* The second index of the token table is by column `owner`\n* The contract has a method `transfernft`\n\nFor Monstereos, the ricardian contract of the `createpet` action defines the rights and obligations of a monster owner. If and how this is applicable to the general concept of NFTs needs to be discussed. \n\nFuthermore, NFTs should be transferable with a value associated to the token. This becomes more tricky on the EOS blockchain. The contract has to listen for a certain `eosio.token::transfer` action and then react on that. I will explain the solution for monstereos in the next article.",
"json_metadata": "{\"tags\":[\"eos\",\"monstereos\",\"nft\"],\"image\":[\"https://cdn.steemitimages.com/DQmNMKRLb3QVgiJ5FdAXWkrQAsZ75or29yZLQu9R81Vty9V/monster-105.png\"],\"links\":[\"http://monstereos.io\",\"https://en.wikipedia.org/wiki/Tamagotchi\",\"https://en.wikipedia.org/wiki/Non-fungible_token\",\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\",\"https://github.com/leordev/monstereos/blob/master/contracts/pet/pet.cpp\",\"https://github.com/friedger/monstereos/blob/market_value/contracts/market/market.offerpet_rc.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}friedgerreceived 0.008 STEEM, 0.005 SBD, 0.016 SP author reward for @friedger / google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem2018/07/25 16:19:36
friedgerreceived 0.008 STEEM, 0.005 SBD, 0.016 SP author reward for @friedger / google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem
2018/07/25 16:19:36
| author | friedger |
| permlink | google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| sbd payout | 0.005 SBD |
| steem payout | 0.008 STEEM |
| vesting payout | 26.356630 VESTS |
| Transaction Info | Block #24489615/Virtual Operation #16 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 24489615,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 16,
"timestamp": "2018-07-25T16:19:36",
"op": [
"author_reward",
{
"author": "friedger",
"permlink": "google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"sbd_payout": "0.005 SBD",
"steem_payout": "0.008 STEEM",
"vesting_payout": "26.356630 VESTS"
}
]
}2018/07/24 12:35:54
2018/07/24 12:35:54
| parent author | friedger |
| parent permlink | google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| author | steemitboard |
| permlink | steemitboard-notify-friedger-20180724t123554000z |
| title | |
| body | Congratulations @friedger! You have received a personal award! [](http://steemitboard.com/@friedger) 1 Year on Steemit <sub>_Click on the badge to view your Board of Honor._</sub> > You can upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #24456355/Trx af0c5baec5d336e5afbe9f9a5d7dba27df42af06 |
View Raw JSON Data
{
"trx_id": "af0c5baec5d336e5afbe9f9a5d7dba27df42af06",
"block": 24456355,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-24T12:35:54",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"author": "steemitboard",
"permlink": "steemitboard-notify-friedger-20180724t123554000z",
"title": "",
"body": "Congratulations @friedger! You have received a personal award!\n\n[](http://steemitboard.com/@friedger) 1 Year on Steemit\n<sub>_Click on the badge to view your Board of Honor._</sub>\n\n\n> You can upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}friedgerreceived 0.005 STEEM, 0.004 SBD, 0.011 SP author reward for @friedger / re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z2018/07/23 14:24:54
friedgerreceived 0.005 STEEM, 0.004 SBD, 0.011 SP author reward for @friedger / re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z
2018/07/23 14:24:54
| author | friedger |
| permlink | re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z |
| sbd payout | 0.004 SBD |
| steem payout | 0.005 STEEM |
| vesting payout | 18.248906 VESTS |
| Transaction Info | Block #24429742/Virtual Operation #25 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 24429742,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 25,
"timestamp": "2018-07-23T14:24:54",
"op": [
"author_reward",
{
"author": "friedger",
"permlink": "re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z",
"sbd_payout": "0.004 SBD",
"steem_payout": "0.005 STEEM",
"vesting_payout": "18.248906 VESTS"
}
]
}2018/07/18 16:19:42
2018/07/18 16:19:42
| parent author | friedger |
| parent permlink | google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| author | introduce.bot |
| permlink | introduce-bot-re-friedgergoogle-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| title | |
| body | ✅ @friedger, I gave you an upvote on your post!<br><br>If you are interested in claiming free Byteballs ($10+), just for having a Steem account, please visit this post for instructions: https://steemit.com/steem/@berniesanders/do-you-want-some-free-byteballs |
| json metadata | |
| Transaction Info | Block #24288148/Trx a2b5e21ccd6a84bfe8c1c57614f42219fde11db5 |
View Raw JSON Data
{
"trx_id": "a2b5e21ccd6a84bfe8c1c57614f42219fde11db5",
"block": 24288148,
"trx_in_block": 28,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-18T16:19:42",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"author": "introduce.bot",
"permlink": "introduce-bot-re-friedgergoogle-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"title": "",
"body": "✅ @friedger, I gave you an upvote on your post!<br><br>If you are interested in claiming free Byteballs ($10+), just for having a Steem account, please visit this post for instructions: https://steemit.com/steem/@berniesanders/do-you-want-some-free-byteballs",
"json_metadata": ""
}
]
}2018/07/18 16:19:42
2018/07/18 16:19:42
| voter | introduce.bot |
| author | friedger |
| permlink | google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| weight | 200 (2.00%) |
| Transaction Info | Block #24288148/Trx bc68745d119bc37eaaf78bbec8cbc42cf18593e1 |
View Raw JSON Data
{
"trx_id": "bc68745d119bc37eaaf78bbec8cbc42cf18593e1",
"block": 24288148,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-18T16:19:42",
"op": [
"vote",
{
"voter": "introduce.bot",
"author": "friedger",
"permlink": "google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"weight": 200
}
]
}friedgerpublished a new post: google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem2018/07/18 16:19:36
friedgerpublished a new post: google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem
2018/07/18 16:19:36
| parent author | |
| parent permlink | android |
| author | friedger |
| permlink | google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem |
| title | Google behaves seriously illegally since 2011 in the Android ecosystem |
| body | Today, the EU competition commissioner Margrethe Vestager announced that Google behaves seriously illegally since 2011 with regards to the Android ecosystem. The fine of 5b$ is in the usual range maybe at the upper end.  The commission found that Google is in a dominating market position in the mobile operating system market and the mobile internet search market. With that it has special responsibility towards the market as defined by the anti-competitive laws. However, Google did not lived up to that responsibility and hence behaves seriously illegally. In particular, the commission found proofs that Google did require bundling their apps with Google Play Store. Google did pay device manufacturer a share of their ads revenue only if they did not preinstall any other search app next to Google Search app. Google did prevent device manufacturer to build devices with other operating systems. This behavior is not acceptable for a market dominating company. The amount was determined by the usual rules of the commission taking into account the duration of the illegal behavior, the seriousness of the illegal behavior and the turnover of the company doing the illegal behavior. The fact that the amount is 5b$ shows that Google is one of the biggest companies behaving illegally ever. Now it is up to Google to change the situation effectively. We have to see what Google is doing, maybe they will send a push message to all user in the EU telling them that they can install a different browser or search app as requested by the Russian competition body, maybe Google Play will provide a page with all available browsers in Google Play. Obviously, this will only happen after there the appeals process has finished. Still, I hope to see a Firefox phone with Google Play soon! |
| json metadata | {"tags":["android","google","anti-trust"],"image":["https://cdn.steemitimages.com/DQmVmw3wyrkaEGiyGNGqFyM1drFfpLS976dKEPqc69nr9eU/pawel-czerwinski-710838-unsplash.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24288146/Trx 57939ffa7532143a5e9a8ad953b749ed2cb5a490 |
View Raw JSON Data
{
"trx_id": "57939ffa7532143a5e9a8ad953b749ed2cb5a490",
"block": 24288146,
"trx_in_block": 41,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-18T16:19:36",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "android",
"author": "friedger",
"permlink": "google-behaves-seriously-illegally-since-2011-in-the-android-ecosystem",
"title": "Google behaves seriously illegally since 2011 in the Android ecosystem",
"body": "Today, the EU competition commissioner Margrethe Vestager announced that Google behaves seriously illegally since 2011 with regards to the Android ecosystem. The fine of 5b$ is in the usual range maybe at the upper end.\n\n\n\nThe commission found that Google is in a dominating market position in the mobile operating system market and the mobile internet search market. With that it has special responsibility towards the market as defined by the anti-competitive laws. However, Google did not lived up to that responsibility and hence behaves seriously illegally. \n\nIn particular, the commission found proofs that Google did require bundling their apps with Google Play Store. Google did pay device manufacturer a share of their ads revenue only if they did not preinstall any other search app next to Google Search app. Google did prevent device manufacturer to build devices with other operating systems. This behavior is not acceptable for a market dominating company.\n\nThe amount was determined by the usual rules of the commission taking into account the duration of the illegal behavior, the seriousness of the illegal behavior and the turnover of the company doing the illegal behavior. The fact that the amount is 5b$ shows that Google is one of the biggest companies behaving illegally ever.\n\nNow it is up to Google to change the situation effectively. We have to see what Google is doing, maybe they will send a push message to all user in the EU telling them that they can install a different browser or search app as requested by the Russian competition body, maybe Google Play will provide a page with all available browsers in Google Play.\n\nObviously, this will only happen after there the appeals process has finished.\n\nStill, I hope to see a Firefox phone with Google Play soon!",
"json_metadata": "{\"tags\":[\"android\",\"google\",\"anti-trust\"],\"image\":[\"https://cdn.steemitimages.com/DQmVmw3wyrkaEGiyGNGqFyM1drFfpLS976dKEPqc69nr9eU/pawel-czerwinski-710838-unsplash.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/07/16 22:40:45
2018/07/16 22:40:45
| voter | controllinghand |
| author | friedger |
| permlink | re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z |
| weight | 10000 (100.00%) |
| Transaction Info | Block #24238236/Trx f922b51fb3899aee30e4073c5d2aeb11e52495f4 |
View Raw JSON Data
{
"trx_id": "f922b51fb3899aee30e4073c5d2aeb11e52495f4",
"block": 24238236,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-16T22:40:45",
"op": [
"vote",
{
"voter": "controllinghand",
"author": "friedger",
"permlink": "re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z",
"weight": 10000
}
]
}2018/07/16 21:29:06
2018/07/16 21:29:06
| parent author | friedger |
| parent permlink | re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z |
| author | andybets |
| permlink | re-friedger-re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t212906834z |
| title | |
| body | Looks like an interesting project, but from what I understand it doesn't tie EOS accounts to profiles, so it's not quite covering the same ground. We'll hopefully move storage to IPFS before long, but for now all data can be freely downloaded by the community, and resurrected in the event of a significant server failure. |
| json metadata | {"tags":["eostitan"],"app":"steemit/0.1"} |
| Transaction Info | Block #24236803/Trx cacb26c21c280f4adcce6d8705134026d3ae6144 |
View Raw JSON Data
{
"trx_id": "cacb26c21c280f4adcce6d8705134026d3ae6144",
"block": 24236803,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-16T21:29:06",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z",
"author": "andybets",
"permlink": "re-friedger-re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t212906834z",
"title": "",
"body": "Looks like an interesting project, but from what I understand it doesn't tie EOS accounts to profiles, so it's not quite covering the same ground. We'll hopefully move storage to IPFS before long, but for now all data can be freely downloaded by the community, and resurrected in the event of a significant server failure.",
"json_metadata": "{\"tags\":[\"eostitan\"],\"app\":\"steemit/0.1\"}"
}
]
}2018/07/16 14:24:54
2018/07/16 14:24:54
| parent author | controllinghand |
| parent permlink | eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain |
| author | friedger |
| permlink | re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z |
| title | |
| body | Blockstack.org has defined a nice decentralized profile system. It defines a zone file to look up the profile data. It is defined in their white paper and on some articles. Look for Blockchain Naming System (BNS) The user can choose where the data is stored, i.e. it is decentralized, better protected against single point of failure. What happens if the eostitan servers fail? The zone file is small and is store on chain. |
| json metadata | {"tags":["eostitan"],"app":"steemit/0.1"} |
| Transaction Info | Block #24228322/Trx 14cfa171b1ebc127585440e585c7c55caa6d23f6 |
View Raw JSON Data
{
"trx_id": "14cfa171b1ebc127585440e585c7c55caa6d23f6",
"block": 24228322,
"trx_in_block": 51,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-16T14:24:54",
"op": [
"comment",
{
"parent_author": "controllinghand",
"parent_permlink": "eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain",
"author": "friedger",
"permlink": "re-controllinghand-eostitan-does-it-again-verified-public-account-profiles-on-the-eos-blockchain-20180716t142454821z",
"title": "",
"body": "Blockstack.org has defined a nice decentralized profile system. It defines a zone file to look up the profile data. It is defined in their white paper and on some articles. Look for Blockchain Naming System (BNS)\n\nThe user can choose where the data is stored, i.e. it is decentralized, better protected against single point of failure. What happens if the eostitan servers fail? The zone file is small and is store on chain.",
"json_metadata": "{\"tags\":[\"eostitan\"],\"app\":\"steemit/0.1\"}"
}
]
}2018/07/04 03:54:57
2018/07/04 03:54:57
| delegator | steem |
| delegatee | friedger |
| vesting shares | 14214.917321 VESTS |
| Transaction Info | Block #23870301/Trx 20b8bcb3c6aee0d94c78ef261a93aee240100187 |
View Raw JSON Data
{
"trx_id": "20b8bcb3c6aee0d94c78ef261a93aee240100187",
"block": 23870301,
"trx_in_block": 8,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-04T03:54:57",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "14214.917321 VESTS"
}
]
}friedgerupvoted (100.00%) @controllinghand / eos-power-to-the-people-no-whale-bps2018/06/28 07:21:30
friedgerupvoted (100.00%) @controllinghand / eos-power-to-the-people-no-whale-bps
2018/06/28 07:21:30
| voter | friedger |
| author | controllinghand |
| permlink | eos-power-to-the-people-no-whale-bps |
| weight | 10000 (100.00%) |
| Transaction Info | Block #23711501/Trx 98d84b2b2f1da5538f93a08ef989bb13b4fadd11 |
View Raw JSON Data
{
"trx_id": "98d84b2b2f1da5538f93a08ef989bb13b4fadd11",
"block": 23711501,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-28T07:21:30",
"op": [
"vote",
{
"voter": "friedger",
"author": "controllinghand",
"permlink": "eos-power-to-the-people-no-whale-bps",
"weight": 10000
}
]
}friedgerupvoted (100.00%) @eos.sw-eden / ram-speculation-it-s-not-for-us2018/06/28 07:04:21
friedgerupvoted (100.00%) @eos.sw-eden / ram-speculation-it-s-not-for-us
2018/06/28 07:04:21
| voter | friedger |
| author | eos.sw-eden |
| permlink | ram-speculation-it-s-not-for-us |
| weight | 10000 (100.00%) |
| Transaction Info | Block #23711158/Trx 324362bed9974d64e7aa4efd3efc1fff0499c6ee |
View Raw JSON Data
{
"trx_id": "324362bed9974d64e7aa4efd3efc1fff0499c6ee",
"block": 23711158,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-28T07:04:21",
"op": [
"vote",
{
"voter": "friedger",
"author": "eos.sw-eden",
"permlink": "ram-speculation-it-s-not-for-us",
"weight": 10000
}
]
}friedgercustom json: follow2018/06/15 10:45:33
friedgercustom json: follow
2018/06/15 10:45:33
| required auths | [] |
| required posting auths | ["friedger"] |
| id | follow |
| json | ["reblog",{"account":"friedger","author":"eosnairobi","permlink":"we-are-eos-nairobi"}] |
| Transaction Info | Block #23341273/Trx a2778c1147b0bf4e28c12f592ad474f1e601735e |
View Raw JSON Data
{
"trx_id": "a2778c1147b0bf4e28c12f592ad474f1e601735e",
"block": 23341273,
"trx_in_block": 78,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-15T10:45:33",
"op": [
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"friedger"
],
"id": "follow",
"json": "[\"reblog\",{\"account\":\"friedger\",\"author\":\"eosnairobi\",\"permlink\":\"we-are-eos-nairobi\"}]"
}
]
}friedgerupvoted (100.00%) @eosnairobi / why-i-think-eos-will-transform-the-african-continent2018/06/15 10:44:54
friedgerupvoted (100.00%) @eosnairobi / why-i-think-eos-will-transform-the-african-continent
2018/06/15 10:44:54
| voter | friedger |
| author | eosnairobi |
| permlink | why-i-think-eos-will-transform-the-african-continent |
| weight | 10000 (100.00%) |
| Transaction Info | Block #23341260/Trx 043bb713a4ed714d926de5282a53b1903429bb21 |
View Raw JSON Data
{
"trx_id": "043bb713a4ed714d926de5282a53b1903429bb21",
"block": 23341260,
"trx_in_block": 46,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-15T10:44:54",
"op": [
"vote",
{
"voter": "friedger",
"author": "eosnairobi",
"permlink": "why-i-think-eos-will-transform-the-african-continent",
"weight": 10000
}
]
}2018/06/03 20:06:42
2018/06/03 20:06:42
| voter | friedger |
| author | bodget |
| permlink | eos-bps-is-what-you-re-doing-now-going-to-get-you-notlisted-by-eos-block-producer-candidates |
| weight | 10000 (100.00%) |
| Transaction Info | Block #23007553/Trx 500a4d5e2255e0f1ecf08780e92f661bf01c6641 |
View Raw JSON Data
{
"trx_id": "500a4d5e2255e0f1ecf08780e92f661bf01c6641",
"block": 23007553,
"trx_in_block": 31,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-03T20:06:42",
"op": [
"vote",
{
"voter": "friedger",
"author": "bodget",
"permlink": "eos-bps-is-what-you-re-doing-now-going-to-get-you-notlisted-by-eos-block-producer-candidates",
"weight": 10000
}
]
}friedgerupvoted (100.00%) @roxane / 3000-followers-thank-you-everybody-32018/04/11 05:43:06
friedgerupvoted (100.00%) @roxane / 3000-followers-thank-you-everybody-3
2018/04/11 05:43:06
| voter | friedger |
| author | roxane |
| permlink | 3000-followers-thank-you-everybody-3 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21465204/Trx 09115361835f30bdf71e2f038a9daa4351dd4b39 |
View Raw JSON Data
{
"trx_id": "09115361835f30bdf71e2f038a9daa4351dd4b39",
"block": 21465204,
"trx_in_block": 9,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-11T05:43:06",
"op": [
"vote",
{
"voter": "friedger",
"author": "roxane",
"permlink": "3000-followers-thank-you-everybody-3",
"weight": 10000
}
]
}2018/02/26 23:18:21
2018/02/26 23:18:21
| delegator | steem |
| delegatee | friedger |
| vesting shares | 14417.932353 VESTS |
| Transaction Info | Block #20220765/Trx 6511fdbbcf38345f78ac02da598ce604bfa04fbe |
View Raw JSON Data
{
"trx_id": "6511fdbbcf38345f78ac02da598ce604bfa04fbe",
"block": 20220765,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-26T23:18:21",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "14417.932353 VESTS"
}
]
}friedgerclaimed reward balance: 23.536 SBD, 9.333 SP2018/02/26 22:31:33
friedgerclaimed reward balance: 23.536 SBD, 9.333 SP
2018/02/26 22:31:33
| account | friedger |
| reward steem | 0.000 STEEM |
| reward sbd | 23.536 SBD |
| reward vests | 15197.840503 VESTS |
| Transaction Info | Block #20219829/Trx 74a12480bfde838dc2016bba4c6aac011b703c1e |
View Raw JSON Data
{
"trx_id": "74a12480bfde838dc2016bba4c6aac011b703c1e",
"block": 20219829,
"trx_in_block": 27,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-26T22:31:33",
"op": [
"claim_reward_balance",
{
"account": "friedger",
"reward_steem": "0.000 STEEM",
"reward_sbd": "23.536 SBD",
"reward_vests": "15197.840503 VESTS"
}
]
}edimusliadiupvoted (100.00%) @friedger / personal-review-of-fosdem-20182018/02/06 15:06:21
edimusliadiupvoted (100.00%) @friedger / personal-review-of-fosdem-2018
2018/02/06 15:06:21
| voter | edimusliadi |
| author | friedger |
| permlink | personal-review-of-fosdem-2018 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19635465/Trx c7ab9c141d34d7206f383bb85da97415fab1c109 |
View Raw JSON Data
{
"trx_id": "c7ab9c141d34d7206f383bb85da97415fab1c109",
"block": 19635465,
"trx_in_block": 29,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-06T15:06:21",
"op": [
"vote",
{
"voter": "edimusliadi",
"author": "friedger",
"permlink": "personal-review-of-fosdem-2018",
"weight": 10000
}
]
}tariqul0988upvoted (100.00%) @friedger / personal-review-of-fosdem-20182018/02/06 15:03:45
tariqul0988upvoted (100.00%) @friedger / personal-review-of-fosdem-2018
2018/02/06 15:03:45
| voter | tariqul0988 |
| author | friedger |
| permlink | personal-review-of-fosdem-2018 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19635413/Trx 83fb8f60585992d85d903924733ff1d4c6ff6b14 |
View Raw JSON Data
{
"trx_id": "83fb8f60585992d85d903924733ff1d4c6ff6b14",
"block": 19635413,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-06T15:03:45",
"op": [
"vote",
{
"voter": "tariqul0988",
"author": "friedger",
"permlink": "personal-review-of-fosdem-2018",
"weight": 10000
}
]
}friedgerpublished a new post: personal-review-of-fosdem-20182018/02/06 15:01:45
friedgerpublished a new post: personal-review-of-fosdem-2018
2018/02/06 15:01:45
| parent author | |
| parent permlink | fosdem |
| author | friedger |
| permlink | personal-review-of-fosdem-2018 |
| title | Personal Review of FOSDEM 2018 |
| body | As usual in February, the open source community from Europe and all over the world unites at FOSDEM in Brussels, Belgium to discuss the latest developments in the open source world. The conference with around 8000 participants is a source of great inspiration and spirit. Topics range from linux, real-time communication, and hardware to decentralized services and human right protection. My highlight was to attend the unveiling of the first linux capable computer that has an open instruction set, i.e. runs on **RISC-V** architecture. I was following the development of RISC-V for a while and it felt good to see such a progress.  Further on, I had the chance to talk to Matthew from **matrix.org** about the (hopefully) bright future. I also saw the probably first 3d video conferencing call using matrix and the depth camera of a smartphone. I learnt about how Android helped to improve the graphics stack in linux. In general, the event is great to learn about new open projects. I found out about **gitmate.io** that helps to organize issues using machine learning and about **bugmark.net** that takes a refreshing approach to bug bounties. bugmark.net is a market for future on the date when a bug is fixed. An investor bets that the bug is not fixed by a certain date and the developer bets that it will be fixed by then. It is based on smart contracts and it really brings market forces to the peer productivity of the open source world. And there is more to it like like triage, analytics, as I learn from Don Marti, the founder of the project, in the hallway after the blockchain Bird-Of-Feather (BOF) session. With the hype of blockchain and the support of Mozilla, the project can really become a game changer of the bounty schemes. At a certain point I got confused about blockchain. In the Decentralised Internet devroom, the speaker talked about how bad it is that the EU commission wants blockchain everywhere, while I thought that this is quite good. But apparently, there are more opinions about blockchain applications from governments outside of my bubble. This is why FOSDEM is such a great event.  Google was also present. For one, as sponsor, then on posters from activists of laquadrature.net, but more importantly in the heads of all of us. In the above mentioned blockchain BOF session, a Google sheet was used to collaborate without thinking. No decentralized sheet, no open source app! Something that really bothers me. As a volunteer, it was great to get in touch with random people and I can only encourage everybody interested in open source to do the same. Give something back! Yes, there were full rooms and long queues. But that is expected with so many sessions and attendees. The great organization team makes this possible for free, and by the way, the videos of many sessions already available online. See you next year! |
| json metadata | {"tags":["fosdem","opensource","conference"],"image":["https://steemitimages.com/DQmRcbmAxXV1a3dene78jhqopeJBa2HiM1BTxSrDZMpdvDm/sifive.jpg","https://steemitimages.com/DQmZuAKMxZqiYBVNmXDTefxdqe83PPvfjRTGJqY8pWp5w4E/ebee6d87afce239a.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #19635373/Trx 9313901249299afad3e4575643eca79cfd941343 |
View Raw JSON Data
{
"trx_id": "9313901249299afad3e4575643eca79cfd941343",
"block": 19635373,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-06T15:01:45",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "fosdem",
"author": "friedger",
"permlink": "personal-review-of-fosdem-2018",
"title": "Personal Review of FOSDEM 2018",
"body": "As usual in February, the open source community from Europe and all over the world unites at FOSDEM in Brussels, Belgium to discuss the latest developments in the open source world. The conference with around 8000 participants is a source of great inspiration and spirit. Topics range from linux, real-time communication, and hardware to decentralized services and human right protection. \n\nMy highlight was to attend the unveiling of the first linux capable computer that has an open instruction set, i.e. runs on **RISC-V** architecture. I was following the development of RISC-V for a while and it felt good to see such a progress.\n\n\n\nFurther on, I had the chance to talk to Matthew from **matrix.org** about the (hopefully) bright future. I also saw the probably first 3d video conferencing call using matrix and the depth camera of a smartphone. I learnt about how Android helped to improve the graphics stack in linux. In general, the event is great to learn about new open projects. \n\nI found out about **gitmate.io** that helps to organize issues using machine learning and about **bugmark.net** that takes a refreshing approach to bug bounties. bugmark.net is a market for future on the date when a bug is fixed. An investor bets that the bug is not fixed by a certain date and the developer bets that it will be fixed by then. It is based on smart contracts and it really brings market forces to the peer productivity of the open source world. And there is more to it like like triage, analytics, as I learn from Don Marti, the founder of the project, in the hallway after the blockchain Bird-Of-Feather (BOF) session. With the hype of blockchain and the support of Mozilla, the project can really become a game changer of the bounty schemes.\n\nAt a certain point I got confused about blockchain. In the Decentralised Internet devroom, the speaker talked about how bad it is that the EU commission wants blockchain everywhere, while I thought that this is quite good. But apparently, there are more opinions about blockchain applications from governments outside of my bubble. This is why FOSDEM is such a great event.\n\n\n\nGoogle was also present. For one, as sponsor, then on posters from activists of laquadrature.net, but more importantly in the heads of all of us. In the above mentioned blockchain BOF session, a Google sheet was used to collaborate without thinking. No decentralized sheet, no open source app! Something that really bothers me.\n\nAs a volunteer, it was great to get in touch with random people and I can only encourage everybody interested in open source to do the same. Give something back! Yes, there were full rooms and long queues. But that is expected with so many sessions and attendees. The great organization team makes this possible for free, and by the way, the videos of many sessions already available online. See you next year!",
"json_metadata": "{\"tags\":[\"fosdem\",\"opensource\",\"conference\"],\"image\":[\"https://steemitimages.com/DQmRcbmAxXV1a3dene78jhqopeJBa2HiM1BTxSrDZMpdvDm/sifive.jpg\",\"https://steemitimages.com/DQmZuAKMxZqiYBVNmXDTefxdqe83PPvfjRTGJqY8pWp5w4E/ebee6d87afce239a.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/02/02 23:43:24
2018/02/02 23:43:24
| parent author | friedger |
| parent permlink | avatar-not-shown |
| author | steemitboard |
| permlink | steemitboard-notify-friedger-20180202t234326000z |
| title | |
| body | Congratulations @friedger! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [](http://steemitboard.com/@friedger) You got your First payout [](http://steemitboard.com/@friedger) You got a First Reply [](http://steemitboard.com/@friedger) Award for the total payout received Click on any badge to view your own Board of Honor on SteemitBoard. For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)! |
| json metadata | {"image":["https://steemitboard.com/img/notifications.png"]} |
| Transaction Info | Block #19530752/Trx bd0011605b4db44e6e16e6ea38a1ec3e1c5aa1f5 |
View Raw JSON Data
{
"trx_id": "bd0011605b4db44e6e16e6ea38a1ec3e1c5aa1f5",
"block": 19530752,
"trx_in_block": 54,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-02-02T23:43:24",
"op": [
"comment",
{
"parent_author": "friedger",
"parent_permlink": "avatar-not-shown",
"author": "steemitboard",
"permlink": "steemitboard-notify-friedger-20180202t234326000z",
"title": "",
"body": "Congratulations @friedger! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[](http://steemitboard.com/@friedger) You got your First payout\n[](http://steemitboard.com/@friedger) You got a First Reply\n[](http://steemitboard.com/@friedger) Award for the total payout received\n\nClick on any badge to view your own Board of Honor on SteemitBoard.\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}"
}
]
}2018/01/09 06:38:27
2018/01/09 06:38:27
| delegator | steem |
| delegatee | friedger |
| vesting shares | 29692.061879 VESTS |
| Transaction Info | Block #18819569/Trx e70e1d190e6564bc8146f965e1c62fc508bee898 |
View Raw JSON Data
{
"trx_id": "e70e1d190e6564bc8146f965e1c62fc508bee898",
"block": 18819569,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-01-09T06:38:27",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "friedger",
"vesting_shares": "29692.061879 VESTS"
}
]
}friedgerreceived 23.536 SBD, 9.333 SP author reward for @friedger / add-search-for-token-list2017/12/22 10:20:24
friedgerreceived 23.536 SBD, 9.333 SP author reward for @friedger / add-search-for-token-list
2017/12/22 10:20:24
| author | friedger |
| permlink | add-search-for-token-list |
| sbd payout | 23.536 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 15197.840503 VESTS |
| Transaction Info | Block #18306125/Virtual Operation #7 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 18306125,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 7,
"timestamp": "2017-12-22T10:20:24",
"op": [
"author_reward",
{
"author": "friedger",
"permlink": "add-search-for-token-list",
"sbd_payout": "23.536 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "15197.840503 VESTS"
}
]
}utopian.payreceived 6.221 SP benefactor reward from @friedger2017/12/22 10:20:24
utopian.payreceived 6.221 SP benefactor reward from @friedger
2017/12/22 10:20:24
| benefactor | utopian.pay |
| author | friedger |
| permlink | add-search-for-token-list |
| sbd payout | 0.000 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 10129.843508 VESTS |
| Transaction Info | Block #18306125/Virtual Operation #6 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 18306125,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 6,
"timestamp": "2017-12-22T10:20:24",
"op": [
"comment_benefactor_reward",
{
"benefactor": "utopian.pay",
"author": "friedger",
"permlink": "add-search-for-token-list",
"sbd_payout": "0.000 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "10129.843508 VESTS"
}
]
}Manabar
Voting Power0.00%
Downvote Power0.00%
Resource Credits100.00%
Reputation Progress83.69%
{
"voting_manabar": {
"current_mana": "16275573452",
"last_update_time": 1588930305
},
"downvote_manabar": {
"current_mana": 4068893363,
"last_update_time": 1588930305
},
"rc_account": {
"account": "friedger",
"rc_manabar": {
"current_mana": 2020748973,
"last_update_time": 1593617919
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": 2020748973
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0"} |
| JSON METADATA | |
| profile | {"profile_image":"https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0"} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0"
}
},
"json_metadata": {
"profile": {
"profile_image": "https://gaia.blockstack.org/hub/1Maw8BjWgj6MWrBCfupqQuWANthMhefb2v/0/avatar-0"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM7bhsUMiQihW8ubSNuDT7wTXDXTzUebAbFDVj3R97MskS2uiGZP1/1
Active
Single Signature
Public Keys
STM61JrFvBfuigoeqhZECTZRrPD6SgNME1q3RPeiNxTZBhxa3QR5L1/1
Posting
Single Signature
Public Keys
STM5epCNmJfExKRLV4nbTjQrQQUWqVF66fKCeT6FeNk3RuXYnqNdJ1/1
App Permissions
@utopian.app1/1
Memo
STM6ww7oyUY6XhUTaQ3LLBPxUZT5DHSCvwMzA8rbNSzunzxFjRk7B
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7bhsUMiQihW8ubSNuDT7wTXDXTzUebAbFDVj3R97MskS2uiGZP",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM61JrFvBfuigoeqhZECTZRrPD6SgNME1q3RPeiNxTZBhxa3QR5L",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"utopian.app",
1
]
],
"key_auths": [
[
"STM5epCNmJfExKRLV4nbTjQrQQUWqVF66fKCeT6FeNk3RuXYnqNdJ",
1
]
]
},
"memo": "STM6ww7oyUY6XhUTaQ3LLBPxUZT5DHSCvwMzA8rbNSzunzxFjRk7B"
}Witness Votes
2 / 30
01.steemitboard |
02.utopian-io |
[ "steemitboard", "utopian-io" ]