Ecoer Logo
loum

@loum

25

EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt

hive.blog/@loum
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
market_balance
0.000HIVE
savings_balance
0.000HIVE
reward_hive_balance
0.000HIVE
HIVE POWER
Own HP
32.555HP
Delegated Out
0.000HP
Delegation In
0.000HP
Effective Power
32.555HP
Reward HP (pending)
0.000HP
HBD
hbd_balance
0.032HBD
hbd_conversions
0.000HBD
hbd_market_balance
0.000HBD
savings_hbd_balance
0.000HBD
reward_hbd_balance
0.000HBD
{
  "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

nameloum
id27619
rank0
reputation0
created2016-07-19T02:36:30
recovery_accountsteem
proxyNone
invited_bynull
post_count716
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2019-10-22T07:51:45
last_root_post2019-10-22T07:51:45
last_vote_time2018-06-27T02:37:09
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votesNone
governance_vote_expiration_ts1969-12-31T23:59:59
balance0.035 HIVE
savings_balance0.000 HIVE
hbd_balance0.032 HBD
savings_hbd_balance0.000 HBD
vesting_shares52837.389541 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares0.000000 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 HIVE
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update2017-06-22T02:20:54
last_account_update2019-10-08T13:51:21
minedNo
hbd_seconds0
hbd_last_interest_payment2019-11-08T08:47:39
savings_hbd_last_interest_payment2017-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

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
loumaccount expired: @loum
2022/11/04 20:53:42
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
}
2020/10/11 18:46:42
body
title
authorla-frengo
permlinkre-zkr3j-20201011t184638z
json metadata{"app": "beem/0.23.9"}
parent authorloum
parent permlinkzkr3j
Transaction InfoBlock #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 HP
2019/11/08 08:47:42
accountloum
reward hbd0.000 HBD
reward hive0.033 HIVE
reward vests67.146506 VESTS
Transaction InfoBlock #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
}
2019/10/29 07:51:45
authorloum
permlink3y9vyi-utxo-set-sorted-merkle-tree
Transaction InfoBlock #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-tree
2019/10/29 07:51:45
authorloum
payout0.026 HBD
permlink3y9vyi-utxo-set-sorted-merkle-tree
author rewards67
total payout value0.013 HBD
curator payout value0.013 HBD
beneficiary payout value0.000 HBD
Transaction InfoBlock #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-tree
2019/10/29 07:51:45
authorloum
permlink3y9vyi-utxo-set-sorted-merkle-tree
hbd payout0.000 HBD
hive payout0.033 HIVE
vesting payout67.146506 VESTS
payout must be claimedtrue
curators vesting payout128.368321 VESTS
Transaction InfoBlock #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
}
2019/10/24 07:36:48
voternnaraoh
authorloum
weight67646
rshares138269279346
permlink3y9vyi-utxo-set-sorted-merkle-tree
pending payout0.027 HBD
total vote weight76749
Transaction InfoBlock #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
}
2019/10/24 07:36:48
voternnaraoh
authorloum
weight10000 (100.00%)
permlink3y9vyi-utxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
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)
authorloum
permlink3y9vyi-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 permlinkbitcoin
Transaction InfoBlock #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
}
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)
authorloum
permlink3y9vyi-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 permlinkbitcoin
Transaction InfoBlock #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
}
2019/10/22 08:24:24
voterjonghun98
authorloum
weight330 (3.30%)
rshares664204643
permlink3y9vyi-utxo-set-sorted-merkle-tree
pending payout0.003 HBD
total vote weight9103
Transaction InfoBlock #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
}
2019/10/22 08:24:24
voterjonghun98
authorloum
weight10000 (100.00%)
permlink3y9vyi-utxo-set-sorted-merkle-tree
Transaction InfoBlock #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-tree
2019/10/22 08:02:24
voteryff
authorloum
weight5163 (51.63%)
rshares10367425682
permlink3y9vyi-utxo-set-sorted-merkle-tree
pending payout0.003 HBD
total vote weight8773
Transaction InfoBlock #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
}
2019/10/22 08:02:24
voteryff
authorloum
weight5000 (50.00%)
permlink3y9vyi-utxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
2019/10/22 07:55:27
voterstatsexpert
authorloum
weight2635 (26.35%)
rshares7235320822
permlink3y9vyi-utxo-set-sorted-merkle-tree
pending payout0.001 HBD
total vote weight3610
Transaction InfoBlock #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
}
2019/10/22 07:55:27
voterstatsexpert
authorloum
weight10000 (100.00%)
permlink3y9vyi-utxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
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)
authorloum
permlink3y9vyi-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 permlinkbitcoin
Transaction InfoBlock #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
}
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)
authorloum
permlink3y9vyi-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 permlinkbitcoin
Transaction InfoBlock #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 properties
2019/10/08 13:51:24
accountloum
memo keySTM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT
json metadata{"profile":{"about":"제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt","name":"loum","location":"Seoul, Korea"}}
Transaction InfoBlock #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 properties
2019/10/08 13:51:09
accountloum
memo keySTM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT
json metadata{"profile":{"about":"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt","name":"loum","location":"Seoul, Korea"}}
Transaction InfoBlock #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
}
dtubesent 0.001 HIVE to @loum- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 15:31:18
toloum
fromdtube
memoTime is running out, claim your DTube account now before anyone else can! Login at https://d.tube
amount0.001 HIVE
Transaction InfoBlock #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
}
2019/08/08 18:21:45
voternewbizz
authorloum
weight10000 (100.00%)
permlinksimilarities-between-blockchain-and-dna
Transaction InfoBlock #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
bodyCongratulations @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
authorsteemitboard
permlinksteemitboard-notify-loum-20190719t040651000z
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorloum
parent permlinkvod
Transaction InfoBlock #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
}
loumremoved vote from (0.00%) @loum / vod
2019/05/03 04:44:48
voterloum
authorloum
weight0 (0.00%)
permlinkvod
Transaction InfoBlock #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-tree
2019/05/03 04:44:45
voterloum
authorloum
weight0 (0.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
loumupvoted (100.00%) @loum / vod
2019/05/03 04:44:30
voterloum
authorloum
weight10000 (100.00%)
permlinkvod
Transaction InfoBlock #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
}
2019/05/03 04:44:27
voterloum
authorloum
weight10000 (100.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
loumupdated payout for vod
2019/04/26 01:39:51
authorloum
permlinkvod
Transaction InfoBlock #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
}
2019/04/24 06:24:00
authorloum
permlinkre-loum-utxo-set-sorted-merkle-tree-20190417t062356902z
Transaction InfoBlock #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
}
2019/04/24 05:46:00
authorloum
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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 / vod
2019/04/23 05:46:57
votercoinfarmer165
authorloum
weight1890 (18.90%)
rshares495377702
permlinkvod
pending payout0.006 HBD
total vote weight104786
Transaction InfoBlock #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 / vod
2019/04/23 05:46:57
votercoinfarmer165
authorloum
weight10000 (100.00%)
permlinkvod
Transaction InfoBlock #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 / vod
2019/04/22 20:36:39
voterdj-on-steem
authorloum
weight44106
rshares6383073939
permlinkvod
pending payout0.006 HBD
total vote weight102896
Transaction InfoBlock #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 / vod
2019/04/22 20:36:39
voterdj-on-steem
authorloum
weight3100 (31.00%)
permlinkvod
Transaction InfoBlock #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-tree
2019/04/20 18:43:06
voterdj-on-steem
authorloum
weight29453
rshares5964206985
permlinkutxo-set-sorted-merkle-tree
pending payout0.008 HBD
total vote weight114354
Transaction InfoBlock #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
}
2019/04/20 18:43:06
voterdj-on-steem
authorloum
weight3100 (31.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
loumpublished a new post: vod
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[한국은행 동영상 강의] 지급결재 시스템의 이해
authorloum
permlinkvod
json metadata{"tags":["payment","settlement"],"links":["https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&amp;menuNo=200144&amp;listType=G&amp;pageIndex=3"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkpayment
Transaction InfoBlock #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&amp;menuNo=200144&amp;listType=G&amp;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 / vod
2019/04/19 02:07:33
voterblockcreate
authorloum
weight41328
rshares3107102594
permlinkvod
pending payout0.002 HBD
total vote weight58790
Transaction InfoBlock #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 / vod
2019/04/19 02:07:33
voterblockcreate
authorloum
weight100 (1.00%)
permlinkvod
Transaction InfoBlock #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
}
serginoeffective vote applied for @loum / vod
2019/04/19 01:48:54
votersergino
authorloum
weight10477
rshares303760236
permlinkvod
pending payout0.000 HBD
total vote weight17462
Transaction InfoBlock #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
}
serginoupvoted (2.00%) @loum / vod
2019/04/19 01:48:54
votersergino
authorloum
weight200 (2.00%)
permlinkvod
Transaction InfoBlock #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
}
loumfollowed @wans
2019/04/19 01:46:15
idfollow
json["follow",{"follower":"loum","following":"wans","what":["blog"]}]
required auths[]
required posting auths["loum"]
Transaction InfoBlock #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 @eosnodeone
2019/04/19 01:46:00
idfollow
json["follow",{"follower":"loum","following":"eosnodeone","what":[]}]
required auths[]
required posting auths["loum"]
Transaction InfoBlock #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
}
loumpublished a new post: vod
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] 지급결재 시스템의 이해
authorloum
permlinkvod
json metadata{"tags":["payment","settlement"],"links":["https://www.bok.or.kr/portal/bbs/B0000217/view.do?nttId=10045105&amp;menuNo=200144&amp;listType=G&amp;pageIndex=3"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkpayment
Transaction InfoBlock #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&amp;menuNo=200144&amp;listType=G&amp;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
}
loumunfollowed @eosphere
2019/04/17 07:02:39
idfollow
json["follow",{"follower":"loum","following":"eosphere","what":[]}]
required auths[]
required posting auths["loum"]
Transaction InfoBlock #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 @eosnation
2019/04/17 07:02:15
idfollow
json["follow",{"follower":"loum","following":"eosnation","what":[]}]
required auths[]
required posting auths["loum"]
Transaction InfoBlock #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
}
loumunfollowed @dexeosio
2019/04/17 07:02:09
idfollow
json["follow",{"follower":"loum","following":"dexeosio","what":[]}]
required auths[]
required posting auths["loum"]
Transaction InfoBlock #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
body블록체인은 은행 통장의 모든 거래기록과 같습니다. 노드는 블록체인의 전체 거래 기록을 처음부터 마지막까지 잔고를 계산하는 방법을 사용합니다. 하지만 현재 은행 잔고를 동기화할 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인 데이터를 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 논문입니다.
title
authorloum
permlinkre-loum-utxo-set-sorted-merkle-tree-20190417t062356902z
json metadata{"tags":["blockchain"],"app":"steemit/0.1"}
parent authorloum
parent permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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
body블록체인은 은행 통장의 모든 거래기록과 같습니다. 블록체인은 마치 노드가 이런 전체 거래 기록을 처음부터 계산하여 마지막 잔고를 계산하는 방법을 사용합니다. 하지만 우리는 현재의 은행 잔고를 마지막 거래와 같이 적혀있는 것을 보고 바로 알 수 있습니다. 이와 마찬가지로, 비트코인도 일종의 로그 데이터인 전체 블록체인을 가지고 있는 것이 아니라 마지막 잔고인 UTXO set만을 동기화 시키는 방법에 대한 것입니다.
title
authorloum
permlinkre-loum-utxo-set-sorted-merkle-tree-20190417t062356902z
json metadata{"tags":["blockchain"],"app":"steemit/0.1"}
parent authorloum
parent permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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-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)
authorloum
permlinkutxo-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 permlinkblockchain
Transaction InfoBlock #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-tree
2019/04/17 06:16:42
voterjonghun98
authorloum
weight1806 (18.06%)
rshares236676218
permlinkutxo-set-sorted-merkle-tree
pending payout0.004 HBD
total vote weight84901
Transaction InfoBlock #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
}
2019/04/17 06:16:42
voterjonghun98
authorloum
weight10000 (100.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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
}
2019/04/17 06:16:36
voterdragonticketer
authorloum
weight49095
rshares5442015049
permlinkutxo-set-sorted-merkle-tree
pending payout0.004 HBD
total vote weight83095
Transaction InfoBlock #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
}
2019/04/17 06:16:36
voterdragonticketer
authorloum
weight10000 (100.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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-tree
2019/04/17 06:05:06
voterricardo306
authorloum
weight21129
rshares1001197496
permlinkutxo-set-sorted-merkle-tree
pending payout0.000 HBD
total vote weight34000
Transaction InfoBlock #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
}
2019/04/17 06:05:06
voterricardo306
authorloum
weight10000 (100.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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-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)
authorloum
permlinkutxo-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 permlinkblockchain
Transaction InfoBlock #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
toloum
fromresteemyou
memoHi! I re-blog posts to 6500+ followers for only 0.03 SBD/Steem & I don't leave comments. Thanx ♥
amount0.001 HIVE
Transaction InfoBlock #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-tree
2019/04/17 05:55:06
votersergino
authorloum
weight7765 (77.65%)
rshares153346832
permlinkutxo-set-sorted-merkle-tree
pending payout0.000 HBD
total vote weight12871
Transaction InfoBlock #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
}
2019/04/17 05:55:06
votersergino
authorloum
weight200 (2.00%)
permlinkutxo-set-sorted-merkle-tree
Transaction InfoBlock #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-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>![fig1.png](https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png)</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>![fig2.png](https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png)</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>![fig3.png](https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png)</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)
authorloum
permlinkutxo-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 permlinkblockchain
Transaction InfoBlock #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>![fig1.png](https://cdn.steemitimages.com/DQmehiKmBH4gwbnAhWymQ3iNo88CxWizUyJWtp3vPCCfqDn/fig1.png)</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>![fig2.png](https://cdn.steemitimages.com/DQmWvT63aneVv51GZLvb3zgCnJKCKNutnRTHx3bYAaMtTvP/fig2.png)</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>![fig3.png](https://cdn.steemitimages.com/DQmWKaoaCzAMgSaczWANdsSATJKjn4uqc59nCQUDCfTnMFE/fig3.png)</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-stake
2019/02/12 11:43:03
voterdvshin
authorloum
weight10000 (100.00%)
permlinkeos-bp-stake
Transaction InfoBlock #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-ethereum
2019/01/19 05:24:03
voterpalanmind
authorloum
weight10000 (100.00%)
permlinkeos-ethereum
Transaction InfoBlock #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-softfork
2018/12/28 03:39:09
voterpalanmind
authorloum
weight10000 (100.00%)
permlinkhardfork-softfork
Transaction InfoBlock #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
}
manstartupvoted (100.00%) @loum / zbdd9
2018/12/03 06:36:12
votermanstart
authorloum
weight10000 (100.00%)
permlinkzbdd9
Transaction InfoBlock #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 HP
2018/11/08 12:50:33
accountloum
reward hbd0.032 HBD
reward hive0.000 HIVE
reward vests82.671129 VESTS
Transaction InfoBlock #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-eos
2018/11/05 05:15:51
authorloum
permlink4k3m9e-eos
Transaction InfoBlock #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-eos
2018/11/05 05:15:51
authorloum
payout0.085 HBD
permlink4k3m9e-eos
author rewards82
total payout value0.064 HBD
curator payout value0.020 HBD
beneficiary payout value0.000 HBD
Transaction InfoBlock #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-eos
2018/11/05 05:15:51
authorloum
permlink4k3m9e-eos
hbd payout0.032 HBD
hive payout0.000 HIVE
vesting payout82.671129 VESTS
payout must be claimedtrue
curators vesting payout52.425594 VESTS
Transaction InfoBlock #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 properties
2018/11/04 11:23:57
accountloum
memo keySTM6JAxKTLGQn9izx1vk14ayQZkbva7TxMBiXSFNEJk6cfThZaejT
json metadata{"profile":{"about":"EOS 노드원의 공동창업자 로움입니다. 제가 17.5.8일에 Ledger 저널에 제출한 논문: https://goo.gl/EprsXt ","name":"loum"}}
Transaction InfoBlock #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
}
loumsent 1.173 HBD to @bittrex- "2983fbcfe7154aa3a10"
2018/11/03 10:59:45
tobittrex
fromloum
memo2983fbcfe7154aa3a10
amount1.173 HBD
Transaction InfoBlock #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
}
loumsent 11.230 HIVE to @bittrex- "38f880007d654f1aaa8"
2018/11/03 10:59:18
tobittrex
fromloum
memo38f880007d654f1aaa8
amount11.230 HIVE
Transaction InfoBlock #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 / 1
2018/11/01 07:11:30
voternotyet0407
authorloum
weight10000 (100.00%)
permlink1
Transaction InfoBlock #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-eos
2018/10/31 23:50:33
voterchungjh
authorloum
weight1236 (12.36%)
rshares647796171
permlink4k3m9e-eos
pending payout0.084 HBD
total vote weight271471
Transaction InfoBlock #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
}

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