본문 바로가기

Blockchain113

[Blockchain] 이더리움 토큰 발행 ERC-20 이란? 이더리움 블록체인 메인넷에서 토큰을 발행하고, 관리할 수 있습니다. 내가 만든 토큰으로 디앱을 구동하고, 특정 행동을 유인하는 수단으로 사용할 수 있습니다. ERC(Ethereum Request for Comment)는 이더리움 블록체인 네트워크에서 정한 표준 스펙입니다. 그 중에서도 20번째로 제안된 표준이 바로 ERC-20입니다. 이더리움에서 새로운 표준이 적용되기 위해서는 EIP(Ethereum Improvemnet Proposal)을 통해 제안되고, ERC에서 구체화되어 표준이 됩니다. 즉 EIP는 개선 제안이며, ERC는 기능 표준을 의미합니다. 예를 들어 이더리움에서 블루투스 통신이 가능하게 하면 어떨까요? 라고 제안하는 것은 EIP라고 할 수 있고, 블루투스 표준 스펙을 사용해 이더리움 내에.. 2022. 7. 14.
[Blockchain] 가위바위보 스마트 컨트랙트 개선하기 가위바위보 스마트 컨트랙트 게임을 배포하고 난 후 문제점이 발견됩니다. 새로운 방을 생성한 방장이 입력한 조건값이 트랜잭션에 그대로 노출된다는 점입니다. 스마트 컨트랙트에서 발생한 트랜잭션을 뜯어보면 input Data 부분에 방장이 입력한 값이 버젓이 나오고 있습니다. 이에, 참여자들은 방장이 입력한 값을 보고 이길 수 있는 조건값을 걸어 무한정 이길 수 있게 됩니다. 이를 방지하기 위해서는 입력값을 외부에 노출되지 않도록 해야 합니다. 이 때 필요한 함수가 바로 해시 함수입니다. [Blockchain] 가위 바위 보 스마트 컨트랙트 만들기 가위 바위 보 게임을 솔리디티로 작성할 수 있습니다. 플레이어들은 각각 가위, 바위, 보 3가지 옵션 중 하나를 선택해 게임에 참여할 수 있고, 승리한 플레이어는 .. 2022. 7. 13.
[Blockchain] 가위 바위 보 스마트 컨트랙트 만들기 가위 바위 보 게임을 솔리디티로 작성할 수 있습니다. 플레이어들은 각각 가위, 바위, 보 3가지 옵션 중 하나를 선택해 게임에 참여할 수 있고, 승리한 플레이어는 베팅된 금액을 모두 가져갈 수 있습니다. 가위 바위 보 스마트 컨트랙트 게임은 총 4개의 함수로 구성됩니다. createRoom : 게임을 위한 방을 생성합니다. joinRoom : 플레이어들은 게임을 위해 방에 참여합니다. checkTotalPay : 해당 방에 베팅된 이더(ETH)를 확인합니다. payout : 게임을 종료한 후 베팅된 금액을 송금합니다. 스마트 컨트랙트 구조 잡기 스마트 컨트랙트의 기본 요소인 라이센스, pragma version, 컨트랙트를 작성합니다. 가위 바위 보 게임은 이더(ETH)를 베팅한 후 송금받는 기능을 가지.. 2022. 7. 13.
[Blockchain] Remixd 사용하는 방법 Remixd란? 솔리디티 개발에 최적화된 IDE는 Remix입니다. 기본적으로 웹에서 작동하므로 브라우저의 캐시를 기반으로 작성한 코드를 저장하게 됩니다. 만약 브라우저 내 저장되어 있는 캐시 데이터가 사라지면 코드도 사라져 버립니다. 이 때 필요한 유틸리티가 Remixd입니다. Remixd는 로컬에 저장되어 있는 소스코드를 Remix IDE와 연동해줍니다. 로컬과 웹소켓 통신으로 웹 상의 Remix와 로컬의 VS code가 자동으로 연동하게 해줍니다. 코드를 백업하기 위한 용도로 최적입니다. Remixd 사용하기 다양한 방법이 있지만 NPM 기반 사용법을 소개합니다. 소스코드가 위치한 디렉토리에서 package.json 파일을 생성합니다. $ npm init Remixd 패키지를 설치해줍니다. $ np.. 2022. 7. 12.
[Blockchain] 이더리움 스마트 컨트랙트 배포하기(Remix) 이더리움 블록체인 네트워크에 스마트 컨트랙트를 작성하여 배포할 수 있습니다. 이를 위해서는 먼저 솔리디티 언어로 스마트 컨트랙트를 작성한 후 solc로 컴파일한 후 abi와 bytecode를 배포합니다. Soldity 컴파일러 solc 설치 우선 저장소에 ethereum을 추가한 후 solc를 설치합니다. $ sudo add-apt-repository ppa:ethereum/ethereum $ sudo apt update $ sudo apt install solc 설치가 완료되면 version을 확인하여 정상적으로 설치 여부를 확인합니다. $ solc --version solc, the solidity compiler commandline interface Version: 0.8.15+commit.e14.. 2022. 7. 12.
[Blockchain] 블록체인 오라클(Oracle) 문제란? 블록체인에 올라간 스마트 컨트랙트는 수동적인 존재입니다. 즉, EOA를 통해서만 작동하게 됩니다. 즉, 스마트 컨트랙트는 주어진 데이터에 따라 계약을 이행하기만 하기 때문에 외부 데이터가 올바른 데이터인지 검증할 능력은 가지고 있지 않습니다. 만약 해커에 의해 위변조된, 출처가 불분명한 데이터를 가져오는 과정에서 오작동을 일으킬 소지가 있습니다. 이를 오라클(Oracle) 문제라고 합니다. 예를 들어 A,B가 선거에 출마했습니다. A가 당선되면 C에게 코인을 지급하고, B가 당선되면 D에게 코인을 지급하는 스마트 컨트랙트가 있다고 가정합니다. 실제로는 A가 당선되었지만 D의 이익을 대변하는 해커가 B가 당선되었다는 거짓 정보로 변조해서 스마트 컨트랙트에 입력하게 되면 스마트 컨트랙트는 외부 정보를 검증할.. 2022. 7. 11.
[Blockchain] 이더리움 프라이빗 네트워크 구축 방법 실제 이더리움 블록체인에서는 여러 노드들이 연결됩니다. 프라이빗 네트워크 환경에서 멀티 노드를 구성한 후 실제 이더리움 처럼 작동하는 방법을 알아봅니다. 이더리움 프라이빗 네트워크를 사용하는 OS 는 Docker에서 ubuntu 이미지를 가져와 사용합니다. 아래 글들을 참고하시면 싱글 노드를 위한 제네시스 블록 생성, 채굴, 트랜잭션 생성 방법 등을 확인하실 수 있습니다. [Blockchain] 이더리움 Geth 설치 방법(Ubuntu Docker) Ubuntu 환경에서 이더리움 Geth 클라이언트를 실행할 수 있습니다. 우분투 환경은 Docker Hub에서 이미지를 가져와서 실행합니다. 물론 자체적으로 우분투를 메인 OS로 사용하시면 바로 Geth를 실행해 about-tech.tistory.com [B.. 2022. 7. 8.
[Blockchain] 이더리움 EVM 작동 구조 원리 상태 머신이란 입력을 읽어서 새로운 상태로 전환하는 것입니다. 이더리움은 거래에 기반을 둔 상태 머신(Transaction-Based State Machine)입니다. 이더리움의 상태머신의 시작은 Genesis Block입니다. 이 후 새로운 트랜잭션이 실행되면 다음 상태로 전환되게 됩니다. 즉, 현재 상태는 새로운 트랜잭션이 들어오지 않은 마지막 상태입니다. 이더리움에는 여러개의 트랜잭션이 존재합니다. 각 트랜잭션들은 블록에 담기게 되며, 블록은 이전 블록과 연결되어 있습니다. 이더리움 계정(EOA, CA) 이더리움의 계정에는 EOA(Externally Owned Account)와 CA(Contract Account) 2가지 종류가 있습니다. 모든 계정들의 식별은 주소로 이뤄지며, 동일한 주소 공간을 .. 2022. 7. 8.
[Blockchain] 이더리움이란? 이더리움이란? 이더리움은 비트코인의 제한적인 기능을 넘어 스마트 컨트랙트 기능을 확장하여 제3의 신뢰 제공자 없이도 거래 이행이 가능하도록 하는 오픈소스 퍼블릭 블록체인입니다. 개발자라면 누구든지 dApp을 만들어 이더리움메인넷에 올려서 서비스를 제공할 수 있습니다. dApp을 개발하기 위한 언어로 솔리디티(Solidity)를 지원하고 있고, 이더리움 메인넷에 올라가는 솔리디티 코드들은 EVM(Ethereum Virtual Machine) 위에서 작동합니다. 이더리움은 어떻게 탄생했나요? 이더리움 창시자 비탈릭 부테린은 2011년 비트코인 매거진을 창립합니다. 당시 비트코인이 제한된 스마트 컨트랙트로 암화화폐 교환에만 치중되어 있는 것을 보고 일반 웹이나 앱처럼 어플리케이션을 돌릴 수 있는 퍼블릭 블록체.. 2022. 7. 7.
[Blockchain] 비트코인 UTXO 뜻 원리 비트코인에서 잔액을 확인하기 위해서는 UTXO에 저장된 양을 보고 확인할 수 있습니다. UTXO(Unspent Transaction Outputs)란 소비되지 않은 거래 출력값을 의미합니다. UT비트코인 블록체인에서 트랜잭션의 구조를 먼저 이해해야 합니다. 비트코인 트랜잭션 구조 비트코인 트랜잭션은 Transaction Version, Inputs, Outputs, Lock Time 4부분으로 구성되어 있습니다. Transaction Version은 네트워크 상에서 트랜잭션 유형을 규정합니다. 버전 별로 트랜잭션의 구조가 조금씩 다르기 때문입니다. 노드 입장에서 버전에 따라 트랜잭션을 어떻게 읽어야 하는지 정의하는데 사용됩니다. Lock Time은 트랜잭션의 마지막 데이터로 블록체인에 트랜잭션을 포함할 .. 2022. 7. 7.
[Blockchain] 스마트 컨트랙트란? 블록체인 2.0인 이더리움이 주목받는 이유는 스마트 컨트랙트(Smart Contract) 덕분입니다. 스마트 컨트랙트는 블록체인 네트워크에 호스팅되어 실행되는 프로그램입니다. 미리 지정된 조건이 충족되면 계약을 자동으로 이행하게 됩니다. 기존 계약 처럼 서면으로 당사자와 중개인이 모여 계약을 체결하는 방식이 아닌 디지털화를 통해 빠르고, 안전하게 계약 이행을 보장할 수 있습니다. 스마트 컨트랙트가 호스팅되는 블록체인 네트워크가 중앙 집중식 서버가 아닌 탈중앙화된 블록체인에서 실행되기 때문에 계약 내용을 위변조하거나 뇌물에 의해 계약 조건이 변경되는 일을 방어합니다. 스마트 컨트랙트 역사 스마트 컨트랙트 개념이 최초로 나온건 1994년 입니다. 닉 사보(Nick Szabo)는 스마트 컨트랙트의 정의를 다음.. 2022. 7. 7.
[Blockchain] 이더리움 머클 패트리시아 트리(MPT)란? 블록체인이 기존 서비스들을 대체하기에 가장 큰 힘은 탈중앙성에서 나옵니다. 즉 네트워크에 참여한 모든 노드들이 동일한 데이터를 공유하고 관리하는 시스템은 투명한 거래와 보안성을 보장합니다. 하지만 네트워크가 성장하면서 자연스럽게 노드들간에 동기화되는 데이터의 양이 많아지게 되고, 이는 네트워크 성능 저하로 이어지게 됩니다. 예를 들어 스마트폰에서 풀 블록체인을 다운로드 할 수 없습니다. 용량의 크기가 300GB가 넘어가기 때문입니다. 이러한 문제를 해결하기 위해 블록체인 네트워크들은 제각각 해결책을 내놓기 시작합니다. 비트코인에서는 머클 트리(Merkle Tree)를 사용하고, 이더리움에서는 머클 패트리시아 트리(MPT, Merkle Patricia Tree) 기반의 트리 자료구조를 사용합니다. 트리 내.. 2022. 7. 6.
[Blockchain] 이더리움 Geth 사용 방법 2 (이더 송금하기) 이더 송금하기 현재 처리 대기중인 트랜잭션 목록을 조회합니다. > eth.pendingTransactions [] account 1에서 account 0로 2이더를 전송합니다. 송금에는 eth.sendTransaction()을 사용합니다. 트랜잭션이 생성되면 트랝잭션 해시가 출력됩니다. 송금 후 잔액 변동이 없는 이유는 트랜잭션이 블록에 올라가지 않았기 때문입니다. // 잔액 존재 > eth.getBalance(eth.accounts[1]) 50000000000000000000 // 2 이더를 송금합니다. > eth.sendTransaction({ ...... from:eth.accounts[1], ...... to:eth.accounts[0], ...... value:web3.toWei(2, 'ethe.. 2022. 7. 5.
[Blockchain] 이더리움 Geth 사용 방법 로컬 테스트넷에서 Geth 실행하는 방법 Geth를 로컬 테스트넷에서 실행하기 위해서는 먼저 데이터 디렉토리 + genesis.json 파일이 준비되어야 합니다. 데이터 디렉토리에서는 송수신한 블록 데이터 및 계정 정보를 저장하게 됩니다. genesis.json 파일은 블록체인의 Genesis 블록 정보가 저장됩니다. git에서 Clone한 go-ethereum 프로젝트 내에 test_data 디렉토리를 생성하고, genesis.json 파일을 생성합니다. 정상적으로 이더리움 블록체인에 접속 가능한지 확인합니다. $ geth 이더리움 테스트넷에서 사용할 계정 생성 다음 명령을 입력한 후 2번의 password를 입력하면 정상적으로 account가 생성됩니다. Public Key가 생성되는데, 이 키는 g.. 2022. 7. 5.
[Blockchain] 이더리움 Geth 설치 방법(Ubuntu Docker) Ubuntu 환경에서 이더리움 Geth 클라이언트를 실행할 수 있습니다. 우분투 환경은 Docker Hub에서 이미지를 가져와서 실행합니다. 물론 자체적으로 우분투를 메인 OS로 사용하시면 바로 Geth를 실행해도 되지만 가상 환경에서 돌리면서 개발환경 혹은 실행환경을 일치시킬 수 있는 장점이 있습니다. Docker Ubuntu 설치 & 실행방법 Docker는 컨테이너 기반 오픈소스 가상화 플랫폼으로 서버 환경, 개발 환경이 다른 경우에도 일관적인 환경으로 개발이 가능하도록 해줍니다. Docker를 사용하면 개발 환경이 변하는 상황에서도 환경변수나 경로를 수정하지 않고 컴퓨터 셋팅을 새로 할 필요 없이 Docker Hub에 올라온 image를 사용해서 개발 환경을 그대로 구현할 수 있습니다. [Docke.. 2022. 7. 5.