
Polkadot이 발표한 2025년 로드맵에 따르면 PolkaVM은 의심할 여지 없이 가장 중요한 기술 업데이트 중 하나이며, 가장 먼저 배포 및 적용되는 업데이트 중 하나는 Westend Asset Hub의 Solidity 지원입니다. 가장 먼저 이해해야 할 것은 이 구현이 Moonbeam 및 기타 EVM 지원 파라체인에서 널리 사용되는 이전 Frontier가 아니라 새로운 RISC-V 기반 PVM에서 Solidity 코드를 실행한다는 것입니다. 많은 DApp 및 스마트 계약 개발자에게 이는 Polkadot 2.0을 시작하고 이해하는 훌륭한 방법이 될 것입니다 . Solidity는 대규모 개발자 기반을 보유하고 있으므로 많은 개발자를 Polkadot 2.0으로 데려와 모든 사람이 PVM의 성능과 효율적인 실행 효율성을 확인할 수 있도록 할 것입니다. 먼저 기본 원칙과 기술 아키텍처를 살펴보겠습니다. 당사의 스마트 계약 솔루션에는 다음 구성 요소가 포함됩니다.
팔레트를 부활시키다
스마트 계약을 실행하는 블록체인 모듈입니다. 다른 팔레트와 마찬가지로 다양한 외부 기능과 런타임 API를 추가합니다. 그러나 블록체인이 이더리움 스타일 트랜잭션을 처리할 수 있도록 하는 논리도 추가됩니다. 이러한 특별 거래는 체인에 직접 제출되지 않습니다. 이론적으로는 가능하지만. 소스 코드는 다음 디렉터리에서 볼 수 있습니다.
🔗https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/revive 팔레트
대신 사용자(지갑, Dapp 등)는 블록체인 노드와 함께 배포된 프록시 서버에 연결됩니다. 이 프록시는 Ethereum Json RPC를 에뮬레이션합니다. 즉, Ethereum JSON RPC 인터페이스를 서버로 노출하고 노드에 네트워크 클라이언트로 연결합니다. 페이로드를 그대로 유지하면서 Ethereum 트랜잭션을 특별 예약 가능한 파일로 다시 패키징합니다 . 이더리움 트랜잭션을 디코딩하고 이를 팔레트 부활이 이해할 수 있는 것으로 변환하는 것은 위의 논리에 따라 다릅니다. 이더리움 거래의 페이로드를 블록 그대로 제출함으로써 다양한 거래 형식(예: 블록 탐색기)을 처리할 필요가 없는 도구를 쉽게 조정할 수 있습니다.
독립 실행형 에이전트를 사용하도록 선택하는 것은 의도적인 것입니다. 노드 바이너리에 새 엔드포인트를 추가하려면 이를 구현하기 위한 추가 클라이언트가 필요합니다 . 이것이 바로 우리가 클라이언트 측에서 어떠한 변경도 필요하지 않은 이 접근 방식을 선택한 이유입니다.
폴카VM
이는 경쟁 기술과 비교했을 때 우리가 이룩한 가장 분명한 변화입니다. 계약을 실행하기 위해 EVM을 사용하는 대신 새로운 사용자 정의 가상 머신을 사용합니다 . 현재 우리는 런타임 자체 내에 PolkaVM 인터프리터를 포함하고 있습니다. 이후 업데이트에서는 클라이언트 내에서 실행되는 전체 PolkaVM JIT를 제공합니다. 각 워크로드에 가장 적합한 백엔드를 사용할 수 있도록 인터프리터를 계속해서 사용할 수 있다는 점에 유의하세요. 예를 들어 아주 적은 양의 코드를 실행하는 계약 호출의 경우 인터프리터는 코드 실행을 즉시 시작할 수 있으므로(지연 해석) 여전히 더 빠릅니다. 자세한 내용을 알고 싶다면 프로젝트의 소스 코드를 확인하세요.
🔗 https://github.com/paritytech/polkavm
EVM과의 두 가지 근본적인 차이점은 다음과 같습니다.
등록 기계
EVM은 스택 머신입니다. 이는 함수의 인수가 무한 스택으로 전달된다는 의미입니다. PolkaVM은 레지스터 시스템인 RISC-V를 기반으로 합니다. 이는 제한된 레지스터 세트의 매개변수를 전달한다는 의미입니다. 이것의 주요 이점은 이것이 레지스터 머신이기 때문에 기본 하드웨어로 변환하는 단계를 보다 효율적으로 만든다는 것입니다. 우리는 레지스터가 부족한 것으로 악명 높은 x86-64 명령 세트보다 더 작은 레지스터 수를 신중하게 선택했습니다. NP 하드 레지스터 할당 문제를 간단한 1:1 매핑으로 줄이는 것이 PolkaVM의 빠른 컴파일 시간의 비결입니다.
단어 길이 줄이기
EVM은 256비트 워드 크기를 사용합니다. 이는 모든 산술 연산이 이러한 큰 숫자에 대해 수행되어야 함을 의미합니다. 이는 많은 기본 명령으로 변환되어야 하기 때문에 의미 있는 숫자 처리를 매우 느리게 만듭니다. PolkaVM은 기본 하드웨어에서 기본적으로 지원되는 64비트 단어 크기를 사용합니다. 즉, YUL(#Revive)을 통해 Solidity 계약을 변환할 때 YUL이 정수 유형을 자동으로 변환하기에는 너무 낮은 수준이기 때문에 여전히 256비트 산술을 얻습니다. 그러나 다양한 언어로 계약서를 작성하고 Solidity에서 원활하게 호출하는 것은 전적으로 가능합니다. 우리는 비즈니스 로직이 Solidity로 작성되지만 기본 아키텍처는 대부분의 무거운 작업이 C 모듈에서 수행되는 Python과 유사한 더 빠른 언어로 작성되는 시스템을 구상합니다.
부활
PolkaVM에서 Solidity를 실행하려면 이를 RISC-V로 컴파일해야 합니다. 이를 위해서는 컴파일러가 필요합니다. 이는 원래 solc 컴파일러를 사용한 다음 중간 표현(YUL) 출력을 RISC-V로 다시 컴파일하는 방식으로 작동합니다. 이는 전체 Solidity 컴파일러를 구현하는 것보다 훨씬 작은 작업이라는 장점이 있습니다. 이 접근 방식을 선택함으로써 우리는 Solidity와 모든 다른 버전의 모든 특징과 특징을 지원합니다. 프로젝트 주소는 https://github.com/paritytech/revive 입니다. 자세한 내용을 알고 싶으시면 해당 프로젝트의 소스코드를 확인하시면 됩니다.
리믹스
Remix는 Solidity 개발을 위한 가장 널리 사용되는 도구로, 웹 기반이므로 언제든지 계약을 개발, 디버그 및 배포할 수 있습니다. Polkadot은 또한 이 웹사이트를 통해 액세스할 수 있는 자체 체인 버전인 https://remix.polkadot.io를 제공합니다. REMIX의 포크를 유지하는 이유는 원래 버전과 비교했을 때 주요 변경 사항은 컴파일러 변경이 필요했기 때문입니다. 그래서 브라우저 내 컴파일러 대신 컴파일을 위해 백엔드를 사용하도록 REMIX를 변경했습니다. LLVM 기반 부활은 브라우저 사용량이 너무 많기 때문에 이것이 필요합니다.
개발 관행
전체 원칙을 이해한 후 이를 연습하고 계약의 개발, 배포 및 테스트를 완료하는 방법을 확인할 수 있습니다. 우리는 이 문서를 참조할 수 있습니다:
🔗 https://contracts.polkadot.io/
개발 및 테스트 환경
우선, 부활 팔레트는 웨스트엔드 자산 허브 에 통합되어 직접 개발 및 테스트가 가능합니다.

물론, 백엔드 로그를 확인하고 오류 메시지를 더 쉽게 이해할 수 있도록 자체 로컬 테스트 환경을 설정할 수도 있습니다.
1. Polkadot SDK 코드를 다운로드하고 Kitchensink 노드를 컴파일합니다.

2. 시작 노드

3. Eth RPC 프록시를 별도로 컴파일

4. RPC 서비스 시작

위 서비스가 시작되면 일반 기판 서비스는 포트 9944에 있고 Eth는 포트 8545를 사용합니다.
견고성 계약
먼저 Remix를 사용하여 직접 개발할 수 있는 Solidity 계약을 사용해 보겠습니다. 환경에서는 westend 구성이 이미 기본적으로 제공되어 있습니다. 테스트를 위해 로컬 환경을 사용하는 경우 사용자 정의 구성을 추가할 수 있습니다.

이러한 방식으로 앞서 시작한 Eth RPC 서비스와 상호 작용할 수 있습니다. 물론 복잡한 Dapp 애플리케이션을 개발하는 경우 다른 프레임워크를 사용할 수 있습니다. 실험하려면 Typescript 및 Viem을 사용하는 것이 좋습니다. 부활 팔레트와 함께 제공되는 테스트 코드를 참조할 수 있습니다.
🔗 https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame/revive/rpc/examples/js
또한 병렬 디렉터리에 Rust 언어를 사용하는 버전도 있습니다. 배포 계약 코드의 단순화된 버전은 다음과 같습니다.



1. 먼저 지갑 클라이언트를 초기화합니다.
2. abi 및 바이트코드를 사용하여 스마트 계약을 배포하는 방법 여기서는 piggyBank라는 간단한 계약을 선택합니다. 여기서 바이트코드 는 polkavm 으로 컴파일된 코드라는 점에 유의해야 합니다.
3. 읽기 기능을 호출합니다.
4. 계약의 값을 업데이트하기 위해 트랜잭션을 보냅니다.
5. 거래가 완료된 후, 값이 업데이트되었는지 다시 확인하세요.
Rust는 계약을 직접 작성합니다.
Solidity를 사용하는 것 외에도 다른 언어를 직접 사용하여 계약서를 작성한 다음 이를 Polkavm 코드로 컴파일하고 직접 배포할 수도 있습니다. 여기에서는 https://github.com/paritytech/rust-contract-template을 참조합니다.
polkaVM 계약을 직접 배포하면 Eth RPC를 사용할 필요가 없습니다. 계약이 컴파일된 후 부활 업로드 방법을 사용하여 계약을 체인에 업로드할 수 있습니다.

호출이 성공하면 브라우저 이벤트에서 코드의 해시를 찾을 수 있습니다. 예를 들어 내 예에서는 해시 값이 0x9bef6d3f29397e4994d96657375674096379ba850c31f8c7b950a6f9c13a238d입니다.
다음 단계는 계약을 인스턴스화하고 Instantiate 재생 메서드를 호출하는 것입니다.

여기서 계정 매핑되지 않은 오류가 발생합니다. 계약을 배포하고 호출하려면 먼저 계정 맵 메서드를 호출해야 합니다.

그런 다음 다시 인스턴스화를 시도하면 성공합니다.

일부 계약 주소를 기록해 보겠습니다. 이는 표준 Eth 주소입니다. 이 배포에서 계약 주소는 0xce58c0af740d49e573998ce92c9147565604d321입니다.
마지막으로, 부활의 호출 메소드를 호출하고 이전에 인스턴스화된 계약의 주소를 채웁니다. 이러한 방식으로 우리는 PolkaVM 계약의 개발, 배포 및 테스트를 완료했습니다.

지속적으로 구축
기본 환경 설정 및 개발 과정이 완료되면 보다 복잡한 비즈니스 로직을 완성할 수 있습니다. 일반적으로 polkaVM은 아직 초기 단계에 있습니다. 문제가 발생하거나 일부 기능을 완료하거나 버그를 수정하려는 경우 이러한 리포지토리에 적극적으로 PR을 제출할 수 있습니다.
2025년에는 폴카닷 2.0의 기능이 점진적으로 구현되면서 폴카VM의 활용 시나리오와 범위가 더욱 넓어질 것으로 예상된다. 잼.
