EOS Mandel v3.1 릴리스 기능 소개

NEOPLY
NEOPLY
Published in
11 min readAug 16, 2022

Mandel v3.1 릴리스 블록체인 소프트웨어는 수개월 간의 연구 개발로 진행된 훌륭한 기능들과 수정사항들로 가득한 네트워크 업그레이드를 정제합니다.

The Mandel v3.1 릴리스는 다음과 같은 새로운 트랜잭션 라이프사이클 도구들이 도입됩니다 :

트랜잭션 라이프사이클에 중점을 두지 않는 추가적인 Mandel 업그레이드는 다음 사항들을 포함합니다 :

Mandel은 다음 사항들을 제거합니다:

  • 1, 2에서 더 이상 사용되지 않는 히스토리 플러그인
  • MongoDB 플러그인
  • Older Build 스크립트
  • 가역 블록 데이터베이스(Reversible block database)
  • macOS 및 대체 Linux 배포판 지원. Mandel v3.1 릴리스는 공식적으로 Ubuntu 18.04, 20.04, 그리고 22.04만 지원합니다.
  • 또한 the abi_bin_to_jsonabi_json_to_bin 변환 API를 사용하지 않습니다.

새로운 Mandel v3.1 릴리스 기능들

트랜잭션 실패 추적 및 새로운 트랜잭션 엔드포인트

Mandel v3.1 릴리스는 트랜잭션 실패 시 임베디드 트랜잭션 예외가 있는 상세한 실패 보고서를 포함한 새로운 트랜잭션 엔드포인트 제공합니다. 이 상세 보고서는 트랜잭션 실패 추적입니다. 이 보고서를 성공적인 트랜잭션 추적으로 오해하지 마시기 바랍니다. 트랜잭션 성공을 보장하기 위해 수신 및 제외 필드(except field)를 확인할 수 있습니다.

Mandel v3.1 릴리스 이전에는 실패한 트랜잭션으로 인해 실패에 대한 세부 정보 없이 트랜잭션 실패 추적이 발생했습니다. Mandel v3.1 트랜잭션 실패 추적은 트랜잭션 실패시 발생한 위치를 지정하고 실패가 진행된 작업을 식별합니다. 새로운 Mandel v3.1 트랜잭션 엔드포인트에는 이 기능이 기본 값으로 설정되어 있습니다.

트랜잭션 재시도

트랜잭션 재시도 기능을 통해 API 노드는 손실된 트랜잭션이 블록에 나타나거나 만료될 때까지 추가로 다시 제출할 수 있습니다.

배경 지식을 위해 설명하자면, 사용자가 API 노드에 액세스하여 네트워크에 트랜잭션을 전송할 때 트랜잭션이 성공적으로 블록에 추가될 것이라는 보장은 없습니다.

주관적 청구 또는 지리적 지연(geographic latency)과 같은 다양한 문제로 인해 네트워크를 통해 활성 블록 프로듀서에게 트랜잭션이 전파되지 않을 수 있습니다. 이러한 문제를 해결하는 한 가지 방법은 API 노드가 블록체인에 포함할 트랜잭션을 추적하고, 블록 프로듀서들이 블록에 게시하지 않은 트랜잭션을 다시 시도하도록 허용하는 것입니다.

트랜잭션 재시도 기능은 들어오는 트랜잭션 풀을 생성하고 해당 풀에 트랜잭션들을 임시로 유지합니다. 블록에 포함된 후, 해당 트랜잭션은 설정된 블록 수 동안 또는 해당 블록이 되돌릴 수 없을 때까지 풀에 남아 있게 됩니다.

노드 운영자들은 트랜잭션 풀 매개변수와 누락된 트랜잭션을 정의하는 기준을 개별적으로 설정합니다. 만약 도구가 이러한 기준에 따라 누락된 트랜잭션을 감지할 경우, 트랜잭션을 네트워크에 다시 제출합니다.

트랜잭션 최종성 상태

트랜잭션 최종성 상태 기능을 통해 노드는 지정된 트랜잭션의 최종성 상태를 공유할 수 있습니다. 이는 또한 현재 체인 상태의 스냅샷을 반환합니다.

개발자가 그들의 스마트 컨트랙트에서 구현하는 가장 일반적인 기능 중 하나는 트랜잭션의 최종성 상태를 확인하는 것입니다. 현재의 도구들로는 각 개발자들이 반드시 맞춤형 솔루션을 구축해야 합니다. 트랜잭션 최종성 상태 구축 및 재구축에 대한 요구로 인해 개발 시간이 늘어나고 스마트 컨트랙트 익스플로잇 및 버그에 대한 벡터가 추가됩니다. 노드들이 이러한 트랜잭션 최종성 정보를 직접 제공할 수 있도록 하는 것에는 엄청난 가치가 있습니다.

트랜잭션 최종성 상태 기능을 통해 노드들은 현재 체인 상태의 스냅샷을 공유할 수 있습니다. 이 기능이 활성화된 노드는 트랜잭션 상태를 저장하고 새로운 엔드포인트를 열어 해당 상태를 쿼리할 수 있습니다. 트랜잭션이 체인에 나타나지 않으면 “UNKNOWN” 상태로 반환됩니다.

트랜잭션 리소스 비용 추정

트랜잭션 리소스 비용 추정 기능을 통해 노드는 리소스 비용 추정치를 반환하는 읽기 전용 엔드포인트를 오픈할 수 있습니다.

EOSIO 체인들에서, 활성 블록 프로듀서는 실행 시간에 트랜잭션 비용을 결정합니다. 블록 프로듀서는 트랜잭션의 서명되지 않은 부분을 실행하는 데 사용되는 CPU 시간을 측정하여 CPU 비용을 결정합니다. 블록 프로듀서 CPU 성능의 차이로 인해 트랜잭션을 전송하기 전에 실제 리소스 비용을 확인하기는 어렵습니다.

트랜잭션 리소스 비용 추정 기능을 사용하면 사용자와 애플리케이션이 트랜잭션의 리소스 비용을 보다 정확하게 추정하는 데 도움이 됩니다. 리소스 비용 추정 기능은 서명되지 않은 트랜잭션을 수신하는 API 엔드포인트를 생성합니다. 이 엔드포인트는 주관적 청구를 가지지 않으며, 따라서 운영자들은 DDOS 공격을 방지하기 위해 조절 기능 및 비율 제한을 둘 필요가 있습니다. 해당 기능이 활성화된 노드는 API 노드가 트랜잭션을 처리하는 데 걸리는 시간을 기반으로 트랜잭션의 리소스 비용 추정치를 반환합니다.

주관적 청구 개선 사항

Mandel v3.1 릴리스의 주관적 청구 개선 사항은 두 가지 기존 도구의 변경으로 구성되었습니다. 첫 번째 변경 사항은 노드가 그 기본값인 24시간에서 주관적 청구 감소 시간을 조정할 수 있도록 합니다. 두 번째 변경 사항은 API 노드가 블록 프로듀서가 사용하는 삼진법(three-strikes rule) 규칙을 사용하도록 허용하고, 해당 삼진법 매개변수를 조정할 수 있도록 합니다.

EOSIO 체인들은 블록 프로듀서가 블록체인에 트랜잭션을 게시할 경우에만 계정에 청구를 진행하기 때문에, 실패된 트랜잭션들은 사실상 무료이며 때로는 남용으로 이어집니다. 삼진법 규칙과 주관적 청구 도구는 노드의 실패한 트랜잭션 로드를 감소시키지만 사용자의 경험에 장애물이 됩니다. Mandel은 이러한 사용자 경험 장애를 완화하기 위해 조정 가능한 주관적 청구(adjustable subjective billing) 및 삼진 매개변수(three-strikes parameters)를 도입합니다.

계정 최대 실패(Account max failures):
주관적 청구 이전에, EOSIO 2.0.9는 블록 프로듀서 노드에 대해 삼진법을 구현했습니다. 삼진법 기능은 계정이 단일 블록 내에서 실패한 트랜잭션을 세번 전송한 경우 계정의 대기중인 나머지 트랜잭션들을 삭제하여 실패한 트랜잭션의 부담을 줄입니다.

Mandel v3.1 릴리스에서 이제 API 노드는 해당 기능을 사용할 수 있습니다. 이전에 하드 코딩된 제한값 3 또한 이제 어떤 실패 횟수로도 구성할 수 있습니다.

추가적으로, disable-subjective-account-billing 옵션을 사용하여 화이트리스트에 등록된 계정은 더 이상 최대 트랜잭션 실패 제한을 받지 않습니다.

주관적 계정 소멸(Subjective account decay):
노드는 주관적 청구를 사용하여 각 노드에 대한 계정의 실패한 트랜잭션 CPU 예산을 추적하여 과도한 트랜잭션 실패를 방지합니다. 프로토콜은 주관적 계정 소멸이라고 알려진 기간 동안 이 예산을 계정에 반환합니다. 이전에 24시간으로 하드 코딩되었던 이 소멸시간은 이제 설정 가능합니다.

현재 24시간의 시간 창에서, 6시간 동안 트랜잭션을 푸쉬하지 않은 계정의 경우 노드는 6/24 또는 ¼을 적용하여 계정에서 사용 가능한 리소스의 25%만 제공합니다.

시간 창이 6시간으로 조정되면, 노드는 6/6 또는 1을 적용하여 사용 가능한 리소스의 100%를 동일한 계정에 제공합니다.

창이 1시간으로 설정될 경우, 테스트에서 사용자 경험 문제 없이 실패한 트랜잭션 스팸 완화에 1시간 창이 효과적인 것으로 나타났습니다.

추가 기능:

추가되는 새로운 기능에는 암호화 관련 개선사항, 새로운 프로토콜 옵션, 프루닝(pruning) 기능 및 로깅 개선 사항이 포함됩니다. 일부 기능은 EVM 관련 고려 사항들을 최적화하는 반면, 네트워크 참가자들은 워크플로우의 효율성을 개선하기 위한 다른 기능들을 요청했습니다.

Mandel v3.1 릴리스는 블록 로그 및 상태 기록 플러그인을 제거하는 nodeos 옵션이 추가되었습니다. nodeos가 이러한 파일을 정리할 때 로컬 노드 스토리지에서 이전 데이터를 제거하여 성능을 향상시킵니다.

또한 체인 상태 스냅샷에 유용한 특정 블록에서 종료할 수 있는 옵션을 제공합니다.

설치

Mandel v3.1 릴리스는 핵심 소프트웨어의 설치 절차를 변경합니다. 또한 이전에 릴리스된 업데이트와 비교하여 몇 가지 호환성 차이가 있습니다.

새로운 빌드 절차는 사용자 지정 셸 스크립트 대신 CMake에 의해 진행되는 빌드 프로세스를 사용합니다. 이러한 빌드 스크립트가 없이 소스 코드에서 빌드하려면 필요한 종속성(dependencies)을 설치해야 합니다. Readme에는 이러한 종속성과 권장되는 빌드 절차가 나열되어 있습니다.

Mandel v3.1 릴리스는 Ubuntu 20.04 및 22.04용으로 제작되었으며 Ubuntu 18.04를 지원하지만 다른 배포판, 컴파일러, 플랫폼에서도 작동될 수 있습니다.

이전 릴리스에서 업그레이드

스냅샷을 이용하여 노드 업그레이드 하기:
1. 먼저 EOSIO v2.0 릴리스의 nodeos 버전과 같이 호환 가능한 이전 버전의 nodeos에서 상태 스냅샷을 생성합니다.
2. 노드의 상태 파일을 제거합니다
3. 노드가 EOSIO v2.1 릴리스를 사용하는 경우, 운영자는 SHiP 및 블록 로그를 제거해야 합니다. EOSIO v2.0 릴리스를 실행하는 노드는 이러한 단계를 진행할 필요가 없습니다.
4. 스냅샷과 함께 nodeos를 시작합니다.
5. 평소 처럼 nodeos를 시작하고 중지합니다.

보다 복잡한 상황에 대한 자세한 내용이나 조언은 업그레이드 가이드를 참조하거나 EOS Support에 문의하여 추가 권장 사항을 확인해 주시기 바랍니다.

호환성

일반적으로 Mandel v3.1 릴리스는 EOSIO v2.0 릴리스의 네트워크, 스냅샷, 블록 로그 및 SHiP(상태 기록 플러그인) 로그와 호환되지만 EOSIO v2.1 릴리스는 호환되지 않습니다.

Mandel v3.1 릴리스는 이전 소프트웨어 버전의 상태 파일과 호환되지 않습니다.

Docker Utilities for Node Execution (DUNE)

DUNE은 macOS, Windows 10, 11 및 Mandel v3.1 릴리스에서 직접 지원하지 않는 기타 운영 체제에서 실행되도록 설계된 환경입니다. DUNE에는 Docker 및 Python3이 필요하지만 readme에 각 운영 체제에 대한 지침이 제공되므로 실행이 어렵지 않습니다. nodeos, cleos, cdt 및 기타 Mandel v3.1 구성 요소와 동일한 명령을 제공합니다. 또한 이러한 모든 구성 요소를 포함하는 다른 추상화된 명령도 제공합니다. 중요한 것은 Docker-capable 머신을 가진 사람이라면 누구나 EOS 네트워크에서 개발하고 테스트할 수 있다는 것입니다.

더욱 자세한 내용은 아래 문서를 통해 확인하실 수 있습니다.

네오플라이는 EOSeoul 활동을 통해 EOS의 생태계 발전에 기여하고 있습니다. 네오플라이의 다양한 소식에 관심이 있으신 분들은 아래 링크를 통해 더 자세히 확인하실 수 있습니다.

[EOSeoul]
텔레그램 : https://t.me/eoseoul
홈페이지 : https://eoseoul.io
미디엄 : https://medium.com/eoseoul
트위터 : https://twitter.com/eoseoul_kor

[NEOPLY]
홈페이지: https://neoply.io
미디엄: https://medium.com/neoply
트위터: https://twitter.com/neoply_kr

--

--

NEOPLY
NEOPLY
Editor for

NEOPLY is an investment organization for accelerating startup growth, specializing in blockchain and cryptocurrency investments.