VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS98.84%
Net Worth
0.231USD
STEEM
0.000STEEM
SBD
0.400SBD
Effective Power
5.001SP
├── Own SP
0.632SP
└── Incoming DelegationsDeleg
+4.369SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.632SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.369SP | SP |
| Effective Power | 5.001SP | SP |
| Reward SP (pending) | 0.113SP | 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.400SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "1028.433991 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7115.225815 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.400 SBD",
"conversions": []
}Account Info
| name | kimyd |
| id | 412728 |
| rank | 548,846 |
| reputation | 2774336299 |
| created | 2017-10-19T06:11:45 |
| recovery_account | steem |
| proxy | None |
| post_count | 16 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-05-27T11:50:12 |
| last_root_post | 2018-05-27T11:50:12 |
| last_vote_time | 2018-05-20T12:15:30 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1028.433991 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7115.225815 VESTS |
| reward_vesting_balance | 230.025913 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-03-08T13:27:54 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 412728,
"name": "kimyd",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5TCe5KojYfcpTKxxnsecDM7H2PYQEdbUCspQAn4S6YwfWSbC5h",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7EWRCP7kzujzmPcMvLoLALNh5vpwLKHRuVpnm4jUe5CEEEaj9o",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6eVfBhc9gvd5m41SK6s9mr7Aq5ggoCgNHUtgQU31DSUbfBZhrq",
1
]
]
},
"memo_key": "STM6xjYhrTi4n6mhc5g3X2E1fYmTNa8eWaJ9jjqaqSemnkXWPxDJp",
"json_metadata": "{\"profile\":{\"name\":\"Kronos\",\"location\":\"korea\",\"about\":\"보안과 암호 화폐를 사랑하는 한 사람\",\"profile_image\":\"https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png\"}}",
"posting_json_metadata": "{\"profile\":{\"name\":\"Kronos\",\"location\":\"korea\",\"about\":\"보안과 암호 화폐를 사랑하는 한 사람\",\"profile_image\":\"https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png\"}}",
"proxy": "",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "2018-03-08T13:27:54",
"created": "2017-10-19T06:11:45",
"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": 16,
"can_vote": true,
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779071460
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779071460
},
"voting_power": 0,
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"sbd_balance": "0.000 SBD",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_sbd_balance": "0.400 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "230.025913 VESTS",
"reward_vesting_steem": "0.113 STEEM",
"vesting_shares": "1028.433991 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7115.225815 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"curation_rewards": 0,
"posting_rewards": 223,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2018-05-27T11:50:12",
"last_root_post": "2018-05-27T11:50:12",
"last_vote_time": "2018-05-20T12:15:30",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"vesting_balance": "0.000 STEEM",
"reputation": 2774336299,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 548846
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 02:31:00
2026/05/18 02:31:00
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 7115.225815 VESTS |
| Transaction Info | Block #106146151/Trx e502ee4d49bb02e4711580ed4b9c94efb607026e |
View Raw JSON Data
{
"trx_id": "e502ee4d49bb02e4711580ed4b9c94efb607026e",
"block": 106146151,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-18T02:31:00",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "7115.225815 VESTS"
}
]
}2026/05/12 13:00:18
2026/05/12 13:00:18
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 4403.015410 VESTS |
| Transaction Info | Block #105986687/Trx ac29362cd285f827c458f1dbf239614c2adb2c2f |
View Raw JSON Data
{
"trx_id": "ac29362cd285f827c458f1dbf239614c2adb2c2f",
"block": 105986687,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-12T13:00:18",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "4403.015410 VESTS"
}
]
}2026/04/26 01:48:15
2026/04/26 01:48:15
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 7127.741571 VESTS |
| Transaction Info | Block #105513736/Trx d674407e8231c77ac75393c0acbeacc8cbc54fd9 |
View Raw JSON Data
{
"trx_id": "d674407e8231c77ac75393c0acbeacc8cbc54fd9",
"block": 105513736,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-04-26T01:48:15",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "7127.741571 VESTS"
}
]
}2026/01/23 13:52:15
2026/01/23 13:52:15
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 4444.562229 VESTS |
| Transaction Info | Block #102859085/Trx 04eb8e072fe5b186c568a1b6d8b7d982b1936e76 |
View Raw JSON Data
{
"trx_id": "04eb8e072fe5b186c568a1b6d8b7d982b1936e76",
"block": 102859085,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-01-23T13:52:15",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "4444.562229 VESTS"
}
]
}2024/12/17 09:07:30
2024/12/17 09:07:30
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 4608.781426 VESTS |
| Transaction Info | Block #91305403/Trx 0aed71a42a8d6a07bdca8a2da03356c7315a0529 |
View Raw JSON Data
{
"trx_id": "0aed71a42a8d6a07bdca8a2da03356c7315a0529",
"block": 91305403,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2024-12-17T09:07:30",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "4608.781426 VESTS"
}
]
}2023/11/14 00:49:09
2023/11/14 00:49:09
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 4777.914958 VESTS |
| Transaction Info | Block #79859577/Trx b9a18f5b45b6fe46142b7d8991a6006b2d698b62 |
View Raw JSON Data
{
"trx_id": "b9a18f5b45b6fe46142b7d8991a6006b2d698b62",
"block": 79859577,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-11-14T00:49:09",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "4777.914958 VESTS"
}
]
}2023/09/22 00:29:36
2023/09/22 00:29:36
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 7715.193744 VESTS |
| Transaction Info | Block #78351016/Trx 3136bb8826b1cb78813160c60a12755e5681178b |
View Raw JSON Data
{
"trx_id": "3136bb8826b1cb78813160c60a12755e5681178b",
"block": 78351016,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-09-22T00:29:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "7715.193744 VESTS"
}
]
}2022/11/03 13:57:12
2022/11/03 13:57:12
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 7936.875182 VESTS |
| Transaction Info | Block #69115946/Trx d25d2114326b4493931eda3aa6a11aab7a831853 |
View Raw JSON Data
{
"trx_id": "d25d2114326b4493931eda3aa6a11aab7a831853",
"block": 69115946,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-11-03T13:57:12",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "7936.875182 VESTS"
}
]
}2022/01/17 17:17:36
2022/01/17 17:17:36
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8157.110318 VESTS |
| Transaction Info | Block #60816980/Trx d0cdada5b90f41c19d09b9b046cbab817a8908e7 |
View Raw JSON Data
{
"trx_id": "d0cdada5b90f41c19d09b9b046cbab817a8908e7",
"block": 60816980,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-01-17T17:17:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8157.110318 VESTS"
}
]
}seupupvoted (100.00%) @kimyd / 6-kittybreeding2021/09/13 06:07:48
seupupvoted (100.00%) @kimyd / 6-kittybreeding
2021/09/13 06:07:48
| voter | seup |
| author | kimyd |
| permlink | 6-kittybreeding |
| weight | 10000 (100.00%) |
| Transaction Info | Block #57208511/Trx 64dd401135f1c8a2ae4c82cfb89553c4ce3dd9df |
View Raw JSON Data
{
"trx_id": "64dd401135f1c8a2ae4c82cfb89553c4ce3dd9df",
"block": 57208511,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-09-13T06:07:48",
"op": [
"vote",
{
"voter": "seup",
"author": "kimyd",
"permlink": "6-kittybreeding",
"weight": 10000
}
]
}2021/09/13 05:50:33
2021/09/13 05:50:33
| voter | seup |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #57208170/Trx d3502062a420b9f6b73dc9ec47e9e62ef5c2dae2 |
View Raw JSON Data
{
"trx_id": "d3502062a420b9f6b73dc9ec47e9e62ef5c2dae2",
"block": 57208170,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-09-13T05:50:33",
"op": [
"vote",
{
"voter": "seup",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 10000
}
]
}seupupvoted (100.00%) @kimyd / 2-kittyaccesscontrol2021/09/13 05:36:12
seupupvoted (100.00%) @kimyd / 2-kittyaccesscontrol
2021/09/13 05:36:12
| voter | seup |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| weight | 10000 (100.00%) |
| Transaction Info | Block #57207884/Trx 27734fc92d2a09c25e10bcd2f4cdd7b51766b1d4 |
View Raw JSON Data
{
"trx_id": "27734fc92d2a09c25e10bcd2f4cdd7b51766b1d4",
"block": 57207884,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-09-13T05:36:12",
"op": [
"vote",
{
"voter": "seup",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"weight": 10000
}
]
}2021/06/14 02:51:21
2021/06/14 02:51:21
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8341.177071 VESTS |
| Transaction Info | Block #54610158/Trx f236df864380fd5e79aa461faa131dc531309fe1 |
View Raw JSON Data
{
"trx_id": "f236df864380fd5e79aa461faa131dc531309fe1",
"block": 54610158,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-06-14T02:51:21",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8341.177071 VESTS"
}
]
}2020/12/11 13:07:27
2020/12/11 13:07:27
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8528.599045 VESTS |
| Transaction Info | Block #49357537/Trx 013723427badddb7e0ff702912a5e4547656e4bb |
View Raw JSON Data
{
"trx_id": "013723427badddb7e0ff702912a5e4547656e4bb",
"block": 49357537,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-11T13:07:27",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8528.599045 VESTS"
}
]
}2020/12/06 06:44:06
2020/12/06 06:44:06
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49209088/Trx b0c1ad87384e6190917bfb0567e6722d0619e239 |
View Raw JSON Data
{
"trx_id": "b0c1ad87384e6190917bfb0567e6722d0619e239",
"block": 49209088,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-06T06:44:06",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "1912.543513 VESTS"
}
]
}2020/12/05 16:45:36
2020/12/05 16:45:36
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8534.806899 VESTS |
| Transaction Info | Block #49192634/Trx 39741749c304146b4b0ae7616118c887eb44f601 |
View Raw JSON Data
{
"trx_id": "39741749c304146b4b0ae7616118c887eb44f601",
"block": 49192634,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-05T16:45:36",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8534.806899 VESTS"
}
]
}2020/11/02 19:49:33
2020/11/02 19:49:33
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48262734/Trx 3d4806701bc33e6768430d3b3a531f2fe7045efa |
View Raw JSON Data
{
"trx_id": "3d4806701bc33e6768430d3b3a531f2fe7045efa",
"block": 48262734,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-11-02T19:49:33",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "1920.017158 VESTS"
}
]
}2020/05/09 07:43:42
2020/05/09 07:43:42
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8737.612258 VESTS |
| Transaction Info | Block #43219367/Trx 94439d63d7d6db8b05983dd218336cf8d2031a74 |
View Raw JSON Data
{
"trx_id": "94439d63d7d6db8b05983dd218336cf8d2031a74",
"block": 43219367,
"trx_in_block": 16,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-09T07:43:42",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8737.612258 VESTS"
}
]
}2020/05/08 11:37:54
2020/05/08 11:37:54
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43195815/Trx 4e65c4301bf26c2266c2c86449db038518581129 |
View Raw JSON Data
{
"trx_id": "4e65c4301bf26c2266c2c86449db038518581129",
"block": 43195815,
"trx_in_block": 65,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-08T11:37:54",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "1953.311140 VESTS"
}
]
}2019/10/19 07:47:03
2019/10/19 07:47:03
| parent author | kimyd |
| parent permlink | 7-kittyauction |
| author | steemitboard |
| permlink | steemitboard-notify-kimyd-20191019t074702000z |
| title | |
| body | Congratulations @kimyd! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@kimyd/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/@kimyd) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=kimyd)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #37414456/Trx b44bcb2c2936163f93f1e8e750eac0a3cb1e4933 |
View Raw JSON Data
{
"trx_id": "b44bcb2c2936163f93f1e8e750eac0a3cb1e4933",
"block": 37414456,
"trx_in_block": 10,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-19T07:47:03",
"op": [
"comment",
{
"parent_author": "kimyd",
"parent_permlink": "7-kittyauction",
"author": "steemitboard",
"permlink": "steemitboard-notify-kimyd-20191019t074702000z",
"title": "",
"body": "Congratulations @kimyd! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@kimyd/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/@kimyd) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=kimyd)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2019/10/10 02:02:51
2019/10/10 02:02:51
| voter | shinhyo |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #37148929/Trx f7c4b9dad415d2fae3363d767820703a97054838 |
View Raw JSON Data
{
"trx_id": "f7c4b9dad415d2fae3363d767820703a97054838",
"block": 37148929,
"trx_in_block": 18,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-10-10T02:02:51",
"op": [
"vote",
{
"voter": "shinhyo",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2019/08/11 02:16:06
2019/08/11 02:16:06
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 8892.924670 VESTS |
| Transaction Info | Block #35446501/Trx 3962dd97bb490268f92fa5090edef97536fd45fc |
View Raw JSON Data
{
"trx_id": "3962dd97bb490268f92fa5090edef97536fd45fc",
"block": 35446501,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-08-11T02:16:06",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "8892.924670 VESTS"
}
]
}2018/10/19 12:15:21
2018/10/19 12:15:21
| parent author | kimyd |
| parent permlink | 7-kittyauction |
| author | steemitboard |
| permlink | steemitboard-notify-kimyd-20181019t121523000z |
| title | |
| body | Congratulations @kimyd! You have received a personal award! [](http://steemitboard.com/@kimyd) 1 Year on Steemit <sub>_Click on the badge to view your Board of Honor._</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #26943993/Trx 21f7a73cc2dfa2700b053d43812c8171524281ca |
View Raw JSON Data
{
"trx_id": "21f7a73cc2dfa2700b053d43812c8171524281ca",
"block": 26943993,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-10-19T12:15:21",
"op": [
"comment",
{
"parent_author": "kimyd",
"parent_permlink": "7-kittyauction",
"author": "steemitboard",
"permlink": "steemitboard-notify-kimyd-20181019t121523000z",
"title": "",
"body": "Congratulations @kimyd! You have received a personal award!\n\n[](http://steemitboard.com/@kimyd) 1 Year on Steemit\n<sub>_Click on the badge to view your Board of Honor._</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2018/08/26 12:26:48
2018/08/26 12:26:48
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 9091.386212 VESTS |
| Transaction Info | Block #25405711/Trx 95696f0f0e104114471ee64f1b92ff90b393de2c |
View Raw JSON Data
{
"trx_id": "95696f0f0e104114471ee64f1b92ff90b393de2c",
"block": 25405711,
"trx_in_block": 23,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-26T12:26:48",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "9091.386212 VESTS"
}
]
}2018/08/26 09:51:00
2018/08/26 09:51:00
| delegator | steem |
| delegatee | kimyd |
| vesting shares | 29331.218733 VESTS |
| Transaction Info | Block #25402595/Trx 4deffa8084f6ba59758fab96f698baf707f1f22b |
View Raw JSON Data
{
"trx_id": "4deffa8084f6ba59758fab96f698baf707f1f22b",
"block": 25402595,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-26T09:51:00",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "kimyd",
"vesting_shares": "29331.218733 VESTS"
}
]
}swaggerupvoted (0.02%) @kimyd / 7-kittyauction2018/05/27 12:08:54
swaggerupvoted (0.02%) @kimyd / 7-kittyauction
2018/05/27 12:08:54
| voter | swagger |
| author | kimyd |
| permlink | 7-kittyauction |
| weight | 2 (0.02%) |
| Transaction Info | Block #22796452/Trx a6051c8098a0be91d5b1185ce547b55194231bb6 |
View Raw JSON Data
{
"trx_id": "a6051c8098a0be91d5b1185ce547b55194231bb6",
"block": 22796452,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-27T12:08:54",
"op": [
"vote",
{
"voter": "swagger",
"author": "kimyd",
"permlink": "7-kittyauction",
"weight": 2
}
]
}kimydpublished a new post: 7-kittyauction2018/05/27 11:50:12
kimydpublished a new post: 7-kittyauction
2018/05/27 11:50:12
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 7-kittyauction |
| title | 크립토 키티 소스 코드 분석 7번째 컨트랙트 KittyAuction |
| body | 지난 번 6번째 컨트랙트 KittyBreeding에서는 어떻게 두 고양이가 교배를 시키고, 어떻게 새로운 새끼 고양이가 태어나는 지에 대한 내용이였다. 이제 진짜 "돈"을 쓰게되는 KittyAuction 컨트랙트를 보도록 하자. 다시 말하지만, 스팀잇보다 더 좋은 블로그?를 찾으면 옮길까 한다. KittyCore <- KittyMinting <- **KittyAuction**<- KittyBreeding <- KittyOwnership <- KittyBase, ERC721 KittyBase <- KittyAccessControl KittyAuction은 실제 고양이를 매매에 대한 내용이 포함되어 있다. 크립토 키티에서 이하와 같이 본인 소유의 고양이를 다른 교배를 위해서 내놓거나(빌려주거나) 아니면 아에 팔거나, 혹은 다른 사람한테 주거나 이렇게 3가지 액션을 할 수 있다.  옥션은 여기서 교배를 위해 다른 사람에게 빌려주거나, 파는 경우 각각에 대해서 각각 다른 컨트랙트를 사용하고 그 컨트랙트 주소를 이하처럼 CEO가 설정하게 된다. function setSaleAuctionAddress(address _address) external onlyCEO function setSiringAuctionAddress(address _address) external onlyCEO 이렇게 한 이유는 아마도 추후에 다른 로직을 넣거나, 버그 등이 발견되었을 경우에 업데이트를 쉽게하기 위함일 것으로 생각된다. 먼저 판매를 위한 옥션에 해당하는 `setSaleAuctionAddress`는 현재 https://etherscan.io/address/0xb1690c08e213a35ed9bab7b318de14420fb57d8c#code 로 설정되어 있다. 교배를 위해 고양이을 빌려주는 옥션에 해당하는 내용은 `setSiringAuctionAddress`는 https://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로 설정되어 있다. KittyAuction은 단순히 옥션의 core 부분의 인터페이스만 기술되어 있고 실질적으로는 옥션 종류에 따라 따로 컨트랙트가 있어서 KittyAuction 다음에는 실제 옥션의 내용을 이해하기 위해 필요한 각각의 컨트랙트 `SaleClockAuction`과 `SiringClockAuction`을 보도록 한다.  KittyAuction 컨트랙트는 단순하다. (인터페이스만 다루기 때문에..) 다음 4개의 함수만 정의되어 있다. function createSaleAuction( uint256 _kittyId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration ) function createSiringAuction( uint256 _kittyId, uint256 _startingPrice, uint256 _endingPrice, uint256 _duration ) function bidOnSiringAuction( uint256 _sireId, uint256 _matronId ) function withdrawAuctionBalances() external onlyCLevel { 1. `createSaleAuction`, `createSiringAuction` : 옥션 생성하는 함수. 적합한 주인인지, 임신중인지만 체크해서 옥션을 생성한다. (실제 내용은 다른 컨트랙트에 정의) 2. `bidOnSiringAuction` : 실제 입찰(bid)하는 함수,엄마 고양이의 주인을 확인하고 옥션에 올려진 고양이와 교배가 가능한 지 체크하고 옥션 입찰 가격이 autoBirthFee를 합친 것 이상인지 확인하고 최종으로 이전 컨트랙트 `KittyBreeding`에 기술되어 있는 `_breedWith`로 교배시킨다. 3. `withdrawAuctionBalances` : 두 개의 옥션 컨트랙트에 남아있는 수수료를 빼는 함수 |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmeUrNcgUxM9hnkYUxBa7ZYLVKmMNrbN3S1nKsDFpGK5XL/image.png","https://steemitimages.com/DQmeZQP6GJqs8VmmrvuNengn7JCo5LjpSfgMBLMzaAMvfyE/image.png"],"links":["https://etherscan.io/address/0xb1690c08e213a35ed9bab7b318de14420fb57d8c#code","https://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22796078/Trx 99965d96ce88d31d05996d48257505c77a13b6dd |
View Raw JSON Data
{
"trx_id": "99965d96ce88d31d05996d48257505c77a13b6dd",
"block": 22796078,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-27T11:50:12",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "7-kittyauction",
"title": "크립토 키티 소스 코드 분석 7번째 컨트랙트 KittyAuction",
"body": "지난 번 6번째 컨트랙트 KittyBreeding에서는 어떻게 두 고양이가 교배를 시키고, 어떻게 새로운 새끼 고양이가 태어나는 지에 대한 내용이였다. 이제 진짜 \"돈\"을 쓰게되는 KittyAuction 컨트랙트를 보도록 하자. 다시 말하지만, 스팀잇보다 더 좋은 블로그?를 찾으면 옮길까 한다. \n\n\nKittyCore <- KittyMinting <- **KittyAuction**<- KittyBreeding <- KittyOwnership <- KittyBase, ERC721\n\nKittyBase <- KittyAccessControl\n\n\nKittyAuction은 실제 고양이를 매매에 대한 내용이 포함되어 있다. 크립토 키티에서 이하와 같이 본인 소유의 고양이를 다른 교배를 위해서 내놓거나(빌려주거나) 아니면 아에 팔거나, 혹은 다른 사람한테 주거나 이렇게 3가지 액션을 할 수 있다. \n\n\n\n\n옥션은 여기서 교배를 위해 다른 사람에게 빌려주거나, 파는 경우 각각에 대해서 각각 다른 컨트랙트를 사용하고 그 컨트랙트 주소를 이하처럼 CEO가 설정하게 된다.\n\n function setSaleAuctionAddress(address _address) external onlyCEO \n\n function setSiringAuctionAddress(address _address) external onlyCEO \n\n\n이렇게 한 이유는 아마도 추후에 다른 로직을 넣거나, 버그 등이 발견되었을 경우에 업데이트를 쉽게하기 위함일 것으로 생각된다. \n\n먼저 판매를 위한 옥션에 해당하는 `setSaleAuctionAddress`는 현재 https://etherscan.io/address/0xb1690c08e213a35ed9bab7b318de14420fb57d8c#code 로 설정되어 있다. \n교배를 위해 고양이을 빌려주는 옥션에 해당하는 내용은 `setSiringAuctionAddress`는 https://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로 설정되어 있다.\n\nKittyAuction은 단순히 옥션의 core 부분의 인터페이스만 기술되어 있고 실질적으로는 옥션 종류에 따라 따로 컨트랙트가 있어서 KittyAuction 다음에는 실제 옥션의 내용을 이해하기 위해 필요한 각각의 컨트랙트 `SaleClockAuction`과 `SiringClockAuction`을 보도록 한다. \n\n\n\n\n\nKittyAuction 컨트랙트는 단순하다. (인터페이스만 다루기 때문에..) 다음 4개의 함수만 정의되어 있다. \n\n function createSaleAuction(\n uint256 _kittyId,\n uint256 _startingPrice,\n uint256 _endingPrice,\n uint256 _duration\n )\n\n function createSiringAuction(\n uint256 _kittyId,\n uint256 _startingPrice,\n uint256 _endingPrice,\n uint256 _duration\n )\n\n function bidOnSiringAuction(\n uint256 _sireId,\n uint256 _matronId\n )\n\n function withdrawAuctionBalances() external onlyCLevel {\n\n\n1. `createSaleAuction`, `createSiringAuction` : 옥션 생성하는 함수. 적합한 주인인지, 임신중인지만 체크해서 옥션을 생성한다. (실제 내용은 다른 컨트랙트에 정의)\n\n\n2. `bidOnSiringAuction` : 실제 입찰(bid)하는 함수,엄마 고양이의 주인을 확인하고 옥션에 올려진 고양이와 교배가 가능한 지 체크하고 옥션 입찰 가격이 autoBirthFee를 합친 것 이상인지 확인하고 최종으로 이전 컨트랙트 `KittyBreeding`에 기술되어 있는 `_breedWith`로 교배시킨다. \n\n3. `withdrawAuctionBalances` : 두 개의 옥션 컨트랙트에 남아있는 수수료를 빼는 함수",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmeUrNcgUxM9hnkYUxBa7ZYLVKmMNrbN3S1nKsDFpGK5XL/image.png\",\"https://steemitimages.com/DQmeZQP6GJqs8VmmrvuNengn7JCo5LjpSfgMBLMzaAMvfyE/image.png\"],\"links\":[\"https://etherscan.io/address/0xb1690c08e213a35ed9bab7b318de14420fb57d8c#code\",\"https://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydreceived 0.029 SBD, 0.012 SP author reward for @kimyd / 6-kittybreeding2018/05/24 12:30:30
kimydreceived 0.029 SBD, 0.012 SP author reward for @kimyd / 6-kittybreeding
2018/05/24 12:30:30
| author | kimyd |
| permlink | 6-kittybreeding |
| sbd payout | 0.029 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 20.340423 VESTS |
| Transaction Info | Block #22710567/Virtual Operation #14 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 22710567,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 14,
"timestamp": "2018-05-24T12:30:30",
"op": [
"author_reward",
{
"author": "kimyd",
"permlink": "6-kittybreeding",
"sbd_payout": "0.029 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "20.340423 VESTS"
}
]
}kimydupvoted (100.00%) @kimyd / 6-kittybreeding2018/05/20 12:15:30
kimydupvoted (100.00%) @kimyd / 6-kittybreeding
2018/05/20 12:15:30
| voter | kimyd |
| author | kimyd |
| permlink | 6-kittybreeding |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22595393/Trx 699065b271d7009256e8395aff26e1a69ab301ab |
View Raw JSON Data
{
"trx_id": "699065b271d7009256e8395aff26e1a69ab301ab",
"block": 22595393,
"trx_in_block": 39,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-20T12:15:30",
"op": [
"vote",
{
"voter": "kimyd",
"author": "kimyd",
"permlink": "6-kittybreeding",
"weight": 10000
}
]
}cyberberryupvoted (100.00%) @kimyd / 6-kittybreeding2018/05/20 04:31:51
cyberberryupvoted (100.00%) @kimyd / 6-kittybreeding
2018/05/20 04:31:51
| voter | cyberberry |
| author | kimyd |
| permlink | 6-kittybreeding |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22586121/Trx e0359eb2e8bb2367658d5a3269d2b5b82a2f9379 |
View Raw JSON Data
{
"trx_id": "e0359eb2e8bb2367658d5a3269d2b5b82a2f9379",
"block": 22586121,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-20T04:31:51",
"op": [
"vote",
{
"voter": "cyberberry",
"author": "kimyd",
"permlink": "6-kittybreeding",
"weight": 10000
}
]
}steemspokerupvoted (100.00%) @kimyd / 6-kittybreeding2018/05/19 03:53:39
steemspokerupvoted (100.00%) @kimyd / 6-kittybreeding
2018/05/19 03:53:39
| voter | steemspoker |
| author | kimyd |
| permlink | 6-kittybreeding |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22556562/Trx c962a6615129ff0a9f12aba19ccbbbd004974142 |
View Raw JSON Data
{
"trx_id": "c962a6615129ff0a9f12aba19ccbbbd004974142",
"block": 22556562,
"trx_in_block": 51,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-19T03:53:39",
"op": [
"vote",
{
"voter": "steemspoker",
"author": "kimyd",
"permlink": "6-kittybreeding",
"weight": 10000
}
]
}acknowledgementupvoted (10.00%) @kimyd / 6-kittybreeding2018/05/17 13:01:06
acknowledgementupvoted (10.00%) @kimyd / 6-kittybreeding
2018/05/17 13:01:06
| voter | acknowledgement |
| author | kimyd |
| permlink | 6-kittybreeding |
| weight | 1000 (10.00%) |
| Transaction Info | Block #22509919/Trx 768cb2f024e1fa9e2ec340cfb2546f47c39b33f9 |
View Raw JSON Data
{
"trx_id": "768cb2f024e1fa9e2ec340cfb2546f47c39b33f9",
"block": 22509919,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-17T13:01:06",
"op": [
"vote",
{
"voter": "acknowledgement",
"author": "kimyd",
"permlink": "6-kittybreeding",
"weight": 1000
}
]
}kimydpublished a new post: 6-kittybreeding2018/05/17 12:33:27
kimydpublished a new post: 6-kittybreeding
2018/05/17 12:33:27
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 6-kittybreeding |
| title | 크립토 키티 소스 코드 분석 6번째 컨트랙트 KittyBreeding |
| body | @@ -5817,13 +5817,21 @@ %EA%B0%80%EC%9A%B4%EB%8D%B0 +(%EC%95%84%EB%B9%A0) %EC%99%80 %EC%98%A4%EB%A5%B8%EC%AA%BD +(%EC%97%84%EB%A7%88) %EC%9D%B4 %EB%B6%80%EB%AA%A8 @@ -5869,16 +5869,17 @@ %EB%B3%B4%EC%9D%B8%EB%8B%A4. %0A%0A +! %5B%5D(https |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png","https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png","https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png"],"links":["https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b","https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4","https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d","https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true","https://steemit.com/kr/@kimyd/3-kittybase"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22509367/Trx e085900150b21169056ed390b3c52b4de030eb6f |
View Raw JSON Data
{
"trx_id": "e085900150b21169056ed390b3c52b4de030eb6f",
"block": 22509367,
"trx_in_block": 22,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-17T12:33:27",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "6-kittybreeding",
"title": "크립토 키티 소스 코드 분석 6번째 컨트랙트 KittyBreeding",
"body": "@@ -5817,13 +5817,21 @@\n %EA%B0%80%EC%9A%B4%EB%8D%B0\n+(%EC%95%84%EB%B9%A0)\n %EC%99%80 %EC%98%A4%EB%A5%B8%EC%AA%BD\n+(%EC%97%84%EB%A7%88)\n %EC%9D%B4 %EB%B6%80%EB%AA%A8\n@@ -5869,16 +5869,17 @@\n %EB%B3%B4%EC%9D%B8%EB%8B%A4. %0A%0A\n+!\n %5B%5D(https\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png\",\"https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png\",\"https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png\"],\"links\":[\"https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b\",\"https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4\",\"https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d\",\"https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true\",\"https://steemit.com/kr/@kimyd/3-kittybase\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydpublished a new post: 6-kittybreeding2018/05/17 12:30:30
kimydpublished a new post: 6-kittybreeding
2018/05/17 12:30:30
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 6-kittybreeding |
| title | 크립토 키티 소스 코드 분석 6번째 컨트랙트 KittyBreeding |
| body | 지난 번 5번째 컨트랙트 KittyOwnership에서는 주로 토큰(ERC721)에 대한 기본적인 함수에 대해서만 나와있었다. 이제 진짜 크립토 키티스러운..컨트랙트인 KittyBreeding을 살펴본다. KittyCore <- KittyMinting <- KittyAuction <- **KittyBreeding** <- KittyOwnership <- KittyBase, ERC721 KittyBase <- KittyAccessControl  고양이를 Breeding(번식) 시키기 위한 내용이 기술되어 있다. KittyBreeding 컨트랙트 이외에 GeneScienceInterface 컨트랙트를 사용하고 있지만, 내용은 안나와있다. 나중에 GeneScienceInterface 내용을 용이하게 변경하고 숨기기?(뭔가) 위해서 그런 듯하다. 현재 GeneScienceInterface의 주소는 (https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b)여기로 되어 있다. KittyCore와 GeneScienceInterface의 각각의 생성 날짜는 다음과 같다. - KittyCore : (https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4)로 처음에 생성, 2017년 11월 23일 - GeneScienceInterface : (https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d)로 2017년 11월 23일 생성 동일한 날짜에 생성되었고 그때 생성된 GeneScienceAddress가 그대로 지금까지 사용되고 있는 것을 보면 업데이트는 없었던 듯하다. 내용만 숨기려고? 하는 듯한데 나중에 시간이 되면 디컴파일을 해볼까 한다. (아마 누군가 했을 듯하지만..) 그런데 게임 특성상(랜덤성?) 어느 고양이끼리 교배를 시켜야(다시 말하지만 암컷과 수컷의 개념은 없다) 희귀종?의 고양이가 생성되는지를 비밀로 하고 싶었나보다. `breedWithAuto(uint256 _matronId, uint256 _sireId)` 함수에서 실제 교배하는 내용이 정의되어 있다. 먼저 앞부분에서 다음과 같은 각종 체크를 한다. - 최소 0.002이더 (2 Finney, 2 Mili) 이상인지 확인 - 함수를 실행하는 사람이 matron 주인인지 확인(임신 시키기 위함 엄마 고양이 주인인지 확인) - 현재 pregnat 상태인지 cooldown 상태가 아닌지 체크 - 동일하게 sire주인인지 확인(아빠 고양이 주인 확인) - 현재 pregnat 상태인지 cooldown 상태가 아닌지 체크 - 두 고양이가 유효한 고양이인지 체크(동일한 고양이끼리 인지, 부모와 교배를 하려고 하는 건지, 형제간에 교배하려는 지 등) - 그리고 실제로 `_breedWith`함수로 교배! 그러면 실질적으로 교배가 일어나는 `_breedWidth` 함수를 보도록 하자 function _breedWith(uint256 _matronId, uint256 _sireId) internal { // Grab a reference to the Kitties from storage. Kitty storage sire = kitties[_sireId]; Kitty storage matron = kitties[_matronId]; // Mark the matron as pregnant, keeping track of who the sire is. matron.siringWithId = uint32(_sireId); // Trigger the cooldown for both parents. _triggerCooldown(sire); _triggerCooldown(matron); // Clear siring permission for both parents. This may not be strictly necessary // but it's likely to avoid confusion! delete sireAllowedToAddress[_matronId]; delete sireAllowedToAddress[_sireId]; // Every time a kitty gets pregnant, counter is incremented. pregnantKitties++; // Emit the pregnancy event. Pregnant(kittyIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock); } 여기를 보면 `breedWith` 함수는 엄마 고양이의 `siringWidthId`를 입력받은 `_sireId`로 한다. 즉, 엄마 고양이에 아빠 고양이의 ID를 넣어 임신중인 것을 나타내는 변수이다. 0일때는 임신하고 있지 않은 상태이다. 그리고 `_triggerCooldown` 함수로 엄마,아빠 고양이의 coolDown 상태로 만든다. 어느정도 coolDown인지는 크립토 키티 구조체의 cooldownIndex에 따라 다르다. 마지막으로 임신중인 키티 수를 +1 증가시키고 event log를 출력하고 끝난다. `KittyCore` 컨트랙트에 정의되어 있는 `function withdrawBalance() external onlyCFO ` 함수를 통해 임신 중이 고양이 숫자+1만큼 authBirthFee를 곱한 값을 제외한 값을 모두 CFO 지갑으로 보내게 되어있다. 이건 임신을 시키기 위해 선지급한 돈을 나중에 `giveBirth`로 새끼 고양이가 태어나면 돌려주게 되어서 그렇다. 실제로 얼마만큼 크립토 키티는 벌어들인 것인지 (물론 나중에 auction 등이 나오지만 일단 먼저 궁금해서 알아봤다) 주소는 (https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true)를 보면 크립토키티에서 CFO로 입금된 내역이다 (크립토 키트 컨트랙트를 동작하기 위한 fee는 제외시키고)  총 합계는 대충 8,869 이더이다. 1이더를 70만원으로 환산하면 대략 **62**억이다.....잘 믿기지 않지만 그렇다. 원래 게임에 돈을 쓰고 캐릭터에 돈을 쓰는 사람들의 심리는 잘 모르는 사람으로서는 이해가 잘 안가지만 상당히 많은 돈이 오고가고 했는 듯하다. 가장 많았을 때는 (작년 12월 경) 1,600이더를 가져온 것이 기록에 있다. 아마 저때가 피크이지 않았나 싶다. 다시 본론으로 들어가서 보자. 임신을 시켰으면 출산을 해야한다. 그 출산에 해당하는 함수는 `giveBirth(uint256 _matronId)`로 정의되어 있다. function giveBirth(uint256 _matronId) external whenNotPaused returns(uint256) { // Grab a reference to the matron in storage. Kitty storage matron = kitties[_matronId]; // Check that the matron is a valid cat. require(matron.birthTime != 0); // Check that the matron is pregnant, and that its time has come! require(_isReadyToGiveBirth(matron)); // Grab a reference to the sire in storage. uint256 sireId = matron.siringWithId; Kitty storage sire = kitties[sireId]; // Determine the higher generation number of the two parents uint16 parentGen = matron.generation; if (sire.generation > matron.generation) { parentGen = sire.generation; } // Call the sooper-sekret gene mixing operation. uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1); // Make the new kitten! address owner = kittyIndexToOwner[_matronId]; uint256 kittenId = _createKitty(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner); // Clear the reference to sire from the matron (REQUIRED! Having siringWithId // set is what marks a matron as being pregnant.) delete matron.siringWithId; // Every time a kitty gives birth counter is decremented. pregnantKitties--; // Send the balance fee to the person who made birth happen. msg.sender.send(autoBirthFee); // return the new kitten's ID return kittenId; } 먼저 엄마 고양이가 새끼 고양이를 출산해도 좋은 상태인지 `_isReadyToGiveBirth`에서 체크한다. 임신중인지와 blockNumber로 시간이 일정시간이 지난 지 체크한다. 그리고 `geneScience.mixGenes()` 함수로 새끼 고양이의 유전자를 결정하고 새끼 고양이의 소유권을 엄마 고양이를 가진 사람에게 준다. 그리고 KittyBase 컨트랙트 내에 있던 `_createKitty()`를 호출해서 고양이 데이터를 생성한다. KittyBase에 대한 내용은 [여기](https://steemit.com/kr/@kimyd/3-kittybase)를 참고하기 바란다. 마지막으로 `breedWithAuto`에서 선지급한 autoBirthFee를 `giveBirth` 함수를 호출한 사람에게 `autoBirthFee`=0.002이더를 보낸다. 한번 직접한번 교배시켜 새끼를 낳아봤다. 제일 왼쪽이 새로 낳은 고양이이고 가운데와 오른쪽이 부모 고양이다. 뭔가 외형적으로 유전자(?)가 물려받은 듯이 보인다. [](https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png) |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png","https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png"],"links":["https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b","https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4","https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d","https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true","https://steemit.com/kr/@kimyd/3-kittybase","https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22509308/Trx ba459d41a68d9b09564fd00e04c333113e420474 |
View Raw JSON Data
{
"trx_id": "ba459d41a68d9b09564fd00e04c333113e420474",
"block": 22509308,
"trx_in_block": 34,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-17T12:30:30",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "6-kittybreeding",
"title": "크립토 키티 소스 코드 분석 6번째 컨트랙트 KittyBreeding",
"body": "지난 번 5번째 컨트랙트 KittyOwnership에서는 주로 토큰(ERC721)에 대한 기본적인 함수에 대해서만 나와있었다. 이제 진짜 크립토 키티스러운..컨트랙트인 KittyBreeding을 살펴본다. \n\nKittyCore <- KittyMinting <- KittyAuction <- **KittyBreeding** <- KittyOwnership <- KittyBase, ERC721\n\nKittyBase <- KittyAccessControl\n\n\n\n고양이를 Breeding(번식) 시키기 위한 내용이 기술되어 있다. KittyBreeding 컨트랙트 이외에 GeneScienceInterface 컨트랙트를 사용하고 있지만, 내용은 안나와있다. 나중에 GeneScienceInterface 내용을 용이하게 변경하고 숨기기?(뭔가) 위해서 그런 듯하다. 현재 GeneScienceInterface의 주소는 (https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b)여기로 되어 있다. \n\nKittyCore와 GeneScienceInterface의 각각의 생성 날짜는 다음과 같다.\n\n - KittyCore : (https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4)로 처음에 생성, 2017년 11월 23일\n- GeneScienceInterface : (https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d)로 2017년 11월 23일 생성 \n\n동일한 날짜에 생성되었고 그때 생성된 GeneScienceAddress가 그대로 지금까지 사용되고 있는 것을 보면 업데이트는 없었던 듯하다. 내용만 숨기려고? 하는 듯한데 나중에 시간이 되면 디컴파일을 해볼까 한다. (아마 누군가 했을 듯하지만..) \n\n그런데 게임 특성상(랜덤성?) 어느 고양이끼리 교배를 시켜야(다시 말하지만 암컷과 수컷의 개념은 없다) 희귀종?의 고양이가 생성되는지를 비밀로 하고 싶었나보다. \n\n`breedWithAuto(uint256 _matronId, uint256 _sireId)` 함수에서 실제 교배하는 내용이 정의되어 있다. 먼저 앞부분에서 다음과 같은 각종 체크를 한다.\n\n- 최소 0.002이더 (2 Finney, 2 Mili) 이상인지 확인\n- 함수를 실행하는 사람이 matron 주인인지 확인(임신 시키기 위함 엄마 고양이 주인인지 확인)\n- 현재 pregnat 상태인지 cooldown 상태가 아닌지 체크\n- 동일하게 sire주인인지 확인(아빠 고양이 주인 확인)\n- 현재 pregnat 상태인지 cooldown 상태가 아닌지 체크\n- 두 고양이가 유효한 고양이인지 체크(동일한 고양이끼리 인지, 부모와 교배를 하려고 하는 건지, 형제간에 교배하려는 지 등) \n- 그리고 실제로 `_breedWith`함수로 교배!\n\n그러면 실질적으로 교배가 일어나는 `_breedWidth` 함수를 보도록 하자\n\n function _breedWith(uint256 _matronId, uint256 _sireId) internal {\n // Grab a reference to the Kitties from storage.\n Kitty storage sire = kitties[_sireId];\n Kitty storage matron = kitties[_matronId];\n\n // Mark the matron as pregnant, keeping track of who the sire is.\n matron.siringWithId = uint32(_sireId);\n\n // Trigger the cooldown for both parents.\n _triggerCooldown(sire);\n _triggerCooldown(matron);\n\n // Clear siring permission for both parents. This may not be strictly necessary\n // but it's likely to avoid confusion!\n delete sireAllowedToAddress[_matronId];\n delete sireAllowedToAddress[_sireId];\n\n // Every time a kitty gets pregnant, counter is incremented.\n pregnantKitties++;\n\n // Emit the pregnancy event.\n Pregnant(kittyIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock);\n }\n\n\n여기를 보면 `breedWith` 함수는 엄마 고양이의 `siringWidthId`를 입력받은 `_sireId`로 한다. 즉, 엄마 고양이에 아빠 고양이의 ID를 넣어 임신중인 것을 나타내는 변수이다. 0일때는 임신하고 있지 않은 상태이다. \n\n그리고 `_triggerCooldown` 함수로 엄마,아빠 고양이의 coolDown 상태로 만든다. 어느정도 coolDown인지는 크립토 키티 구조체의 cooldownIndex에 따라 다르다. 마지막으로 임신중인 키티 수를 +1 증가시키고 event log를 출력하고 끝난다. \n\n\n`KittyCore` 컨트랙트에 정의되어 있는 `function withdrawBalance() external onlyCFO ` 함수를 통해 임신 중이 고양이 숫자+1만큼 authBirthFee를 곱한 값을 제외한 값을 모두 CFO 지갑으로 보내게 되어있다. 이건 임신을 시키기 위해 선지급한 돈을 나중에 `giveBirth`로 새끼 고양이가 태어나면 돌려주게 되어서 그렇다. \n\n\n실제로 얼마만큼 크립토 키티는 벌어들인 것인지 (물론 나중에 auction 등이 나오지만 일단 먼저 궁금해서 알아봤다) \n\n주소는 (https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true)를 보면 크립토키티에서 CFO로 입금된 내역이다 (크립토 키트 컨트랙트를 동작하기 위한 fee는 제외시키고) \n\n\n\n\n총 합계는 대충 8,869 이더이다. 1이더를 70만원으로 환산하면 대략 **62**억이다.....잘 믿기지 않지만 그렇다. 원래 게임에 돈을 쓰고 캐릭터에 돈을 쓰는 사람들의 심리는 잘 모르는 사람으로서는 이해가 잘 안가지만 상당히 많은 돈이 오고가고 했는 듯하다. \n\n가장 많았을 때는 (작년 12월 경) 1,600이더를 가져온 것이 기록에 있다. 아마 저때가 피크이지 않았나 싶다. \n\n다시 본론으로 들어가서 보자. 임신을 시켰으면 출산을 해야한다. 그 출산에 해당하는 함수는 `giveBirth(uint256 _matronId)`로 정의되어 있다. \n\n\n function giveBirth(uint256 _matronId)\n external\n whenNotPaused\n returns(uint256)\n {\n // Grab a reference to the matron in storage.\n Kitty storage matron = kitties[_matronId];\n\n // Check that the matron is a valid cat.\n require(matron.birthTime != 0);\n\n // Check that the matron is pregnant, and that its time has come!\n require(_isReadyToGiveBirth(matron));\n\n // Grab a reference to the sire in storage.\n uint256 sireId = matron.siringWithId;\n Kitty storage sire = kitties[sireId];\n\n // Determine the higher generation number of the two parents\n uint16 parentGen = matron.generation;\n if (sire.generation > matron.generation) {\n parentGen = sire.generation;\n }\n\n // Call the sooper-sekret gene mixing operation.\n uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);\n\n // Make the new kitten!\n address owner = kittyIndexToOwner[_matronId];\n uint256 kittenId = _createKitty(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);\n\n // Clear the reference to sire from the matron (REQUIRED! Having siringWithId\n // set is what marks a matron as being pregnant.)\n delete matron.siringWithId;\n\n // Every time a kitty gives birth counter is decremented.\n pregnantKitties--;\n\n // Send the balance fee to the person who made birth happen.\n msg.sender.send(autoBirthFee);\n\n // return the new kitten's ID\n return kittenId;\n }\n\n\n먼저 엄마 고양이가 새끼 고양이를 출산해도 좋은 상태인지 `_isReadyToGiveBirth`에서 체크한다. 임신중인지와 blockNumber로 시간이 일정시간이 지난 지 체크한다. \n그리고 `geneScience.mixGenes()` 함수로 새끼 고양이의 유전자를 결정하고 새끼 고양이의 소유권을 엄마 고양이를 가진 사람에게 준다. 그리고 KittyBase 컨트랙트 내에 있던 `_createKitty()`를 호출해서 고양이 데이터를 생성한다. KittyBase에 대한 내용은 [여기](https://steemit.com/kr/@kimyd/3-kittybase)를 참고하기 바란다. \n\n마지막으로 `breedWithAuto`에서 선지급한 autoBirthFee를 `giveBirth` 함수를 호출한 사람에게 `autoBirthFee`=0.002이더를 보낸다. \n\n한번 직접한번 교배시켜 새끼를 낳아봤다. 제일 왼쪽이 새로 낳은 고양이이고 가운데와 오른쪽이 부모 고양이다. 뭔가 외형적으로 유전자(?)가 물려받은 듯이 보인다. \n\n[](https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png)",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png\",\"https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png\"],\"links\":[\"https://etherscan.io/address/0xf97e0a5b616dffc913e72455fde9ea8bbe946a2b\",\"https://etherscan.io/tx/0x691f348ef11e9ef95d540a2da2c5f38e36072619aa44db0827e1b8a276f120f4\",\"https://etherscan.io/tx/0x7e92d7c83d542ebebc491dc214a05d3dfb320d05d9140e2b51d2b0b1f32db78d\",\"https://etherscan.io/txsinternal?ps=100&zero=false&a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&valid=true\",\"https://steemit.com/kr/@kimyd/3-kittybase\",\"https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/15 12:32:21
2018/05/15 12:32:21
| voter | kimyd |
| author | voidlink |
| permlink | 2 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22451755/Trx be31a45bd7883f9b9e48c0de00f52936a1ce43de |
View Raw JSON Data
{
"trx_id": "be31a45bd7883f9b9e48c0de00f52936a1ce43de",
"block": 22451755,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-15T12:32:21",
"op": [
"vote",
{
"voter": "kimyd",
"author": "voidlink",
"permlink": "2",
"weight": 10000
}
]
}2018/05/15 12:30:48
2018/05/15 12:30:48
| required auths | [] |
| required posting auths | ["kimyd"] |
| id | follow |
| json | ["follow",{"follower":"kimyd","following":"voidlink","what":["blog"]}] |
| Transaction Info | Block #22451724/Trx 0dca74ed03c4231cf6b3078edea6b81b65db291f |
View Raw JSON Data
{
"trx_id": "0dca74ed03c4231cf6b3078edea6b81b65db291f",
"block": 22451724,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-15T12:30:48",
"op": [
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"kimyd"
],
"id": "follow",
"json": "[\"follow\",{\"follower\":\"kimyd\",\"following\":\"voidlink\",\"what\":[\"blog\"]}]"
}
]
}2018/05/14 11:40:24
2018/05/14 11:40:24
| voter | kimyd |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22421918/Trx 140923494a2418967305578d990e7cfad29002cb |
View Raw JSON Data
{
"trx_id": "140923494a2418967305578d990e7cfad29002cb",
"block": 22421918,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-14T11:40:24",
"op": [
"vote",
{
"voter": "kimyd",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 10000
}
]
}2018/05/11 13:32:39
2018/05/11 13:32:39
| author | kimyd |
| permlink | 4-erc721 |
| sbd payout | 0.074 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 46.814506 VESTS |
| Transaction Info | Block #22337767/Virtual Operation #9 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 22337767,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 9,
"timestamp": "2018-05-11T13:32:39",
"op": [
"author_reward",
{
"author": "kimyd",
"permlink": "4-erc721",
"sbd_payout": "0.074 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "46.814506 VESTS"
}
]
}kimydpublished a new post: 5-kittyownership2018/05/10 14:40:48
kimydpublished a new post: 5-kittyownership
2018/05/10 14:40:48
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 5-kittyownership |
| title | 크립토 키티 소스 코드 분석 5번째 컨트랙트 KittyOwnership |
| body | @@ -253,16 +253,17 @@ ssContro +l %0A%0A%EB%8B%A4%EC%8B%9C%ED%95%9C%EB%B2%88%EC%93%B0%EC%A7%80 |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"links":["https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md","http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays","https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22310334/Trx 6381dcbe28b656f99a464fa58ae95f66e0732cb3 |
View Raw JSON Data
{
"trx_id": "6381dcbe28b656f99a464fa58ae95f66e0732cb3",
"block": 22310334,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-10T14:40:48",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "5-kittyownership",
"title": "크립토 키티 소스 코드 분석 5번째 컨트랙트 KittyOwnership",
"body": "@@ -253,16 +253,17 @@\n ssContro\n+l\n %0A%0A%EB%8B%A4%EC%8B%9C%ED%95%9C%EB%B2%88%EC%93%B0%EC%A7%80\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"links\":[\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md\",\"http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays\",\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}syahrulraziupvoted (100.00%) @kimyd / 5-kittyownership2018/05/10 14:40:33
syahrulraziupvoted (100.00%) @kimyd / 5-kittyownership
2018/05/10 14:40:33
| voter | syahrulrazi |
| author | kimyd |
| permlink | 5-kittyownership |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22310329/Trx 2dc3824b5981da7e19e91a031cb328cb0b0bc798 |
View Raw JSON Data
{
"trx_id": "2dc3824b5981da7e19e91a031cb328cb0b0bc798",
"block": 22310329,
"trx_in_block": 44,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-10T14:40:33",
"op": [
"vote",
{
"voter": "syahrulrazi",
"author": "kimyd",
"permlink": "5-kittyownership",
"weight": 10000
}
]
}kimydpublished a new post: 5-kittyownership2018/05/10 14:39:39
kimydpublished a new post: 5-kittyownership
2018/05/10 14:39:39
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 5-kittyownership |
| title | 크립토 키티 소스 코드 분석 5번째 컨트랙트 KittyOwnership |
| body | ERC721 컨트랙트에는 인터페이스 정의만 나와있고 실질적으로 내용은 `KittyOwnership`에 작성되어있다. KittyOwnership은 컨트랙트 이름대로 키티의 소유권(ERC721 토큰의 소유권)에 관한 내용이다. KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- **KittyOwnership** <- KittyBase, ERC721 KittyBase <- KittyAccessContro 다시한번쓰지만 ERC721토큰은 일반적인 ERC20토큰과 다르게 각각의 토큰에 대해 고유한 값(특성)을 가지고 있어서 서로 교환이 불가능한 토큰이다, Non-fungible token (가치 교환을 하려면 동일한 가치여야하는 데 그렇지 않다. 예를 들어 우리집 강아지랑 옆집 강아지랑 바로 맞바꿀 수 없는 것을 생각해보면된다. 하지만 동일한 천원짜리 지폐(아니면 오백원짜리 동전 2개하고)는 옆집하고 우리집하고 바꿀 수 있다) KittyOwnership에 정의된 함수(Method)는 다음과 같다. 하나하나 보도록 하자(external 혹은 public만 보도록 한다. 어차피 internal과 private으로 정의된 것은 external/public 함수에서 이용하는 목적에 불과하니...) string public constant name = "CryptoKitties"; string public constant symbol = "CK"; ERC721Metadata public erc721Metadata; bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256('supportsInterface(bytes4)')); bytes4 constant InterfaceSignature_ERC721 = bytes4(keccak256('name()')) ^ bytes4(keccak256('symbol()')) ^ bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('ownerOf(uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('transfer(address,uint256)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('tokensOfOwner(address)')) ^ bytes4(keccak256('tokenMetadata(uint256,string)')); function supportsInterface(bytes4 _interfaceID) external view returns (bool) function setMetadataAddress(address _contractAddress) public onlyCEO { function balanceOf(address _owner) public view returns (uint256 count) { function transfer( address _to, uint256 _tokenId ) external whenNotPaused { function approve( address _to, uint256 _tokenId ) external whenNotPaused { function transferFrom( address _from, address _to, uint256 _tokenId ) external whenNotPaused { function totalSupply() public view returns (uint) { function ownerOf(uint256 _tokenId) external view returns address owner) { function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) { function tokenMetadata(uint256 _tokenId, string _preferredTransport) external view returns (string infoUrl) { 1. name, symbol : 우선 `name`과 `symbol`은 ERC20과 마찬가지로 볼 수 있는 것으로 이름과 심볼을 지정했다. 2. ERC721Metadata라는 컨트랙트를 사용하기 위해 정의함, ERC721Metadata는 키티의 메타 데이터를 저장하기 위한 별도의 컨트랙트인데 왠지 실제로는 사용하고 있지 않는 듯함. 3. bytes4 constant InterfaceSignature_ERC165 및 bytes4 constant InterfaceSignature_ERC721 : ERC165 및 ERC721 인터페이스 확인을 위한 고정값. ERC165는 [여기](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md)에 보면 올해 1월에 stadard가 된 것으로 각각의 컨트랙트들이 어떠한 인터페이스를 가지는 지를 확인하기 위한 인터페이스 규격. 예를 들어 다른 컨트랙트가 이 크립토 키티 컨트랙트의 인터페이스를 확인하기 위해 저렇게 Kecaak256해시로 하고 일부 앞 부분만 따서 ID라 하고 비교해서 확인함. 그러면 여기서 constant로 정해놓은 인터페이스가 있다는 말이 되니 인터페이스 확인이 가능함. 그런데 실제로 크립토 키티 게임에서는 사용하지 않는 듯함. 4. supportsInterface(bytes4 _interfaceID) : 3번에서 실제 확인하기 위한 external로 정의된 함수. 5. setMetadataAddress (address _contractAddress) : `ERC721Metadata`의 컨트랙트 주소를 넣기 위한 함수 6. balanceOf(address _owner) : ERC721 규격에 맞는 함수. _owner가 보유한 키티의 갯수를 반환함 7. transfer( address _to, uint256 _tokenId ) : 키티를 _to에게 보내는 함수 8. approve( address _to, uint256 _tokenId ) : 함수를 call하는 사람이 키티의 주인이고 _to에게 해당하는 키티를 다른 곳에 보내는 것이 가능하도록 허가하는 함수. 허가를 시키면 `kittyIndexToApproved`에 해당하는 키티가 _to의 주소와 함께 추가된다. 9. transferFrom( address _from, address _to, uint256 _tokenId ) : 8에서 허가한 키티를 실제로 보내는 함수. 이 함수를 call한 사람이 _to가 되어야한다 (받는 사람이 이 함수를 call한다.) 즉, 8에서 _to한테 1번 키티를 보내는 것을 허가하고 나중에 _to는 본 함수를 call하여 1번 키티를 받는다. 10. totalSupply() public view returns (uint) : 전체 키티의 갯수를 반환한다. 지금 글을 쓰는 현재, 739054 로 나온다. 11. ownerOf(uint256 _tokenId) external view returns address owner) : 해당하는 키티의 소유자 주소가 나온다. 가장 첫 키티는 주소가 0x0으로 나오고 그 후로 생성된 키티의 첫 번째 키티의 주소를 `0x79bd592415ff6c91cfe69a7f9cd091354fc65a18`로 나온다. 12. tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) : _owner가 보유한 키티(ERC721 토큰)의 index(id)가 array 형태로 나온다. for문으로 키티 id가 1부터 (0은 제네시스 키티로 소유자가 없다!) 그리고 [여기, Allocation Memory Arrays](http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays)를 보면 dynamic array로 memory는 쓸 수 없어서 일단 `uint256[] memory result = new uint256[](tokenCount);`처럼 다 할당을 해버린다. 그러면 문제는 전체 tokenCount가 늘어날 수록 result에 할당하는 메모리양이 엄청나게 많아진다. (tokenCount는 현재 739054). 그리고 나서 for문으로 하나하나 찾는다. 상당히 gas를 많이 소모하는 함수이다. 그리고 컨트랙에서 이 함수를 누가 실행을 시킬까 모르겠지만 dynamic array는 return이 컨트랙에서 컨트랙트로 가져올 수 없어서 실행시키면 안된다고 써있다. 관련되서 [EIP211](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md)가 있는데 아직 구현이 안된 듯하다. 13. tokenMetadata(uint256 _tokenId, string _preferredTransport) external view returns (string infoUrl) : 토큰 메타데이터를 받는 함수 |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"links":["https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md","http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays","https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22310311/Trx a9bdbd42a357a34821a19569c0859bff57801b8c |
View Raw JSON Data
{
"trx_id": "a9bdbd42a357a34821a19569c0859bff57801b8c",
"block": 22310311,
"trx_in_block": 26,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-10T14:39:39",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "5-kittyownership",
"title": "크립토 키티 소스 코드 분석 5번째 컨트랙트 KittyOwnership",
"body": "ERC721 컨트랙트에는 인터페이스 정의만 나와있고 실질적으로 내용은 `KittyOwnership`에 작성되어있다. KittyOwnership은 컨트랙트 이름대로 키티의 소유권(ERC721 토큰의 소유권)에 관한 내용이다. \n\nKittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- **KittyOwnership** <- KittyBase, ERC721\n\nKittyBase <- KittyAccessContro\n\n다시한번쓰지만 ERC721토큰은 일반적인 ERC20토큰과 다르게 각각의 토큰에 대해 고유한 값(특성)을 가지고 있어서 서로 교환이 불가능한 토큰이다, Non-fungible token (가치 교환을 하려면 동일한 가치여야하는 데 그렇지 않다. 예를 들어 우리집 강아지랑 옆집 강아지랑 바로 맞바꿀 수 없는 것을 생각해보면된다. 하지만 동일한 천원짜리 지폐(아니면 오백원짜리 동전 2개하고)는 옆집하고 우리집하고 바꿀 수 있다)\n\nKittyOwnership에 정의된 함수(Method)는 다음과 같다. 하나하나 보도록 하자(external 혹은 public만 보도록 한다. 어차피 internal과 private으로 정의된 것은 external/public 함수에서 이용하는 목적에 불과하니...)\n\n string public constant name = \"CryptoKitties\";\n string public constant symbol = \"CK\";\n ERC721Metadata public erc721Metadata;\n\n bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256('supportsInterface(bytes4)'));\n\n bytes4 constant InterfaceSignature_ERC721 =\n bytes4(keccak256('name()')) ^\n bytes4(keccak256('symbol()')) ^\n bytes4(keccak256('totalSupply()')) ^\n bytes4(keccak256('balanceOf(address)')) ^\n bytes4(keccak256('ownerOf(uint256)')) ^\n bytes4(keccak256('approve(address,uint256)')) ^\n bytes4(keccak256('transfer(address,uint256)')) ^\n bytes4(keccak256('transferFrom(address,address,uint256)')) ^\n bytes4(keccak256('tokensOfOwner(address)')) ^\n bytes4(keccak256('tokenMetadata(uint256,string)'));\n\n function supportsInterface(bytes4 _interfaceID) external view returns (bool)\n function setMetadataAddress(address _contractAddress) public onlyCEO {\n function balanceOf(address _owner) public view returns (uint256 count) {\n function transfer( address _to, uint256 _tokenId ) external whenNotPaused {\n function approve( address _to, uint256 _tokenId ) external whenNotPaused {\n function transferFrom( address _from, address _to, uint256 _tokenId ) external whenNotPaused {\n function totalSupply() public view returns (uint) { \n function ownerOf(uint256 _tokenId) external view returns address owner) {\n function tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) {\n function tokenMetadata(uint256 _tokenId, string _preferredTransport) external view returns (string infoUrl) {\n\n\n 1. name, symbol : 우선 `name`과 `symbol`은 ERC20과 마찬가지로 볼 수 있는 것으로 이름과 심볼을 지정했다. \n\n 2. ERC721Metadata라는 컨트랙트를 사용하기 위해 정의함, ERC721Metadata는 키티의 메타 데이터를 저장하기 위한 별도의 컨트랙트인데 왠지 실제로는 사용하고 있지 않는 듯함.\n\n 3. bytes4 constant InterfaceSignature_ERC165 및 bytes4 constant InterfaceSignature_ERC721 : ERC165 및 ERC721 인터페이스 확인을 위한 고정값. ERC165는 [여기](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md)에 보면 올해 1월에 stadard가 된 것으로 각각의 컨트랙트들이 어떠한 인터페이스를 가지는 지를 확인하기 위한 인터페이스 규격. 예를 들어 다른 컨트랙트가 이 크립토 키티 컨트랙트의 인터페이스를 확인하기 위해 저렇게 Kecaak256해시로 하고 일부 앞 부분만 따서 ID라 하고 비교해서 확인함. 그러면 여기서 constant로 정해놓은 인터페이스가 있다는 말이 되니 인터페이스 확인이 가능함. 그런데 실제로 크립토 키티 게임에서는 사용하지 않는 듯함. \n\n4. supportsInterface(bytes4 _interfaceID) : 3번에서 실제 확인하기 위한 external로 정의된 함수. \n\n5. setMetadataAddress (address _contractAddress) : `ERC721Metadata`의 컨트랙트 주소를 넣기 위한 함수\n\n\n6. balanceOf(address _owner) : ERC721 규격에 맞는 함수. _owner가 보유한 키티의 갯수를 반환함\n\n7. transfer( address _to, uint256 _tokenId ) : 키티를 _to에게 보내는 함수\n\n8. approve( address _to, uint256 _tokenId ) : 함수를 call하는 사람이 키티의 주인이고 _to에게 해당하는 키티를 다른 곳에 보내는 것이 가능하도록 허가하는 함수. 허가를 시키면 `kittyIndexToApproved`에 해당하는 키티가 _to의 주소와 함께 추가된다. \n\n9. transferFrom( address _from, address _to, uint256 _tokenId ) : 8에서 허가한 키티를 실제로 보내는 함수. 이 함수를 call한 사람이 _to가 되어야한다 (받는 사람이 이 함수를 call한다.) 즉, 8에서 _to한테 1번 키티를 보내는 것을 허가하고 나중에 _to는 본 함수를 call하여 1번 키티를 받는다. \n\n10. totalSupply() public view returns (uint) : 전체 키티의 갯수를 반환한다. 지금 글을 쓰는 현재, 739054 로 나온다. \n\n11. ownerOf(uint256 _tokenId) external view returns address owner) : 해당하는 키티의 소유자 주소가 나온다. 가장 첫 키티는 주소가 0x0으로 나오고 그 후로 생성된 키티의 첫 번째 키티의 주소를 `0x79bd592415ff6c91cfe69a7f9cd091354fc65a18`로 나온다. \n\n12. tokensOfOwner(address _owner) external view returns(uint256[] ownerTokens) : _owner가 보유한 키티(ERC721 토큰)의 index(id)가 array 형태로 나온다. for문으로 키티 id가 1부터 (0은 제네시스 키티로 소유자가 없다!)\n그리고 [여기, Allocation Memory Arrays](http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays)를 보면 dynamic array로 memory는 쓸 수 없어서 일단 `uint256[] memory result = new uint256[](tokenCount);`처럼 다 할당을 해버린다. 그러면 문제는 전체 tokenCount가 늘어날 수록 result에 할당하는 메모리양이 엄청나게 많아진다. (tokenCount는 현재 739054). 그리고 나서 for문으로 하나하나 찾는다. 상당히 gas를 많이 소모하는 함수이다. 그리고 컨트랙에서 이 함수를 누가 실행을 시킬까 모르겠지만 dynamic array는 return이 컨트랙에서 컨트랙트로 가져올 수 없어서 실행시키면 안된다고 써있다. 관련되서 [EIP211](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md)가 있는데 아직 구현이 안된 듯하다. \n\n13. tokenMetadata(uint256 _tokenId, string _preferredTransport) external view returns (string infoUrl) : 토큰 메타데이터를 받는 함수",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"links\":[\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md\",\"http://solidity.readthedocs.io/en/develop/types.html#allocating-memory-arrays\",\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-211.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydreceived 0.254 SBD, 0.085 SP author reward for @kimyd / 2-kittyaccesscontrol2018/05/07 16:44:30
kimydreceived 0.254 SBD, 0.085 SP author reward for @kimyd / 2-kittyaccesscontrol
2018/05/07 16:44:30
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| sbd payout | 0.254 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 138.435859 VESTS |
| Transaction Info | Block #22226420/Virtual Operation #4 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 22226420,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 4,
"timestamp": "2018-05-07T16:44:30",
"op": [
"author_reward",
{
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"sbd_payout": "0.254 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "138.435859 VESTS"
}
]
}2018/05/04 15:01:12
2018/05/04 15:01:12
| voter | wonsama |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 1000 (10.00%) |
| Transaction Info | Block #22137994/Trx 9a0444b98379e80386f6f4aef86fd739db3288ad |
View Raw JSON Data
{
"trx_id": "9a0444b98379e80386f6f4aef86fd739db3288ad",
"block": 22137994,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T15:01:12",
"op": [
"vote",
{
"voter": "wonsama",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 1000
}
]
}moosung8807upvoted (100.00%) @kimyd / 4-erc7212018/05/04 14:05:54
moosung8807upvoted (100.00%) @kimyd / 4-erc721
2018/05/04 14:05:54
| voter | moosung8807 |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22136888/Trx 344d8079154c4a0b67411ce2394484d7ee5a23f8 |
View Raw JSON Data
{
"trx_id": "344d8079154c4a0b67411ce2394484d7ee5a23f8",
"block": 22136888,
"trx_in_block": 33,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T14:05:54",
"op": [
"vote",
{
"voter": "moosung8807",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 10000
}
]
}cheetahreplied to @kimyd / cheetah-re-kimyd4-erc7212018/05/04 13:33:36
cheetahreplied to @kimyd / cheetah-re-kimyd4-erc721
2018/05/04 13:33:36
| parent author | kimyd |
| parent permlink | 4-erc721 |
| author | cheetah |
| permlink | cheetah-re-kimyd4-erc721 |
| title | |
| body | Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: https://stackoverflow.com/questions/47177627/warning-no-visibility-specified-defaulting-to-public |
| json metadata | |
| Transaction Info | Block #22136242/Trx 3a48fe7a0f8cbfc73e33310fdfb2aadc34ddedaa |
View Raw JSON Data
{
"trx_id": "3a48fe7a0f8cbfc73e33310fdfb2aadc34ddedaa",
"block": 22136242,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T13:33:36",
"op": [
"comment",
{
"parent_author": "kimyd",
"parent_permlink": "4-erc721",
"author": "cheetah",
"permlink": "cheetah-re-kimyd4-erc721",
"title": "",
"body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttps://stackoverflow.com/questions/47177627/warning-no-visibility-specified-defaulting-to-public",
"json_metadata": ""
}
]
}2018/05/04 13:33:33
2018/05/04 13:33:33
| voter | cheetah |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 8 (0.08%) |
| Transaction Info | Block #22136241/Trx 90ae3c302fc468e3ba2b39b8e55d926f5941267a |
View Raw JSON Data
{
"trx_id": "90ae3c302fc468e3ba2b39b8e55d926f5941267a",
"block": 22136241,
"trx_in_block": 29,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T13:33:33",
"op": [
"vote",
{
"voter": "cheetah",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 8
}
]
}2018/05/04 13:32:48
2018/05/04 13:32:48
| voter | thevillan |
| author | kimyd |
| permlink | 4-erc721 |
| weight | 50 (0.50%) |
| Transaction Info | Block #22136226/Trx 6a9a4da6c453dbd79df923ca64a12f9f40a67ead |
View Raw JSON Data
{
"trx_id": "6a9a4da6c453dbd79df923ca64a12f9f40a67ead",
"block": 22136226,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T13:32:48",
"op": [
"vote",
{
"voter": "thevillan",
"author": "kimyd",
"permlink": "4-erc721",
"weight": 50
}
]
}2018/05/04 13:32:39
2018/05/04 13:32:39
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 4-erc721 |
| title | 크립토 키티 소스 코드 분석(4) ERC721 |
| body | 크립토 키티 소스 코드 분석 4번째 컨트랙트 ERC721 아마 이 게임때문에 ERC721이 뜨지 않았나 싶다. (게임이 나올때는 ERC721가 Draft버전이였다) KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyOwnership <- KittyBase, **ERC721** KittyBase <- KittyAccessControl 여기서 쓴 ERC721은 아직 github의 [issue](https://github.com/ethereum/EIPs/issues/721)에 논의되고 있었던 상태이고 정식으로 채택되지 않은 상태였다. 그럼 크립토 키티에서 쓴 ERC721은 다음과 같다. contract ERC721 { // Required methods function totalSupply() public view returns (uint256 total); function balanceOf(address _owner) public view returns (uint256 balance); function ownerOf(uint256 _tokenId) external view returns (address owner); function approve(address _to, uint256 _tokenId) external; function transfer(address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; // Events event Transfer(address from, address to, uint256 tokenId); event Approval(address owner, address approved, uint256 tokenId); // Optional // function name() public view returns (string name); // function symbol() public view returns (string symbol); // function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds); // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl); // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165) function supportsInterface(bytes4 _interfaceID) external view returns (bool); } ERC20하고 유사한데 몇 가지 함수가 추가된 것을 볼 수 있다. 참고로 ERC20 토큰은 [여기 EIP-20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md)에서 인터페이스가 표준화 되어있다. 이하는 ERC20 인터페이스이다. function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); 먼저 ERC20에 대해서 간단히 보면 1. balanceOf : _owner 지갑주소에 대해 잔고를 보여준다. 2. transfer : _to에게 _value만큼 보낸다. 그리고 transfer함수내에서 꼭 Transfer event를 call해야한다. (대부분의 지갑, 서비스 들이 이러한 이벤트 callback을 기다려 그 값을 보여준다. transfer가 제대로 보내졌는지 알기위해서) 3. transferFrom : transfer와 동일한데 _from이 추가된 것이다. 누군가 대신해서 transfer를 위해서 마련함. 4. approve : _spender가 저 함수를 call한 지갑이 보유하고 있는 토큰을 _value만큼 빼갈 수 있도록 approve하기 위한 함수임. 사용처는 예를 들어 어떠한 서비스 컨트랙트(예, 게임)에게 내가 가지고 있는 토큰 혹은 그 서비스 컨트랙트가 발급한 토큰을 일정부분 알아서 실행해서 가져갈 수 있게(수수료처럼) 하기 위한 것임 , 성공적으로 함수가 실행되면 Approval event가 call 된다. 5. allowance : 어느 _spender가 _owner가 보유하고 있는 토큰을 얼마만큼 아직 approve된 토큰이 있는지 확인하는 용도 여기에 optional한 것이 name, symbol, decimals이 있다. 꼭 필요한 건 아니다. (그런데 저것만 넣으면 알아서 ERC20에 규격의 토큰이 발행이 되는 컨트랙트 예제들이 널려있다..하지만..ERC20은 저런 인터페이스만 맞추면 되고 결국 알아서 내용은 채우면 된다. 이제 정말 본론이 ERC721으로 넘어가도록 하자. (**크립토 키티의 ERC721은 draft임!!**) 키티 컨트랙이 나왔을 때가 작년인데 올해 1월에 규격이 정해진 듯하다. [여기 EIP-721 참조](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) 인터페이스를 보면 (자세한 설명은 다음 컨트랙트인 KittyOwnership에서 설명하기로함) event는 `ApprovalForAll`이 추가가 되었고, 함수(인터페이스)는 `safeTransferFrom`, `setApprovalForAll`, `getApproved`, `isApprovedForAll` 이렇게 4개가 추가가 되었다. |
| json metadata | {"tags":["kr","cryptokitties","solidity","erc721","erc20"],"links":["https://github.com/ethereum/EIPs/issues/721","https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md","https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22136223/Trx 59342a1ea3839316a782b7d58474c826ab01202e |
View Raw JSON Data
{
"trx_id": "59342a1ea3839316a782b7d58474c826ab01202e",
"block": 22136223,
"trx_in_block": 18,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-04T13:32:39",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "4-erc721",
"title": "크립토 키티 소스 코드 분석(4) ERC721",
"body": "크립토 키티 소스 코드 분석 4번째 컨트랙트 ERC721\n아마 이 게임때문에 ERC721이 뜨지 않았나 싶다. (게임이 나올때는 ERC721가 Draft버전이였다)\n\nKittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyOwnership <- KittyBase, **ERC721**\n\nKittyBase <- KittyAccessControl\n\n\n여기서 쓴 ERC721은 아직 github의 [issue](https://github.com/ethereum/EIPs/issues/721)에 논의되고 있었던 상태이고 정식으로 채택되지 않은 상태였다. 그럼 크립토 키티에서 쓴 ERC721은 다음과 같다.\n\n\n\tcontract ERC721 {\n\t\t// Required methods\n\t\tfunction totalSupply() public view returns (uint256 total);\n\t\tfunction balanceOf(address _owner) public view returns (uint256 balance);\n\t\tfunction ownerOf(uint256 _tokenId) external view returns (address owner);\n\t\tfunction approve(address _to, uint256 _tokenId) external;\n\t\tfunction transfer(address _to, uint256 _tokenId) external;\n\t\tfunction transferFrom(address _from, address _to, uint256 _tokenId) external;\n\t\t// Events\n\t\tevent Transfer(address from, address to, uint256 tokenId);\n\t\tevent Approval(address owner, address approved, uint256 tokenId);\n\t\t// Optional\n\t\t// function name() public view returns (string name);\n\t\t// function symbol() public view returns (string symbol);\n\t\t// function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds);\n\t\t// function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);\n\t\t// ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)\n\t\tfunction supportsInterface(bytes4 _interfaceID) external view returns (bool);\n\t}\n\nERC20하고 유사한데 몇 가지 함수가 추가된 것을 볼 수 있다. 참고로 ERC20 토큰은 [여기 EIP-20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md)에서 인터페이스가 표준화 되어있다. 이하는 ERC20 인터페이스이다. \n\n\n function balanceOf(address _owner) public view returns (uint256 balance);\n function transfer(address _to, uint256 _value) public returns (bool success);\n function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);\n function approve(address _spender, uint256 _value) public returns (bool success);\n function allowance(address _owner, address _spender) public view returns (uint256 remaining);\n\n event Transfer(address indexed _from, address indexed _to, uint256 _value);\n event Approval(address indexed _owner, address indexed _spender, uint256 _value);\n\n\n먼저 ERC20에 대해서 간단히 보면 \n 1. balanceOf : _owner 지갑주소에 대해 잔고를 보여준다.\n 2. transfer : _to에게 _value만큼 보낸다. 그리고 transfer함수내에서 꼭 Transfer event를 call해야한다. (대부분의 지갑, 서비스 들이 이러한 이벤트 callback을 기다려 그 값을 보여준다. transfer가 제대로 보내졌는지 알기위해서)\n 3. transferFrom : transfer와 동일한데 _from이 추가된 것이다. 누군가 대신해서 transfer를 위해서 마련함. \n 4. approve : _spender가 저 함수를 call한 지갑이 보유하고 있는 토큰을 _value만큼 빼갈 수 있도록 approve하기 위한 함수임. 사용처는 예를 들어 어떠한 서비스 컨트랙트(예, 게임)에게 내가 가지고 있는 토큰 혹은 그 서비스 컨트랙트가 발급한 토큰을 일정부분 알아서 실행해서 가져갈 수 있게(수수료처럼) 하기 위한 것임 , 성공적으로 함수가 실행되면 Approval event가 call 된다. \n 5. allowance : 어느 _spender가 _owner가 보유하고 있는 토큰을 얼마만큼 아직 approve된 토큰이 있는지 확인하는 용도\n\n여기에 optional한 것이 name, symbol, decimals이 있다. 꼭 필요한 건 아니다. (그런데 저것만 넣으면 알아서 ERC20에 규격의 토큰이 발행이 되는 컨트랙트 예제들이 널려있다..하지만..ERC20은 저런 인터페이스만 맞추면 되고 결국 알아서 내용은 채우면 된다. \n\n\n\n이제 정말 본론이 ERC721으로 넘어가도록 하자. (**크립토 키티의 ERC721은 draft임!!**)\n\n키티 컨트랙이 나왔을 때가 작년인데 올해 1월에 규격이 정해진 듯하다. [여기 EIP-721 참조](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md)\n\n인터페이스를 보면 (자세한 설명은 다음 컨트랙트인 KittyOwnership에서 설명하기로함) event는 `ApprovalForAll`이 추가가 되었고, 함수(인터페이스)는 \n`safeTransferFrom`, `setApprovalForAll`, `getApproved`, `isApprovedForAll` 이렇게 4개가 추가가 되었다.",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\",\"erc721\",\"erc20\"],\"links\":[\"https://github.com/ethereum/EIPs/issues/721\",\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\",\"https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydreplied to @kimyd / re-kimyd-1-20180503t135412611z2018/05/03 13:54:15
kimydreplied to @kimyd / re-kimyd-1-20180503t135412611z
2018/05/03 13:54:15
| parent author | kimyd |
| parent permlink | 1 |
| author | kimyd |
| permlink | re-kimyd-1-20180503t135412611z |
| title | |
| body | 하나 빼먹은 컨트랙트가 있는데 글이 7일이 지나 수정이 안되서 댓글로.. KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyOwnership <- KittyBase, ERC721 KittyBase <- KittyAccessControl 저런 구조입니다. KittyOwnership을 빠뜨렸네요. |
| json metadata | {"tags":["kr"],"app":"steemit/0.1"} |
| Transaction Info | Block #22107864/Trx 2c85b7b0b6166867f59f5fb6b4a33e1e15bb6750 |
View Raw JSON Data
{
"trx_id": "2c85b7b0b6166867f59f5fb6b4a33e1e15bb6750",
"block": 22107864,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-03T13:54:15",
"op": [
"comment",
{
"parent_author": "kimyd",
"parent_permlink": "1",
"author": "kimyd",
"permlink": "re-kimyd-1-20180503t135412611z",
"title": "",
"body": "하나 빼먹은 컨트랙트가 있는데 글이 7일이 지나 수정이 안되서 댓글로..\n\nKittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyOwnership <- KittyBase, ERC721\n\nKittyBase <- KittyAccessControl\n\n저런 구조입니다. KittyOwnership을 빠뜨렸네요.",
"json_metadata": "{\"tags\":[\"kr\"],\"app\":\"steemit/0.1\"}"
}
]
}2018/05/03 13:52:18
2018/05/03 13:52:18
| voter | kimyd |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22107825/Trx cd176b2e6d1e1c894e34aee6bb9e3a5c5acf19a0 |
View Raw JSON Data
{
"trx_id": "cd176b2e6d1e1c894e34aee6bb9e3a5c5acf19a0",
"block": 22107825,
"trx_in_block": 49,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-03T13:52:18",
"op": [
"vote",
{
"voter": "kimyd",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}kimydpublished a new post: 2-kittyaccesscontrol2018/05/03 13:51:30
kimydpublished a new post: 2-kittyaccesscontrol
2018/05/03 13:51:30
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| title | 크립토키티 소스 코드 분석(2) KittyAccessControl |
| body | @@ -93,24 +93,43 @@ yBreeding %3C- + KittyOwnership %3C- KittyBase, @@ -127,16 +127,17 @@ ttyBase, + ERC721%0A @@ -149,17 +149,16 @@ yBase %3C- - **Kitty |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png"],"links":["https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1","https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c","https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22107809/Trx 3612f626434f1817ac0ed976b7853f0fa72f5e6e |
View Raw JSON Data
{
"trx_id": "3612f626434f1817ac0ed976b7853f0fa72f5e6e",
"block": 22107809,
"trx_in_block": 76,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-03T13:51:30",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"title": "크립토키티 소스 코드 분석(2) KittyAccessControl",
"body": "@@ -93,24 +93,43 @@\n yBreeding %3C-\n+ KittyOwnership %3C- \n KittyBase, \n@@ -127,16 +127,17 @@\n ttyBase,\n+ \n ERC721%0A\n@@ -149,17 +149,16 @@\n yBase %3C-\n- \n **Kitty\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png\"],\"links\":[\"https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1\",\"https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c\",\"https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/03 12:49:21
2018/05/03 12:49:21
| author | kimyd |
| permlink | 1 |
| sbd payout | 0.043 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 24.435125 VESTS |
| Transaction Info | Block #22106566/Virtual Operation #2 |
View Raw JSON Data
{
"trx_id": "0000000000000000000000000000000000000000",
"block": 22106566,
"trx_in_block": 4294967295,
"op_in_trx": 0,
"virtual_op": 2,
"timestamp": "2018-05-03T12:49:21",
"op": [
"author_reward",
{
"author": "kimyd",
"permlink": "1",
"sbd_payout": "0.043 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "24.435125 VESTS"
}
]
}kimydpublished a new post: 3-kittybase2018/05/02 15:23:06
kimydpublished a new post: 3-kittybase
2018/05/02 15:23:06
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 3-kittybase |
| title | 크립토키티 소스 분석 3 .... KittyBase |
| body | @@ -16,16 +16,8 @@ %EC%A1%B0%EC%97%90%EC%84%9C -%EA%B7%B8%EB%83%A5 %EC%A0%9C%EC%9D%BC %EC%B2%98%EC%9D%8C %EC%88%9C%EC%84%9C%EB%8C%80 @@ -25,16 +25,158 @@ %EB%B3%B4%EA%B8%B0%EB%A1%9C %ED%96%88%EB%8B%A4. + %EA%B7%B8 %EB%91%90%EB%B2%88%EC%A7%B8 %EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8 KittyBase. %5B%EC%A7%80%EB%82%9C%EB%B2%88%5D(https://steemit.com/kr/@kimyd/2-kittyaccesscontrol)%EC%97%90%EB%8A%94 KittyAccessContro%EB%A5%BC %EB%B4%A4%EC%A7%80%EB%A7%8C %EB%B3%84 %EB%82%B4%EC%9A%A9%EC%9D%80 %EA%B7%B8%EB%A6%AC %EC%97%86%EA%B3%A0 %EA%B6%8C%ED%95%9C %EC%84%A4%EC%A0%95%EC%9D%84 %EC%9C%84%ED%95%9C modifier%EB%A7%8C %EC%9E%88%EC%97%88%EB%8B%A4. %0A%0AKittyC @@ -227,24 +227,27 @@ Breeding %3C- + ** KittyBase, E @@ -243,16 +243,18 @@ ittyBase +** , ERC721 |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png"],"links":["https://steemit.com/kr/@kimyd/2-kittyaccesscontrol","https://cryptokittydex.com/kitties/579543","https://www.cryptokitties.co/kitty/1"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22080845/Trx 4fb586cbec7cfd544771a37664c73e385423034a |
View Raw JSON Data
{
"trx_id": "4fb586cbec7cfd544771a37664c73e385423034a",
"block": 22080845,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-02T15:23:06",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "3-kittybase",
"title": "크립토키티 소스 분석 3 .... KittyBase",
"body": "@@ -16,16 +16,8 @@\n %EC%A1%B0%EC%97%90%EC%84%9C \n-%EA%B7%B8%EB%83%A5 %EC%A0%9C%EC%9D%BC %EC%B2%98%EC%9D%8C\n %EC%88%9C%EC%84%9C%EB%8C%80\n@@ -25,16 +25,158 @@\n %EB%B3%B4%EA%B8%B0%EB%A1%9C %ED%96%88%EB%8B%A4.\n+ %EA%B7%B8 %EB%91%90%EB%B2%88%EC%A7%B8 %EC%BB%A8%ED%8A%B8%EB%9E%99%ED%8A%B8 KittyBase. %5B%EC%A7%80%EB%82%9C%EB%B2%88%5D(https://steemit.com/kr/@kimyd/2-kittyaccesscontrol)%EC%97%90%EB%8A%94 KittyAccessContro%EB%A5%BC %EB%B4%A4%EC%A7%80%EB%A7%8C %EB%B3%84 %EB%82%B4%EC%9A%A9%EC%9D%80 %EA%B7%B8%EB%A6%AC %EC%97%86%EA%B3%A0 %EA%B6%8C%ED%95%9C %EC%84%A4%EC%A0%95%EC%9D%84 %EC%9C%84%ED%95%9C modifier%EB%A7%8C %EC%9E%88%EC%97%88%EB%8B%A4.\n %0A%0AKittyC\n@@ -227,24 +227,27 @@\n Breeding %3C- \n+ **\n KittyBase, E\n@@ -243,16 +243,18 @@\n ittyBase\n+**\n , ERC721\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png\"],\"links\":[\"https://steemit.com/kr/@kimyd/2-kittyaccesscontrol\",\"https://cryptokittydex.com/kitties/579543\",\"https://www.cryptokitties.co/kitty/1\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydpublished a new post: 3-kittybase2018/05/02 15:20:45
kimydpublished a new post: 3-kittybase
2018/05/02 15:20:45
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 3-kittybase |
| title | 크립토키티 소스 분석 3 .... KittyBase |
| body | 이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다. KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyBase, ERC721 **KittyBase** <- KittyAccessControl KittyBase는 크립토키티 코어에서 사용하는 데이터 구조가 정의되어 있다. 게임 전체에서 사용하는 데이터 구조로 실제 정의되어 있는 struct는 다음과 같다. 그리고 solidity의 EVM에 의하면 32바이트로 채워져서 저장이 되기 때문에 kitty의 구조체를 보면 32바이트씩 밑에서 묶을 수 있다. genes을 제외하고 나머지 요소들을 합치면 32바이트(256비트)로 묶을 수 있다. 여기서 이러한 최적화를 시켜 gas 비용을 줄이게 된다. struct Kitty { uint256 genes; uint64 birthTime; uint64 cooldownEndBlock; uint32 matronId; uint32 sireId; uint32 siringWithId; uint16 cooldownIndex; uint16 generation; } 하나하나 보도록하자.(참고로 게임이라 수컷, 암컷에 상관없이 다 교배가 가능하다. 아마 수컷암컷에 대한 정보도 넣게 되면 복잡해지고 게임도 그리 재미없어져서 그런 듯 싶다) 1. genes 크립토키티의 유전자 정보를 표현함. 실제로 크립토 키티를 보면 다양한 외형 조합이 가능한데 이 256비트로 그 조합을 표현한다. 외형은 예를 들어 앞에 몇 비트는 얼굴...그 뒤 몇 비트는 몸통 등등...그리고 물론 외형으로 표현은 되지 않지만 가지고 있는 유전자 정보도 있다. 2. birthTime 크립토 키티가 태어난 날, block.timestamp값이 저장 3. cooldownEndBlock 교배가 다시 되기까지 기다려야 하는 시간 4. matronId 아빠 ID 5. sireID 엄마 ID 6. siringWithId 만약에 고양이가 임신 중일 경우에 아빠가 되는 상대의 키티 ID를 설정함, 임신 중이지 않을 경우는 0 7. cooldownIndex 현재 cooldown의 index. 교배 후에 재교배하기까지 어느정도 기다리는지 index에 따라 시간이 결정됨 8. generation 키티의 제네레이션의 수. 부모의 제네레이션의 수에 1를 더한 수가 됨. 최초의 키티는 0. 이 정보에 따라서 어떤 고양이의 모습인지는 [여기 cryptokittyindex](https://cryptokittydex.com/kitties/579543)를 보면 된다. 마지막에 키티 index를 넣으면 해당 고양이의 정보를 볼 수 있다. 크립토키티에서 나오는 모든 고양이는 저 struct를 가지고 있다. 그럼 가장 최초의 고양이는 어떤 모습일까? [여기](https://www.cryptokitties.co/kitty/1)를 보면 genesis kitty가 나온다 (블록의 제네시스 블록 처럼..) 지금까지 약 70만개 이상의 키티가 있다. https://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png 이 컨트랙트에서 정의 된 함수를 보도록 하자. 1. function _transfer(address _from, address _to, uint256 _tokenId) internal 키티의 주인을 바꾸는 함수 , `_tokenId`에 키티 구조체의 index 값을 넣고 변경하고자 하는 주소를 넣는다. 2. function _createKitty( uint256 _matronId, uint256 _sireId, uint256 _generation, uint256 _genes, address _owner ) internal returns (uint) 새로운 키티를 만드는 함수, 키티 id는 최대 2^32-1를 넘지 않는 값으로 된다. parameter로는 부모의 키티 id를 넣고, _generation(몇 대손 이라고 해야하나?) 그리고 _genes(유전자 정보)와 키티 주인 지갑 주소를 넣는 다. 마지막 부분을 보면 `_transfer(0, _owner, newKittenId);`로 ERC721(draft) 토큰의 주인을 새롭게 지정한다. 결국 토큰id랑 키티 id는 동일한 값을 사용한다. 3. function setSecondsPerBlock(uint256 secs) external onlyCLevel 이더리움의 블록 생성 시간(약 15초)를 설정하는 함수이다. 블록 생성 시간을 이용해서 cooldown 시간을 계산하게 된다. 일반적인 프로그램처럼 타이머를 못쓰니 저렇게 각 블록간 시간을 알면 block.number로 대략적인 시간을 알 수 있다. |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png"],"links":["https://cryptokittydex.com/kitties/579543","https://www.cryptokitties.co/kitty/1"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22080798/Trx c2ce5422fde4e92066c0a115d9f7787fbcc17cc6 |
View Raw JSON Data
{
"trx_id": "c2ce5422fde4e92066c0a115d9f7787fbcc17cc6",
"block": 22080798,
"trx_in_block": 10,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-02T15:20:45",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "3-kittybase",
"title": "크립토키티 소스 분석 3 .... KittyBase",
"body": "이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다.\n\nKittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyBase, ERC721\n\n**KittyBase** <- KittyAccessControl\n\n\nKittyBase는 크립토키티 코어에서 사용하는 데이터 구조가 정의되어 있다. 게임 전체에서 사용하는 데이터 구조로 실제 정의되어 있는 struct는 다음과 같다. 그리고 solidity의 EVM에 의하면 32바이트로 채워져서 저장이 되기 때문에 kitty의 구조체를 보면 32바이트씩 밑에서 묶을 수 있다. genes을 제외하고 나머지 요소들을 합치면 32바이트(256비트)로 묶을 수 있다. 여기서 이러한 최적화를 시켜 gas 비용을 줄이게 된다. \n\n struct Kitty {\n uint256 genes;\n uint64 birthTime;\n uint64 cooldownEndBlock;\n uint32 matronId;\n uint32 sireId;\n uint32 siringWithId;\n uint16 cooldownIndex;\n uint16 generation;\n }\n\n\n하나하나 보도록하자.(참고로 게임이라 수컷, 암컷에 상관없이 다 교배가 가능하다. 아마 수컷암컷에 대한 정보도 넣게 되면 복잡해지고 게임도 그리 재미없어져서 그런 듯 싶다)\n\n1. genes \n 크립토키티의 유전자 정보를 표현함. 실제로 크립토 키티를 보면 다양한 외형 조합이 가능한데 이 256비트로 그 조합을 표현한다. 외형은 예를 들어 앞에 몇 비트는 얼굴...그 뒤 몇 비트는 몸통 등등...그리고 물론 외형으로 표현은 되지 않지만 가지고 있는 유전자 정보도 있다. \n\n2. birthTime\n 크립토 키티가 태어난 날, block.timestamp값이 저장\n\n3. cooldownEndBlock\n 교배가 다시 되기까지 기다려야 하는 시간\n\n4. matronId\n아빠 ID\n\n5. sireID\n 엄마 ID\n\n6. siringWithId\n 만약에 고양이가 임신 중일 경우에 아빠가 되는 상대의 키티 ID를 설정함, 임신 중이지 않을 경우는 0\n\n7. cooldownIndex\n 현재 cooldown의 index. 교배 후에 재교배하기까지 어느정도 기다리는지 index에 따라 시간이 결정됨\n\n8. generation\n 키티의 제네레이션의 수. 부모의 제네레이션의 수에 1를 더한 수가 됨. 최초의 키티는 0.\n\n이 정보에 따라서 어떤 고양이의 모습인지는 [여기 cryptokittyindex](https://cryptokittydex.com/kitties/579543)를 보면 된다. 마지막에 키티 index를 넣으면 해당 고양이의 정보를 볼 수 있다. \n크립토키티에서 나오는 모든 고양이는 저 struct를 가지고 있다. 그럼 가장 최초의 고양이는 어떤 모습일까? [여기](https://www.cryptokitties.co/kitty/1)를 보면 genesis kitty가 나온다 (블록의 제네시스 블록 처럼..) 지금까지 약 70만개 이상의 키티가 있다. \n\nhttps://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png\n\n이 컨트랙트에서 정의 된 함수를 보도록 하자.\n\n1. function _transfer(address _from, address _to, uint256 _tokenId) internal \n 키티의 주인을 바꾸는 함수 , `_tokenId`에 키티 구조체의 index 값을 넣고 변경하고자 하는 주소를 넣는다.\n\n2. function _createKitty( uint256 _matronId, uint256 _sireId, uint256 _generation, uint256 _genes, address _owner ) internal returns (uint)\n새로운 키티를 만드는 함수, 키티 id는 최대 2^32-1를 넘지 않는 값으로 된다. parameter로는 부모의 키티 id를 넣고, _generation(몇 대손 이라고 해야하나?) 그리고 _genes(유전자 정보)와 키티 주인 지갑 주소를 넣는 다.\n마지막 부분을 보면 `_transfer(0, _owner, newKittenId);`로 ERC721(draft) 토큰의 주인을 새롭게 지정한다. 결국 토큰id랑 키티 id는 동일한 값을 사용한다. \n\n3. function setSecondsPerBlock(uint256 secs) external onlyCLevel \n이더리움의 블록 생성 시간(약 15초)를 설정하는 함수이다. 블록 생성 시간을 이용해서 cooldown 시간을 계산하게 된다. 일반적인 프로그램처럼 타이머를 못쓰니 저렇게 각 블록간 시간을 알면 block.number로 대략적인 시간을 알 수 있다.",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmfEr5yahCkHZcriW2CFkEq8iGdvDqjNvWoDijTQBwVZta/image.png\"],\"links\":[\"https://cryptokittydex.com/kitties/579543\",\"https://www.cryptokitties.co/kitty/1\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}jeaimetuupvoted (100.00%) @kimyd / 2-kittyaccesscontrol2018/05/02 02:52:30
jeaimetuupvoted (100.00%) @kimyd / 2-kittyaccesscontrol
2018/05/02 02:52:30
| voter | jeaimetu |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22065836/Trx 27bbcca8be95b2fc589e07bacb94e790ba8c956f |
View Raw JSON Data
{
"trx_id": "27bbcca8be95b2fc589e07bacb94e790ba8c956f",
"block": 22065836,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-02T02:52:30",
"op": [
"vote",
{
"voter": "jeaimetu",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"weight": 10000
}
]
}2018/05/02 01:36:09
2018/05/02 01:36:09
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 1 |
| title | 크립토키티 소스 분석...1 |
| body | @@ -948,67 +948,4 @@ %EC%9D%B4%EB%90%9C%EB%8B%A4. - %0A%EC%A7%80%EA%B8%88 %EA%B8%80%EC%9D%84 %EC%93%B0%EA%B3%A0 %EC%9E%88%EB%8A%94 %EC%8B%9C%EC%A0%90%EC%97%90 %EA%B3%A0%EC%96%91%EC%9D%B4%EB%8A%94 70%EB%A7%8C %EB%A7%88%EB%A6%AC%EB%A5%BC %EB%84%98%EA%B8%B0%EA%B3%A0 %EC%9E%88%EB%8B%A4. %EB%8B%A4%EC%9D%8C%EC%97%90%EB%8A%94 %EC%A7%84%EC%A7%9C %EC%86%8C%EC%8A%A4%EB%A5%BC %EB%B6%84%EC%84%9D%ED%95%B4%EB%B3%B4%EB%8F%84%EB%A1%9D %ED%95%9C%EB%8B%A4. |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"links":["https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22064309/Trx 65901b37e4897f4b85447a67624f969e9f9c720c |
View Raw JSON Data
{
"trx_id": "65901b37e4897f4b85447a67624f969e9f9c720c",
"block": 22064309,
"trx_in_block": 42,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-02T01:36:09",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "1",
"title": "크립토키티 소스 분석...1",
"body": "@@ -948,67 +948,4 @@\n %EC%9D%B4%EB%90%9C%EB%8B%A4.\n- %0A%EC%A7%80%EA%B8%88 %EA%B8%80%EC%9D%84 %EC%93%B0%EA%B3%A0 %EC%9E%88%EB%8A%94 %EC%8B%9C%EC%A0%90%EC%97%90 %EA%B3%A0%EC%96%91%EC%9D%B4%EB%8A%94 70%EB%A7%8C %EB%A7%88%EB%A6%AC%EB%A5%BC %EB%84%98%EA%B8%B0%EA%B3%A0 %EC%9E%88%EB%8B%A4. %EB%8B%A4%EC%9D%8C%EC%97%90%EB%8A%94 %EC%A7%84%EC%A7%9C %EC%86%8C%EC%8A%A4%EB%A5%BC %EB%B6%84%EC%84%9D%ED%95%B4%EB%B3%B4%EB%8F%84%EB%A1%9D %ED%95%9C%EB%8B%A4.\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"links\":[\"https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydpublished a new post: 2-kittyaccesscontrol2018/05/01 14:00:30
kimydpublished a new post: 2-kittyaccesscontrol
2018/05/01 14:00:30
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| title | 크립토키티 소스 코드 분석(2) KittyAccessControl |
| body | @@ -1450,8 +1450,136 @@ %EB%8A%94 %EC%B6%94%EC%B8%A1%EC%9D%B4%EB%8B%A4.. +%0A%0Aedit : %EC%8B%A4%EC%A0%9C%EB%A1%9C %EC%BD%94%EB%93%9C%EB%A5%BC %EB%B3%B4%EB%A9%B4 KittyAccessControl%EC%97%90%EC%84%9C %EC%A0%95%EC%9D%98%ED%95%9C unpause%EB%9D%BC%EB%8A%94 %ED%95%A8%EC%88%98%EA%B0%80 Ownable, KittyCore(override%ED%95%B4%EC%84%9C)%EC%97%90%EC%84%9C %EB%B6%88%EB%9F%AC%EC%99%80 %ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94 %EB%B6%80%EB%B6%84%EC%9D%B4 %EC%9E%88%EB%8B%A4. %EA%B7%B8%EB%9E%98%EC%84%9C public%EC%9C%BC%EB%A1%9C %EC%A0%95%EC%9D%98%ED%95%9C %EB%93%AF. |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png"],"links":["https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1","https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c","https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22050399/Trx c4ab22927656815b9939fbff8f5e15ab86c0f3a3 |
View Raw JSON Data
{
"trx_id": "c4ab22927656815b9939fbff8f5e15ab86c0f3a3",
"block": 22050399,
"trx_in_block": 41,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-01T14:00:30",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"title": "크립토키티 소스 코드 분석(2) KittyAccessControl",
"body": "@@ -1450,8 +1450,136 @@\n %EB%8A%94 %EC%B6%94%EC%B8%A1%EC%9D%B4%EB%8B%A4..\n+%0A%0Aedit : %EC%8B%A4%EC%A0%9C%EB%A1%9C %EC%BD%94%EB%93%9C%EB%A5%BC %EB%B3%B4%EB%A9%B4 KittyAccessControl%EC%97%90%EC%84%9C %EC%A0%95%EC%9D%98%ED%95%9C unpause%EB%9D%BC%EB%8A%94 %ED%95%A8%EC%88%98%EA%B0%80 Ownable, KittyCore(override%ED%95%B4%EC%84%9C)%EC%97%90%EC%84%9C %EB%B6%88%EB%9F%AC%EC%99%80 %ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94 %EB%B6%80%EB%B6%84%EC%9D%B4 %EC%9E%88%EB%8B%A4. %EA%B7%B8%EB%9E%98%EC%84%9C public%EC%9C%BC%EB%A1%9C %EC%A0%95%EC%9D%98%ED%95%9C %EB%93%AF.\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png\"],\"links\":[\"https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1\",\"https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c\",\"https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydupvoted (100.00%) @kimyd / 2-kittyaccesscontrol2018/05/01 13:53:45
kimydupvoted (100.00%) @kimyd / 2-kittyaccesscontrol
2018/05/01 13:53:45
| voter | kimyd |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22050264/Trx fb2071ce02d5eac568c13e623a6c14de704d543b |
View Raw JSON Data
{
"trx_id": "fb2071ce02d5eac568c13e623a6c14de704d543b",
"block": 22050264,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-01T13:53:45",
"op": [
"vote",
{
"voter": "kimyd",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"weight": 10000
}
]
}wonsamaupvoted (10.00%) @kimyd / 2-kittyaccesscontrol2018/04/30 20:01:06
wonsamaupvoted (10.00%) @kimyd / 2-kittyaccesscontrol
2018/04/30 20:01:06
| voter | wonsama |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| weight | 1000 (10.00%) |
| Transaction Info | Block #22028817/Trx bb1bd045663e48bcd6e632c5845337156bd22d17 |
View Raw JSON Data
{
"trx_id": "bb1bd045663e48bcd6e632c5845337156bd22d17",
"block": 22028817,
"trx_in_block": 42,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-30T20:01:06",
"op": [
"vote",
{
"voter": "wonsama",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"weight": 1000
}
]
}kimydpublished a new post: 2-kittyaccesscontrol2018/04/30 16:45:39
kimydpublished a new post: 2-kittyaccesscontrol
2018/04/30 16:45:39
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| title | 크립토키티 소스 코드 분석(2) KittyAccessControl |
| body | @@ -126,24 +126,27 @@ ittyBase %3C- + ** KittyAccessC @@ -151,16 +151,18 @@ sControl +** %0A%0A## Kit |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png"],"links":["https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1","https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c","https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22024909/Trx f4c5a806d2851a281c27710268036feb7289c21f |
View Raw JSON Data
{
"trx_id": "f4c5a806d2851a281c27710268036feb7289c21f",
"block": 22024909,
"trx_in_block": 36,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-30T16:45:39",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"title": "크립토키티 소스 코드 분석(2) KittyAccessControl",
"body": "@@ -126,24 +126,27 @@\n ittyBase %3C- \n+ **\n KittyAccessC\n@@ -151,16 +151,18 @@\n sControl\n+**\n %0A%0A## Kit\n",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png\"],\"links\":[\"https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1\",\"https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c\",\"https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}kimydpublished a new post: 2-kittyaccesscontrol2018/04/30 16:44:30
kimydpublished a new post: 2-kittyaccesscontrol
2018/04/30 16:44:30
| parent author | |
| parent permlink | kr |
| author | kimyd |
| permlink | 2-kittyaccesscontrol |
| title | 크립토키티 소스 코드 분석(2) KittyAccessControl |
| body | 이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다. KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyBase, ERC721 KittyBase <- KittyAccessControl ## KittyAcceessControl  주석을 보면 KittyAccessControl 컨트랙트는 권한 엑세스 용도로만 포함되어 있다. (게임하고 관련이 직접적으로는 없지만..보통 ownable 같은 느낌으로 쓰는 듯하다) 권한은 CEO, CFO, COO, CLevel 등 만이 실행할 수 있는 함수들을 정의하기 위해서 modifier를 정의해 놓았다. 그럼 누가 CEO이고 CFO이고 한번 찾아봤다. CEO : https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1 CFO : https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c COO : https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a 지금 글을 쓰는 시점에서 참고로 COO가 13.5 이더로 가장 많은 이더를 보유하고 있다. 그럼 COO가 대체 뭐길래? CEO랑 CFO는 많이 듣는데 COO은 좀 생소하다. Chief Operating Officer 최고운영책임자. 주석에 있는 내용에 따르면 CEO는 컨트랙트 자체를 정지시킬 수 있다. CFO는 크립토키티 코어 KittyCore와 Auction 컨트랙트에 있는 funds를 빼낼 수 있다. 마지막으로 COO는 프로모션 고양이를 새로 만들거나 gen0 고양이를 Auction에 release할 수 있다. (gen0이 아직 무슨 말인지..모르겠다..차후 보도록 하기로..알면 다시 업데이트 예정) 재미있는 건 크립토키티 컨트랙트를 CEO/COO/CFO(여기서는 CLevel로 총칭)가 멈출 수 있다.그리고 오직 CEO만이 정지한 것을 풀 수 있게 해놨다. 이유는 주석을 참고하면 CFO/COO의 지갑의 개인키가 유출되었을 경우 정지시켰을 것을 생각해서 라는 데 CEO는 절대 유출될 일이 없을 것을 가정하는 듯하다. 그리고 재미있는 것이 정지시키는 function은 external로 해놨고 푸는 것은 public으로 해놨다. 외부에서만 정지시키는 함수를 실행이 되도록 해놨다. 컨트랙트 내부에서도 실행이 가능하게 public으로 해놓은 것을 보면 ..일정 조건에서 아니면 다른 또 관리 컨트랙트를 만들어서 정지된 크립토키티 컨트랙트를 자동으로 풀 수 있게 만들어 놓지 않았을 까하는 추측이다.. |
| json metadata | {"tags":["kr","cryptokitties","solidity"],"image":["https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png"],"links":["https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1","https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c","https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22024886/Trx 13540cb1cc45febf801b39ea0f6a53a7c8b94445 |
View Raw JSON Data
{
"trx_id": "13540cb1cc45febf801b39ea0f6a53a7c8b94445",
"block": 22024886,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-30T16:44:30",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "kr",
"author": "kimyd",
"permlink": "2-kittyaccesscontrol",
"title": "크립토키티 소스 코드 분석(2) KittyAccessControl",
"body": "이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다. \n\nKittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyBase, ERC721\n\nKittyBase <- KittyAccessControl\n\n## KittyAcceessControl\n\n\n\n주석을 보면 KittyAccessControl 컨트랙트는 권한 엑세스 용도로만 포함되어 있다. (게임하고 관련이 직접적으로는 없지만..보통 ownable 같은 느낌으로 쓰는 듯하다)\n권한은 CEO, CFO, COO, CLevel 등 만이 실행할 수 있는 함수들을 정의하기 위해서 modifier를 정의해 놓았다. \n그럼 누가 CEO이고 CFO이고 한번 찾아봤다.\n\nCEO : https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1\n\nCFO : https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c\n\nCOO : https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a\n\n지금 글을 쓰는 시점에서 참고로 COO가 13.5 이더로 가장 많은 이더를 보유하고 있다. 그럼 COO가 대체 뭐길래? CEO랑 CFO는 많이 듣는데 COO은 좀 생소하다. Chief Operating Officer 최고운영책임자.\n주석에 있는 내용에 따르면 CEO는 컨트랙트 자체를 정지시킬 수 있다. CFO는 크립토키티 코어 KittyCore와 Auction 컨트랙트에 있는 funds를 빼낼 수 있다. 마지막으로 COO는 프로모션 고양이를 새로 만들거나 gen0 고양이를 Auction에 release할 수 있다. (gen0이 아직 무슨 말인지..모르겠다..차후 보도록 하기로..알면 다시 업데이트 예정)\n\n재미있는 건 크립토키티 컨트랙트를 CEO/COO/CFO(여기서는 CLevel로 총칭)가 멈출 수 있다.그리고 오직 CEO만이 정지한 것을 풀 수 있게 해놨다. 이유는 주석을 참고하면 CFO/COO의 지갑의 개인키가 유출되었을 경우 정지시켰을 것을 생각해서 라는 데 CEO는 절대 유출될 일이 없을 것을 가정하는 듯하다. \n그리고 재미있는 것이\n정지시키는 function은 external로 해놨고 푸는 것은 public으로 해놨다. 외부에서만 정지시키는 함수를 실행이 되도록 해놨다. 컨트랙트 내부에서도 실행이 가능하게 public으로 해놓은 것을 보면 ..일정 조건에서 아니면 다른 또 관리 컨트랙트를 만들어서 정지된 크립토키티 컨트랙트를 자동으로 풀 수 있게 만들어 놓지 않았을 까하는 추측이다..",
"json_metadata": "{\"tags\":[\"kr\",\"cryptokitties\",\"solidity\"],\"image\":[\"https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png\"],\"links\":[\"https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1\",\"https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c\",\"https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/04/26 22:15:30
2018/04/26 22:15:30
| voter | boroyne |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21916336/Trx 4b0fcfbb4a9fc462269ba83bf0082bb6013460f6 |
View Raw JSON Data
{
"trx_id": "4b0fcfbb4a9fc462269ba83bf0082bb6013460f6",
"block": 21916336,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T22:15:30",
"op": [
"vote",
{
"voter": "boroyne",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}theorist-albertupvoted (100.00%) @kimyd / 12018/04/26 22:14:51
theorist-albertupvoted (100.00%) @kimyd / 1
2018/04/26 22:14:51
| voter | theorist-albert |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21916323/Trx 58c4d34fc4d92969e9e68080dfc2f696f5e3f2c6 |
View Raw JSON Data
{
"trx_id": "58c4d34fc4d92969e9e68080dfc2f696f5e3f2c6",
"block": 21916323,
"trx_in_block": 35,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T22:14:51",
"op": [
"vote",
{
"voter": "theorist-albert",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:51:57
2018/04/26 20:51:57
| voter | stenley88 |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914665/Trx 8bdb0bb454bbfb3e2f4c4a308346f7e3f4fb21f5 |
View Raw JSON Data
{
"trx_id": "8bdb0bb454bbfb3e2f4c4a308346f7e3f4fb21f5",
"block": 21914665,
"trx_in_block": 16,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:57",
"op": [
"vote",
{
"voter": "stenley88",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}novotroickupvoted (100.00%) @kimyd / 12018/04/26 20:51:48
novotroickupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:48
| voter | novotroick |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914662/Trx be79240e26b0d44641de4c1142c40d6653e5f6f1 |
View Raw JSON Data
{
"trx_id": "be79240e26b0d44641de4c1142c40d6653e5f6f1",
"block": 21914662,
"trx_in_block": 29,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:48",
"op": [
"vote",
{
"voter": "novotroick",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:51:42
2018/04/26 20:51:42
| voter | pustyshka |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914660/Trx 1e2b761b0e844efd6a6ac47c81e31833b83384df |
View Raw JSON Data
{
"trx_id": "1e2b761b0e844efd6a6ac47c81e31833b83384df",
"block": 21914660,
"trx_in_block": 28,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:42",
"op": [
"vote",
{
"voter": "pustyshka",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:51:42
2018/04/26 20:51:42
| voter | erem |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914660/Trx e595fe2ff2af9a2046bfebe1ac7810ab26fb9a5f |
View Raw JSON Data
{
"trx_id": "e595fe2ff2af9a2046bfebe1ac7810ab26fb9a5f",
"block": 21914660,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:42",
"op": [
"vote",
{
"voter": "erem",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:51:39
2018/04/26 20:51:39
| voter | chervomas |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914659/Trx ebdab02ea1a2fbe70cf916f1c8ca89ed2e1714f6 |
View Raw JSON Data
{
"trx_id": "ebdab02ea1a2fbe70cf916f1c8ca89ed2e1714f6",
"block": 21914659,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:39",
"op": [
"vote",
{
"voter": "chervomas",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}vronominichupvoted (100.00%) @kimyd / 12018/04/26 20:51:30
vronominichupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:30
| voter | vronominich |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914656/Trx ca8dd7072867b6b695702b931674b615f0fd22f6 |
View Raw JSON Data
{
"trx_id": "ca8dd7072867b6b695702b931674b615f0fd22f6",
"block": 21914656,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:30",
"op": [
"vote",
{
"voter": "vronominich",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:51:12
2018/04/26 20:51:12
| voter | daksskad |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914650/Trx 2f726bd1cd0615f01bf215f38838c05b24181b78 |
View Raw JSON Data
{
"trx_id": "2f726bd1cd0615f01bf215f38838c05b24181b78",
"block": 21914650,
"trx_in_block": 34,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:12",
"op": [
"vote",
{
"voter": "daksskad",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}kavepanavsubretupvoted (100.00%) @kimyd / 12018/04/26 20:51:12
kavepanavsubretupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:12
| voter | kavepanavsubret |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914650/Trx 214c5908aba98871133f070b18c25a0d9ff510e3 |
View Raw JSON Data
{
"trx_id": "214c5908aba98871133f070b18c25a0d9ff510e3",
"block": 21914650,
"trx_in_block": 21,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:12",
"op": [
"vote",
{
"voter": "kavepanavsubret",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}ilushichevsupvoted (100.00%) @kimyd / 12018/04/26 20:51:06
ilushichevsupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:06
| voter | ilushichevs |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914648/Trx e0362dcf39af52763bfa1c04d714886ae7e1f29f |
View Raw JSON Data
{
"trx_id": "e0362dcf39af52763bfa1c04d714886ae7e1f29f",
"block": 21914648,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:06",
"op": [
"vote",
{
"voter": "ilushichevs",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}sobachenkaupvoted (100.00%) @kimyd / 12018/04/26 20:51:06
sobachenkaupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:06
| voter | sobachenka |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914648/Trx 4769143eab7c5d5a03b74e367bb5c718a96768fa |
View Raw JSON Data
{
"trx_id": "4769143eab7c5d5a03b74e367bb5c718a96768fa",
"block": 21914648,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:51:06",
"op": [
"vote",
{
"voter": "sobachenka",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}svyatoslav76upvoted (100.00%) @kimyd / 12018/04/26 20:50:42
svyatoslav76upvoted (100.00%) @kimyd / 1
2018/04/26 20:50:42
| voter | svyatoslav76 |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914640/Trx 9d2522f6d9618aadbf08d442f5568634ee046bb2 |
View Raw JSON Data
{
"trx_id": "9d2522f6d9618aadbf08d442f5568634ee046bb2",
"block": 21914640,
"trx_in_block": 18,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:50:42",
"op": [
"vote",
{
"voter": "svyatoslav76",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}2018/04/26 20:50:42
2018/04/26 20:50:42
| voter | gamau |
| author | kimyd |
| permlink | 1 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21914640/Trx 57afb23901138b47b614e38aead011087381c38f |
View Raw JSON Data
{
"trx_id": "57afb23901138b47b614e38aead011087381c38f",
"block": 21914640,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T20:50:42",
"op": [
"vote",
{
"voter": "gamau",
"author": "kimyd",
"permlink": "1",
"weight": 10000
}
]
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress98.84%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779071460
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779071460
},
"rc_account": {
"account": "kimyd",
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779071460
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": "10164408779"
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"name":"Kronos","location":"korea","about":"보안과 암호 화폐를 사랑하는 한 사람","profile_image":"https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png"} |
| JSON METADATA | |
| profile | {"name":"Kronos","location":"korea","about":"보안과 암호 화폐를 사랑하는 한 사람","profile_image":"https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png"} |
{
"posting_json_metadata": {
"profile": {
"name": "Kronos",
"location": "korea",
"about": "보안과 암호 화폐를 사랑하는 한 사람",
"profile_image": "https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png"
}
},
"json_metadata": {
"profile": {
"name": "Kronos",
"location": "korea",
"about": "보안과 암호 화폐를 사랑하는 한 사람",
"profile_image": "https://files.coinmarketcap.com/static/img/coins/32x32/ethereum.png"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM5TCe5KojYfcpTKxxnsecDM7H2PYQEdbUCspQAn4S6YwfWSbC5h1/1
Active
Single Signature
Public Keys
STM7EWRCP7kzujzmPcMvLoLALNh5vpwLKHRuVpnm4jUe5CEEEaj9o1/1
Posting
Single Signature
Public Keys
STM6eVfBhc9gvd5m41SK6s9mr7Aq5ggoCgNHUtgQU31DSUbfBZhrq1/1
Memo
STM6xjYhrTi4n6mhc5g3X2E1fYmTNa8eWaJ9jjqaqSemnkXWPxDJp
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5TCe5KojYfcpTKxxnsecDM7H2PYQEdbUCspQAn4S6YwfWSbC5h",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7EWRCP7kzujzmPcMvLoLALNh5vpwLKHRuVpnm4jUe5CEEEaj9o",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6eVfBhc9gvd5m41SK6s9mr7Aq5ggoCgNHUtgQU31DSUbfBZhrq",
1
]
]
},
"memo": "STM6xjYhrTi4n6mhc5g3X2E1fYmTNa8eWaJ9jjqaqSemnkXWPxDJp"
}Witness Votes
0 / 30
No active witness votes.
[]