본문으로 건너뛰기
0%

Solana 스마트 컨트랙트 완벽 가이드

2023년 8월 10일에 게시됨8분 읽기

Solana는 스마트 컨트랙트 개발에 중점을 둔 블록체인 플랫폼으로, 기존 블록체인이 직면한 문제들을 해결하는 것을 목표로 합니다. NFT, DeFi 프로젝트를 포함한 다양한 블록체인 프로젝트를 호스팅합니다.

Solana ecosystem은 매우 낮은 트랜잭션 수수료와 높은 확장성 덕분에 최근 몇 년간 인기가 높아졌습니다. Solana를 차별화하는 요소는 proof of stake 합의 알고리즘과 고유한 proof of history 메커니즘을 결합했다는 점으로, 이를 통해 개발자는 NFT 플랫폼, 등을 만들 수 있는 다목적 네트워크를 갖게 됩니다.

이 글에서는 Solana 스마트 컨트랙트의 작동 방식, Solana 프로그램을 만들고 배포하는 방법, 필요한 도구들을 설명합니다. 또한 시작에 도움이 될 Solana 스마트 컨트랙트 튜토리얼, 예제, 리포지토리, 개발자 도구, 리소스를 살펴봅니다.

Solana 스마트 컨트랙트란?

Solana 스마트 컨트랙트는 프로그램이라고도 불리며, 명령을 해석하고 계약의 조건을 확립하는 코드입니다. 많은 개발자들이 상대적으로 낮은 트랜잭션 수수료 덕분에 Solana 스마트 컨트랙트를 Ethereum 스마트 컨트랙트의 실행 가능한 대안으로 여깁니다.

스마트 컨트랙트를 사용하면 개발자는 블록체인의 보안성, 신뢰성, 접근성을 활용하면서 대출, 보험부터 물류, 게임에 이르기까지 정교한 피어투피어 기능을 제공하는 앱을 만들 수 있습니다.

Solana 스마트 컨트랙트는 다양한 프로그래밍 언어로 작성할 수 있습니다. Rust가 Solana 스마트 컨트랙트의 네이티브 언어이지만, 이 프로토콜은 서드파티 JSON RPC API SDK 클라이언트를 통해 C++, Solidity 등 다른 언어로도 스마트 컨트랙트 개발을 지원합니다.

Solana 스마트 컨트랙트 아키텍처

Solana는 기존 EVM 기반 블록체인과는 다른 스마트 컨트랙트 모델을 사용합니다. 기존 블록체인의 경우 코드와 상태가 하나의 컨트랙트로 결합되어 있는 반면, Solana 스마트 컨트랙트는 상태를 가지지 않으며 프로그램 로직만을 포함합니다.

Solana 아키텍처는 블록체인을 구현하기 위해 결합했을 때 소프트웨어가 성능 병목이 되는 것을 제거하여 트랜잭션 처리량이 네트워크 대역폭에 비례하여 확장될 수 있게 하는 소프트웨어 알고리즘 집합의 존재를 보여주는 것을 목표로 합니다.

앱과의 상호작용을 향상시키기 위해 Solana에는 Command Line Interface(CLI)와 JSON RPC API도 함께 제공됩니다. 앱은 기존 SDK를 사용하여 블록체인 및 Solana 프로그램과 상호작용할 수도 있습니다.

Solana 검증 프로세스 다이어그램

Solana의 proof-of-history 메커니즘

Solana는 proof of stake와 proof of history를 결합하여 블록체인 확장성을 개선하는 것을 목표로 합니다. Tower Byzantine fault-tolerant(BFT) 시스템을 사용하여 노드 간 실시간 통신의 필요성을 제거하고, 그 결과 효율성이 높아지고 초당 50,000건(TPS)의 높은 트랜잭션 처리율을 달성합니다.

그 결과 Solana는 탈중앙화를 유지하면서도 높은 트랜잭션 볼륨을 처리할 수 있습니다. Solana는 200개의 검증 노드의 도움을 받아 400밀리초마다 새 블록을 생성하며, 트랜잭션 수수료는 1달러 미만으로 유지됩니다.

Solana는 향상된 확장성과 더 빠른 트랜잭션 속도로 알려져 있습니다. Solana 네트워크는 코어 레벨에서 확장 가능하므로 확장성을 높이기 위해 레이어-2 솔루션이 필요하지 않습니다.

Solana 네트워크의 기술은 데이터를 더 작은 청크로 분해하여 네트워크 전반에 걸친 데이터 전송을 더 쉽게 만듭니다. 또한 Solana는 Sealevel을 사용하여 GPU와 SSD 전반에 걸친 트랜잭션 처리를 지원함으로써 효율적인 블록체인 네트워크를 구현합니다.

이미지 출처: Solana Labs

Solana 프로그램과 Ethereum 스마트 컨트랙트의 차이점은 무엇인가요?

Ethereum의 스마트 컨트랙트는 Solidity 프로그래밍 언어로 작성되는 반면, Solana의 스마트 컨트랙트는 주로 Rust로 작성되며 프로그램이라고 불립니다. 이들은 상태를 가지지 않으며 프로그램 로직만을 나타냅니다.

두 가지의 가장 중요한 차이점은 사용되는 합의 메커니즘에 있습니다. Ethereum은 더 탈중앙화되고 에너지 효율적인 네트워크를 지향하며 Proof of Stake(PoS)를 사용합니다. 반면 Solana는 속도와 효율성을 우선시하는 독특한 접근 방식인 Proof of History(PoH)를 활용하여 빠르고 저비용의 트랜잭션을 실현합니다.

Solana 프로그램은 전적으로 코드로만 구성되며 데이터를 포함하지 않습니다. 모든 데이터는 입력으로 제공됩니다. 이러한 분리된 설계는 동일한 Solana 프로그램의 여러 사본이 서로 다른 입력에서 병렬로 실행될 수 있게 함으로써 높은 성능을 가능하게 합니다. 다시 말해, 여러 사용자 계정에서 동일한 Solana 프로그램으로의 트랜잭션이 동시에 발생할 수 있습니다. 이는 Solana를 높은 확장성을 가지도록 만드는 특징 중 하나입니다.

Solana에서 스마트 컨트랙트 만드는 방법

이 섹션에서는 Solana에서 스마트 컨트랙트를 만드는 데 필요한 단계를 다룹니다. 시작하는 데 필요한 모든 정보를 안내해 드리겠습니다.

사전 요구사항

  • Solana의 작동 방식에 대한 약간의 지식
  • 아래 Setup 섹션에 따라 설치된 Anchor와 Rust
  • 학습에 대한 준비

1단계: Rust, Solana, yarn, anchor 설치

Solana 개발 환경을 설정하는 것부터 시작하겠습니다.

Rust 설치

Solana 프로그램에 사용되는 프로그래밍 언어인 Rust를 설치하는 것부터 시작하겠습니다.

다음 명령을 사용하여 Rust와 Rust 컴파일러가 올바르게 설치되었는지 확인합니다.

이제 Rust 패키지 관리자인 Cargo도 설치되어 있어야 합니다. 아래 명령을 실행하여 Cargo가 올바르게 설치되었는지 확인하세요.

Rustup은 Rust를 설치하고 업데이트하는 도구입니다.

Rustc는 Rust 프로그래밍 언어의 컴파일러이며, Rust 프로그램을 현재 모든 운영체제에서 실행 가능하게 만들 수 있게 해줍니다.

Cargo는 Rust 프로그래밍 언어를 위한 빌드 시스템 도구이자 패키지 관리자입니다.

Solana 설치

설치 과정에서 경로 변경을 요청하면 안내에 따라 진행하세요.

node.js 설치

공식 웹사이트를 방문하여 사용 중인 운영체제에 맞는 버전을 선택해 Node.js를 다운로드하세요.

다음 명령을 실행하여 Node.js 설치를 확인할 수 있습니다.

yarn 설치

Yarn은 npm과 같은 패키지 관리자입니다.

Yarn 버전을 확인하세요.

anchor 설치

Anchor는 Solana의 Sealevel 런타임을 위한 프레임워크로, 유용한 개발자 도구를 여러 가지 제공합니다.

Anchor를 설치하려면 다음 명령을 실행하세요.

그런 다음 설치를 확인하세요.

2단계: 프로젝트 설정

이 섹션에서는 solana cli를 devnet으로 설정하고 anchor 프레임워크로 프로젝트를 초기화합니다. 실제 배포를 시뮬레이션하기 위해 Solana Devnet에 배포합니다.

진행하려면 터미널에서 다음 명령을 실행하세요.

다음 단계는 프로그램을 실행하고 배포하는 데 필요한 지갑을 만드는 것입니다.

다음 명령으로 pubkey를 가져오세요.

그런 다음 다음 명령을 실행하여 주소를 조회할 수 있습니다.

그다음, 개발에 필요한 일부 testnet SOL이 필요합니다. 다음 명령을 사용하여 지갑으로 에어드랍할 수 있습니다.

아래 명령을 실행하면 잔액이 표시됩니다.

아래 명령을 실행하여 Anchor 프로젝트를 초기화합시다. 이 명령은 프로젝트에 필요한 모든 폴더와 추가 종속성을 생성합니다.

3단계: 첫 HelloWorld 프로그램 작성

프로젝트 구조에서 다음과 같은 파일과 폴더를 볼 수 있습니다.

  • program — 모든 Solana 프로그램이 포함된 디렉터리
  • test — Javascript 테스트 코드를 위한 폴더
  • migrations — 프로그램의 배포 스크립트
  • app — 프론트엔드를 구축하는 위치

lib.rs는 Solana 프로그램의 시작점이자 메인 파일임을 기억하세요. 아래와 같이 몇 가지 시작 코드가 포함되어 있습니다.

Rust가 어떻게 작동하는지 살펴보겠습니다. Rust의 첫 번째 코드 줄은 종속성 또는 라이브러리를 임포트합니다. 이 경우에는 anchor 라이브러리를 임포트하고 있습니다.

Solana는 declare_Id 변수에 주소 또는 프로그램 ID를 저장합니다. Anchor는 기본적으로 프로그램 ID를 생성해 줍니다.

다음은 프로그램의 로직이 있는 program 섹션입니다.

마지막 섹션은 account struct가 있는 derive Accounts 섹션입니다.

initialize struct는 initialize 함수의 컨텍스트를 정의하며, struct는 구조를 선언하는 데 사용됩니다. Rust에서 메서드를 정의하는 방식은 다른 프로그래밍 언어와 다릅니다. 코드와 데이터를 분리할 수 있는 능력은 Solana의 핵심 강점 중 하나입니다.

Hello World Solana 프로그램을 자세히 살펴보겠습니다. Solana 프로그램은 Solana 네트워크에서 명령을 저장하고 실행할 수 있는 특별한 계정에 불과하다는 점을 기억하세요. Solana 프로그램의 표준 라이브러리와 같은 solana-program crate를 사용하겠습니다. 기본 프로그램을 만들기 위해 solana-program crate의 일부 기능을 사용해야 합니다.

첫 번째 섹션은 Binary Object Representation Serializer for hashing의 약자인 Borsh를 사용합니다. Borsh는 배포된 프로그램과의 사이에서 전달되는 파라미터를 직렬화 및 역직렬화하는 데 사용됩니다. AccountInfo는 계정 정보에 대한 접근을 제공하는 account_info 모듈의 struct입니다. entrypoint는 프로그램의 진입점을 선언합니다.

entrypoint 모듈 내의 ProgramResult는 ProgramReport 또는 ProgramError를 반환합니다. 마지막으로 또 다른 매크로인 msg는 프로그램 로그에 메시지를 출력하는 기능을 하며, pubkey struct를 통해 주소를 public key로 접근할 수 있습니다.

위 코드 스니펫은 계정에 저장되는 상태의 유형과 인사 횟수를 참조하는 32비트 부호 없는 정수 유형인 counter u32를 정의합니다.

위 첫 번째 코드 줄에서 볼 수 있듯이, Solana 프로그램은 프로그램 명령을 처리하기 위해 entrypoint 매크로가 필요합니다. entrypoint에는 hello world 프로그램을 생성하는 계정의 public key인 program_id 인수를 가진 process_instruction 함수가 필요합니다. accounts 인수는 인사를 건네고자 하는 계정이며, instruction_data 인수는 추가 입력을 포함합니다. ProgramResult는 "Hello World Rust Program" 메시지를 출력합니다.

'let' 문은 인사할 계정을 가져옵니다. 'if' 문은 데이터를 수정하려면 프로그램이 해당 계정을 소유해야 한다는 조건을 명시합니다.

'let' 문은 인사할 계정을 가져옵니다. 'if' 문은 데이터를 수정하려면 프로그램이 해당 계정을 소유해야 한다는 조건을 명시합니다.

Solana에서 스마트 컨트랙트 배포하는 방법

이 섹션에서는 Solana에서 스마트 컨트랙트를 배포하는 단계를 설명합니다.

1단계: Solana 프로그램 테스트

테스트를 실행하려면 다음 명령을 실행하세요.

이 명령은 특정 클러스터에 대해 프로그램을 빌드, 배포, 테스트합니다.

2단계: Devnet에 배포

라이브 네트워크에 배포하는 것은 쉽지만, 먼저 우리가 Devnet에 있는지 확인해야 합니다.

Anchor.toml 파일을 찾아 클러스터를 devnet으로 업데이트하세요. cluster = "devnet".

다음 명령을 실행하여 프로그램을 빌드하세요.

마지막으로 프로그램을 배포하세요.

3단계: Solana explorer에서 확인

다음으로, 프로그램 id를 제공하여 성공적으로 배포되었는지 확인하기 위해 Solana Devnet explorer에서 프로그램을 인증합니다. history 섹션 아래에서 배포 로그를 확인할 수 있습니다.

Solana 스마트 컨트랙트 튜토리얼

스마트 컨트랙트의 작동 방식에 대해 확실히 이해했으니, 이제 실제 프로젝트를 통해 Solana 개발 아키텍처가 어떻게 작동하는지 익혀보겠습니다. 우리가 구축할 프로젝트는 NFT를 민팅하는 Solana 스마트 컨트랙트입니다. NFT를 민팅하는 방법에는 여러 가지가 있으며, 그중 하나가 Metaplex candy machine을 사용하는 것입니다. NFT는 스마트 컨트랙트의 가장 인기 있는 사용 사례 중 하나입니다.

이 섹션에서는 다음을 배우게 됩니다

  • Solana CLI 유틸리티를 Devnet과 함께 사용하도록 구성하는 방법과 Solana의 기타 유용한 명령어
  • Rust로 더 복잡한 프로그램을 작성하는 방법
  • anchor 프레임워크로 프로젝트를 초기화하는 방법
  • Rust 변수와 문법 이해하기

요구사항은 다음과 같습니다

빠른 설정

아래 명령을 사용하여 Devnet 네트워크와 함께 작동하도록 Solana를 설정함으로써 개발 환경을 구성합니다.

그런 다음 아래 명령을 사용하여 프로그램을 실행하고 배포하는 데 필요한 지갑을 생성합니다.

지갑을 보호하기 위한 비밀번호를 입력하라는 메시지가 표시됩니다. 그런 다음 12개의 단어로 구성된 니모닉을 볼 수 있습니다.

그런 다음 주소를 확인할 수 있습니다.

그런 다음 아래 명령을 실행하여 4 testnet SOL을 주소로 에어드랍하세요.

4 testnet SOL을 에어드랍한 후, 다음 명령을 실행하여 잔액을 확인하세요.

이제 Devnet 네트워크와 함께 작동하도록 Solana를 구성하고 새 지갑을 만들었으니, Anchor 프로젝트를 만들어 모든 폴더와 번거로운 설정을 관리하도록 해봅시다. 터미널로 이동하여 다음 명령을 입력하세요.

Solana 스마트 컨트랙트

스마트 컨트랙트를 살펴보기 전에, SPL 토큰과 상호작용하는 데 사용할 spl-token CLI를 설정해야 합니다. 터미널에서 아래 명령을 실행하여 이를 수행할 수 있습니다.

solana sdk와 solana-program을 설치하세요.

programs 폴더에 lib.rs 파일이 있는 것을 볼 수 있습니다. 여기에 Solana 프로그램이 작성됩니다. 앞서 언급했듯이, lib.rs에 주어진 기본값을 기반으로 구축할 것입니다. 다음과 같은 내용이 보일 것입니다.

여기서는 코드 상단에 작업할 도구들을 임포트했습니다.

프로그램 로직 정의하기

_mint_authority_를 사용하여 mint(mint_nft)를 생성할 권한을 프로그램에 부여하고, 그런 다음 토큰 계정(mint_token_account)을 이에 할당합니다. 그런 다음 앞서 임포트한 token_program과 associated_token_program을 사용합니다.

Authority는 해당 계정이 더 많은 토큰을 발행하거나 돈을 더 찍어낼 수 있음을 의미합니다. 일반적으로 지갑 계정에 의해 생성됩니다. 이는 선택 사항인데, mint authority가 자신의 권한을 철회하여 mint 계정을 불변으로 만들 수 있기 때문입니다.

mint 계정 생성하기

토큰 계정 생성하기 ‍

mint 함수 작성하기

다음으로, 위에서 생성한 토큰 계정으로 NFT를 민팅하겠습니다.

프로그램 배포하기

이제 Anchor 프레임워크를 사용하여 NFT 민팅 Solana 프로그램을 빌드할 준비가 되었습니다!

빌드 프로세스는 프로그램 계정에 대한 키페어를 생성합니다. 프로그램을 배포하기 전에, Anchor를 사용하는 프로그램에서 필요로 하는 이 public key를 lib.rs 파일에 추가해야 합니다. 이를 위해 다음 명령을 사용하여 Anchor가 생성한 keypair.json 파일에서 키페어를 가져와야 합니다.

다음 단계는 lib.rs 파일을 편집하여 declare_id!() 정의 안의 키페어를 이전 단계에서 얻은 값으로 교체하는 것입니다.

다음으로, 얻은 Program ID 값을 chainlink_solana_demo devnet 정의의 Anchor.toml 파일에도 삽입해야 합니다.

키페어를 새 ID로 교체했으므로 Anchor를 사용하여 프로그램을 다시 빌드해야 할 수도 있습니다.

마지막으로 프로그램을 배포할 수 있습니다.

프로그램이 성공적으로 배포되면, 터미널 출력에 프로그램 ID가 표시되며, 이는 lib.rs와 Anchor.toml 파일에 입력한 값과 일치해야 합니다.

배포된 계약은 Solana Devnet Explorer에서도 확인할 수 있습니다.

배포된 컨트랙트가 Solana Devnet explorer에 표시된 모습.

Solana 스마트 컨트랙트 예제 및 리포지토리

Solana 개발 여정에 큰 도움이 될 만한 Solana 스마트 컨트랙트 예제와 리포지토리가 많이 있습니다. 그중 일부를 아래에 정리했습니다.

1. Hello world 스마트 컨트랙트

Hello World smart contract는 Anchor와 Rust를 사용한 실습형 Solana 프로그램 예제를 제공합니다. Solana에서 스마트 컨트랙트와 앱을 구축하는 단계별 접근법을 따릅니다. 또한 온체인 프로그램을 사용, 빌드, 배포하는 샘플 코드를 제공합니다.

2. Simple Solana 프로그램

Simple Solana Program은 Hello World 예제와 기능적으로 관련이 있습니다. Solana 블록체인에서 프로그램을 생성하고 호출하는 방법을 보여줍니다. 이 예제에서 Solana 프로그램은 실행된 횟수를 카운트하고 그 정보를 온체인에 저장합니다.

3. Awesome Solana

Awesome Solana는 초보자와 숙련된 Solana 개발자 모두를 위한 리소스를 담은 상세한 라이브러리입니다. Solana 개발, Solana 트랜잭션, Solana 라이브러리, Solana 프로그램의 작동 방식 설명, 학습에 도움이 되는 영상 예제 등의 리소스를 제공합니다.

4. Break Solana

Break Solana는 웹 클라이언트 프론트엔드, 웹 서버 백엔드, 온체인 Solana 프로그램으로 구성된 게임입니다. Break Solana 게임은 플레이어가 최대한 빠르게 간단한 스마트 컨트랙트 트랜잭션을 전송하여 Solana의 속도를 보여줄 수 있게 해줍니다.

프로그램 작성을 위한 Solana 개발자 도구 및 리소스

Solana에서 프로그램을 작성할 때 유용한 학습 리소스와 개발자 도구 모음이 있습니다.

1. Solana playground

Solana Playground는 사용자가 고유한 요구에 맞게 Solana 트랜잭션을 완전히 커스터마이징할 수 있게 함으로써 블록체인 시스템과 상호작용하는 매우 쉬운 방법을 제공합니다. 컴퓨터 프로그램 개발 경험이 없는 사람들도 Solana Playground를 사용하여 블록체인이 어떻게 작동하는지 더 잘 이해할 수 있습니다. 프로젝트 리포지토리는 Github에서 확인할 수 있습니다.

2. Start on Solana

Start on Solana는 Solana에서 구축하고 Solana ecosystem에 기여하기 위한 가이드를 제공합니다. Solana에서 NFT를 만드는 것부터 Javascript로 암호화폐를 민팅하고 만드는 것까지, Javascript와 Rust로 된 다양한 퀘스트를 제공합니다.

3. Solana cookbook

Solana Cookbook은 Solana에서 애플리케이션을 구축하기 위한 기본 개념과 참조 자료를 제공하는 개발자 리소스입니다. Solana 개발에 초점을 맞추면서 개발자를 위한 많은 예제를 제공하는 필수적인 리소스입니다.

4. Sol dev course

Sol Dev Course는 Solana 개발 경험을 단순화하도록 설계되어, 초보자가 Solana에서 구축을 시작하기에 가장 좋은 곳 중 하나입니다. 또한 회원들이 다른 web3 개발자를 돕기 위한 콘텐츠를 기여할 수 있는 활발한 커뮤니티도 갖추고 있습니다.

5. buildspace로 react와 Rust를 사용해 Solana에서 Web3 앱 구축하기

Buildspace는 Solana 개발 여정을 시작하고 마일스톤을 완료한 후 NFT를 얻을 수 있는 훌륭한 커뮤니티입니다. 대화형 강좌는 Solana에서 빠르게 무언가를 만들고 싶은 초보자에게 안성맞춤입니다.

Solana 프로그램 작성 시작하기

블록체인과 스마트 컨트랙트의 세계를 탐색하는 것은 복잡할 수 있지만, Solana와 같은 플랫폼은 더 효율적이고 확장 가능하며 비용 효율적인 솔루션의 길을 열어가고 있습니다. 이 가이드는 Solana의 독특한 아키텍처, 합의 메커니즘, 개발자가 사용할 수 있는 도구를 강조하며 스마트 컨트랙트 개발에 대한 Solana의 독특한 접근 방식을 포괄적으로 살펴봤습니다.

숙련된 개발자든 블록체인 분야를 막 시작하는 사람이든, Solana는 혁신을 위한 유망한 길을 제공합니다. 블록체인 환경이 진화함에 따라 Solana와 같은 플랫폼은 탈중앙화 애플리케이션과 더 넓은 web3 생태계의 미래를 형성하는 데 있어 틀림없이 중추적인 역할을 할 것입니다. 지금 시작하여, 실험하고, 다음 프로젝트에 Solana의 힘을 활용해 보세요.

Background gradient

블록체인 매직을 만드세요

Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.