【가이드】
지난 호 "스마트 계약 실행 엔진의 과거와 현재" 및 "익숙한 새 친구 - On-Chain JVM"에서는 스마트 계약의 기원과 Java 스마트 계약을 실행할 수 있는 자체 개발 실행 엔진 HVM을 소개했습니다. HVM은 EVM에 비해 성능이 크게 향상되었지만 바이트 코드의 수가 많기 때문에 해석 실행 시나리오에서의 실행 성능은 매우 제한적입니다. 한편, 계약 허점으로 인한 보안 문제(비즈니스 로직 허점은 상관없음)는 매년 발생하여 심각한 경제적 손실을 초래하는데, 사용자가 개인적인 요소를 제쳐두고 최대한 안전한 계약을 작성할 수 있는 솔루션은 없을까요?
이 두 가지 시급한 문제를 해결하기 위해 우리는 wasm 가상 머신 FVM과 Rust 계약 작성 프레임워크를 도입했습니다. 다음 기사에서는 스마트 계약 분야에서 이 두 부분의 적용을 자세히 소개합니다.
【안전】
사람들"사람들", 종종 양자 과학의 색을 가져오므로 계약의 정확성을 보장하기 위한 또 다른 일련의 메커니즘을 갖는 것이 좋습니다.
효율적이고 신뢰할 수 있는 범용 언어로서의 Rust는 의심할 여지 없이 사용 가능한 최고의 솔루션입니다.
Rust 언어의 신뢰성은 풍부한 유형 시스템과 소유권 모델, 그리고 컴파일 시간에 고전적인 오류를 포착할 수 있는 강력한 컴파일러에 의존합니다. 이를 통해 개발자는 계약서를 작성하는 과정에서 작성하는 각 코드 라인의 정확성에 대해 생각하고 컴파일러를 통해 이를 확인하여 컴파일러가 확인하는 계약 코드가 안전해야 하므로 보안이 크게 향상됩니다. 계약 및 신뢰성.
또한 자체 개발한 계약 프레임워크는 런타임 테스트 프레임워크를 제공하여 개발자가 배포 없이 계약 운영을 시뮬레이션하고 계약 오프체인에서 문제를 찾을 수 있도록 합니다. 이것은 의심할 여지없이 체인의 계약에 보험 계층을 추가합니다.
또한 계약 프레임워크는 Rust의 매크로 확장 기술을 사용하여 매크로 주석에 작업을 배치합니다. 이를 통해 개발자는 사용 중 자신의 계약의 비즈니스 논리에 더 많은 관심을 기울일 수 있으므로 계약 논리의 보안이 어느 정도 보장됩니다.결국 다른 요소의 간섭 없이 한 부분에만 집중하면 되므로 개발자가 허용 더 헌신하기 위해 논리의 세부 사항을 연마합니다.
【유효성】
EVM은 본질적으로 스크립트 프로그램이자 스택 기반의 가상머신으로서 컴파일러에 의해 명령어로 번역된 후 실행되어야 하는 즉, 해석되고 실행되어야 하므로 EVM의 실행 효율이 매우 낮다. 반대로 wasm은 컴파일 및 실행 방법을 사용하고 가상 머신/바이트코드 기술을 채택하며 컴팩트한 바이너리 형식을 정의하여 스마트 계약의 실행 속도가 더 빠르고 빠릅니다. 따라서 전체 계약의 운영 효율성을 크게 향상시키기 위해 wasm을 도입했습니다.
WASM(WebAssembly)은 말 그대로 웹 브라우저용으로 맞춤화된 어셈블리 언어인 웹 어셈블리를 의미합니다. 여기에서는 커스터마이징이라고 하지만 영성의 발달과 함께 웹에만 적용되는 것이 아니라 그 "핵심 사양"은 플랫폼과는 아무런 관련이 없습니다. 어셈블리라고 부르기 때문에 다음과 같은 어셈블리 언어의 특성이 분명히 있습니다.
1) 낮은 수준, 기계어에 가깝고 작업 효율성 향상
2) 적용 가능성을 확장하기 위해 다른 고급 언어(C/C++/Rust/Go 등) 컴파일러에서 생성된 개체 코드로 적합합니다.
또한 모듈은 wasm 프로그램 컴파일, 전송 및 로딩의 단위입니다. wasm은 두 가지 모듈 형식을 정의합니다.
바이너리 형식: wasm 모듈의 기본 인코딩 형식이며 파일의 접미사는 .wasm입니다. 매우 컴팩트한 형식 설계로 인해 바이너리 크기를 줄일 수 있으며 전송 및 실행 효율성이 더 빠릅니다.
텍스트 형식: 파일의 접미사는 .wat이며 여기서 자세히 설명하지 않습니다.
모듈의 분할은 wasm의 조직 구조를 보다 명확하게 하고, 분석이 보다 편리하며, 분석의 효율성이 크게 향상됩니다.
[FVM 상세설명]
따라서 계약을 작성하고 계약을 wasm 바이트코드로 컴파일하기 위해 Rust를 사용하는 것 외에도 계약을 실제로 실행하려면 여전히 FVM이 수행하는 작업인 wasm에 대한 운영 환경을 제공해야 합니다.
의미상으로, wasm 모듈은 바이너리 형식에서 최종 실행까지 세 단계(디코딩, 검증 및 실행)로 나눌 수 있습니다. 디코딩 단계는 바이너리 모듈을 메모리 형식으로 디코딩하고 검증 단계는 모듈을 정적으로 분석하여 모듈의 구조가 사양 요구 사항을 충족하고 함수의 바이트 코드에 잘못된 동작이 없는지 확인합니다. 실행 단계는 두 단계로 나눌 수 있습니다. 부품: 인스턴스화 및 함수 호출 .
(1) FVM의 구성
분명히 FVM의 완전한 기능에는 위에서 언급한 디코딩, 검증, 인스턴스화 및 함수 호출이 포함되어야 합니다. 우리는 전체 프로세스에 따라 FVM을 구현했지만 실제 운영에서는 실행 프로세스가 메모리 읽기, 쓰기 및 할당에서 많은 성능을 소모하는 것을 발견했습니다. FVM의 실행 성능을 더욱 향상시키기 위해 컴파일 모듈 레이어를 추가하여 wasm 스택 메모리를 레지스터 기반 메모리로 변환하고, 메모리를 표시 및 재사용하고, 빈번한 메모리 할당을 피하고, 전반적인 실행 효율성을 크게 향상시킵니다. .
텍스트
텍스트
(3) 전체 프로세스
전체 소개가 끝난 후 저는 모든 사람이 Rust 스마트 계약 사용에 대한 일반적인 인상을 받았다고 생각합니다. 전체 과정을 요약하면 다음과 같습니다.
1단계: 사용자는 Rust 계약 프레임워크를 통해 스마트 계약을 작성합니다(테스트를 거쳐야 함).
2단계: 계약을 wasm 파일로 컴파일
3단계: wasm 계약 파일을 FVM에 배포
위의 단계를 완료하면 계약이 성공적으로 실행됩니다❤.
텍스트
현재의 계약은 비교적 단순한 사업체만을 대상으로 하고 있으며, 우리의 계획에서 FVM은 기존 계약 시나리오뿐만 아니라 복잡한 비즈니스와 계약 실행 속도에 대한 요구 사항이 높은 시나리오에도 적용할 수 있습니다. 동시에 비블록체인 산업 기술자에게는 친숙한 프로그래밍 언어를 사용하여 계약을 작성하는 "학습 비용이 없는" 방식으로 체인에 접근할 수 있습니다. 더 많은 블록체인 기술 랜딩 솔루션을 탐색하기 위해 블록체인 기술의 적용 시나리오와 영향 범위가 확장되었습니다.
현재 FVM의 성과는 기대에 부응하고 있지만 현재의 현상과 침체에 만족하지 않을 것입니다. 후속 계획에서는 다음과 같은 몇 가지 최적화 솔루션을 계속 탐색할 것입니다.
1) 가상 머신 캐시 최적화
2) 사전 컴파일 방식인 AOT(Ahead-of-Time) 도입, 기존 바이트코드 해석 및 실행 대체, wasm 모듈을 go 코드로 직접 컴파일, go 플러그인 메커니즘을 사용하여 직접 로드 실행하고 궁극의 성능을 경험하십시오.
기술은 지속적으로 새로운 기술을 도입하고 있으며 최적화 작업은 계속될 것입니다. "고급 유지"가 우리의 목표입니다.
【요약】
저자 소개
저자 소개
리카이
참조
참조
[1] 녹 프로그래밍 언어
[2] "웹어셈블리 원리와 핵심기술"
