Skip to content

Latest commit

 

History

History
281 lines (207 loc) · 10 KB

README_KR.md

File metadata and controls

281 lines (207 loc) · 10 KB

sol4k Maven Central Build Style License

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 저장소를 참조하십시오.

API들

키 쌍 및 공개 키 작업

키 쌍 생성.

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

Base 58 인코딩

데이터 디코딩.

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 함수

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 값(signerwritable)을 필요로 합니다.

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로 문의하십시오.