#2. 패브릭 Write& Read

ㅁ패브릭의 사용방식

ㅇKVS. 키밸류스토어 방식. -값 한쌍으로- 키를 기반해서 값을 저장가능.

ㅇLevelDB(속도), CouchDB(복잡성) 사용

ㅇChaincode : 한 블록 내에서 하나의 키 값을 여러 번 읽고 수정 불가

 

Read Set, Write Set

한 블락에서 한번 수정 가능. ( 한 블록 내에서 ) 한번 Write 한 키에 대해서는 Read를 하면 실패한다.

peer가 시뮬레이팅 하는데 블록생성 않기 때문에 블록을 오더러 에게 받기 전에는 잘못된 값을 불러온다.

일반적인 상황에서는 굉장히 불편하게 만드는 제약

 

ㅁ그래서 패브릭이 선택한 방법은 Fabric - high through put network.

태그를 사용하여 여러 번의 읽고 수정해도 값이 제대로 나올 수 있도록 하는 기능

UTXO를 사용하기도 함

 

 

#3. 패브릭 스터디 가이드

어디서 부터 시작해야 하나-”

1. 패브릭 read the doc. ( https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatis.html )

1) key concepts

2) Architecture Reference

3) Writing Your First Application

4) Building Your First Network (BYFN) : 로그 확인

-운영자 과정(operation Guides)과 개발자 과정이 있으니 필요따라-

 

2. 패브릭 samples

ㅇmarbles, balance-transfer, high-throughput, unit test

퍼스트 네트워크, 밸런스 트랜스퍼 예제 순으로 진행

ㅇBalance Transfer : 패브릭 SDK사용하여 체인코드 접근하는 예제

ㅇhigh-throughput : 패브릭에서의 고성능 체인코드 작성 위한 기능

 

3. 하이퍼렛져 프로젝트

패브릭이 가장 많이 사용되긴 하지만.

버로우(이더리움 기반. 쿼럼), 그리드(웹어셈블리), 인디(DID), 이로하(활발..), 캘리퍼(TPS 측정), 첼로(배포)

패브릭 블락 익스플로어(block explorer) : 이더스캔 같은 기능 하는 듯.

컴포져(composer) : 패브릭보다 간소화한 블록체인 툴. 패브릭 기반의 완전히 다른 아키텍쳐.

- 컴포져(composer) : 온라인의 플레이 그라운드 라는 풀 제공중. 바나나파일의 기능 사용하여 프로젝트 가능.

. Kubernetes : IBM에서 만들고 있는. 구글의 네트워크 관리(배포).

#1. 패브릭 구조 (https://youtu.be/d9EmSrNFDY8)

 

ㅁ기존 블록체인들과의 차이.

ㅇ패브릭은 구성요소들이 각 역할이 분배됨.(블록생성자!=SC처리노드): 오더러(블록생성), 피어(시뮬레이팅, 저장).

cf)기존 비트와 이더는 노드 하나가 모든 것을 처리.(블록생성자=SC처리노드): 마이닝. 지갑. 월드스테이트 등.

 

ㅇ패브릭은 인증서 기반. 중간관리자 존재(FCA_Fabric Certificate Authority).

cf)비트와 이더는 개인키 기반

 

ㅇ패브릭은 하나의 키 값을 한 블록 내에서 여러 번 읽고 수정 불가.

 

ㅁ구성요소

하이퍼 레저 기본구조 및 구동순서

1) Peer(피어)

- Ledger(블록체인, 블록저장). World State(in Ledger, 최신버전의 데이터)

- Simulating.(트랜잭션을 연산)

 

2) Orderer(오더러)

- 블록생성(배포용도), 유저로 부터 받은 거래를 검사하지 않고 바로 블록생성.

- Ordering Service(오더러들이 모인 곳)이 생성된 블록을 피어들에게 배포해줌.

 

3) App(유저)

- 거래생성 및 거래 확인요청(‘제안의 형태로 피어에게 전송)

- 확인, 검사받은 거래를 오더러에게 전송.

- Check Endorsement Polices : 확인, 검사하는 방식에 대한 규정.

 

ㅇ합의

- BFT 방식, 투표 (3명중 2명만 확인하면 통과)

 

Ledger

- 구성 : 블록체인, World state

- 오직 피어 만이 활용가능한 Ledger(블록)를 갖고 있음.

- 오더러 또한 Ledger(블록)을 갖고 있기는 하지만 활용하지 못하고, 오로지 배포만 가능함.

 

 

 

1. 배경.

자바스크립트라는 장벽이 낮은 언어는 많은 초보 개발자들의 유입을 불러왔고,

여전히 많은 사람들이 즐겨 찾기에 다른언어로 대체될 수 없었습니다.

그래서 이 언어에서 파생되는 기술도 늘어났고- 그것들이 익스프레스(웹)나 노드(서버) 같은 것 입니다.

익스프레스는 루비(언어) 기반 프레임워크 '시나트라'의 영향을 받아 제작되었습니다.

 

2. 익스프레스 시작. https://expressjs.com/ 

express는 node.js의 신속한 웹개발을 위한 프레임워크로써 확장이 유연하여 필요한 기능을 추가할 수 있습니다.

기존의 프레임워크 들과는 다르게 불필요한 기능들이 최소화되어 있습니다.

 

웹사이트, 웹페이지 같은 웹 어플의 프레임워크로써 기능을 할 수 있으며,

단일 페이지 웹 어플을 만들 때에도 적용하기 쉽습니다.

일반적 웹사이트는 사용자의 페이지 이동 마다 네트워크 요청을 보내지만,

단일 페이지 웹어플은 사이트 전체를 클라이언트 브라우저로 내려 받습니다.

때문에 초기 다운로드가 끝나면 서버와 통신이 불필요하기에 페이지 간 빠른 이동이 가능합니다.

다중페이지/ 하이브리드 웹 어플은 전통적 웹사이트 방식으로 단일과 다중 페이지는 융합해서 사용가능한 옵션입니다.

 

3. 노드는 웹서버, 구글엔진사용.

노드는 자바스크립트 언어를 사용하여 구현한 기능으로 서버의 역할을 할 수 있습니다.

익스프레스와 마찬가지로 최소한의 웹서버로 시작하며, 설정옵션이 단순하고 이해가 용이합니다.

단일스레드로 운영되는 노드는 웹어플 만들기가 쉬우며 노드 인스턴스를 늘리면 멀티스레드도 가능합니다.

노드가 사용하는 자바스크립트 엔진인 구글V8이 자바스크립트를 네이티브 기계코드로 컴파일 하지만

워낙 빠르게 컴파일 하기에 인터프리터와 유사해 보입니다. 또한 노드 어플은 플랫폼을 가리지 않습니다.

가볍게 이용가능합니다.

 

4.

노드는 자바스크립트가 브라우저를 벗어나 서버에서 동작하게 해주는 소프트웨어로

익스프레스 처럼 자바스크립트로 작성된 프레임워크를 사용가능하게 해줍니다.

노드와 익스프레스 그리고 몽고DB(데이터베이스)가 한쌍으로 어울립니다.

 

주요관계형 데이터베이스는 mySQL, 마리아DB, PostgreSQL, 오라클, SQL 서버가 있으나,

노드 이용자가 늘어나자 noSQL 데이터 베이스 27

ㅁ C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될 때 바이너리 파일이 됨.

 

 ㅇ"바이너리 파일이 된다"는 것은 숫자 0과 1로 이루어진 코드로 변환됨을 의미.(마치 매트릭스)

 

 ㅇ즉, 컴파일을 하면 컴퓨터가 이해가능한 이진코드로 변환됨.

 

 

ㅁ목적파일(*.obj)은 기본적으로 컴퓨터가 이해가능한 바이너리 코드(이진 코드)의 형태지만 실행불가함.

 

 ㅇ그 이유는 완전한 기계어(=CPU에서 사용하는 명령어 집합) 이 아니기 때문.

 

 

ㅁ변환된 목적파일(바이너리파일)은 링커에 의해 실행 가능한 실행파일(*.exe)로 변환될 때

 

 ㅇ함수나 헤더 파일 등의 실제 메모리 주소를 코드에 반영하는 과정에서 일부 주소값이 변경되는데,

 

 ㅇ이 과정을 거쳐야 비로소 컴퓨터가 바로 실행 가능한 100% 기계어가 됨.

 

 

ㅁ목적파일은 바이너리 코드지만 컴퓨터가 바로 실행가능한 100% 기계어라고 할 수 없음.

 

 ㅇ완벽한 100% 기계어는 실행파일뿐

 

※ 하지만 java에서는 컴파일러(javac)에 의해

※ 소스파일(*.java)이 목적파일(*.class)로 변환될 때

※ 컴퓨터가 바로 인식가능한 바이너리 코드가 아닌 바이트 코드로 변환된다.

 

 

 

위키백과 '이진코드'

1. 바이너리 코드 : 컴퓨터가 인식가능한 0과 1로 구성된 이진코드.

 

 

2. 기계어 :

 

  1) 기계어는 0과 1로 이뤄진 바이너리 코드.

 

  2) 기계어가 이진코드로 이뤄졌을 뿐, 모든 이진코드가 기계어인 것은 아님.

 

  3) 기계어는 특정언어가 아님.

    - CPU제조사에서 CPU제작 시 해당 CPU에서 사용하는 명령어 집합을 공개함. = 기계어(명령어집합)

    - 고로, CPU가 다르면 기계어도 다른 것.

    - 같은 동작을 하는 명령어지만 완전히 다른 0과 1의 나열이 될 수 있음.

 

  4) 아주 기본적인 연산자들은 서로 호환 되는 편.

 

  5) 같은 회사의 CPU라도 버전 별 다른 명령 포함가능하며, 다른 회사라도 같은 명령어 집합 공유 가능.

 

 

위키백과 '바이트코드'

3. 바이트 코드 : 가상머신에서 이해할 수 있는 코드를 위한 이진 표현법(0과 1로 구성)

 

  1) CPU가 이해할 수 있는 언어가 바이너리 코드, 가상 머신이 이해할 수 있는 언어는 바이트 코드.

 

  2) 어떤 플랫폼에도 종속되지 않고 실행가능한 가상 머신용 기계어 코드.

 

  3) 고급언어로 작성된 소스코드를 가상 머신이 이해가능한 중간 코드로 컴파일한 결과.

 

  4) 실시간 번역기 또는 저스트 인 타임(just in time, JIT) 컴파일러에 의해 바이너리 코드로 변환됨.

 

  5) CPU가 텍스트를 이해하지 못하듯, 가상 머신 또한 텍스트를 이해하지 못함.

    cf) java 가상 머신이 JVM, JVM을 위한 바이트 코드를 자바 바이트 코드라고 함.

 

 

#. 플랫폼 : 개발환경, 실행환경 등 어떤 목적 수행가능한 환경.

 

  - 프로그램이 실행되는 환경인 운영체제의 종류 : window, mac

  - 개발이 수행되는 환경의 종류 : 안드로이드 스튜디오, 비쥬얼 스튜디오.

 

 

 0. 요약

 

이더리움은 자체 블록체인을 기반, 다양한 탈중앙화 된 어플들이 작동가능하게 고안된 플랫폼 네트워크.

 

이더리움의 디앱은 스마트 계약을 이용해 쉽고 빠르게 토큰 발행가능.

 

이더리움 블록체인에선 이더가 사용되고, 디앱은 여러 분야에 적용가능한 각각 솔루션들로 그에 맞는 토큰 발행.

 

발행된 토큰은 독자적인 토큰인 듯 하지만 실제는 이더리움 생태계에서 호환 및 사용 가능.

 

)

 ○ 안드로이드 = 이더리움 플랫폼   /    그 안에 앱들 = 디앱들.

 ○ 각 앱 사용하면서 발생되는 일정 포인트를 통합 및 사용하는 건 같은 회사계열의 앱이 아니면 불가능하지만

 ○ 이더리움 플랫폼에서는 각각의 디앱이 발행한 토큰을 통합하여 현금화가 가능.

 ○ 디앱 내에서의 토큰 교환은 물론, 이더리움 플랫폼 기반의 타 디앱의 토큰과 교환 가능한데

 ○ 이를 위해 ERC-20 토큰 표준 있는 것.

 ○ 디앱들에 흩어져있는 ERC-20 표준 호환 토큰들은 나중에 통합되어 한 번에 이더로 모두 바꾸어 현금화 가능.

 

 

 

1. 배경

 

비트코인(Bitcoin) 탄생 : ‘코인개념 생성.

 ○ 2008101세대 암호화폐. 기축 통화 (국제간 결제 및 금융거래에서 통용되는 통화. ex. )

 

알트코인(Altcoin) 탄생 : 이 당시만 해도 코인들만 존재.

 ○ 암호화폐 생태계에, 독자적 알고리즘과 생태계 소유한 여러 암호화폐들 탄생

 ○ 비트코인과 유사한 이 암호화폐를 사람들은 알트코인으로 일컫음.

 

이더리움(Ethereum) 탄생

 ○ 이더리움은 비트코인에선 제공하지 않는 스마트계약 기능 소재.

 ○ 스마트컨트랙트 기능 이용으로 이더리움은 플랫폼 코인으로 영역을 확장가능해짐.

 

. 이더리움의 (코인)플랫폼 기능?

- 마치 아이폰의 앱스토어 기능.

- 독자적인 하드웨어(이더리움)를 개발하지 않고도

- 개발자들은 앱스토어에 본인의 어플 업로드 및 판매 가능 하게 되는 것.

 

 

 

2. 목적 및 생성

 

목적

 ○ 토큰을 지분으로 투자자금 모음.

  - 메인넷 개발완료 시 토큰으로 변환.

  - 메인넷 개발 전 개발할 때 까지의 자금”, “토큰거래만 가능

  - 메인넷 개발 후 자체 네트워크 통화”, “자체기능 개발 및 배포

 

 ○ 상호 호환 가능

  - ERC-20 (기반) 토큰은 이더리움과 교환 가능 및 이더리움 지갑으로 전송이 가능.

  - ex) 안드로이드 운영체제를 사용하는 네이버 지도를 카카오톡으로 바로 공유할 수 있는 것처럼.

 

이더리움의 스마트컨트랙트로 생성

 ○ 독자적 생태계 구축없이 이더리움의 기능(스마트계약)을 이용, 암호화폐를 제작하게 됨.

 ○ 이렇게 제작된 암호화폐는 ERC-20 (Ethereum Request for Comment) 토큰이라 불림.
 ○ ERC-20 기반 토큰 : 펀디엑스(NPXS), 오미세고(OMG), 비체인(VEN) .

 ○ 이오스(EOS), 트론(TRX) 등은 이더리움 기반 토큰 생성 후, 자체 메인넷을 출시로 독립적 코인으로 재탄생.

 

 

 

3. ERC-20

 

토큰?

 ○ ERC-20은 이더리움 블록체인 네트워크에서 정한 표준 토큰 스펙.

 ○ 각각의 커스텀 토큰을 관리 가능하게 해주는 기능(스펙).

 ○ 이더리움 블록체인에서 또 다른 토큰 실행위해선 ERC-20라는 스마트계약에서 코드나 기술 표준 설정필요.

 ○ (시장화폐로서) 필요한 이더리움과 호환성이 있는 모든 요구 사항의 표준은 ERC-20로 간주.

 

규칙(함수)

 ○ totalSupply (): 총발행량. 토큰이 총 몇 개 있는지 알려주고 생성되어 사용가능한 토큰 수 지정.

 

 ○ transfer (): 송금. 토큰을 총 발행 주소에서 개인 계정으로 송금가능초기 토큰 배포를 지정된 지갑으로 실행. 이 함수로 인해 ICO 토큰이 일반적으로 ERC-20 토큰으로 사용.

 

 ○ balanceOf (): 잔액. 계정 내 토큰을 반환하고, 모든 지갑의 토큰 균형을 추적.

 

 ○ transferFrom (): 사용자는 송금 기능을 사용하여 측정 토큰을 사용자가 전송하고 교환가능. 이 함수는 지갑 주소, 수령인, 송금액을 얻은 중개인처럼 작동한 다음, 거래 수행.

 

 ○ approve (): 승인. 위조 토큰 제작 방지. 토큰 총 발행 양을 확인해 트랜잭션을 허용 및 거부, 최대 토큰 수를 유지 관리하고 어떤 지갑에 어떤 토큰이 있는지 추적.

 

 ○ allowance (): 허용. 누군가 시스템을 속이고 본인이 소유한 것보다 더 많은 토큰을 보내고자 할 때, 이를 방지함. 거래가 이뤄지면 취소되며 모든 트랜잭션은 실행되기 전 유효한지 이중 확인됨.

 

 

 

4. 다른 기준의 등장

 

변화

 ○ 대부분 토큰들은 ERC-20 규정을 따르고 있는 만큼, 디앱 사용자들은 이들 토큰을 지갑에 저장가능.

 ○ 그러나 많은 디앱프로젝트들이 ERC-20을 수행할 때 발생한 토큰손실 등 ERC-20 시스템의 불완전성으로-

 ○ 이더리움 커뮤니티는 이를 수정하였고 다른 규칙들이 등장하게 됨.

 

ERC-223

 ○ 토큰을 스마트 컨트랙트에서 직접 보냈을 때 토큰 손실가능성 문제를 수정한 것.

 ○ ERC-223이 제공하는 또 다른 혜택은 토큰들이 스마트계약에서 한번에 다른 지갑으로 송금가능하게 지원.

  - 이 기능으로 지갑은 원장 업데이트를 위해 토큰 스마트 컨트랙트가 필요하지 않음.

  - 이 기능에 불러온 부산물은 가스비가 절반 정도 밖에 안됨. 두개가 아니라 하나의 기능을 확인하는 것이기 때문.

 

ERC-777

 ○ ERC-20 버그를 위한 또 다른 솔루션이 20171120일 이더리움 커뮤니티에 제안됨.

 ○ 누구나 스마트계약 주소 및 기능 확인가능. (ERC-820 기능 가져온 것)

 ○ ERC-20의 간단한 전송과 확인에서, ERC-777의 보내기 기능으로 - 본질을 바꿈으로서-

 ○ 토큰과 스마트 컨트랙트 그 자체로 보다 많은 것들을 가능하게 함.

 

ERC-721

 ○ = NFT, Non-Fungible Token, 대체 불가능한 토큰.(성질)

 ○ 개발자들에게 복수의 소유자들 사이에서 공유불가한 토큰을 개발할 수 있게 함.

 ○ 개별적인 각각의 NFT를 위한 기능과 상태를 포함할 수 있게 해줌.

 ○ 디앱 게임들에 광범위하게 적용됨. (캐릭터나 아이템을 나타내기 위해 NFT를 구현한 게임들)

 

 ○ 대표적 사례) 이더몬. 각각의 이더몬은 ERC-721 기능을 수행하는 NFT.

  - 플레이어들은 이더몬을 상호 거래가능. 누구도, 이더몬의 한 조각을 공유불가.

  - 누군가 타인에게 전송할 경우, 전체 NFT로서 전송됨.

  - 반면, 게임에서 플레이어들은 그들의 이더몬을 훈련시키고 싸우게 할 수 있음.

  - 이것은 이더몬 상태를 늘/줄이는 결과로 이어질 수 있음.

  - 게임의 육성 기능은 새 이더몬이 생성 됐을 때, NFT가 이더리움 네트워크에 만들어짐.

  - 소유권은 자동으로 액션을 요구한 개인에게 감.

 

 ○ 본질적으로 토큰이, 디앱 내에서 공유가능하고, 미래 NFT 생성에 영향주는 수집물이 되도록 함.

 ○ NFT는 무제한 공급 가능하나 대부분 디앱 프로젝트는 전체 공급량을 제한함. (NFT의 가치유지 위함.)

 

[7/29...]

 

순서. 4단계 까지만 해도 양호

( https://m.blog.naver.com/blokorea/221313637939 참고: FTP 설정까지만 진행 , (EOS설치시간))

 

 

 

EOS Develop - 윈도우10 환경에서 개발하기

안녕하세요 John 입니다. EOS 메인넷이 얼마전에 런칭되었죠. 지금 한창 로컬노드로 공부하고 있는데 ...

blog.naver.com

 

 1. 윈도우 설정변경

  1) 윈도우 설정[개발자용 설정] - [개발자 모드] 변경.

  2) 제어판-프로그램  기능-윈도우 기능 켜기/끄기: 에서 Linuex windows 하위 시스템 체크

  3) 재부팅 실행

  4) 윈도우 스토어에서 우분투 설치

 

 

 

 2. 우분투 환경설치 : 윈도우 내에서 우분투 터미널 사용하기 위함.

  ㅇ우분투 16.04 버전 설치 https://docs.microsoft.com/ko-kr/windows/wsl/about

 

Linux 용 Windows 하위 시스템에 대 한 자세한 정보

Linux 용 Windows 하위 시스템이 작동 하는 방식에 대해 자세히 알아보세요.

docs.microsoft.com

 

 

 3. 우분투 실행

  1) 아이디/비번 설정

  2) 미국서버->한국서버 변경 : sudo sed -i 's/archive.ubuntu.com/ftp.daum.net/g' /etc/apt/sources.list

 

 

 

 

 4. 우분투 16.04 패키지 설치 : 이오스 환경설정

  ㅇ깃허브  [Ubuntu 16.04 Package Install] : https://github.com/EOSIO/eos 참고

   - 우분투 터미널에서 아래 명령어 순서로 입력

   - wget https://github.com/eosio/eos/releases/download/v1.8.1/eosio_1.8.1-1-ubuntu-16.04_amd64.deb

   - sudo apt install ./eosio_1.8.1-1-ubuntu-16.04_amd64.deb

 

EOSIO/eos

An open source smart contract platform . Contribute to EOSIO/eos development by creating an account on GitHub.

github.com

 

 

 

 5. cli-helper 설치 : 명령어 단축  효율적 작업 위함.

  ㅇ헥슬란트제공의 eos헬퍼 클론설치: https://github.com/Hexlant/eosio-cli-helper

 

Hexlant/eosio-cli-helper

Contribute to Hexlant/eosio-cli-helper development by creating an account on GitHub.

github.com

 

 

 

 6. 우분투 ~/eosio-cli-helper$ 디렉토리  config 설정.

   1) 설정변경 가능 명령어 : $/eosio-cli-helper$ vi configuration_info.sh

   -  ## Host for NODEOS

   -  NODEOS_SCHEMA="https"

   -  NODEOS_HOST="jungle2.cryptolions.io"

   -  ## Port for NODEOS

   -  NODEOS_PORT="443"

보기에 불편한 설정창

 

   2) 확인

   -  ./cleos.sh get info : head_block_num 값이 지속 증가(페이지 메인에  숫자와 동일한 것을 확인가능. )

   -  정글2.0 테스트넷 모니터 확인 : https://monitor.jungletestnet.io/

 

Jungle2.0 - EOS Test Network Monitor (CryptoLions.io)

 

monitor.jungletestnet.io

 

<스샷을 동시에 했다면 위 숫자 41 560 255 와 아래 "head_block_num":41560448의 숫자가 같음.>

 

 

 

 

 7. 명령어 자동완성 기능 사용 설정

  ㅇ명령어 : git clone https://github.com/hexlant/cleos-auto-completion

  https://github.com/hexlant/cleos-auto-completion

 

 

Hexlant/cleos-auto-completion

Command auto-completion for EOS cleos. Contribute to Hexlant/cleos-auto-completion development by creating an account on GitHub.

github.com

 

1. 이더리움 계정(Account)

 

이더리움 계정은 20바이트의 주소와 상태변환(정보 직접 전달) 갖고 있음.

 

이더리움 계정 내 필드 4 존재.

 

 1) Nonce :  트랜잭션이 오직 한번만 처리되게 하는 카운터

 

 2) Value : 계정의 현재 ether 잔고

 

 3) Contract code : 계정의 컨트랙트 코드 ( 없을  있음)

 

 4) Storage :  계정의 저장공간(초기설정엔 값없음)

 

 

이더리움 계정은 2가지 종류가 있음.

 

 1) 외부소유계정(EOA. External Owned Account)

 

  - ‘지갑’. CA보다 상위계정.

 

  - 새로 생성되는 트랜잭션은 모두 EOA에서 시작.

 

  - 하지만  계정엔 코드 없으며,  계정에서 메시지 발신하려면  트랜잭션 생성  서명필요.

 

 

  모든 컨트랙트에는 해당 컨트랙트가 참이라는 인증이 존재해야한.

  인증을 담당하는 것은 개인키를 통한 서명이며  서명을 수행하는 것이 EOA.

    

 2) 계약계정(CA. Contract Account)

 

  - 스마트컨트랙트 역할 가능배포된 코드 ‘저장공간 추가로 존재.

 

  - CA 컨트랙트 실행 가능. 생성 불가. ( EOA 만든 컨트랙트만 실행가능. 생성X )

 

  - EOA 보낸 메시지를 CA 수신할 때마다 자신의 코드를 활성화.

 

  - (기능수행)  활성화 코드따라 메시지 읽기, 내부저장공간 기록, 다른 메시지 발신. 컨트랙트들을 차례로 생성.

 

 

 

스마트컨트랙트는 이더리움 실행환경 내에 살아있는 자율 에이전트.

 

 ○ 이더리움에서 컨트랙트는 수행 당하는 , 컴파일 되는 .

 

 ○ 메시지, 트랜잭션이 도착하면 항상 특정코드 실행.

 

 ○ 자신의 이더잔고와 영속적 변수들 추적키 위해 자신의 / 저장소를 직접 통제함.(=스마트)

 

 

 

이더리움의 비대칭암호키 = 개인키와 공개키 => “address” 주소로 표현

 

 ○ 이더리움은 속도와 보안성 조절 위해 다양한 매개변수를 갖음.

 

 ○ 이더리움은 타원곡선암호(=ECC) *secp256k1 사용함.

  *secp256k1 : 타원곡선암호기술의 종류( https://m.blog.naver.com/aepkoreanet/221178375642 )

 

비트코인에서 사용하는 타원곡선암호기술(ECC)

지난, “비트코인 시스템에서 사용하는 암호 기술“ 기사에서, 비트코인은 디지털 서명 암호기술로, 공개키...

blog.naver.com

 ○ 암호와 매개변수로 비대칭 암호키를 생성함.

 

 ○ 공개키를 이용해 주소를 만드는 것이지만, ‘ ‘주소 표현.

     *1) 공개 키의 keccak-256 해시 생성

     *2) 12바이트 제거

     *3) 16진수 문자열 인코딩. 최종 40 문자의 바이트 스트링이 유저의 계정주소.

 

 

 

2. 트랜잭션(Transaction)

 

□ EOA(외부소유계정, 지갑) 보낼 메시지를 포함한 서명된 데이터 패키지.

 

 ○ A→B계정으로 이더, 컨트랙트(함수호출,  컨트랙트 배포 ) 보낼  서명으로 사용

 

  - 타원곡선암호 기반의 디지털서명 알고리즘인 ECDSA이용하여 서명함.

 

  - 트랜잭션은 다음 값을 포함

to

메시지 수신처

to, signature, value

암호화폐에서

표준처럼

사용되는 

signature

발신처 확인가능한 서명

value

발신처가 수신처로 보내는 이더의 

data

선택적 데이터 필드(컨트랙트 메시지를 담을  있는 데이터 필드)

 *초기값은 없지만 EVM 컨트랙트가 여기 접근할  사용할 수행코드 소유.

gaslimit

start가스값. 최대 계산 단계 (트랜잭션 실행이 수행되도록 허용된)

gaslimit, gasprice

코드  무한루프

 계산 낭비 방지 용도.

gasprice

 계산단계마다 발신처가 지불하는 수수료

   · 이더리움의 디도스예방. 해킹시 실행되는 모든 리소스에 강제수수료 부과.

 

   · 계산기본단위 ‘가스’, 계산단계별 소모비용은 연산마다, 데이터 용량마다 다름.

 

   · 트랜잭션 데이터 내에 바이트랑 5가스 수수료 지불.

 

 블록체인 위에 도메인등록서비스 기능하는 컨트랙트가 있는 경우,

 이 컨트랙트로 보내지는 data 등록하고자 하는 ‘도메인 ‘IP주소 개의 필드를 소유함.

 컨트랙트는 메시지 데이터로부터  값들을 읽어 저장소  적당한 위치에 저장함.

 EVM 데이터에 어떤 값이 존재하는  미리 알고 있음.

 

 

 

3. 메시지(message)

 

이더리움 실행환경(EVM)에서만 존재하는 가상 객체 (저장 불필요)

 

 ○ 컨트랙트는 다른 컨트랙트에게 메시지 전달가능함.

from

메시지 발신처(암묵적)

to

메시지 수신처

value

메시지와 함께 전달되는 이더

data

선택적 데이터 필드

gaslimit

start 가스값. 최대 계산 단계 (트랜잭션 실행이 수행되도록 허용된)

 

메시지는 컨트랙트에 의해 생성됨. (트랜잭션은 EOA 의해 생성됨)

 

 

그러나, 메시지는 트랜잭션과 매우 유사함.

 

 ○ 수행과정

 

  - 코드수행 중인 컨트랙트가

  - 메시지 생성  실행 지시하는 수행코드(opcode) 만나게 되면

  - 메시지를 생성함. 그리고 해당코드를 실행하는 수신자계정(컨트랙트 계정) 도달하게 .

  - 따라서, 컨트랙트는 EOA 하는 동일한 방식으로 다른 컨트랙트와 관계를 맺음.

 

 

□ GAS 관련

 

 ○ 트랜잭션이나 컨트랙트에 의해 할당된 가스 허용치는

 

 ○  트랜잭션과 모든 하위 실행에 의해 소모된  가스에 적용됨.

  * EOA A B에게 1,000가스와 함께 트랜잭션을 보내고 (1,000부여)

  * B 600가스를 소모  C에게 메시지를 보내고, C 내부 실행에 300가스를 소모한  반환하면 (900사용)

  * B 가스가 모두 소모되기  100가스  사용가능.

 

 

 

#. 출처 사이트 :

https://steemit.com/kr/@yahweh87/36-5  : 스팀잇 이더리움백서 설명.

https://hamait.tistory.com/965?category=   : 컨트랙트 비용.

https://hamait.tistory.com/966?category=276132:  [이더리움 메모] 트랜잭션의 실전적 종류 구분.

[7/24 ...]

 

 

package main

import "fmt"

func main() {

    k := 1
    if k == 1 {
        fmt.Println("One")
	}
        
    else if k == 2 {
        fmt.Println("Two")
	}
        
    else {
        fmt.Println("Other")
	}
}

<Go언어를 이용한 if 함수 예제>

 

 

ㅁ Go언어는 사용되지 않은 변수가 생기면 오류로 인식함.

 

 

ㅁ import "fmt"

 

 ㅇ(가져오기) fmt 라는 클래스를 가져오는 것.

 

 ㅇif, Print 등 사용하기 위한 패키지.

 

 ㅇfmt 패키지 내의 함수들을 이용가능하도록 하는 것.

   (김정환님의 블로그 Go fmt 패키지 설명 : http://jeonghwan-kim.github.io/dev/2019/01/08/go-fmt.html)

 

Go fmt 패키지

Go 언어를 접하면서 가장 처음 사용하는 것이 fmt 패키지다. 기본적인 출력과 입력 포맷 관련한 기능을 제공하는데 이 글에서는 fmt에서 제공하는 함수와 타입의 사용법에 대해서 살펴보겠다.

jeonghwan-kim.github.io

 

 

ㅁ func main()

 

 ㅇ함수를 정의하기 위한 문장.

 

 ㅇfunc 뒤에 함수 명을 적고 괄호() 안에 그 함수에 전달하는 파라미터(변수)들을 적으면 됨.

   (예제로 배우는 Go 프로그래밍 설명 중 '함수'편 : http://golang.site/go/article/9-Go-%ED%95%A8%EC%88%98

 

예제로 배우는 Go 프로그래밍 - Go 함수

1. 함수 함수는 여러 문장을 묶어서 실행하는 코드 블럭의 단위이다. Go에서 함수는 func 키워드를 사용하여 정의한다. func 뒤에 함수명을 적고 괄호 ( ) 안에 그 함수에 전달하는 파라미터들을 적게 된다. 함수 파라미터는 0개 이상 사용할 수 있는데, 각 파라미터는 파라미터명 뒤에 int, string 등의 파라미터 타입을 적어서 정의한다. 함수의 리턴 타입은 파라미터 괄호 ( ) 뒤에 적게 되는데, 이는 C와 같은 다른 언어에서 리턴 타입을 함

golang.site

 

 


 

 

package main

import "fmt"
func main(){

    sum := 0
    for i := 0; i<=100; i++{
        sum += i
        
    }
    
    fmt.Println(sum)
}

< 5050 >

 

 

 

package main

import "fmt"
func say(msg string){
    fmt.Println(msg)    
    }
func main(){
    say("배가 매우 고픕니다.")
}

< 배가 매우 고픕니다. >

 

 

 

package main
import "fmt"
func say(msg string) (string, int) {
   return msg, 10
}
func main() {
   a, b := say("배가 매우 고픕니다.")
   fmt.Println(a, b)
}

< 배가 매우 고픕니다. 10 >

 

 

 

package main
import "fmt"

func main() {
   var a = 11
   for i := 0; i < a; i++ {
      var b = ""
      for j := 0; j < a-i-1; j++ {
         b += " "
      }
      for j := 0; j < 2*i-1; j++ {
         b += "*"
      }
      for j := 0; j < a-i-1; j++ {
         b += " "
      }
      fmt.Println(b)
   }
}

 

 

 

조만간 스핑크스 도전

 

 

 ㅇ피라미드 코딩은 사람마다 다르게 적을 수 있음.(답 여러개)

+ Recent posts