<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>새벽 1시 19분</title>
    <link>https://am0119.tistory.com/</link>
    <description>365일 중 364일 동굴에 있고 싶은 동굴러버의 속세와의 소통창구 겸 백업단지 저장소
(※급 잠수 및 와다다 백업 게시글 주의※)</description>
    <language>ko</language>
    <pubDate>Mon, 20 Jul 2026 09:08:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>동굴러버의 백업단지</managingEditor>
    <image>
      <title>새벽 1시 19분</title>
      <url>https://tistory1.daumcdn.net/tistory/4658515/attach/b2d62179d38a491a8ff08eb7d5a441d4</url>
      <link>https://am0119.tistory.com</link>
    </image>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] 블록체인 데모</title>
      <link>https://am0119.tistory.com/161</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;블록체인 데모&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1720980345876&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Tools - SuperDataScience&quot; data-og-description=&quot;&quot; data-og-host=&quot;tools.superdatascience.com&quot; data-og-source-url=&quot;https://tools.superdatascience.com/blockchain/block&quot; data-og-url=&quot;https://tools.superdatascience.com/blockchain/block&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tools.superdatascience.com/blockchain/block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tools.superdatascience.com/blockchain/block&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Tools - SuperDataScience&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tools.superdatascience.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Block&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcVIg2/btsIz7OSKMn/SEFDGIa2tCKQonsCOwvkRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcVIg2/btsIz7OSKMn/SEFDGIa2tCKQonsCOwvkRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcVIg2/btsIz7OSKMn/SEFDGIa2tCKQonsCOwvkRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcVIg2%2FbtsIz7OSKMn%2FSEFDGIa2tCKQonsCOwvkRK%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;1405&quot; height=&quot;567&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록 번호, 논스, 데이터, 해시를 확인할 수 있으며, 블록 자체이기 때문에 이전 해시는 없다. 블록의 원리를 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DFFFS/btsIyvDFKa4/GbyLRbqk0BS7autwBzSRH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DFFFS/btsIyvDFKa4/GbyLRbqk0BS7autwBzSRH0/img.png&quot; data-origin-width=&quot;1403&quot; data-origin-height=&quot;562&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4986%; margin-right: 10px;&quot; data-widthpercent=&quot;50.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DFFFS/btsIyvDFKa4/GbyLRbqk0BS7autwBzSRH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDFFFS%2FbtsIyvDFKa4%2FGbyLRbqk0BS7autwBzSRH0%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;1403&quot; height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DpzLH/btsIy46oRCD/kTwHWv7Ki3brTHlr2j1ll0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DpzLH/btsIy46oRCD/kTwHWv7Ki3brTHlr2j1ll0/img.png&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;559&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3386%;&quot; data-widthpercent=&quot;49.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DpzLH/btsIy46oRCD/kTwHWv7Ki3brTHlr2j1ll0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDpzLH%2FbtsIy46oRCD%2FkTwHWv7Ki3brTHlr2j1ll0%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;1391&quot; height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Blockchain&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc0ygN/btsIzzkM4x2/NoK8l5yhWw4KeHIijKuSi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc0ygN/btsIzzkM4x2/NoK8l5yhWw4KeHIijKuSi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc0ygN/btsIzzkM4x2/NoK8l5yhWw4KeHIijKuSi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc0ygN%2FbtsIzzkM4x2%2FNoK8l5yhWw4KeHIijKuSi0%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;1408&quot; height=&quot;662&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5개의 블록이 있는 블록체인 예시가 있고 이전 블록의 해시를 나타내는 새로운 필드가 포함되어 있다. 모두 암호화되어 연결되어 있으며, 각 블록은 유효한 해시를 가지고 있다.&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;1423&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byUnZD/btsIzffL62F/B4MWBslA4LDXzIbOrCThp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byUnZD/btsIzffL62F/B4MWBslA4LDXzIbOrCThp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byUnZD/btsIzffL62F/B4MWBslA4LDXzIbOrCThp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyUnZD%2FbtsIzffL62F%2FB4MWBslA4LDXzIbOrCThp0%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;1423&quot; height=&quot;669&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4개의 선행 제로로 시작하며 이 블록체인을 공격해보겠다. 우선 데이터를 추가하고, 블록을 채굴하여 블록체인을 유효하게 만들었다. 하지만 블록 데이터를 변경하게 된다면 어떻게 될까?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnBdWZ/btsIzK0HhiA/jTqMrTdxJo5isZ8raCbGX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnBdWZ/btsIzK0HhiA/jTqMrTdxJo5isZ8raCbGX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnBdWZ/btsIzK0HhiA/jTqMrTdxJo5isZ8raCbGX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnBdWZ%2FbtsIzK0HhiA%2FjTqMrTdxJo5isZ8raCbGX0%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;1424&quot; height=&quot;664&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;분산 P2P 네트워크&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LENwC/btsIAwnlZr6/31QcEkLo5PTHkwHwqS5fOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LENwC/btsIAwnlZr6/31QcEkLo5PTHkwHwqS5fOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LENwC/btsIAwnlZr6/31QcEkLo5PTHkwHwqS5fOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLENwC%2FbtsIAwnlZr6%2F31QcEkLo5PTHkwHwqS5fOK%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;1435&quot; height=&quot;866&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록체인을 피어로 분리하여 A,B,C로 모두 복사본이 있어 모두 같은 값을 가지게 된다. 그러나 공격자가 값 하나를 변경했을 때, 다른 피어와 값이 달라지게 된다.&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;즉 분산되어 있으면, 공격자는 전체를 재계산을 하고 업데이트 전 모든 블록을 동시에 공격해야하는 어려움이 있다. 네트워크 피어가 많을 수록 공격이 어려워진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/161</guid>
      <comments>https://am0119.tistory.com/161#entry161comment</comments>
      <pubDate>Sun, 14 Jul 2024 15:43:46 +0900</pubDate>
    </item>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] 합의 프로토콜</title>
      <link>https://am0119.tistory.com/160</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;합의 프로토콜 (Consensu protocol)&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;span style=&quot;color: #333333;&quot;&gt;어떻게 동의하고 계속 증가하는지와 어떤 방향으로 블록을 추가하는지 네트워크 전반적으로 언제 블록을 추가하는지를 다루는 챕터로&amp;nbsp;합의 프로토콜은 이전 &lt;a style=&quot;color: #333333;&quot; href=&quot;https://am0119.tistory.com/159&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;비잔틴 내결합성&lt;/a&gt; 게시글에서 언급되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720971029983&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Blockchain A-Z:블록체인 만들기 완벽강의] 비잔틴 내결함성&quot; data-og-description=&quot;비잔틴 내결함성탈중앙화 시스템에서도 아주 중요한 특징으로 예시가 되는 이야기는 비잔틴 제국이 공격하여 점령하고자 했떤 성을 가정하여 네 명의 장군이 공격하는 상황을 빗대어 설명하고&quot; data-og-host=&quot;am0119.tistory.com&quot; data-og-source-url=&quot;https://am0119.tistory.com/159&quot; data-og-url=&quot;https://am0119.tistory.com/159&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ejX9tF/hyWzrtbwe3/Di2uycFOifjg1P6yPNPRA0/img.png?width=800&amp;amp;height=380&amp;amp;face=0_0_800_380,https://scrap.kakaocdn.net/dn/bXAoq9/hyWztxKybj/tnBhbYIMPKAQr0S8liF5pk/img.png?width=800&amp;amp;height=380&amp;amp;face=0_0_800_380,https://scrap.kakaocdn.net/dn/tXFQc/hyWzz5QNIS/a0776rYxJd8PUNVu4qkM2K/img.png?width=1738&amp;amp;height=826&amp;amp;face=0_0_1738_826&quot;&gt;&lt;a href=&quot;https://am0119.tistory.com/159&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://am0119.tistory.com/159&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ejX9tF/hyWzrtbwe3/Di2uycFOifjg1P6yPNPRA0/img.png?width=800&amp;amp;height=380&amp;amp;face=0_0_800_380,https://scrap.kakaocdn.net/dn/bXAoq9/hyWztxKybj/tnBhbYIMPKAQr0S8liF5pk/img.png?width=800&amp;amp;height=380&amp;amp;face=0_0_800_380,https://scrap.kakaocdn.net/dn/tXFQc/hyWzz5QNIS/a0776rYxJd8PUNVu4qkM2K/img.png?width=1738&amp;amp;height=826&amp;amp;face=0_0_1738_826');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Blockchain A-Z:블록체인 만들기 완벽강의] 비잔틴 내결함성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;비잔틴 내결함성탈중앙화 시스템에서도 아주 중요한 특징으로 예시가 되는 이야기는 비잔틴 제국이 공격하여 점령하고자 했떤 성을 가정하여 네 명의 장군이 공격하는 상황을 빗대어 설명하고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;am0119.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;합의 프로토콜에서 해결해야 하는 문제는 크게 공격자로부터 네트워크를 보호하는 것과 합의 프로토콜이 블록체인의 경쟁 체인 문제를 해결해야한다는 것으로 두 가지로 나뉠 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #333333;&quot;&gt;&lt;b&gt;1. 공격자로부터 네트워크를 보호&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lhnHA/btsIzxgbgLM/z2ObpjOuUN0JMenVltxAX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lhnHA/btsIzxgbgLM/z2ObpjOuUN0JMenVltxAX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lhnHA/btsIzxgbgLM/z2ObpjOuUN0JMenVltxAX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlhnHA%2FbtsIzxgbgLM%2Fz2ObpjOuUN0JMenVltxAX0%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;561&quot; height=&quot;263&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;공격자가 체인끝에 블록을 놓고 새로운 블록을 추가하는 경우에 네트워크 보호 문제가 발생한다. 네트워크나 블록체인이 블록 채굴에 관해 12.5 비트코인으로 보상하는데, 이더리움에서 블록 추가를 위한 일정량의 이더이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한 채굴자는 해당 블록에 포함된 트랜잭션에 관한 수수료를 받으면서 채굴자에게 채굴에 대한 금전적인 인센티브가 주어진다. 하지만 악의적으로 트랜잭션을 추가했다면 보상이나 수수료를 받을 수 없다. 이는 막대한 전기료를 낼 수 없게 되는 페널티가 주어지게 되지만 이를 감수하지 않으려고 할 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;네트워크에 악의적인 블록이 추가된 것을 어떻게 알까?&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HBl9z/btsIze80TVf/LZ4q36axjbgvzMcO7IWynk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HBl9z/btsIze80TVf/LZ4q36axjbgvzMcO7IWynk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HBl9z/btsIze80TVf/LZ4q36axjbgvzMcO7IWynk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHBl9z%2FbtsIze80TVf%2FLZ4q36axjbgvzMcO7IWynk%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;369&quot; height=&quot;383&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;color: #2d2f31; text-align: start;&quot;&gt;
&lt;p data-purpose=&quot;transcript-cue&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;블록이 이렇게 추가되기 전에 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;네트워크로 전파되기 전에 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;각 단일 노드에서 위의 확인 절차를 거쳐 확인을 한다. 머클 해시나 이전 해시 필드 일치 여부, 타임 스탬프 등등을 확인하고 모두 통과하지 않으면 블록은 기각된다. 결과적으로 악의적인 블록이 체인에 추가되지 않도록 예방한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #333333;&quot;&gt;&lt;b&gt;2. 합의 프로토콜이 블록체인의 경쟁 체인 문제를 해결해야함&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nYoPd/btsIyBDuXtV/goA8V7JVsbr9ohd4QD7bK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nYoPd/btsIyBDuXtV/goA8V7JVsbr9ohd4QD7bK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nYoPd/btsIyBDuXtV/goA8V7JVsbr9ohd4QD7bK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnYoPd%2FbtsIyBDuXtV%2FgoA8V7JVsbr9ohd4QD7bK0%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;1707&quot; height=&quot;787&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;787&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대형 블록체인의 경우 전세계적으로 분산되어 있어 멀리 떨어진 노드 사이에 발생하는 지연에서 동시에 채굴이 가능할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;특별한 공격이 아닌 채굴방법도 동의하며 각 노드의 관점에서는 문제가 없지만 지연에 의한 채굴 문제가 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;블록은 내부에 다른 트랜잭션이 있을 수 있기 때문에 새로 생긴 주황색과 보라색 블록 둥중 어떤 블록을 증가시켜야하는 합의가 필요하게 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;두 블록을 수용하고 두 노드 사이에 필드를 분할할 수 없지만 만일 합의에 도달하지 않거나 합의 프로토콜이 없다면 두 체인은 충돌하여 2개로 분할되며 연쇄적으로 완전히 분할된 수많은 블록체인이 생성된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;합의 프로토콜 측면에서 다양한 유형의 합의 프로토콜이 있는 것이 중요하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1644&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kv4y5/btsIzOaXJzw/CLL5dNLGxsFAhSo3RhrVU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kv4y5/btsIzOaXJzw/CLL5dNLGxsFAhSo3RhrVU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kv4y5/btsIzOaXJzw/CLL5dNLGxsFAhSo3RhrVU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKv4y5%2FbtsIzOaXJzw%2FCLL5dNLGxsFAhSo3RhrVU1%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;1644&quot; height=&quot;749&quot; data-origin-width=&quot;1644&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;각 노드 간의 거리의 문제로 주황색 노드와 보라색 노드 간의 충돌이 발생한다. 주황색 노드는 보라색 노드에게 주황색 블록을 추가하라고 할 것이고, 반대로 보라색 노드는 보라색 블록을 추가하라고 할 것이다,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 비잔틴 내결함성 개념이 사용되게 된다. 합의 프로토콜이 메시지의 다수를 확인하고 실행하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 블록체인에서의 합의 프로토콜은 각각 채굴한 블록을 다른 노드에게 전파하는 과정에서 충돌이 발생할 때 다른 블록들이 추가될때까지 기다린 후 어떤 체인이 긴 지를 알수 있다. 이는 어느 쪽이든 먼저 블록을 추가한 체인이 이기고 다른 체인을 교체하게 된다. 핵심은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;가장 높은 해싱 파워를 가진 네트워크에서 가장 긴 체인을 생성하는 것&lt;/b&gt;&lt;/span&gt;이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/neCbo/btsIx7C2Ang/qZfk0PHdKrsOVSvLlhqhEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/neCbo/btsIx7C2Ang/qZfk0PHdKrsOVSvLlhqhEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/neCbo/btsIx7C2Ang/qZfk0PHdKrsOVSvLlhqhEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FneCbo%2FbtsIx7C2Ang%2FqZfk0PHdKrsOVSvLlhqhEK%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;977&quot; height=&quot;461&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 경우 주황색 체인이 보라색 체인보다 해싱 파워가 2배 더 크기 때문에 암호화 퍼즐을 풀 확률이 2배가 더 높은 것이 된다. 즉 해싱 파워가 높을 수록 암호화 퍼즐을 풀 확률은 높아진다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bo3Tn/btsIyw3C70j/KBHrKHHKWwDbWqUkFKsN40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bo3Tn/btsIyw3C70j/KBHrKHHKWwDbWqUkFKsN40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bo3Tn/btsIyw3C70j/KBHrKHHKWwDbWqUkFKsN40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBo3Tn%2FbtsIyw3C70j%2FKBHrKHHKWwDbWqUkFKsN40%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;1053&quot; height=&quot;461&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p id=&quot;SE-88364105-356a-4fbc-befa-1b33ed2a21b6&quot; style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;결론적으로 블록체인에서 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;합의 프로토콜의 의미는 &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;51%의 해싱 파워를 가졌거나 50% 이상의 해싱 파워를 가진 체인이 이긴다는 것&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;이다. 블록체인에서는 비잔틴 장군 문제와 달리 30% 이상의 악의적인 참여자나 배진자가 있으면 합의에 도달하지 못한다.&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;비잔틴 장군 문제는 70% 이상이 필요하지만 블록체인에서는 합의에 도달하려면 50% 이상이 필요하기 때문에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;합의 프로토콜과 프로토콜은 비잔틴 장군 문제에서의 합의 프로토콜보다 강력&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;하다.&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 원리로 충돌이 해결 되면 떨어진 보라색 노드들은&amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;주류 블록체인에 있지 않은 블록으로 고아 블록(Orphaned Block)이 된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;고아 블록은 채굴자들이 채굴했지만, 블록의 트랜잭션과 보상이 더 이상 유효하지 않게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a08b91b4-3009-4888-abd4-b1d1f9f87054&quot; style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;작업 증명 (PoW)과 지분 증명(PoS)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB47gl/btsIy5jNy1M/LGyk9kbJJsh3pkDSp8N3nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB47gl/btsIy5jNy1M/LGyk9kbJJsh3pkDSp8N3nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB47gl/btsIy5jNy1M/LGyk9kbJJsh3pkDSp8N3nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB47gl%2FbtsIy5jNy1M%2FLGyk9kbJJsh3pkDSp8N3nK%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;1129&quot; height=&quot;385&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;작업 증명(PoW)와 지분 증명(PoS)가 가장 유명하며, 현재 비트코인, 이더리움에서 사용된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYb0o8/btsIAb4D5N4/3JvpCghkBUxGybXk8WKr10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYb0o8/btsIAb4D5N4/3JvpCghkBUxGybXk8WKr10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYb0o8/btsIAb4D5N4/3JvpCghkBUxGybXk8WKr10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYb0o8%2FbtsIAb4D5N4%2F3JvpCghkBUxGybXk8WKr10%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;1131&quot; height=&quot;495&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;골든 논스라는 특정 논스를 발견해야 블록을 생성하 수 있으며 채굴자가 해결하고 있는 암호화 과제로 해당 논스에 도달하기 까지 많은 하드웨어적 투자를 들여야한다.&amp;nbsp;마지막에 있는 해시는 암호화 퍼즐을 풀기위한 키로 발견해야 블록을 생성할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/160</guid>
      <comments>https://am0119.tistory.com/160#entry160comment</comments>
      <pubDate>Sun, 14 Jul 2024 15:43:13 +0900</pubDate>
    </item>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] 비잔틴 내결함성</title>
      <link>https://am0119.tistory.com/159</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;비잔틴 내결함성&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vCKw4/btsIz9FMbww/ZoyBdAJztV8hxkH0RrMlk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vCKw4/btsIz9FMbww/ZoyBdAJztV8hxkH0RrMlk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vCKw4/btsIz9FMbww/ZoyBdAJztV8hxkH0RrMlk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvCKw4%2FbtsIz9FMbww%2FZoyBdAJztV8hxkH0RrMlk1%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;1738&quot; height=&quot;826&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&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;4명 이상의 장군이 전투를 하고자 했을 때 과반수의 동의가 있어야 행동을 개시할 수 있으며, 그 과정에서&amp;nbsp;대다수의 합의에 도달해야 한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반역자는 의견이 합의에 이르지 못하도록 훼방을 놓을 것이고, 이는 사전에 동의한 합의를 도출해 낼 수 있는 알고리즘을 따라야한다.&amp;nbsp;합의 알고리즘을 도출하는 경우 두가지 가설을 세우고 진행해야 할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;첫 번째는 사령관이 반역자가 아닌 경우이다.&amp;nbsp;&lt;/h4&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;두 번째는 사령관측이 배신자인 경우이다.&amp;nbsp;&lt;/h4&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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;비잔틴 내결함성&lt;/b&gt;&lt;/span&gt;이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 3분의 1이상이 반역자일 때는 작동할 수 없는 알고리즘으로 논문에서는 해당 알고리즘이 동작하려면 30% 이상, 33% 이하의 반역자가 있어야 한다. 이것이 반역자에 대한 본 시스템의 내결함성 수준인 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비잔틴 내결함성이 탈중앙화된 기술적인 시스템에서는 어떻게 적용되는 것인가?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템을 공격하려는 사람으로부터 보호하기 위해서 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;합의 프로토콜을 고안하는데, &lt;/span&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;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;&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/159</guid>
      <comments>https://am0119.tistory.com/159#entry159comment</comments>
      <pubDate>Sun, 14 Jul 2024 15:23:21 +0900</pubDate>
    </item>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] 채굴(Mining) 시스템</title>
      <link>https://am0119.tistory.com/158</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;채굴 작동 방식&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BeDrl/btsIxEVo8dx/djQMG1XT8wZ3u0KWAyHodK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BeDrl/btsIxEVo8dx/djQMG1XT8wZ3u0KWAyHodK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BeDrl/btsIxEVo8dx/djQMG1XT8wZ3u0KWAyHodK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBeDrl%2FbtsIxEVo8dx%2FdjQMG1XT8wZ3u0KWAyHodK%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;610&quot; height=&quot;356&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블록번호, 데이터, 이전 해시 값을 가지고 해시 알고리즘을 통해서 해시 값을 도출하는데, 채굴이 복잡한 이유는 무엇일까? 바로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;논스(Nonce)&lt;/b&gt;&lt;/span&gt;라는 필드 때문이다.&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;659&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k73eb/btsIAxNi3w2/h9k49W0vB5Q0CX2Gkab031/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k73eb/btsIAxNi3w2/h9k49W0vB5Q0CX2Gkab031/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k73eb/btsIAxNi3w2/h9k49W0vB5Q0CX2Gkab031/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk73eb%2FbtsIAxNi3w2%2Fh9k49W0vB5Q0CX2Gkab031%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;659&quot; height=&quot;338&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&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;이유는 데이터, 블록체인 번호, 이전 해쉬 값은 불변 원장의 특징에 의해 변화할 수 없지만, 논스를 이용해서 내용을 바꿈으로서 도출되는 해쉬값을 쇄도 효과에 의해서 극단적으로 다른 해쉬 값을도출 할 수 있다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;채굴 작동 방식 : 암호화 퍼즐&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;597&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xKe3I/btsIyHKcEwg/iFhPFRNkANP96LZhzNk4lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xKe3I/btsIyHKcEwg/iFhPFRNkANP96LZhzNk4lK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xKe3I/btsIyHKcEwg/iFhPFRNkANP96LZhzNk4lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxKe3I%2FbtsIyHKcEwg%2FiFhPFRNkANP96LZhzNk4lK%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;597&quot; height=&quot;304&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시는 숫자로 이루어지며, SHA256 해시의 경우 실제 숫자로 단어도 라벨도 아닌 단순한 문자의 나열 16진수 숫자로 숫자와 문자를 조합된다. 이때&amp;nbsp;더 높은 값으로 인코딩을 하게 되는데, SHA256은 선행 제로로 64개의 해쉬값으로 진행한다.&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;1144&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbAnjO/btsIyGdFGYa/VkvKHtOYSYkcJLhU7HvH4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbAnjO/btsIyGdFGYa/VkvKHtOYSYkcJLhU7HvH4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbAnjO/btsIyGdFGYa/VkvKHtOYSYkcJLhU7HvH4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbAnjO%2FbtsIyGdFGYa%2FVkvKHtOYSYkcJLhU7HvH4k%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;1144&quot; height=&quot;510&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&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;nbsp;채굴자들이 특정한 해시룰 달성하도록 설정한 대상이 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;906&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPKS6/btsIy30yYle/pglwOL3UJnCHQ4cOn0s3fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPKS6/btsIy30yYle/pglwOL3UJnCHQ4cOn0s3fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPKS6/btsIy30yYle/pglwOL3UJnCHQ4cOn0s3fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPKS6%2FbtsIy30yYle%2FpglwOL3UJnCHQ4cOn0s3fK%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;906&quot; height=&quot;411&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대상보다 값이 큰 해시는 고려 대상이 아니며, 블록에 대해 찾은 해시값이 대상보다 작아야 한다.&amp;nbsp;대상보다 더 클때 해당 블록체인에 대해 충분하지 않고,&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;대상을 고려할 때에 있어서 좋은 방법은 선행제로를 중심으로 생각해보며, 해시를 중심으로 대상을 기억하지 말고 선행 제로를 중심으로 기억한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1144&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctw8nm/btsIxFs5VCg/Y5bY7z8li9PqWkmIWfiSa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctw8nm/btsIxFs5VCg/Y5bY7z8li9PqWkmIWfiSa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctw8nm/btsIxFs5VCg/Y5bY7z8li9PqWkmIWfiSa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctw8nm%2FbtsIxFs5VCg%2FY5bY7z8li9PqWkmIWfiSa1%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;1144&quot; height=&quot;495&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논스 값을 22로 생성된 해쉬는 더 작은 해쉬값을 가지게 된다.&amp;nbsp;논스를 변형하여 대상 아래의 해쉬값이 나오도록 무차별 대입을 하여 대상에 대한 해쉬를 생성하였을 때 이때 작성된 논스 값을 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;골든 논스&lt;/b&gt;&lt;/span&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;암호화 퍼즐에 의해서 역설계 작업이 불가능하며, SHA256 해쉬 약속으로 쇄도 효과에 의한 역설계 작업이 불가능하다. 그렇기 때문에 채굴자는 보상을 받기 위하여 골드 논스를 구하기까지 논스를 바꾸며 원하는 해쉬를 찾아내는 작업을 필수적으로 진행하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예시의 오류 중에 하나는&amp;nbsp;선행 제로의 작업을 진행하기 때문에 이전 해쉬 값이 새로 생성되는 해쉬값보다 작아야하지만, 이전 해쉬값이 크다는 오류가..&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/158</guid>
      <comments>https://am0119.tistory.com/158#entry158comment</comments>
      <pubDate>Sun, 14 Jul 2024 15:13:24 +0900</pubDate>
    </item>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] 불변원장 및 분산 P2P 네트워크</title>
      <link>https://am0119.tistory.com/157</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;불변원장(immutable ledger)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8pdMN/btsIxD3iD3X/2XP5fCoKl2TbJLgIBmhyKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8pdMN/btsIxD3iD3X/2XP5fCoKl2TbJLgIBmhyKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8pdMN/btsIxD3iD3X/2XP5fCoKl2TbJLgIBmhyKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8pdMN%2FbtsIxD3iD3X%2F2XP5fCoKl2TbJLgIBmhyKk%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;1129&quot; height=&quot;478&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;/figure&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;nbsp;부동산 증서를 원장이 아닌 블록체인을 하게 된다면,&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;이는&amp;nbsp;체인이 연결되어 있는 단일 블록의 경우보다 시간이 지날 수록 더더욱 데이터 변형이 어려워지며 그렇기 때문에 불변 원장을 지원하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;919&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zj5An/btsIzcJ5zbV/4bKLGjLtBC58wh7lltxIQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zj5An/btsIzcJ5zbV/4bKLGjLtBC58wh7lltxIQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zj5An/btsIzcJ5zbV/4bKLGjLtBC58wh7lltxIQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZj5An%2FbtsIzcJ5zbV%2F4bKLGjLtBC58wh7lltxIQk%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;919&quot; height=&quot;467&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 표는 영국의 매월 발생하는 부동산의 트렌젝션 수로 특정 금액 이상의 부동산 거래가 발생하는 것을 트렌젝션에 기록한다. 이를&amp;nbsp;블록체인으로 옮기려는 시도가 진행되고 있다.&amp;nbsp;&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;분산 P2P 네트워크&amp;nbsp;&lt;/b&gt;&lt;/h3&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tkgIC/btsIx8hEF3l/N52YkkrlRDeiv5YShdG4mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tkgIC/btsIx8hEF3l/N52YkkrlRDeiv5YShdG4mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tkgIC/btsIx8hEF3l/N52YkkrlRDeiv5YShdG4mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtkgIC%2FbtsIx8hEF3l%2FN52YkkrlRDeiv5YShdG4mK%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;1111&quot; height=&quot;462&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&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;바로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;분산 P2P 네트워크&lt;/b&gt;&lt;/span&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;이때 공격자가 특정 pc의 블록체인에 접근하여 성공적으로 블록을 변형하였지만 다른 여러 pc에서 해당 데이터의 값이 잘못되었다는 것을 동시적으로 확인할 수 있기 때문에 데이터의 불변성을 보장하게 된다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 블록이 변형이 되어도 스스로 업데이트가 되며,&amp;nbsp;신뢰할 수 없는 프레임워크에서 신뢰를 가져오게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 여러 PC 간의 합의 프로토콜로 블록체인은 강화된다.&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/157</guid>
      <comments>https://am0119.tistory.com/157#entry157comment</comments>
      <pubDate>Sat, 13 Jul 2024 22:56:57 +0900</pubDate>
    </item>
    <item>
      <title>[Blockchain A-Z:블록체인 만들기 완벽강의] SHA256 Hash 알고리즘</title>
      <link>https://am0119.tistory.com/156</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;SHA256 Hash&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoIDcc/btsIybyG3fv/U2vVZ0Rkk9WSsRVqfssvxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoIDcc/btsIybyG3fv/U2vVZ0Rkk9WSsRVqfssvxK/img.png&quot; data-alt=&quot;SHA256 Hash&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoIDcc/btsIybyG3fv/U2vVZ0Rkk9WSsRVqfssvxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoIDcc%2FbtsIybyG3fv%2FU2vVZ0Rkk9WSsRVqfssvxK%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;1034&quot; height=&quot;450&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SHA256 Hash&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHAk256 Hash는 NSA에서 개발한 알고리즘으로 해시 길이는 64이고 16진수로 되어 있어서 숫자와 문자가 섞여 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해시 한 문자당 4비트로 총 256비트로 되어 있으며, 같은 데이터를 입력하면 같은 해쉬값을 도출한다. 이는&amp;nbsp;데이터가 약간 달라졌을 때 완전히 다른 해쉬값을 가지게 되며 이를 쇄도 효과라 부른다.&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;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;단방향이여야한다. -&amp;gt; 복원이 불가능하다&lt;/li&gt;
&lt;li&gt;결정적이여야한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;연산이 빨라야 한다&lt;/li&gt;
&lt;li&gt;쇄도효과가 발생한다.&lt;/li&gt;
&lt;li&gt;충돌 저항성이 있다.&amp;nbsp;&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;해싱 알고리즘의 길이는 64비트로 제한적으로 생성되는 데 반해, 일반적인 데이터의 양은 64비트로 표현할 수 있는 것보다 훨씬 많이 존재하게 된다.&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;1131&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lPRd1/btsIyHKkMxr/Sa193P0yumTOVNkFw18lQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lPRd1/btsIyHKkMxr/Sa193P0yumTOVNkFw18lQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lPRd1/btsIyHKkMxr/Sa193P0yumTOVNkFw18lQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlPRd1%2FbtsIyHKkMxr%2FSa193P0yumTOVNkFw18lQk%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;1131&quot; height=&quot;429&quot; data-origin-width=&quot;1131&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&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;nbsp;SHA 알고리즘의 동작원리는 On the Secure Hash Algorithm family chapter1에서 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/156</guid>
      <comments>https://am0119.tistory.com/156#entry156comment</comments>
      <pubDate>Sat, 13 Jul 2024 22:44:21 +0900</pubDate>
    </item>
    <item>
      <title>[Unity] 유니티에서 화상 통화 기능 구현</title>
      <link>https://am0119.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=WIC7TfScm_M&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dVIfSr/hyWvMEbtzL/VxDsZGHLziZTfqKAauI5Jk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;유나이트 서울 2020 - Unity 앱에 인터랙티브 영상 채팅을 구축하는 방법 Track3-9&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/WIC7TfScm_M&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Agora&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Agora SDK:는 2017 LTS 이상 버전을 지원하며 &lt;a href=&quot;https://www.agora.io/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Agora.io&lt;/a&gt; 에 접속항 새 프로젝트를 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 영상과 달리 유니티 에셋 스토어에서는 더이상 Agora SDK 를 지원하지 않는 것같기 때문에 다음 링크에서 다운받아준다,&amp;nbsp;&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;921&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0fcAM/btsIpzzEiad/ZtkTwExSOYQS4lAKM39U31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0fcAM/btsIpzzEiad/ZtkTwExSOYQS4lAKM39U31/img.png&quot; data-alt=&quot;https://docs.agora.io/en/sdks?platform=unity&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0fcAM/btsIpzzEiad/ZtkTwExSOYQS4lAKM39U31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0fcAM%2FbtsIpzzEiad%2FZtkTwExSOYQS4lAKM39U31%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;921&quot; height=&quot;546&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.agora.io/en/sdks?platform=unity&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckfKp3/btsIrtYLvin/dIWVPlQZFWhScZYLOY6slk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckfKp3/btsIrtYLvin/dIWVPlQZFWhScZYLOY6slk/img.png&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;576&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.7506%; margin-right: 10px;&quot; data-widthpercent=&quot;35.16&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckfKp3/btsIrtYLvin/dIWVPlQZFWhScZYLOY6slk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckfKp3%2FbtsIrtYLvin%2FdIWVPlQZFWhScZYLOY6slk%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;349&quot; height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu0IQH/btsIrqHJGxD/Nn6symtPApJPbLyjCaqlW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu0IQH/btsIrqHJGxD/Nn6symtPApJPbLyjCaqlW1/img.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;707&quot; data-is-animation=&quot;false&quot; style=&quot;width: 64.0866%;&quot; data-widthpercent=&quot;64.84&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu0IQH/btsIrqHJGxD/Nn6symtPApJPbLyjCaqlW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu0IQH%2FbtsIrqHJGxD%2FNn6symtPApJPbLyjCaqlW1%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;790&quot; height=&quot;707&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;926&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFpB9o/btsIqa6Ts1a/kEQDq1sYJrjGQOr3BnHpp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFpB9o/btsIqa6Ts1a/kEQDq1sYJrjGQOr3BnHpp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFpB9o/btsIqa6Ts1a/kEQDq1sYJrjGQOr3BnHpp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFpB9o%2FbtsIqa6Ts1a%2FkEQDq1sYJrjGQOr3BnHpp0%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;926&quot; height=&quot;774&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;agora에서 생성한 프로젝트의 app ID, project name을 가지고 아래 문서를 참고하여 코드를 작성하고 빈 오브젝트를 생성해서 스크립트를 적용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720308754262&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot; data-og-description=&quot;&quot; data-og-host=&quot;docs.agora.io&quot; data-og-source-url=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot; data-og-url=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;https://docs.agora.io/en/video-calling/get-started/get-started-sdk?platform=unity#set-up-an-event-handler&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.agora.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsuY7S/btsIo8oM5T0/YmtWk2xweyT9B8gkiClr6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsuY7S/btsIo8oM5T0/YmtWk2xweyT9B8gkiClr6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsuY7S/btsIo8oM5T0/YmtWk2xweyT9B8gkiClr6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsuY7S%2FbtsIo8oM5T0%2FYmtWk2xweyT9B8gkiClr6K%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;1019&quot; height=&quot;704&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자꾸 클래스명과 파일명이 다르다는 오류가 발생하는데 다른 이름도 써보고 이것저것다 해봤는데 왜 안되는거지..&lt;/p&gt;</description>
      <category>자기개발/Unity</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/145</guid>
      <comments>https://am0119.tistory.com/145#entry145comment</comments>
      <pubDate>Sun, 7 Jul 2024 07:07:53 +0900</pubDate>
    </item>
    <item>
      <title>[솔리디티 깨부수기] 상속 : super, 상속의 순서</title>
      <link>https://am0119.tistory.com/140</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 인프런 &quot;솔리디티 깨부수기&quot; 상속4, 5 강의를 수강한 후 정리한 글입니다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1718132929879&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&quot; data-og-description=&quot;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99/dashboard&quot; data-og-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xFDH0/hyWg1h4hhY/dV93l7doBIgLfIYjxscfG0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/1oFUV/hyWha7d3od/hKjBFifH41vcx2CadeRro0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xFDH0/hyWg1h4hhY/dV93l7doBIgLfIYjxscfG0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/1oFUV/hyWha7d3od/hKjBFifH41vcx2CadeRro0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;super&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;super 은 함수를 오버라이딩 할 때 사용하며 super을 통해 원래 함수를 가지게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 예제를 통하여 설명하도록 하겠다. 부자관계의 스마트 컨트렉이 있고, &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Son 컨트랙은&lt;/span&gt; father 컨트랙 안에 who 함수를 상속받아 오버라이딩한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718133047378&quot; class=&quot;cs&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;// SPDX-License-Identifier:GPL-30
pragma solidity &amp;gt;= 0.7.0 &amp;lt; 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName(&quot;KimDaeho&quot;);
    }
}


contract Son is Father{
    event sonName(string name);
    function who() public override{
        emit FatherName(&quot;KimDaeho&quot;);
        emit sonName(&quot;KimJin&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Son 컨트랙은 , 아버지의 FatherName 이벤트를 그대로 유지하고, 자신의 sonName 이벤트를 추가했다. 만약, Son 컨트랙 부분의 오러라이딩한 함수 who 안에 여러줄의 코드를 써야한다면, 매우 번거로워 진다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이때 사용할 수 있는것이&amp;nbsp; super 으로 상속받을 함수를 그자체로 가져온다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718133047379&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// SPDX-License-Identifier:GPL-30
pragma solidity &amp;gt;= 0.7.0 &amp;lt; 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName(&quot;KimDaeho&quot;);
    }
}

contract Mother {
    event MotherName(string name);
    function who() public virtual{
        emit MotherName(&quot;leeSol&quot;);
    }
}

contract Son is Father{
    event sonName(string name);
    function who() public override{
        super.who();
        emit sonName(&quot;KimJin&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1529&quot; data-origin-height=&quot;993&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0brV/btsHUEuYh2w/ksosq7qZ3qZvu87r5TN7PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0brV/btsHUEuYh2w/ksosq7qZ3qZvu87r5TN7PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0brV/btsHUEuYh2w/ksosq7qZ3qZvu87r5TN7PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0brV%2FbtsHUEuYh2w%2Fksosq7qZ3qZvu87r5TN7PK%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;1529&quot; height=&quot;993&quot; data-origin-width=&quot;1529&quot; data-origin-height=&quot;993&quot;/&gt;&lt;/span&gt;&lt;/figure&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;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;상속의 순서&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상속의 순서를 통하여 super가 어떻게 작동하는지에 대해서 알아보겠다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718133075538&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// SPDX-License-Identifier:GPL-30
pragma solidity &amp;gt;= 0.7.0 &amp;lt; 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName(&quot;KimDaeho&quot;);
    }
}

contract Mother {
    event MotherName(string name);
    function who() public virtual{
        emit MotherName(&quot;leeSol&quot;);
    }
}

contract Son is Father, Mother{
    
    function who() public override(Father,Mother){
        super.who();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;예시로 가족 관계의 스마트 컨트랙을 작성하고, &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Son 컨트랙은 Father 와 Mother를 상속 받는다.&lt;/span&gt;&amp;nbsp; 각각 father와 mother은 동일하게 who 함수가 있고, 오버라이딩하여 super을 통해 son 컨트랙에 가져온다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;위에서 super를 사용하여 who 함수를 상속받을 때 어떤 스마트 컨트랙의 함수를 상속 받을까? &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;1413&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bySSyD/btsHVKHMEcJ/Cua5iopi4IQE0G2zDwQSMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bySSyD/btsHVKHMEcJ/Cua5iopi4IQE0G2zDwQSMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bySSyD/btsHVKHMEcJ/Cua5iopi4IQE0G2zDwQSMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbySSyD%2FbtsHVKHMEcJ%2FCua5iopi4IQE0G2zDwQSMk%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;1413&quot; height=&quot;954&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Mother의 것이 상속되어서 leeSol 이 반환된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이유는 Son is Father , Mother 이기 때문에 즉 Mother 두번째 (최신) 으로 상속 받았기에 그렇다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/140</guid>
      <comments>https://am0119.tistory.com/140#entry140comment</comments>
      <pubDate>Wed, 12 Jun 2024 04:11:28 +0900</pubDate>
    </item>
    <item>
      <title>[솔리디티 깨부수기] event2 - indexed</title>
      <link>https://am0119.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 인프런 &quot;솔리디티 깨부수기&quot; 강의를 수강한 후 정리한 글입니다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1717505370031&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&quot; data-og-description=&quot;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot; data-og-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1nLvv/hyWdoxBS3B/kXVTJD03RILuRVJphkzUK0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/AQhF7/hyWg0u5vMa/mwrN1Ezmjlbd0NK7MPIbqK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1nLvv/hyWdoxBS3B/kXVTJD03RILuRVJphkzUK0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/AQhF7/hyWg0u5vMa/mwrN1Ezmjlbd0NK7MPIbqK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;indexed는 이벤트의 키워드로 블록들안에 출력된 이벤트들을 필터하여 특정한 이벤트 값들을 가지고 올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1717548496605&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity &amp;gt;=0.8.0 &amp;lt;0.9.0;

contract Lec14 {
    event numberTracker(uint256 indexed num, string str);
    event numberTracker2(uint256 indexed num, string str);

    uint256 num =0;
    function PushEvent(string memory _str) public {
        emit numberTracker(num,_str);
        emit numberTracker2(num,_str);
        num ++;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위의 예제에서 numberTracker2는 indexed가 있어 num을 통해 특정 이벤트 값들을 갖고 올 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어 numberTraker2가 10개의 이벤트가 있다고 가정하고, 5라는 num만 필요하다면, 5만 입력하여 numberTraker2의 이벤트를 가져올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;numberTraker는 동일한 가정에서 5라는 num만 필요하다면, 5만 적힌 이벤트를 갖고 올 수 없다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉, indexed를 통해 원하는 이벤트 값들을 필터링하여 갖고올 수 있음을 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;배포를 진행하면 logs에서 numberTracker와 numberTracker2가 출력된다.&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;378&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5SxdM/btsHNqDDlPy/qfYdkzw8kARcbjE41lt4d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5SxdM/btsHNqDDlPy/qfYdkzw8kARcbjE41lt4d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5SxdM/btsHNqDDlPy/qfYdkzw8kARcbjE41lt4d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5SxdM%2FbtsHNqDDlPy%2FqfYdkzw8kARcbjE41lt4d1%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;378&quot; height=&quot;398&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ppqXm/btsHO3mDdhI/mERXFxs0M4EfWU2OjhsPB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ppqXm/btsHO3mDdhI/mERXFxs0M4EfWU2OjhsPB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ppqXm/btsHO3mDdhI/mERXFxs0M4EfWU2OjhsPB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FppqXm%2FbtsHO3mDdhI%2FmERXFxs0M4EfWU2OjhsPB0%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;1419&quot; height=&quot;434&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에는 출력은 하되 특정 값들을 갖고 오는 상태가 아니기 때문에 차이점을 알아보기 위해 vscode로 확인해보겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1919&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDDhgt/btsHPIhVPUP/C4AqARmm99TeHiKV60RPNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDDhgt/btsHPIhVPUP/C4AqARmm99TeHiKV60RPNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDDhgt/btsHPIhVPUP/C4AqARmm99TeHiKV60RPNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDDhgt%2FbtsHPIhVPUP%2FC4AqARmm99TeHiKV60RPNk%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;1919&quot; height=&quot;1020&quot; data-origin-width=&quot;1919&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에와 같이 js 코드를 작성할 수 있으며, getPastEvents 함수를 생성하여 num을 통해 필터링을 진행할 수 있다. &lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;num은 2나 1일 때인 이벤트를 갖고올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;fromBlock과 toBlock은 블록들의 범위를 나타낸다.&amp;nbsp;&lt;/span&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;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;이후 3개의 이벤트를 생성하면 블록안에 들어가게 되고, numberTracker은 indexed를 사용하지 않았기 때문에 필터링이 안되고 전부 출력되며, numberTracker2는 두 번째와 첫 번째 이벤트만 출력된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/139</guid>
      <comments>https://am0119.tistory.com/139#entry139comment</comments>
      <pubDate>Tue, 4 Jun 2024 21:50:39 +0900</pubDate>
    </item>
    <item>
      <title>[솔리디티 깨부수기] event 정의</title>
      <link>https://am0119.tistory.com/138</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 인프런 &quot;솔리디티 깨부수기&quot; 강의를 수강한 후 정리한 글입니다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1717505232075&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&quot; data-og-description=&quot;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot; data-og-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c1nLvv/hyWdoxBS3B/kXVTJD03RILuRVJphkzUK0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/AQhF7/hyWg0u5vMa/mwrN1Ezmjlbd0NK7MPIbqK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EC%8A%A4%EB%A7%88%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%9E%99#curriculum&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c1nLvv/hyWdoxBS3B/kXVTJD03RILuRVJphkzUK0/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/AQhF7/hyWg0u5vMa/mwrN1Ezmjlbd0NK7MPIbqK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[지금 무료] 솔리디티 깨부수기 | D_One - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK!&amp;nbsp;처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제   [사진] 이 강의에서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;event&lt;/b&gt; 란, 블록체인 네트워크의&amp;nbsp; 블록에 특정값을 기록하는 것을 말한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를들어서, 송금하기 라는 함수가 있다고 가정하였을때, 송금하기 버튼을 누르면,&amp;nbsp;누른 사람의 계좌와 금액이 이벤트로 출력이 되어서 블록체인 네트워크 안에 기록이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로그를 사용하여, 블록에 각인시키는것은&amp;nbsp; 일반적으로 string 이나 다른 값들을 스마트컨트랙에 저장하는것보다 효율적이다.&lt;/p&gt;
&lt;pre id=&quot;code_1717548180300&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;event 이벤트의이름 (쓰고자하는 타입과 이름);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드를 작&lt;/p&gt;
&lt;pre id=&quot;code_1717547281946&quot; class=&quot;bash&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity &amp;gt;=0.8.0 &amp;lt;0.9.0;

contract lec13 {
   
    event info(string name, uint256 money);
    
    function sendMoney() public {
        emit info(&quot;KimDaeJin&quot;, 1000);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;sendMoney 함수를 보시면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;emit&lt;/b&gt;&lt;/span&gt;을 통해서 info 이벤트를 생성했던 string name, uint256 money 두 개 값들을&amp;nbsp; 받아서 출력하려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1717547956968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;emit 이벤트이름 (이벤트 파라메터 값넣어주기)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;remix에 코드를 실행해보면 아래와 같은 화면이 나온다.&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;1424&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FTYWV/btsHOh0cXgt/tdT2iuiaSbihRzLPE9ShIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FTYWV/btsHOh0cXgt/tdT2iuiaSbihRzLPE9ShIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FTYWV/btsHOh0cXgt/tdT2iuiaSbihRzLPE9ShIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFTYWV%2FbtsHOh0cXgt%2FtdT2iuiaSbihRzLPE9ShIK%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;1424&quot; height=&quot;427&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;logs 부분에 저희의 info 이벤트를 확인하면 값은 김대진, 1000을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 블록 안에 event info가 저장이 되어서 info 값을이 블록 안에 저장이 되었기에 언제든지 들고 와서 쓸 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자기개발/블록체인</category>
      <author>동굴러버의 백업단지</author>
      <guid isPermaLink="true">https://am0119.tistory.com/138</guid>
      <comments>https://am0119.tistory.com/138#entry138comment</comments>
      <pubDate>Tue, 4 Jun 2024 21:48:45 +0900</pubDate>
    </item>
  </channel>
</rss>