[루디움 렉쳐] 아비트럼 딥다이브_9oodam 학습 내용 정리 (2주차_2)

스타일러스 SDK 개발 개요

니트로의 업그레이드 버전이자 아비트럼이 더욱 많은 생태계의 개발자들을 유입시키기 위한 기술적인 진화

아비트럼 스타일러스를 도입하여 아비트럼 원과 노바에 EVM, WASM VM을 추가하여 솔리디티, C, C++ 등 다양한 언어로 개발한 컨트랙트를 아비트럼 체인에서 실행할 수 있게 됨

 

주요 이점

 

개발자 생태계의 대폭적인 확장

솔리디티 외에도 러스트, C++과 같이 훨씬 더 광범위하게 사용되는 프로그래밍 언어를 지원

 

성능과 효율성의 현저한 개선

WASM(Web Assembly)을 활용하여 가스비를 대폭 절감하고 트랜잭션 처리 속도를 획기적으로 향상

자체 개발한 니트로의 독특한 사기 방지 메커니즘과 결합하여, WASM 기반 트랜잭션의 처리 속도가 기존 대비 10배 이상 빨라지고, 비용은 100배에서 심지어 500배까지 절감될 수 있다고 주장


구동 원리

아비트럼의 기본 구조

아비트럼의 기본 구조는 '실행'과 '증명'을 분리하는 방식으로 설계

-> 일을 먼저 빠르게 처리하고(실행), 나중에 필요할 때만 그 일이 제대로 수행되었는지 확인(증명)하는 것

-> 빠른 트랜잭션 처리 속도

 

증명 과정은 백그라운드에서 이루어지며, 실제로 분쟁이 발생할 때만 활성화

 

Geth와 WAVM

 

Geth(go-ethereum)

Arbitrum Nitro 시스템의 기반이 되는 이더리움의 핵심 노드 소프트웨어

-> Nitro는 이를 중심으로 세 개의 주요 레이어인 "Geth 샌드위치" 구조를 형성

Geth core : EVM 계약 실행과 상태 데이터 구조 유지를 담당
ArbOS : Layer 2에 특화된 기능을 제공하며, Sequencer 데이터 처리, 가스 비용 계산, 수수료 수집, 크로스체인 브릿지 등을 지원
Node functionality : 클라이언트 연결과 RPC 요청 처리 등 이더리움 호환 블록체인 노드 운영에 필요한 고수준 기능을 제공

 

WAVM(WebAssembly Virtual Machine)

Arbitrum의 요구사항에 맞게 수정된 특수한 가상 머신으로, 실행과 증명을 분리하는 Arbitrum의 접근법을 구현하기 위해 도입

WebAssembly를 기반으로 하지만 일부 기능을 제거하거나 제한하고, 부동 소수점 연산을 소프트웨어 라이브러리로 대체하며, 제어 흐름 구조를 단순화하는 등의 특징을 가지고 있음

블록체인 환경과의 상호작용을 위한 특별한 opcode를 추가하고, 실행 시간을 예측 가능하게 만들며, 효율적인 증명 생성과 검증에 최적화

 

 

개발자가 Rust나 C++로 작성한 코드는 WASM으로 컴파일

-> WASM 코드는 WAVM에서 실행

-> 이 과정에서 Geth의 EVM 호환성과 WAVM의 효율적인 증명 시스템이 결합되어 높은 성능과 보안성을 제공


개발 과정

1. 개발자는 선호하는 언어로 코드를 작성

2. 이를 WASM으로 컴파일

3. 컴파일된 WASM 코드는 블록체인에 올라가고, 'ArbWasm'이라는 새로운 프리컴파일을 통해 노드의 네이티브 머신 코드로 변환

4. 이 과정에서 가스 계측, 깊이 검사, 메모리 과금 등 안전성을 위한 여러 절차가 진행

 

장점

- 저렴한 실행 비용 : WASM 프로그램은 EVM보다 훨씬 효율적으로 실행되어, 복잡한 스마트 컨트랙트의 가스 비용을 크게 줄일 수 있다. 계산 비용은 최대 10배, 메모리 사용은 100배 이상 저렴해질 수 있다.

- 향상된 보안 : 재진입(reentrancy) 공격 같은 흔한 취약점에 대해 더 나은 보호를 제공한다. Rust SDK에서는 기본적으로 재진입이 불가능하며, 필요한 경우에만 명시적으로 허용할 수 있다.

- 완벽한 상호운용성 : Solidity로 작성된 프로그램과 WASM 프로그램은 서로 완벽하게 호환된다. 개발자는 언어의 제약 없이 다른 컨트랙트를 호출하거나 활용할 수 있다.


Arb-Stylus 환경 설정

1. Arbitrum Stylus 프로그램을 관리하는 CLI 도구 설치

cargo install --force cargo-stylus cargo-stylus-check

 

2. 러스트 컴파일러의 빌드 대상으로 wasm 추가

rustup target add wasm32-unknown-unknown

 

3. 새 프로젝트 생성

cargo stylus new <내가만들 프로젝트 명>

 

4. 스타일러스 프로젝트 확인

cargo stylus check

 

5. 배포 가스 추정

cargo stylus deploy --private-key-path=<사용자의 비밀키 경로> --estimate-gas-only

 

6. 배포

cargo stylus deploy --private-key-path=<사용자의 비밀키 경로>