Solana Provider

@solana/web3.js를 Wepin Provider와 함께 사용하면 Solana 블록체인과 상호작용 할 수 있습니다.

지원 네트워크

Chain ID
Network Name
Network Variable

solana:mainnet

Solana Mainnet

solana

solana:devnet

Solana Devnet

solana-devnet

설치(Install)

npm install @wepin/provider-js

설치가 완료되면 앱 등록 후 할당받은 App ID와 App Key를 사용하여 아래와 같이 WepinProvider 인스턴스를 초기화합니다. 이렇게 하면 WepinProvider 를 사용할 수 있게 됩니다.

// 1. 패키지 import
import { WepinProvider } from '@wepin/provider-js'

// 2. 초기화
const WepinProvider = new WepinProvider({
    appId: 'your-wepin-app-id',
    appKey: 'your-wepin-app-key',
})

초기화하기

Wepin Provider를 초기화하는 방법입니다.

init

await wepinProvider.init(attributes?)

Parameters

  • attributes <object> optional

    • defaultLanguage: 위젯의 기본 설정 언어. 현재 지원하는 언어는 en, ko , ja입니다.

    • defaultCurrency: 위젯의 기본 통화 설정. 현재 지원하는 통화는 USD, KRW, JPY 입니다.

Return value

  • Promise<void>

Example

await wepinProvider.init({
    defaultLanguage: 'ko',
    defaultCurrency: 'KRW',
})

isInitialized

WepinProvider 가 정상적으로 초기화 되었는지 확인할 수 있습니다.

wepinProvider.isInitialized()

Parameters

  • <void>

Return value

  • <boolean> init이 정상적으로 잘 된 경우 true , 실패한 경우 false 를 반환합니다.

Example

if(wepinProvider.isInitialized()) {
  console.log('wepinProvider is initialized!')
}

changeLanguage

위젯의 언어와 통화를 변경할 수 있습니다.

wepinProvider.changeLanguage(attributes)

Parameters

  • attributes <object>

    • language <string> 위젯에 표시될 언어를 지정합니다. 현재 지원하는 언어는 en, ko, ja 3가지 입니다.

    • currency <string> 위젯에 표시될 통화를 지정합니다. 현재 지원하는 통화는 USD, KRW, JPY 3가지 입니다.

Return value

  • <boolean> init이 정상적으로 잘 된 경우 true , 실패한 경우 false 를 반환합니다.

Example

if(wepinProvider.isInitialized()) {
  console.log('wepinProvider is initialized!')
}

메서드(Method)

Wepin Provider 초기화 후에 메소드를 사용할 수 있습니다.

getProvider

Network에 해당하는 프로바이더를 반환합니다.

await wepinProvider.getProvider(network)

Parameters

  • network <string> 위핀이 지원하는 Provider의 Network Variable 값으로, Solana Mainnet의 경우 "solana" 입니다. Network Variable은 소문자로 입력해야 합니다. 전체 목록은 Solana Provider 지원 네트워크에서 확인하세요.

Return value

  • Promise<BaseProvider> - solana provider

Example

const provider = await wepinProvider.getProvider('solana')

finalize

WepinProvider 사용을 종료합니다.

wepinProvider.finalize()

Parameters

  • <void>

Return value

  • <void>

Example

wepinProvider.finalize()

request

Solana 블록체인과 상호작용할 수 있도록 JSON-RPC 요청을 보낼 수 있습니다.

connect

위핀 지갑에 연결하여 사용자의 허가를 받아 계정의 주소(Public Key)를 공유합니다. 연결이 승인되면 애플리케이션은 메시지 서명이나 트랜잭션 요청을 할 수 있습니다.

Parameters

  • <void>

Return value

  • Promise<object>

    • publicKey<string> - Solana 계정의 Address(Public Key)

Example

await wepinProvider.request({
    method: 'connect',
    params: [],
})

signTransaction

직렬화된 트랜잭션을 서명합니다. 입력으로 hex string으로 변환된 트랜잭션을 받고, 서명된 트랜잭션을 반환합니다.

Parameters

  • <object>

    • message <string> - 직렬화된 트랜잭션을 hex string으로 변환한 값

Return value

  • Promise <Transaction> - 서명이 포함된 Transaction

Example

import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js'

const transaction = new Transaction()
const { value } = await getBlock()
transaction.add(
  SystemProgram.transfer({
    fromPubkey: new PublicKey(selectedAccount),
    toPubkey: new PublicKey(toAddress),
    lamports: parseFloat(toAmount) * 1000000000,
  })
)

transaction.recentBlockhash = value.blockhash
transaction.feePayer = new PublicKey(selectedAccount.value)

await wepinProvider.request({
    method: 'signTransaction',
    params: { message: _toHexString(transaction.serializeMessage()) },
})

signAndSendTransaction

직렬화된 트랜잭션에 서명하고 Solana 네트워크에 제출합니다. 트랜잭션의 서명(Tx ID)을 반환합니다.

Parameters

  • <object>

    • message <string> - 직렬화된 트랜잭션을 hex string으로 변환한 값

Return value

  • Promise <object>

    • signature <TransactionSignature> - 트랜잭션의 서명

Example

import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js'

const transaction = new Transaction()
const { value } = await getBlock()
transaction.add(
  SystemProgram.transfer({
    fromPubkey: new PublicKey(selectedAccount),
    toPubkey: new PublicKey(toAddress),
    lamports: parseFloat(toAmount) * 1000000000,
  })
)

transaction.recentBlockhash = value.blockhash
transaction.feePayer = new PublicKey(selectedAccount.value)

await wepinProvider.request({
    method: 'signAndSendTransaction',
    params: { message: _toHexString(transaction.serializeMessage()) },  //transaction.serializeMessage() 의 return 값은 Buffer 로 hex string 으로 변환해야 합니다.
})

signMessage

특정 계정의 주소(Public Key)와 메시지에 서명합니다. 입력으로 계정 주소와 서명할 메시지를 받습니다.

Parameters

  • <array>

    • <string> - sign 하는 계정의 주소(Public Key)

    • <string> - sign 하려는 message

Return value

  • Promise <string> - 서명 값(hex string)

Example

await wepinProvider.request({
    method: 'signMessage',
    params: [selectedAccount, data],
})

changeNetwork

네트워크를 변경합니다. Solana Mainnet 또는 Devnet으로 전환할 수 있으며, 변경된 네트워크의 주소, 네트워크 이름 및 chain ID를 반환합니다.

Parameters

  • <object>

    • chainId <string> - 변경할 network 의 chainId. solana chain(solana:mainnet, solana:devnet) 만 가능

Return value

  • Promise <object>

    • address <string> - 변경된 네트워크의 계정 주소 (Public Key)

    • network <string> - 변경된 네트워크의 이름

    • chainId <string> - 변경된 네트워크의 chain ID

Example

await wepinProvider.request({
    method: 'changeNetwork',
    params: [{ chainId: 'solana:devnet' }],
})

기타 메서드 예제

위핀에서 제공하는 메서드 외에 Solana RPC HTTP Methods 도 사용 가능합니다.

Parameter 로 들어온 Pubkey 와 연결된 모든 계정의 정보를 반환합니다.

Parameters

  • PubKey <string> - 조회할 계정의 주소 (base-58로 인코딩 된 PubKey)

  • <object>

    • commitment <string> optional

      • Default Commitment - finalize

      • processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음

      • confirmed - 클러스터의 과반이 승인한 최신 블록을 조회

      • finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록

    • encoding <string> optional

      • Account data 의 인코딩 형식

      • base58, base64, base64+zstd, jsonParsed

    • dataSlice <object> optional - base58, base64, base64+zstd 인코딩일 때만 사용 가능

      • length <usize> - 반환할 바이트 수

      • offset <usize> - 읽기를 시작할 바이트 offset

    • minContextSlot <number> optional

      • 요청을 실행할 수 있는 최소 슬롯

Return value

  • context <object>

    • apiVersion <string> - solana-core version

    • slot <number> - 작업이 실행된 slot

  • value <object> nullable

    • lamports <u64> - 계정 잔액

    • owner <string> - 해당 계정을 소유하고 관리하는 프로그램의 주소 (base-58로 인코딩 된 PubKey)

    • data <[string, encoding] | object> - 계정과 관련된 데이터

    • executable <boolean> - 계정에 프로그램이 포함되어있는지(읽기전용 여부포함) 나타내는 불리언 값

    • rentEpoch <u64> - 이 계정이 다음 스토리지 비용을 지불해야 하는 epoch

    • size <u64> - 계정 데이터의 크기

Example

await wepinProvider.request({
    method: 'getAccountInfo',
    params: [
        "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
    ],
})
//return data
{
  "context": {
    "apiVersion": "2.0.14",
    "slot": 338510838
  },
  "value": {
    "data": "",
    "executable": false,
    "lamports": 14000000000,
    "owner": "11111111111111111111111111111111",
    "rentEpoch": 18446744073709552000,
    "space": 0
  }
}

계정의 잔액을 반환합니다.

Parameters

  • Pubkey <string> - 잔액을 조회할 계정의 주소 (base-58로 인코딩 된 PubKey)

  • <object>

    • commitment <string> optional

      • Default Commitment - finalize

      • processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음.

      • confirmed - 클러스터의 과반이 승인한 최신 블록을 조회.

      • finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록.

    • minContextSlot <number> optional

      • 요청을 실행할 수 있는 최소 슬롯

Return value

  • context <object>

    • apiVersion <string> - solana-core version

    • slot <number> - 작업이 실행된 slot

  • value <number> - 계정의 잔액

Example

await wepinProvider.request({
    method: 'getAccountInfo',
    params: [
        "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
    ],
})
//return data
{
  "context": {
    "apiVersion": "2.0.14",
    "slot": 338529622
  },
  "value": 14000000000
}

가장 최신 블록해시를 반환합니다.

Parameters

  • <object> optional

    • commitment <string> optional

      • Default Commitment - finalize

      • processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음

      • confirmed - 클러스터의 과반이 승인한 최신 블록을 조회

      • finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록

    • minContextSlot <number> optional

      • 요청을 실행할 수 있는 최소 슬롯

Return value

  • context <object>

    • apiVersion <string> - solana-core version

    • slot <number> - 작업이 실행된 slot

  • value <object>

    • blockhash <string> - base-58로 인코딩 된 해시 값

    • lastValidBlockHeight <number> - 해당 블록 해시가 유효한 마지막 블록 높이

Example

await wepinProvider.request({
    method: 'getAccountInfo',
    params: [
        "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
    ],
})
//return data
{
    "context": {
        "apiVersion": "2.0.14",
        "slot": 338534308
    },
    "value": {
        "blockhash": "8uJtPoFrdEqxFCA4zaBxBQXosZKvWWQYcWb9kZbF2hDW",
        "lastValidBlockHeight": 326729023
    }
}

계정의 모든 SPL Token 계정 정보를 반환합니다.

Parameters

  • PubKey <string> - SPL Token Account 의 Owner 주소 (base-58로 인코딩 된 PubKey)

  • <object> - 조회할 SPL 토큰 계정에 대한 필터. mint 와 programId 중 하나만 있으면 됨

    • mint <string> - base-58로 인코딩 된 특정 토큰의 Mint Address

    • programId <string> - base-58로 인코딩 된 특정 프로그램의 ID

  • <object>

    • commitment <string> optional

      • Default Commitment - finalize

      • processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음

      • confirmed - 클러스터의 과반이 승인한 최신 블록을 조회

      • finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록

    • minContextSlot <number> optional

      • 요청을 실행할 수 있는 최소 슬롯

    • encoding <string> optional

      • Account data 의 인코딩 형식

      • base58, base64, base64+zstd, jsonParsed

    • dataSlice <object> optional - base58, base64, base64+zstd 인코딩일 때만 사용 가능

      • length <usize> - 반환할 바이트 수

      • offset <usize> - 읽기를 시작할 바이트 offset

Return value

  • context <object>

    • apiVersion <string> - solana-core version

    • slot <number> - 작업이 실행된 slot

  • value <Array<object>>

    • pubkey <string> - 조회 된 계정의 주소

    • account <object> - 해당 계정의 정보

      • lamports <u64> - 계정 잔액

      • data <object> - 해당 계정과 연결된 Token state data

        • parsed <object>

          • info <object> - 계정 정보

            • isNative <boolean> - 네이티브 계정 여부 표시. 일반적으로 false

            • mint <string> - 해당 토큰 계정과 연결된 특정 토큰의 주소

            • owner <string> - 해당 토큰 계정을 통제하는 사용자의 Solana 지갑 주소

            • state <string> - 토큰 계정의 상태

            • tokenAmount <object> - 토큰 계정의 잔액 정보

              • amount <string> - 계정 내 보유량을 나타내는 숫자

              • decimals <number> - 해당 토큰의 소수점 자수

              • uiAmount <number> - 소수 형태의 토큰 잔액. DEPRECATED

              • uiAmountString <string> - 문자열로 표시된 소수 형태의 토큰 잔액

          • type <string> - info 의 유형. 이 경우 account

        • program <string> - 해당 계정이 속한 프로그램

        • space <number> - 계정 데이터의 크기. 바이트 단위로 표시

      • executable <boolean> - 해당 계정이 실행 가능한지 여부

      • owner <string> - 계정을 소유한 프로그램의 주소

      • rentEpoch <u64> - 계정이 현재 임대 상태인 epoch

      • size <u64> - 계정의 데이터 크기

Example

await wepinProvider.request({
    method: 'getTokenAccountsByOwner',
    params: [
      "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
      {
        "mint": "BejB75Gmq8btLboHx7yffWcurHVBv5xvKcnY1fBYxnvf"
      },
      {
        "encoding": "jsonParsed"
      }
    ]
})
//return data
{
    "context": {
      "apiVersion": "2.0.8",
      "slot": 329669901
    },
    "value": [
      {
        "account": {
          "data": {
            "parsed": {
              "info": {
                "isNative": false,
                "mint": "BejB75Gmq8btLboHx7yffWcurHVBv5xvKcnY1fBYxnvf",
                "owner": "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
                "state": "initialized",
                "tokenAmount": {
                  "amount": "10000000000000",
                  "decimals": 9,
                  "uiAmount": 10000,
                  "uiAmountString": "10000"
                }
              },
              "type": "account"
            },
            "program": "spl-token",
            "space": 165
          },
          "executable": false,
          "lamports": 2039280,
          "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          "rentEpoch": 18446744073709551615,
          "space": 165
        },
        "pubkey": "5HvuXcy57o41qtGBBJM7dRN9DS6G3jd9KEhHt4eYqJmB"
      }
    ]
}

SPL Token 계정의 잔액을 반환합니다.

Parameters

  • PubKey <string> - ATA(Associated Token Account) 주소 ( base-58로 인코딩 된 PubKey)

Return value

  • context <object>

    • apiVersion <string> - solana-core version

    • slot <number> - 작업이 실행된 slot

  • value <object>

    • amount <string> - 해당 토큰 계정의 잔액

    • decimals <number> - 해당 토큰의 소수점 자릿수

    • uiAmount <number> nullable - 소수 형태의 토큰 잔액. DEPRECATED

    • uiAmountString <string> - 문자열로 표시된 소수 형태의 토큰 잔액

Example

await wepinProvider.request({
    method: 'getTokenAccountBalance',
    params: [
        "7fUAJdStEuGbc3sM84cKRL6yYaaSstyLSU4ve5oovLS7"
    ],
})
{
    "context": {
      "slot": 1114
    },
    "value": {
      "amount": "9864",
      "decimals": 2,
      "uiAmount": 98.64,
      "uiAmountString": "98.64"
    }
}

그 외 Solana 네트워크 프로바이더의 자세한 내용은 아래 링크를 참고하세요.

Last updated