Solana Provider
@solana/web3.js를 Wepin Provider와 함께 사용하면 Solana 블록체인과 상호작용 할 수 있습니다.
지원 네트워크
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> optionaldefaultLanguage
: 위젯의 기본 설정 언어. 현재 지원하는 언어는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>
transaction
<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: { transaction: _toHexString(transaction.serializeMessage()) },
})
signAndSendTransaction
직렬화된 트랜잭션에 서명하고 Solana 네트워크에 제출합니다. 트랜잭션의 서명(Tx ID)을 반환합니다.
Parameters
<object>
transaction
<string> - 직렬화된 트랜잭션을 hex string으로 변환한 값
Return value
Promise
<object>signature
<TransactionSignature> - 성공적으로 전송된 트랜잭션의 고유 서명(signature) 을 반환합니다.
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: { transaction: _toHexString(transaction.serializeMessage()) }, //transaction.serializeMessage() 의 return 값은 Buffer 로 hex string 으로 변환해야 합니다.
})
signAllTransactions
직렬화된 여러개의 트랜잭션을 한번에 서명합니다. 입력으로 hex string으로 변환된 트랜잭션 배열을 받고, 서명된 트랜잭션 배열을 반환합니다.
Parameters
<object>
transactions
<Array<string>> - 직렬화된 트랜잭션 데이터 배열. 각 트랜잭션은 Solana의Transaction
또는VersionedTransaction
객체를 직렬화 한 후, 해당 데이터를 Hexadecimal(16진수) 문자열로 변환한 값입니다.
Return value
Promise
<Array<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: 'signAndSendTransaction',
params: { transactions: _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> optionalDefault Commitment - finalize
processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음
confirmed - 클러스터의 과반이 승인한 최신 블록을 조회
finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록
encoding
<string> optionalAccount 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 versionslot
<number> - 작업이 실행된 slot
value
<object> nullablelamports
<u64> - 계정 잔액owner
<string> - 해당 계정을 소유하고 관리하는 프로그램의 주소 (base-58로 인코딩 된 PubKey)data
<[string, encoding] | object> - 계정과 관련된 데이터executable
<boolean> - 계정에 프로그램이 포함되어있는지(읽기전용 여부포함) 나타내는 불리언 값rentEpoch
<u64> - 이 계정이 다음 스토리지 비용을 지불해야 하는 epochsize
<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> optionalDefault Commitment - finalize
processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음.
confirmed - 클러스터의 과반이 승인한 최신 블록을 조회.
finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록.
minContextSlot
<number> optional요청을 실행할 수 있는 최소 슬롯
Return value
context
<object>apiVersion
<string> - solana-core versionslot
<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> optionalDefault Commitment - finalize
processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음
confirmed - 클러스터의 과반이 승인한 최신 블록을 조회
finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록
minContextSlot
<number> optional요청을 실행할 수 있는 최소 슬롯
Return value
context
<object>apiVersion
<string> - solana-core versionslot
<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 AddressprogramId
<string> - base-58로 인코딩 된 특정 프로그램의 ID
<object>
commitment
<string> optionalDefault Commitment - finalize
processed - node가 처리한 가장 최신 블록을 조회. 이 블록은 아직 확정되지 않았으며, 변경될 가능성이 있음
confirmed - 클러스터의 과반이 승인한 최신 블록을 조회
finalized - 클러스터의 과반이 최종적으로 확정한 최신 블록
minContextSlot
<number> optional요청을 실행할 수 있는 최소 슬롯
encoding
<string> optionalAccount 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 versionslot
<number> - 작업이 실행된 slot
value
<Array<object>>pubkey
<string> - 조회 된 계정의 주소account
<object> - 해당 계정의 정보lamports
<u64> - 계정 잔액data
<object> - 해당 계정과 연결된 Token state dataparsed
<object>info
<object> - 계정 정보isNative
<boolean> - 네이티브 계정 여부 표시. 일반적으로 falsemint
<string> - 해당 토큰 계정과 연결된 특정 토큰의 주소owner
<string> - 해당 토큰 계정을 통제하는 사용자의 Solana 지갑 주소state
<string> - 토큰 계정의 상태tokenAmount
<object> - 토큰 계정의 잔액 정보amount
<string> - 계정 내 보유량을 나타내는 숫자decimals
<number> - 해당 토큰의 소수점 자수uiAmount
<number> - 소수 형태의 토큰 잔액. DEPRECATEDuiAmountString
<string> - 문자열로 표시된 소수 형태의 토큰 잔액
type
<string> - info 의 유형. 이 경우 account
program
<string> - 해당 계정이 속한 프로그램space
<number> - 계정 데이터의 크기. 바이트 단위로 표시
executable
<boolean> - 해당 계정이 실행 가능한지 여부owner
<string> - 계정을 소유한 프로그램의 주소rentEpoch
<u64> - 계정이 현재 임대 상태인 epochsize
<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 versionslot
<number> - 작업이 실행된 slot
value
<object>amount
<string> - 해당 토큰 계정의 잔액decimals
<number> - 해당 토큰의 소수점 자릿수uiAmount
<number> nullable - 소수 형태의 토큰 잔액. DEPRECATEDuiAmountString
<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
Was this helpful?