본문 바로가기

BlockChain

(8)
콜, 트랜잭션, 윈도우 geth사용하기 이더리움 디앱 스터디 책 117p ~ 143p 콜과 트랜잭션 콜 일반적으로 컨트랙트 멤버 변수를 호출한다. 콜 메세지는 블록체인에 저장되지 않고 다음과 같은 특성을 지녔다. 상태 변경 X, 읽기 전용 O 가스 소모 X 동기 처리 반환값 즉시 리턴 이더를 다른 컨트랙트 계정으로 옮길 수 없음 트랜잭션 블록체인에 저장되는 메세지를 통해 전송된다. 채굴 과정에서 직렬화 된다. 필드: Sender address 송신자 주소 Recipient address 수신자 주소 Value 전송할 이더 수량 (선택) Data 입력값. 메세지가 함수 호출에 사용되는 경우 (선택) StartGa 최대 가스양. 최대 가스양 초과시 evm에서는 예외처리→ 메시지 상태 롤백 시킴 Digital signature 송신자 신원 증명 G..
Wallet 호환 Token 만들기 지갑에서 확인 가능한 토큰 예제코드를 리믹스에 작성했다. 작성후 compile ⇒ deploy하려는데 함수 이름과 contract이름이 WalletVisibleToken으로 동일하여 함수를 배포하려고 인식했다. 그래서 함수 뒤에는 f를 한자 더 하여 이름을 구분해주니 제대로 배포되는걸 확인할 수 있었다. 배포된 각 함수를 사용해 보자. 1. transfer : 인자값으로 수신자주소와, 보낼 값을 입력한다. 2. WalletVisible Token : wallet에 보이는 기본 토큰 개수를 정해준다. 3. balanceOf : 내 계정의 value(balance)를 확인할 수 있다. 처음에는 확인할 수 없던 transfer함수를 사용해서 다른계정으로 value를 옮겨보자 remix에서 제공하는 EOA하나에..
부트스트랩 노드 부트스트랩 노드란? 이더리움 네트워크는 중앙 서버 없이 노드간의 연결로 구성된 분산 구조 네트워크이다. 하지만 하나의 노드가 네트워크 안의 모든 노드와 연결되는 것이 아니라 서로의 주변 노드들에 연결하는 구조를 가지고 있다. 이런 구조 형식때문에 네트워크 내에서 특정 노드를 찾기가 어려워진다. 이를 해결하기 위해 존재하는 것이 부트스트랩 노드인데 부트스트랩 노드는 일정 기간 동안 그들과 연결되었던 노드들의 목록을 저장한다. 그래서 내 노드가 이더리움 네트워크에 다시 접속할때 부트스트랩 노드에 먼저 연결하여 최신 노드 연결 목록들을 불러와 정보를 공유한다 (접속하는 순간 나도 연결 목록에 들어가 나도 함께 노드를 공유하게 된다). 즉 노드들을 부트스트랩(동기화)시켜주는 것이다. 그렇다면 이 부트스트랩 노드..
[EVM] 이더리움 가상머신 EVM : Ethereum Virtual Machine 이란? EVM, 즉 이더리움 가상머신은 이더리움 네트워크의 노드들이 공유하는 하나의 가상머신이다. 거대한 분산 컴퓨터라고도 볼 수 있다. 가상 머신 : 물리적 하드웨어 시스템에 구축되어 자체 cpu, 메모리, 네트워크 등을 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경이다. 블록체인 네트워크 상의 노드들이 가상머신에 접근하여 컴퓨터가 가지고 있는 데이터를 가지고 오거나 변경할 수 있다. (상태변경) 이더리움 가상머신에서는 스마트 컨트랙트가 실행되게 되는데 솔리디티로 짠 스마트 컨트랙트 그 자체로는 실행할 수 가 없다. 왜냐하면 솔리디티는 C언어나 Java처럼 사람이 이해하기 위해서 만든 언어이기 때문이다. 기계가 바로 이해할 수 없는 사람이 이해..
머클 패트리시아 트리 블록체인의 가장 큰 장점이자 특징은 블록체인의 모든 데이터를 참여자들이 모두 공유한다는 것이다. 그러나 블록체인의 크기가 계속해서 증가한다면 공유를 위해 많은 데이터를 동기화 해야하는 것이 문제이다. 이 문제를 해결하기 위해 머클 트리를 사용했고 이더리움에서는 이를 개선하여 머클 패트리시아 트리라는 암호 해시 기반의 트리 자료구조를 사용한다. 트리 내의 모든 정보는 레벨DB에 저장한다. 해시 함수란? 해시 함수는 임의의 크기 값을 입력했을 때 고정 크기 값을 생성해 내는 함수다. 예를들어 “허유명”이라는 글과 “유명한 허유명”이라는 글을 sha256으로 암호화 했을때 들어간 byte값을 다르지만 64바이트 크기의 고정된 문자열 값을 생성해 낸다. 이더리움에서는 keccak256 암호 해시를 사용한다. 머..
openethereum 메인넷 구축 이더리움 메인넷 구축 1. Docker 실행 아래 명령어로 docker에서 ubuntu로 컨테이너를 연다. 뒤에 bash를 붙여서 바로 bash shell 실행한다. docker run -it ubuntu:latest bash 1-1. docker에 필요 파일 다운로드 apt-get update ​ # curl및 필요한 라이브러리 다운 apt-get install -y curl ​ apt-get install -y gcc g++ pkg-config file make cmake git clang libssl-dev ​ # rustup 다운 curl https://sh.rustup.rs -sSf | sh ​ source $HOME/.cargo/env ​ # rustup 버전을 낮춰준다. rustup over..
스마트 컨트랙트 연산 gas(가스) 소모 스마트 컨트랙트에서 코드가 실행될때 코드가 저장하는 데이터, 연산 값들을 통해서 gas가 소모된다. 32btyes 새로 저장 == 20000gas 32bytes 기존 값 변환 == 5000 기존 변수를 삭제하면 10000gas를 돌려받는다. lt.bet("0xab",{from:bettor,value:5000000000000000, gas:300000}) 위 명령으로 트랜잭션을 일으켜 아래 코드가 실행되었을때 소모되는 가스량을 확인해 보았다. function pushBet(bytes1 challenges) internal returns(bool){ BetInfo memory b; b.bettor = msg.sender; // 20btyes b.answerBlockNumber = block.number + ..
스마트 컨트렉트, WEB3, 솔리디티 스마트 컨트랙트 : 코드실행 (솔리디티) 스크립트 실행 가나쉬 : 알트코인의 데몬을 간단하게 만듬 (이더리움) 100 이더를 가지고 있는 주소 10개를 준다. 데몬처럼 P2p기능을 가지고 있다. 데몬 : p2p기능을 가지고 있다. 이더리움 rpc통신을 할 수 있는 데몬을 통해서 스마트 컨트렉트를 할 거. 스마트 컨트렉트는 솔리디티 언어로 작성할 것임. # Setting node js환경에서 세팅 가능 1. npm install -g truffle 2. npm install -d ganache-cli 3. npm install web3 web3란? rpc 통신을 쉽게 구현할 수 있게 도와주는 라이브러리. 원래 알트코인 rpc통신을 하려면 express, request설치를 하고 request에다 rpc 통..