이더리움에서는 온체인 로직을 스마트 컨트랙트라 부릅니다. 솔라나에서는 같은 역할을 하는 코드를 프로그램이라 부릅니다. 이름만 다른 것이 아니라 구조와 실행 방식도 다릅니다. 이 글에서는 솔라나 프로그램의 핵심 개념을 정리합니다.
프로그램이란
솔라나 프로그램은 체인에 배포된 실행 가능한 코드입니다. 사용자가 트랜잭션을 보내면 검증자가 프로그램을 실행하고 결과를 블록에 기록합니다. 솔라나의 시스템 프로그램, 토큰 프로그램, 스테이크 프로그램 모두 같은 방식으로 동작합니다.
계정 기반 아키텍처
솔라나의 가장 큰 특징은 코드와 상태를 분리한다는 점입니다. 이더리움에서는 컨트랙트가 자신의 상태를 저장하지만, 솔라나에서는 프로그램이 상태를 직접 갖지 않습니다. 대신 상태는 별도의 계정에 저장되고, 프로그램은 실행 시 이 계정들을 참조합니다.
모든 계정은 하나의 주소를 가지며, 소유자 프로그램, 잔액, 데이터, 임대 등의 속성을 갖습니다. 프로그램은 자신이 소유한 계정의 데이터만 수정할 수 있습니다.
실행 모델
솔라나는 트랜잭션을 병렬로 처리합니다. 각 트랜잭션은 읽고 쓸 계정 목록을 명시하고, 서로 겹치지 않는 계정을 사용하는 트랜잭션은 동시에 실행됩니다. 이 덕분에 솔라나는 높은 처리량을 가집니다.
프로그램 실행에는 수수료가 부과되며, 수수료는 트랜잭션이 사용한 컴퓨팅 자원에 비례합니다. 이 단위를 컴퓨팅 유닛이라 부릅니다.
프로그램 작성
솔라나 프로그램은 주로 Rust로 작성합니다. Anchor라는 프레임워크를 많이 사용하지만, 프레임워크 없이도 작성할 수 있습니다. C와 C++로도 작성할 수 있습니다. 학습 단계에서는 Anchor가 진입 장벽을 낮춰 줍니다.
배포와 호출
프로그램을 컴파일하면 바이트코드가 생성되고, 이를 체인에 배포합니다. 배포된 프로그램은 고정된 주소를 갖습니다. 사용자가 프로그램을 호출하려면 트랜잭션에 프로그램 주소와 필요한 계정들을 명시하고 서명합니다.
대표적인 프로그램
- 시스템 프로그램 — 계정 생성, 잔액 이체 등 기본 동작.
- 토큰 프로그램 — SPL 토큰 발행과 전송.
- 스테이크 프로그램 — 위임과 보상.
- 투표 프로그램 — 검증자 투표 기록.
다음 단계
프로그램 개념을 이해했으면 RPC 엔드포인트 글로 넘어가 프로그램을 외부에서 어떻게 호출하는지 학습하세요. 프로그램과 계정의 관계가 더 궁금하다면 용어집의 '계정' 항목을 함께 보세요.