VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
13.068USD
HIVE
0.035HIVE
HBD
0.032HBD
Own HP
32.555HP
Detailed Balance
| HIVE | ||
| balance | 0.035HIVE | HIVE |
| market_balance | 0.000HIVE | HIVE |
| savings_balance | 0.000HIVE | HIVE |
| reward_hive_balance | 0.000HIVE | HIVE |
| HIVE POWER | ||
| Own HP | 32.555HP | HP |
| Delegated Out | 0.000HP | HP |
| Delegation In | 0.000HP | HP |
| Effective Power | 32.555HP | HP |
| Reward HP (pending) | 0.000HP | HP |
| HBD | ||
| hbd_balance | 0.032HBD | HBD |
| hbd_conversions | 0.000HBD | HBD |
| hbd_market_balance | 0.000HBD | HBD |
| savings_hbd_balance | 0.000HBD | HBD |
| reward_hbd_balance | 0.000HBD | HBD |
{
"balance": "0.035 HIVE",
"savings_balance": "0.000 HIVE",
"reward_hive_balance": "0.000 HIVE",
"vesting_shares": "52837.389541 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"hbd_balance": "0.032 HBD",
"savings_hbd_balance": "0.000 HBD",
"reward_hbd_balance": "0.000 HBD"
}Account Info
| name | loum |
| id | 27619 |
| rank | 0 |
| reputation | 0 |
| created | 2016-07-19T02:36:30 |
| recovery_account | steem |
| proxy | None |
| invited_by | null |
| post_count | 716 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2019-10-22T07:51:45 |
| last_root_post | 2019-10-22T07:51:45 |
| last_vote_time | 2018-06-27T02:37:09 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | None |
| governance_vote_expiration_ts | 1969-12-31T23:59:59 |
| balance | 0.035 HIVE |
| savings_balance | 0.000 HIVE |
| hbd_balance | 0.032 HBD |
| savings_hbd_balance | 0.000 HBD |
| vesting_shares | 52837.389541 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 HIVE |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 2017-06-22T02:20:54 |
| last_account_update | 2019-10-08T13:51:21 |
| mined | No |
| hbd_seconds | 0 |
| hbd_last_interest_payment | 2019-11-08T08:47:39 |
| savings_hbd_last_interest_payment | 2017-12-18T06:39:42 |
{
"id": 27619,
"name": "loum",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM8NFaszEbFgqHYNePvo6hBmy3VfeAUvhuiy6htmmPEC4d7i2sQB",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7nHptf87cAWsdyKCLQDVzsotpCXNzWzFYzV3ULPZ7GCHNoMycS",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM4zatsUEkF6omzaefba6y6nZZxvLgvVpJ5TqMNDEzYQpDZYnwXV",
1
]
]
},
"memo_key": "STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT",
"json_metadata": "{\"profile\":{\"about\":\"제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt\",\"name\":\"loum\",\"location\":\"Seoul, Korea\"}}",
"posting_json_metadata": "{\"profile\":{\"about\":\"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt \",\"name\":\"loum\"}}",
"proxy": "",
"previous_owner_update": "1970-01-01T00:00:00",
"last_owner_update": "2017-06-22T02:20:54",
"last_account_update": "2019-10-08T13:51:21",
"created": "2016-07-19T02:36:30",
"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": 716,
"can_vote": true,
"voting_manabar": {
"current_mana": 52837389541,
"last_update_time": 1573202859
},
"downvote_manabar": {
"current_mana": 13209347384,
"last_update_time": 1573202859
},
"voting_power": 0,
"balance": "0.035 HIVE",
"savings_balance": "0.000 HIVE",
"hbd_balance": "0.032 HBD",
"hbd_seconds": "0",
"hbd_seconds_last_update": "2019-11-08T08:47:39",
"hbd_last_interest_payment": "2019-11-08T08:47:39",
"savings_hbd_balance": "0.000 HBD",
"savings_hbd_seconds": "0",
"savings_hbd_seconds_last_update": "2017-12-18T06:39:42",
"savings_hbd_last_interest_payment": "2017-12-18T06:39:42",
"savings_withdraw_requests": 0,
"reward_hbd_balance": "0.000 HBD",
"reward_hive_balance": "0.000 HIVE",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_hive": "0.000 HIVE",
"vesting_shares": "52837.389541 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"post_voting_power": "52837.389541 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"pending_transfers": 0,
"curation_rewards": 1193,
"posting_rewards": 1046050,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2019-10-22T07:51:45",
"last_root_post": "2019-10-22T07:51:45",
"last_vote_time": "2018-06-27T02:37:09",
"post_bandwidth": 169418,
"pending_claimed_accounts": 0,
"governance_vote_expiration_ts": "1969-12-31T23:59:59",
"delayed_votes": [],
"open_recurrent_transfers": 0,
"vesting_balance": "0.000 HIVE",
"reputation": 0,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 0
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2022/11/04 20:53:42
2022/11/04 20:53:42
| account | loum |
| Transaction Info | Block #69377015/Virtual Operation 4294967295:2 |
View Raw JSON Data
{
"op": [
"expired_account_notification",
{
"account": "loum"
}
],
"block": 69377015,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 2,
"timestamp": "2022-11-04T20:53:42",
"virtual_op": true,
"trx_in_block": 4294967295
}la-frengoreplied to @loum / re-zkr3j-20201011t184638z2020/10/11 18:46:42
la-frengoreplied to @loum / re-zkr3j-20201011t184638z
2020/10/11 18:46:42
| body | |
| title | |
| author | la-frengo |
| permlink | re-zkr3j-20201011t184638z |
| json metadata | {"app": "beem/0.23.9"} |
| parent author | loum |
| parent permlink | zkr3j |
| Transaction Info | Block #47710866/Trx 31fa967efb5a6d63d90ecbb2a423be778ac61b43 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": " ",
"title": "",
"author": "la-frengo",
"permlink": "re-zkr3j-20201011t184638z",
"json_metadata": "{\"app\": \"beem/0.23.9\"}",
"parent_author": "loum",
"parent_permlink": "zkr3j"
}
],
"block": 47710866,
"trx_id": "31fa967efb5a6d63d90ecbb2a423be778ac61b43",
"op_in_trx": 0,
"timestamp": "2020-10-11T18:46:42",
"virtual_op": false,
"trx_in_block": 9
}loumclaimed reward balance: 0.033 HIVE, 0.041 HP2019/11/08 08:47:42
loumclaimed reward balance: 0.033 HIVE, 0.041 HP
2019/11/08 08:47:42
| account | loum |
| reward hbd | 0.000 HBD |
| reward hive | 0.033 HIVE |
| reward vests | 67.146506 VESTS |
| Transaction Info | Block #37990552/Trx 018301d0f793d4bb8356d73a874f65c0db3d7c11 |
View Raw JSON Data
{
"op": [
"claim_reward_balance",
{
"account": "loum",
"reward_hbd": "0.000 HBD",
"reward_hive": "0.033 HIVE",
"reward_vests": "67.146506 VESTS"
}
],
"block": 37990552,
"trx_id": "018301d0f793d4bb8356d73a874f65c0db3d7c11",
"op_in_trx": 0,
"timestamp": "2019-11-08T08:47:42",
"virtual_op": false,
"trx_in_block": 16
}loumupdated payout for 3y9vyi-utxo-set-sorted-merkle-tree2019/10/29 07:51:45
loumupdated payout for 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/29 07:51:45
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| Transaction Info | Block #37701982/Virtual Operation 4294967295:7 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree"
}
],
"block": 37701982,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 7,
"timestamp": "2019-10-29T07:51:45",
"virtual_op": true,
"trx_in_block": 4294967295
}loumreceived 0.026 HBD reward share for 3y9vyi-utxo-set-sorted-merkle-tree2019/10/29 07:51:45
loumreceived 0.026 HBD reward share for 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/29 07:51:45
| author | loum |
| payout | 0.026 HBD |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| author rewards | 67 |
| total payout value | 0.013 HBD |
| curator payout value | 0.013 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #37701982/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "loum",
"payout": "0.026 HBD",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"author_rewards": 67,
"total_payout_value": "0.013 HBD",
"curator_payout_value": "0.013 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 37701982,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 6,
"timestamp": "2019-10-29T07:51:45",
"virtual_op": true,
"trx_in_block": 4294967295
}loumreceived 0.033 HIVE, 0.041 HP author reward for @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/29 07:51:45
loumreceived 0.033 HIVE, 0.041 HP author reward for @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/29 07:51:45
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| hbd payout | 0.000 HBD |
| hive payout | 0.033 HIVE |
| vesting payout | 67.146506 VESTS |
| payout must be claimed | true |
| curators vesting payout | 128.368321 VESTS |
| Transaction Info | Block #37701982/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"hbd_payout": "0.000 HBD",
"hive_payout": "0.033 HIVE",
"vesting_payout": "67.146506 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "128.368321 VESTS"
}
],
"block": 37701982,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 5,
"timestamp": "2019-10-29T07:51:45",
"virtual_op": true,
"trx_in_block": 4294967295
}nnaraoheffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/24 07:36:48
nnaraoheffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/24 07:36:48
| voter | nnaraoh |
| author | loum |
| weight | 67646 |
| rshares | 138269279346 |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| pending payout | 0.027 HBD |
| total vote weight | 76749 |
| Transaction Info | Block #37557974/Trx d3eae434db011c425ed9df8fb1cfbfc889638054 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "nnaraoh",
"author": "loum",
"weight": 67646,
"rshares": 138269279346,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"pending_payout": "0.027 HBD",
"total_vote_weight": 76749
}
],
"block": 37557974,
"trx_id": "d3eae434db011c425ed9df8fb1cfbfc889638054",
"op_in_trx": 1,
"timestamp": "2019-10-24T07:36:48",
"virtual_op": true,
"trx_in_block": 18
}nnaraohupvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/24 07:36:48
nnaraohupvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/24 07:36:48
| voter | nnaraoh |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| Transaction Info | Block #37557974/Trx d3eae434db011c425ed9df8fb1cfbfc889638054 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "nnaraoh",
"author": "loum",
"weight": 10000,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree"
}
],
"block": 37557974,
"trx_id": "d3eae434db011c425ed9df8fb1cfbfc889638054",
"op_in_trx": 0,
"timestamp": "2019-10-24T07:36:48",
"virtual_op": false,
"trx_in_block": 18
}loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:42:30
loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:42:30
| body | @@ -7,16 +7,22 @@ nter%3E%EA%B9%80%EC%84%B1%EC%9D%BC +(Loum) %3C/center @@ -35,16 +35,20 @@ %0A/* %EC%9D%B4 %EA%B8%80%EC%9D%80 + %EC%A0%9C%EA%B0%80 2017%EB%85%84 7 |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["utxo","set","sorted","merkle","tree"],"image":["https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png","https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png","https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | bitcoin |
| Transaction Info | Block #37501796/Trx 4581137552cfeaab6373e7ff078886e378190507 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -7,16 +7,22 @@\n nter%3E%EA%B9%80%EC%84%B1%EC%9D%BC\n+(Loum)\n %3C/center\n@@ -35,16 +35,20 @@\n %0A/* %EC%9D%B4 %EA%B8%80%EC%9D%80\n+ %EC%A0%9C%EA%B0%80 \n 2017%EB%85%84 7\n",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"utxo\",\"set\",\"sorted\",\"merkle\",\"tree\"],\"image\":[\"https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png\",\"https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png\",\"https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "bitcoin"
}
],
"block": 37501796,
"trx_id": "4581137552cfeaab6373e7ff078886e378190507",
"op_in_trx": 0,
"timestamp": "2019-10-22T08:42:30",
"virtual_op": false,
"trx_in_block": 27
}loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:40:24
loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:40:24
| body | @@ -11,14 +11,8 @@ %3E%EA%B9%80%EC%84%B1%EC%9D%BC -(Loum) %3C/ce @@ -59,17 +59,17 @@ , %EC%9D%BC%EB%B6%80 %EB%82%B4%EC%9A%A9%EC%9D%80 -%EB%8A%94 + %EC%9D%B4 %EB%82%A0%EC%A7%9C%EB%A5%BC %EA%B8%B0%EC%A4%80 |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["utxo","set","sorted","merkle","tree"],"image":["https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png","https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png","https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | bitcoin |
| Transaction Info | Block #37501754/Trx 5c9bc34d33759df4bbf7d545618c87fce6423995 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -11,14 +11,8 @@\n %3E%EA%B9%80%EC%84%B1%EC%9D%BC\n-(Loum)\n %3C/ce\n@@ -59,17 +59,17 @@\n , %EC%9D%BC%EB%B6%80 %EB%82%B4%EC%9A%A9%EC%9D%80\n-%EB%8A%94\n+ \n %EC%9D%B4 %EB%82%A0%EC%A7%9C%EB%A5%BC %EA%B8%B0%EC%A4%80\n",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"utxo\",\"set\",\"sorted\",\"merkle\",\"tree\"],\"image\":[\"https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png\",\"https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png\",\"https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "bitcoin"
}
],
"block": 37501754,
"trx_id": "5c9bc34d33759df4bbf7d545618c87fce6423995",
"op_in_trx": 0,
"timestamp": "2019-10-22T08:40:24",
"virtual_op": false,
"trx_in_block": 6
}jonghun98effective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:24:24
jonghun98effective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:24:24
| voter | jonghun98 |
| author | loum |
| weight | 330 (3.30%) |
| rshares | 664204643 |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| pending payout | 0.003 HBD |
| total vote weight | 9103 |
| Transaction Info | Block #37501435/Trx d3270a7ff95b8ab4614c46fbf08fd0d007d440fe |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "jonghun98",
"author": "loum",
"weight": 330,
"rshares": 664204643,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"pending_payout": "0.003 HBD",
"total_vote_weight": 9103
}
],
"block": 37501435,
"trx_id": "d3270a7ff95b8ab4614c46fbf08fd0d007d440fe",
"op_in_trx": 1,
"timestamp": "2019-10-22T08:24:24",
"virtual_op": true,
"trx_in_block": 24
}jonghun98upvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:24:24
jonghun98upvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:24:24
| voter | jonghun98 |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| Transaction Info | Block #37501435/Trx d3270a7ff95b8ab4614c46fbf08fd0d007d440fe |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "jonghun98",
"author": "loum",
"weight": 10000,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree"
}
],
"block": 37501435,
"trx_id": "d3270a7ff95b8ab4614c46fbf08fd0d007d440fe",
"op_in_trx": 0,
"timestamp": "2019-10-22T08:24:24",
"virtual_op": false,
"trx_in_block": 24
}yffeffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:02:24
yffeffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:02:24
| voter | yff |
| author | loum |
| weight | 5163 (51.63%) |
| rshares | 10367425682 |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| pending payout | 0.003 HBD |
| total vote weight | 8773 |
| Transaction Info | Block #37500996/Trx c2fa873b43c3c354b5afdd8aa1690308835efc61 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "yff",
"author": "loum",
"weight": 5163,
"rshares": 10367425682,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"pending_payout": "0.003 HBD",
"total_vote_weight": 8773
}
],
"block": 37500996,
"trx_id": "c2fa873b43c3c354b5afdd8aa1690308835efc61",
"op_in_trx": 1,
"timestamp": "2019-10-22T08:02:24",
"virtual_op": true,
"trx_in_block": 41
}yffupvoted (50.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 08:02:24
yffupvoted (50.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 08:02:24
| voter | yff |
| author | loum |
| weight | 5000 (50.00%) |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| Transaction Info | Block #37500996/Trx c2fa873b43c3c354b5afdd8aa1690308835efc61 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "yff",
"author": "loum",
"weight": 5000,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree"
}
],
"block": 37500996,
"trx_id": "c2fa873b43c3c354b5afdd8aa1690308835efc61",
"op_in_trx": 0,
"timestamp": "2019-10-22T08:02:24",
"virtual_op": false,
"trx_in_block": 41
}statsexperteffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 07:55:27
statsexperteffective vote applied for @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 07:55:27
| voter | statsexpert |
| author | loum |
| weight | 2635 (26.35%) |
| rshares | 7235320822 |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| pending payout | 0.001 HBD |
| total vote weight | 3610 |
| Transaction Info | Block #37500857/Trx 63fd927435bedc880f80042e0ce2f4bfccfb2276 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "statsexpert",
"author": "loum",
"weight": 2635,
"rshares": 7235320822,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"pending_payout": "0.001 HBD",
"total_vote_weight": 3610
}
],
"block": 37500857,
"trx_id": "63fd927435bedc880f80042e0ce2f4bfccfb2276",
"op_in_trx": 1,
"timestamp": "2019-10-22T07:55:27",
"virtual_op": true,
"trx_in_block": 16
}statsexpertupvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 07:55:27
statsexpertupvoted (100.00%) @loum / 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 07:55:27
| voter | statsexpert |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| Transaction Info | Block #37500857/Trx 63fd927435bedc880f80042e0ce2f4bfccfb2276 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "statsexpert",
"author": "loum",
"weight": 10000,
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree"
}
],
"block": 37500857,
"trx_id": "63fd927435bedc880f80042e0ce2f4bfccfb2276",
"op_in_trx": 0,
"timestamp": "2019-10-22T07:55:27",
"virtual_op": false,
"trx_in_block": 16
}loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 07:54:54
loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 07:54:54
| body | @@ -7,16 +7,22 @@ nter%3E%EA%B9%80%EC%84%B1%EC%9D%BC +(Loum) %3C/center |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["utxo","set","sorted","merkle","tree"],"image":["https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png","https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png","https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | bitcoin |
| Transaction Info | Block #37500846/Trx 9665fe7e6631146948cdee3af295f01dc99371b4 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -7,16 +7,22 @@\n nter%3E%EA%B9%80%EC%84%B1%EC%9D%BC\n+(Loum)\n %3C/center\n",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"utxo\",\"set\",\"sorted\",\"merkle\",\"tree\"],\"image\":[\"https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png\",\"https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png\",\"https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "bitcoin"
}
],
"block": 37500846,
"trx_id": "9665fe7e6631146948cdee3af295f01dc99371b4",
"op_in_trx": 0,
"timestamp": "2019-10-22T07:54:54",
"virtual_op": false,
"trx_in_block": 6
}loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree2019/10/22 07:51:48
loumpublished a new post: 3y9vyi-utxo-set-sorted-merkle-tree
2019/10/22 07:51:48
| body | <b><center>김성일</center></b> /* 이 글은 2017년 7월 경에 작성했던 것이라서, 일부 내용은는이 날짜를 기준으로 작성되었다 */ Abstract. 비트코인은 다른 노드들을 믿지 못하는 비신뢰 특성 때문에, 새로 블록생성에 참여하는 새 노드는 초기 블록체인 동기화(Initial Blockchain Download, IBD)를 통해 전체 블록체인을 전송받고 이를 검증해야 한다. 하지만, 이 방법은 전체 블록체인 데이터를 다운받아야 하기 때문에 여러 가지 문제를 발생시킨다. 이 논문은 이를 해결하기 위한 방법 중에 새 노드가 전체 블록체인 대신에, 거래의 전체 상태인 UTXO set를 다운로드받는 UTXO 확정(UTXO commitments) 방법을 살펴본다. 하지만 이 방법은 현재 여러 문제로 적용되지 못하고 있다. 이를 해결하기 위해, 우리는 기존 트리를 이용하는 새로운 정렬된 머클트리(sorted merkle tree)를 제안한다. 이것은 UTXO set을 머클트리로 만들 때 기존의 머클트리에 비해 노드의 개수를 약 1/2로 줄일 수 있다. <b>1. 서론</b> 비트코인(Bitcoin)과 같은 블록체인 기술은 신뢰하는 중앙기관이 없이 분산된 다수의 노드들이 피어-투-피어(peer-to-peer, p2p) 네트워크를 구성하여 데이터베이스(DB)인 블록체인을 관리하는 DB 기술이다.[1] 또한 이것은 각 노드들이 동일한 블록체인을 보관하도록 복제하는 복제 시스템(replication system)이다. P2P 네트워크를 구성하는 노드들은 작업증명(proof-of-work, PoW) 또는 지분증명(proof-of-stake, PoS) 합의 알고리즘을 통해서 어느 노드가 새로운 블록을 생성할지를 결정한다. 즉, 비트코인 네트워크에는 합의 알고리즘을 통해 노드들이 하나의 주체인(main chain)을 유지하여 이중지출 방지한다. 따라서 합의 알고리즘이 이중지출(doubling spending)을 막는 핵심적인 역할을 하고, 블록체인 자체는 추가 전용 데이터베이스(append-only database)에 불과하다. 블록체인은 추가 전용 DB이기 때문에, 그 크기가 선형적으로 계속 늘어날 수밖에 없다. 예로, 2017년 5월 20일(이하, ‘현재’라고 칭함)에 비트코인의 블록체인 사이즈는 116 GiB이었고, 최근 1년 동안 블록체인 사이즈는 47 GiB가 증가했다. 현재 비트코인 코어(bitcoin core)에서 블록 사이즈는 1 MiB로 고정되어 있고,[2] 평균적으로 10분에 한 번씩 블록을 생성하므로 1년 동안 추가될 수 있는 블록 사이즈는 1 MiB * 6 * 24 * 365 , 즉52.56 GiB이다. 현재 비트코인 네트워크의 예상 최대 거래 처리량은 초당 7거래로 알려져 있지만[3], 현재 평균적으로 약 3~4 거래를 처리하고 있다. 이에 반해서 비자카드에서 거래의 평균 초당 처리량은 약 2,000 거래이며, 최대(peak) 처리량은 초당 약 56,000 거래로 알려졌다.[3] 따라서 비트코인의 현재 거래 처리량은 매우 작다. 이 때문에, 만일 비트코인의 초당 거래 처리량이 크게 증가한다면, 블록체인의 사이즈 문제는 더욱 심각해질 것이다. 또한 블록체인은 추가 전용 DB이기 때문에 그 크기가 너무 빠르게 증가하는 피할 수 없는 문제를 가진다. <b>2. 비트코인에서 거래 및 거래의 전체 상태</b> 비트코인에서 거래(transaction)는 하나 이상의 입력과 출력(one or more of inputs and outputs)으로 구성된다. 비트코인에서 거래의 출력(outputs)은 단 한 번만 입력(input)에서 소비될 수 있기 때문에, 소비되지 않은 거래 출력(unspent transaction outputs, UTXOs)과 이미 소비된 거래 출력(spent transaction outputs, STXOs)으로 구분된다. 구체적으로, 입력은 소유자가 소비할 수 있는 UTXO와 디지털 서명과 공개키로 구성되고, 출력은 새로운 UTXO를 생성하기 위한 지갑주소와 이체할 코인 개수로 이루어진다. 따라서 거래가 유효하려면, 입력에 STXO가 아닌 UTXO만 사용하여 소비해야 한다.[4] 결국 비트코인에서 거래는 UTXO를 소비하여 STXO로 만들고 새로운 UTXO를 생성하는 과정이다.[4] 비트코인 지갑은 일반적으로 거래의 입력과 출력을 디지털 서명하여 네트워크에 전파한다. 즉 비트코인은 소유권의 증거로 디지털 서명을 제공하는 서명 기반의 소유권 이전 시스템이다. 그림 1은 비트코인의 주요 DB인 맴풀(mempool), 블록체인 그리고 UTXO set을 보여준다. 여기서, 맴풀은 블록에 기록되기를 기다리는 미승인 거래(unconfirmed Tx)를 저장하는 DB이고, 이 때문에 특정 거래가 블록에 기록이 되면 이 거래는 맴풀에서 삭제된다. UTXO set는 미래에 사용할 수 있는 출력인 모든 UTXO를 모아놓은 DB이고, 이 때문에 새 블록이 전파될 때마다 이것의 내용이 바뀐다. 구체적으로, 새 블록이 전파될 때마다 이 블록에 포함된 거래에 의해서 STXO, 즉 소비한 UTXO를 UTXO set에서 제거하고, 새로 발생한 UTXO를 이것에 추가하여 내용을 업데이트한다. 따라서 UTXO set은 전체 계정 상태와 같이 거래의 전체 상태를 관리한다. 여기서 중요한 것은 “공개 블록체인(public blockchain)의 비신뢰 특성 때문에, 분산된 노드들이 블록체인을 통해서 모든 거래를 독립적으로 검증하여 거래의 전체 상태인 UTXO set를 완성하는 것이다.”는 것이다. 따라서 비트코인은 노드 관점에서 블록체인을 복제하여 이를 동기화하고, 이를 통해서 모든 거래를 독립적으로 검증하여 전체 상태인 UTXO 세트를 완성하는 것이다. 이는 비트코인의 비신뢰(trustless) 특성 때문이다. 결국 비트코인의 모든 상태는 UTXO set와 맴풀이 가지고 있다. 이때 UTXO 세트는 전체 상태인 모든 UTXO를 관리하고, 맴풀은 블록체인에 기록되기를 기다리는 모든 미승인 거래(unconfirmed Tx)를 관리한다. <center>https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png</center> <center>그림1. 비트코인의 주요 데이터베이스. 비트코인에서 UTXO set은 거래의 전체 상태를 가진 DB이고, 블록체인은 추가전용의 로그 DB이다. 이 둘은 블록에 포함된 승인된 거래(confirmed Tx)를 관리한다. 맴풀은 블록에 포함되기를 기다리는 미승인 거래들(unconfirmed Tx)을 관리하는 DB이다.</center> 비트코인은 분산된 비신뢰 합의 알고리즘(distributed trustless consensus algorithm)이기 때문에 노드는 다른 노드들을 믿을 수 없다.[5] 이 때문에 노드 자신이 전체 블록체인을 독립적으로 검증해야 한다. 이것은 블록이 디지털 서명이 포함된 거래와 다른 블록과 체인으로 연결되어 있기 때문에 가능한 것이다. 이 때문에, 새 노드가 비트코인 네트워크에 처음 접속하면, 그는 전체 블록체인을 반드시 다운로드 받으며, 이를 초기 블록체인 동기화(Initial Block Download, IBD)라고 부른다[6]. 즉 IBD는 새 노드가 비신뢰 네트워크에서 독립성을 유지하기 위해 블록체인 전체를 다운받아 모든 거래를 검증하고, 이를 통해서 올바른 UTXO 세트를 독립적으로 완성하기 위한 목적으로 사용한다. 참고로, 비트코인 코어(bitcoin core) 0.10.0은 노드가 144개의 블록, 즉 약 24시간 이상 동안 네트워크에 접속하지 못하면, IBD를 다시 시작하여 블록체인을 동기화시킨다[6]. <b>3. 최근의 블록체인만 포함한 부분 삭제 노드(pruned node)</b> 부분 삭제 노드(pruned node)는 전체 블록체인을 저장하지 않는 노드를 말한다.[7] 구체적으로 말하면, 새 노드가 전체 블록체인을 다운받고 이를 검증한 후, UTXO set을 완성한다. 그 후 이 노드는 특정 개수의 최근 블록체인만을 가지고 있고, 그전의 블록체인을 삭제한 부분 삭제 노드(pruned node)가 될 수 있다[7]. 이 노드는 전체 블록체인을 검증하여 거래의 상태인 UTXO set를 완성했기 때문에, 전체 블록체인 대신에 최신의 일부 블록체인만을 저장하고 있어도 올바로 동작한다. 따라서 만일 자신의 노드만 생각한다면, 노드가 일단 UTXO set을 완성한 후에 전체 블록체인을 가지고 있을 필요는 없다. 이 노드는 단지 블록체인에 포크가 발생하였을 경우를 대비하여 최근의 몇 개 블록만 저장해도 된다.[8]. 노드들이 전체 블록체인을 가지고 있는 목적은 새 노드들이 블록생산(채굴)에 참여할 수 있도록 이들에게 전체 블록체인을 제공하는 위한 것이다[9]. <center>https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png</center> <center>그림 2. (a) 전체 헤더부와 거래부를 저장하는 기존 블록체인, (b) 특정 개수의 최근 블록체인을 저장하는 부분 삭제 블록체인(pruned blockchain). 여기서, 부분 삭제 블록체인은 노드가 일정한 개수의 최근 블록을 가지고 있고, 그 이외의 블록은 삭제한다.</center> 그림 2(a)는 전체 블록체인을 가지고 있는 기존 블록체인(conventional blockchain)을 보여준다. 여기서 h와 t는 블록체인의 헤더부(header part)와 거래부(transaction part)를 각각 나타내고, 아래 첨자는 블록의 생성순서를 나타낸다. 기존 블록체인은 그림 2(a)과 같이 최초 블록(genesis block)부터 최근 블록까지 전체 블록체인을 포함한다. 그림에서 화살표는 이전 블록의 블록해시를 현재 블록에 포함시켜서 체인으로 연결시킨 것을 나타낸다. 만일 새 노드가 비트코인 네트워크에 참여한다면, 이 노드는 이 그림 2(a)과 같이 전체 블록체인을 다운로드받기 위해 IBD를 진행해야 한다. 그리고 그림 2(b)는 특정 개수의 최근 블록체인을 저장한 부분 삭제 블록체인(pruned blockchain)을 보여준다. 부분 삭제 노드는 그림 2(b)와 같이 특정 개수의 최신 블록만을 가지고 있다.[7] 그림 2(b)의 경우, 이 노드는 m번째 블록부터 최신 블록인 n번째 블록을 포함하고, n — m은 일정한 상수이다. 노드는 전체 블록체인을 저장하여 검증하고 UTXO set을 완성한 후, 부분 삭제 노드가 될 수 있다. 하지만 이 경우, 이 노드는 새 노드가 네트워크에 참여하도록 전체 블록체인을 제공할 수는 없다. <b>4. 초기 UTXO 다운로드(Initial UTXO Download) 방법</b> 비트코인에서 거래의 전체 상태인 UTXO set은 채굴의 편의를 위해서 메모리에 저장된다. 전체 UTXO set의 크기는 2017년 5월 20일 현재 약 1.9 GiB이었고, 당시 블록체인 크기의 약 1.6%에 불과할 정도로 작다.[10] 블록체인이 거래에 대한 추가전용 DB이기 때문에, 이 비율은 앞으로 점점 작아질 것이다. 이런 이유 때문에, 새 노드가 비트코인 네트워크에 처음 접속하여 IBD를 통해 전체 블록체인을 전송받는 것보다 전체 UTXO set을 전송받는 것이 더 좋은 방법이다. 즉, 만일 새 노드가 초기 동기화 동안 올바른 전체 UTXO set를 이웃 노드로부터 다운받을 수 있다면, 전체 블록체인을 다운받지 않아도 된다. 하지만, 공개 블록체인(public blockchain)에서 노드들은 서로를 믿지 못하는 비신뢰 특성 때문에, 새 노드가 이웃 노드들로부터 UTXO 세트를 직접 다운받는 것은 안전하지 않다. 왜냐하면, 새 노드가 다운로드 받은 UTXO set이 올바른 것인지를 판단할 수 없기 때문이다. 이를 해결하기 위해서, UTXO 확정 (UTXO commitments) 방법이 이미 제안되었고, 이를 경량 지갑(light wallet)에 적용하려는 여러 가지 제안들이 있었다.[11–13] 이것은 전체 UTXO set를 머클트리(merkle tree)로 구성하고, 이것의 루트 해시를 블록에 기록하는 방법이다. 그리고 새 노드는 전체 UTXO set을 전송받고 이를 머클트리로 구성하여 이것의 루트 해시를 구하고 블록에 기록된 루트해시를 비교하여 안전성을 검증한다. 즉 UTXO 확정은 p2p 네트워크에서 다른 노드로부터 전파 받은 UTXO set이 올바른지를 확인하는 데 사용할 수 있다. 이것을 초기 UTXO 동기화(initial UTXO download, IUD)라 부르자. IUD의 장점은 다음과 같다. 1) IUD는 기존의 IBD를 통해 전체 블록체인을 다운받는 방법보다 전송받는 데이터가 매우 작다. 이 때문에 새 노드가 매우 빨리 초기 동기화를 시킬 수 있다. 2) 기존의 IBD는 서명의 검증에 많은 CPU 자원이 필요하다. 하지만, IUD는 모든 블록을 검증하는 대신에, 전체 UTXO set을 검증하기 때문에 검증을 위한 계산량 및 시간을 크게 줄일 수 있다. 그렇지만 IUD는 노드의 독립성을 일부 포기한 것으로 보일 수 있다. 왜냐하면 기존의 IBD는 비신뢰 특성 때문에 새 노드가 전체 블록체인을 전송받아 이것에 포함된 모든 거래를 독립적으로 검증하기 때문이다. 하지만 비트코인에서 IUD가 안전한 이유는 공격자가 최근의 블록체인을 새로 만들 때 상당한 비용이 들기 때문이다. 즉, 새 노드가 IUD를 통해 UTXO set를 전송받은 후, 그가 몇 개의 최신 블록을 연속으로 검증하면 안전한 UTXO 세트를 전송받았는지 쉽게 검증할 수 있다. 그리고 비트코인 지갑은 거래가 포함된 블록 이후 6개의 새 블록이 생성되면 이체가 가능하다. 이와 유사하게, 예로 들면, 새 노드는 IUD 동안 먼저 최신 블록과 UTXO set을 전송받고 이를 검증한 후, 연속으로 5개의 새로운 블록을 전파 받아서 이 UTXO set를 계속 검증한다. 이 과정을 모두 통과할 경우 새 노드는 이 UTXO set을 사용할 수 있다. 블록에 UTXO set의 루트 해시를 기록하는 방법은 아래와 같을 수 있다. 예를 들면, 노드들은 기존 방법대로 난이도 조건을 만족하는 블록해시를 먼저 찾은 후에, UTXO set의 머클트리를 구성하여 그것의 루트 해시를 계산한다. 그리고 기존 블록과 동일하게 블록을 만들고, 추가로 머클트리의 루트 해시를 블록에 기록한다. 또한 이 루트 해시와 블록해시로 새로운 해시를 만들어 이를 블록에 추가할 수 있다. <b>5. 기존 트리의 정렬을 이용한 정렬된 머클트리(sorted merkle tree)</b> 그림 3(a)에 보인 기존 머클트리를 먼저 살펴보자. 이 그림의 기존 머클트리는 이진트리(binary tree)이고, 데이터인 UTXO가 모두 말단 노드(leaf nodes)에 위치한다. 그리고 이것의 내부노드(interior nodes)는 두 자식 노드를 연결하여 계산한 해시로 구성하고 루트 해시와 연결된다.[14] 그림 3에서 u와 h는 각각 UTXO와 해시(hash)를 나타내고, 아래첨자는 이들의 이름을 가리킨다. 내부노드의 해시를 구하는 예를 들면, 2번 노드의 해시는 h2 = hf(h4 || h5)로 계산한다. 이때, hf는 해시함수이고, ||는 연결(concatenation) 연산자이다. 따라서 기존 머클트리에서 루트 노드의 루트 해시(h1)는 단말노드에 위치한 데이터인 모든 UTXO에 의존하게 된다. 이 때문에, 만일 데이터가 하나라도 바뀌면, 해당 노드로부터 루트 노드로 이어지는 노드들의 해시가 바뀌고 결국 루트 해시(h1)가 바뀐다. <center>https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png</center> <center>그림 3. (a) 기존 머클트리. 머클트리는 말단 노드에 모든 UTXO가 위치하고, 내부 노드는 두 개의 자식 노드의 해시로 구성된 이진트리이다. (b) 우리가 제안한 머클트리. 머클트리는 모든 UTXO를 기존의 이진트리로 정렬하고, 그 후에 노드의 해시를 구한다. 이때, 내부 노드는 해시를 포함한다. 이 경우, 내부노드에 UTXO를 포함하기 때문에 머클트리의 노드의 개수는 기존 머클트리 대비 약 1/2로 작아진다.</center> 2017년 5월 20일 현재 UTXO set의 크기는 약 1.9 GiB이고, 이것은 약 5천4백만 개의 UTXO를 포함한다.[15] 이것은 앞으로 더 증가할 수밖에 없다. 그리고 전체 UTXO set를 머클트리로 구성하고 이것의 루트 해시를 구하는 것은 많은 해시 계산이 필요하다. 하지만 비트코인에서 새 블록이 생성될 때마다, UTXO set에 새로 생성된 UTXO를 삽입하고 소비한 UTXO를 삭제한다. 새 블록마다, UTXO set의 머클트리를 업데이트하고 내부노드의 해시를 다시 계산하는 것은 너무 많은 해시 계산이 발생하는 등의 문제가 있었다. 이런 이유로 아직까지 비트코인에 IUD를 적용하지 못하고 있다[13]. 더불어 기존 머클트리는 모든 데이터, 즉 전체 UTXO가 단말 노드에 위치하기 때문에, UTXO가 정렬되어 있지 않는다. 이 때문에, 기존 머클트리는 특정 데이터의 비존재 증명에 이용할 수 없었다.[16] 이를 해결하기 위해, 우리는 기존 이진트리를 이용한 정렬된 머클트리(sorted merkle tree)를 제안한다. 그림 1(b)는 우리가 제안한 새로운 머클트리를 보여준다. 이 머클트리는 기존의 이진트리를 이용하여 데이터인 UTXO를 모든 노드에 정렬시키고, 그 후에 내부노드의 해시를 계산한다. 이 때문에, 우리가 제안한 머클트리는 AVL 트리 또는 레드-블랙 트리(red-black tree) 등과 같은 시간 복잡도가 O(log n)인 균형 이진트리(balanced binary tree) 등을 사용할 수 있다. 구체적으로, 우리가 제안한 머클트리는 새 블록이 생성될 때마다 먼저 기존 UTXO의 이진트리에 사용된 UTXO 및 새로 생성된 UTXO를 삭제 및 삽입하고, 그 후에 해당하는 노드의 해시를 부가적으로 계산한다. 구체적으로, 그림 3(b)에서 말단노드의 해시는 h2와 h3이고, 이들은 hself = hf(uleft || uright || uself)로 구한다. 예를 들면, 2번 노드의 해시(h2)는 u4, u5와 u2를 연결하여 구한다. 그리고 만일 자식 노드에 해시가 존재할 경우, 이 노드의 해시는 자식노드의 해시와 자신의 UTXO를 연결하여 구한다. 예를 들면, 루트 해시(h1)는 h2, h3와 u1을 연결하여 구한다. 이 머클트리의 장점은 다음과 같다. 첫 번째, 이것은 내부노드에 데이터를 저장하고 있기 때문에 기존 머클트리에 비해서 이진트리의 노드 개수를 약 1/2로 줄인다. 이 때문에 기존 머클트리에 비해 해시의 개수가 약 절반으로 줄어든다. 즉 데이터의 업데이트 시에 해시 계산의 개수가 줄어든다. 두 번째, 제안한 머클트리는 기존 이진트리로 데이터인 UTXO를 먼저 정렬하고, 이 때문에 이것은 특정 UTXO의 존재 여부를 쉽게 증명할 수 있다. 따라서 경량 지갑에서 특정 거래의 존재 여부에 대한 검증이 가능하다. 우리의 머클트리에서 데이터의 비존재 증명은 비존재하는 데이터의 양 옆에 있는 데이터가 바로 이웃하고 있는지를 증명하면 가능하다. [16] 참고로, 경량지갑에서 거래의 존재 증명은 아래와 같이 확인할 수 있다. 예를 들면, 그림 3(b)의 제안한 머클트리에서 u2의 검증은 u4, u5, u2, h3가 필요하다. 이에 비해 그림 3(a)의 기존 머클트리에서 u2의 검증은 u1, u2, h5, h3가 필요하다. 더불어, 기존 머클트리는 각 데이터, 즉 UTXO를 검증할 때, 단 하나의 이웃 데이터를 포함한다. 하지만 우리가 제안한 머클트리는 내부 노드에 데이터를 포함하기 때문에 각 데이터를 검증할 때, 기존 머클트리에 비해서 더 많은 데이터를 포함해야 한다. 하지만, 비트코인은 공개 블록체인이므로, 특정 거래의 검증 과정에서 특정 utxo를 노출하는 것은 전혀 문제가 되지 않는다. 그리고 이더리움은 UTXO 대신에 계정(accounts)을 가지고 있고, 머클 페트리샤 트리(merkle patricia tree)에 저장한다.[17] 비슷하게 코스모스 코인도 계정을 가지고 있고, 이를 머클 IAVL+ 트리(merkle IAVL+ tree)에 저장된다.[18] 하지만, 이들도 모두 단말노드에 계정 데이터를 저장한다. 따라서 이더리움과 같이 계정의 전체 상태를 가진 암호화폐에도 우리가 제안한 정렬된 머클트리 구조를 적용할 수 있다. <b>6. 결론</b> 본 논문은 비트코인에서 초기 동기화 시에 UTXO 확정(commitments)을 이용하기 위해, 머클트리의 노드의 개수를 약 1/2로 줄인 정렬된 머클트리(sorted merkle tree)를 제안한다. 이 머클트리를 사용하면, 매 블록마다 삭제 및 추가되는 UTXO에 때문에 발생하는 머클트리에서 변화된 전체 해시 계산 개수를 줄일 수 있다. 이 때문에 전체 블록체인을 다운받는 초기 블록 다운로드(IBD) 대신에, UTXO set을 다운로드받는 초기 UTXO 다운로드(IUD)를 사용할 수 있을 것으로 추측한다. 결론적으로 우리는 IUD를 사용할 수 있도록, 머클트리에서 노드의 개수를 기존 머클트리에 비해서 약 1/2로 줄인 새로운 머클트리 구조를 제안한다. <b>References</b> [1] Satoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System.” https://bitcoin.org/bitcoin.pdf (2009) [2] No Auther, “Bitcoin Core.” https://en.wikipedia.org/wiki/Bitcoin_Core (accessed 3 April 2018) [3] No Auther, “Scalability.” Bitcoin Wikipedia https://en.bitcoin.it/wiki/Scalability (accessed 3 April 2018) [4] No Auther, “Block Chain Overview.” https://bitcoin.org/en/developer-guide#block-chain-overview [5] Aleksandr Bulkin, “Explaining blockchain — how proof of work enables trustless consensus.” https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845 [6] No Auther, “Initial Block Download.” https://bitcoin.org/en/developer-guide#initial-block-download [7] No Auther, “Block file pruning.” https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning [8] No Auther, ”Chain Reorganization.” https://en.bitcoin.it/wiki/Chain_Reorganization [9] No Auther, “Full Node.” https://bitcoin.org/en/developer-guide#full-node [10] No Auther. “Unspent transaction output set.” Statoshi.info http://statoshi.info/dashboard/db/unspent-transaction-output-set (accessed 5 April 2017) [11] Andrew Miller. “Storing UTXOs in a Balanced Merkle Tree.” Bitcointalk https://bitcointalk.org/index.php?topic=101734.0 [12] No Auther. “Pettycoin Revisted Part I: Utxo Commitments.” http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html [13] Peter Todd. “Making UTXO Set Growth Irrelevant With Low-Latency Delayed TXO Commitments.” https://petertodd.org/2016/delayed-txo-commitments [14] No Auther. “Merkle tree.” https://en.wikipedia.org/wiki/Merkle_tree [15] No Auther. “Number of Unspent Transaction Outputs.” https://blockchain.info/charts/utxo-count?timespan=all [16] No Auther. “sorted-merkle-tree-issue693.” https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0 [17] Gavin Wood. “Ethereum: A secure decentralized generalized transaction ledger” No Publisher (2014) http://gavwood.com/paper.pdf [18] Jae Kwon and Ethan Buchman. “Cosmos whitepaper.” Cosmos https://cosmos.network/whitepaper (accessed 3 April 2018) |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | 3y9vyi-utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["bitcoin","utxo","set","sorted","merkle","tree"],"image":["https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png","https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png","https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | bitcoin |
| Transaction Info | Block #37500784/Trx 20391e913c565b3f40fcb64cd9280140015bdd64 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "<b><center>김성일</center></b>\n\n/* 이 글은 2017년 7월 경에 작성했던 것이라서, 일부 내용은는이 날짜를 기준으로 작성되었다 */\n\nAbstract. 비트코인은 다른 노드들을 믿지 못하는 비신뢰 특성 때문에, 새로 블록생성에 참여하는 새 노드는 초기 블록체인 동기화(Initial Blockchain Download, IBD)를 통해 전체 블록체인을 전송받고 이를 검증해야 한다. 하지만, 이 방법은 전체 블록체인 데이터를 다운받아야 하기 때문에 여러 가지 문제를 발생시킨다. 이 논문은 이를 해결하기 위한 방법 중에 새 노드가 전체 블록체인 대신에, 거래의 전체 상태인 UTXO set를 다운로드받는 UTXO 확정(UTXO commitments) 방법을 살펴본다. 하지만 이 방법은 현재 여러 문제로 적용되지 못하고 있다. 이를 해결하기 위해, 우리는 기존 트리를 이용하는 새로운 정렬된 머클트리(sorted merkle tree)를 제안한다. 이것은 UTXO set을 머클트리로 만들 때 기존의 머클트리에 비해 노드의 개수를 약 1/2로 줄일 수 있다.\n\n\n<b>1. 서론</b>\n비트코인(Bitcoin)과 같은 블록체인 기술은 신뢰하는 중앙기관이 없이 분산된 다수의 노드들이 피어-투-피어(peer-to-peer, p2p) 네트워크를 구성하여 데이터베이스(DB)인 블록체인을 관리하는 DB 기술이다.[1] 또한 이것은 각 노드들이 동일한 블록체인을 보관하도록 복제하는 복제 시스템(replication system)이다. P2P 네트워크를 구성하는 노드들은 작업증명(proof-of-work, PoW) 또는 지분증명(proof-of-stake, PoS) 합의 알고리즘을 통해서 어느 노드가 새로운 블록을 생성할지를 결정한다. 즉, 비트코인 네트워크에는 합의 알고리즘을 통해 노드들이 하나의 주체인(main chain)을 유지하여 이중지출 방지한다. 따라서 합의 알고리즘이 이중지출(doubling spending)을 막는 핵심적인 역할을 하고, 블록체인 자체는 추가 전용 데이터베이스(append-only database)에 불과하다.\n\n블록체인은 추가 전용 DB이기 때문에, 그 크기가 선형적으로 계속 늘어날 수밖에 없다. 예로, 2017년 5월 20일(이하, ‘현재’라고 칭함)에 비트코인의 블록체인 사이즈는 116 GiB이었고, 최근 1년 동안 블록체인 사이즈는 47 GiB가 증가했다. 현재 비트코인 코어(bitcoin core)에서 블록 사이즈는 1 MiB로 고정되어 있고,[2] 평균적으로 10분에 한 번씩 블록을 생성하므로 1년 동안 추가될 수 있는 블록 사이즈는 1 MiB * 6 * 24 * 365 , 즉52.56 GiB이다. 현재 비트코인 네트워크의 예상 최대 거래 처리량은 초당 7거래로 알려져 있지만[3], 현재 평균적으로 약 3~4 거래를 처리하고 있다. 이에 반해서 비자카드에서 거래의 평균 초당 처리량은 약 2,000 거래이며, 최대(peak) 처리량은 초당 약 56,000 거래로 알려졌다.[3] 따라서 비트코인의 현재 거래 처리량은 매우 작다. 이 때문에, 만일 비트코인의 초당 거래 처리량이 크게 증가한다면, 블록체인의 사이즈 문제는 더욱 심각해질 것이다. 또한 블록체인은 추가 전용 DB이기 때문에 그 크기가 너무 빠르게 증가하는 피할 수 없는 문제를 가진다.\n\n<b>2. 비트코인에서 거래 및 거래의 전체 상태</b>\n비트코인에서 거래(transaction)는 하나 이상의 입력과 출력(one or more of inputs and outputs)으로 구성된다. 비트코인에서 거래의 출력(outputs)은 단 한 번만 입력(input)에서 소비될 수 있기 때문에, 소비되지 않은 거래 출력(unspent transaction outputs, UTXOs)과 이미 소비된 거래 출력(spent transaction outputs, STXOs)으로 구분된다. 구체적으로, 입력은 소유자가 소비할 수 있는 UTXO와 디지털 서명과 공개키로 구성되고, 출력은 새로운 UTXO를 생성하기 위한 지갑주소와 이체할 코인 개수로 이루어진다. 따라서 거래가 유효하려면, 입력에 STXO가 아닌 UTXO만 사용하여 소비해야 한다.[4] 결국 비트코인에서 거래는 UTXO를 소비하여 STXO로 만들고 새로운 UTXO를 생성하는 과정이다.[4] 비트코인 지갑은 일반적으로 거래의 입력과 출력을 디지털 서명하여 네트워크에 전파한다. 즉 비트코인은 소유권의 증거로 디지털 서명을 제공하는 서명 기반의 소유권 이전 시스템이다.\n\n그림 1은 비트코인의 주요 DB인 맴풀(mempool), 블록체인 그리고 UTXO set을 보여준다. 여기서, 맴풀은 블록에 기록되기를 기다리는 미승인 거래(unconfirmed Tx)를 저장하는 DB이고, 이 때문에 특정 거래가 블록에 기록이 되면 이 거래는 맴풀에서 삭제된다. UTXO set는 미래에 사용할 수 있는 출력인 모든 UTXO를 모아놓은 DB이고, 이 때문에 새 블록이 전파될 때마다 이것의 내용이 바뀐다. 구체적으로, 새 블록이 전파될 때마다 이 블록에 포함된 거래에 의해서 STXO, 즉 소비한 UTXO를 UTXO set에서 제거하고, 새로 발생한 UTXO를 이것에 추가하여 내용을 업데이트한다. 따라서 UTXO set은 전체 계정 상태와 같이 거래의 전체 상태를 관리한다. 여기서 중요한 것은 “공개 블록체인(public blockchain)의 비신뢰 특성 때문에, 분산된 노드들이 블록체인을 통해서 모든 거래를 독립적으로 검증하여 거래의 전체 상태인 UTXO set를 완성하는 것이다.”는 것이다. 따라서 비트코인은 노드 관점에서 블록체인을 복제하여 이를 동기화하고, 이를 통해서 모든 거래를 독립적으로 검증하여 전체 상태인 UTXO 세트를 완성하는 것이다. 이는 비트코인의 비신뢰(trustless) 특성 때문이다. 결국 비트코인의 모든 상태는 UTXO set와 맴풀이 가지고 있다. 이때 UTXO 세트는 전체 상태인 모든 UTXO를 관리하고, 맴풀은 블록체인에 기록되기를 기다리는 모든 미승인 거래(unconfirmed Tx)를 관리한다.\n\n<center>https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png</center>\n<center>그림1. 비트코인의 주요 데이터베이스. 비트코인에서 UTXO set은 거래의 전체 상태를 가진 DB이고, 블록체인은 추가전용의 로그 DB이다. 이 둘은 블록에 포함된 승인된 거래(confirmed Tx)를 관리한다. 맴풀은 블록에 포함되기를 기다리는 미승인 거래들(unconfirmed Tx)을 관리하는 DB이다.</center>\n\n비트코인은 분산된 비신뢰 합의 알고리즘(distributed trustless consensus algorithm)이기 때문에 노드는 다른 노드들을 믿을 수 없다.[5] 이 때문에 노드 자신이 전체 블록체인을 독립적으로 검증해야 한다. 이것은 블록이 디지털 서명이 포함된 거래와 다른 블록과 체인으로 연결되어 있기 때문에 가능한 것이다. 이 때문에, 새 노드가 비트코인 네트워크에 처음 접속하면, 그는 전체 블록체인을 반드시 다운로드 받으며, 이를 초기 블록체인 동기화(Initial Block Download, IBD)라고 부른다[6]. 즉 IBD는 새 노드가 비신뢰 네트워크에서 독립성을 유지하기 위해 블록체인 전체를 다운받아 모든 거래를 검증하고, 이를 통해서 올바른 UTXO 세트를 독립적으로 완성하기 위한 목적으로 사용한다. 참고로, 비트코인 코어(bitcoin core) 0.10.0은 노드가 144개의 블록, 즉 약 24시간 이상 동안 네트워크에 접속하지 못하면, IBD를 다시 시작하여 블록체인을 동기화시킨다[6].\n\n<b>3. 최근의 블록체인만 포함한 부분 삭제 노드(pruned node)</b>\n부분 삭제 노드(pruned node)는 전체 블록체인을 저장하지 않는 노드를 말한다.[7] 구체적으로 말하면, 새 노드가 전체 블록체인을 다운받고 이를 검증한 후, UTXO set을 완성한다. 그 후 이 노드는 특정 개수의 최근 블록체인만을 가지고 있고, 그전의 블록체인을 삭제한 부분 삭제 노드(pruned node)가 될 수 있다[7]. 이 노드는 전체 블록체인을 검증하여 거래의 상태인 UTXO set를 완성했기 때문에, 전체 블록체인 대신에 최신의 일부 블록체인만을 저장하고 있어도 올바로 동작한다. 따라서 만일 자신의 노드만 생각한다면, 노드가 일단 UTXO set을 완성한 후에 전체 블록체인을 가지고 있을 필요는 없다. 이 노드는 단지 블록체인에 포크가 발생하였을 경우를 대비하여 최근의 몇 개 블록만 저장해도 된다.[8]. 노드들이 전체 블록체인을 가지고 있는 목적은 새 노드들이 블록생산(채굴)에 참여할 수 있도록 이들에게 전체 블록체인을 제공하는 위한 것이다[9].\n\n<center>https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png</center>\n<center>그림 2. (a) 전체 헤더부와 거래부를 저장하는 기존 블록체인, (b) 특정 개수의 최근 블록체인을 저장하는 부분 삭제 블록체인(pruned blockchain). 여기서, 부분 삭제 블록체인은 노드가 일정한 개수의 최근 블록을 가지고 있고, 그 이외의 블록은 삭제한다.</center>\n\n그림 2(a)는 전체 블록체인을 가지고 있는 기존 블록체인(conventional blockchain)을 보여준다. 여기서 h와 t는 블록체인의 헤더부(header part)와 거래부(transaction part)를 각각 나타내고, 아래 첨자는 블록의 생성순서를 나타낸다. 기존 블록체인은 그림 2(a)과 같이 최초 블록(genesis block)부터 최근 블록까지 전체 블록체인을 포함한다. 그림에서 화살표는 이전 블록의 블록해시를 현재 블록에 포함시켜서 체인으로 연결시킨 것을 나타낸다. 만일 새 노드가 비트코인 네트워크에 참여한다면, 이 노드는 이 그림 2(a)과 같이 전체 블록체인을 다운로드받기 위해 IBD를 진행해야 한다. 그리고 그림 2(b)는 특정 개수의 최근 블록체인을 저장한 부분 삭제 블록체인(pruned blockchain)을 보여준다. 부분 삭제 노드는 그림 2(b)와 같이 특정 개수의 최신 블록만을 가지고 있다.[7] 그림 2(b)의 경우, 이 노드는 m번째 블록부터 최신 블록인 n번째 블록을 포함하고, n — m은 일정한 상수이다. 노드는 전체 블록체인을 저장하여 검증하고 UTXO set을 완성한 후, 부분 삭제 노드가 될 수 있다. 하지만 이 경우, 이 노드는 새 노드가 네트워크에 참여하도록 전체 블록체인을 제공할 수는 없다.\n\n<b>4. 초기 UTXO 다운로드(Initial UTXO Download) 방법</b>\n비트코인에서 거래의 전체 상태인 UTXO set은 채굴의 편의를 위해서 메모리에 저장된다. 전체 UTXO set의 크기는 2017년 5월 20일 현재 약 1.9 GiB이었고, 당시 블록체인 크기의 약 1.6%에 불과할 정도로 작다.[10] 블록체인이 거래에 대한 추가전용 DB이기 때문에, 이 비율은 앞으로 점점 작아질 것이다. 이런 이유 때문에, 새 노드가 비트코인 네트워크에 처음 접속하여 IBD를 통해 전체 블록체인을 전송받는 것보다 전체 UTXO set을 전송받는 것이 더 좋은 방법이다. 즉, 만일 새 노드가 초기 동기화 동안 올바른 전체 UTXO set를 이웃 노드로부터 다운받을 수 있다면, 전체 블록체인을 다운받지 않아도 된다. 하지만, 공개 블록체인(public blockchain)에서 노드들은 서로를 믿지 못하는 비신뢰 특성 때문에, 새 노드가 이웃 노드들로부터 UTXO 세트를 직접 다운받는 것은 안전하지 않다. 왜냐하면, 새 노드가 다운로드 받은 UTXO set이 올바른 것인지를 판단할 수 없기 때문이다.\n\n이를 해결하기 위해서, UTXO 확정 (UTXO commitments) 방법이 이미 제안되었고, 이를 경량 지갑(light wallet)에 적용하려는 여러 가지 제안들이 있었다.[11–13] 이것은 전체 UTXO set를 머클트리(merkle tree)로 구성하고, 이것의 루트 해시를 블록에 기록하는 방법이다. 그리고 새 노드는 전체 UTXO set을 전송받고 이를 머클트리로 구성하여 이것의 루트 해시를 구하고 블록에 기록된 루트해시를 비교하여 안전성을 검증한다. 즉 UTXO 확정은 p2p 네트워크에서 다른 노드로부터 전파 받은 UTXO set이 올바른지를 확인하는 데 사용할 수 있다. 이것을 초기 UTXO 동기화(initial UTXO download, IUD)라 부르자. IUD의 장점은 다음과 같다. 1) IUD는 기존의 IBD를 통해 전체 블록체인을 다운받는 방법보다 전송받는 데이터가 매우 작다. 이 때문에 새 노드가 매우 빨리 초기 동기화를 시킬 수 있다. 2) 기존의 IBD는 서명의 검증에 많은 CPU 자원이 필요하다. 하지만, IUD는 모든 블록을 검증하는 대신에, 전체 UTXO set을 검증하기 때문에 검증을 위한 계산량 및 시간을 크게 줄일 수 있다.\n\n그렇지만 IUD는 노드의 독립성을 일부 포기한 것으로 보일 수 있다. 왜냐하면 기존의 IBD는 비신뢰 특성 때문에 새 노드가 전체 블록체인을 전송받아 이것에 포함된 모든 거래를 독립적으로 검증하기 때문이다. 하지만 비트코인에서 IUD가 안전한 이유는 공격자가 최근의 블록체인을 새로 만들 때 상당한 비용이 들기 때문이다. 즉, 새 노드가 IUD를 통해 UTXO set를 전송받은 후, 그가 몇 개의 최신 블록을 연속으로 검증하면 안전한 UTXO 세트를 전송받았는지 쉽게 검증할 수 있다. 그리고 비트코인 지갑은 거래가 포함된 블록 이후 6개의 새 블록이 생성되면 이체가 가능하다. 이와 유사하게, 예로 들면, 새 노드는 IUD 동안 먼저 최신 블록과 UTXO set을 전송받고 이를 검증한 후, 연속으로 5개의 새로운 블록을 전파 받아서 이 UTXO set를 계속 검증한다. 이 과정을 모두 통과할 경우 새 노드는 이 UTXO set을 사용할 수 있다.\n\n블록에 UTXO set의 루트 해시를 기록하는 방법은 아래와 같을 수 있다. 예를 들면, 노드들은 기존 방법대로 난이도 조건을 만족하는 블록해시를 먼저 찾은 후에, UTXO set의 머클트리를 구성하여 그것의 루트 해시를 계산한다. 그리고 기존 블록과 동일하게 블록을 만들고, 추가로 머클트리의 루트 해시를 블록에 기록한다. 또한 이 루트 해시와 블록해시로 새로운 해시를 만들어 이를 블록에 추가할 수 있다.\n\n<b>5. 기존 트리의 정렬을 이용한 정렬된 머클트리(sorted merkle tree)</b>\n그림 3(a)에 보인 기존 머클트리를 먼저 살펴보자. 이 그림의 기존 머클트리는 이진트리(binary tree)이고, 데이터인 UTXO가 모두 말단 노드(leaf nodes)에 위치한다. 그리고 이것의 내부노드(interior nodes)는 두 자식 노드를 연결하여 계산한 해시로 구성하고 루트 해시와 연결된다.[14] 그림 3에서 u와 h는 각각 UTXO와 해시(hash)를 나타내고, 아래첨자는 이들의 이름을 가리킨다. 내부노드의 해시를 구하는 예를 들면, 2번 노드의 해시는 h2 = hf(h4 || h5)로 계산한다. 이때, hf는 해시함수이고, ||는 연결(concatenation) 연산자이다. 따라서 기존 머클트리에서 루트 노드의 루트 해시(h1)는 단말노드에 위치한 데이터인 모든 UTXO에 의존하게 된다. 이 때문에, 만일 데이터가 하나라도 바뀌면, 해당 노드로부터 루트 노드로 이어지는 노드들의 해시가 바뀌고 결국 루트 해시(h1)가 바뀐다.\n\n<center>https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png</center>\n<center>그림 3. (a) 기존 머클트리. 머클트리는 말단 노드에 모든 UTXO가 위치하고, 내부 노드는 두 개의 자식 노드의 해시로 구성된 이진트리이다. (b) 우리가 제안한 머클트리. 머클트리는 모든 UTXO를 기존의 이진트리로 정렬하고, 그 후에 노드의 해시를 구한다. 이때, 내부 노드는 해시를 포함한다. 이 경우, 내부노드에 UTXO를 포함하기 때문에 머클트리의 노드의 개수는 기존 머클트리 대비 약 1/2로 작아진다.</center>\n\n2017년 5월 20일 현재 UTXO set의 크기는 약 1.9 GiB이고, 이것은 약 5천4백만 개의 UTXO를 포함한다.[15] 이것은 앞으로 더 증가할 수밖에 없다. 그리고 전체 UTXO set를 머클트리로 구성하고 이것의 루트 해시를 구하는 것은 많은 해시 계산이 필요하다. 하지만 비트코인에서 새 블록이 생성될 때마다, UTXO set에 새로 생성된 UTXO를 삽입하고 소비한 UTXO를 삭제한다. 새 블록마다, UTXO set의 머클트리를 업데이트하고 내부노드의 해시를 다시 계산하는 것은 너무 많은 해시 계산이 발생하는 등의 문제가 있었다. 이런 이유로 아직까지 비트코인에 IUD를 적용하지 못하고 있다[13]. 더불어 기존 머클트리는 모든 데이터, 즉 전체 UTXO가 단말 노드에 위치하기 때문에, UTXO가 정렬되어 있지 않는다. 이 때문에, 기존 머클트리는 특정 데이터의 비존재 증명에 이용할 수 없었다.[16]\n\n이를 해결하기 위해, 우리는 기존 이진트리를 이용한 정렬된 머클트리(sorted merkle tree)를 제안한다. 그림 1(b)는 우리가 제안한 새로운 머클트리를 보여준다. 이 머클트리는 기존의 이진트리를 이용하여 데이터인 UTXO를 모든 노드에 정렬시키고, 그 후에 내부노드의 해시를 계산한다. 이 때문에, 우리가 제안한 머클트리는 AVL 트리 또는 레드-블랙 트리(red-black tree) 등과 같은 시간 복잡도가 O(log n)인 균형 이진트리(balanced binary tree) 등을 사용할 수 있다. 구체적으로, 우리가 제안한 머클트리는 새 블록이 생성될 때마다 먼저 기존 UTXO의 이진트리에 사용된 UTXO 및 새로 생성된 UTXO를 삭제 및 삽입하고, 그 후에 해당하는 노드의 해시를 부가적으로 계산한다. 구체적으로, 그림 3(b)에서 말단노드의 해시는 h2와 h3이고, 이들은 hself = hf(uleft || uright || uself)로 구한다. 예를 들면, 2번 노드의 해시(h2)는 u4, u5와 u2를 연결하여 구한다. 그리고 만일 자식 노드에 해시가 존재할 경우, 이 노드의 해시는 자식노드의 해시와 자신의 UTXO를 연결하여 구한다. 예를 들면, 루트 해시(h1)는 h2, h3와 u1을 연결하여 구한다. 이 머클트리의 장점은 다음과 같다. 첫 번째, 이것은 내부노드에 데이터를 저장하고 있기 때문에 기존 머클트리에 비해서 이진트리의 노드 개수를 약 1/2로 줄인다. 이 때문에 기존 머클트리에 비해 해시의 개수가 약 절반으로 줄어든다. 즉 데이터의 업데이트 시에 해시 계산의 개수가 줄어든다. 두 번째, 제안한 머클트리는 기존 이진트리로 데이터인 UTXO를 먼저 정렬하고, 이 때문에 이것은 특정 UTXO의 존재 여부를 쉽게 증명할 수 있다. 따라서 경량 지갑에서 특정 거래의 존재 여부에 대한 검증이 가능하다. 우리의 머클트리에서 데이터의 비존재 증명은 비존재하는 데이터의 양 옆에 있는 데이터가 바로 이웃하고 있는지를 증명하면 가능하다. [16] 참고로, 경량지갑에서 거래의 존재 증명은 아래와 같이 확인할 수 있다. 예를 들면, 그림 3(b)의 제안한 머클트리에서 u2의 검증은 u4, u5, u2, h3가 필요하다. 이에 비해 그림 3(a)의 기존 머클트리에서 u2의 검증은 u1, u2, h5, h3가 필요하다.\n\n더불어, 기존 머클트리는 각 데이터, 즉 UTXO를 검증할 때, 단 하나의 이웃 데이터를 포함한다. 하지만 우리가 제안한 머클트리는 내부 노드에 데이터를 포함하기 때문에 각 데이터를 검증할 때, 기존 머클트리에 비해서 더 많은 데이터를 포함해야 한다. 하지만, 비트코인은 공개 블록체인이므로, 특정 거래의 검증 과정에서 특정 utxo를 노출하는 것은 전혀 문제가 되지 않는다.\n\n그리고 이더리움은 UTXO 대신에 계정(accounts)을 가지고 있고, 머클 페트리샤 트리(merkle patricia tree)에 저장한다.[17] 비슷하게 코스모스 코인도 계정을 가지고 있고, 이를 머클 IAVL+ 트리(merkle IAVL+ tree)에 저장된다.[18] 하지만, 이들도 모두 단말노드에 계정 데이터를 저장한다. 따라서 이더리움과 같이 계정의 전체 상태를 가진 암호화폐에도 우리가 제안한 정렬된 머클트리 구조를 적용할 수 있다.\n\n<b>6. 결론</b>\n본 논문은 비트코인에서 초기 동기화 시에 UTXO 확정(commitments)을 이용하기 위해, 머클트리의 노드의 개수를 약 1/2로 줄인 정렬된 머클트리(sorted merkle tree)를 제안한다. 이 머클트리를 사용하면, 매 블록마다 삭제 및 추가되는 UTXO에 때문에 발생하는 머클트리에서 변화된 전체 해시 계산 개수를 줄일 수 있다. 이 때문에 전체 블록체인을 다운받는 초기 블록 다운로드(IBD) 대신에, UTXO set을 다운로드받는 초기 UTXO 다운로드(IUD)를 사용할 수 있을 것으로 추측한다. 결론적으로 우리는 IUD를 사용할 수 있도록, 머클트리에서 노드의 개수를 기존 머클트리에 비해서 약 1/2로 줄인 새로운 머클트리 구조를 제안한다.\n\n<b>References</b>\n[1] Satoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System.” https://bitcoin.org/bitcoin.pdf (2009)\n[2] No Auther, “Bitcoin Core.” https://en.wikipedia.org/wiki/Bitcoin_Core (accessed 3 April 2018)\n[3] No Auther, “Scalability.” Bitcoin Wikipedia https://en.bitcoin.it/wiki/Scalability (accessed 3 April 2018)\n[4] No Auther, “Block Chain Overview.” https://bitcoin.org/en/developer-guide#block-chain-overview\n[5] Aleksandr Bulkin, “Explaining blockchain — how proof of work enables trustless consensus.” https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\n[6] No Auther, “Initial Block Download.” https://bitcoin.org/en/developer-guide#initial-block-download\n[7] No Auther, “Block file pruning.” https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\n[8] No Auther, ”Chain Reorganization.” https://en.bitcoin.it/wiki/Chain_Reorganization\n[9] No Auther, “Full Node.” https://bitcoin.org/en/developer-guide#full-node\n[10] No Auther. “Unspent transaction output set.” Statoshi.info http://statoshi.info/dashboard/db/unspent-transaction-output-set (accessed 5 April 2017)\n[11] Andrew Miller. “Storing UTXOs in a Balanced Merkle Tree.” Bitcointalk https://bitcointalk.org/index.php?topic=101734.0\n[12] No Auther. “Pettycoin Revisted Part I: Utxo Commitments.” http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\n[13] Peter Todd. “Making UTXO Set Growth Irrelevant With Low-Latency Delayed TXO Commitments.” https://petertodd.org/2016/delayed-txo-commitments\n[14] No Auther. “Merkle tree.” https://en.wikipedia.org/wiki/Merkle_tree\n[15] No Auther. “Number of Unspent Transaction Outputs.” https://blockchain.info/charts/utxo-count?timespan=all\n[16] No Auther. “sorted-merkle-tree-issue693.” https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\n[17] Gavin Wood. “Ethereum: A secure decentralized generalized transaction ledger” No Publisher (2014) http://gavwood.com/paper.pdf\n[18] Jae Kwon and Ethan Buchman. “Cosmos whitepaper.” Cosmos https://cosmos.network/whitepaper (accessed 3 April 2018)",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "3y9vyi-utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"bitcoin\",\"utxo\",\"set\",\"sorted\",\"merkle\",\"tree\"],\"image\":[\"https://miro.medium.com/max/1421/1*1ebaSoGiHup2roFgylS-Hw.png\",\"https://miro.medium.com/max/1395/1*Ar2mYenZ-6JA-dJmVXNUJA.png\",\"https://miro.medium.com/max/2075/1*F8FM1QwcATqUwu7T78CSmA.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "bitcoin"
}
],
"block": 37500784,
"trx_id": "20391e913c565b3f40fcb64cd9280140015bdd64",
"op_in_trx": 0,
"timestamp": "2019-10-22T07:51:48",
"virtual_op": false,
"trx_in_block": 0
}loumupdated their account properties2019/10/08 13:51:24
loumupdated their account properties
2019/10/08 13:51:24
| account | loum |
| memo key | STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT |
| json metadata | {"profile":{"about":"제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt","name":"loum","location":"Seoul, Korea"}} |
| Transaction Info | Block #37105586/Trx 4bb95803dab2f16d3b0da712008aa55a3a4d5385 |
View Raw JSON Data
{
"op": [
"account_update",
{
"account": "loum",
"memo_key": "STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT",
"json_metadata": "{\"profile\":{\"about\":\"제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt\",\"name\":\"loum\",\"location\":\"Seoul, Korea\"}}"
}
],
"block": 37105586,
"trx_id": "4bb95803dab2f16d3b0da712008aa55a3a4d5385",
"op_in_trx": 0,
"timestamp": "2019-10-08T13:51:24",
"virtual_op": false,
"trx_in_block": 12
}loumupdated their account properties2019/10/08 13:51:09
loumupdated their account properties
2019/10/08 13:51:09
| account | loum |
| memo key | STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT |
| json metadata | {"profile":{"about":"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt","name":"loum","location":"Seoul, Korea"}} |
| Transaction Info | Block #37105581/Trx 9c4efbb1590548c7fd2af01e14dca18820df5139 |
View Raw JSON Data
{
"op": [
"account_update",
{
"account": "loum",
"memo_key": "STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT",
"json_metadata": "{\"profile\":{\"about\":\"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt\",\"name\":\"loum\",\"location\":\"Seoul, Korea\"}}"
}
],
"block": 37105581,
"trx_id": "9c4efbb1590548c7fd2af01e14dca18820df5139",
"op_in_trx": 0,
"timestamp": "2019-10-08T13:51:09",
"virtual_op": false,
"trx_in_block": 5
}2019/08/22 15:31:18
2019/08/22 15:31:18
| to | loum |
| from | dtube |
| memo | Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube |
| amount | 0.001 HIVE |
| Transaction Info | Block #35778636/Trx 31447dc1505c8a09d663bac2d139ef7e40977be3 |
View Raw JSON Data
{
"op": [
"transfer",
{
"to": "loum",
"from": "dtube",
"memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube",
"amount": "0.001 HIVE"
}
],
"block": 35778636,
"trx_id": "31447dc1505c8a09d663bac2d139ef7e40977be3",
"op_in_trx": 9,
"timestamp": "2019-08-22T15:31:18",
"virtual_op": false,
"trx_in_block": 27
}newbizzupvoted (100.00%) @loum / similarities-between-blockchain-and-dna2019/08/08 18:21:45
newbizzupvoted (100.00%) @loum / similarities-between-blockchain-and-dna
2019/08/08 18:21:45
| voter | newbizz |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | similarities-between-blockchain-and-dna |
| Transaction Info | Block #35379559/Trx 550e782ad064960fe3834524ee2941f0860beb30 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "newbizz",
"author": "loum",
"weight": 10000,
"permlink": "similarities-between-blockchain-and-dna"
}
],
"block": 35379559,
"trx_id": "550e782ad064960fe3834524ee2941f0860beb30",
"op_in_trx": 0,
"timestamp": "2019-08-08T18:21:45",
"virtual_op": false,
"trx_in_block": 0
}2019/07/19 04:06:54
2019/07/19 04:06:54
| body | Congratulations @loum! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@loum/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@loum) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=loum)_</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! |
| title | |
| author | steemitboard |
| permlink | steemitboard-notify-loum-20190719t040651000z |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | loum |
| parent permlink | vod |
| Transaction Info | Block #34788632/Trx b0164a577b6537817d1c4af5b27ab21dea106cba |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Congratulations @loum! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@loum/birthday3.png</td><td>Happy Birthday! - You are on the Steem blockchain for 3 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@loum) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=loum)_</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!",
"title": "",
"author": "steemitboard",
"permlink": "steemitboard-notify-loum-20190719t040651000z",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "loum",
"parent_permlink": "vod"
}
],
"block": 34788632,
"trx_id": "b0164a577b6537817d1c4af5b27ab21dea106cba",
"op_in_trx": 0,
"timestamp": "2019-07-19T04:06:54",
"virtual_op": false,
"trx_in_block": 9
}2019/05/03 04:44:48
2019/05/03 04:44:48
| voter | loum |
| author | loum |
| weight | 0 (0.00%) |
| permlink | vod |
| Transaction Info | Block #32574245/Trx ef1218fd9a30317f6a1cedb622006e07c9b1aefc |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "loum",
"author": "loum",
"weight": 0,
"permlink": "vod"
}
],
"block": 32574245,
"trx_id": "ef1218fd9a30317f6a1cedb622006e07c9b1aefc",
"op_in_trx": 0,
"timestamp": "2019-05-03T04:44:48",
"virtual_op": false,
"trx_in_block": 2
}loumremoved vote from (0.00%) @loum / utxo-set-sorted-merkle-tree2019/05/03 04:44:45
loumremoved vote from (0.00%) @loum / utxo-set-sorted-merkle-tree
2019/05/03 04:44:45
| voter | loum |
| author | loum |
| weight | 0 (0.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32574244/Trx 210cdb825510e9c9c399a5eaf55be9ba8ada9256 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "loum",
"author": "loum",
"weight": 0,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32574244,
"trx_id": "210cdb825510e9c9c399a5eaf55be9ba8ada9256",
"op_in_trx": 0,
"timestamp": "2019-05-03T04:44:45",
"virtual_op": false,
"trx_in_block": 6
}2019/05/03 04:44:30
2019/05/03 04:44:30
| voter | loum |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | vod |
| Transaction Info | Block #32574239/Trx 6f246957670cfc01861f1c0dd81af321495bfd72 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "loum",
"author": "loum",
"weight": 10000,
"permlink": "vod"
}
],
"block": 32574239,
"trx_id": "6f246957670cfc01861f1c0dd81af321495bfd72",
"op_in_trx": 0,
"timestamp": "2019-05-03T04:44:30",
"virtual_op": false,
"trx_in_block": 0
}loumupvoted (100.00%) @loum / utxo-set-sorted-merkle-tree2019/05/03 04:44:27
loumupvoted (100.00%) @loum / utxo-set-sorted-merkle-tree
2019/05/03 04:44:27
| voter | loum |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32574238/Trx ab13e2c17f70e22b5f8c8131cd8bb131251de229 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "loum",
"author": "loum",
"weight": 10000,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32574238,
"trx_id": "ab13e2c17f70e22b5f8c8131cd8bb131251de229",
"op_in_trx": 0,
"timestamp": "2019-05-03T04:44:27",
"virtual_op": false,
"trx_in_block": 6
}2019/04/26 01:39:51
2019/04/26 01:39:51
| author | loum |
| permlink | vod |
| Transaction Info | Block #32369066/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "loum",
"permlink": "vod"
}
],
"block": 32369066,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 3,
"timestamp": "2019-04-26T01:39:51",
"virtual_op": true,
"trx_in_block": 4294967295
}loumupdated payout for re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z2019/04/24 06:24:00
loumupdated payout for re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z
2019/04/24 06:24:00
| author | loum |
| permlink | re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z |
| Transaction Info | Block #32317175/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "loum",
"permlink": "re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z"
}
],
"block": 32317175,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 3,
"timestamp": "2019-04-24T06:24:00",
"virtual_op": true,
"trx_in_block": 4294967295
}loumupdated payout for utxo-set-sorted-merkle-tree2019/04/24 05:46:00
loumupdated payout for utxo-set-sorted-merkle-tree
2019/04/24 05:46:00
| author | loum |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32316415/Virtual Operation 4294967295:2 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "loum",
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32316415,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 2,
"timestamp": "2019-04-24T05:46:00",
"virtual_op": true,
"trx_in_block": 4294967295
}coinfarmer165effective vote applied for @loum / vod2019/04/23 05:46:57
coinfarmer165effective vote applied for @loum / vod
2019/04/23 05:46:57
| voter | coinfarmer165 |
| author | loum |
| weight | 1890 (18.90%) |
| rshares | 495377702 |
| permlink | vod |
| pending payout | 0.006 HBD |
| total vote weight | 104786 |
| Transaction Info | Block #32287645/Trx 2f411099ad0c8be4dc73ea27933f820e21073db6 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "coinfarmer165",
"author": "loum",
"weight": 1890,
"rshares": 495377702,
"permlink": "vod",
"pending_payout": "0.006 HBD",
"total_vote_weight": 104786
}
],
"block": 32287645,
"trx_id": "2f411099ad0c8be4dc73ea27933f820e21073db6",
"op_in_trx": 1,
"timestamp": "2019-04-23T05:46:57",
"virtual_op": true,
"trx_in_block": 19
}coinfarmer165upvoted (100.00%) @loum / vod2019/04/23 05:46:57
coinfarmer165upvoted (100.00%) @loum / vod
2019/04/23 05:46:57
| voter | coinfarmer165 |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | vod |
| Transaction Info | Block #32287645/Trx 2f411099ad0c8be4dc73ea27933f820e21073db6 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "coinfarmer165",
"author": "loum",
"weight": 10000,
"permlink": "vod"
}
],
"block": 32287645,
"trx_id": "2f411099ad0c8be4dc73ea27933f820e21073db6",
"op_in_trx": 0,
"timestamp": "2019-04-23T05:46:57",
"virtual_op": false,
"trx_in_block": 19
}dj-on-steemeffective vote applied for @loum / vod2019/04/22 20:36:39
dj-on-steemeffective vote applied for @loum / vod
2019/04/22 20:36:39
| voter | dj-on-steem |
| author | loum |
| weight | 44106 |
| rshares | 6383073939 |
| permlink | vod |
| pending payout | 0.006 HBD |
| total vote weight | 102896 |
| Transaction Info | Block #32276643/Trx 35943cbc75f6b7f0175be6a5fa90f3a1343f1523 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "dj-on-steem",
"author": "loum",
"weight": 44106,
"rshares": 6383073939,
"permlink": "vod",
"pending_payout": "0.006 HBD",
"total_vote_weight": 102896
}
],
"block": 32276643,
"trx_id": "35943cbc75f6b7f0175be6a5fa90f3a1343f1523",
"op_in_trx": 1,
"timestamp": "2019-04-22T20:36:39",
"virtual_op": true,
"trx_in_block": 12
}dj-on-steemupvoted (31.00%) @loum / vod2019/04/22 20:36:39
dj-on-steemupvoted (31.00%) @loum / vod
2019/04/22 20:36:39
| voter | dj-on-steem |
| author | loum |
| weight | 3100 (31.00%) |
| permlink | vod |
| Transaction Info | Block #32276643/Trx 35943cbc75f6b7f0175be6a5fa90f3a1343f1523 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "dj-on-steem",
"author": "loum",
"weight": 3100,
"permlink": "vod"
}
],
"block": 32276643,
"trx_id": "35943cbc75f6b7f0175be6a5fa90f3a1343f1523",
"op_in_trx": 0,
"timestamp": "2019-04-22T20:36:39",
"virtual_op": false,
"trx_in_block": 12
}dj-on-steemeffective vote applied for @loum / utxo-set-sorted-merkle-tree2019/04/20 18:43:06
dj-on-steemeffective vote applied for @loum / utxo-set-sorted-merkle-tree
2019/04/20 18:43:06
| voter | dj-on-steem |
| author | loum |
| weight | 29453 |
| rshares | 5964206985 |
| permlink | utxo-set-sorted-merkle-tree |
| pending payout | 0.008 HBD |
| total vote weight | 114354 |
| Transaction Info | Block #32216795/Trx 0bf797a5aeea87f8d7651fffaa0819813f1f4294 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "dj-on-steem",
"author": "loum",
"weight": 29453,
"rshares": 5964206985,
"permlink": "utxo-set-sorted-merkle-tree",
"pending_payout": "0.008 HBD",
"total_vote_weight": 114354
}
],
"block": 32216795,
"trx_id": "0bf797a5aeea87f8d7651fffaa0819813f1f4294",
"op_in_trx": 1,
"timestamp": "2019-04-20T18:43:06",
"virtual_op": true,
"trx_in_block": 4
}dj-on-steemupvoted (31.00%) @loum / utxo-set-sorted-merkle-tree2019/04/20 18:43:06
dj-on-steemupvoted (31.00%) @loum / utxo-set-sorted-merkle-tree
2019/04/20 18:43:06
| voter | dj-on-steem |
| author | loum |
| weight | 3100 (31.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32216795/Trx 0bf797a5aeea87f8d7651fffaa0819813f1f4294 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "dj-on-steem",
"author": "loum",
"weight": 3100,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32216795,
"trx_id": "0bf797a5aeea87f8d7651fffaa0819813f1f4294",
"op_in_trx": 0,
"timestamp": "2019-04-20T18:43:06",
"virtual_op": false,
"trx_in_block": 4
}2019/04/20 06:28:54
2019/04/20 06:28:54
| body | @@ -11,11 +11,14 @@ %EC%9D%80%ED%96%89%EC%9D%98 -VOD +%EB%8F%99%EC%98%81%EC%83%81 %EA%B0%95%EC%9D%98 %EB%A1%9C %EC%A7%80%EA%B8%89 |
| title | [한국은행 동영상 강의] 지급결재 시스템의 이해 |
| author | loum |
| permlink | vod |
| json metadata | {"tags":["payment","settlement"],"links":["https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | payment |
| Transaction Info | Block #32202120/Trx 43c039c809370175784c1e3a01e072100a323b5b |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -11,11 +11,14 @@\n %EC%9D%80%ED%96%89%EC%9D%98 \n-VOD\n+%EB%8F%99%EC%98%81%EC%83%81 %EA%B0%95%EC%9D%98\n %EB%A1%9C %EC%A7%80%EA%B8%89\n",
"title": "[한국은행 동영상 강의] 지급결재 시스템의 이해",
"author": "loum",
"permlink": "vod",
"json_metadata": "{\"tags\":[\"payment\",\"settlement\"],\"links\":[\"https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "payment"
}
],
"block": 32202120,
"trx_id": "43c039c809370175784c1e3a01e072100a323b5b",
"op_in_trx": 0,
"timestamp": "2019-04-20T06:28:54",
"virtual_op": false,
"trx_in_block": 46
}blockcreateeffective vote applied for @loum / vod2019/04/19 02:07:33
blockcreateeffective vote applied for @loum / vod
2019/04/19 02:07:33
| voter | blockcreate |
| author | loum |
| weight | 41328 |
| rshares | 3107102594 |
| permlink | vod |
| pending payout | 0.002 HBD |
| total vote weight | 58790 |
| Transaction Info | Block #32168114/Trx d2c2c7a36f383b15d5deb93da5114e18f7b1b9d5 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "blockcreate",
"author": "loum",
"weight": 41328,
"rshares": 3107102594,
"permlink": "vod",
"pending_payout": "0.002 HBD",
"total_vote_weight": 58790
}
],
"block": 32168114,
"trx_id": "d2c2c7a36f383b15d5deb93da5114e18f7b1b9d5",
"op_in_trx": 1,
"timestamp": "2019-04-19T02:07:33",
"virtual_op": true,
"trx_in_block": 14
}blockcreateupvoted (1.00%) @loum / vod2019/04/19 02:07:33
blockcreateupvoted (1.00%) @loum / vod
2019/04/19 02:07:33
| voter | blockcreate |
| author | loum |
| weight | 100 (1.00%) |
| permlink | vod |
| Transaction Info | Block #32168114/Trx d2c2c7a36f383b15d5deb93da5114e18f7b1b9d5 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "blockcreate",
"author": "loum",
"weight": 100,
"permlink": "vod"
}
],
"block": 32168114,
"trx_id": "d2c2c7a36f383b15d5deb93da5114e18f7b1b9d5",
"op_in_trx": 0,
"timestamp": "2019-04-19T02:07:33",
"virtual_op": false,
"trx_in_block": 14
}2019/04/19 01:48:54
2019/04/19 01:48:54
| voter | sergino |
| author | loum |
| weight | 10477 |
| rshares | 303760236 |
| permlink | vod |
| pending payout | 0.000 HBD |
| total vote weight | 17462 |
| Transaction Info | Block #32167741/Trx 0b080383c7cd51a921573b477b8afb1db52723d1 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "sergino",
"author": "loum",
"weight": 10477,
"rshares": 303760236,
"permlink": "vod",
"pending_payout": "0.000 HBD",
"total_vote_weight": 17462
}
],
"block": 32167741,
"trx_id": "0b080383c7cd51a921573b477b8afb1db52723d1",
"op_in_trx": 1,
"timestamp": "2019-04-19T01:48:54",
"virtual_op": true,
"trx_in_block": 21
}2019/04/19 01:48:54
2019/04/19 01:48:54
| voter | sergino |
| author | loum |
| weight | 200 (2.00%) |
| permlink | vod |
| Transaction Info | Block #32167741/Trx 0b080383c7cd51a921573b477b8afb1db52723d1 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "sergino",
"author": "loum",
"weight": 200,
"permlink": "vod"
}
],
"block": 32167741,
"trx_id": "0b080383c7cd51a921573b477b8afb1db52723d1",
"op_in_trx": 0,
"timestamp": "2019-04-19T01:48:54",
"virtual_op": false,
"trx_in_block": 21
}2019/04/19 01:46:15
2019/04/19 01:46:15
| id | follow |
| json | ["follow",{"follower":"loum","following":"wans","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["loum"] |
| Transaction Info | Block #32167688/Trx b38840c1e0e4cb4f4066faea294f3df7c20930f7 |
View Raw JSON Data
{
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"loum\",\"following\":\"wans\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"loum"
]
}
],
"block": 32167688,
"trx_id": "b38840c1e0e4cb4f4066faea294f3df7c20930f7",
"op_in_trx": 0,
"timestamp": "2019-04-19T01:46:15",
"virtual_op": false,
"trx_in_block": 12
}loumunfollowed @eosnodeone2019/04/19 01:46:00
loumunfollowed @eosnodeone
2019/04/19 01:46:00
| id | follow |
| json | ["follow",{"follower":"loum","following":"eosnodeone","what":[]}] |
| required auths | [] |
| required posting auths | ["loum"] |
| Transaction Info | Block #32167683/Trx 1a81baef6a016ab67e69c4fed4109ce30f2acc70 |
View Raw JSON Data
{
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"loum\",\"following\":\"eosnodeone\",\"what\":[]}]",
"required_auths": [],
"required_posting_auths": [
"loum"
]
}
],
"block": 32167683,
"trx_id": "1a81baef6a016ab67e69c4fed4109ce30f2acc70",
"op_in_trx": 0,
"timestamp": "2019-04-19T01:46:00",
"virtual_op": false,
"trx_in_block": 21
}2019/04/19 01:39:54
2019/04/19 01:39:54
| body | 아래의 링크는 한국은행의 VOD로 지급결제에 대한 강의입니다. 아주 쉽게 설명을 해주셔서 잘 이해할 수 있었습니다. --------------------------------- □ 제744회 한은금요강좌 ㅇ 주제 : 금융 IT 시스템의 이해 ㅇ 강사 : 금융결제국 전자금융기획팀 윤재호 차장 https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3 |
| title | [한국은행 VOD] 지급결재 시스템의 이해 |
| author | loum |
| permlink | vod |
| json metadata | {"tags":["payment","settlement"],"links":["https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | payment |
| Transaction Info | Block #32167561/Trx 918856817ff56bec0764f34539700ed31b69e6a4 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "아래의 링크는 한국은행의 VOD로 지급결제에 대한 강의입니다.\n\n아주 쉽게 설명을 해주셔서 잘 이해할 수 있었습니다.\n\n---------------------------------\n\n□ 제744회 한은금요강좌\n\nㅇ 주제 : 금융 IT 시스템의 이해\n\nㅇ 강사 : 금융결제국 전자금융기획팀 윤재호 차장\n\nhttps://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3",
"title": "[한국은행 VOD] 지급결재 시스템의 이해",
"author": "loum",
"permlink": "vod",
"json_metadata": "{\"tags\":[\"payment\",\"settlement\"],\"links\":[\"https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&menuNo=200144&listType=G&pageIndex=3\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "payment"
}
],
"block": 32167561,
"trx_id": "918856817ff56bec0764f34539700ed31b69e6a4",
"op_in_trx": 0,
"timestamp": "2019-04-19T01:39:54",
"virtual_op": false,
"trx_in_block": 16
}2019/04/17 07:02:39
2019/04/17 07:02:39
| id | follow |
| json | ["follow",{"follower":"loum","following":"eosphere","what":[]}] |
| required auths | [] |
| required posting auths | ["loum"] |
| Transaction Info | Block #32116446/Trx 27897394765373ae07275095d74cba2743c39c81 |
View Raw JSON Data
{
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"loum\",\"following\":\"eosphere\",\"what\":[]}]",
"required_auths": [],
"required_posting_auths": [
"loum"
]
}
],
"block": 32116446,
"trx_id": "27897394765373ae07275095d74cba2743c39c81",
"op_in_trx": 0,
"timestamp": "2019-04-17T07:02:39",
"virtual_op": false,
"trx_in_block": 19
}loumunfollowed @eosnation2019/04/17 07:02:15
loumunfollowed @eosnation
2019/04/17 07:02:15
| id | follow |
| json | ["follow",{"follower":"loum","following":"eosnation","what":[]}] |
| required auths | [] |
| required posting auths | ["loum"] |
| Transaction Info | Block #32116438/Trx 3409d1b3345077a9273a671ebbb41041f6cc4118 |
View Raw JSON Data
{
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"loum\",\"following\":\"eosnation\",\"what\":[]}]",
"required_auths": [],
"required_posting_auths": [
"loum"
]
}
],
"block": 32116438,
"trx_id": "3409d1b3345077a9273a671ebbb41041f6cc4118",
"op_in_trx": 0,
"timestamp": "2019-04-17T07:02:15",
"virtual_op": false,
"trx_in_block": 24
}2019/04/17 07:02:09
2019/04/17 07:02:09
| id | follow |
| json | ["follow",{"follower":"loum","following":"dexeosio","what":[]}] |
| required auths | [] |
| required posting auths | ["loum"] |
| Transaction Info | Block #32116436/Trx f67916e5ecf3bb8ebb06bfdeb5c6627eb3ef55bd |
View Raw JSON Data
{
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"loum\",\"following\":\"dexeosio\",\"what\":[]}]",
"required_auths": [],
"required_posting_auths": [
"loum"
]
}
],
"block": 32116436,
"trx_id": "f67916e5ecf3bb8ebb06bfdeb5c6627eb3ef55bd",
"op_in_trx": 0,
"timestamp": "2019-04-17T07:02:09",
"virtual_op": false,
"trx_in_block": 19
}2019/04/17 06:45:27
2019/04/17 06:45:27
| body | 블록체인은 은행 통장의 모든 거래기록과 같습니다. 노드는 블록체인의 전체 거래 기록을 처음부터 마지막까지 잔고를 계산하는 방법을 사용합니다. 하지만 현재 은행 잔고를 동기화할 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인 데이터를 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 논문입니다. |
| title | |
| author | loum |
| permlink | re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z |
| json metadata | {"tags":["blockchain"],"app":"steemit/0.1"} |
| parent author | loum |
| parent permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32116102/Trx ebaa0e0dc50870209ecffe2b263abd43c16efac8 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "블록체인은 은행 통장의 모든 거래기록과 같습니다. 노드는 블록체인의 전체 거래 기록을 처음부터 마지막까지 잔고를 계산하는 방법을 사용합니다.\n\n하지만 현재 은행 잔고를 동기화할 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인 데이터를 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 논문입니다.",
"title": "",
"author": "loum",
"permlink": "re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z",
"json_metadata": "{\"tags\":[\"blockchain\"],\"app\":\"steemit/0.1\"}",
"parent_author": "loum",
"parent_permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32116102,
"trx_id": "ebaa0e0dc50870209ecffe2b263abd43c16efac8",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:45:27",
"virtual_op": false,
"trx_in_block": 0
}2019/04/17 06:24:03
2019/04/17 06:24:03
| body | 블록체인은 은행 통장의 모든 거래기록과 같습니다. 블록체인은 마치 노드가 이런 전체 거래 기록을 처음부터 계산하여 마지막 잔고를 계산하는 방법을 사용합니다. 하지만 우리는 현재의 은행 잔고를 마지막 거래와 같이 적혀있는 것을 보고 바로 알 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인을 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 것입니다. |
| title | |
| author | loum |
| permlink | re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z |
| json metadata | {"tags":["blockchain"],"app":"steemit/0.1"} |
| parent author | loum |
| parent permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32115674/Trx 4d56f7f5738d7a88670d97be5c312043b7720de8 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "블록체인은 은행 통장의 모든 거래기록과 같습니다. 블록체인은 마치 노드가 이런 전체 거래 기록을 처음부터 계산하여 마지막 잔고를 계산하는 방법을 사용합니다. \n\n하지만 우리는 현재의 은행 잔고를 마지막 거래와 같이 적혀있는 것을 보고 바로 알 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인을 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 것입니다.",
"title": "",
"author": "loum",
"permlink": "re-loum-utxo-set-sorted-merkle-tree-20190417t062356902z",
"json_metadata": "{\"tags\":[\"blockchain\"],\"app\":\"steemit/0.1\"}",
"parent_author": "loum",
"parent_permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32115674,
"trx_id": "4d56f7f5738d7a88670d97be5c312043b7720de8",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:24:03",
"virtual_op": false,
"trx_in_block": 2
}loumpublished a new post: utxo-set-sorted-merkle-tree2019/04/17 06:17:54
loumpublished a new post: utxo-set-sorted-merkle-tree
2019/04/17 06:17:54
| body | @@ -275,24 +275,16 @@ %EB%B0%A9%EB%B2%95%EC%9D%80 -%EB%A1%9C%EB%93%9C %EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%B8 +%EC%A0%84%EC%B2%B4 %EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8 - %EC%A0%84%EC%B2%B4%EB%A5%BC +%EC%9D%84 %EB%8B%A4%EC%9A%B4%EB%B0%9B |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["blockchain","bitcoin","merkle","tree","utxo"],"image":["https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png","https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png","https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | blockchain |
| Transaction Info | Block #32115553/Trx 4b2d4e339b4e967efb328c4156b82bbd5630694c |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -275,24 +275,16 @@\n %EB%B0%A9%EB%B2%95%EC%9D%80 \n-%EB%A1%9C%EB%93%9C %EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%B8\n+%EC%A0%84%EC%B2%B4\n %EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8\n- %EC%A0%84%EC%B2%B4%EB%A5%BC\n+%EC%9D%84\n %EB%8B%A4%EC%9A%B4%EB%B0%9B\n",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"blockchain\",\"bitcoin\",\"merkle\",\"tree\",\"utxo\"],\"image\":[\"https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png\",\"https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png\",\"https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "blockchain"
}
],
"block": 32115553,
"trx_id": "4b2d4e339b4e967efb328c4156b82bbd5630694c",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:17:54",
"virtual_op": false,
"trx_in_block": 41
}jonghun98effective vote applied for @loum / utxo-set-sorted-merkle-tree2019/04/17 06:16:42
jonghun98effective vote applied for @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:16:42
| voter | jonghun98 |
| author | loum |
| weight | 1806 (18.06%) |
| rshares | 236676218 |
| permlink | utxo-set-sorted-merkle-tree |
| pending payout | 0.004 HBD |
| total vote weight | 84901 |
| Transaction Info | Block #32115529/Trx 0b4fa6f53c4737b2b1d00248bb15959855b7bb03 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "jonghun98",
"author": "loum",
"weight": 1806,
"rshares": 236676218,
"permlink": "utxo-set-sorted-merkle-tree",
"pending_payout": "0.004 HBD",
"total_vote_weight": 84901
}
],
"block": 32115529,
"trx_id": "0b4fa6f53c4737b2b1d00248bb15959855b7bb03",
"op_in_trx": 1,
"timestamp": "2019-04-17T06:16:42",
"virtual_op": true,
"trx_in_block": 53
}jonghun98upvoted (100.00%) @loum / utxo-set-sorted-merkle-tree2019/04/17 06:16:42
jonghun98upvoted (100.00%) @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:16:42
| voter | jonghun98 |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32115529/Trx 0b4fa6f53c4737b2b1d00248bb15959855b7bb03 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "jonghun98",
"author": "loum",
"weight": 10000,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32115529,
"trx_id": "0b4fa6f53c4737b2b1d00248bb15959855b7bb03",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:16:42",
"virtual_op": false,
"trx_in_block": 53
}dragonticketereffective vote applied for @loum / utxo-set-sorted-merkle-tree2019/04/17 06:16:36
dragonticketereffective vote applied for @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:16:36
| voter | dragonticketer |
| author | loum |
| weight | 49095 |
| rshares | 5442015049 |
| permlink | utxo-set-sorted-merkle-tree |
| pending payout | 0.004 HBD |
| total vote weight | 83095 |
| Transaction Info | Block #32115527/Trx 92ab99cdf239bc31a177da76f9cb5252198a76f0 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "dragonticketer",
"author": "loum",
"weight": 49095,
"rshares": 5442015049,
"permlink": "utxo-set-sorted-merkle-tree",
"pending_payout": "0.004 HBD",
"total_vote_weight": 83095
}
],
"block": 32115527,
"trx_id": "92ab99cdf239bc31a177da76f9cb5252198a76f0",
"op_in_trx": 1,
"timestamp": "2019-04-17T06:16:36",
"virtual_op": true,
"trx_in_block": 5
}dragonticketerupvoted (100.00%) @loum / utxo-set-sorted-merkle-tree2019/04/17 06:16:36
dragonticketerupvoted (100.00%) @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:16:36
| voter | dragonticketer |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32115527/Trx 92ab99cdf239bc31a177da76f9cb5252198a76f0 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "dragonticketer",
"author": "loum",
"weight": 10000,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32115527,
"trx_id": "92ab99cdf239bc31a177da76f9cb5252198a76f0",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:16:36",
"virtual_op": false,
"trx_in_block": 5
}ricardo306effective vote applied for @loum / utxo-set-sorted-merkle-tree2019/04/17 06:05:06
ricardo306effective vote applied for @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:05:06
| voter | ricardo306 |
| author | loum |
| weight | 21129 |
| rshares | 1001197496 |
| permlink | utxo-set-sorted-merkle-tree |
| pending payout | 0.000 HBD |
| total vote weight | 34000 |
| Transaction Info | Block #32115297/Trx 5cf47b057500b69871615675c435959f4580c612 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "ricardo306",
"author": "loum",
"weight": 21129,
"rshares": 1001197496,
"permlink": "utxo-set-sorted-merkle-tree",
"pending_payout": "0.000 HBD",
"total_vote_weight": 34000
}
],
"block": 32115297,
"trx_id": "5cf47b057500b69871615675c435959f4580c612",
"op_in_trx": 1,
"timestamp": "2019-04-17T06:05:06",
"virtual_op": true,
"trx_in_block": 15
}ricardo306upvoted (100.00%) @loum / utxo-set-sorted-merkle-tree2019/04/17 06:05:06
ricardo306upvoted (100.00%) @loum / utxo-set-sorted-merkle-tree
2019/04/17 06:05:06
| voter | ricardo306 |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32115297/Trx 5cf47b057500b69871615675c435959f4580c612 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "ricardo306",
"author": "loum",
"weight": 10000,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32115297,
"trx_id": "5cf47b057500b69871615675c435959f4580c612",
"op_in_trx": 0,
"timestamp": "2019-04-17T06:05:06",
"virtual_op": false,
"trx_in_block": 15
}loumpublished a new post: utxo-set-sorted-merkle-tree2019/04/17 05:56:45
loumpublished a new post: utxo-set-sorted-merkle-tree
2019/04/17 05:56:45
| body | @@ -68,17 +68,16 @@ , %EC%9D%BC%EB%B6%80 %EB%82%B4%EC%9A%A9%EC%9D%80 -%EB%8A%94 %EC%9D%B4 %EB%82%A0%EC%A7%9C%EB%A5%BC %EA%B8%B0%EC%A4%80 |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["blockchain","bitcoin","merkle","tree","utxo"],"image":["https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png","https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png","https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | blockchain |
| Transaction Info | Block #32115130/Trx 7f4d66e64309d2ff3a10d68c1367991227756410 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -68,17 +68,16 @@\n , %EC%9D%BC%EB%B6%80 %EB%82%B4%EC%9A%A9%EC%9D%80\n-%EB%8A%94\n %EC%9D%B4 %EB%82%A0%EC%A7%9C%EB%A5%BC %EA%B8%B0%EC%A4%80\n",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"blockchain\",\"bitcoin\",\"merkle\",\"tree\",\"utxo\"],\"image\":[\"https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png\",\"https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png\",\"https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "blockchain"
}
],
"block": 32115130,
"trx_id": "7f4d66e64309d2ff3a10d68c1367991227756410",
"op_in_trx": 0,
"timestamp": "2019-04-17T05:56:45",
"virtual_op": false,
"trx_in_block": 8
}resteemyousent 0.001 HIVE to @loum- "Hi! I re-blog posts to 6500+ followers for only 0.03 SBD/Steem & I don't leave comments. Thanx ♥"2019/04/17 05:55:24
resteemyousent 0.001 HIVE to @loum- "Hi! I re-blog posts to 6500+ followers for only 0.03 SBD/Steem & I don't leave comments. Thanx ♥"
2019/04/17 05:55:24
| to | loum |
| from | resteemyou |
| memo | Hi! I re-blog posts to 6500+ followers for only 0.03 SBD/Steem & I don't leave comments. Thanx ♥ |
| amount | 0.001 HIVE |
| Transaction Info | Block #32115103/Trx a8879fab22a401266a882474973f203105956bfe |
View Raw JSON Data
{
"op": [
"transfer",
{
"to": "loum",
"from": "resteemyou",
"memo": "Hi! I re-blog posts to 6500+ followers for only 0.03 SBD/Steem & I don't leave comments. Thanx ♥",
"amount": "0.001 HIVE"
}
],
"block": 32115103,
"trx_id": "a8879fab22a401266a882474973f203105956bfe",
"op_in_trx": 0,
"timestamp": "2019-04-17T05:55:24",
"virtual_op": false,
"trx_in_block": 19
}serginoeffective vote applied for @loum / utxo-set-sorted-merkle-tree2019/04/17 05:55:06
serginoeffective vote applied for @loum / utxo-set-sorted-merkle-tree
2019/04/17 05:55:06
| voter | sergino |
| author | loum |
| weight | 7765 (77.65%) |
| rshares | 153346832 |
| permlink | utxo-set-sorted-merkle-tree |
| pending payout | 0.000 HBD |
| total vote weight | 12871 |
| Transaction Info | Block #32115097/Trx d3e9e96b51db6b3ef112c4d63f5c27eed1f13cf6 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "sergino",
"author": "loum",
"weight": 7765,
"rshares": 153346832,
"permlink": "utxo-set-sorted-merkle-tree",
"pending_payout": "0.000 HBD",
"total_vote_weight": 12871
}
],
"block": 32115097,
"trx_id": "d3e9e96b51db6b3ef112c4d63f5c27eed1f13cf6",
"op_in_trx": 1,
"timestamp": "2019-04-17T05:55:06",
"virtual_op": true,
"trx_in_block": 3
}serginoupvoted (2.00%) @loum / utxo-set-sorted-merkle-tree2019/04/17 05:55:06
serginoupvoted (2.00%) @loum / utxo-set-sorted-merkle-tree
2019/04/17 05:55:06
| voter | sergino |
| author | loum |
| weight | 200 (2.00%) |
| permlink | utxo-set-sorted-merkle-tree |
| Transaction Info | Block #32115097/Trx d3e9e96b51db6b3ef112c4d63f5c27eed1f13cf6 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "sergino",
"author": "loum",
"weight": 200,
"permlink": "utxo-set-sorted-merkle-tree"
}
],
"block": 32115097,
"trx_id": "d3e9e96b51db6b3ef112c4d63f5c27eed1f13cf6",
"op_in_trx": 0,
"timestamp": "2019-04-17T05:55:06",
"virtual_op": false,
"trx_in_block": 3
}loumpublished a new post: utxo-set-sorted-merkle-tree2019/04/17 05:46:03
loumpublished a new post: utxo-set-sorted-merkle-tree
2019/04/17 05:46:03
| body | <center> <h5>김성일 </h5></center> <br> /* 이 글은 2017년 7월 경에 작성했던 것이라서, 일부 내용은는이 날짜를 기준으로 작성되었다 */ <br> <center><h5>Abstract.</h5> </center> 비트코인은 다른 노드들을 믿지 못하는 비신뢰 특성 때문에, 새로 블록생성에 참여하는 새 노드는 초기 블록체인 동기화(Initial Blockchain Download, IBD)를 통해 전체 블록체인을 전송받고 이를 검증해야 한다. 하지만, 이 방법은 로드 데이터인 블록체인 전체를 다운받아야 하기 때문에 여러 가지 문제를 발생시킨다. 이 논문은 이를 해결하기 위한 방법 중에 새 노드가 전체 블록체인 대신에, 거래의 전체 상태인 UTXO set를 다운로드받는 UTXO 확정(UTXO commitments) 방법을 살펴본다. 하지만 이 방법은 현재 여러 문제로 적용되지 못하고 있다. 이를 해결하기 위해, 우리는 기존 트리를 이용하는 새로운 정렬된 머클트리(sorted merkle tree)를 제안한다. 이것은 UTXO set을 머클트리로 만들 때 기존의 머클트리에 비해 노드의 개수를 약 1/2로 줄일 수 있다. <h3>1 . 서론</h3> 비트코인(Bitcoin)과 같은 블록체인 기술은 신뢰하는 중앙기관이 없이 분산된 다수의 노드들이 피어-투-피어(peer-to-peer, p2p) 네트워크를 구성하여 데이터베이스(DB)인 블록체인을 관리하는 DB 기술이다.[1] 또한 이것은 각 노드들이 동일한 블록체인을 보관하도록 복제하는 복제 시스템(replication system)이다. P2P 네트워크를 구성하는 노드들은 작업증명(proof-of-work, PoW) 또는 지분증명(proof-of-stake, PoS) 합의 알고리즘을 통해서 어느 노드가 새로운 블록을 생성할지를 결정한다. 즉, 비트코인 네트워크에는 합의 알고리즘을 통해 노드들이 하나의 주체인(main chain)을 유지하여 이중지출 방지한다. 따라서 합의 알고리즘이 이중지출(doubling spending)을 막는 핵심적인 역할을 하고, 블록체인 자체는 추가 전용 데이터베이스(append-only database)에 불과하다. 블록체인은 추가 전용 DB이기 때문에, 그 크기가 선형적으로 계속 늘어날 수밖에 없다. 예로, 2017년 5월 20일(이하, ‘현재’라고 칭함)에 비트코인의 블록체인 사이즈는 116 GiB이었고, 최근 1년 동안 블록체인 사이즈는 47 GiB가 증가했다. 현재 비트코인 코어(bitcoin core)에서 블록 사이즈는 1 MiB로 고정되어 있고,[2] 평균적으로 10분에 한 번씩 블록을 생성하므로 1년 동안 추가될 수 있는 블록 사이즈는 1 MiB * 6 * 24 * 365 , 즉52.56 GiB이다. 현재 비트코인 네트워크의 예상 최대 거래 처리량은 초당 7거래로 알려져 있지만[3], 현재 평균적으로 약 3~4 거래를 처리하고 있다. 이에 반해서 비자카드에서 거래의 평균 초당 처리량은 약 2,000 거래이며, 최대(peak) 처리량은 초당 약 56,000 거래로 알려졌다.[3] 따라서 비트코인의 현재 거래 처리량은 매우 작다. 이 때문에, 만일 비트코인의 초당 거래 처리량이 크게 증가한다면, 블록체인의 사이즈 문제는 더욱 심각해질 것이다. 또한 블록체인은 추가 전용 DB이기 때문에 그 크기가 너무 빠르게 증가하는 피할 수 없는 문제를 가진다. <h3>2 . 비트코인에서 거래 및 거래의 전체 상태</h3> 비트코인에서 거래(transaction)는 하나 이상의 입력과 출력(one or more of inputs and outputs)으로 구성된다. 비트코인에서 거래의 출력(outputs)은 단 한 번만 입력(input)에서 소비될 수 있기 때문에, 소비되지 않은 거래 출력(unspent transaction outputs, UTXOs)과 이미 소비된 거래 출력(spent transaction outputs, STXOs)으로 구분된다. 구체적으로, 입력은 소유자가 소비할 수 있는 UTXO와 디지털 서명과 공개키로 구성되고, 출력은 새로운 UTXO를 생성하기 위한 지갑주소와 이체할 코인 개수로 이루어진다. 따라서 거래가 유효하려면, 입력에 STXO가 아닌 UTXO만 사용하여 소비해야 한다.[4] 결국 비트코인에서 거래는 UTXO를 소비하여 STXO로 만들고 새로운 UTXO를 생성하는 과정이다.[4] 비트코인 지갑은 일반적으로 거래의 입력과 출력을 디지털 서명하여 네트워크에 전파한다. 즉 비트코인은 소유권의 증거로 디지털 서명을 제공하는 서명 기반의 소유권 이전 시스템이다. 그림 1은 비트코인의 주요 DB인 맴풀(mempool), 블록체인 그리고 UTXO set을 보여준다. 여기서, 맴풀은 블록에 기록되기를 기다리는 미승인 거래(unconfirmed Tx)를 저장하는 DB이고, 이 때문에 특정 거래가 블록에 기록이 되면 이 거래는 맴풀에서 삭제된다. UTXO set는 미래에 사용할 수 있는 출력인 모든 UTXO를 모아놓은 DB이고, 이 때문에 새 블록이 전파될 때마다 이것의 내용이 바뀐다. 구체적으로, 새 블록이 전파될 때마다 이 블록에 포함된 거래에 의해서 STXO, 즉 소비한 UTXO를 UTXO set에서 제거하고, 새로 발생한 UTXO를 이것에 추가하여 내용을 업데이트한다. 따라서 UTXO set은 전체 계정 상태와 같이 거래의 전체 상태를 관리한다. 여기서 중요한 것은 “공개 블록체인(public blockchain)의 비신뢰 특성 때문에, 분산된 노드들이 블록체인을 통해서 모든 거래를 독립적으로 검증하여 거래의 전체 상태인 UTXO set를 완성하는 것이다.”는 것이다. 따라서 비트코인은 노드 관점에서 블록체인을 복제하여 이를 동기화하고, 이를 통해서 모든 거래를 독립적으로 검증하여 전체 상태인 UTXO 세트를 완성하는 것이다. 이는 비트코인의 비신뢰(trustless) 특성 때문이다. 결국 비트코인의 모든 상태는 UTXO set와 맴풀이 가지고 있다. 이때 UTXO 세트는 전체 상태인 모든 UTXO를 관리하고, 맴풀은 블록체인에 기록되기를 기다리는 모든 미승인 거래(unconfirmed Tx)를 관리한다. <center></center> 그림1. 비트코인의 주요 데이터베이스. 비트코인에서 UTXO set은 거래의 전체 상태를 가진 DB이고, 블록체인은 추가전용의 로그 DB이다. 이 둘은 블록에 포함된 승인된 거래(confirmed Tx)를 관리한다. 맴풀은 블록에 포함되기를 기다리는 미승인 거래들(unconfirmed Tx)을 관리하는 DB이다. 비트코인은 분산된 비신뢰 합의 알고리즘(distributed trustless consensus algorithm)이기 때문에 노드는 다른 노드들을 믿을 수 없다.[5] 이 때문에 노드 자신이 전체 블록체인을 독립적으로 검증해야 한다. 이것은 블록이 디지털 서명이 포함된 거래와 다른 블록과 체인으로 연결되어 있기 때문에 가능한 것이다. 이 때문에, 새 노드가 비트코인 네트워크에 처음 접속하면, 그는 전체 블록체인을 반드시 다운로드 받으며, 이를 초기 블록체인 동기화(Initial Block Download, IBD)라고 부른다[6]. 즉 IBD는 새 노드가 비신뢰 네트워크에서 독립성을 유지하기 위해 블록체인 전체를 다운받아 모든 거래를 검증하고, 이를 통해서 올바른 UTXO 세트를 독립적으로 완성하기 위한 목적으로 사용한다. 참고로, 비트코인 코어(bitcoin core) 0.10.0은 노드가 144개의 블록, 즉 약 24시간 이상 동안 네트워크에 접속하지 못하면, IBD를 다시 시작하여 블록체인을 동기화시킨다[6]. <h3>3 . 최근의 블록체인만 포함한 부분 삭제 노드(pruned node)</h3> 부분 삭제 노드(pruned node)는 전체 블록체인을 저장하지 않는 노드를 말한다.[7] 구체적으로 말하면, 새 노드가 전체 블록체인을 다운받고 이를 검증한 후, UTXO set을 완성한다. 그 후 이 노드는 특정 개수의 최근 블록체인만을 가지고 있고, 그전의 블록체인을 삭제한 부분 삭제 노드(pruned node)가 될 수 있다[7]. 이 노드는 전체 블록체인을 검증하여 거래의 상태인 UTXO set를 완성했기 때문에, 전체 블록체인 대신에 최신의 일부 블록체인만을 저장하고 있어도 올바로 동작한다. 따라서 만일 자신의 노드만 생각한다면, 노드가 일단 UTXO set을 완성한 후에 전체 블록체인을 가지고 있을 필요는 없다. 이 노드는 단지 블록체인에 포크가 발생하였을 경우를 대비하여 최근의 몇 개 블록만 저장해도 된다.[8]. 노드들이 전체 블록체인을 가지고 있는 목적은 새 노드들이 블록생산(채굴)에 참여할 수 있도록 이들에게 전체 블록체인을 제공하는 위한 것이다[9]. <center></center> 그림 2. (a) 전체 헤더부와 거래부를 저장하는 기존 블록체인, (b) 특정 개수의 최근 블록체인을 저장하는 부분 삭제 블록체인(pruned blockchain). 여기서, 부분 삭제 블록체인은 노드가 일정한 개수의 최근 블록을 가지고 있고, 그 이외의 블록은 삭제한다. 그림 2(a)는 전체 블록체인을 가지고 있는 기존 블록체인(conventional blockchain)을 보여준다. 여기서 h와 t는 블록체인의 헤더부(header part)와 거래부(transaction part)를 각각 나타내고, 아래 첨자는 블록의 생성순서를 나타낸다. 기존 블록체인은 그림 2(a)과 같이 최초 블록(genesis block)부터 최근 블록까지 전체 블록체인을 포함한다. 그림에서 화살표는 이전 블록의 블록해시를 현재 블록에 포함시켜서 체인으로 연결시킨 것을 나타낸다. 만일 새 노드가 비트코인 네트워크에 참여한다면, 이 노드는 이 그림 2(a)과 같이 전체 블록체인을 다운로드받기 위해 IBD를 진행해야 한다. 그리고 그림 2(b)는 특정 개수의 최근 블록체인을 저장한 부분 삭제 블록체인(pruned blockchain)을 보여준다. 부분 삭제 노드는 그림 2(b)와 같이 특정 개수의 최신 블록만을 가지고 있다.[7] 그림 2(b)의 경우, 이 노드는 m번째 블록부터 최신 블록인 n번째 블록을 포함하고, n — m은 일정한 상수이다. 노드는 전체 블록체인을 저장하여 검증하고 UTXO set을 완성한 후, 부분 삭제 노드가 될 수 있다. 하지만 이 경우, 이 노드는 새 노드가 네트워크에 참여하도록 전체 블록체인을 제공할 수는 없다. <h3>4 . 초기 UTXO 다운로드(Initial UTXO Download) 방법</h3> 비트코인에서 거래의 전체 상태인 UTXO set은 채굴의 편의를 위해서 메모리에 저장된다. 전체 UTXO set의 크기는 2017년 5월 20일 현재 약 1.9 GiB이었고, 당시 블록체인 크기의 약 1.6%에 불과할 정도로 작다.[10] 블록체인이 거래에 대한 추가전용 DB이기 때문에, 이 비율은 앞으로 점점 작아질 것이다. 이런 이유 때문에, 새 노드가 비트코인 네트워크에 처음 접속하여 IBD를 통해 전체 블록체인을 전송받는 것보다 전체 UTXO set을 전송받는 것이 더 좋은 방법이다. 즉, 만일 새 노드가 초기 동기화 동안 올바른 전체 UTXO set를 이웃 노드로부터 다운받을 수 있다면, 전체 블록체인을 다운받지 않아도 된다. 하지만, 공개 블록체인(public blockchain)에서 노드들은 서로를 믿지 못하는 비신뢰 특성 때문에, 새 노드가 이웃 노드들로부터 UTXO 세트를 직접 다운받는 것은 안전하지 않다. 왜냐하면, 새 노드가 다운로드 받은 UTXO set이 올바른 것인지를 판단할 수 없기 때문이다. 이를 해결하기 위해서, UTXO 확정 (UTXO commitments) 방법이 이미 제안되었고, 이를 경량 지갑(light wallet)에 적용하려는 여러 가지 제안들이 있었다.[11–13] 이것은 전체 UTXO set를 머클트리(merkle tree)로 구성하고, 이것의 루트 해시를 블록에 기록하는 방법이다. 그리고 새 노드는 전체 UTXO set을 전송받고 이를 머클트리로 구성하여 이것의 루트 해시를 구하고 블록에 기록된 루트해시를 비교하여 안전성을 검증한다. 즉 UTXO 확정은 p2p 네트워크에서 다른 노드로부터 전파 받은 UTXO set이 올바른지를 확인하는 데 사용할 수 있다. 이것을 초기 UTXO 동기화(initial UTXO download, IUD)라 부르자. IUD의 장점은 다음과 같다. 1) IUD는 기존의 IBD를 통해 전체 블록체인을 다운받는 방법보다 전송받는 데이터가 매우 작다. 이 때문에 새 노드가 매우 빨리 초기 동기화를 시킬 수 있다. 2) 기존의 IBD는 서명의 검증에 많은 CPU 자원이 필요하다. 하지만, IUD는 모든 블록을 검증하는 대신에, 전체 UTXO set을 검증하기 때문에 검증을 위한 계산량 및 시간을 크게 줄일 수 있다. 그렇지만 IUD는 노드의 독립성을 일부 포기한 것으로 보일 수 있다. 왜냐하면 기존의 IBD는 비신뢰 특성 때문에 새 노드가 전체 블록체인을 전송받아 이것에 포함된 모든 거래를 독립적으로 검증하기 때문이다. 하지만 비트코인에서 IUD가 안전한 이유는 공격자가 최근의 블록체인을 새로 만들 때 상당한 비용이 들기 때문이다. 즉, 새 노드가 IUD를 통해 UTXO set를 전송받은 후, 그가 몇 개의 최신 블록을 연속으로 검증하면 안전한 UTXO 세트를 전송받았는지 쉽게 검증할 수 있다. 그리고 비트코인 지갑은 거래가 포함된 블록 이후 6개의 새 블록이 생성되면 이체가 가능하다. 이와 유사하게, 예로 들면, 새 노드는 IUD 동안 먼저 최신 블록과 UTXO set을 전송받고 이를 검증한 후, 연속으로 5개의 새로운 블록을 전파 받아서 이 UTXO set를 계속 검증한다. 이 과정을 모두 통과할 경우 새 노드는 이 UTXO set을 사용할 수 있다. 블록에 UTXO set의 루트 해시를 기록하는 방법은 아래와 같을 수 있다. 예를 들면, 노드들은 기존 방법대로 난이도 조건을 만족하는 블록해시를 먼저 찾은 후에, UTXO set의 머클트리를 구성하여 그것의 루트 해시를 계산한다. 그리고 기존 블록과 동일하게 블록을 만들고, 추가로 머클트리의 루트 해시를 블록에 기록한다. 또한 이 루트 해시와 블록해시로 새로운 해시를 만들어 이를 블록에 추가할 수 있다. <h3>5 . 기존 트리의 정렬을 이용한 정렬된 머클트리(sorted merkle tree)</h3> 그림 3(a)에 보인 기존 머클트리를 먼저 살펴보자. 이 그림의 기존 머클트리는 이진트리(binary tree)이고, 데이터인 UTXO가 모두 말단 노드(leaf nodes)에 위치한다. 그리고 이것의 내부노드(interior nodes)는 두 자식 노드를 연결하여 계산한 해시로 구성하고 루트 해시와 연결된다.[14] 그림 3에서 u와 h는 각각 UTXO와 해시(hash)를 나타내고, 아래첨자는 이들의 이름을 가리킨다. 내부노드의 해시를 구하는 예를 들면, 2번 노드의 해시는 h2 = hf(h4 || h5)로 계산한다. 이때, hf는 해시함수이고, ||는 연결(concatenation) 연산자이다. 따라서 기존 머클트리에서 루트 노드의 루트 해시(h1)는 단말노드에 위치한 데이터인 모든 UTXO에 의존하게 된다. 이 때문에, 만일 데이터가 하나라도 바뀌면, 해당 노드로부터 루트 노드로 이어지는 노드들의 해시가 바뀌고 결국 루트 해시(h1)가 바뀐다. <center></center> 그림 3. (a) 기존 머클트리. 머클트리는 말단 노드에 모든 UTXO가 위치하고, 내부 노드는 두 개의 자식 노드의 해시로 구성된 이진트리이다. (b) 우리가 제안한 머클트리. 머클트리는 모든 UTXO를 기존의 이진트리로 정렬하고, 그 후에 노드의 해시를 구한다. 이때, 내부 노드는 해시를 포함한다. 이 경우, 내부노드에 UTXO를 포함하기 때문에 머클트리의 노드의 개수는 기존 머클트리 대비 약 1/2로 작아진다. 2017년 5월 20일 현재 UTXO set의 크기는 약 1.9 GiB이고, 이것은 약 5천4백만 개의 UTXO를 포함한다.[15] 이것은 앞으로 더 증가할 수밖에 없다. 그리고 전체 UTXO set를 머클트리로 구성하고 이것의 루트 해시를 구하는 것은 많은 해시 계산이 필요하다. 하지만 비트코인에서 새 블록이 생성될 때마다, UTXO set에 새로 생성된 UTXO를 삽입하고 소비한 UTXO를 삭제한다. 새 블록마다, UTXO set의 머클트리를 업데이트하고 내부노드의 해시를 다시 계산하는 것은 너무 많은 해시 계산이 발생하는 등의 문제가 있었다. 이런 이유로 아직까지 비트코인에 IUD를 적용하지 못하고 있다[13]. 더불어 기존 머클트리는 모든 데이터, 즉 전체 UTXO가 단말 노드에 위치하기 때문에, UTXO가 정렬되어 있지 않는다. 이 때문에, 기존 머클트리는 특정 데이터의 비존재 증명에 이용할 수 없었다.[16] 이를 해결하기 위해, 우리는 기존 이진트리를 이용한 정렬된 머클트리(sorted merkle tree)를 제안한다. 그림 1(b)는 우리가 제안한 새로운 머클트리를 보여준다. 이 머클트리는 기존의 이진트리를 이용하여 데이터인 UTXO를 모든 노드에 정렬시키고, 그 후에 내부노드의 해시를 계산한다. 이 때문에, 우리가 제안한 머클트리는 AVL 트리 또는 레드-블랙 트리(red-black tree) 등과 같은 시간 복잡도가 O(log n)인 균형 이진트리(balanced binary tree) 등을 사용할 수 있다. 구체적으로, 우리가 제안한 머클트리는 새 블록이 생성될 때마다 먼저 기존 UTXO의 이진트리에 사용된 UTXO 및 새로 생성된 UTXO를 삭제 및 삽입하고, 그 후에 해당하는 노드의 해시를 부가적으로 계산한다. 구체적으로, 그림 3(b)에서 말단노드의 해시는 h2와 h3이고, 이들은 hself = hf(uleft || uright || uself)로 구한다. 예를 들면, 2번 노드의 해시(h2)는 u4, u5와 u2를 연결하여 구한다. 그리고 만일 자식 노드에 해시가 존재할 경우, 이 노드의 해시는 자식노드의 해시와 자신의 UTXO를 연결하여 구한다. 예를 들면, 루트 해시(h1)는 h2, h3와 u1을 연결하여 구한다. 이 머클트리의 장점은 다음과 같다. 첫 번째, 이것은 내부노드에 데이터를 저장하고 있기 때문에 기존 머클트리에 비해서 이진트리의 노드 개수를 약 1/2로 줄인다. 이 때문에 기존 머클트리에 비해 해시의 개수가 약 절반으로 줄어든다. 즉 데이터의 업데이트 시에 해시 계산의 개수가 줄어든다. 두 번째, 제안한 머클트리는 기존 이진트리로 데이터인 UTXO를 먼저 정렬하고, 이 때문에 이것은 특정 UTXO의 존재 여부를 쉽게 증명할 수 있다. 따라서 경량 지갑에서 특정 거래의 존재 여부에 대한 검증이 가능하다. 우리의 머클트리에서 데이터의 비존재 증명은 비존재하는 데이터의 양 옆에 있는 데이터가 바로 이웃하고 있는지를 증명하면 가능하다. [16] 참고로, 경량지갑에서 거래의 존재 증명은 아래와 같이 확인할 수 있다. 예를 들면, 그림 3(b)의 제안한 머클트리에서 u2의 검증은 u4, u5, u2, h3가 필요하다. 이에 비해 그림 3(a)의 기존 머클트리에서 u2의 검증은 u1, u2, h5, h3가 필요하다. 더불어, 기존 머클트리는 각 데이터, 즉 UTXO를 검증할 때, 단 하나의 이웃 데이터를 포함한다. 하지만 우리가 제안한 머클트리는 내부 노드에 데이터를 포함하기 때문에 각 데이터를 검증할 때, 기존 머클트리에 비해서 더 많은 데이터를 포함해야 한다. 하지만, 비트코인은 공개 블록체인이므로, 특정 거래의 검증 과정에서 특정 utxo를 노출하는 것은 전혀 문제가 되지 않는다. 그리고 이더리움은 UTXO 대신에 계정(accounts)을 가지고 있고, 머클 페트리샤 트리(merkle patricia tree)에 저장한다.[17] 비슷하게 코스모스 코인도 계정을 가지고 있고, 이를 머클 IAVL+ 트리(merkle IAVL+ tree)에 저장된다.[18] 하지만, 이들도 모두 단말노드에 계정 데이터를 저장한다. 따라서 이더리움과 같이 계정의 전체 상태를 가진 암호화폐에도 우리가 제안한 정렬된 머클트리 구조를 적용할 수 있다. <h3>6 . 결론</h3> 본 논문은 비트코인에서 초기 동기화 시에 UTXO 확정(commitments)을 이용하기 위해, 머클트리의 노드의 개수를 약 1/2로 줄인 정렬된 머클트리(sorted merkle tree)를 제안한다. 이 머클트리를 사용하면, 매 블록마다 삭제 및 추가되는 UTXO에 때문에 발생하는 머클트리에서 변화된 전체 해시 계산 개수를 줄일 수 있다. 이 때문에 전체 블록체인을 다운받는 초기 블록 다운로드(IBD) 대신에, UTXO set을 다운로드받는 초기 UTXO 다운로드(IUD)를 사용할 수 있을 것으로 추측한다. 결론적으로 우리는 IUD를 사용할 수 있도록, 머클트리에서 노드의 개수를 기존 머클트리에 비해서 약 1/2로 줄인 새로운 머클트리 구조를 제안한다. </h3>References</h3> [1] Satoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System.” https://bitcoin.org/bitcoin.pdf (2009) [2] No Auther, “Bitcoin Core.” https://en.wikipedia.org/wiki/Bitcoin_Core (accessed 3 April 2018) [3] No Auther, “Scalability.” Bitcoin Wikipedia https://en.bitcoin.it/wiki/Scalability (accessed 3 April 2018) [4] No Auther, “Block Chain Overview.” https://bitcoin.org/en/developer-guide#block-chain-overview [5] Aleksandr Bulkin, “Explaining blockchain — how proof of work enables trustless consensus.” https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845 [6] No Auther, “Initial Block Download.” https://bitcoin.org/en/developer-guide#initial-block-download [7] No Auther, “Block file pruning.” https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning [8] No Auther, ”Chain Reorganization.” https://en.bitcoin.it/wiki/Chain_Reorganization [9] No Auther, “Full Node.” https://bitcoin.org/en/developer-guide#full-node [10] No Auther. “Unspent transaction output set.” Statoshi.info http://statoshi.info/dashboard/db/unspent-transaction-output-set (accessed 5 April 2017) [11] Andrew Miller. “Storing UTXOs in a Balanced Merkle Tree.” Bitcointalk https://bitcointalk.org/index.php?topic=101734.0 [12] No Auther. “Pettycoin Revisted Part I: Utxo Commitments.” http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html [13] Peter Todd. “Making UTXO Set Growth Irrelevant With Low-Latency Delayed TXO Commitments.” https://petertodd.org/2016/delayed-txo-commitments [14] No Auther. “Merkle tree.” https://en.wikipedia.org/wiki/Merkle_tree [15] No Auther. “Number of Unspent Transaction Outputs.” https://blockchain.info/charts/utxo-count?timespan=all [16] No Auther. “sorted-merkle-tree-issue693.” https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0 [17] Gavin Wood. “Ethereum: A secure decentralized generalized transaction ledger” No Publisher (2014) http://gavwood.com/paper.pdf [18] Jae Kwon and Ethan Buchman. “Cosmos whitepaper.” Cosmos https://cosmos.network/whitepaper (accessed 3 April 2018) |
| title | 비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree) |
| author | loum |
| permlink | utxo-set-sorted-merkle-tree |
| json metadata | {"tags":["blockchain","bitcoin","merkle","tree","utxo"],"image":["https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png","https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png","https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png"],"links":["https://bitcoin.org/bitcoin.pdf","https://en.wikipedia.org/wiki/Bitcoin_Core","https://en.bitcoin.it/wiki/Scalability","https://bitcoin.org/en/developer-guide#block-chain-overview","https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845","https://bitcoin.org/en/developer-guide#initial-block-download","https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning","https://en.bitcoin.it/wiki/Chain_Reorganization","https://bitcoin.org/en/developer-guide#full-node","http://statoshi.info/dashboard/db/unspent-transaction-output-set","https://bitcointalk.org/index.php?topic=101734.0","http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html","https://petertodd.org/2016/delayed-txo-commitments","https://en.wikipedia.org/wiki/Merkle_tree","https://blockchain.info/charts/utxo-count?timespan=all","https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0","http://gavwood.com/paper.pdf","https://cosmos.network/whitepaper"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | blockchain |
| Transaction Info | Block #32114917/Trx b10f7872da0c1cc7f0e9c4cc2d78d8e1c441825c |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "<center> <h5>김성일 </h5></center>\n<br>\n\n/* 이 글은 2017년 7월 경에 작성했던 것이라서, 일부 내용은는이 날짜를 기준으로 작성되었다 */\n<br>\n\n<center><h5>Abstract.</h5> </center>\n비트코인은 다른 노드들을 믿지 못하는 비신뢰 특성 때문에, 새로 블록생성에 참여하는 새 노드는 초기 블록체인 동기화(Initial Blockchain Download, IBD)를 통해 전체 블록체인을 전송받고 이를 검증해야 한다. 하지만, 이 방법은 로드 데이터인 블록체인 전체를 다운받아야 하기 때문에 여러 가지 문제를 발생시킨다. 이 논문은 이를 해결하기 위한 방법 중에 새 노드가 전체 블록체인 대신에, 거래의 전체 상태인 UTXO set를 다운로드받는 UTXO 확정(UTXO commitments) 방법을 살펴본다. 하지만 이 방법은 현재 여러 문제로 적용되지 못하고 있다. 이를 해결하기 위해, 우리는 기존 트리를 이용하는 새로운 정렬된 머클트리(sorted merkle tree)를 제안한다. 이것은 UTXO set을 머클트리로 만들 때 기존의 머클트리에 비해 노드의 개수를 약 1/2로 줄일 수 있다.\n\n<h3>1 . 서론</h3>\n비트코인(Bitcoin)과 같은 블록체인 기술은 신뢰하는 중앙기관이 없이 분산된 다수의 노드들이 피어-투-피어(peer-to-peer, p2p) 네트워크를 구성하여 데이터베이스(DB)인 블록체인을 관리하는 DB 기술이다.[1] 또한 이것은 각 노드들이 동일한 블록체인을 보관하도록 복제하는 복제 시스템(replication system)이다. P2P 네트워크를 구성하는 노드들은 작업증명(proof-of-work, PoW) 또는 지분증명(proof-of-stake, PoS) 합의 알고리즘을 통해서 어느 노드가 새로운 블록을 생성할지를 결정한다. 즉, 비트코인 네트워크에는 합의 알고리즘을 통해 노드들이 하나의 주체인(main chain)을 유지하여 이중지출 방지한다. 따라서 합의 알고리즘이 이중지출(doubling spending)을 막는 핵심적인 역할을 하고, 블록체인 자체는 추가 전용 데이터베이스(append-only database)에 불과하다.\n\n블록체인은 추가 전용 DB이기 때문에, 그 크기가 선형적으로 계속 늘어날 수밖에 없다. 예로, 2017년 5월 20일(이하, ‘현재’라고 칭함)에 비트코인의 블록체인 사이즈는 116 GiB이었고, 최근 1년 동안 블록체인 사이즈는 47 GiB가 증가했다. 현재 비트코인 코어(bitcoin core)에서 블록 사이즈는 1 MiB로 고정되어 있고,[2] 평균적으로 10분에 한 번씩 블록을 생성하므로 1년 동안 추가될 수 있는 블록 사이즈는 1 MiB * 6 * 24 * 365 , 즉52.56 GiB이다. 현재 비트코인 네트워크의 예상 최대 거래 처리량은 초당 7거래로 알려져 있지만[3], 현재 평균적으로 약 3~4 거래를 처리하고 있다. 이에 반해서 비자카드에서 거래의 평균 초당 처리량은 약 2,000 거래이며, 최대(peak) 처리량은 초당 약 56,000 거래로 알려졌다.[3] 따라서 비트코인의 현재 거래 처리량은 매우 작다. 이 때문에, 만일 비트코인의 초당 거래 처리량이 크게 증가한다면, 블록체인의 사이즈 문제는 더욱 심각해질 것이다. 또한 블록체인은 추가 전용 DB이기 때문에 그 크기가 너무 빠르게 증가하는 피할 수 없는 문제를 가진다.\n\n<h3>2 . 비트코인에서 거래 및 거래의 전체 상태</h3>\n비트코인에서 거래(transaction)는 하나 이상의 입력과 출력(one or more of inputs and outputs)으로 구성된다. 비트코인에서 거래의 출력(outputs)은 단 한 번만 입력(input)에서 소비될 수 있기 때문에, 소비되지 않은 거래 출력(unspent transaction outputs, UTXOs)과 이미 소비된 거래 출력(spent transaction outputs, STXOs)으로 구분된다. 구체적으로, 입력은 소유자가 소비할 수 있는 UTXO와 디지털 서명과 공개키로 구성되고, 출력은 새로운 UTXO를 생성하기 위한 지갑주소와 이체할 코인 개수로 이루어진다. 따라서 거래가 유효하려면, 입력에 STXO가 아닌 UTXO만 사용하여 소비해야 한다.[4] 결국 비트코인에서 거래는 UTXO를 소비하여 STXO로 만들고 새로운 UTXO를 생성하는 과정이다.[4] 비트코인 지갑은 일반적으로 거래의 입력과 출력을 디지털 서명하여 네트워크에 전파한다. 즉 비트코인은 소유권의 증거로 디지털 서명을 제공하는 서명 기반의 소유권 이전 시스템이다.\n\n그림 1은 비트코인의 주요 DB인 맴풀(mempool), 블록체인 그리고 UTXO set을 보여준다. 여기서, 맴풀은 블록에 기록되기를 기다리는 미승인 거래(unconfirmed Tx)를 저장하는 DB이고, 이 때문에 특정 거래가 블록에 기록이 되면 이 거래는 맴풀에서 삭제된다. UTXO set는 미래에 사용할 수 있는 출력인 모든 UTXO를 모아놓은 DB이고, 이 때문에 새 블록이 전파될 때마다 이것의 내용이 바뀐다. 구체적으로, 새 블록이 전파될 때마다 이 블록에 포함된 거래에 의해서 STXO, 즉 소비한 UTXO를 UTXO set에서 제거하고, 새로 발생한 UTXO를 이것에 추가하여 내용을 업데이트한다. 따라서 UTXO set은 전체 계정 상태와 같이 거래의 전체 상태를 관리한다. 여기서 중요한 것은 “공개 블록체인(public blockchain)의 비신뢰 특성 때문에, 분산된 노드들이 블록체인을 통해서 모든 거래를 독립적으로 검증하여 거래의 전체 상태인 UTXO set를 완성하는 것이다.”는 것이다. 따라서 비트코인은 노드 관점에서 블록체인을 복제하여 이를 동기화하고, 이를 통해서 모든 거래를 독립적으로 검증하여 전체 상태인 UTXO 세트를 완성하는 것이다. 이는 비트코인의 비신뢰(trustless) 특성 때문이다. 결국 비트코인의 모든 상태는 UTXO set와 맴풀이 가지고 있다. 이때 UTXO 세트는 전체 상태인 모든 UTXO를 관리하고, 맴풀은 블록체인에 기록되기를 기다리는 모든 미승인 거래(unconfirmed Tx)를 관리한다.\n\n<center></center>\n그림1. 비트코인의 주요 데이터베이스. 비트코인에서 UTXO set은 거래의 전체 상태를 가진 DB이고, 블록체인은 추가전용의 로그 DB이다. 이 둘은 블록에 포함된 승인된 거래(confirmed Tx)를 관리한다. 맴풀은 블록에 포함되기를 기다리는 미승인 거래들(unconfirmed Tx)을 관리하는 DB이다.\n비트코인은 분산된 비신뢰 합의 알고리즘(distributed trustless consensus algorithm)이기 때문에 노드는 다른 노드들을 믿을 수 없다.[5] 이 때문에 노드 자신이 전체 블록체인을 독립적으로 검증해야 한다. 이것은 블록이 디지털 서명이 포함된 거래와 다른 블록과 체인으로 연결되어 있기 때문에 가능한 것이다. 이 때문에, 새 노드가 비트코인 네트워크에 처음 접속하면, 그는 전체 블록체인을 반드시 다운로드 받으며, 이를 초기 블록체인 동기화(Initial Block Download, IBD)라고 부른다[6]. 즉 IBD는 새 노드가 비신뢰 네트워크에서 독립성을 유지하기 위해 블록체인 전체를 다운받아 모든 거래를 검증하고, 이를 통해서 올바른 UTXO 세트를 독립적으로 완성하기 위한 목적으로 사용한다. 참고로, 비트코인 코어(bitcoin core) 0.10.0은 노드가 144개의 블록, 즉 약 24시간 이상 동안 네트워크에 접속하지 못하면, IBD를 다시 시작하여 블록체인을 동기화시킨다[6].\n\n<h3>3 . 최근의 블록체인만 포함한 부분 삭제 노드(pruned node)</h3>\n부분 삭제 노드(pruned node)는 전체 블록체인을 저장하지 않는 노드를 말한다.[7] 구체적으로 말하면, 새 노드가 전체 블록체인을 다운받고 이를 검증한 후, UTXO set을 완성한다. 그 후 이 노드는 특정 개수의 최근 블록체인만을 가지고 있고, 그전의 블록체인을 삭제한 부분 삭제 노드(pruned node)가 될 수 있다[7]. 이 노드는 전체 블록체인을 검증하여 거래의 상태인 UTXO set를 완성했기 때문에, 전체 블록체인 대신에 최신의 일부 블록체인만을 저장하고 있어도 올바로 동작한다. 따라서 만일 자신의 노드만 생각한다면, 노드가 일단 UTXO set을 완성한 후에 전체 블록체인을 가지고 있을 필요는 없다. 이 노드는 단지 블록체인에 포크가 발생하였을 경우를 대비하여 최근의 몇 개 블록만 저장해도 된다.[8]. 노드들이 전체 블록체인을 가지고 있는 목적은 새 노드들이 블록생산(채굴)에 참여할 수 있도록 이들에게 전체 블록체인을 제공하는 위한 것이다[9].\n\n<center></center>\n그림 2. (a) 전체 헤더부와 거래부를 저장하는 기존 블록체인, (b) 특정 개수의 최근 블록체인을 저장하는 부분 삭제 블록체인(pruned blockchain). 여기서, 부분 삭제 블록체인은 노드가 일정한 개수의 최근 블록을 가지고 있고, 그 이외의 블록은 삭제한다.\n\n그림 2(a)는 전체 블록체인을 가지고 있는 기존 블록체인(conventional blockchain)을 보여준다. 여기서 h와 t는 블록체인의 헤더부(header part)와 거래부(transaction part)를 각각 나타내고, 아래 첨자는 블록의 생성순서를 나타낸다. 기존 블록체인은 그림 2(a)과 같이 최초 블록(genesis block)부터 최근 블록까지 전체 블록체인을 포함한다. 그림에서 화살표는 이전 블록의 블록해시를 현재 블록에 포함시켜서 체인으로 연결시킨 것을 나타낸다. 만일 새 노드가 비트코인 네트워크에 참여한다면, 이 노드는 이 그림 2(a)과 같이 전체 블록체인을 다운로드받기 위해 IBD를 진행해야 한다. 그리고 그림 2(b)는 특정 개수의 최근 블록체인을 저장한 부분 삭제 블록체인(pruned blockchain)을 보여준다. 부분 삭제 노드는 그림 2(b)와 같이 특정 개수의 최신 블록만을 가지고 있다.[7] 그림 2(b)의 경우, 이 노드는 m번째 블록부터 최신 블록인 n번째 블록을 포함하고, n — m은 일정한 상수이다. 노드는 전체 블록체인을 저장하여 검증하고 UTXO set을 완성한 후, 부분 삭제 노드가 될 수 있다. 하지만 이 경우, 이 노드는 새 노드가 네트워크에 참여하도록 전체 블록체인을 제공할 수는 없다.\n\n<h3>4 . 초기 UTXO 다운로드(Initial UTXO Download) 방법</h3>\n비트코인에서 거래의 전체 상태인 UTXO set은 채굴의 편의를 위해서 메모리에 저장된다. 전체 UTXO set의 크기는 2017년 5월 20일 현재 약 1.9 GiB이었고, 당시 블록체인 크기의 약 1.6%에 불과할 정도로 작다.[10] 블록체인이 거래에 대한 추가전용 DB이기 때문에, 이 비율은 앞으로 점점 작아질 것이다. 이런 이유 때문에, 새 노드가 비트코인 네트워크에 처음 접속하여 IBD를 통해 전체 블록체인을 전송받는 것보다 전체 UTXO set을 전송받는 것이 더 좋은 방법이다. 즉, 만일 새 노드가 초기 동기화 동안 올바른 전체 UTXO set를 이웃 노드로부터 다운받을 수 있다면, 전체 블록체인을 다운받지 않아도 된다. 하지만, 공개 블록체인(public blockchain)에서 노드들은 서로를 믿지 못하는 비신뢰 특성 때문에, 새 노드가 이웃 노드들로부터 UTXO 세트를 직접 다운받는 것은 안전하지 않다. 왜냐하면, 새 노드가 다운로드 받은 UTXO set이 올바른 것인지를 판단할 수 없기 때문이다.\n\n이를 해결하기 위해서, UTXO 확정 (UTXO commitments) 방법이 이미 제안되었고, 이를 경량 지갑(light wallet)에 적용하려는 여러 가지 제안들이 있었다.[11–13] 이것은 전체 UTXO set를 머클트리(merkle tree)로 구성하고, 이것의 루트 해시를 블록에 기록하는 방법이다. 그리고 새 노드는 전체 UTXO set을 전송받고 이를 머클트리로 구성하여 이것의 루트 해시를 구하고 블록에 기록된 루트해시를 비교하여 안전성을 검증한다. 즉 UTXO 확정은 p2p 네트워크에서 다른 노드로부터 전파 받은 UTXO set이 올바른지를 확인하는 데 사용할 수 있다. 이것을 초기 UTXO 동기화(initial UTXO download, IUD)라 부르자. IUD의 장점은 다음과 같다. 1) IUD는 기존의 IBD를 통해 전체 블록체인을 다운받는 방법보다 전송받는 데이터가 매우 작다. 이 때문에 새 노드가 매우 빨리 초기 동기화를 시킬 수 있다. 2) 기존의 IBD는 서명의 검증에 많은 CPU 자원이 필요하다. 하지만, IUD는 모든 블록을 검증하는 대신에, 전체 UTXO set을 검증하기 때문에 검증을 위한 계산량 및 시간을 크게 줄일 수 있다.\n\n그렇지만 IUD는 노드의 독립성을 일부 포기한 것으로 보일 수 있다. 왜냐하면 기존의 IBD는 비신뢰 특성 때문에 새 노드가 전체 블록체인을 전송받아 이것에 포함된 모든 거래를 독립적으로 검증하기 때문이다. 하지만 비트코인에서 IUD가 안전한 이유는 공격자가 최근의 블록체인을 새로 만들 때 상당한 비용이 들기 때문이다. 즉, 새 노드가 IUD를 통해 UTXO set를 전송받은 후, 그가 몇 개의 최신 블록을 연속으로 검증하면 안전한 UTXO 세트를 전송받았는지 쉽게 검증할 수 있다. 그리고 비트코인 지갑은 거래가 포함된 블록 이후 6개의 새 블록이 생성되면 이체가 가능하다. 이와 유사하게, 예로 들면, 새 노드는 IUD 동안 먼저 최신 블록과 UTXO set을 전송받고 이를 검증한 후, 연속으로 5개의 새로운 블록을 전파 받아서 이 UTXO set를 계속 검증한다. 이 과정을 모두 통과할 경우 새 노드는 이 UTXO set을 사용할 수 있다.\n\n블록에 UTXO set의 루트 해시를 기록하는 방법은 아래와 같을 수 있다. 예를 들면, 노드들은 기존 방법대로 난이도 조건을 만족하는 블록해시를 먼저 찾은 후에, UTXO set의 머클트리를 구성하여 그것의 루트 해시를 계산한다. 그리고 기존 블록과 동일하게 블록을 만들고, 추가로 머클트리의 루트 해시를 블록에 기록한다. 또한 이 루트 해시와 블록해시로 새로운 해시를 만들어 이를 블록에 추가할 수 있다.\n\n<h3>5 . 기존 트리의 정렬을 이용한 정렬된 머클트리(sorted merkle tree)</h3>\n그림 3(a)에 보인 기존 머클트리를 먼저 살펴보자. 이 그림의 기존 머클트리는 이진트리(binary tree)이고, 데이터인 UTXO가 모두 말단 노드(leaf nodes)에 위치한다. 그리고 이것의 내부노드(interior nodes)는 두 자식 노드를 연결하여 계산한 해시로 구성하고 루트 해시와 연결된다.[14] 그림 3에서 u와 h는 각각 UTXO와 해시(hash)를 나타내고, 아래첨자는 이들의 이름을 가리킨다. 내부노드의 해시를 구하는 예를 들면, 2번 노드의 해시는 h2 = hf(h4 || h5)로 계산한다. 이때, hf는 해시함수이고, ||는 연결(concatenation) 연산자이다. 따라서 기존 머클트리에서 루트 노드의 루트 해시(h1)는 단말노드에 위치한 데이터인 모든 UTXO에 의존하게 된다. 이 때문에, 만일 데이터가 하나라도 바뀌면, 해당 노드로부터 루트 노드로 이어지는 노드들의 해시가 바뀌고 결국 루트 해시(h1)가 바뀐다.\n\n<center></center>\n그림 3. (a) 기존 머클트리. 머클트리는 말단 노드에 모든 UTXO가 위치하고, 내부 노드는 두 개의 자식 노드의 해시로 구성된 이진트리이다. (b) 우리가 제안한 머클트리. 머클트리는 모든 UTXO를 기존의 이진트리로 정렬하고, 그 후에 노드의 해시를 구한다. 이때, 내부 노드는 해시를 포함한다. 이 경우, 내부노드에 UTXO를 포함하기 때문에 머클트리의 노드의 개수는 기존 머클트리 대비 약 1/2로 작아진다.\n\n2017년 5월 20일 현재 UTXO set의 크기는 약 1.9 GiB이고, 이것은 약 5천4백만 개의 UTXO를 포함한다.[15] 이것은 앞으로 더 증가할 수밖에 없다. 그리고 전체 UTXO set를 머클트리로 구성하고 이것의 루트 해시를 구하는 것은 많은 해시 계산이 필요하다. 하지만 비트코인에서 새 블록이 생성될 때마다, UTXO set에 새로 생성된 UTXO를 삽입하고 소비한 UTXO를 삭제한다. 새 블록마다, UTXO set의 머클트리를 업데이트하고 내부노드의 해시를 다시 계산하는 것은 너무 많은 해시 계산이 발생하는 등의 문제가 있었다. 이런 이유로 아직까지 비트코인에 IUD를 적용하지 못하고 있다[13]. 더불어 기존 머클트리는 모든 데이터, 즉 전체 UTXO가 단말 노드에 위치하기 때문에, UTXO가 정렬되어 있지 않는다. 이 때문에, 기존 머클트리는 특정 데이터의 비존재 증명에 이용할 수 없었다.[16]\n\n이를 해결하기 위해, 우리는 기존 이진트리를 이용한 정렬된 머클트리(sorted merkle tree)를 제안한다. 그림 1(b)는 우리가 제안한 새로운 머클트리를 보여준다. 이 머클트리는 기존의 이진트리를 이용하여 데이터인 UTXO를 모든 노드에 정렬시키고, 그 후에 내부노드의 해시를 계산한다. 이 때문에, 우리가 제안한 머클트리는 AVL 트리 또는 레드-블랙 트리(red-black tree) 등과 같은 시간 복잡도가 O(log n)인 균형 이진트리(balanced binary tree) 등을 사용할 수 있다. 구체적으로, 우리가 제안한 머클트리는 새 블록이 생성될 때마다 먼저 기존 UTXO의 이진트리에 사용된 UTXO 및 새로 생성된 UTXO를 삭제 및 삽입하고, 그 후에 해당하는 노드의 해시를 부가적으로 계산한다. 구체적으로, 그림 3(b)에서 말단노드의 해시는 h2와 h3이고, 이들은 hself = hf(uleft || uright || uself)로 구한다. 예를 들면, 2번 노드의 해시(h2)는 u4, u5와 u2를 연결하여 구한다. 그리고 만일 자식 노드에 해시가 존재할 경우, 이 노드의 해시는 자식노드의 해시와 자신의 UTXO를 연결하여 구한다. 예를 들면, 루트 해시(h1)는 h2, h3와 u1을 연결하여 구한다. 이 머클트리의 장점은 다음과 같다. 첫 번째, 이것은 내부노드에 데이터를 저장하고 있기 때문에 기존 머클트리에 비해서 이진트리의 노드 개수를 약 1/2로 줄인다. 이 때문에 기존 머클트리에 비해 해시의 개수가 약 절반으로 줄어든다. 즉 데이터의 업데이트 시에 해시 계산의 개수가 줄어든다. 두 번째, 제안한 머클트리는 기존 이진트리로 데이터인 UTXO를 먼저 정렬하고, 이 때문에 이것은 특정 UTXO의 존재 여부를 쉽게 증명할 수 있다. 따라서 경량 지갑에서 특정 거래의 존재 여부에 대한 검증이 가능하다. 우리의 머클트리에서 데이터의 비존재 증명은 비존재하는 데이터의 양 옆에 있는 데이터가 바로 이웃하고 있는지를 증명하면 가능하다. [16] 참고로, 경량지갑에서 거래의 존재 증명은 아래와 같이 확인할 수 있다. 예를 들면, 그림 3(b)의 제안한 머클트리에서 u2의 검증은 u4, u5, u2, h3가 필요하다. 이에 비해 그림 3(a)의 기존 머클트리에서 u2의 검증은 u1, u2, h5, h3가 필요하다.\n\n더불어, 기존 머클트리는 각 데이터, 즉 UTXO를 검증할 때, 단 하나의 이웃 데이터를 포함한다. 하지만 우리가 제안한 머클트리는 내부 노드에 데이터를 포함하기 때문에 각 데이터를 검증할 때, 기존 머클트리에 비해서 더 많은 데이터를 포함해야 한다. 하지만, 비트코인은 공개 블록체인이므로, 특정 거래의 검증 과정에서 특정 utxo를 노출하는 것은 전혀 문제가 되지 않는다.\n\n그리고 이더리움은 UTXO 대신에 계정(accounts)을 가지고 있고, 머클 페트리샤 트리(merkle patricia tree)에 저장한다.[17] 비슷하게 코스모스 코인도 계정을 가지고 있고, 이를 머클 IAVL+ 트리(merkle IAVL+ tree)에 저장된다.[18] 하지만, 이들도 모두 단말노드에 계정 데이터를 저장한다. 따라서 이더리움과 같이 계정의 전체 상태를 가진 암호화폐에도 우리가 제안한 정렬된 머클트리 구조를 적용할 수 있다.\n\n<h3>6 . 결론</h3>\n본 논문은 비트코인에서 초기 동기화 시에 UTXO 확정(commitments)을 이용하기 위해, 머클트리의 노드의 개수를 약 1/2로 줄인 정렬된 머클트리(sorted merkle tree)를 제안한다. 이 머클트리를 사용하면, 매 블록마다 삭제 및 추가되는 UTXO에 때문에 발생하는 머클트리에서 변화된 전체 해시 계산 개수를 줄일 수 있다. 이 때문에 전체 블록체인을 다운받는 초기 블록 다운로드(IBD) 대신에, UTXO set을 다운로드받는 초기 UTXO 다운로드(IUD)를 사용할 수 있을 것으로 추측한다. 결론적으로 우리는 IUD를 사용할 수 있도록, 머클트리에서 노드의 개수를 기존 머클트리에 비해서 약 1/2로 줄인 새로운 머클트리 구조를 제안한다.\n\n</h3>References</h3>\n[1] Satoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System.” https://bitcoin.org/bitcoin.pdf (2009)\n[2] No Auther, “Bitcoin Core.” https://en.wikipedia.org/wiki/Bitcoin_Core (accessed 3 April 2018)\n[3] No Auther, “Scalability.” Bitcoin Wikipedia https://en.bitcoin.it/wiki/Scalability (accessed 3 April 2018)\n[4] No Auther, “Block Chain Overview.” https://bitcoin.org/en/developer-guide#block-chain-overview\n[5] Aleksandr Bulkin, “Explaining blockchain — how proof of work enables trustless consensus.” https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\n[6] No Auther, “Initial Block Download.” https://bitcoin.org/en/developer-guide#initial-block-download\n[7] No Auther, “Block file pruning.” https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\n[8] No Auther, ”Chain Reorganization.” https://en.bitcoin.it/wiki/Chain_Reorganization\n[9] No Auther, “Full Node.” https://bitcoin.org/en/developer-guide#full-node\n[10] No Auther. “Unspent transaction output set.” Statoshi.info http://statoshi.info/dashboard/db/unspent-transaction-output-set (accessed 5 April 2017)\n[11] Andrew Miller. “Storing UTXOs in a Balanced Merkle Tree.” Bitcointalk https://bitcointalk.org/index.php?topic=101734.0\n[12] No Auther. “Pettycoin Revisted Part I: Utxo Commitments.” http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\n[13] Peter Todd. “Making UTXO Set Growth Irrelevant With Low-Latency Delayed TXO Commitments.” https://petertodd.org/2016/delayed-txo-commitments\n[14] No Auther. “Merkle tree.” https://en.wikipedia.org/wiki/Merkle_tree\n[15] No Auther. “Number of Unspent Transaction Outputs.” https://blockchain.info/charts/utxo-count?timespan=all\n[16] No Auther. “sorted-merkle-tree-issue693.” https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\n[17] Gavin Wood. “Ethereum: A secure decentralized generalized transaction ledger” No Publisher (2014) http://gavwood.com/paper.pdf\n[18] Jae Kwon and Ethan Buchman. “Cosmos whitepaper.” Cosmos https://cosmos.network/whitepaper (accessed 3 April 2018)",
"title": "비트코인에서 UTXO set을 초기 동기화하기 위한 정렬된 머클트리(sorted merkle tree)",
"author": "loum",
"permlink": "utxo-set-sorted-merkle-tree",
"json_metadata": "{\"tags\":[\"blockchain\",\"bitcoin\",\"merkle\",\"tree\",\"utxo\"],\"image\":[\"https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png\",\"https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png\",\"https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png\"],\"links\":[\"https://bitcoin.org/bitcoin.pdf\",\"https://en.wikipedia.org/wiki/Bitcoin_Core\",\"https://en.bitcoin.it/wiki/Scalability\",\"https://bitcoin.org/en/developer-guide#block-chain-overview\",\"https://keepingstock.net/explaining-blockchain-how-proof-of-work-enables-trustless-consensus-2abed27f0845\",\"https://bitcoin.org/en/developer-guide#initial-block-download\",\"https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning\",\"https://en.bitcoin.it/wiki/Chain_Reorganization\",\"https://bitcoin.org/en/developer-guide#full-node\",\"http://statoshi.info/dashboard/db/unspent-transaction-output-set\",\"https://bitcointalk.org/index.php?topic=101734.0\",\"http://rustyrussell.github.io/pettycoin/2014/11/29/Pettycoin-Revisted-Part-I:-UTXO-Commitments.html\",\"https://petertodd.org/2016/delayed-txo-commitments\",\"https://en.wikipedia.org/wiki/Merkle_tree\",\"https://blockchain.info/charts/utxo-count?timespan=all\",\"https://gist.github.com/chris-belcher/eb9abe417d74a7b5f20aabe6bff10de0\",\"http://gavwood.com/paper.pdf\",\"https://cosmos.network/whitepaper\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "blockchain"
}
],
"block": 32114917,
"trx_id": "b10f7872da0c1cc7f0e9c4cc2d78d8e1c441825c",
"op_in_trx": 0,
"timestamp": "2019-04-17T05:46:03",
"virtual_op": false,
"trx_in_block": 13
}dvshinupvoted (100.00%) @loum / eos-bp-stake2019/02/12 11:43:03
dvshinupvoted (100.00%) @loum / eos-bp-stake
2019/02/12 11:43:03
| voter | dvshin |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | eos-bp-stake |
| Transaction Info | Block #30281681/Trx dc1fda089b32653d9acf11de0c10b6c895eea03b |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "dvshin",
"author": "loum",
"weight": 10000,
"permlink": "eos-bp-stake"
}
],
"block": 30281681,
"trx_id": "dc1fda089b32653d9acf11de0c10b6c895eea03b",
"op_in_trx": 0,
"timestamp": "2019-02-12T11:43:03",
"virtual_op": false,
"trx_in_block": 5
}palanmindupvoted (100.00%) @loum / eos-ethereum2019/01/19 05:24:03
palanmindupvoted (100.00%) @loum / eos-ethereum
2019/01/19 05:24:03
| voter | palanmind |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | eos-ethereum |
| Transaction Info | Block #29583546/Trx bde109f33609d192d892c07be5408da9e5f1121e |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "palanmind",
"author": "loum",
"weight": 10000,
"permlink": "eos-ethereum"
}
],
"block": 29583546,
"trx_id": "bde109f33609d192d892c07be5408da9e5f1121e",
"op_in_trx": 0,
"timestamp": "2019-01-19T05:24:03",
"virtual_op": false,
"trx_in_block": 11
}palanmindupvoted (100.00%) @loum / hardfork-softfork2018/12/28 03:39:09
palanmindupvoted (100.00%) @loum / hardfork-softfork
2018/12/28 03:39:09
| voter | palanmind |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | hardfork-softfork |
| Transaction Info | Block #28948430/Trx d3553bf4659dd1209c56be6d6788975e8d5dadde |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "palanmind",
"author": "loum",
"weight": 10000,
"permlink": "hardfork-softfork"
}
],
"block": 28948430,
"trx_id": "d3553bf4659dd1209c56be6d6788975e8d5dadde",
"op_in_trx": 0,
"timestamp": "2018-12-28T03:39:09",
"virtual_op": false,
"trx_in_block": 5
}2018/12/03 06:36:12
2018/12/03 06:36:12
| voter | manstart |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | zbdd9 |
| Transaction Info | Block #28232396/Trx f3d413e90bc0160fe3b333171296f9d63567bc08 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "manstart",
"author": "loum",
"weight": 10000,
"permlink": "zbdd9"
}
],
"block": 28232396,
"trx_id": "f3d413e90bc0160fe3b333171296f9d63567bc08",
"op_in_trx": 0,
"timestamp": "2018-12-03T06:36:12",
"virtual_op": false,
"trx_in_block": 16
}loumclaimed reward balance: 0.032 HBD, 0.051 HP2018/11/08 12:50:33
loumclaimed reward balance: 0.032 HBD, 0.051 HP
2018/11/08 12:50:33
| account | loum |
| reward hbd | 0.032 HBD |
| reward hive | 0.000 HIVE |
| reward vests | 82.671129 VESTS |
| Transaction Info | Block #27520253/Trx f753b7cb0b0028d82cdaf103deb1e4b63513cca1 |
View Raw JSON Data
{
"op": [
"claim_reward_balance",
{
"account": "loum",
"reward_hbd": "0.032 HBD",
"reward_hive": "0.000 HIVE",
"reward_vests": "82.671129 VESTS"
}
],
"block": 27520253,
"trx_id": "f753b7cb0b0028d82cdaf103deb1e4b63513cca1",
"op_in_trx": 0,
"timestamp": "2018-11-08T12:50:33",
"virtual_op": false,
"trx_in_block": 19
}loumupdated payout for 4k3m9e-eos2018/11/05 05:15:51
loumupdated payout for 4k3m9e-eos
2018/11/05 05:15:51
| author | loum |
| permlink | 4k3m9e-eos |
| Transaction Info | Block #27424846/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "loum",
"permlink": "4k3m9e-eos"
}
],
"block": 27424846,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 5,
"timestamp": "2018-11-05T05:15:51",
"virtual_op": true,
"trx_in_block": 4294967295
}loumreceived 0.085 HBD reward share for 4k3m9e-eos2018/11/05 05:15:51
loumreceived 0.085 HBD reward share for 4k3m9e-eos
2018/11/05 05:15:51
| author | loum |
| payout | 0.085 HBD |
| permlink | 4k3m9e-eos |
| author rewards | 82 |
| total payout value | 0.064 HBD |
| curator payout value | 0.020 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #27424846/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "loum",
"payout": "0.085 HBD",
"permlink": "4k3m9e-eos",
"author_rewards": 82,
"total_payout_value": "0.064 HBD",
"curator_payout_value": "0.020 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 27424846,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 4,
"timestamp": "2018-11-05T05:15:51",
"virtual_op": true,
"trx_in_block": 4294967295
}loumreceived 0.032 HBD, 0.051 HP author reward for @loum / 4k3m9e-eos2018/11/05 05:15:51
loumreceived 0.032 HBD, 0.051 HP author reward for @loum / 4k3m9e-eos
2018/11/05 05:15:51
| author | loum |
| permlink | 4k3m9e-eos |
| hbd payout | 0.032 HBD |
| hive payout | 0.000 HIVE |
| vesting payout | 82.671129 VESTS |
| payout must be claimed | true |
| curators vesting payout | 52.425594 VESTS |
| Transaction Info | Block #27424846/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "loum",
"permlink": "4k3m9e-eos",
"hbd_payout": "0.032 HBD",
"hive_payout": "0.000 HIVE",
"vesting_payout": "82.671129 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "52.425594 VESTS"
}
],
"block": 27424846,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 3,
"timestamp": "2018-11-05T05:15:51",
"virtual_op": true,
"trx_in_block": 4294967295
}loumupdated their account properties2018/11/04 11:23:57
loumupdated their account properties
2018/11/04 11:23:57
| account | loum |
| memo key | STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT |
| json metadata | {"profile":{"about":"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt ","name":"loum"}} |
| Transaction Info | Block #27403444/Trx ad36185c5f015b070ba17eee315d12a134b8b68f |
View Raw JSON Data
{
"op": [
"account_update",
{
"account": "loum",
"memo_key": "STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT",
"json_metadata": "{\"profile\":{\"about\":\"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt \",\"name\":\"loum\"}}"
}
],
"block": 27403444,
"trx_id": "ad36185c5f015b070ba17eee315d12a134b8b68f",
"op_in_trx": 0,
"timestamp": "2018-11-04T11:23:57",
"virtual_op": false,
"trx_in_block": 5
}2018/11/03 10:59:45
2018/11/03 10:59:45
| to | bittrex |
| from | loum |
| memo | 2983fbcfe7154aa3a10 |
| amount | 1.173 HBD |
| Transaction Info | Block #27374177/Trx dcf899bd0783905f6b1e660bc46190f3400db4df |
View Raw JSON Data
{
"op": [
"transfer",
{
"to": "bittrex",
"from": "loum",
"memo": "2983fbcfe7154aa3a10",
"amount": "1.173 HBD"
}
],
"block": 27374177,
"trx_id": "dcf899bd0783905f6b1e660bc46190f3400db4df",
"op_in_trx": 0,
"timestamp": "2018-11-03T10:59:45",
"virtual_op": false,
"trx_in_block": 3
}2018/11/03 10:59:18
2018/11/03 10:59:18
| to | bittrex |
| from | loum |
| memo | 38f880007d654f1aaa8 |
| amount | 11.230 HIVE |
| Transaction Info | Block #27374168/Trx 3133e116aea1f221c1febc8fc99d68eccc7e3194 |
View Raw JSON Data
{
"op": [
"transfer",
{
"to": "bittrex",
"from": "loum",
"memo": "38f880007d654f1aaa8",
"amount": "11.230 HIVE"
}
],
"block": 27374168,
"trx_id": "3133e116aea1f221c1febc8fc99d68eccc7e3194",
"op_in_trx": 0,
"timestamp": "2018-11-03T10:59:18",
"virtual_op": false,
"trx_in_block": 32
}notyet0407upvoted (100.00%) @loum / 12018/11/01 07:11:30
notyet0407upvoted (100.00%) @loum / 1
2018/11/01 07:11:30
| voter | notyet0407 |
| author | loum |
| weight | 10000 (100.00%) |
| permlink | 1 |
| Transaction Info | Block #27312049/Trx 4c16c22b7df997edcc8c5f78201074ce63f33c69 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "notyet0407",
"author": "loum",
"weight": 10000,
"permlink": "1"
}
],
"block": 27312049,
"trx_id": "4c16c22b7df997edcc8c5f78201074ce63f33c69",
"op_in_trx": 0,
"timestamp": "2018-11-01T07:11:30",
"virtual_op": false,
"trx_in_block": 30
}chungjheffective vote applied for @loum / 4k3m9e-eos2018/10/31 23:50:33
chungjheffective vote applied for @loum / 4k3m9e-eos
2018/10/31 23:50:33
| voter | chungjh |
| author | loum |
| weight | 1236 (12.36%) |
| rshares | 647796171 |
| permlink | 4k3m9e-eos |
| pending payout | 0.084 HBD |
| total vote weight | 271471 |
| Transaction Info | Block #27303237/Trx d047f771e329cd3c3f7420ca8a2a40c9236686b7 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "chungjh",
"author": "loum",
"weight": 1236,
"rshares": 647796171,
"permlink": "4k3m9e-eos",
"pending_payout": "0.084 HBD",
"total_vote_weight": 271471
}
],
"block": 27303237,
"trx_id": "d047f771e329cd3c3f7420ca8a2a40c9236686b7",
"op_in_trx": 1,
"timestamp": "2018-10-31T23:50:33",
"virtual_op": true,
"trx_in_block": 7
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": 52837389541,
"last_update_time": 1573202859
},
"downvote_manabar": {
"current_mana": 13209347384,
"last_update_time": 1573202859
},
"rc_account": {
"account": "loum",
"rc_manabar": {
"current_mana": 54767251473,
"last_update_time": 1573202859
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": 54858138514,
"delegated_rc": 0,
"received_delegated_rc": 0
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"about":"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt ","name":"loum"} |
| JSON METADATA | |
| profile | {"about":"제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt","name":"loum","location":"Seoul, Korea"} |
{
"posting_json_metadata": {
"profile": {
"about": "EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt ",
"name": "loum"
}
},
"json_metadata": {
"profile": {
"about": "제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt",
"name": "loum",
"location": "Seoul, Korea"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM8NFaszEbFgqHYNePvo6hBmy3VfeAUvhuiy6htmmPEC4d7i2sQB1/1
Active
Single Signature
Public Keys
STM7nHptf87cAWsdyKCLQDVzsotpCXNzWzFYzV3ULPZ7GCHNoMycS1/1
Posting
Single Signature
Public Keys
STM4zatsUEkF6omzaefba6y6nZZxvLgvVpJ5TqMNDEzYQpDZYnwXV1/1
Memo
STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM8NFaszEbFgqHYNePvo6hBmy3VfeAUvhuiy6htmmPEC4d7i2sQB",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7nHptf87cAWsdyKCLQDVzsotpCXNzWzFYzV3ULPZ7GCHNoMycS",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM4zatsUEkF6omzaefba6y6nZZxvLgvVpJ5TqMNDEzYQpDZYnwXV",
1
]
]
},
"memo": "STM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT"
}Witness Votes
0 / 30
No active witness votes.
[]