WASM 스마트 컨트랙트
Polkadot의 스마트 컨트랙트
Substrate, Polkadot 또는 Kusama에 대해 처음 알게 된 사람들이 가장 먼저 묻는 질문 중 하나는 언제 파라체인(parachain)을 개발하고 언제 스마트 컨트랙트(smart contract)를 개발해야 하는가입니다.
여기서의 차이점은 Polkadot과 Kusama의 맥락에서 파라체인은 몇 개월에서 최대 2년까지 슬롯을 임대한다는 것입니다. 임대 계약에 따라 파라체인은 비즈니스 로직(일반적으로 상태 전이 함수(state transition function)라고 함)을 실행하기 위한 고정된 슬롯을 할당받고, 변경된 상태를 블록에 영구적으로 저장할 수 있습니다. Substrate 용어로 이 상태 전이 함수를 체인의 런타임(runtime)이라고 합니다.
다른 생태계와의 차이점은, Polkadot의 맥락에서 파라체인과 스마트 컨트랙트가 스택의 서로 다른 계층에 존재한다는 것입니다. 즉, 스마트 컨트랙트는 파라체인 위에 위치합니다. 파라체인은 일반적으로 레이어 1(layer-1) 블록체인으로 설명되지만, 자체 보안을 구축할 필요가 없고, 업그레이드가 가능하며, 상호운용성을 갖춘다는 점이 다릅니다.
주목할 점은 파라체인의 상태 전이 함수는 추가로 검증되지 않는다는 것입니다. 슬롯 시간을 어떻게 활용할지는 파라체인에 달려 있습니다. 파라체인은 Polkadot 또는 Kusama의 슬롯 경매에서 낙찰되었을 때 이미 슬롯 비용을 선불로 지불했습니다. 이는 파라체인이 자신만의 (블록체인) 세계를 구축할 수 있다는 의미입니다! 예를 들어, 트랜잭션 수수료를 어떻게 부과할지, 또는 수수료를 아예 부과할지 여부까지도 결정할 수 있습니다. 이러한 선택지는 새롭거나 보다 사용자 친화적인 비즈니스 모델을 구축할 때 매우 중요합니다. 실제로 관찰되는 파라체인 간의 또 다른 차별화 요소로는 거버넌스 방식이나 크립토 이코노믹스(crypto-economics)의 차이가 있습니다. 하지만 파라체인이 자신의 세계를 구축하는 방식에는 몇 가지 제약이 있습니다. 현실 세계의 물리 법칙처럼, 파라체인은 특정한 기본 규칙을 따라야 합니다. Polkadot과 Kusama의 경우, 예를 들어 릴레이 체인이 파라체인과 통신하기 위한 합의 알고리즘이 이에 해당합니다. 이러한 기본 규칙으로부터 Polkadot과 Kusama의 장점이 생겨납니다. 앞서 언급한 공유 보안, 크로스체인 통신, 보장된 실행 슬롯 시간과 같은 장점들입니다.
반면 스마트 컨트랙트의 경우, 사용자가 스마트 컨트랙트를 배포할 수 있도록 기존 파라체인에 pallet-contracts가 포함되어 있어야 합니다. 배포된 스마트 컨트랙트는 항상 신뢰할 수 없는 코드입니다. 체인의 토큰을 보유한 누구나(또는 어떤 프로그램이든) 허가 없이 스마트 컨트랙트를 업로드할 수 있습니다. 스마트 컨트랙트는 신뢰할 수 없는 프로그램을 블록체인에 무허가(permissionless)로 배포할 수 있게 해줍니다. pallet-contracts는 이러한 프로그램이 악의적이라고 가정해야 하며, 컨트랙트가 예를 들어 체인을 멈추게 하거나 다른 컨트랙트의 상태를 손상시키지 못하도록 여러 가지 안전장치를 마련해야 합니다. pallet-contracts의 경우 이러한 안전장치에는 가스 계량(gas metering)이나 온체인 데이터 저장을 위한 예치금(deposit)과 같은 메커니즘이 포함됩니다.
이 중요한 차이점을 다시 강조하자면, 파라체인 런타임을 개발하는 것은 스마트 컨트랙트를 개발하는 것과 다릅니다. 스마트 컨트랙트는 파라체인 위에 위치합니다.
트레이드오프는 다음과 같습니다. 파라체인을 사용하면 파라체인을 구성하는 (거의) 모든 규칙을 자유롭게 결정할 수 있습니다. 스마트 컨트랙트를 사용하면 체인이 허용하는 범위와 반드시 갖춰야 하는 안전장치에 의해 제약을 받습니다. 스마트 컨트랙트는 파라체인 런타임에 내장된 네이티브 pallet만큼 빠를 수 없습니다. 그 사이에 너무 많은 로직이 존재하기 때문입니다. 반면 스마트 컨트랙트는 개발하고 배포하는 데 따르는 부담이 적습니다. 개발자는 거버넌스, 크립토 이코노믹스 등을 신경 쓸 필요가 없습니다. 몇 개의 토큰만 있으면 바로 스마트 컨트랙트를 배포할 수 있습니다. 그만큼 간단합니다.
pallet-contracts의 무작위성(Randomness)에 관한 고지
무작위성 기능을 사용하는 코드는 업로드할 수 없으며, 이 더 이상 사용되지 않는(deprecated) 기능을 사용하는 기존 코드로부터 컨트랙트를 인스턴스화할 수도 없습니다. 이 기능은 결국 제거될 예정입니다. 따라서 새로운 pallet-contracts 배포 시에는 이 타입에 대해 더미 구현을 제공해도 무방합니다(사용되지 않기 때문입니다).
