ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Solana 시스템 프로그램을 통해 계정 A에서 B로 솔라나를 전송하는 과정
    블록체인/Solana 2024. 11. 25. 23:44
    728x90
    반응형

     

    1. Sender Wallet Account (보내는 사람의 지갑 계정)

    이건 돈을 보내려는 사람의 지갑이에요. 여기에는 솔라나(SOL)가 들어있고, 이 지갑을 통해 다른 사람에게 돈을 보낼 수 있어요. 보내는 사람은 **트랜잭션(거래)**을 만들어 이체를 요청하게 돼요.


    2. Transaction (트랜잭션, 거래)

    트랜잭션은 마치 "돈을 보내주세요!"라고 적힌 편지와 같아요. 이 편지는 어떤 내용을 담고 있냐면:

    • Message (메시지): "누구에게 얼마를 보낼 건지" 같은 중요한 정보들이 여기에 들어가요.
    • Instructions (지시사항): "어떻게 돈을 보낼지"를 적어놨어요. 예를 들어, 시스템 프로그램을 사용해서 돈을 보내라는 지시가 포함돼요.
    • Recent Blockhash (최근 블록해시): 이건 현재 블록체인 네트워크의 상태를 나타내는 일종의 "시간 도장"이에요. 이를 통해 거래가 언제 요청되었는지 알 수 있어요.
    • Signers (서명자들): 보내는 사람(Sender)이 자신의 거래를 인증하기 위해 서명(Sign)을 하는데, 그 정보가 여기에 담겨요.

    3. SOL Transfer Instruction (SOL 송금 지시)

    여긴 실제로 돈을 보내는 과정을 설명하는 부분이에요. Instruction은 지갑에게 "이렇게 해!"라고 명령을 내리는 역할이에요. 이 명령에는 다음 정보가 들어가요:

    • System Program (시스템 프로그램): 솔라나 네트워크에서 기본적으로 돈을 보내는 일을 담당하는 "시스템"이에요.
    • Accounts (계정): 거래에 참여하는 사람들(보내는 사람과 받는 사람)의 계좌 정보가 여기에 포함돼요.
    • Transfer Amount (보낼 금액): 보내는 금액이 여기에 적혀 있어요.

    4. AccountMeta (계정 메타데이터)

    이건 거래에 참여하는 각 계정(보내는 사람과 받는 사람)에 대한 정보예요. 여기에는 두 가지 중요한 속성이 있어요:

    • is_signer (서명자 여부):
      • 보내는 사람(Sender)은 반드시 서명을 해야 하니까 true로 표시돼요.
      • 받는 사람(Receiver)은 서명을 할 필요가 없으니까 false로 돼 있어요.
    • is_writable (수정 가능 여부):
      • 보내는 사람(Sender)의 계좌는 돈이 빠져나가기 때문에 바뀌어야 해서 true로 돼 있어요.
      • 받는 사람(Receiver)의 계좌도 돈이 들어가야 하니까 true로 돼 있어요.

    5. 한눈에 이해하기 (쉽게 예로 들어보기)

    • Sender Wallet Account: "엄마의 지갑"
    • Transaction: "엄마가 아이에게 용돈을 주는 요청서"
      • Message: "엄마가 아이에게 10 SOL을 보내주세요."
      • Signers: "엄마가 요청서에 서명"
    • System Program: "은행 시스템(돈을 보내주는 역할)"
    • AccountMeta:
      • Sender: "엄마의 지갑 (돈을 보내는 사람)" → 서명 필요(is_signer=true), 돈이 빠지니까 수정 가능(is_writable=true).
      • Receiver: "아이의 지갑 (돈을 받는 사람)" → 서명 필요 없음(is_signer=false), 돈이 들어가니까 수정 가능(is_writable=true).

     

     

    1. Sender Wallet Account (보내는 계정)

    이것은 SOL을 전송하는 출발 계정(지갑)입니다. 트랜잭션이 실행되면 여기서 SOL이 차감됩니다. 이 계정의 상태를 나타내는 주요 정보는 다음과 같습니다:

    • Data: None
      이 계정은 데이터를 저장하지 않습니다. SOL(네이티브 토큰)을 저장하는 단순한 계정입니다.
    • Executable: False
      이 계정은 실행 가능한 프로그램(코드가 포함된 스마트 컨트랙트)이 아닙니다. 단순히 SOL과 같은 기본 데이터를 저장하는 계정일 뿐입니다.
    • Lamports: ↓ Amount
      "Lamports"는 SOL의 최소 단위(1 SOL = 10^9 Lamports)입니다. 트랜잭션이 실행되면서 이 계정에서 지정된 양의 Lamports(SOL)가 차감됩니다.
    • Owner: System Program
      이 계정의 소유자는 시스템 프로그램(System Program)입니다. 즉, 이 계정은 솔라나의 기본 시스템 프로그램에 의해 관리됩니다. 이는 계정의 기본 기능(잔액 관리 등)이 시스템 프로그램을 통해 이루어짐을 의미합니다.

    2. Receiver Wallet Account (받는 계정)

    SOL을 받는 대상 계정입니다. 트랜잭션 실행 후 이 계정에는 SOL이 추가됩니다. 주요 특징은 다음과 같습니다:

    • Data: None
      보내는 계정과 마찬가지로, 데이터 저장은 하지 않습니다. 단순히 SOL을 보관하기 위한 계정입니다.
    • Executable: False
      이 계정도 실행 가능한 프로그램이 아닙니다. 단순한 데이터 저장소 역할을 합니다.
    • Lamports: ↑ Amount
      트랜잭션 실행 후, 이 계정의 Lamports(잔액)가 지정된 양만큼 증가합니다.
    • Owner: System Program
      이 계정도 시스템 프로그램에 의해 관리됩니다. 이는 기본적으로 네이티브 계정이 솔라나의 기본 프로토콜 규칙에 따라 동작함을 나타냅니다.

    3. Transaction (트랜잭션)

    트랜잭션은 블록체인에서 실행되는 작업 단위로, SOL 전송을 요청하는 명령 집합입니다. 이 트랜잭션의 구성 요소는 다음과 같습니다:

    • Instruction (명령)
      트랜잭션에는 "시스템 프로그램을 호출하여 SOL을 특정 계정으로 전송하라"는 명령이 포함됩니다. 이 명령은 System Program으로 전달되어 실행됩니다.
    • Signs and Sends (서명 및 전송)
      트랜잭션을 생성한 후, 보내는 사람(Sender)은 자신의 프라이빗 키를 사용해 트랜잭션에 디지털 서명을 합니다. 이 서명은 블록체인 네트워크에서 이 트랜잭션이 인증된 요청임을 보장합니다. 서명된 트랜잭션은 블록체인 네트워크로 전송됩니다.

    4. System Program (시스템 프로그램)

    시스템 프로그램은 솔라나 네트워크의 기본적인 기능(계정 관리, SOL 전송 등)을 제공하는 핵심 프로그램입니다. 이 프로그램은 트랜잭션을 실행하기 위해 호출됩니다.

    System Program의 역할:

    1. 트랜잭션 유효성 검증
      • 서명이 유효한지 확인합니다. 즉, 트랜잭션이 실제로 보내는 계정(Sender)의 소유자에 의해 생성되었는지 검증합니다.
    2. 잔액 확인
      • 보내는 계정(Sender)의 잔액이 충분한지 확인합니다.
    3. 잔액 업데이트
      • 보내는 계정에서 SOL을 차감하고, 받는 계정에 SOL을 추가합니다.
    4. 상태 업데이트
      • 트랜잭션 실행 결과를 블록체인에 기록합니다.

    5. AccountInfo (계정 정보)

    이 다이어그램에서 AccountInfo는 보내는 계정과 받는 계정의 상태를 나타냅니다. 주요 필드는 다음과 같습니다:

    • Data
      데이터 저장 여부를 나타냅니다. 여기서는 None으로 표시되어 데이터 저장소로 사용되지 않음을 의미합니다.
    • Executable
      계정이 실행 가능한 프로그램인지 여부를 나타냅니다. 여기서는 False로 표시되어, 단순한 데이터 저장소임을 나타냅니다.
    • Lamports
      계정의 잔액을 나타냅니다. 트랜잭션이 실행되면 보내는 계정에서는 잔액이 감소(↓), 받는 계정에서는 잔액이 증가(↑)합니다.
    • Owner
      계정의 소유자를 나타냅니다. 여기서는 System Program으로 표시되어, 계정이 시스템 프로그램의 관리 하에 있음을 나타냅니다.

    6. 프로세스의 흐름

    1. Sender Wallet Account에서 트랜잭션 생성 및 서명
      • 보내는 사람이 자신의 프라이빗 키를 사용하여 트랜잭션에 서명합니다.
      • 이 트랜잭션은 SOL을 받는 사람의 계정으로 전송하도록 명령합니다.
    2. System Program 호출
      • 트랜잭션이 네트워크에 제출되면, 시스템 프로그램이 호출되어 이 명령을 처리합니다.
    3. 계정 정보 업데이트
      • 시스템 프로그램은 보내는 계정과 받는 계정의 Lamports(잔액)를 업데이트합니다.
      • 트랜잭션 결과를 블록체인에 기록합니다.
    728x90
    반응형
Designed by Tistory.