[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)
   }
}

 

 

 

조만간 스핑크스 도전

 

 

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

1. 무엇-

 

컨센선스 = 합의

 

 ○ 수많은 노드에 보관될 데이터블록이 위변조 되지 않은 원본임을 노드들 상호간 합의과정.

 

 ○ 상호검증 거쳐 올바른 블록생성을 이끄는 프로세스와 알고리즘을 컨센서스(합의)라고 함.

 

 

컨센선스 알고리즘

 

 ○ 비트코인과 이더리움은 Proof-of-Work(PoW)라는 작업증명 방식의 컨센서스 알고리즘 사용.

 

 ○ 블록체인의 기술력과 경쟁력 여겨짐.

 

 ○ 이더리움은 Proof-of-stake(PoS, 지분증명 방식)로 변경하기위해 캐스퍼(Casper) 알고리즘을 개발하는 중.

 

 

2. 종류-

 

PoW (Proof-of-Work) : 작업증명

 

 ○ 블록생성 시간동안 가장 많은 해시파워를 제공한 노드가 블록을 생성할 수 있도록 설계됨.

 

 ○ 해시파워를 만드는 과정은 채굴(Mining).

 

  - 컴퓨팅 파워 통해 블록체인 네트워크에 전송된 암호화된 거래정보를 푼 뒤, 새 블록을 체인에 연결하는 작업.

 

 PoW에서는 브랜치(분기)가 생긴 경우 가장 긴 블록체인이 남을 때까지 서로 경쟁함.

 

 ○ 마지막 승자 브랜치가 최종적인 브랜치로 채택되며, 다른 브랜치는 버려짐.

 

 ① 장점(pros)

 

  - 현재 높은 시장 가치를 형성하고 있는 주류 코인들이 채택하고 있습니다.

 

  - PoW 컨센서스 채택 코인 : 비트코인, 비트코인 캐시, 비트코인 골등 라이트코인 등.

   *이더리움은 PoW에서 PoS로 변경 작업 중에 있음

 

  - 강력한 보안성 제공. - 서비스 남용을 쉽게 방지.

 

 ② 단점(cons)

  - 높은 전력소모를 통해 자원을 낭비. - 지속적으로 해시파워 유지.

    *PoW방식은 채굴노드가 하드웨어를 직접적으로 갖춰야 하고 에너지 소모가 굉장히 크며,

     대량의 채굴기를 돌리기 위해서는 지리적으로 최적화된 입지를 확보필요.

     (채굴기 자체에서 열과 소음이 상당히 발생함.)

 

  - 특정 마이닝 세력의 해시 독점으로 인한 생태계(ecosystem)의 교란 우려.

    *중국 기반 마이너들이 컴퓨팅 파워를 점유하면서 독점 및 네트워크의 통제 우려가 커지고 있음.

 

 

. 참고(1) : 블록생성과 체인(체인톡) http://www.chaintalk.io/archive/qna/865

A, B 노드가 거의 동시에 블록생성에 성공했고 체인에 새 블록이 연결되기 전이라면-

두 블록 모두 노드들에게 전파되며, 노드들은 먼저 들어온 블럭을 체인에 연결한다.

결국, A블럭을 연결한 그룹(이하 A그룹) B블럭을 연결한 그룹(이하 B그룹)으로 나뉘게 되어 분기(브랜치) 한다.

이후, 먼저 블록이 생성되어 길어지는 블록체인이 유효한 블록체인으로 인정이 된다.

만약 B그룹 노드가 이후 새 블록생성에 성공해 먼저 전파하면 A그룹도 이 블록을 전파 받고

A그룹 노드들은 B그룹에서 생성된 새 블록이 유효하다고 판단하여 자신의 블록은 삭제하고 B그룹 블록을 가져와 연결한다.

 

보통 작업증명(pow) 방식을 채택한 블록체인은 가장 긴 블록체인을 채택한다.

여기에는 블록 넘버를 확인할 수도 가장 많은 작업량을 확인가능하다. (혹은 같이, 구현에 따름).

일단 구현 방식에 따라 가장 긴 블록체인을 선정했다면 분기점(브랜치)부터 모든 트랜잭션은 처리되기 전 상태가 된다.

비트코인을 예로 보면 UTXO 상태되는 것. 그 다음 새로 받아들이는 블록체인에 있는 트랜잭션은 UTXO 상태를 벗어나고,

즉 소비된 상태가 되고 나머지 블록체인에 포함되지 않은 트랜잭션은 새로 생성되는 블록에 포함되어 전파가 됩니다(반복).

 

 

PoS (Proof-of-Stake) : 지분증명

 

 ○ 코인보유 지분율에 따라 새로 생성된 코인을 분배받는 방식의 컨센서스 알고리즘.

 

 ○ 일정 수 이상의 코인을 보관한 지갑을 블록체인 네트워크에 연결시켜 놓기만 하면 코인받음..

 

 ○ 블록생성 시 이더가 지급되며 이는 보상 아닌 이자의 개념.

 

 ○ 많은 지분 보유한 노드에게 블록생성 권한 줌.

 

  - 이해관계 일치하여, 악한 의도로 블록생성 동기부여 제거. 발생할 경우 패널티.

 

 ① 장점

 

  - 경제적, 친환경적(해시파워 많이 필요치 않음.)

 

  - 블록생산자의 탈중앙화로 인한 안정성 확보

   *PoW에서 51%의 해시파워를 가지는 비용 = 1
   *PoS에서 51%의 전세계 자산을 가지는 비용 = 100

 

  - 블록 생성 위한 지분을 담보로 잡아야하기에 덤핑방지 가능

    *19.6.5._비트코인 가격 급락은 특정 고래(거물)의 의도적 덤핑(현저히 낮은 가격으로 투매하는 행위)에 의한 것 추정

 

 ② 단점

 

  - 보안성 여부 검증필요

 

  - 지분이 많은 사람(고래)들이 권력 독점 가능성 존재

    *해당 코인 개발진들이 권력독점방지 위해서 발행하는 코인의 비율을 조절- 현실적으로 독점 불가능

 

 

DPoS (Delegated Proof-of-Stake) : 위임된 지분증명.(PoS 컨센서스 알고리즘 변형형태)

 

 ○ 네트워크의 모든 노드의 투표로 선출한 상위 노드(증인‘Witness)에게 권한위임-합의하도록 하는 방식.

    *(PoS방식)모든 노드의 자격을 가진 주주들이 블록생성에 참여하는 방식

    *PoS방식이 직접민주주의 방식, DPoS는 간접민주주의 방식

 

 ○ 선출된 증인들은 모든 권한을 위임 받아 블록 생성 담당.

 

 ○ EOS증인21. DPoS컨센서스 사용하는 그리핀(Graphene)엔진을 토대로 만듬.

 

 ① 장점

 

  - PoS보다 빠른 트랜잭션 처리. - PoW보다 낮은 비용.

 

  - 낮은 하드포크 위험성. - 증인들이 투표참여의 인센티브 확실.

 

 ② 단점

 

  - 증인 간 담합 가능성 존재. - 공개된 소수의 증인에 대한 디도스(DDoS)*공격 위험.

 

*디도스(Distributed Denial of Service, 분산서비스 거부) :

*수많은 PC를 원격 조종해 특정 웹사이트에 동시접속시켜 단시간 내 과부하 일으키는 행위.

*공격자들은 서버나 네트워크 대역이 감당할 수 없는 많은 양의 트래픽을 순간적으로 일으켜 서버를 마비시키는데,

*그에 따라 일반 사용자들의 사이트 접근 및 사용이 차단됨.

*디도스 공격의 목적은 자료유출, 삭제가 아닌 단순 서버 마비. 은행, 온라인 쇼핑몰, 관공서 등 지속적인 서비스 운영이

*필수인 사이트 공략하여 치명적인 피해를 입히는 것.

 

Q. 소프트포크가 브랜치를 포함하는 상위개념인가요? : 아니다.

포크는 통째로 복사해서 사용하는 것. 브랜치는 데이터를 이어서 붙이는 것(깃 개념).

서로 다른 개념이고, 블록체인에서는 브랜치라는 말이 비유로 사용될 수는 있어도 그에 맞는 의미로 쓰이진 않는다.

브랜치란 독립적으로 어떤 작업을 진행하기 위한 GIT의 개념.

필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기에 여러 작업 동시 진행가능.

 

(https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html)

*Git : 소스코드 효과적 관리위해 개발된 '분산형 버전 관리 시스템'. 원래는 Linux 소스코드를 관리할 목적 개발.

*Branch : 소프트웨어를 개발시 개발자들은 동일한 소스코드를 함께 공유하고 다루게 되는데 동일한 소스코드 위에서 어떤 개발자는 버그 수정하기도, 새로운 기능을 만들어 냄. 여러 사람이 동일 소스코드를 기반으로 서로 다른 작업을 할 시 각각 서로 다른 버전의 코드가 만들어 질 수 밖에 없는데 이때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 '브랜치(Branch)'. 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경가능. 이렇게 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있습니다.

 

 

#. 출처 사이트 :

 1) http://www.hash.kr/

 2) https://steemit.com/kr/@donekim/consensus-pow-pos-dpos

+ Recent posts