Ecoer Logo

@kimyd

29

보안과 암호 화폐를 사랑하는 한 사람

steemit.com/@kimyd
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 Deleg
+4.369SP

Detailed Balance

STEEM
balance
0.000STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.632SP
Delegated Out
0.000SP
Delegation In
4.369SP
Effective Power
5.001SP
Reward SP (pending)
0.113SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.400SBD
{
  "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

namekimyd
id412728
rank548,846
reputation2774336299
created2017-10-19T06:11:45
recovery_accountsteem
proxyNone
post_count16
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2018-05-27T11:50:12
last_root_post2018-05-27T11:50:12
last_vote_time2018-05-20T12:15:30
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.000 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares1028.433991 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares7115.225815 VESTS
reward_vesting_balance230.025913 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update1970-01-01T00:00:00
last_account_update2018-03-08T13:27:54
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-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

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 4.369 SP to @kimyd
2026/05/18 02:31:00
delegatorsteem
delegateekimyd
vesting shares7115.225815 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 2.704 SP to @kimyd
2026/05/12 13:00:18
delegatorsteem
delegateekimyd
vesting shares4403.015410 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 4.377 SP to @kimyd
2026/04/26 01:48:15
delegatorsteem
delegateekimyd
vesting shares7127.741571 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 2.729 SP to @kimyd
2026/01/23 13:52:15
delegatorsteem
delegateekimyd
vesting shares4444.562229 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 2.830 SP to @kimyd
2024/12/17 09:07:30
delegatorsteem
delegateekimyd
vesting shares4608.781426 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 2.934 SP to @kimyd
2023/11/14 00:49:09
delegatorsteem
delegateekimyd
vesting shares4777.914958 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 4.738 SP to @kimyd
2023/09/22 00:29:36
delegatorsteem
delegateekimyd
vesting shares7715.193744 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 4.874 SP to @kimyd
2022/11/03 13:57:12
delegatorsteem
delegateekimyd
vesting shares7936.875182 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 5.009 SP to @kimyd
2022/01/17 17:17:36
delegatorsteem
delegateekimyd
vesting shares8157.110318 VESTS
Transaction InfoBlock #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-kittybreeding
2021/09/13 06:07:48
voterseup
authorkimyd
permlink6-kittybreeding
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
seupupvoted (100.00%) @kimyd / 4-erc721
2021/09/13 05:50:33
voterseup
authorkimyd
permlink4-erc721
weight10000 (100.00%)
Transaction InfoBlock #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-kittyaccesscontrol
2021/09/13 05:36:12
voterseup
authorkimyd
permlink2-kittyaccesscontrol
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
steemdelegated 5.122 SP to @kimyd
2021/06/14 02:51:21
delegatorsteem
delegateekimyd
vesting shares8341.177071 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 5.237 SP to @kimyd
2020/12/11 13:07:27
delegatorsteem
delegateekimyd
vesting shares8528.599045 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 1.174 SP to @kimyd
2020/12/06 06:44:06
delegatorsteem
delegateekimyd
vesting shares1912.543513 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 5.241 SP to @kimyd
2020/12/05 16:45:36
delegatorsteem
delegateekimyd
vesting shares8534.806899 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 1.179 SP to @kimyd
2020/11/02 19:49:33
delegatorsteem
delegateekimyd
vesting shares1920.017158 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 5.366 SP to @kimyd
2020/05/09 07:43:42
delegatorsteem
delegateekimyd
vesting shares8737.612258 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 1.200 SP to @kimyd
2020/05/08 11:37:54
delegatorsteem
delegateekimyd
vesting shares1953.311140 VESTS
Transaction InfoBlock #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
parent authorkimyd
parent permlink7-kittyauction
authorsteemitboard
permlinksteemitboard-notify-kimyd-20191019t074702000z
title
bodyCongratulations @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 InfoBlock #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\"]}"
    }
  ]
}
shinhyoupvoted (100.00%) @kimyd / 1
2019/10/10 02:02:51
votershinhyo
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
steemdelegated 5.461 SP to @kimyd
2019/08/11 02:16:06
delegatorsteem
delegateekimyd
vesting shares8892.924670 VESTS
Transaction InfoBlock #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
parent authorkimyd
parent permlink7-kittyauction
authorsteemitboard
permlinksteemitboard-notify-kimyd-20181019t121523000z
title
bodyCongratulations @kimyd! You have received a personal award! [![](https://steemitimages.com/70x70/http://steemitboard.com/@kimyd/birthday1.png)](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 InfoBlock #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[![](https://steemitimages.com/70x70/http://steemitboard.com/@kimyd/birthday1.png)](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\"]}"
    }
  ]
}
steemdelegated 5.583 SP to @kimyd
2018/08/26 12:26:48
delegatorsteem
delegateekimyd
vesting shares9091.386212 VESTS
Transaction InfoBlock #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"
    }
  ]
}
steemdelegated 18.012 SP to @kimyd
2018/08/26 09:51:00
delegatorsteem
delegateekimyd
vesting shares29331.218733 VESTS
Transaction InfoBlock #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-kittyauction
2018/05/27 12:08:54
voterswagger
authorkimyd
permlink7-kittyauction
weight2 (0.02%)
Transaction InfoBlock #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-kittyauction
2018/05/27 11:50:12
parent author
parent permlinkkr
authorkimyd
permlink7-kittyauction
title크립토 키티 소스 코드 분석 7번째 컨트랙트 KittyAuction
body지난 번 6번째 컨트랙트 KittyBreeding에서는 어떻게 두 고양이가 교배를 시키고, 어떻게 새로운 새끼 고양이가 태어나는 지에 대한 내용이였다. 이제 진짜 "돈"을 쓰게되는 KittyAuction 컨트랙트를 보도록 하자. 다시 말하지만, 스팀잇보다 더 좋은 블로그?를 찾으면 옮길까 한다. KittyCore <- KittyMinting <- **KittyAuction**<- KittyBreeding <- KittyOwnership <- KittyBase, ERC721 KittyBase <- KittyAccessControl KittyAuction은 실제 고양이를 매매에 대한 내용이 포함되어 있다. 크립토 키티에서 이하와 같이 본인 소유의 고양이를 다른 교배를 위해서 내놓거나(빌려주거나) 아니면 아에 팔거나, 혹은 다른 사람한테 주거나 이렇게 3가지 액션을 할 수 있다. ![](https://steemitimages.com/DQmeUrNcgUxM9hnkYUxBa7ZYLVKmMNrbN3S1nKsDFpGK5XL/image.png) 옥션은 여기서 교배를 위해 다른 사람에게 빌려주거나, 파는 경우 각각에 대해서 각각 다른 컨트랙트를 사용하고 그 컨트랙트 주소를 이하처럼 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`을 보도록 한다. ![](https://steemitimages.com/DQmeZQP6GJqs8VmmrvuNengn7JCo5LjpSfgMBLMzaAMvfyE/image.png) 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 InfoBlock #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![](https://steemitimages.com/DQmeUrNcgUxM9hnkYUxBa7ZYLVKmMNrbN3S1nKsDFpGK5XL/image.png)\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![](https://steemitimages.com/DQmeZQP6GJqs8VmmrvuNengn7JCo5LjpSfgMBLMzaAMvfyE/image.png)\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-kittybreeding
2018/05/24 12:30:30
authorkimyd
permlink6-kittybreeding
sbd payout0.029 SBD
steem payout0.000 STEEM
vesting payout20.340423 VESTS
Transaction InfoBlock #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-kittybreeding
2018/05/20 12:15:30
voterkimyd
authorkimyd
permlink6-kittybreeding
weight10000 (100.00%)
Transaction InfoBlock #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-kittybreeding
2018/05/20 04:31:51
votercyberberry
authorkimyd
permlink6-kittybreeding
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
2018/05/19 03:53:39
votersteemspoker
authorkimyd
permlink6-kittybreeding
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
2018/05/17 13:01:06
voteracknowledgement
authorkimyd
permlink6-kittybreeding
weight1000 (10.00%)
Transaction InfoBlock #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-kittybreeding
2018/05/17 12:33:27
parent author
parent permlinkkr
authorkimyd
permlink6-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&amp;zero=false&amp;a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&amp;valid=true","https://steemit.com/kr/@kimyd/3-kittybase"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #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&amp;zero=false&amp;a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&amp;valid=true\",\"https://steemit.com/kr/@kimyd/3-kittybase\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
kimydpublished a new post: 6-kittybreeding
2018/05/17 12:30:30
parent author
parent permlinkkr
authorkimyd
permlink6-kittybreeding
title크립토 키티 소스 코드 분석 6번째 컨트랙트 KittyBreeding
body지난 번 5번째 컨트랙트 KittyOwnership에서는 주로 토큰(ERC721)에 대한 기본적인 함수에 대해서만 나와있었다. 이제 진짜 크립토 키티스러운..컨트랙트인 KittyBreeding을 살펴본다. KittyCore <- KittyMinting <- KittyAuction <- **KittyBreeding** <- KittyOwnership <- KittyBase, ERC721 KittyBase <- KittyAccessControl ![](https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png) 고양이를 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는 제외시키고) ![](https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png) 총 합계는 대충 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&amp;zero=false&amp;a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&amp;valid=true","https://steemit.com/kr/@kimyd/3-kittybase","https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #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![](https://steemitimages.com/DQmUJsnEuczG1qYgsKfBCBw8KNuYXjoWhhonFPknWiKXibu/image.png)\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![](https://steemitimages.com/DQmaayyGM7BHw6ZF2NH2TxC67Lawut9F2YAPGjUA62qQWnm/image.png)\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&amp;zero=false&amp;a=0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c&amp;valid=true\",\"https://steemit.com/kr/@kimyd/3-kittybase\",\"https://steemitimages.com/DQmdx4Wy1SWFp8xjTmkMxE8mC4s6hpNEDsFFA8vELPUo5ZW/image.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
kimydupvoted (100.00%) @voidlink / 2
2018/05/15 12:32:21
voterkimyd
authorvoidlink
permlink2
weight10000 (100.00%)
Transaction InfoBlock #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
required auths[]
required posting auths["kimyd"]
idfollow
json["follow",{"follower":"kimyd","following":"voidlink","what":["blog"]}]
Transaction InfoBlock #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\"]}]"
    }
  ]
}
kimydupvoted (100.00%) @kimyd / 4-erc721
2018/05/14 11:40:24
voterkimyd
authorkimyd
permlink4-erc721
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
kimydreceived 0.074 SBD, 0.029 SP author reward for @kimyd / 4-erc721
2018/05/11 13:32:39
authorkimyd
permlink4-erc721
sbd payout0.074 SBD
steem payout0.000 STEEM
vesting payout46.814506 VESTS
Transaction InfoBlock #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-kittyownership
2018/05/10 14:40:48
parent author
parent permlinkkr
authorkimyd
permlink5-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 InfoBlock #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\"}"
    }
  ]
}
2018/05/10 14:40:33
votersyahrulrazi
authorkimyd
permlink5-kittyownership
weight10000 (100.00%)
Transaction InfoBlock #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-kittyownership
2018/05/10 14:39:39
parent author
parent permlinkkr
authorkimyd
permlink5-kittyownership
title크립토 키티 소스 코드 분석 5번째 컨트랙트 KittyOwnership
bodyERC721 컨트랙트에는 인터페이스 정의만 나와있고 실질적으로 내용은 `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 InfoBlock #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-kittyaccesscontrol
2018/05/07 16:44:30
authorkimyd
permlink2-kittyaccesscontrol
sbd payout0.254 SBD
steem payout0.000 STEEM
vesting payout138.435859 VESTS
Transaction InfoBlock #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"
    }
  ]
}
wonsamaupvoted (10.00%) @kimyd / 4-erc721
2018/05/04 15:01:12
voterwonsama
authorkimyd
permlink4-erc721
weight1000 (10.00%)
Transaction InfoBlock #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-erc721
2018/05/04 14:05:54
votermoosung8807
authorkimyd
permlink4-erc721
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
2018/05/04 13:33:36
parent authorkimyd
parent permlink4-erc721
authorcheetah
permlinkcheetah-re-kimyd4-erc721
title
bodyHi! 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 InfoBlock #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": ""
    }
  ]
}
cheetahupvoted (0.08%) @kimyd / 4-erc721
2018/05/04 13:33:33
votercheetah
authorkimyd
permlink4-erc721
weight8 (0.08%)
Transaction InfoBlock #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
    }
  ]
}
thevillanupvoted (0.50%) @kimyd / 4-erc721
2018/05/04 13:32:48
voterthevillan
authorkimyd
permlink4-erc721
weight50 (0.50%)
Transaction InfoBlock #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
    }
  ]
}
kimydpublished a new post: 4-erc721
2018/05/04 13:32:39
parent author
parent permlinkkr
authorkimyd
permlink4-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 InfoBlock #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\"}"
    }
  ]
}
2018/05/03 13:54:15
parent authorkimyd
parent permlink1
authorkimyd
permlinkre-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 InfoBlock #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\"}"
    }
  ]
}
kimydupvoted (100.00%) @kimyd / 1
2018/05/03 13:52:18
voterkimyd
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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-kittyaccesscontrol
2018/05/03 13:51:30
parent author
parent permlinkkr
authorkimyd
permlink2-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 InfoBlock #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\"}"
    }
  ]
}
kimydreceived 0.043 SBD, 0.015 SP author reward for @kimyd / 1
2018/05/03 12:49:21
authorkimyd
permlink1
sbd payout0.043 SBD
steem payout0.000 STEEM
vesting payout24.435125 VESTS
Transaction InfoBlock #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-kittybase
2018/05/02 15:23:06
parent author
parent permlinkkr
authorkimyd
permlink3-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 InfoBlock #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-kittybase
2018/05/02 15:20:45
parent author
parent permlinkkr
authorkimyd
permlink3-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 InfoBlock #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\"}"
    }
  ]
}
2018/05/02 02:52:30
voterjeaimetu
authorkimyd
permlink2-kittyaccesscontrol
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
kimydpublished a new post: 1
2018/05/02 01:36:09
parent author
parent permlinkkr
authorkimyd
permlink1
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 InfoBlock #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-kittyaccesscontrol
2018/05/01 14:00:30
parent author
parent permlinkkr
authorkimyd
permlink2-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 InfoBlock #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-kittyaccesscontrol
2018/05/01 13:53:45
voterkimyd
authorkimyd
permlink2-kittyaccesscontrol
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
2018/04/30 20:01:06
voterwonsama
authorkimyd
permlink2-kittyaccesscontrol
weight1000 (10.00%)
Transaction InfoBlock #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-kittyaccesscontrol
2018/04/30 16:45:39
parent author
parent permlinkkr
authorkimyd
permlink2-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 InfoBlock #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-kittyaccesscontrol
2018/04/30 16:44:30
parent author
parent permlinkkr
authorkimyd
permlink2-kittyaccesscontrol
title크립토키티 소스 코드 분석(2) KittyAccessControl
body이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다. KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyBase, ERC721 KittyBase <- KittyAccessControl ## KittyAcceessControl ![](https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png) 주석을 보면 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 InfoBlock #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![](https://steemitimages.com/DQmYqqUg2WvqeWcAtBkzkjKnJmcNTk2g3apQB67DKyBCgCT/image.png)\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\"}"
    }
  ]
}
boroyneupvoted (100.00%) @kimyd / 1
2018/04/26 22:15:30
voterboroyne
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 22:14:51
votertheorist-albert
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
stenley88upvoted (100.00%) @kimyd / 1
2018/04/26 20:51:57
voterstenley88
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:51:48
voternovotroick
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
pustyshkaupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:42
voterpustyshka
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
eremupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:42
votererem
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
chervomasupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:39
voterchervomas
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:51:30
votervronominich
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
daksskadupvoted (100.00%) @kimyd / 1
2018/04/26 20:51:12
voterdaksskad
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:51:12
voterkavepanavsubret
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:51:06
voterilushichevs
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:51:06
votersobachenka
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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 / 1
2018/04/26 20:50:42
votersvyatoslav76
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}
gamauupvoted (100.00%) @kimyd / 1
2018/04/26 20:50:42
votergamau
authorkimyd
permlink1
weight10000 (100.00%)
Transaction InfoBlock #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
    }
  ]
}

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.
[]