신규: Helius가 Light Protocol을 인수했습니다
Token Extensions란 무엇인가요?
블로그/연구

Token Extensions란 무엇인가요?

개발자 경험 엔지니어X의 Owen VenterLinkedIn의 Owen Venter
읽는 데 13분

지난 1년간 Solana 생태계는 빠르게 발전했으며 새롭고 흥미로운 기술이 대거 출시되고 있습니다. Solana는 매우 빠른 처리 속도와 낮은 트랜잭션 수수료로 잘 알려져 있지만, 이런 강점에도 개선할 여지는 늘 있습니다. Token Extensions는 Solana의 기존 토큰 기능을 강화하도록 설계된 새로운 토큰 프로그램입니다. Token Extensions 표준이 Solana 생태계에 무엇을 가져올지 살펴보겠습니다.

Solana의 현재 토큰 프로그램

Solana의 네이티브 $SOL 토큰이 아닌 모든 토큰은 SPL 토큰으로 간주됩니다. 여기에는 대체 가능 토큰($BONK 같은 토큰)과 대체 불가능 토큰(NFT)이 모두 포함됩니다. 토큰 프로그램은 대체 가능 토큰과 대체 불가능 토큰을 생성하고 다루는 데 필요한 공통 기능을 정의하는 프로그램입니다. 개발자와 최종 사용자에게 익숙한 여러 기능을 제공합니다. 토큰 발행, 전송, 소각 등이 이에 해당합니다. 또한 토큰 업데이트와 동결 같은 기능도 제공합니다. 토큰 계정을 동결하면 해제될 때까지 계정 상태가 변경되지 않습니다.

Token Extensions란 무엇이며 왜 필요한가요?

Token Extensions는 Solana 토큰 프로그램의 새롭고 개선된 버전이라고 생각하면 됩니다. 대체 가능 토큰과 대체 불가능 토큰을 모두 처리할 수 있습니다. 기존 토큰 프로그램의 모든 기능을 유지하면서 Solana의 토큰 기능을 개선하도록 설계된 유용한 새 기능도 제공합니다. Token2022의 핵심인 이 새로운 기능은 확장 기능 형태로 제공됩니다.

그렇다면 Token Extensions가 왜 필요할까요? Solana가 발전할수록 더 정교하고 유연한 토큰 기능에 대한 수요도 커집니다. 현재 Solana의 토큰 프로그램은 간단한 기능 세트로 대체 가능 토큰과 대체 불가능 토큰의 기본 요구 사항을 충족해 왔지만, 이런 단순함은 혁신을 저해할 수 있는 한계를 만듭니다. 새로운 아이디어를 구현하려는 개발자는 필요한 기능을 추가하기 위해 토큰 프로그램을 포크해야 하는 경우가 많았고, 이는 폭넓은 도입을 어렵게 합니다. Solana의 프로그래밍 모델에서는 트랜잭션에 프로그램과 계정을 모두 포함해야 하므로 여러 토큰 프로그램이 관련된 트랜잭션을 만들기가 복잡합니다. 또한 지갑과 온체인 프로그램은 지원하기로 한 모든 토큰 프로그램을 신뢰해야 하므로 위험할 수 있습니다. 변화하는 환경에 대응하기 위해 Solana는 생태계 내 토큰의 기능을 확장하도록 설계된 추가 기능과 개선 사항 모음인 Token2022를 선보였습니다.

확장 기능 소개: 진화를 향한 한 걸음

이 새로운 표준의 판도를 바꾸는 역량은 다양한 요구를 충족하기 위해 도입된 새로운 필드 모음인 확장 기능에 있습니다. 간단히 말해 Token Extensions의 확장 기능은 토큰의 역량과 활용도를 높이기 위해 추가할 수 있는 기능입니다. 토큰 생성자는 확장 기능을 사용해 특정 요구 사항이나 목표에 맞춰 토큰의 동작과 특성을 사용자 지정할 수 있습니다. 토큰을 만들 때 원하는 수의 확장 기능을 선택해 사용할 수 있습니다. 주요 확장 기능과 Solana 생태계에 미칠 잠재적 영향을 살펴보겠습니다. 이 확장 기능이 모두 현재 제공되는 것은 아닙니다.

민트 확장 기능

각 민트 확장 기능은 다음과 같습니다.

1. 전송 수수료

기존 토큰 프로그램은 전송 수수료를 지원하지 않지만, Token Extensions 표준에서는 프로토콜 수준에서 전송 수수료를 구성할 수 있습니다. 이 메커니즘은 트랜잭션에 새로운 차원의 재무 제어 기능을 더합니다.

2. 전송 훅

전송 훅 확장 기능은 토큰 생성자가 토큰 전송을 한층 더 세밀하게 제어할 수 있게 합니다. 이는 NFT 로열티와 관련된 문제를 관리할 때 특히 중요합니다. 전송 훅 확장 기능을 사용하면 토큰 생성자는 토큰이 전송될 때마다 사용할 사용자 지정 프로그램을 만들 수 있습니다. 토큰 전송이 시작되면 토큰이 이 사용자 지정 프로그램과 통신하며, 이후 필요한 작업을 실행할 수 있습니다.

3. 민트 닫기

Token Extensions는 이전에는 불가능했던 민트 계정 닫기를 지정한 주소에서 수행할 수 있게 해 토큰 프로그램의 중요한 공백을 해소합니다. 민트를 초기화하기 전에 MintCloseAuthority 확장 기능을 초기화하면 됩니다. 이를 통해 권한 지갑이 아닌 주체도 토큰의 민트를 닫을 수 있습니다.

4. 이자 발생 토큰

Token Extensions는 누적된 이자를 반영해 토큰의 UI 표시 수량을 다르게 나타낼 수 있는 InterestBearingMint 확장 기능을 도입합니다. 이 기능을 사용하면 토큰이 사실상 '이자를 얻을' 수 있어 오래 보유할수록 가치가 높아집니다.

5. 전송 불가 토큰(소울바운드 토큰)

NonTransferable 민트 확장 기능을 사용하면 지갑에서 이동할 수 없는 "소울바운드" 토큰을 만들 수 있습니다. 특별한 성과나 보상에 적합하며, 다른 사람에게 보낼 수 없으므로 이벤트 티켓으로도 유용합니다.

6. 기밀 전송

Token Extensions는 Confidential Transfers라는 새로운 기밀 토큰 확장 기능을 도입합니다. 영지식 증명을 활용해 SPL 토큰의 잔액과 전송 금액을 암호화하는 개인정보 보호 기능입니다.

이 확장 기능의 전반적인 목표는 익명성이 아닌 기밀성에 집중해 사용자 개인정보 보호를 강화하는 것입니다. 잔액에 값을 더하거나 뺄 수 있어야 하므로 Token Extensions 표준에는 암호화된 상태에서 이러한 수학 연산을 수행할 수 있는 암호화 체계가 필요합니다. 즉, 준동형 암호화가 필요합니다. 준동형 암호화는 데이터를 실제로 복호화하지 않고도 암호화된 데이터에 특정 유형의 연산을 수행할 수 있는 특별한 암호화 체계입니다. 따라서 비공개 연산으로 얻은 암호화된 결과를 복호화하면 평문에 같은 수학 연산을 적용한 결과와 동일합니다. Confidential Transfers는 “Twisted ElGamal Encryption”을 사용해 암호문에서 비공개 수학 연산을 수행합니다.

더 자세히 알아보고 싶다면 Twisted ElGamal Encryption을 참고하세요. 표준 ElGamal 암호화 체계의 간단한 변형으로, 암호문을 암호화된 메시지의 Pedersen 커밋먼트와 복호화 핸들로 나누어 암호문에서 비공개 수학 연산을 수행할 수 있게 합니다.

Confidential Transfers는 Sigma Protocols로 검증됩니다. 이는 한 당사자(증명자)가 비밀 자체를 공개하지 않고도 자신이 비밀을 알고 있음을 다른 당사자(검증자)에게 증명할 수 있는 특정 유형의 영지식 증명입니다. 확장 기능이 제공하는 여러 명령어에는 이러한 Sigma Protocols가 필요합니다. 각 증명을 살펴보겠습니다.

(공개 키) 유효성 증명

  • Twisted ElGamal 공개 키의 형식이 올바른지 검증합니다
  • 보안 채팅을 시작하기 전에 상대방의 “디지털 신분증”을 확인하는 것과 같습니다
  • ConfigureAccount 명령어에 필요합니다

(암호문) 유효성 증명

  • 암호화된 메시지가 올바른 형식인지 확인합니다
  • 밀봉된 상자를 받는 것과 같습니다. 상자가 여전히 밀봉되어 있으므로 누군가 손대지 않았음을 알 수 있습니다
  • Withdraw, Transfer, TransferWithFee 명령어에 필요합니다

잔액 0 증명

  • Twisted ElGamal 암호문이 숫자 0을 암호화했음을 증명합니다
  • 은행 앱을 열어 확인하지 않고도 계좌 잔액이 0인지 확인하는 방법과 같습니다
  • EmptyAccount 명령어에 필요합니다

동등성 증명

  • 두 ElGamal 암호문 사이 또는 ElGamal 암호문과 Pedersen 커밋먼트 사이의 두 가지 동등성을 확인합니다
  • 도구가 가득한 잠긴 창고 두 개를 열지 않고도 두 창고에 정확히 같은 도구가 있음을 증명하는 것과 같습니다
  • Transfer, TransferWithFee, WithdrawWithheldTokensFromMint, WithdrawWithheldTokensFromAccounts 명령어에 필요합니다

수수료 Sigma 증명

  • 커밋된 전송 수수료가 정확함을 증명합니다
  • 실제 납부 금액을 공개하지 않고도 소포의 관세를 납부했다고 FedEx에 확인해 주는 것과 같습니다
  • TransferWithFee 명령어에 필요합니다

범위 증명

  • 암호화된 숫자가 특정 범위 안에 있는지 확인합니다
  • 어떤 사람의 실제 키를 공개하지 않은 채 추측한 키가 정확한 특정 범위 안에 있음을 증명하는 것과 같습니다
  • Solana는 이러한 증명에 Bulletproofs를 사용합니다. 자세한 내용은 이 학술 논문과 dalek 구현에서 확인할 수 있습니다

요약: 이러한 영지식 증명은 한 당사자가 비밀을 직접 밝히지 않고도 다른 당사자가 검증할 수 있는 비밀을 알고 있음을 확인하는 데 사용됩니다. 여러 유형의 증명은 암호화를 통해 완전한 개인정보 보호를 유지하면서 토큰 잔액과 전송이 수학적으로 의도한 대로 작동하도록 보장합니다.

이 기밀 시스템에서는 복호화 키가 있는 계정 소유자만 잔액을 볼 수 있습니다. 하지만 감사나 규제 준수를 위해 외부 제3자가 잔액을 검토해야 할 수도 있습니다. 기밀 토큰 확장 기능은 Global Auditor 시스템을 통해 이를 지원합니다. 이 시스템에서는 각 계정에 별도의 복호화 키를 둘 수 있으므로 보유자가 특정 계정에 대한 읽기 권한을 선택적으로 제공할 수 있습니다. 자산을 발행하는 민트 또는 주체에는 전역 “감사자 암호화 키”를 선택적으로 포함할 수 있는 특별한 데이터 구조가 있습니다. 코드는 다음과 같습니다.

코드
Transfer {
  amount_sender: PKE::encrypt(pke_pubkey_sender, 10),
  amount_receiver: PKE::encrypt(pke_pubkey_receiver, 10),
  amount_auditor: PKE::encrypt(pke_pubkey_auditor, 10),
  range_proof: RangeProof,
  equality_proof: EqualityProof,
  ...
}

amount_auditor 매개변수는 감사자의 공개 암호화 키로 암호화된 전송 금액입니다. 감사자의 비밀 키를 가진 사람은 누구나 amount_auditor을 복호화해 특정 민트의 트랜잭션 금액을 감사할 수 있습니다.

보안에 관심이 많다면 이 설계의 잠재적 결함을 발견했을 수 있습니다. Alice가 암호화된 잔액을 기준으로 증명을 생성한다고 가정해 보겠습니다. 그런데 동시에 Bob이 Alice에게 토큰을 보내고 Bob의 트랜잭션이 먼저 처리되면, Alice가 생성한 증명에는 새로 업데이트된 계정 상태가 반영되지 않으므로 Alice의 트랜잭션이 거부됩니다. 프런트 러닝이라고 하는 이런 공격에서 Bob이 Alice의 계정으로 보내는 전송을 네트워크에 계속 쏟아내면 Alice의 계정을 사용할 수 없게 만들 수 있습니다. 이러한 공격을 방지하기 위해 계정의 암호화된 잔액은 pending 잔액과 available 잔액으로 나뉩니다.

코드
let ct_pending = PKE::encrypt(pke_pubkey, 10);
let ct_available = PKE::encryption(pke_pubkey, 50);

Account {
    mint: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,
    owner: 5vBrLAPeMjJr9UfssGbjUaBmWtrXTg2vZuMN6L4c8HE6,
    encryption_key: mpbpvs1LksLmdMhCEzyu5UEWEb3dsRPbB5,
    pending_balance: ct_pending,
    account_balance: ct_available,
    ...
}

외부로 나가는 자금은 사용 가능한 잔액에서 차감되고, 들어오는 자금은 대기 중인 잔액에 추가됩니다.

Confidential Transfers는 아직 제공되지 않습니다. Solana 문서의 소개 및 빠른 시작 가이드 하위 섹션도 아직 개발 중입니다. 하지만 solana-program-library 저장소의 이 GitHub 이슈에서 Confidential Transfers의 남은 작업을 추적할 수 있습니다. 문서에는 프로토콜 심층 분석이 있지만, 확장 기능을 사용하기 위해 이 내용을 이해할 필요는 없습니다. 모든 기능이 제공되기 시작하면 위 문단의 쉬운 Confidential Transfers 요약만으로도 충분히 시작할 수 있습니다.

계정 확장 기능

각 계정 확장 기능은 다음과 같습니다.

1. 수신 전송에 메모 필수

Token Extensions에는 모든 수신 전송에 메모를 의무화하는 기능이 포함되어 있습니다. 메모는 기본적으로 짧은 온체인 메시지입니다. 선물과 함께 쪽지를 받아 누가 왜 보냈는지 알 수 있는 것과 비슷합니다.

2. 변경 불가능한 소유권

ImmutableOwner 확장 기능은 계정 소유권을 다른 주체에게 재할당할 수 없게 해 보안을 강화합니다. 이를 통해 토큰 트랜잭션의 안전성이 높아집니다. 더 잘 이해하려면 표준 토큰 프로그램에서 토큰이 어떻게 보관되는지 살펴봐야 합니다. 일반적으로 지갑에 토큰을 보낼 때 첫 단계는 수신자의 지갑 안에 해당 토큰을 보관할 토큰 계정을 만드는 것입니다. 이 계정은 토큰 민트 주소와 수신자의 지갑 주소를 조합해 만듭니다. 여기까지는 문제가 없지만, 계정을 만든 후 소유권을 다른 사람에게 이전할 수 있다는 문제가 있습니다. Token2022의 Immutable Owner 확장 기능을 사용하면 더 이상 불가능합니다.

3. 기본 계정 상태

DefaultAccountState 확장 기능을 사용하면 민트 생성자가 모든 새 토큰 계정의 기본 상태를 동결로 설정해 토큰 사용을 제한할 수 있습니다. 토큰 배포와 사용에 대한 제어 계층을 하나 더 제공합니다. 즉, 토큰을 받을 수는 있지만 토큰 생성자가 허용하기 전까지는 아무 작업도 할 수 없습니다.

4. 영구 위임자

Token Extensions를 사용하면 토큰에 영구 계정 위임자를 지정할 수 있습니다. 기본적으로 민트의 토큰을 항상 관리할 권한이 있는 사람, 즉 위임자를 지정하는 기능입니다. 위임자는 토큰 전송이나 소각 같은 작업을 수행할 수 있습니다. 이 확장 기능을 사용하면 권한 보유자는 해당 민트의 모든 계정에 대해 무제한 위임 권한을 갖습니다. 이 위임자나 담당자는 누구의 지갑에서든 토큰을 전송하거나 소각할 수 있으므로 매우 위험할 수 있습니다.

Token Extensions와 Ethereum 및 Binance Smart Chain(BSC) 비교

Ethereum과 Binance Smart Chain(BSC)은 이미 DeFi 분야에서 큰 진전을 이뤘으며, 해당 체인의 토큰에서 Token Extensions의 일부 기능을 확인할 수 있습니다.

한 가지 예는 BSC의 SafeMoon입니다. 각 트랜잭션에 10%의 수수료를 도입하고, 이 중 5%를 다른 SafeMoon 보유자에게 재분배합니다. 이는 보유자의 장기 보유를 장려합니다. 영지식 증명을 사용하는 기밀 전송 개념도 새로운 것은 아닙니다. Ethereum에서는 Aztec Protocol 같은 프로젝트가 비공개 트랜잭션을 연구했습니다.

Solana가 이러한 기능을 제공하는 데 다소 늦었지만, 더 빠른 속도와 낮은 트랜잭션 비용은 Token Extensions가 성장하기 좋은 환경을 제공합니다. 이를 통해 Ethereum과 BSC보다 경쟁 우위를 확보할 수 있습니다.

Token Extensions의 초기 도입 사례

Token Extensions를 최대한 활용하려면 개발자, dApp, 지갑이 새로운 기능에 맞춰야 합니다. 새로운 프로그램의 초기 도입 사례는 다음과 같습니다.

$BERN / BonkEarn

$BONK 커뮤니티가 만든 $BERN은 Token Extensions 프로그램을 기반으로 구축된 최초의 토큰 중 하나입니다. 현재 $BERN은 전송 수수료 확장 기능을 사용해 모든 전송에 6.9%의 수수료를 부과합니다. $BERN 팀은 이 수수료를 $BERN 및 $BONK 보유자 모두에게 보상을 제공하는 데 사용합니다.

전체 내역:

  • 5%는 $BERN 보유자 보상에 사용할 “Bernzy Bonus Fee”로 배정
  • 1%는 $BONK 매입 및 소각에 사용
  • 0.5%는 $BERN 소각에 사용
  • 0.3%는 추가 수수료 지불과 토큰 유동성 풀 확충을 위한 개발자 기금에 배정
  • 0.1%는 $BONK DAO에 배정

탈중앙화 거래소

FluxBeam 은 현재 Token Extensions 프로그램으로 만든 토큰을 지원하는 Solana 기반 DEX입니다.

지갑

인기 지갑 확장 프로그램인 Backpack은 이미 Token Extensions 지원을 추가했으며, Phantom도 곧 관련 기능을 제공할 예정입니다.

도구

Token Extensions 프로그램으로 자체 토큰을 발행하는 도구가 이제 FluxBeam에서 제공됩니다.

RugCheck 는 Solana 토큰 시장과 다양한 토큰을 분석하는 도구로, 이미 Token 2022로 구축된 토큰을 확인할 수 있습니다.

미래를 향한 도약

Token Extensions의 도입은 Solana의 web3 여정에서 큰 도약입니다. 기존 기능의 역량을 강화하면서 다양한 새 기능을 제공합니다. 혁신적인 확장 기능은 토큰 생성자에게 더 큰 제어력과 유연성을 제공할 뿐만 아니라 DeFi 분야에서 새로운 가능성을 엽니다. 다른 블록체인이 이미 유사한 기능을 제공하고 있지만, Solana의 속도와 경제성에 Token2022의 기능이 더해지면서 암호화폐 시장의 강력한 경쟁자가 탄생했습니다. 초기 사용자와 폭넓은 커뮤니티의 지원이 계속 확대됨에 따라 Token2022는 Solana 생태계를 한층 더 발전시킬 준비를 마쳤습니다.

Helius 구독하기

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