<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>성재의 블로그</title>
    <link>https://sungjae0309.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 24 Jun 2026 16:37:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sungjae0309</managingEditor>
    <image>
      <title>성재의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7262828/attach/cb4bb737df564602aeedba19ae1d7483</url>
      <link>https://sungjae0309.tistory.com</link>
    </image>
    <item>
      <title>영지식 증명 : Completeness</title>
      <link>https://sungjae0309.tistory.com/163</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이제 영지식 증명의 수학적인 정의도 알아보고자 한다. 우선 첫번째 조건인 Completeness 완정성을 충족해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;완전성 Completeness&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜로 비밀 번호, 정답을 알고 있는 사람이라면, 검증을 항상 통과해야 한다는 뜻이다. 수식으로 적으면 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1782120336680&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Pr[V(x,&amp;pi;)=1]&amp;asymp;1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;257&quot; data-start=&quot;245&quot; data-section-id=&quot;1l0q8ko&quot;&gt;&lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;/span&gt;: 검증자&lt;/li&gt;
&lt;li data-end=&quot;273&quot; data-start=&quot;258&quot; data-section-id=&quot;ykv97e&quot;&gt;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;: 공개된 문제&lt;/li&gt;
&lt;li data-end=&quot;287&quot; data-start=&quot;274&quot; data-section-id=&quot;10r2eq6&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;pi;&lt;/span&gt;&lt;/span&gt;: 증명&lt;/li&gt;
&lt;li data-end=&quot;319&quot; data-start=&quot;288&quot; data-section-id=&quot;1hdh7yv&quot;&gt;&lt;span&gt;&lt;span&gt;V(x,&amp;pi;)=1 : &lt;/span&gt;&lt;/span&gt;검증자가 &amp;ldquo;맞다&amp;rdquo;고 판단&lt;/li&gt;
&lt;li data-end=&quot;345&quot; data-start=&quot;320&quot; data-section-id=&quot;19k09x3&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;asymp;1 &lt;/span&gt;&lt;/span&gt;거의 항상 통과&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;수식&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;162&quot; data-start=&quot;150&quot; data-section-id=&quot;mdztsp&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. &lt;span&gt;&lt;span&gt;Pr&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;206&quot; data-start=&quot;174&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Probability&lt;/b&gt;, 즉 &lt;b&gt;확률&lt;/b&gt;이다. 확률이 나오는 이유는 영지식 증명에는 랜덤성이 들어가는 경우가 많기 때문이야. 예를 들어 증명 과정에서 검증자가 무작위 질문을 던지거나 증명자가 무작위 값을 섞어서 증명을 요구할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;401&quot; data-start=&quot;390&quot; data-section-id=&quot;wefgi6&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. &lt;span&gt;&lt;span&gt;V&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;440&quot; data-start=&quot;412&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Verifier&lt;/b&gt;, 즉 &lt;b&gt;검증자다. &lt;/b&gt;검증자는 증명자가 제출한 증명을 보고&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;440&quot; data-start=&quot;412&quot;&gt;이 증명이 맞는가?&lt;/li&gt;
&lt;li data-end=&quot;440&quot; data-start=&quot;412&quot;&gt;이 사람이 진짜 알고 있는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;513&quot; data-start=&quot;500&quot; data-ke-size=&quot;size16&quot;&gt;를 판단한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;531&quot; data-start=&quot;520&quot; data-section-id=&quot;n126gx&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. &lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;572&quot; data-start=&quot;542&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공개된 문제 &lt;/b&gt;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;580&quot; data-start=&quot;574&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;580&quot; data-start=&quot;574&quot;&gt;&amp;ldquo;이 해시값을 만든 원래 비밀번호를 나는 알고 있다&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;640&quot; data-start=&quot;615&quot; data-ke-size=&quot;size16&quot;&gt;라고 할 때 공개되는 해시값이 &lt;span&gt;&lt;span&gt;x가 된다&lt;/span&gt;&lt;/span&gt;. 즉, &lt;span&gt;&lt;span&gt;xx&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;는 모두가 볼 수 있는 정보다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;687&quot; data-start=&quot;674&quot; data-section-id=&quot;bjwkm3&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. &lt;span&gt;&lt;span&gt;&amp;pi;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;717&quot; data-start=&quot;700&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Proof, 증명&amp;nbsp;&lt;/b&gt;이다. 증명자가 검증자에게 제출하는 결과물이다. 중요한 것은&amp;nbsp;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;pi; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;안에 비밀 정보 자체가 들어가선 안 된다는 것이다.&amp;nbsp; 예를 들어 비밀번호를 증명한다고 해서 &lt;span&gt;&lt;span&gt;&amp;pi;&lt;/span&gt;&lt;/span&gt;에 실제 비밀번호를 넣으면 그건 영지식 증명이 아니게 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;870&quot; data-start=&quot;852&quot; data-section-id=&quot;1ygmndl&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. &lt;span&gt;&lt;span&gt;V(x,&amp;pi;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;V(x,&amp;pi;) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;는 검증자가 공개 입력한&amp;nbsp;&lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;와 증명 &lt;span&gt;&lt;span&gt;&amp;pi;&lt;/span&gt;&lt;/span&gt;를 보고 판단하는 과정이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;937&quot; data-start=&quot;935&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;검증자 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;V&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;가 &lt;/span&gt;공개 정보 &lt;span&gt;&lt;span&gt;x&lt;/span&gt;&lt;/span&gt;와 증명 &lt;span&gt;&lt;span&gt;&amp;pi;&lt;/span&gt;&lt;/span&gt;를 보고이 증명이 맞는지 검사한다는 뜻이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1037&quot; data-start=&quot;1017&quot; data-section-id=&quot;111ntva&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. &lt;span&gt;&lt;span&gt;V(x,&amp;pi;)=1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;V(x,&amp;pi;)=1, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;여기서 &lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;은 &lt;b&gt;accept,&lt;/b&gt;&amp;nbsp;통과를 뜻한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 반대로 V(x,&amp;pi;)=0이면 &lt;b&gt;reject&lt;/b&gt;, 거절이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1147&quot; data-start=&quot;1144&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1147&quot; data-start=&quot;1144&quot; data-ke-size=&quot;size16&quot;&gt;그래서 &lt;span&gt;&lt;span&gt;&lt;span&gt;V(x,&amp;pi;)=1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;은 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;검증자가 이 증명을 맞다고 받아들였다&lt;/span&gt;는 뜻이다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1226&quot; data-start=&quot;1207&quot; data-section-id=&quot;1aq9jlg&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7. &lt;span&gt;&lt;span&gt;&amp;asymp;1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1266&quot; data-start=&quot;1245&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;거의 1에 가깝다&lt;/b&gt;는 뜻이다. 즉, 확률이 거의 100%에 가깝다는 의미이다. 증명자가 진짜 비밀 정보를 알고 있다면 검증자는 그 증명을 거의 항상 받아들여야 해.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1374&quot; data-start=&quot;1361&quot; data-section-id=&quot;17z8rok&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;전체를 다시 읽으면&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pr[V(x,&amp;pi;)=1]&amp;asymp;1&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1425&quot; data-start=&quot;1409&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;검증자 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;V&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;가 공개 입력 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;와 증명 &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;pi;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;를 보고 받아들일 확률은 거의 1이다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/163</guid>
      <comments>https://sungjae0309.tistory.com/163#entry163comment</comments>
      <pubDate>Mon, 22 Jun 2026 18:35:58 +0900</pubDate>
    </item>
    <item>
      <title>영지식 증명: 알리바바 동굴</title>
      <link>https://sungjae0309.tistory.com/162</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우연히 영지식 증명에 대해 접하게 되었다. 이게 너무 흥미로운 주제라 아주 자세하게 알아보고자 한다. 제대로 이해할 때 까진 계속해서 이 주제에 대해서만 작성할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영지식 증명이란 정말정말 쉽게 한 문장으로 말하면, &quot;본인의 정보를 공개하지 않고도 거래를 검증할 수 있는 기술&quot;이다. 이게 무슨 뚱단지 같은 소리일까? 우선 그 전에, 영지식 증명을 가장 직관적으로 설명하는 알리바바 동굴에 대해 알아보겠다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;알리바바 동굴&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uWFxs/dJMcaayZPJu/D6kVy1KPlM6VgYVf0FnRwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uWFxs/dJMcaayZPJu/D6kVy1KPlM6VgYVf0FnRwk/img.png&quot; data-alt=&quot;출처: https://xangle.io/research/detail/1612&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uWFxs/dJMcaayZPJu/D6kVy1KPlM6VgYVf0FnRwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuWFxs%2FdJMcaayZPJu%2FD6kVy1KPlM6VgYVf0FnRwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1175&quot; height=&quot;461&quot; data-origin-width=&quot;1175&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://xangle.io/research/detail/1612&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;동굴을 들어가면 A,B 두 갈래로 길이 나뉜다.&lt;/li&gt;
&lt;li&gt;이 두 길은 안쪽에서 다시 연결이 되는데,그 전에 잠겨진 문을 먼저 해제해야 한다.&lt;/li&gt;
&lt;li&gt;이 문은 비밀번호를 알아야지만 통과할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;이 동굴에는 비밀번호를 아는 사람(증명자) 과 검증하는 사람(검증자)가 2명이 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;증명자가 먼저 동굴로 들어가고 검증자는 동굴 밖에 뒤돌아 서 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;증명자는 혼자 동굴 안으로 들어가서 A를 선택 하고 비밀의 문까지 걸어간다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;이제 검증자가 동물 입구로 와서 안을 향해 외친다. &quot;B로 나오세요&quot;&lt;/li&gt;
&lt;li&gt;이때 검증자는 증명자가 처음에 A로 갔는지 B로 갔는지 모른느 상태에서 B로 나오라고 명령을 한 것이다. 왜냐면 검증자는 뒤돌아 서 있었기 때문&lt;/li&gt;
&lt;li&gt;여기서 이제 비밀번호를 아는 사람과 몰랐던 사람(사기꾼) 2가지 경우로 나뉜다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;증명자가 진짜 비밀번호를 아는 경우: &quot;증명자는 지금 A에 서 있지만 검증자가 B로 나오라&quot;고 했으므로 비밀의 문을 열고 통과해서 B길로 나온다. 검증자가 A로 나오라 하든, B로 나오라 하든 문을 자유롭게 잠그고 열면서 이동할 수 있으니 항상 성공한다&lt;/li&gt;
&lt;li&gt;증명자가 비밀번호를 모르는 사기꾼인 경우: 운 좋게 어쩌다 한번은 맞을 수 있어도 B로 나오라고 하면 문을 못 열어서 명령한 방향으로 나오지 못하고 들통나게 된다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 1번만 수행한다면 검증자는 확신하기 어렵다. 왜? 2분의 1 확률이니 운 좋게 맞을 수도 있기 때문이다. 근데 &lt;u&gt;&lt;b&gt;이 실험을 여러 번 반복한다면? 몇 번만 반복해도 우연히 연속으로 맞출 가능성은 점차 줄어들 것&lt;/b&gt;&lt;/u&gt;이다. 따라서 매번 정확히 요구에 응답하는 모습을 보면 검증자는 증명자가 비밀번호를 알고 있는지 모르는지 확신을 가질 수 있다. &lt;u&gt;&lt;b&gt;중요한 것은!! 이 모든 과정에서 비밀번호 자체는 한 번도 공개되지 않는 것&lt;/b&gt;&lt;/u&gt;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/162</guid>
      <comments>https://sungjae0309.tistory.com/162#entry162comment</comments>
      <pubDate>Sun, 21 Jun 2026 23:34:54 +0900</pubDate>
    </item>
    <item>
      <title>핫월렛과 콜드월렛</title>
      <link>https://sungjae0309.tistory.com/161</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;실제로 코인을 소유하는 걸까?&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;암호화폐를 처음 이용할 때 거래소 계정을 만들어야 한다. 계정을 만들면 업비트나 빗썸 같은 거래소에서 코인을 구매하고 그대로 보관하는 경우가 많다. &lt;br&gt;&lt;br&gt;거래소에 코인을 거래소에만 보관하는 것은 그다지 좋은 방법이 아닐 수 있다. 거래소에서 코인을 구매하면 우리가 실제로 코인을 소유하고 있는 걸까?&lt;br&gt;&lt;br&gt;기술적으로는 그렇지 않다. 블록체인 자산을 진짜로 갖고 있다고 할 수 있는 사람은 해당 지갑의 개인키(Private Key)를 가진 사람이다. 개인키는 쉽게 말해 블록체인에 기록된 내 자산에 접근하기 위한 열쇠다.&lt;br&gt;&lt;br&gt;문제는 거래소에 코인을 보관할 경우 이 개인키를 사용자가 직접 가지고 있지 않다는 점이다. 거래소가 대신 보관하고 관리한다.근대 만약 거래소가 사라진다면? 거래소가 해킹당하거나 파산한다면 이야기가 달라진다.&lt;br&gt;&lt;br&gt;실제로 과거에는 여러 거래소들이 해킹이나 경영 문제로 인해 고객 자산을 제대로 돌려주지 못한 사례가 있었다.예전에 세계 2등 거래소인 FTX가 파산했던 사례가 있다. 단순히 허황된 이야기가 아니라는 것이다.&lt;br&gt;&lt;br&gt;그렇다면 어떻게 보관해야 할까? 그래서 등장한 것이 개인 지갑이다. 개인 지갑은 사용자가 직접 개인키를 보관한다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;콜드월렛과 핫월렛&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;개인 지갑엔 크게 콜드월렛과 핫월렛 두가지가 있다. &lt;u&gt;&lt;b&gt;핫월렛은 인터넷에 연결된 상태의 지갑&lt;/b&gt;&lt;/u&gt;을 의미한다.&lt;br&gt;&lt;br&gt;대표적으로 메타마스크, 팬텀, 거래소 지갑 등이 있다. 인터넷에 연결되어 있기 때문에 사용이 편리하다. 토큰을 전송하거나 디앱을 이용할 때도 빠르게 접근할 수 있다.&lt;br&gt;&lt;br&gt;하지만 편리한 만큼 위험도 존재한다. 핫월렛은 거래소처럼 중앙 서버가 해킹당하는 구조라기보다는 &lt;u&gt;&lt;b&gt;사용자의 개인키나 승인 권한이 노출될 위험&lt;/b&gt;&lt;/u&gt;이 크다. 예를 들어 가짜 사이트에 지갑을 연결하거나 피싱 링크를 클릭하는 경우가 있다. 악성 프로그램에 감염되거나 잘못된 트랜잭션을 승인하는 경우에도 자산이 빠져나갈 수 있다.&lt;br&gt;&lt;br&gt;즉, 핫월렛 자체가 무조건 위험한 것은 아니다. 다만 인터넷에 연결되어 있기 때문에 공격에 노출될 가능성이 어느 정도 있다는 뜻. 그래서 &lt;u&gt;&lt;b&gt;핫월렛은 자주 사용하는 소액 자산을 보관할 때 편리한 지갑&lt;/b&gt;&lt;/u&gt;이라고 볼 수 있다.&lt;br&gt;&lt;br&gt;&lt;br&gt;반면 &lt;u&gt;&lt;b&gt;콜드월렛은 인터넷과 분리된 상태로 개인키를 보관하는 지갑&lt;/b&gt;&lt;/u&gt;이다. 대표적으로 레저나 트레저 같은 하드웨어 지갑이 있다. 콜드월렛은 평소 &lt;u&gt;&lt;b&gt;인터넷에 연결되어 있지 않기 때문에 외부 공격에 노출될 가능성이 낮다&lt;/b&gt;&lt;/u&gt;. 그래서 장기간 보유할 자산이나 큰 금액의 자산을 보관할 때 많이 사용된다.&lt;br&gt;&lt;br&gt;물론 콜드월렛도 완벽한 것은 아니다. 기기를 분실하거나 복구 문구를 잃어버리면 자산에 접근하기 어려울 수 있다. 또한 초기 설정이나 거래 과정이 핫월렛보다 번거롭다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;결국 핫월렛과 콜드월렛의 차이는 편리함과 보안성의 차이라고 볼 수 있다.&lt;br&gt;&lt;br&gt;핫월렛은 사용하기 쉽고 빠르지만 인터넷에 연결되어 있어 피싱이나 해킹 위험에 노출될 수 있다. 콜드월렛은 사용이 번거롭지만 개인키를 인터넷과 분리해 보관하기 때문에 상대적으로 안전하다.&lt;br&gt;&lt;br&gt;현실에서도 지갑에 모든 돈을 넣고 다니지 않는 것처럼, 암호화폐도 목적에 따라 보관 방식을 나누는 것이 좋다.&lt;br&gt;&lt;br&gt;아무튼 오늘 글의 핵심은 다음과 같다. 암호화폐에서는 자산을 사는 것만큼이나 그것을 어떻게 보관할 것인지도 중요하다. &lt;u&gt;&lt;b&gt;개인키가 아니라면 완전히 내 코인이라고 말하기 어렵다&lt;/b&gt;&lt;/u&gt;는 것이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/161</guid>
      <comments>https://sungjae0309.tistory.com/161#entry161comment</comments>
      <pubDate>Sat, 20 Jun 2026 21:17:18 +0900</pubDate>
    </item>
    <item>
      <title>가상자산에 스테이킹하면 실제로 어떻게 검증에 쓰일까?</title>
      <link>https://sungjae0309.tistory.com/160</link>
      <description>&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size16&quot;&gt;업비트나 빗썸 같은 거래소 앱을 켜면 &amp;ldquo;코인 스테이킹하고 연 X% 이자 받으세요&amp;rdquo;라는 문구를 볼 수 있다. 돈만 맡기면 이자가 나온다니 편리하긴 한데 문득 이런 생각이 들었다. &lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;2,0&quot;&gt;&quot;블록체인에서 검증인이 되려면 실제로 거래를 검사하고 투표를 해야 한다던데, 내가 스테이킹을 하면 그 검증 역할은 거래소가 대신 해주는 구조일까?&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;결론부터 말하자면 100% 맞다. 일반 개인이 거래소에 코인을 맡기는 행위는 진짜 검증인이 되는 것이 아니라 검증인 역할을 수행하는 거래소 서버에 내 투표권(지분)을 위임하는 대행 구조다. 이 복잡한 과정이 어떻게 앱 화면 속 '이자'로 변환되는지 적어보고자 한다.&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size26&quot;&gt;1. 검증인(Validator)이 되기 위한 조건&lt;/h2&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;지분 증명(PoS) 블록체인에서 진짜 검증인이 되어 장부를 적고 보상을 받으려면 생각보다 엄청난 자격 조건과 리스크가 따른다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;엄청난 보증금:&lt;/b&gt; 예를 들어 이더리움 네트워크에서 독자적인 검증인 노드를 돌리려면 최소 32 ETH를 시스템에 보증금으로 묶어두어야 한다. 소액 투자자는 참여하기 힘들다&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;24시간 서버 운영 압박:&lt;/b&gt; 일반 가정용 PC가 아니라 365일 24시간 내내 꺼지지 않고 인터넷이 연결된 전담 서버가 필요하다. 만약 정전이나 네트워크 단절로 내 컴퓨터가 잠시라도 다운되면 투표에 참여하지 못했다는 이유로 보증금을 강제로 몰수당하는 패널티를 받게 된다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;기술적 장벽:&lt;/b&gt; 리눅스 환경에서 블록체인 클라이언트 프로그램을 직접 설치하고 해킹당하지 않도록 방화벽을 세우는 복잡한 백엔드 운영 지식이 필수적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size26&quot;&gt;2. 거래소가 역할: 지분 위임&lt;/h2&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;일반 개인 투자자가 위에서 말한 수억 원의 자금과 서버 관리 지식을 갖추기는 불가능에 가깝다. 그래서 등장한 것이 바로 &lt;b data-index-in-node=&quot;67&quot; data-path-to-node=&quot;11&quot;&gt;지분 위임 &lt;/b&gt;구조이며 이 역할을 대행해 주는 대표적인 주자가 가상자산 거래소인 것이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;지분 모으기(개인): 수많은 소액 투자자들이 거래소의 '스테이킹 버튼'을 눌러 각자 가진 코인을 거래소 계정에 모아준다. 커피 한 잔 값의 소액으로도 참여할 수 있는 비결이다.&lt;/li&gt;
&lt;li&gt;검증인 노드 (거래소): 거래소는 개인들에게 모은 거대한 자금을 보증금으로 내걸고 자신들이 미리 완벽하게 구축해 둔 초고성능 대형 서버(검증인 노드)를 가동한다.&lt;/li&gt;
&lt;li&gt;검증 수행: 거래소의 전문 엔지니어들과 서버가 밤낮으로 켜져 있으면서 전 세계에서 쏟아지는 트랜잭션을 코드로 검사하고 블록에 합의 투표(서명)를 던지는 실제 검증 업무를 전담한다.&lt;/li&gt;
&lt;li&gt;보상 분배: 거래소 서버가 열심히 일해서 블록체인 네트워크로부터 보상인 코인을 받아오면 거래소가 시스템 운영 및 대행 수수료를 떼고 남은 금액을 개인들에게 이자로 나눠준다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size26&quot;&gt;3. 요약하자면&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,0,0&quot;&gt;개인이 하는 일:&lt;/b&gt; 거래소에 코인을 대여해 주고 보증금 규모를 키움&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,1,0&quot;&gt;거래소가 하는 일:&lt;/b&gt; 그 자본으로 24시간 서버를 돌리며 &lt;b data-index-in-node=&quot;37&quot; data-path-to-node=&quot;15,1,0&quot;&gt;실제 트랜잭션 검증, 블록 생성, 합의 투표 등 기술적 업무와 리스크를 대신 함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/160</guid>
      <comments>https://sungjae0309.tistory.com/160#entry160comment</comments>
      <pubDate>Tue, 16 Jun 2026 23:49:51 +0900</pubDate>
    </item>
    <item>
      <title>검증인의 역할</title>
      <link>https://sungjae0309.tistory.com/159</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;검증인은 컴퓨터 앞에서 거래를 하나씩 승인하는건가&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록체인 지분증명(PoS) 방식에서 검증인이 거래를 검증하고 블록을 승인한다는 개념이 이해가 잘 되지 않았다. 그래서 검증인이 실제로 컴퓨터 앞에 앉아서 수많은 거래를 직접 확인하고 승인 버튼을 누르는 걸까? 하는 의문이 들었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하면 아니었다. 거래 검증은 사람이 아니라 &lt;u&gt;&lt;b&gt;자동화된 프로그램이 처리&lt;/b&gt;&lt;/u&gt;한다. 검증인 컴퓨터에는 합의 알고리즘이 포함된 노드 프로그램이 계속 실행되고 있다. 이 프로그램이 새로운 거래를 받으면 정해진 규칙에 따라 빠르게 검사한다. 상식적으로 생각해도 초당 수천 건 이상 발생하는 거래를 사람이 직접 처리하는 것은 불가능하다!&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로그램은 무엇을 검사하는가&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 거래가 들어오면 검증인 노드는 다음 내용을 확인한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;디지털 서명 검사: 거래를 요청한 사람이 실제로 해당 지갑의 개인키를 가진 사람인지 암호학적 연산으로 확인한다.&lt;/li&gt;
&lt;li&gt;잔액과 이중 지불 검사: 보내려는 금액보다 충분한 잔액이 있는지 확인한다. 같은 돈을 여러 사람에게 동시에 보내려는 이중 지불도 검사한다.&lt;/li&gt;
&lt;li&gt;프로토콜 규칙 검사: 거래 데이터 형식과 수수료 등이 해당 블록체인의 규칙에 맞는지 확인한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 조건을 통과하면 정상적인 거래로 판단하고 다른 노드들과 합의 과정을 진행한다. 하나라도 규칙에 어긋나면 해당 거래를 거부한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;검증인을 운영하는 사람은 무슨 일을 하는가&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증인 운영자는 개별 거래를 직접 확인하지 않는다. 대신 프로그램이 안정적으로 실행될 수 있도록 서버와 네트워크를 관리한다. 서버가 과열되거나 고장 나지 않도록 관리하고 인터넷 연결이 끊기거나 DDoS 해킹 공격을 받지 않아야 한다. 블록체인 네트워크가 업그레이드되면 검증인 프로그램도 최신 버전으로 업데이트한다고 한다. 특히 서버가 꺼져 합의 과정에 계속 참여하지 못하거나 잘못된 행동을 하면 보상이 줄어들거나 일부 네트워크에서는 예치금이 삭감되는 슬래싱(Slashing)을 받을 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/159</guid>
      <comments>https://sungjae0309.tistory.com/159#entry159comment</comments>
      <pubDate>Mon, 15 Jun 2026 23:26:37 +0900</pubDate>
    </item>
    <item>
      <title>마이닝 풀</title>
      <link>https://sungjae0309.tistory.com/158</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;혼자 채굴하지 않고 힘을 합치는 이유&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비트코인과 같은 작업증명에서는 채굴자들이 복잡한 계산 문제를 풀어 새로운 블록을 생성한다. 문제를 가장 먼저 푼 채굴자는 블록 보상과 거래 수수료를 받을 수 있지만 개인이 혼자 경쟁해 보상을 얻기는 쉽지 않다. 전체 네트워크의 연산 능력이 매우 크기 때문이다. 이러한 문제를 해결하기 위해 등장한 것이 &lt;b&gt;마이닝 풀(Mining Pool)&lt;/b&gt;이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마이닝 풀&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이닝 풀은 여러 채굴자가 자신의 컴퓨팅 연산 능력 즉 해시 파워를 하나로 모아 공동으로 채굴하는 집단이다. 쉽게 말하면 혼자서 복권을 한 장 사는 대신 여러 사람이 돈을 모아 복권을 많이 구매한 뒤 당첨금을 나누는 것과 비슷하다. 마이닝 풀이 블록 채굴에 성공하면 보상은 각 채굴자가 사용한 해시 파워와 작업 기여도에 따라 나누어 지급된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;어떻게 동작할까?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이닝 풀 운영자는 채굴해야 할 작업을 여러 채굴자에게 나누어 전달한다. 채굴자들은 자신에게 배정된 계산 작업을 수행하고 작업 결과를 풀에 제출한다. 이때 채굴자가 실제로 얼마나 많은 계산을 수행했는지 확인하기 위해 &lt;u&gt;&lt;b&gt;셰어(Share)&lt;/b&gt;&lt;/u&gt;라는 작업 증명 자료가 사용된다. 이후 풀에서 블록 생성 조건을 만족하는 결과를 발견하면 블록 보상을 받고 채굴자들이 제출한 셰어를 기준으로 보상을 분배한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이닝 풀에 참여한다고 해서 전체적으로 받을 수 있는 기대 보상이 크게 증가하는 것은 아니다. 다만 혼자 채굴할 때는 오랫동안 아무런 보상도 받지 못할 수 있지만 마이닝 풀에서는 비교적 적은 금액이라도 꾸준히 보상받을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점 또한 존재한다. 먼저 풀 운영자가 일정한 수수료를 가져가기 때문에 개인이 받는 보상이 줄어들 수 있다. 또한 소수의 대형 마이닝 풀이 지나치게 많은 해시 파워를 차지하면 채굴 권력이 특정 집단에 집중될 수 있다. 특정 주체가 네트워크 해시 파워의 과반수를 장악할 경우 거래 순서를 조작하거나 이중 지불을 시도하는 &lt;b&gt;51% 공격&lt;/b&gt;의 위험도 커질 수 있다.&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/158</guid>
      <comments>https://sungjae0309.tistory.com/158#entry158comment</comments>
      <pubDate>Sat, 13 Jun 2026 23:40:57 +0900</pubDate>
    </item>
    <item>
      <title>블록체인의 저장 공간은 괜찮은가</title>
      <link>https://sungjae0309.tistory.com/157</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문득 궁금한 점이 생겼다. 블록체인은 거래가 발생할 때마다 새로운 블록을 생성하고 이전 기록 위에 계속 데이터를 쌓아 나간다. 그래서 비트코인이 10분에 한번씩 블록을 생성한다고 하면 이를 전세계 모든 노드에 동기화해야 하는데, &lt;u&gt;&lt;b&gt;그러면 늘어나는 저장 용량을 대체 어떻게 감당하는걸까?&lt;/b&gt;&lt;/u&gt; 싶었다. 그래서 이에 대한 내용을 찾아서 한번 정리해보려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;4&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;굉장히 작은 블록 용량 제한&lt;/b&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;블록체인은 데이터가 폭발적으로 늘어나는 것을 구조적으로 막기 위해, 블록 1개의 크기를 최대 1MB ~ 4MB 수준으로 아주 작게 제한해 두었다. 이를 하루 기준으로 계산해 보면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;7&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10분에 1개씩, 하루에 약 144개의 블록이 생성된다.&lt;/li&gt;
&lt;li&gt;블록 1개당 크기를 평균 2MB라고 넉넉하게 잡아도, 하루에 늘어나는 데이터는 고작 288MB 정도다.&lt;/li&gt;
&lt;li&gt;1년 내내 데이터가 쌓여도 약 &lt;b data-index-in-node=&quot;17&quot; data-path-to-node=&quot;8&quot;&gt;100GB&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 정도만 증가한다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 2009년 &lt;u&gt;&lt;b&gt;비트코인이 처음 나온 이후 지금까지 쌓인 데이터 총량은 600GB&lt;/b&gt;&lt;/u&gt;밖에 되지 않는다고 한다. 내가 구글 포토에 저장하는 이미지 용량(800GB)보다 적은 수치다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;모든 사용자가 전체 장부를 저장하지 않는다&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;블록체인은 역할에 따라 보관하는 데이터의 양이 완전히 다르다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;풀 노드 (Full Node):&lt;/b&gt; 2009년부터 현재까지의 모든 역사(600GB+)를 통째로 저장하는 대용량 컴퓨터다. 블록과 거래를 완벽하게 검증하는 역할을 하고 주로 전문 채굴자들이나 기업들이 거대한 서버를 이용해 운영한다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0&quot;&gt;라이트 노드 (Light Node):&lt;/b&gt; 일반 사용자들이 지갑 앱을 쓸 때 작동하는 방식인데, 무거운 거래 내역은 지우고 블록의 요약본 역할을 하는 &lt;b&gt;블록 헤더(Header)만 저장&lt;/b&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프루닝(Pruning) 기술&lt;/b&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size16&quot;&gt;풀 노드라 할지라도 무작정 용량을 늘리기만 하지는 않는다. 일부 노드는 이미 검증이 끝난 오래된 블록의 세부 데이터를 삭제하고 현재 상태를 검증하는 데 필요한 정보만 유지할 수 있는데 이를 프루닝이라고 한다. 쉽게 말하면 가지치기? 같은 느낌이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;그럼 과거 기록을 다 보려면 어떻게 해야 하냐? 과거 거래 기록을 처음부터 끝까지 완전하게 조회해야 하는 블록 탐색기나 연구 기관들은 모든 데이터를 하나도 버리지 않고 저장하는 아카이브 노드(Archive Node)도 별도로 운영하여 이 문제를 해결하고 있다고 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;19&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;여러 계층으로 분산하는 레이어 2와 롤업&lt;/b&gt;&lt;/h2&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;최근 블록체인은 모든 거래를 메인 체인(레이어 1)에서 직접 처리하기보다, 일부 처리를 외부 네트워크(레이어 2)에서 진행한 후 결과만 기록하는 방식을 적극적으로 도입하고 있다. 대표적인 예가 &lt;b data-index-in-node=&quot;107&quot; data-path-to-node=&quot;20&quot;&gt;롤업(Rollup)&lt;/b&gt; 기술이다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;이 방식은 수많은 거래를 메인 체인 밖에서 묶어 처리한 뒤 압축된 결과와 검증에 꼭 필요한 정보만 기록한다. 덕분에 메인 체인에 직접 저장되는 데이터의 증가 속도를 줄일 수 있게 된다.&amp;nbsp;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/157</guid>
      <comments>https://sungjae0309.tistory.com/157#entry157comment</comments>
      <pubDate>Fri, 12 Jun 2026 23:54:37 +0900</pubDate>
    </item>
    <item>
      <title>해시 파워</title>
      <link>https://sungjae0309.tistory.com/156</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;블록체인 채굴에 대해 공부하다 &lt;b&gt;해시 파워(Hash Power)&lt;/b&gt; 라는 단어를 보게 되어 궁금증이 생겼다. 특히 비트코인 같은 작업 증명, 즉 &lt;b&gt;PoW(Proof of Work)&lt;/b&gt; 방식의 블록체인에서 매우 중요한 개념이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해시 파워란&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시 파워란 쉽게 말해, &lt;b&gt;채굴 장비가 일정 시간 동안 얼마나 많은 해시 계산을 수행할 수 있는지를 나타내는 능력&lt;/b&gt;이다. 여기서 해시 계산이란 블록체인 네트워크가 요구하는 조건을 만족하는 값을 찾기 위해 수많은 숫자를 반복해서 대입하고 계산하는 과정을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비트코인 채굴자는 새로운 블록을 만들기 위해 특정 조건을 만족하는 해시값을 찾아야 한다. 이때 더 많은 계산을 빠르게 할 수 있는 채굴자일수록 정답을 찾을 가능성이 높아진다.즉, &lt;b&gt;해시 파워가 높다는 것은 채굴 경쟁에서 더 많은 시도를 할 수 있다는 뜻&lt;/b&gt;이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해시 단위&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시 파워는 보통 다음과 같은 단위로 표현된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;H/s: 초당 1번 해시 계산&lt;/li&gt;
&lt;li&gt;KH/s: 초당 1천 번 해시 계산&lt;/li&gt;
&lt;li&gt;MH/s: 초당 100만 번 해시 계산&lt;/li&gt;
&lt;li&gt;GH/s: 초당 10억 번 해시 계산&lt;/li&gt;
&lt;li&gt;TH/s: 초당 1조 번 해시 계산&lt;/li&gt;
&lt;li&gt;PH/s: 초당 1천조 번 해시 계산&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 어떤 채굴기의 성능이 &lt;b&gt;100 TH/s&lt;/b&gt;라면, 그 채굴기는 1초에 약 100조 번의 해시 계산을 시도할 수 있다는 의미다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해시 파워가 중요한 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시 파워는 채굴 성공 확률과 직접적으로 연결된다. 비트코인 채굴은 마치 엄청나게 어려운 숫자 맞히기 게임과 비슷하다. 정답을 찾기 위해 계속해서 숫자를 바꿔가며 해시값을 계산해야 한다. 이때 더 많은 계산을 할 수 있는 채굴자는 더 많은 시도를 할 수 있고, 그만큼 블록을 생성해 보상을 받을 확률도 높아진다. 그래서 채굴자들은 더 강력한 채굴 장비를 사용하거나, 여러 채굴자가 힘을 합치는 &lt;b&gt;마이닝 풀(Mining Pool)&lt;/b&gt; 에 참여하기도 한다. 마이닝 풀에 대한 이야기는 추후 더 자세히 다뤄보도록 하겠다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;네트워크 전체 해시 파워&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시 파워는 개별 채굴자의 성능을 말할 때도 쓰이지만 전체 블록체인 네트워크의 계산 능력을 말할 때도 사용된다. 이를 보통 &lt;b&gt;네트워크 해시레이트(Network Hashrate)&lt;/b&gt; 라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 전체 해시 파워가 높다는 것은, 그 블록체인 네트워크에 참여하는 채굴자들이 매우 많은 계산 능력을 투입하고 있다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 보안성과도 연결된다. 왜냐하면 공격자가 블록체인을 조작하려면 네트워크 전체 해시 파워의 상당 부분을 장악해야 하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 PoW 블록체인에서 자주 언급되는 51% 공격은 공격자가 전체 해시 파워의 과반을 차지했을 때 가능성이 생기는 공격이다. 따라서 네트워크 전체 해시 파워가 높을수록, 외부 공격자가 이를 장악하기 더 어려워진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해시 파워와 전기 사용량&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 해시 파워가 높다는 것은 그만큼 많은 계산을 수행한다는 뜻이고, 이는 곧 많은 전력 사용으로 이어질 수 있다. 비트코인 채굴이 종종 에너지 소비 문제와 함께 언급되는 이유도 여기에 있다. 채굴자들은 더 높은 해시 파워를 확보하기 위해 고성능 장비를 사용하고 이 장비들은 많은 전기를 소비한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 해시 파워는 단순히 &amp;ldquo;컴퓨터 성능&amp;rdquo;만을 의미하는 것이 아니라, 채굴 장비, 전력 비용, 채굴 난이도, 네트워크 보안성과 모두 연결되는 중요한 개념이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/156</guid>
      <comments>https://sungjae0309.tistory.com/156#entry156comment</comments>
      <pubDate>Thu, 11 Jun 2026 23:43:50 +0900</pubDate>
    </item>
    <item>
      <title>PBFT 합의와 비잔틴 노드</title>
      <link>https://sungjae0309.tistory.com/155</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PBFT란?&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PBFT는 처음부터 하나의 결과에 충분히 합의한 뒤 다음 단계로 넘어가는 방식이다. 쉽게 말해 &quot;일단 블록 만들고 나중에 고르자&quot;가 아닌, &quot;충분히 합의가 되지 않았다면 다음 단계로 넘어가지 않는다&quot; 이다. 그래서 Safety를 우선시하는 방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PBFT의 약자는 Practical Byzantine Fault Tolerance로 번역하면 &quot;실용적 비잔틴 장애 허용&quot;이다. 여기서 비잔틴 이란 뭘까? 우선 비잔틴 노드에 대해 알고 있어야 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;비잔틴 노드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 네트워크 환경에서 오작동이나 악의적인 행위 수행하는 노드(컴퓨터/서버)를 의미한다. 단순 전원이 꺼지거나 네트워크 단절 같은 오작동이 아닌, 시스템 자체를 교란하기 위해 적극적으로 거짓 정보를 유포하거나 위조된 메시지를 전송하는 행위까지 포함한다. 예시는 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위조 및 변조: 허위 트랜잭션, 위조 메시지를 생성하여 전달&lt;/li&gt;
&lt;li&gt;이중 송신: A노드에게는 True를 보내고, B 노드에게는 False라는 메시지를 동시에 보내 분열을 유도&lt;/li&gt;
&lt;li&gt;침묵 및 지연: 특정 합의 과정에서 의도적으로 메시지 전송하지 않거나 타이밍을 무한정 지연&amp;nbsp;&lt;/li&gt;
&lt;li&gt;공모: 여러 개의 비잔틴 노드가 조직적으로 동일한 거짓 데이터를 주장함으로써 정상 노드를 속이려고 시도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 중앙 집중형 시스템에선 중앙 서버만 신뢰하면 되므로 비잔틴 노드를 고려할 필요가 적었다. 그러나 탈중앙화된 블록체인에선 누구나 노드로 참여할 수 있으므로, 내부에 악의적인 공격자가 반드시 존재한다는 가정을 전제로 설계해야 한다. 알고리즘마다 합의 방식에 따라 허용 할 수 있는 비잔틴 노드의 최대 비율이 다르다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;비잔틴 노드 방어 위한 해결책&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;11&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;합의 알고리즘&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;비잔틴 노드 허용 한계&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0,0&quot;&gt;PBFT&lt;/b&gt; (실용적 비잔틴 장애 허용)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,1,1,0&quot;&gt;전체&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,1,0&quot;&gt; 노드의 1/3&amp;nbsp;미만&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,1,2,0&quot;&gt;전체 노드가 100개라면, 비잔틴 노드가 &lt;b data-index-in-node=&quot;23&quot; data-path-to-node=&quot;11,1,2,0&quot;&gt;최대 32개&lt;/b&gt;까지만 존재해야 시스템이 안전. 33개 이상이 되는 순간 합의가 왜곡되거나 중단될 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0,0&quot;&gt;PoW&lt;/b&gt; (작업 증명 - 비트코인 등)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,2,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,1,0&quot;&gt;전체 연산력(Hash Rate)의 &lt;span data-index-in-node=&quot;19&quot; data-math=&quot;50\%&quot;&gt;50%&lt;/span&gt;&amp;nbsp;미만&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;11,2,2,0&quot;&gt;네트워크 전체 컴퓨팅 파워의 과반수 &lt;span data-index-in-node=&quot;20&quot; data-math=&quot;51\%&quot;&gt;51%&lt;/span&gt;를 악의적인 노드가 장악하지 않는 한 데이터가 변조되지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PBFT 진행 과정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PBFT는 Request, Pre-prepare, Prepare, Commit, Reply의 다섯 단계로 진행된다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/npqaX/dJMcahEGtae/G5aTMbQLiwr7YiSkwF7QK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/npqaX/dJMcahEGtae/G5aTMbQLiwr7YiSkwF7QK0/img.png&quot; data-alt=&quot;출처: M. Castro and B. Liskov.&amp;amp;nbsp;Practical Byzantine Fault Tolerance.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/npqaX/dJMcahEGtae/G5aTMbQLiwr7YiSkwF7QK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnpqaX%2FdJMcahEGtae%2FG5aTMbQLiwr7YiSkwF7QK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1211&quot; height=&quot;696&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;696&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: M. Castro and B. Liskov.&amp;nbsp;Practical Byzantine Fault Tolerance.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;간단하게 살펴보면&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;C (Client): 트랜잭션를 발생시키고 블록체인 네트워크에 처리를 요청하는 사용자이다. 본문 설명에선 네트워크 내부의 검증 노드가 아니라 외부의 요청자라고 설명한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;0 (Primary Node / 리더 노드): 사용자의 요청을 가장 먼저 받아서 다른 노드들에게 전파하는 대표(리더) 노드&lt;/li&gt;
&lt;li&gt;1, 2, 3 (Backup Nodes / 일반 노드): 리더 노드의 지시를 받아 검증을 수행하는 일반 합의 노드들&lt;/li&gt;
&lt;li&gt;노드 3의 'X' : 현재 노드 3이 다운되었거나, 악의적인 행위를 하여 합의 프로세스에 참여하지 않고 침묵하는 비잔틴 노드(결함 노드)임을 가정&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자세하게 살펴보면&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Request 요청&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름: C -&amp;gt; 0&amp;nbsp;&lt;/li&gt;
&lt;li&gt;설명: 클라이언트인 C가 리더 노드에 수행하고자 하는 트랜잭션 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pre-prepare 사전 준비&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름: 0 -&amp;gt; 1, 2, 3&lt;/li&gt;
&lt;li&gt;설명: 리더 노드가 클라이언트의 요청을 검증한 뒤, 이 요청에 고유한 번호(Sequence Number)를 부여하여 모든 백업 노드 (1,2,3)에 전파&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Prepare 준비&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름: 각 노드 -&amp;gt; 다른 모든 노드&lt;/li&gt;
&lt;li&gt;설명: 리더로부터 Pre-prepare 메시지를 받은 정상 백업 노드 (1,2)는 메시지의 유효성을 검증&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;검증에 성공하면,&amp;nbsp; &quot;요청 진행할 준비 됨&quot; 라는 의미의 prepare 메시지를 다른 노드에 전파&lt;/li&gt;
&lt;li&gt;합의: 각 노드는 본인을 포함하여 동일한 prepare메시지를 수신하고 해당 시퀀스 번호에 대한 정당성 확보 후 Prepare 상태로 진입&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Commit&lt;/b&gt;&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름: 각 노드 -&amp;gt; 다른 모든 노드&amp;nbsp;&lt;/li&gt;
&lt;li&gt;설명: Prepare상태에 도달한 노드들 (0,1,2)가 요청 처리하기로 합의 했으므로 최종 확정 위해 Commit 메시지를 다시 모든 노드에 전파&lt;/li&gt;
&lt;li&gt;합의 성립: 각 노드는 본인을 포함한 2f + 1개 이상의 동일한 Commit 메시지를 수신하면 Commit 상태가 되고 local상태 머신에 해당 트랜잭션 반영&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reply 응답&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름: 각 노드 -&amp;gt; C&lt;/li&gt;
&lt;li&gt;설명: 처리 완료한 정상 노드들은 그 결과를 클라이언트에 전송. 클라이언트는 여러 노드로부터 최소 f+1개 이상의 동일한 결과 메시지를 받으면, 이 요청이 안전하게 처리되었음을 신뢰하고 확정 지음&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/155</guid>
      <comments>https://sungjae0309.tistory.com/155#entry155comment</comments>
      <pubDate>Wed, 10 Jun 2026 23:08:58 +0900</pubDate>
    </item>
    <item>
      <title>비트코인과 피어코인의 Fork 선택 규칙</title>
      <link>https://sungjae0309.tistory.com/154</link>
      <description>&lt;h2 data-end=&quot;166&quot; data-start=&quot;141&quot; data-section-id=&quot;1yggc2k&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;비트코인과 피어코인은 왜 포크를 허용할까?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;202&quot; data-start=&quot;168&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 Safety와 Liveness에 대해 정리했다. Safety는 정상적인 노드들이 서로 같은 결과를 바라보는 성질이다. 반대로 Liveness는 시스템이 멈추지 않고 계속 다음 단계로 진행되는 성질이다. 블록체인에서는 새로운 블록이 계속 만들어져야 하고 사용자의 거래도 결국 처리되어야 한다.&lt;/p&gt;
&lt;p data-end=&quot;494&quot; data-start=&quot;433&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;494&quot; data-start=&quot;433&quot; data-ke-size=&quot;size16&quot;&gt;문제는 비동기 네트워크 환경에서는 Safety와 Liveness를 동시에 완벽하게 만족시키기 어렵다는 점이다. 래서 어떤 합의 알고리즘은 Safety를 더 중요하게 보고, 어떤 합의 알고리즘은 Liveness를 더 중요하게 본다.&lt;/p&gt;
&lt;p data-end=&quot;651&quot; data-start=&quot;565&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;651&quot; data-start=&quot;565&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 그중에서 &lt;b&gt;Liveness를 우선시하는 방식&lt;/b&gt;에 가까운 비트코인의 나카모토 컨센서스와 피어코인의 체인 기반 지분증명을 정리해보려고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;671&quot; data-start=&quot;658&quot; data-section-id=&quot;vwt0oh&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;나카모토 컨센서스란?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjjCc8/dJMcaiwQ2Kk/7atiLytZxpLrmR2AA6K500/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjjCc8/dJMcaiwQ2Kk/7atiLytZxpLrmR2AA6K500/img.jpg&quot; data-alt=&quot;출처: DSRV Research&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjjCc8/dJMcaiwQ2Kk/7atiLytZxpLrmR2AA6K500/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjjCc8%2FdJMcaiwQ2Kk%2F7atiLytZxpLrmR2AA6K500%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;600&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: DSRV Research&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;704&quot; data-start=&quot;673&quot; data-ke-size=&quot;size16&quot;&gt;나카모토 컨센서스는 비트코인에서 사용되는 합의 방식이다. 비트코인에서는 채굴자들이 새로운 블록을 만들기 위해 경쟁한다. 채굴자는 어려운 연산을 수행하고, 가장 먼저 조건에 맞는 값을 찾으면 새로운 블록을 제안할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;827&quot; data-start=&quot;800&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;827&quot; data-start=&quot;800&quot; data-ke-size=&quot;size16&quot;&gt;그런데 비트코인 네트워크는 전 세계에 퍼져 있다. 그래서 어떤 채굴자가 만든 블록이 모든 노드에게 동시에 전달되는 것은 아니다. 서울의 채굴자와 뉴욕의 채굴자가 거의 동시에 새로운 블록을 만들 수도 있고 네트워크 지연 때문에 어떤 노드는 서울 채굴자의 블록을 먼저 받고, 다른 노드는 뉴욕 채굴자의 블록을 먼저 받을 수도 있다. 이런 상황에서는 체인이 잠깐 두 갈래로 나뉠 수 있는데 이걸 포크라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1060&quot; data-start=&quot;1035&quot; data-section-id=&quot;18q44ij&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;나카모토 컨센서스에서 포크가 발생하는 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1095&quot; data-start=&quot;1062&quot; data-ke-size=&quot;size16&quot;&gt;비트코인은 포크가 절대 발생하지 않도록 막는 구조가 아니다.&amp;nbsp;예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1290&quot; data-start=&quot;1145&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1171&quot; data-start=&quot;1145&quot; data-section-id=&quot;6paiay&quot;&gt;서울의 채굴자가 새로운 블록 A를 만들었다.&lt;/li&gt;
&lt;li data-end=&quot;1206&quot; data-start=&quot;1173&quot; data-section-id=&quot;1v05a4x&quot;&gt;뉴욕의 채굴자가 거의 동시에 새로운 블록 B를 만들었다.&lt;/li&gt;
&lt;li data-end=&quot;1230&quot; data-start=&quot;1208&quot; data-section-id=&quot;agtozt&quot;&gt;어떤 노드는 블록 A를 먼저 받았다.&lt;/li&gt;
&lt;li data-end=&quot;1254&quot; data-start=&quot;1232&quot; data-section-id=&quot;1jqp0ti&quot;&gt;다른 노드는 블록 B를 먼저 받았다.&lt;/li&gt;
&lt;li data-end=&quot;1290&quot; data-start=&quot;1256&quot; data-section-id=&quot;1wu34yc&quot;&gt;그 결과 잠깐 동안 체인이 A 방향과 B 방향으로 나뉜다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1305&quot; data-start=&quot;1292&quot; data-ke-size=&quot;size16&quot;&gt;이 상황이 바로 포크다. 포크가 발생했다는 것은 적어도 그 순간에는 모든 노드가 같은 블록을 보고 있지 않다는 뜻이다. 즉, Safety가 완벽하게 보장되는 상태는 아니다.&lt;/p&gt;
&lt;p data-end=&quot;1421&quot; data-start=&quot;1392&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1421&quot; data-start=&quot;1392&quot; data-ke-size=&quot;size16&quot;&gt;하지만 비트코인은 여기서 블록 생성을 멈추지 않는다. &lt;u&gt;&lt;b&gt;포크가 발생하더라도 우선 블록 생성은 계속 이어진다&lt;/b&gt;&lt;/u&gt;. 이 점에서 비트코인은 Safety보다 Liveness를 더 우선시하는 방식에 가깝다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2049&quot; data-start=&quot;2028&quot; data-section-id=&quot;3e848o&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Fork Choice Rule이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2090&quot; data-start=&quot;2051&quot; data-ke-size=&quot;size16&quot;&gt;비트코인이 포크를 허용한다고 해서 포크를 그대로 방치하지 않는다. 포크가 발생하면 결국 여러 갈래의 체인 중 하나를 정답 체인으로 선택해야 한다. 이때 사용하는 규칙이 &lt;u&gt;&lt;b&gt;Fork Choice Rule&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-end=&quot;2218&quot; data-start=&quot;2171&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2251&quot; data-start=&quot;2220&quot; data-ke-size=&quot;size16&quot;&gt;비트코인에서는 더 많은 작업증명이 쌓인, 즉 더 많은 연산이 투입된 체인을 정답 체인으로 보는 것이다. 예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2455&quot; data-start=&quot;2309&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2333&quot; data-start=&quot;2309&quot; data-section-id=&quot;6wv77x&quot;&gt;체인이 A, B 방향으로 나뉘었다.&lt;/li&gt;
&lt;li data-end=&quot;2367&quot; data-start=&quot;2335&quot; data-section-id=&quot;ln3avp&quot;&gt;이후 채굴자들이 A 체인 위에 더 많은 블록을 붙였다.&lt;/li&gt;
&lt;li data-end=&quot;2392&quot; data-start=&quot;2369&quot; data-section-id=&quot;h39t1q&quot;&gt;A 체인에 더 많은 작업증명이 쌓였다.&lt;/li&gt;
&lt;li data-end=&quot;2422&quot; data-start=&quot;2394&quot; data-section-id=&quot;15j9zwh&quot;&gt;네트워크는 A 체인을 정답 체인으로 받아들인다.&lt;/li&gt;
&lt;li data-end=&quot;2455&quot; data-start=&quot;2424&quot; data-section-id=&quot;3znwzl&quot;&gt;B 체인에 있던 일부 블록과 거래는 버려질 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2657&quot; data-start=&quot;2648&quot; data-section-id=&quot;1qrhgp5&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;피어코인이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2699&quot; data-start=&quot;2659&quot; data-ke-size=&quot;size16&quot;&gt;피어코인은 지분증명에 대한 연구가 이루어지던 초기에 개발된 블록체인이다. 원문에서는 피어코인을 나카모토 컨센서스와 마찬가지로 Safety보다 Liveness를 우선으로 하는 합의 알고리즘의 예시로 설명한다.&lt;/p&gt;
&lt;p data-end=&quot;2833&quot; data-start=&quot;2777&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2833&quot; data-start=&quot;2777&quot; data-ke-size=&quot;size16&quot;&gt;피어코인의 합의 방식은 나카모토 컨센서스와 유사하지만, 새로운 블록을 생성하는 방식에서 차이가 있다. 비트코인에서는 채굴자가 작업증명 연산을 수행해서 블록을 만든다. &lt;br /&gt;&lt;br /&gt;반면 &lt;u&gt;&lt;b&gt;피어코인에서는 coin-age라는 개념을 사용&lt;/b&gt;&lt;/u&gt;한다. 비트코인이 &amp;ldquo;얼마나 많은 연산을 했는가?&amp;rdquo;를 중요하게 본다면, 피어코인은 &lt;u&gt;&lt;b&gt;&amp;ldquo;얼마나 많은 코인을 얼마나 오래 가지고 있었는가?&amp;rdquo;&lt;/b&gt;&lt;/u&gt;를 중요하게 본다고 이해할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3017&quot; data-start=&quot;3005&quot; data-section-id=&quot;gkvg7w&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;coin-age란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3065&quot; data-start=&quot;3019&quot; data-ke-size=&quot;size16&quot;&gt;coin-age는 코인을 얼마나 많이, 얼마나 오래 보유했는지를 나타내는 개념이다. 원문에서는 이것을 coin-days라는 방식으로 설명한다. 예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3235&quot; data-start=&quot;3116&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3138&quot; data-start=&quot;3116&quot; data-section-id=&quot;1pe591b&quot;&gt;A가 10개의 코인을 가지고 있다.&lt;/li&gt;
&lt;li data-end=&quot;3163&quot; data-start=&quot;3140&quot; data-section-id=&quot;lng1xq&quot;&gt;A가 그 코인을 5일 동안 보유했다.&lt;/li&gt;
&lt;li data-end=&quot;3202&quot; data-start=&quot;3165&quot; data-section-id=&quot;ykfd0k&quot;&gt;그러면 A는 10 &amp;times; 5 = 50 coin-days를 가진다.&lt;/li&gt;
&lt;li data-end=&quot;3235&quot; data-start=&quot;3204&quot; data-section-id=&quot;10l8ife&quot;&gt;coin-age가 늘어나면 블록을 생성하기 쉬워진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3280&quot; data-start=&quot;3237&quot; data-ke-size=&quot;size16&quot;&gt;즉, 피어코인에서는 단순히 코인을 많이 가지고 있는 것만 중요한 것이 아니다. 그 코인을 얼마나 오래 보유했는지도 중요하다. coin-age가 시간이 지남에 따라 늘어나거나, 더 많은 코인을 보유하게 되면 블록을 생성할 가능성이 높아진다. 이런 방식을 원문에서는 체인 기반 지분증명이라고 설명한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3437&quot; data-start=&quot;3413&quot; data-section-id=&quot;6orob3&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;피어코인의 Fork Choice Rule&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3478&quot; data-start=&quot;3439&quot; data-ke-size=&quot;size16&quot;&gt;피어코인도 Liveness를 우선시하기 때문에 포크가 발생할 수 있다. 그래서 피어코인에도 여러 포크 중 하나를 선택하는 Fork Choice Rule이 필요하다.&lt;/p&gt;
&lt;p data-end=&quot;3553&quot; data-start=&quot;3533&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;다만 비트코인과 선택 기준이 다르다. 비트코인은 더 많은 작업증명이 쌓인 체인을 선택한다. 피어코인은 더 많은 coin-age가 사용된 체인을 선택한다. 예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3769&quot; data-start=&quot;3637&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3661&quot; data-start=&quot;3637&quot; data-section-id=&quot;6wv77x&quot;&gt;체인이 A, B 방향으로 나뉘었다.&lt;/li&gt;
&lt;li data-end=&quot;3694&quot; data-start=&quot;3663&quot; data-section-id=&quot;pd6lwj&quot;&gt;A 체인에는 총 90 coin-days가 사용되었다.&lt;/li&gt;
&lt;li data-end=&quot;3728&quot; data-start=&quot;3696&quot; data-section-id=&quot;1sjqxp4&quot;&gt;B 체인에는 총 100 coin-days가 사용되었다.&lt;/li&gt;
&lt;li data-end=&quot;3769&quot; data-start=&quot;3730&quot; data-section-id=&quot;4mzn7r&quot;&gt;피어코인은 더 많은 coin-days가 사용된 B 체인을 선택한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3930&quot; data-start=&quot;3870&quot; data-ke-size=&quot;size16&quot;&gt;원문에서는 이 방식이 제대로 작동하지 않을 경우 Safety를 보장하기 어려워질 수 있다고 설명한다.&lt;/p&gt;
&lt;p data-end=&quot;3967&quot; data-start=&quot;3932&quot; data-ke-size=&quot;size16&quot;&gt;그 대표적인 문제가 바로 Nothing-at-Stake 문제다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3997&quot; data-start=&quot;3974&quot; data-section-id=&quot;1r9mkjh&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Nothing-at-Stake 문제란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;4039&quot; data-start=&quot;3999&quot; data-ke-size=&quot;size16&quot;&gt;Nothing-at-Stake는 말 그대로 &amp;ldquo;잃을 것이 없다&amp;rdquo;는 뜻이다. 원문에서는 피어코인에서 포크가 발생했을 때 블록 생성자가 두 포크 중 하나를 선택할 필요 없이 두 포크 모두에 블록을 생성할 이유가 생긴다고 설명한다.&lt;/p&gt;
&lt;p data-end=&quot;4181&quot; data-start=&quot;4128&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;4181&quot; data-start=&quot;4128&quot; data-ke-size=&quot;size16&quot;&gt;나카모토 컨센서스에서는 채굴자가 블록을 만들기 위해 많은 자원을 사용해야 한다. 전기 사용료나 노드 운영비용 같은 비용이 발생한다. 만약 채굴자가 만든 블록이 선택되지 않는다면 블록 보상을 받을 수 없다. 그래서 작업증명에서는 잘못된 포크에 블록을 만들면 잃을 것이 있다. 예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4530&quot; data-start=&quot;4327&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4357&quot; data-start=&quot;4327&quot; data-section-id=&quot;1v7hgdg&quot;&gt;비트코인에서 A, B 체인이 동시에 존재한다.&lt;/li&gt;
&lt;li data-end=&quot;4401&quot; data-start=&quot;4359&quot; data-section-id=&quot;1mo4yt4&quot;&gt;채굴자가 A 체인 위에 블록을 만들려면 많은 연산 비용을 사용해야 한다.&lt;/li&gt;
&lt;li data-end=&quot;4443&quot; data-start=&quot;4403&quot; data-section-id=&quot;aj770v&quot;&gt;B 체인 위에도 블록을 만들려면 또 많은 연산 비용을 사용해야 한다.&lt;/li&gt;
&lt;li data-end=&quot;4485&quot; data-start=&quot;4445&quot; data-section-id=&quot;13kjihg&quot;&gt;나중에 A 체인만 선택되면 B 체인에 투입한 비용은 낭비될 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;4530&quot; data-start=&quot;4487&quot; data-section-id=&quot;uelcms&quot;&gt;그래서 채굴자는 선택될 가능성이 높은 체인 하나를 고르려는 원인이 생긴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4550&quot; data-start=&quot;4532&quot; data-ke-size=&quot;size16&quot;&gt;하지만 피어코인은 상황이 다르다. 피어코인에서는 coin-age를 사용해 블록을 만든다. 원문에서는 coin-age를 사용하면 모든 포크에서 추가적으로 블록을 생성할 수 있다고 설명한다. 즉, 포크가 두 개 존재할 때 블록 생성자는 굳이 하나의 포크만 선택하지 않을 수 있다. 두 포크 모두에 블록을 생성하면, 이후 어떤 포크가 선택되더라도 보상을 받을 수 있기 때문이다. 예를 들면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;5012&quot; data-start=&quot;4821&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4844&quot; data-start=&quot;4821&quot; data-section-id=&quot;1abrymw&quot;&gt;A, B 체인이 동시에 존재한다.&lt;/li&gt;
&lt;li data-end=&quot;4873&quot; data-start=&quot;4846&quot; data-section-id=&quot;1vit327&quot;&gt;블록 생성자는 A 체인 위에도 블록을 만든다.&lt;/li&gt;
&lt;li data-end=&quot;4898&quot; data-start=&quot;4875&quot; data-section-id=&quot;m76h7s&quot;&gt;동시에 B 체인 위에도 블록을 만든다.&lt;/li&gt;
&lt;li data-end=&quot;4936&quot; data-start=&quot;4900&quot; data-section-id=&quot;6zqtzg&quot;&gt;나중에 A 체인이 선택되면 A 체인에서 보상을 받을 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;4975&quot; data-start=&quot;4938&quot; data-section-id=&quot;131i814&quot;&gt;나중에 B 체인이 선택되면 B 체인에서도 보상을 받을 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;5012&quot; data-start=&quot;4977&quot; data-section-id=&quot;1oo4ysg&quot;&gt;블록 생성자 입장에서는 굳이 하나만 선택할 이유가 약해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5039&quot; data-start=&quot;5014&quot; data-ke-size=&quot;size16&quot;&gt;이것이 Nothing-at-Stake 문제다. 말 그대로 어느 쪽에 블록을 만들어도 크게 잃을 것이 없는 상황이 되는 것이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;5130&quot; data-start=&quot;5092&quot; data-section-id=&quot;fxgim7&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Nothing-at-Stake가 Safety를 약하게 만드는 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5174&quot; data-start=&quot;5132&quot; data-ke-size=&quot;size16&quot;&gt;Nothing-at-Stake 문제가 발생하면 포크가 계속 유지될 수 있다. 원래 Fork Choice Rule은 여러 포크 중 하나를 선택하기 위한 규칙이다. 하지만 모든 블록 생성자가 하나의 포크만 선택하지 않고, 모든 포크 위에 계속 블록을 만든다면 어떻게 될까?&lt;/p&gt;
&lt;p data-end=&quot;5318&quot; data-start=&quot;5286&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;5318&quot; data-start=&quot;5286&quot; data-ke-size=&quot;size16&quot;&gt;둘 중 하나의 포크가 명확하게 선택되기 어려워질 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;5420&quot; data-start=&quot;5320&quot; data-ke-size=&quot;size16&quot;&gt;원문에서는 이런 경우 더 많은 coin-age를 소비한 포크를 선택하는 Fork Choice Rule만으로는 하나의 포크가 영원히 선택되지 않는 문제가 발생할 수 있다고 설명한다.&lt;/p&gt;
&lt;p data-end=&quot;5456&quot; data-start=&quot;5422&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;5456&quot; data-start=&quot;5422&quot; data-ke-size=&quot;size16&quot;&gt;결국 단 하나의 포크로 합의되지 않은 상태가 이어질 수 있다. 이것은 Safety가 만족되지 않은 상태다.&lt;/p&gt;</description>
      <category>블록체인</category>
      <author>sungjae0309</author>
      <guid isPermaLink="true">https://sungjae0309.tistory.com/154</guid>
      <comments>https://sungjae0309.tistory.com/154#entry154comment</comments>
      <pubDate>Tue, 9 Jun 2026 17:27:14 +0900</pubDate>
    </item>
  </channel>
</rss>