신규: Helius가 Light Protocol을 인수했습니다
Solana 스마트 지갑이란
블로그/개발

Solana 스마트 지갑이란? 비교 및 구현 가이드

Crossmint 그로스 담당X의 Dwight TorculasLinkedIn의 Dwight Torculas
읽는 데 8분

이제 개발자는 Solana에서 임베디드 스마트 지갑(계정 추상화 지갑이라고도 함)을 사용할 수 있습니다. 이를 통해 앱은 사용자에게 더 간단한 온보딩과 사용자 경험을 제공할 수 있습니다.

동시에 개발자는 더 높은 유연성, 보안, 규정 준수의 이점을 누릴 수 있습니다. 궁극적으로 더 안전하고 사용자 친화적인 온체인 경험을 구현할 수 있습니다. 

실행 불가능 계정(데이터 계정) 및 기존 임베디드 지갑과 달리 스마트 지갑은 프로그래밍할 수 있습니다. 이를 통해 가스비 후원, 지갑당 여러 서명자 지정, 지출 한도 등 완전히 새로운 기능을 사용할 수 있습니다.

이 글에서는 Solana의 임베디드 스마트 지갑과 다른 지갑 솔루션의 주요 차이점을 알아봅니다.

또한 Solana에서 스마트 지갑이 작동하는 방식과 애플리케이션에 임베디드 스마트 지갑을 구현하는 방법도 살펴봅니다.

스마트 지갑이란?

스마트 지갑은 실행 가능한 코드를 포함하는 실행 가능 프로그램 계정입니다. 하나의 개인 키로 제어되는 단순한 키 쌍인 기존 지갑과 달리, Solana의 스마트 지갑은 특수 로직과 기능을 갖춘 프로그램으로 구현됩니다.  

스마트 지갑의 장점은 무엇인가요?

스마트 지갑은 시드 구문과 그에 따른 분실 위험을 없앱니다. 대신 사용자가 지갑을 제어할 하나 이상의 "서명자" 또는 키를 지정할 수 있습니다.

이러한 유연성 덕분에 생체 인식(예: Face ID, Touch ID 또는 패스키)처럼 더 사용자 친화적인 키 관리 옵션뿐 아니라 고급 보안 체계(예: 다중 서명)나 엔터프라이즈급 제어 기능(예: 서버 측 관리자 키)도 사용할 수 있습니다.

스마트 지갑을 사용하면 개발자가 SOL 또는 USDC와 같은 다른 SPL 토큰으로 수수료를 후원하고 최종 사용자에게 보이지 않도록 간편하게 추상화할 수 있습니다. 이를 통해 수수료 없는 트랜잭션과 더 익숙한 web2형 사용자 경험을 구현할 수 있습니다.  

즉, 트랜잭션 승인 메시지가 없고, 분실할 수 있는 시드나 개인 키가 없으며, 프로그램(스마트 컨트랙트)이 프로그래밍 가능한 보안을 적용하는 앱을 구축할 수 있습니다.

임베디드 스마트 지갑 vs. 임베디드 지갑 vs. 실행 불가능 계정

임베디드 스마트 지갑임베디드 지갑실행 불가능 계정
구현커스텀 로직이 포함된 스마트 컨트랙트앱에 임베드된 비스마트 컨트랙트 계정독립형 애플리케이션 또는 브라우저 확장 프로그램
계정 제어유연함 - 사용자가 하나 또는 여러 서명자(Phantom과 같은 EOA부터 패스키 및 소셜 로그인 지갑까지)를 지정하고 선택적으로 프로그래밍 방식의 규칙을 적용할 수 있음소셜 로그인으로 보호되는 키 쌍(일반적으로 TEE 또는 MPC 클러스터에 있음)사용자가 소유한 키 쌍으로 직접 제어
수탁 모델유연함. 사용자의 자체 수탁, 개발자의 수탁 또는 두 방식을 하나에 결합한 하이브리드 형태로 설정 가능일반적으로 비수탁형이지만 일부 복구 방식은 수탁형으로 전환될 수 있음최종 사용자의 자체 수탁
키 관리여러 인증 방식(MPC, 소셜 복구 등)일반적으로 애플리케이션에서 관리사용자가 관리하는 시드 구문/개인 키
트랜잭션 승인커스텀 검증 로직(다중 서명, 타임록, 한도)애플리케이션이 임베드된 개인 키로 서명사용자가 각 트랜잭션을 명시적으로 승인
수수료 결제수수료 추상화 및 후원을 지원해 USDC 또는 USDT와 같은 다른 SPL 토큰으로 결제 가능사용자가 모든 트랜잭션 수수료를 지불. 모든 앱에서 온램프 필요사용자가 모든 트랜잭션 수수료를 지불
보안 모델오픈 소스 스마트 컨트랙트 코드로 보안을 적용하고 선택적으로 프로그래밍 가능한 제약 조건 사용임베디드 지갑 제공업체의 비공개 소스 코드에 보안이 종속됨클라이언트 측 비공개 소스 코드에 보안이 종속됨
복구 옵션프로그래밍 가능한 복구(소셜, 보호자 키)애플리케이션에서 제공하는 복구 방식시드 구문 기반 복구만 가능
지출 제어프로그래밍 가능한 지출 한도 및 승인 워크플로일부 임베디드 지갑은 서버 측 트랜잭션 정책을 지원(주의 - 잘못 구현하면 수탁형 아키텍처가 될 수 있음)없음
규제 고려 사항유연함 - 수탁 방식을 프로그래밍할 수 있어 변화하는 규제에 맞춰 지갑을 조정 가능해당 지갑 제공업체에 문의규제 검토 수준이 낮음 - 사용자가 제어
엔터프라이즈 기능역할 기반 액세스 제어, 승인 워크플로일부 임베디드 지갑은 제한적인 서버 측 제어 기능 제공없음
공급업체 종속낮음. 스마트 지갑은 오픈 소스 프로그램을 기반으로 함. 주소를 변경하지 않고 인프라 제공업체에서 사용자를 이전할 수 있음높음. 임베디드 지갑을 벗어나는 유일한 방법은 각 사용자가 개인 키를 복구하는 것임. 이는 안전하지 않을 수 있고 사용자가 수동 단계를 수행해야 할 수 있음낮음. 사용자에게 종속됨

대표적인 스마트 지갑 사용 사례

Solana 스마트 지갑은 다음과 같이 유연한 수탁 아키텍처가 필요할 때 유용합니다.

  • 여러 직원이 관리하는 기업 자금 지갑
  • 에이전트 소유자와 에이전트 자체에 각각 키가 필요한 에이전틱 금융 사용 사례의 AI 에이전트 지갑
  • 사용자가 자체 수탁을 유지하면서 은행의 자금 인출(예: 정기 결제)을 허용하는 네오뱅크 및 금융 앱

위임된 서명자의 핵심 특징은 지출 또는 자산군 제한 등을 통해 지갑에 대한 권한 범위를 제한할 수 있다는 점입니다.

Solana에서 스마트 지갑은 구체적으로 어떻게 작동하나요?

Solana의 스마트 지갑은 온체인 프로그램과 오프체인 인프라를 결합해 작동하며, Solana만의 고유한 특성을 갖습니다.

프로그램 기반 아키텍처

실행 불가능 계정(데이터 계정)과 달리 Solana 스마트 지갑(또는 실행 가능 프로그램 계정)은 일반적으로 하나 이상의 계정(PDA)을 제어하는 온체인 프로그램으로 구현됩니다.

트랜잭션 승인

스마트 지갑은 하나의 개인 키 대신 커스텀 인증 로직을 사용합니다.

  • 여러 서명자를 요구할 수 있음(다중 서명 기능)
  • 다양한 인증 방식 지원 가능(키, 생체 인식, 소셜)
  • 타임록과 지출 한도를 프로그래밍 방식으로 적용 가능

계정 위임

사용자는 서로 다른 주소에 특정 권한을 위임할 수 있습니다. 따라서 각 키나 기기가 수행할 수 있는 작업을 더 세밀하게 제어할 수 있습니다.

버전 관리 트랜잭션 지원

스마트 지갑은 Solana의 표준 버전 관리 트랜잭션 형식을 사용합니다.

계정 추상화란?

계정 추상화(AA)를 사용하면 개발자는 단일 키 쌍에 연결된 실행 불가능 계정을 넘어, 커스터마이징 가능한 스마트 컨트랙트 계정을 만들고 더 유연한 사용자 경험을 제공할 수 있습니다.

AA는 커스텀 검증 로직을 지원합니다. 따라서 계정은 블록체인의 기본 규칙에 의존하지 않고 소셜 복구, 다중 서명 요건, 지출 한도 등의 보안 기능을 구현할 수 있습니다. 

AA의 주된 목표는 자체 수탁의 이점을 유지하면서 트랜잭션 수수료와 시드 구문 같은 기술적 장벽을 제거해 사용자가 블록체인 기술을 의식하지 않도록 하는 것입니다.

Solana에서 수수료 없는 트랜잭션은 어떻게 작동하나요?

수수료 없는 트랜잭션에서 스마트 지갑의 핵심 장점은 dApp별 구현이 아닌 계정 수준에서 추상화가 이루어진다는 점입니다. 이를 통해 사용자가 트랜잭션 수수료의 존재조차 인식하지 못할 만큼 매끄러운 경험을 제공할 수 있습니다.

즉, 개발자는 다음 기능을 구현할 수 있습니다.

기본 제공 수수료 추상화

스마트 지갑은 아키텍처에 수수료 후원을 직접 통합할 수 있습니다. 지갑 컨트랙트 자체에서 누가 어떤 상황에 수수료를 지불할지 규칙을 정의할 수 있습니다.

유연한 수수료 통화

사용자의 트랜잭션 수수료를 후원하지 않으려면 사용자가 SOL 또는 USDC, USDT 등의 토큰으로 결제할 수 있습니다.

승인 메커니즘

스마트 지갑은 속도 제한이나 특정 앱으로의 제한 등 후원 트랜잭션을 허용할 시점을 판단하는 커스텀 검증 로직을 구현할 수 있습니다.

Crossmint로 앱에 Solana 스마트 지갑을 추가하는 방법

앱에 스마트 지갑을 통합하는 방법은 다양합니다. 클라이언트 측, 서버 측 또는 AI 에이전트용 이중 키 아키텍처를 사용할 수 있습니다.

아래 튜토리얼에서는 첫 번째 스마트 지갑을 서버 측에 배포하는 방법을 알아봅니다.

사전 준비 사항

먼저 Crossmint Staging Console에서 개발자 계정을 만드세요. 

그런 다음 프로젝트 Settings > General로 이동해 지갑 유형을 “Smart Wallets”로 변경하세요.

Integrate > API Keys로 이동한 후 “Server-side keys” 섹션에서 “Create new key”를 선택하면 API 키를 받을 수 있습니다.

Wallets API 카테고리에서 다음 범위를 선택하세요.

  • wallets.create
  • wallets.read
  • wallets:signatures.create
  • wallets:transactions.create
  • wallets:transactions.read
  • wallets:transactions.sign

다음 단계에서 사용할 키를 저장하려면 “Create server key”를 클릭하세요.

첫 번째 스마트 지갑 만들기

파일(예: createWallet.ts)을 만들고 다음 코드를 입력하세요.

코드
const apiKey = "YOUR_API_KEY";
const walletType = "solana-smart-wallet";
const adminSigner = {
    // In production, you may want to use an MPC solution, like
    // crossmint-managed MPC keys
    type: "solana-keypair",
};

async function createWallet() {
    const response = await fetch("https://staging.crossmint.com/api/2022-06-09/wallets", {
        method: "POST",
        headers: {
            "X-API-KEY": apiKey,
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            type: walletType,
            config: {
                adminSigner,
            },
        }),
    });

    return await response.json();
}

createWallet()
    .then((json) => console.log(json))
    .catch((err) => console.error(`error: ${err}`));

실행하기 전에 이전 단계에서 받은 키를 YOUR_API_KEY에 입력하세요.

이제 스크립트를 실행하세요.

코드
npx tsx createWallet.ts

API는 새 지갑의 세부 정보가 포함된 응답을 반환합니다.

다음 단계에서 사용할 수 있도록 지갑 주소를 저장하세요.

지갑과 상호작용하기

이제 서버에 지갑을 설정했으므로 지갑과 상호작용해 보겠습니다.

먼저 Crossmint Testnet USDXM Faucet을 방문하고 위 단계에서 얻은 지갑 주소를 붙여 넣어 Solana 테스트 USDXM을 받으세요.

토큰을 받았으니 이제 지갑 잔액을 확인해 보겠습니다(checkBalance.ts).

코드
const apiKey = "YOUR_API_KEY";
const walletAddress = "YOUR_WALLET_ADDRESS"; // From previous step
const tokens = ["sol", "usdc", "usdxm"]; // Tokens to fetch balances for
const chains = ["solana"]; // Chains to query balances from

async function getWalletBalance() {
    const url = new URL(`https://staging.crossmint.com/api/v1-alpha2/wallets/${walletAddress}/balances`);
    url.search = new URLSearchParams({
        tokens: tokens.join(','),
        chains: chains.join(',')
    }).toString();

    const response = await fetch(url, {
        method: "GET",
        headers: {
            "X-API-KEY": apiKey,
            "Content-Type": "application/json",
        },
    });

    return await response.json();
}

getWalletBalance()
    .then((json) => console.log(json))
    .catch((err) => console.error(`error: ${err}`));

축하합니다. 이제 서버에 스마트 지갑을 배포했습니다!

여기에서 문서를 살펴보고 첫 트랜잭션을 만드는 방법, 위임된 서명자를 추가하는 방법 등을 알아보세요.

결론

스마트 지갑은 온보딩, 사용자 경험, 보안, 규정 준수를 개선하는 차세대 Solana 앱을 열어갈 것입니다.

Crossmint는 지갑, 결제, 토큰화를 위한 간단한 API와 노코드 도구를 통해 IP, 로열티 프로그램, AI 에이전트에 이르는 다양한 사용 사례를 지원하게 되어 기쁩니다. 이러한 솔루션은 수백만 명의 사용자까지 안정적으로 확장할 수 있으며, 이제 Solana 임베디드 스마트 지갑 출시를 통해 핀테크와 AI 에이전트 앱도 지원합니다.

프로젝트에 Solana 스마트 지갑을 구현하는 방법을 더 자세히 알아보려면 문의하세요. 기꺼이 도와드리겠습니다.

추가 자료

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요

확대 이미지