본문으로 건너뛰기
0%

Solana의 Cross-Program Invocation이란?

작성자 Tau

2023년 1월 25일에 게시됨4분 읽기

Solana에서 런타임 cross-program invocation은 더 효율적이고 유연한 프로그램 개발을 가능하게 하며, 이는 플랫폼의 핵심 기능입니다. Cross Program Invocations (CPIs)는 Solana 블록체인 상의 프로그램이 다른 프로그램을 호출하여 그 코드를 실행할 수 있는 능력을 말합니다.

이 글에서는 Solana의 cross program invocations이 무엇인지, 구체적인 사용 사례는 무엇인지, 그리고 이를 Solana 프로그램에서 어떻게 사용할 수 있는지 설명합니다.

Cross-program invocations (cpis)이란 무엇인가?

런타임 cross-program invocation에서는 Solana의 한 프로그램이 다른 프로그램을 호출하고 데이터를 전달할 수 있으며, 이를 통해 복잡하고 모듈화된 스마트 컨트랙트 시스템을 구축할 수 있습니다.

Solana 런타임은 이러한 cross-program invocations를 실행하기 위한 안전하고 탈중앙화된 환경을 제공합니다. Solana의 런타임은 호출된 프로그램이 올바르게 실행되고, 그 결과가 검증 가능한 방식으로 호출한 프로그램에 반환되도록 보장합니다. 이를 통해 Solana 블록체인에서 신뢰가 필요 없는(trustless) 탈중앙화 애플리케이션을 만들 수 있습니다.

Cross-program invocations의 사용 사례는 무엇인가?

Cross-program invocations는 Solana 블록체인에서 다중 서명 트랜잭션, 토큰 전송, 상태 채널, 간 상호운용성, 새로운 트랜잭션 유형, 공통 기능 공유 등 다양한 사용 사례를 가능하게 합니다.

1. 다중 서명(Multisig) 트랜잭션

다중 서명 프로그램은 블록체인에서 트랜잭션이 실행되기 전에 여러 당사자가 서명해야 하는 프로그램입니다. Cross-program invocations를 사용하면, 다른 프로그램이 multisig 프로그램을 호출하여 트랜잭션이 처리되기 전에 필요한 서명 수가 충족되었는지 확인할 수 있습니다.

2. 토큰 전송

Solana에는 토큰과 관련된 모든 트랜잭션을 위한 토큰 프로그램 및 계정이 있습니다. 이러한 토큰 프로그램은 다른 프로그램에 의해 호출되어 한 계정에서 다른 계정으로 토큰을 전송할 수 있으며, 이를 통해 탈중앙화 거래소와 같은 애플리케이션을 만들 수 있습니다.

3. 상태 채널

Solana 프로그램은 온체인에서 정산되는 오프체인 트랜잭션을 가능하게 하는 상태 채널을 구현하는 데 사용할 수 있습니다. 예를 들어, 프로그램은 간단한 블록체인 게임을 위한 상태 채널을 구현하는 데 사용될 수 있으며, 플레이어가 움직일 때 다른 프로그램이 상태 프로그램을 호출한 후 최종 상태를 온체인에서 정산합니다.

4. 앱 간 상호운용성

Cross-program invocations는 앱들이 서로 통신하고 데이터를 공유할 수 있게 하여, Solana 네트워크 상의 다양한 앱 간에 더 원활한 상호작용을 가능하게 합니다.

5. 공통 기능 공유

앱들은 cross-program invocations를 사용하여 암호화 함수나 데이터 저장소와 같은 공통 기능을 공유할 수 있습니다. 이를 통해 각 dApp이 구현해야 하는 코드의 양을 줄일 수 있고, Solana 상에서 앱을 구축하기가 더 쉬워집니다.

6. 새로운 트랜잭션 유형 지원

Cross-program invocations는 앱 간의 새로운 유형의 상호작용을 가능하게 합니다. 예를 들어, 하나의 dApp이 다른 dApp으로부터 데이터를 요청하거나 다른 dApp에서 작업을 트리거하는 것이 가능해집니다.

탈중앙화 거래소처럼 여러 프로그램이 관련된 복잡한 비즈니스 로직을 적용하고 싶거나, 여러 프로그램의 서명이 필요한 multi-sig 지갑을 만들고 싶거나, 조합 가능하고 재사용 가능한 프로그램으로 확장성 있게 구축하고 싶다면, cross-program invocations를 구현하는 것이 가장 좋은 접근 방식입니다.

Cross-program invocations의 예시는 무엇인가?

Cross-program invocations는 multi-sig 지갑, NFT 마켓플레이스, 모듈형 프로그램 등 다양한 방식으로 사용될 수 있습니다.

1. Solana multisig 지갑

Cross-program invocations를 사용하면 트랜잭션을 실행하는 데 두 개의 서명이 필요한 Snowflake와 같은 multi-sig 지갑을 만들 수 있습니다. 이는 각 서명을 위한 프로그램 두 개를 만들어 구현할 수 있습니다.

트랜잭션이 시작되면, 첫 번째 프로그램이 1번째 서명을 확인하고, 두 번째 프로그램을 호출하여 2번째 서명을 확인하며, 두 서명이 모두 유효하면 트랜잭션이 실행됩니다.

2. Solana NFT 마켓플레이스

Cross-program invocations는 대체 불가능 토큰(NFT)을 사고파는 Solana NFT 마켓플레이스 개발에도 도움이 됩니다. 개발자는 마켓플레이스를 관리하는 프로그램 하나와, 마켓플레이스에서 거래되는 각 NFT 유형별 별도의 프로그램을 만들어 이를 구현할 수 있습니다. 마켓플레이스 프로그램은 해당 NFT 프로그램을 호출하여 NFT의 고유성과 소유권을 확인한 후, 모든 것이 유효하면 거래를 실행합니다.

3. 모듈형 프로그램

Cross-program invocations는 여러 단계와 상호작용이 포함된 복잡한 프로그램을 만드는 데 직접적으로 도움이 됩니다. 이는 컨트랙트의 특정 단계나 측면을 각각 처리하는 여러 프로그램을 만들어 구현합니다. 그러면 메인 컨트랙트 프로그램이 필요에 따라 다른 프로그램들을 호출하여 컨트랙트의 여러 단계를 실행할 수 있습니다.

Cross-program invocations 실행 방법

Solana에서 런타임 cross-program invocation을 구축하려면 작성, 컴파일, 배포, 호출의 단계를 거쳐야 합니다.

1단계: Solana 프로그램 작성

먼저, 서로 호출할 수 있게 하려는 프로그램을 작성해야 합니다. 이러한 프로그램은 native Rust로 Anchor 프레임워크를 사용하여 작성하거나, Seahorse 프레임워크를 사용하여 Python으로 작성할 수 있습니다.

2단계: 프로그램을 wasm으로 컴파일

프로그램을 작성한 후에는 적절한 컴파일러를 사용하여 Wasm으로 컴파일해야 합니다. 그러면 Solana 런타임이 실행할 수 있는 Wasm 바이너리가 생성됩니다.

3단계: 프로그램을 Solana에 배포

다음으로, 컴파일된 Wasm 바이너리를 Solana 블록체인에 배포해야 합니다. 이는 Solana 소프트웨어 개발 키트 (SDK)의 일부로 제공되는 solana-deploy 커맨드라인 도구를 사용하여 수행할 수 있습니다.

4단계: 프로그램을 호출하는 트랜잭션 작성

프로그램을 배포한 후에는 Solana SDK를 사용하여 프로그램 중 하나를 호출하고 데이터를 전달하는 트랜잭션을 작성할 수 있습니다. 이 트랜잭션은 Solana 블록체인에 제출되어 런타임 환경에 의해 검증되고 실행됩니다.

호출된 프로그램이 실행되면, 다른 프로그램을 호출하는 것을 포함하여 Wasm 런타임 내에서 가능한 모든 연산을 수행할 수 있습니다. 연산 결과는 호출한 프로그램에 반환되어 Solana 블록체인에 저장될 수 있습니다.

전반적으로, Solana에서 런타임 cross-program invocations를 구축하는 것은 프로그램을 작성하고, Wasm으로 컴파일하고, 블록체인에 배포하고, Solana SDK를 사용하여 프로그램 간에 호출하고 데이터를 전달하는 과정을 포함합니다. 이를 통해 Solana 플랫폼에서 복잡하고 모듈화된 스마트 컨트랙트 시스템을 만들 수 있습니다.

참고: Solana 프로그램 임대료는 존재하는 프로그램 수에 따라 달라집니다.

간단한 구현 예시

예를 들어, Solana에 _program1_과 _program2_라는 두 개의 프로그램이 있고, _program2_에서 _program1_의 process_data 함수를 호출하고 싶다고 가정해봅시다.

다음과 같이 할 수 있습니다:

_program1_에서, 입력 데이터를 매개변수로 받아 출력 데이터를 반환하는 새로운 함수 _process_data_interface_를 추가합니다:

_program2_에서, _program1_의 _process_data_interface_를 호출하여 입력 데이터를 전달하고 출력 데이터를 받는 코드를 추가합니다:

그런 다음 필요에 따라 _program2_에서 출력 데이터를 사용할 수 있습니다.

참고: 이는 간단한 예시일 뿐이며, 실제 구현은 작업 중인 특정 프로그램과 함수에 따라 달라집니다. 오류 처리, 적절한 권한 부여 등을 위해 추가 코드가 필요할 수 있습니다.

Solana 런타임 cross program invocations 시작하기

Solana에는 런타임 Cross Program Invocations라는 핵심 기능이 있으며, 이를 통해 플랫폼에서 실행되는 스마트 컨트랙트가 다른 프로그램을 안전하고 탈중앙화된 방식으로 호출할 수 있습니다. Solana에서는 모든 프로그램이 블록체인 상에 고유한 주소를 가지며, CPI는 실행하고자 하는 프로그램의 주소를 호출함으로써 이루어집니다. 이를 통해 프로그램들이 서로 상호작용할 수 있으며, Solana 블록체인에서 복잡한 프로그램 기능이 가능해집니다.

전반적으로, Solana 런타임 CPI는 복잡하고 강력한 탈중앙화 애플리케이션을 만들 수 있게 해주므로, Solana 개발자 역량의 중요한 부분입니다.

Solana 개발과 CPI로의 여정을 시작하고 싶다면, 지금 Alchemy 계정에 가입하세요!

Background gradient

블록체인 매직을 만드세요

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