English | 한국어
Sol4k는 Java 또는 다른 JVM 언어뿐만 아니라 Android에서도 사용할 수 있는 Solana용 Kotlin 클라이언트입니다. 이 클라이언트를 사용하여 RPC 노드와 통신하고 블록체인에서 정보를 쿼리하며, 계정을 생성하고 데이터를 읽고, 다양한 유형의 트랜잭션을 전송하고, 키 쌍 및 공개 키와 작업할 수 있습니다. 또한 개발자가 매끄럽고 간편하게 작업할 수 있도록 편리한 API도 제공합니다.
Gradle:
implementation 'org.sol4k:sol4k:0.4.2'
Maven:
<dependency>
<groupId>org.sol4k</groupId>
<artifactId>sol4k</artifactId>
<version>0.4.2</version>
</dependency>
연결을 생성하고 최신 블록 해시를 요청한 후, 한 계정에서 다른 계정으로 SOL 전송 트랜잭션을 제출합니다.
val connection = Connection(RpcUrl.DEVNET)
val blockhash = connection.getLatestBlockhash()
val sender = Keypair.fromSecretKey(secretKeyBytes)
val receiver = PublicKey("DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx")
val instruction = TransferInstruction(sender.publicKey, receiver, lamports = 1000)
val transaction = Transaction(blockhash, instruction, feePayer = sender.publicKey)
transaction.sign(sender)
val signature = connection.sendTransaction(transaction)
sol4k API의 Java 예제를 찾으려면 sol4k-examples 저장소를 참조하십시오.
키 쌍 생성.
val generatedKeypair = Keypair.generate()
기존 비밀키에서 키 쌍 생성.
val keypairFromSecretKey = Keypair.fromSecretKey(secretKeyByteArray)
문자열에서 공개 키 생성.
val publicKey = PublicKey("DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx")
바이트 배열에서 공개 키 생성.
val publicKey = PublicKey(publicKeyByteArray)
SPL 토큰의 관련 토큰 계정 주소 얻기.
val programDerivedAddress = PublicKey.findProgramDerivedAddress(holderAddress, tokenMintAddress)
공개 키를 문자열로 변환.
val publicKey = PublicKey("DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx")
publicKey.toBase58() // DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx
publicKey.toString() // DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx
데이터 디코딩.
val decodedBytes: ByteArray = Base58.decode("DxPv2QMA5cWR5Xfg7tXr5YtJ1EEStg5Kiag9HhkY1mSx")
데이터 인코딩.
val encodedData: String = Base58.encode(inputByteArray)
메시지 서명.
val signature: ByteArray = keypair.sign(messageByteArray)
검증.
val result: Boolean = publicKey.verify(signature, message)
RPC 호출은 JSON RPC 메서드를 반영하는 함수를 노출하는 Connection
클래스를 통해 수행됩니다. HTTP URL과 커밋을 사용하여 연결을 생성할 수 있습니다.
val connection = Connection(RpcUrl.DEVNET, Commitment.PROCESSED)
커밋을 지정하지 않으면 기본적으로 FINALIZED
가 사용됩니다.
val connection = Connection(RpcUrl.DEVNET)
RPC URL을 문자열로 전달할 수도 있습니다.
val connection = Connection("https://api.devnet.solana.com")
커밋이 필요한 RPC 메서드는 연결 생성 시 지정된 커밋을 사용하거나 추가 인수로 커밋을 전달하여 재정의할 수 있습니다.
val connection = Connection(RpcUrl.DEVNET, Commitment.CONFIRMED)
// a blockhash with the 'confirmed' commitment
val blockhash = connection.getLatestBlockhash()
// commitment is overridden by 'finalized'
val finalizedBlockhash = connection.getLatestBlockhash(Commitment.FINALIZED)
지원되는 API들:
getAccountInfo
getBalance
getEpochInfo
getHealth
getIdentity
getLatestBlockhash
getTokenAccountBalance
getTransactionCount
isBlockhashValid
requestAirdrop
sendTransaction
simulateTransaction
sol4k 트랜잭션은 Solana 트랜잭션을 빌드, 서명, 직렬화 및 전송하는 데 사용할 수 있는 클래스입니다. 최신 블록 해시, 하나 이상의 명령어 및 수수료 지불자를 지정하여 트랜잭션을 생성할 수 있습니다.
val transaction = Transaction(blockhash, instruction, feePayer)
여러 명령어가 있는 트랜잭션:
val transaction = Transaction(blockhash, instructions, feePayer)
명령어
는 다음 데이터를 필요로 하는 인터페이스입니다:
interface Instruction {
val data: ByteArray
val keys: List<AccountMeta>
val programId: PublicKey
}
명령어
인터페이스에는 TransferInstruction
, SplTransferInstruction
, CreateAssociatedTokenAccountInstruction
및 임의의 트랜잭션을 보내는 데 사용되는 BaseInstruction
과 같은 여러 구현이 있습니다.
AccountMeta
는 명령어에서 사용되는 계정의 메타데이터를 지정할 수 있는 클래스입니다. 공개 키와 두 개의 boolean 값(signer
및 writable
)을 필요로 합니다.
val accountMeta = AccountMeta(publicKey, signer = false, writable = true)
다른 속성 조합으로 객체를 생성하는 세 가지 편리한 함수도 제공합니다.
val signerAndWritable: AccountMeta = AccountMeta.signerAndWritable(publicKey)
val signer: AccountMeta = AccountMeta.signer(publicKey)
val writable: AccountMeta = AccountMeta.writable(publicKey)
다음을 모두 결합한 예: 게임 프로그램에 정보를 보내는 트랜잭션 생성.
val instructionData = byteArrayOf(-3, -42, 48, -55, 100, -55, -29, -37)
val accounts = listOf(
AccountMeta.writable(gameAccount),
AccountMeta.signerAndWritable(playerPublicKey)
)
val joinGameInstruction = BaseInstruction(instructionData, accounts, programId)
val blockhash = connection.getLatestBlockhash()
val joinGameTransaction = Transaction(
blockhash,
instruction = joinGameInstruction,
feePayer = playerPublicKey,
)
joinGameTransaction.sign(playerKeypair)
val signature = connection.sendTransaction(joinGameTransaction)
다음은 다른 예제 입니다: 사용자의 지갑에 연관된 토큰 계정 생성.
val blockhash = connection.getLatestBlockhash()
val payerWallet = Keypair.fromSecretKey(secretKeyBytes)
val usdcMintAddress = PublicKey("Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr")
val destinationWallet = Keypair.generate().publicKey
val (associatedAccount) = PublicKey.findProgramDerivedAddress(destinationWallet, usdcMintAddress)
val instruction = CreateAssociatedTokenAccountInstruction(
payer = payerWallet.publicKey,
associatedToken = associatedAccount,
owner = destinationWallet,
mint = usdcMintAddress,
)
val transaction = Transaction(
blockhash,
instruction,
feePayer = payerWallet.publicKey,
)
transaction.sign(payerWallet)
val signature = connection.sendTransaction(transaction)
프로젝트 테스트에서 더 많은 예제를 찾을 수 있습니다.
이 프로젝트는 활발히 개발 중입니다. 기여하고 싶다면 열린 Issue를 확인하거나 Pull Request를 제출하십시오.
sol4k를 로컬에서 빌드하고 실행하려면 다음 단계를 수행하십시오:
- 기본 JDK 버전으로 JDK 11 이상을 설치합니다(
java --version
을 실행하여 11 이상이 출력되는지 확인). - JDK 8을 설치하지만 기본값으로 선택하지 않습니다. macOS를 사용하는 경우
/usr/libexec/java_home -V
를 실행하여 Java 8이 목록에 있는지 확인할 수 있습니다. ./gradlew publishToMavenLocal -x signMavenPublication
을 실행합니다.
이렇게 하면 sol4k가 로컬 Maven 저장소에 설치되며 다른 프로젝트에서 가져올 수 있습니다
(당신의 Maven 저장소에mavenLocal
이 포함되어 있는지 확인하십시오).
gradle.properties
의 currentVersion을 조정하여 빌드한 버전을 가져오고 있는지 확인하십시오.
종단 간 테스트를 실행하려면 두 개의 환경 변수를 설정해야 합니다: RPC URL과 테스트에 사용할 계정의 Base-58로 인코딩된 비밀 키입니다.
export E2E_RPC_URL="https://api.devnet.solana.com"
export E2E_SECRET_KEY="base-58-encode-secret-key..."
테스트를 실행합니다:
./gradlew integrationTest
테스트를 실행하려면 계정에 Devnet SOL과 Devnet USDC가 필요합니다. 둘 다 이faucet을 사용하여 받을 수 있습니다..
테스트용으로 새 계정을 생성하려면 다음과 같이 할 수 있습니다:
val keypair = Keypair.generate()
val secret = Base58.encode(keypair.secret)
println("Secret: $secret")
println("Public Key: ${keypair.publicKey}")
환경 변수가 설정되지 않은 경우 종단 간 테스트는 EwtJVgZQGHe9MXmrNWmujwcc6JoVESU2pmq7wTDBvReF
를 사용하여 블록체인과 상호작용합니다. 이 비밀 키는 소스 코드에 공개되어 있으므로 이를 사용하려면 Devnet USDC와 SOL이 있는지 확인하십시오.
질문이 있으면 contact@sol4k.org
로 문의하십시오.