솔라나의 Action & Blinks: URL 하나로 가능한 온체인 활동

Ayun Kang
CURG
Published in
16 min readAug 7, 2024

강아윤 | researcher of CURG | lucy121399@gmail.com

목차

  1. 솔라나 Actions & Blinks란?
  2. Blinks(Blockchain Links)의 작동원리
  3. Actions & Blinks가 솔라나 생태계에 미치는 영향
  4. 마치며

솔라나 Actions & Blinks란?

Actions & Blinks는 올해 6월, 솔라나 재단과 Dialect가 협력하여 새로 개발한 기능으로 온체인 트랜잭션의 처리를 복잡한 과정 없이 링크 하나로 가능케 한다. URL은 우리가 인터넷 환경에서 가장 쉽게 접하는 소통 수단이라고 할 수 있다. 특정 콘텐츠를 타인에게 공유하는 수단이기도 하며 웹사이트 자체의 접속 수단 등으로 널리 활용되고 있다.

솔라나의 Blinks는 Blockchain Links의 약어로, 우리가 평소 사용하던 URL을 통해 트랜잭션을 처리하도록 하는 기술이라고 보면 된다. Actions와 Blinks에 대해 각각 살펴보자.

Solana Actions는 클라이언트가 온체인 및 오프체인에서 발생하는 비즈니스 로직을 미리 보거나 서명 또는 전송할 수 있게 해주는 API를 말한다. 이때 QR코드, 버튼, 위젯, URL(Blink) 등 다양한 방식으로 액션을 inititate 할 수 있다. 액션을 통해 개발자들은 솔라나 생태계 전반에서 수행할 수 있는 기능들을 자신의 환경에 쉽게 통합할 수 있다. 다른 앱이나 웹 페이지로 이동하지 않고도 블록체인 트랜잭션을 수행할 수 있게 되는 것이다.

한편, Blockchain links(Blinks)는 솔라나 액션과 소통하는 한 가지 방식 중 하나로, Action API를 분석하고 이를 바탕으로 사용자 인터페이스를 구성하는 클라이언트 애플리케이션을 말한다. Blinks는 Action URL을 포함하는 특별한 형식의 URL을 사용한다. Blinks는 사용자들이 URL에서 바로 트랜잭션을 실행할 수 있게 하여, 따로 디앱을 이용하지 않아도 텍스트로 결제를 요청하고 채팅방에서 투표를 진행하거나 SNS에서 NFT를 구매하는 등 URL을 표시할 수 있는 모든 웹 환경에서 온체인 상호작용이 가능해진다.

Blinks URL은 다음과 같은 구조로 이루어 진다.

https://example.domain/?action=<action_url>

Blink URL은 반드시 ‘action’이라는 쿼리 매개변수를 포함해야 하며, 이 매개변수의 값은 URL 인코딩된 Action URL이어야 한다. 이 값은 다른 프로토콜 매개변수와 충돌하지 않도록 반드시 URL 인코딩되어야 한다.

Blinks(Blockchain Links)의 작동원리

출처 — 솔라나 공식 홈페이지 (https://solana.com/docs/advanced/actions)

위 그림을 통해 Action과 Blink의 작동 과정 및 흐름을 확인할 수 있다.

우선 참여 주체인 User, Action Client, Action Provider, Solana Blockchain 각각에 대하여 살펴보자.

Action, Blink 참여 주체

  • User — 실제로 액션을 수행하고자 하는 최종 사용자를 의미한다. 예를 들어, Alice가 Bob에게 SOL을 전송하고 싶다면 이때 Alice가 바로 액션을 개시하는 User에 해당된다.
  • Action Client — 사용자 인터페이스를 제공하고 Action Provider와 상호작용하는 애플리케이션을 의미한다. 웹사이트, 모바일 지갑, 채팅 봇 등이 될 수 있다. 예를 들어, Phantom 지갑 앱이 Action Client에 해당된다.
  • Action Provider — 실제 액션을 정의하고 필요한 트랜잭션을 생성하는 서버이다. API 엔드포인트를 제공하여 액션에 대한 메타데이터와 서명 가능한 트랜잭션을 반환한다.
  • Solana Blockchain — 최종적으로 트랜잭션이 실행되는 Solana 블록체인 네트워크이다.

Solana Actions의 실행 과정은 사용자가 Action을 선택하면서부터 시작된다. 이때 Action은 NFT 구매, 토큰 스왑, 스테이킹, 거버넌스 투표 등 말 그대로 블록체인과 상호작용하는 특정 행동을 의미한다. 사용자가 Action Client(예: 지갑 앱)에서 특정 액션을 선택하면, 클라이언트는 즉시 Action Provider에게 GET 요청을 보내 해당 액션에 대한 메타데이터를 요청한다. Action Provider는 이러한 사용자의 요청에 응답하여 앱 제목, 아이콘, 사용 가능한 액션 목록 등의 메타데이터를 반환한다.

이 정보를 받은 Action Client는 사용자에게 적절한 인터페이스를 구성하여 보여준다. 사용자 인터페이스는 푸시 알람, 네이티브 버튼, 메신저 앱 등 URL을 활용할 수 있는 모든 형태로 존재한다. 사용자가 구체적인 액션을 선택하면, Action Client는 다시 Action Provider에게 POST 요청을 보내 실제 트랜잭션 데이터를 요청한다. Action Provider는 이 요청을 처리하여 서명 가능한 형태의 트랜잭션을 생성하고, 이를 Action Client에게 반환한다.

트랜잭션을 받은 Action Client (주로 지갑 애플리케이션)는 사용자에게 이 트랜잭션의 서명을 요청한다. 사용자가 트랜잭션 내용을 확인하고 서명하면, Action Client는 이 서명된 트랜잭션을 Solana 블록체인 네트워크로 전송한다. 솔라나 블록체인은 이 트랜잭션을 처리하고 그 결과를 다시 Action Client에게 반환한다.

이러한 일련의 과정을 통해 사용자는 단일 인터페이스 내에서 원활하게 블록체인 트랜잭션을 수행할 수 있다. 사용자는 다른 앱이나 웹페이지로 이동할 필요 없이 자신이 사용하던 환경 내에서 모든 과정을 처리할 수 있게 되는 것이다.

Blinks를 통한 Actions 감지는 세 가지 방법으로 이루어진다. 첫 번째 방법은 ‘명시적인 Action URL 공유’로, 개발자나 콘텐츠 제작자가 특정 Action에 대한 URL을 직접 공유하는 것이다. 이는 사용자가 원하는 Action으로 바로 이동할 수 있게 해주지만, 각 Action마다 별도의 URL을 관리해야 하는 단점이 있다.

두 번째 방법은 actions.json 파일을 통해 웹사이트에 연결된 Actions API를 사용하는 것이다. 이 방법에서는 웹사이트 루트 디렉토리에 actions.json 파일을 생성하여 사이트에서 사용 가능한 모든 Actions의 목록과 메타데이터를 포함시킨다. Blinks를 지원하는 클라이언트가 웹사이트를 방문할 때 이 파일을 자동으로 읽어 사용 가능한 Actions를 파악한다. 이 방법은 웹사이트의 모든 Actions를 중앙에서 관리할 수 있게 해주며, 일관된 Action 인터페이스를 제공한다.

세 번째 방법은 “중간” 사이트 URL에 Action URL을 포함시키는 것이다. 이 방법에서는 웹페이지의 URL에 특정 매개변수나 경로를 포함시켜 Action을 지정한다. Blinks를 지원하는 클라이언트는 이 URL을 분석하여 관련 Action을 식별한다. 이 방법의 장점은 기존 웹사이트 구조를 크게 변경하지 않고도 Actions를 통합할 수 있으며, 특정 컨텍스트와 관련된 Actions를 쉽게 연결할 수 있다는 것이다. 이러한 방법들을 통해 Blinks는 웹 브라우징 경험과 Solana 블록체인 상호작용을 원활하게 연결하여 사용자 경험을 크게 향상시킨다.

액션을 구현하는 백엔드 코드의 일부를 살펴보고자 한다. 아래는 사용자가 솔라나 블록체인에서 SOL을 다른 계정으로 transfer 하려는 상황에서 사용자의 클라이언트 애플리케이션이 서버에 요청을 보내고, 서버가 이 요청을 처리하여 Solana Action을 실행할 때의 코드이다.

import { Actions } from '@solana/actions';

// GET 요청 처리
app.get('/my-action', (req, res) => {
const metadata = {
name: "My Solana Action",
description: "This is a sample Solana Action",
icon: "https://example.com/icon.png",
actions: [
{
name: "Transfer SOL",
description: "Transfer SOL to another account"
}
]
};
res.json(metadata);
});
// POST 요청 처리
app.post('/my-action', async (req, res) => {
const { amount, recipient } = req.body;

// 트랜잭션 생성 로직
const transaction = await createTransferTransaction(amount, recipient);

res.json({ transaction: transaction.serialize() });
});

코드의 흐름은 다음과 같다.

  1. 클라이언트(사용자의 앱이나 브라우저)가 서버에 HTTP GET 요청을 보내 Action에 대한 정보를 가져온다.
  2. 서버는 Action의 메타데이터로 응답을 보낸다.
  3. 사용자가 SOL을 전송하기로 결정하면, 클라이언트는 전송할 SOL의 양과 받는 사람의 주소를 포함해 HTTP POST 요청을 서버 쪽으로 보낸다.
  4. 서버는 이 정보를 토대로 트랜잭션을 생성하고, 이를 다시 클라이언트에게 반환한다.
  5. 클라이언트는 이 트랜잭션을 받아 사용자의 지갑으로 서명하고 Solana 네트워크에 제출한다.

솔라나 Actions & Blinks 시스템의 또 다른 중요한 구성 요소는 ‘액션 아이덴티티’ 시스템이다. 이 시스템은 온체인 활동을 특정 서비스 제공자(액션 제공자)에게 정확하게 귀속시키는 역할을 한다. 액션 아이덴티티 시스템의 핵심 요소와 작동 원리를 살펴보겠다.

액션 아이덴티티는 특별한 형식의 메시지인 ‘액션 식별자 메시지’를 통해 구현된다. 이 메시지는 다음과 같은 구조를 가진다.

protocol:identity:reference:signature

protocol: 사용 중인 프로토콜 (예: ‘solana-action’)
identity: 액션 아이덴티티의 공개 키
reference: 32바이트 고유 식별자
signature: reference 값에 대한 서명

이 메시지는 SPL Memo 명령을 통해 트랜잭션에 포함된다.

SPL Memo 명령은 Solana 블록체인에서 트랜잭션에 메모를 추가하는 기능을 제공하는 도구이다. 이 명령은 사용자가 트랜잭션과 함께 추가적인 정보를 전송할 수 있게 해주며, 특히 NFT 거래나 특정 서비스 제공자와의 상호작용에서 유용하게 활용된다.

SPL Memo를 사용하면 트랜잭션에 메모를 포함시켜 해당 거래의 목적이나 관련 정보를 명시할 수 있다. 이러한 기능은 여러 거래가 이루어지는 환경에서 거래의 맥락을 이해하는 데 큰 도움을 준다. 또한, 특정 토큰 전송 시 메모를 필수로 요구하도록 설정할 수 있어, 수신자는 거래의 유효성을 확인하고 필요한 정보를 쉽게 추적할 수 있다.

온체인 활동을 특정 서비스 제공자와 연결하는 역할을 하는 액션 아이덴티티 시스템은 여러 단계로 구성된 작동 원리를 가진다. 먼저, 액션 제공자는 트랜잭션을 생성할 때 액션 식별자 메시지를 포함시킨다. 이 메시지는 SPL Memo 명령을 통해 트랜잭션에 추가되며, 사용자는 트랜잭션을 서명하고 네트워크에 제출하게 된다.

트랜잭션이 제출된 후, 검증 과정이 진행된다. 이 과정에서 getSignaturesForAddress RPC 메소드를 사용하여 특정 identity와 관련된 모든 트랜잭션을 수집하고, 각 트랜잭션의 memo 필드에서 액션 식별자 메시지를 추출하여 서명을 검증한다. 마지막으로, reference 값의 첫 번째 온체인 사용인지 확인하는 절차가 포함된다.

이와 같은 과정을 통해 액션 아이덴티티 시스템은 온체인 활동의 정확한 연결을 가능하게 한다. 이를 통해 특정 서비스 제공자에게 활동을 효과적으로 연관시킬 수 있으며, 검증 가능한 귀속 시스템으로 데이터 분석의 신뢰성을 높일 수 있다. 또한, 불필요한 서명을 줄여 트랜잭션 크기를 최적화하는 데에도 기여한다.

이 시스템은 Solana Actions & Blinks와 함께 작동하여 온체인 활동의 투명성과 연결성을 크게 향상시킨다. 예를 들어, 사용자가 Blink를 통해 NFT를 구매하는 경우, 해당 트랜잭션에는 액션 식별자 메시지가 포함되어 이 거래가 어떤 NFT 마켓플레이스를 통해 이루어졌는지를 명확히 식별할 수 있다. 이러한 방식으로 액션 아이덴티티 시스템은 블록체인 생태계 내에서 사용자 경험을 한층 더 발전시키는 중요한 역할을 한다.

다음은 액션 아이덴티티 시스템을 구현하는 간단한 코드 예시이다:

import { Keypair, Transaction, SystemProgram, PublicKey } from '@solana/web3.js';
import { MemoProgram } from '@solana/spl-memo';

// 액션 아이덴티티 키페어 생성
const actionIdentity = Keypair.generate();
// 트랜잭션 생성
const transaction = new Transaction();
// 일반적인 트랜잭션 명령 추가 (예: SOL 전송)
transaction.add(
SystemProgram.transfer({
fromPubkey: senderPublicKey,
toPubkey: recipientPublicKey,
lamports: amountInLamports,
})
);
// 액션 식별자 메시지 생성
const reference = Keypair.generate().publicKey.toBase58();
const message = `solana-action:${actionIdentity.publicKey.toBase58()}:${reference}`;
const signature = actionIdentity.sign(Buffer.from(reference));
// 액션 식별자 메시지를 Memo 명령으로 추가
transaction.add(
MemoProgram.createMemoInstruction(message + ':' + signature.toString('base58'))
);
// 트랜잭션 전송 및 확인
// ...

이 코드는 일반적인 SOL 전송 트랜잭션에 액션 식별자 메시지를 추가하는 과정을 보여준다. 액션 식별자 메시지를 생성하는 과정에서는 먼저 새로운 키 쌍을 생성하여 참조 키를 만들고, 이를 Base58 형식으로 변환한다. 이 참조 키는 후에 메시지에 포함된다. 이 참조 키에 대한 서명을 생성하여 메시지의 유효성을 보장하게 된다.

이후 생성된 메시지는 Memo 프로그램의 명령으로 트랜잭션에 추가되는데 이때 메시지에는 액션 아이덴티티의 공개 키와 참조 키, 그리고 서명이 포함되어 있어, 수신자가 이 트랜잭션의 목적과 관련된 정보를 알아볼 수 있는 것이다.

마지막으로, 트랜잭션을 블록체인에 전송하고 그 결과를 확인하는 과정이 있다. 이 과정은 실제 네트워크 환경에 따라 달라지며, 트랜잭션의 성공 여부를 확인하는 로직이 추가되어야 한다. 결과적으로 이러한 방식은 Solana 생태계에서 더 복잡하고 의미 있는 트랜잭션을 구현할 수 있게 해주는 중요한 기능이 된다.

Actions & Blinks가 솔라나 생태계에 미치는 영향

솔라나의 Actions & Blinks는 웹3의 대중화에 가까워지고자 개발되었고 이는 다른 블록체인 기반 기술들이 흔히 목표하는 바이기도 하다. 한편 기존 블록체인 프로토콜에 대한 접근이 디앱과 지갑 연동 도구에 국한되어 있었던 반면, 솔라나의 Actions & Blinks는 인터넷의 모든 웹사이트와 애플리케이션을 온체인 상호작용의 배포 지점으로 둔다는 점에서 차별적이라고 할 수 있다.

또한, 솔라나 온체인 활동과 소셜 미디어와의 통합이 예상된다. 현재는 X(구 트위터)에서만 Actions & Blinks가 지원되고 있다. 그러나 향후 디스코드, 레딧, 인스타그램 등 다양한 소셜 네트워크로의 확장이 예고된 상황이다. Action의 개발사인 Dialect가 생각하는 Actions & Blinks의 대표적 Use Case는 특정 인물에게 팁을 줄 수 있는 버튼 형태의 Blink를 만들어서 활용하는 것이다. 일종의 기부 버튼이라고 생각할 수 있다. 미디엄이나 트위터에 글을 쓰고 그 아래에 Blink에 접속하면 글쓴이에게 자동으로 소액이 기부되는 상황이 있겠다. 유튜브에서 자신이 좋아하는 크리에이터에게 일정액의 돈을 송금할 수 있는 슈퍼땡스(SuperThanks) 기능의 웹3 버전 느낌이다.

향후 Actions & Blinks의 가장 기대되는 부분으로 솔라나 밈코인 생태계와의 시너지 효과를 꼽을 수 있겠다.

솔라나는 지난 7월, 처음으로 24시간 기준 fees & revenue 측면에서 이더리움을 제치고 1위를 했으며, DEX Volume 역시 이더리움을 3주 연속 넘어선 수치를 기록하고 있다. 이러한 성공은 솔라나가 BONK, POPCAT 등 인기 있는 밈코인들의 플랫폼으로 자리 잡았기 때문인데, Actions & Blinks를 통해 이러한 밈코인들의 거래와 사용이 더욱 간편해질 것으로 보인다. X에서 특정 해시태그를 사용하면 자동으로 BONK 토큰을 주고받을 수 있게 하거나 BONK를 활용한 온라인 투표 시스템 등을 쉽게 구현할 수 있다. 이는 단순히 재미를 넘어서 커뮤니티 참여와 보상 시스템의 새로운 패러다임을 제시할 수 있다.

또한, NFT 아티스트들에게도 새로운 기회를 제공할 수 있다. 자신의 작품을 소셜 미디어에 공유하면서 동시에 판매나 경매를 진행할 수 있게 되어, 창작자와 팬 사이의 직접적인 상호작용이 가능해진다. 이러한 변화는 블록체인 기술이 단순한 투기 수단이 아닌, 실제 가치를 창출하고 교환하는 플랫폼으로 발전하는 데 큰 역할을 할 것으로 보인다.

마치며

솔라나의 Actions & Blinks는 복잡했던 블록체인 상호작용을 단순한 URL 클릭으로 대체함으로써, 사용자 경험을 크게 개선하고자 한다. 이에 대한 구현 역시 간단하기에, 기존 웹 서비스와 블록체인의 경계를 허무는 과정에서 개발에 대한 부담도 덜어주고 있다.

솔라나는 빠른 처리 속도와 낮은 수수료가 특징이기 때문에, Actions & Blinks는 소셜 미디어 상의 즉각적인 상호작용 등 새로운 사용 사례를 만들어낼 잠재력도 가지고 있다. 특히나 밈코인과의 시너지 효과가 매우 기대된다. BONK나 POPCAT 같은 인기 밈코인들과 결합하여 참신한 온체인 활동을 촉진할 수 있을 것이다.

그러나 이러한 기술이 완전히 자리 잡기까지는 시간이 필요할 것이다. 현재 X에만 국한된 지원을 다른 주요 소셜 미디어 플랫폼으로 확장하는 것은 중요한 과제 중 하나다. 또한, URL을 통한 간편한 트랜잭션으로 인한 새로운 보안 위협에 대비해야 할 것이다.

이런 과제들이 있음에도 불구하고, Actions & Blinks는 솔라나 생태계를 한 단계 끌어올릴 핵심 기술임은 분명하다. NFT, 밈코인 등 솔라나 생태계가 계속 확장해 나가는 상황에서, Actions & Blinks가 향후 솔라나 생태계의 어떤 분야와 시너지를 발생시킬지 기대된다.

--

--