47 lines
1.7 KiB
Kotlin
47 lines
1.7 KiB
Kotlin
package cash.z.ecc.android.sdk.internal.model.ext
|
|
|
|
import cash.z.ecc.android.sdk.internal.model.Checkpoint
|
|
import cash.z.ecc.android.sdk.model.BlockHeight
|
|
import cash.z.ecc.android.sdk.model.ZcashNetwork
|
|
import org.json.JSONObject
|
|
|
|
// Version is not returned from the server, so version 1 is implied. A version is declared here
|
|
// to structure the parsing to be version-aware in the future.
|
|
internal val Checkpoint.Companion.VERSION_1
|
|
get() = 1
|
|
internal val Checkpoint.Companion.KEY_VERSION
|
|
get() = "version"
|
|
internal val Checkpoint.Companion.KEY_HEIGHT
|
|
get() = "height"
|
|
internal val Checkpoint.Companion.KEY_HASH
|
|
get() = "hash"
|
|
internal val Checkpoint.Companion.KEY_EPOCH_SECONDS
|
|
get() = "time"
|
|
internal val Checkpoint.Companion.KEY_TREE
|
|
get() = "saplingTree"
|
|
|
|
internal fun Checkpoint.Companion.from(zcashNetwork: ZcashNetwork, jsonString: String) =
|
|
from(zcashNetwork, JSONObject(jsonString))
|
|
|
|
private fun Checkpoint.Companion.from(
|
|
zcashNetwork: ZcashNetwork,
|
|
jsonObject: JSONObject
|
|
): Checkpoint {
|
|
when (val version = jsonObject.optInt(Checkpoint.KEY_VERSION, Checkpoint.VERSION_1)) {
|
|
Checkpoint.VERSION_1 -> {
|
|
val height = run {
|
|
val heightLong = jsonObject.getLong(Checkpoint.KEY_HEIGHT)
|
|
BlockHeight.new(zcashNetwork, heightLong)
|
|
}
|
|
val hash = jsonObject.getString(Checkpoint.KEY_HASH)
|
|
val epochSeconds = jsonObject.getLong(Checkpoint.KEY_EPOCH_SECONDS)
|
|
val tree = jsonObject.getString(Checkpoint.KEY_TREE)
|
|
|
|
return Checkpoint(height, hash, epochSeconds, tree)
|
|
}
|
|
else -> {
|
|
throw IllegalArgumentException("Unsupported version $version")
|
|
}
|
|
}
|
|
}
|