EOSIO Dawn 4.2 출시

yumi lee
EOSYS
Published in
10 min readMay 26, 2018

Translated Contents

원문: https://github.com/EOSIO/eos/releases/tag/dawn-v4.2.0

EOSIO 버전 1.0이 곧 출시를 앞두고 있는 지금, 오늘 우리는 EOSIO 소프트웨어의 Dawn 4.2를 출시했습니다. 몇몇 마이너한 기능들이 코드에 추가되었지만 아래에서 볼 수 있듯이 버그 수정 및 안정성 향상에 중점을 두었습니다.

주목할만한 업데이트

구분된 EOSIO.SYSTEM 기금

시스템 기금의 배분을 명확히 하기 위해 다음과 같이 시스템 기금을 구분하기로 했습니다.

  • 모든 RAM 구매와 판매에 대해 1%의 수수료를 도입
  • 사용자가 eosio.ramfee로 보낸 모든 RAM 거래 수수료
  • eosio.ram에서 보낸 RAM 판매로 인한 모든 수익금
  • eosio.stake로 보내진 모든 예치된(staked) 토큰
  • eosio.stake에서 보낸 모든 예치되지 않은(unstaked) 토큰
  • eosio.names에 보내진 모든 경매 수익금
  • eosio.saving으로 보내진 할당되지 않은 인플레이션
  • eosio.bpay로 보내진 프로듀서 블록 페이
  • eosio.vpay로 보내진 프로듀서 투표 페이

자세한 사항은 contracts/eosio.system/producer_pay.cpp를 참고하세요.

체인 플러그인(Chain Plugin)

노드를 실행하는 유저들에 제공되는 일부 옵션과 디스크에 저장된 자료에 대해 커뮤니티에 약간의 혼란이 있었던 것을 보았고 아래와 같은 업데이트를 통해 더 명확히할 수 있도록 노력했습니다.

우리는 “shared_mem” 디렉토리(directory)를 “state”으로 명칭을 변경하고 몇몇 플러그인 옵션을 바꿨습니다.

  • “ — block-log-dir”에서 “ — blocks-dir”로 명칭 변경
  • “ — checkpoint”의 약칭 “-c” 제거
  • “ — shared-memory-size-mb”에서 “ — chain-state-db-size-mb”로 명칭 변경
  • 가역적인(reversible) 블록 DB의 디폴트 사이즈 변경을 위한 “ — reversible-blocks-db-size-mb” 추가
  • 이 옵션 사용을 막기 위해 “ — resync-blockchain”에서 “ — delete-all-blocks”로 명칭 변경
  • “ — contracts-console” 는 콘솔에 컨트랙트 출력값을 출력해주며 현재 config.ini에서 확인할 수 있습니다.
  • “ — hard-replay-blockchain”을 추가하여 블록 로그와 데이터를 백업 디렉토리로 옮기고 새로운 “blocks.log”파일을 생성 하면 “ — replay-blockchain”이 사용한 것과 같습니다.
  • 인풋 트랜잭션, 인라인 액션, 컨트랙트 생성 트랜잭션(contract-generated transaction)에 대한 인증 확인을 강제하는 “ — force-all-checks” 추가
  • Nodeos가 가역적인(reversible) 블록 데이터베이스에서 복구를 시도한 후 즉시 종료되도록 “ — fix-reversible-blocks” 추가
  • 지저분해지더라도 가역적인(reversible) 블록 데이터베이스에서 최대한 많은 가역적인(reversible) 블록을 복구 및 재생할 수 있도록 “ — hard-replay-blockchain” 업데이트

프로듀서 플러그인(Producer Plugin)

마지막 비가역(irreversible) 블록 시간이 N초 보다 길면 체인이 계속될 수 있도록 블록을 확인하는 프로듀서가 충분하지 않다는 것을 의미하는데, 이 경우 노드가 자동으로 생산을 중지하도록 하는 명령 행 인수( — max-irreversible-block-age)를 추가했습니다. 이 옵션은 충분한 프로듀서들이 네트워크에 모여 생산을 재개 할 때 정상화시켜야 하는 과도하게 많은 양의 블록을 생산하지 못하게 막기 위함입니다.

우리는 필요에 따라 노드 생산을 일시 중지할 수 있는 기능을 추가했습니다. 이의 목적은 재생/재동기화(resync) 시간 등의 가변성을 없이 체인을 재개/일시중지 하여 안좋은 상황에서도 프로듀서들이 조정을 할 수 있도록 하기 위함입니다.

참고)

POST /v1/producer/pause — 생산 일시 중지

POST /v1/producer/resume — 일시 중지된 상태로부터 생산 재개

POST /v1/producer/paused — 노드가 현재 일시 중지되었는지 여부에 따라 true / false를 반환

더이상 디폴트로 만들어지지 않는 Genesis JSON 파일

Genesis.JSON은 더이상 config 디렉토리에 있지 않을 것이며 자동으로 생성되지 않을 것입니다. 이를 위해 아래를 참고하세요.

nodeos — extract-genesis-json

파일을 수정하고, 타임스탬프(timestamp)를 변경하고, 초기 프로듀서 키(initial producer key)나 당신이 일반적으로 변경하는 다른 매개 변수를 변경하세요. 과거와 마찬가지로 파일을 공유하세요.

nodeos — delete-all-blocks — genesis-json (모든 노드에서) 새로운 블록체인을 초기화

후속 출시시 nodeos가 블록 로그에서 제네시스 상태(genesis state)를 불러오기 때문에 — genesis-json를 지정하지 마시고 당연하게 — delete-all-blocks도 하지 않습니다.

Nodeos가 정상적으로 작동하지 않으면 — replay-blockchain하시고 그래도 작동하지 않는다면 — hard-replay-blockchain하십시오.

실제로 수행되는 작업을 나타내기 위해 재동기화(resync) 옵션의 명칭은 — delete-all-blocks로 변경되었습니다.

BIOS 부팅 프로세스 튜토리얼 업데이트

우리는BIOS 부팅 프로세스 튜토리얼에 프로듀서 클레임(claim) 지불, 대리 투표, eosio 계정 사임, eosio.system 컨트랙트 대신 eosio.msig 컨트랙을 사용하는 프로듀서, 몇몇 버그 수정을 포함한 개선이 이루어졌습니다. 튜토리얼 지원 파일들을 “program” 디렉토리에서 새로 “tutorials” 디렉토리로 옮겼으니 참고 부탁드립니다.

기타 업데이트

저번주 “Quality Name Distribution & Namespaces”(#3189) 프로포절에서 언급했듯이 네트워크가 공개된 후 2주까지 활성화되지는 않을 것이지만 이름에 대한 경매(name auction)가 도입되었습니다.

프로듀서는 이제 RAM 크기를 절대로 줄일 수 없고 늘리는 것만 가능합니다. 이는 블록 프로듀서들이 RAM 시장을 조작하지 못하도록 하기 위한 것입니다.

Boost 라이브러리의 버전을 1.66에서 1.67로 업데이트했습니다.

“data/shared_mem” 디렉토리의 명칭이 “data/state”로 변경되었습니다.

The “block-log-dir” config.ini 옵션의 명칭이 “blocks-dir”로 변경되었습니다.

“set_active_producers”의 본질을 “set_proposed_producers”로 바꾸어 새로운 활성 프로듀서 일정을 제안하는 기능의 의도를 더 명확하게 했습니다.

저번 주 토큰 심볼의 변경에 이어 우리는 도커파일(Dockerfile)에 핵심 토큰 심볼을 지정할 수 있는 기능을 추가했습니다. 도커 빌더 이미지(Docker builder image)를 위해 우분투(Ubuntu) 18.04LTS로 전환했습니다.

이제 당신은 CMake의 체인 아이디를 설정할 수 있습니다. 이는 디폴트로 sha256(“eosio::chain version 1.0”)로 설정됩니다.

우리는 특히 생산자 간의 긴 네트워크 대기 시간에 두드러졌던 프로듀서 핸드오프(handoff) 동안의 높은 비율의 작은 포크(체인분리)를 발견하고 수정했습니다.

블록 프로듀서는 새로 추가 된 “setparams” 액션을 사용하여 시스템 계약을 통해 블록 체인 매개 변수를 변경할 수 있습니다.

몇몇 테스트넷은 최근에 투표한 프로듀서들의 비활성화 시간이 너무 엄격하다는 것을 알아냈습니다. 유예기간이 대략 4분에서 3시간으로 변경되었습니다. 비활성화(deactivation)을 위한 몇가지 코너 케이스들(corner case)이 추가되었습니다.

트래킹하는 액션을 명시적인 필터 규칙과 일치하는 액션으로 줄임으로써 히스토리 플러그인의 메모리 사용량을 크게 줄였습니다.

우리는 다양한 비정상적인 abi 정의에서 무한 재귀(infinite recursion) 버그를 찾아서 수정했습니다.

우리는 블록 프로듀서가 생산 스케줄에서 비정상적으로 제외되지 않도록 프로듀서 비활성화 로직을 변경했습니다. 이제 우리는 처음만 했던 이전과는 다르게 프로듀서가 참여할 수 있도록 선발될 때마다 프로듀서 필드를 “time_became_active”로 업데이트 할 것입니다.

블록 프로듀서가 참여할 수 있도록 선발된게 처음이거나 선발된지 하루 이상이 지났다면, 우리는 그들의 “last_produced_block_time”을 체크하지 않고 그들을 비활성화시키지 않습니다. 그렇지 않으면 로직은 똑같이 유지됩니다. 이렇게 하면 우리는 투표를 받지 못해 참여하지 못한 프로듀서들에게 불이익을 주지 않게됩니다.

Patroneos

우리는 저번주에 Patroneos를 도입했으며 현재 EOSIO GitHub 레파지토리(https://github.com/EOSIO/patroneos)를 통해 커뮤니티에 공개되어 있습니다.

Patroneos는 기본적인 Denial of Service 공격 벡터로 부터 보호할 수 있도록 설계된 EOSIO 노드를 보호합니다.

Dawn 4.2 on GitHub

EOSIO Dawn 4.2는 개발자들과 블록프로듀서 후보들이 계속 그들의 어플리케이션과 네트워크를 테스트할 수 있도록 GitHub(https://github.com/EOSIO/eos/releases/tag/dawn-v4.2.0)에 공개되어 있습니다.

커뮤니티 서포트

우리는 커뮤니티의 의견에 귀기울이고 그들이 EOSIO를 성공적으로 실행할 수 있도록 돕고 있습니다. EOSIO Stack Exchange (https://eosio.stackexchange.com/) 베타 버전은 잘 운영되고 있으며 Stack Exchange에서 우리는 이 EOSIO 소프트웨어 사용하는 방법에 대한 질문들을 장려하고 있습니다. GitHub에서 계속 잠재적 버그를 찾아 아래의 정보와 함께 전달해주세요.

Testnet:

EOSIO git version: <”nodeos -v” output>

config.ini: config.ini 파일 첨부

genesis.json: genesis.json 파일 첨부

Command line: nodeos 명령 행 전체

Console output: 당신에게 보여지는 에러 중심으로 콘솔 디버그 출력값을 첨부해주세요.(작으면 설명에 붙여 넣으셔도 됩니다)

추후 출시 계획

우리는 6월 1일에 EOSIO 버전 1.0의 출시를 목표로 하고 있습니다. Github의 버전 1.0의 마일스톤(https://github.com/EOSIO/eos/milestone/10)에서 앞으로 몇 주 동안 작업하게 될 이슈들을 지켜볼 수 있습니다.

Translator: Yumi Lee
We Vitalize EOS ecosystem.
Write with us:
eeg@eosys.io

--

--