Skip to content

Commit

Permalink
switch to lib + cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Funkatronics committed Jun 13, 2024
1 parent 47543c7 commit 7ead589
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 2,967 deletions.
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref =
ktor-client-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" }
multimult = { group = "io.github.funkatronics", name = "multimult", version = "0.2.3" }
rpc-core = { group = "com.solanamobile", name = "rpc-core", version = "0.2.5" }
salkt = { group = "io.github.funkatronics", name = "salkt", version = "0.1.0" }

[plugins]
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
Expand Down
1 change: 1 addition & 0 deletions solana/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ kotlin {
implementation(libs.kotlinx.serialization.json)
implementation(libs.borsh)
implementation(libs.multimult)
implementation(libs.salkt)
}
}
val commonTest by getting {
Expand Down
8 changes: 4 additions & 4 deletions solana/src/commonMain/kotlin/com/solana/programs/Program.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.solana.programs

import com.funkatronics.hash.Sha256
import com.funkatronics.salt.isOnCurve
import com.solana.publickey.ProgramDerivedAddress
import com.solana.publickey.PublicKey
import com.solana.publickey.SolanaPublicKey
import com.solana.salt.TweetNaclFast
import kotlin.jvm.JvmStatic

interface Program {
Expand All @@ -23,19 +23,19 @@ interface Program {

@JvmStatic
suspend fun createProgramAddress(seeds: List<ByteArray>, programId: PublicKey): Result<SolanaPublicKey> {
val publicKeyBytes = Sha256.hash(
val address = Sha256.hash(
seeds.foldIndexed(ByteArray(0)) { i, a, s ->
require(s.size <= 32) { "Seed length must be <= 32 bytes" }; a + s
} + programId.bytes + "ProgramDerivedAddress".encodeToByteArray()
)

if (TweetNaclFast.is_on_curve(publicKeyBytes)) {
if (address.isOnCurve()) {
return Result.failure(
IllegalArgumentException("Invalid seeds, address must fall off curve")
)
}

return Result.success(SolanaPublicKey(publicKeyBytes))
return Result.success(SolanaPublicKey(address))
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.solana.publickey

import com.funkatronics.salt.isOnCurve

suspend fun PublicKey.isOnCurve() = bytes.isOnCurve()
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
package com.solana.publickey

import com.funkatronics.salt.isOnCurve
import com.solana.programs.Program
import kotlin.jvm.JvmStatic

class ProgramDerivedAddress(bytes: ByteArray, val nonce: UByte) : SolanaPublicKey(bytes) {
class ProgramDerivedAddress private constructor(bytes: ByteArray, val nonce: UByte) : SolanaPublicKey(bytes) {

constructor(publicKey: PublicKey, nonce: UByte) : this(publicKey.bytes, nonce)
private constructor(publicKey: PublicKey, nonce: UByte) : this(publicKey.bytes, nonce)

suspend fun ProgramDerivedAddress(bytes: ByteArray, nonce: UByte) {
require(!bytes.isOnCurve()) { "Provided public key is not a PDA, address must be off Ed25519 curve" }
return ProgramDerivedAddress(bytes, nonce)
}

suspend fun ProgramDerivedAddress(publicKey: PublicKey, nonce: UByte) =
ProgramDerivedAddress(publicKey.bytes, nonce)

companion object {
@JvmStatic
Expand Down
21 changes: 0 additions & 21 deletions solana/src/commonMain/kotlin/com/solana/salt/LICENSE

This file was deleted.

Loading

0 comments on commit 7ead589

Please sign in to comment.