Skip to content

Commit

Permalink
Merge branch 'release/0.4.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
mirceanis committed Jun 25, 2021
2 parents 032b87c + 10bb8ea commit 46197c6
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 50 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
* 0.4.4
* chore - upgrade dependencies ( #12 )

* 0.4.3
* fix - upgrade assertk & apply detekt config ( #11 )

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ allprojects {
In your module `build.gradle` file, add:

```groovy
def uport_kotlin_common_version = "0.4.3"
def uport_kotlin_common_version = "0.4.4"
dependencies {
//...
// core lib
Expand Down
29 changes: 14 additions & 15 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,31 @@
buildscript {

ext {
kotlin_version = '1.3.70'
kotlin_serialization_version = '0.20.0'
coroutines_version = "1.3.5"
kotlin_version = '1.5.20'
kotlin_serialization_version = '1.2.1'
coroutines_version = "1.5.0"

junit_version = "4.12"
mockk_version = "1.9.3"
assertk_version = "0.22"
detekt_version = "1.6.0"
jacoco_version = "0.8.4"
mockk_version = "1.11.0"
assertk_version = "0.24"
detekt_version = "1.17.1"
jacoco_version = "0.8.7"

okhttp_version = "4.4.1"
okhttp_version = "4.9.1"

spongycastle_version = "1.58.0.0"
kethereum_version = "0.81.4"
khex_version = "1.0.0-RC6"
kethereum_version = "0.83.4"
khex_version = "1.0.0"
khash_version = "1.0.0-RC5"

current_release_version = "0.4.3"
current_release_version = "0.4.4"
}

repositories {
gradlePluginPortal()
google()
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url "https://kotlin.bintray.com/kotlinx" }
}

dependencies {
Expand Down Expand Up @@ -75,9 +75,8 @@ allprojects {

repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url "https://kotlin.bintray.com/kotlinx" }
// mavenLocal()
}

Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/me/uport/sdk/core/Networks.kt
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ object Networks {
* Searches for an [EthNetwork] based on a [name]
*/
private fun getNetworkByName(name: String): EthNetwork? {
val queryName = name.toLowerCase()
return NETWORK_CONFIG.values.find { it.name.toLowerCase() == queryName }
val queryName = name.lowercase()
return NETWORK_CONFIG.values.find { it.name.lowercase() == queryName }
}

private fun cleanId(id: String) : String {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion jsonrpc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ compileKotlin {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$kotlin_serialization_version"
api "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialization_version"

api "com.github.komputing.kethereum:extensions_kotlin:$kethereum_version"
api "com.github.komputing.khex:extensions:$khex_version"
Expand Down
26 changes: 11 additions & 15 deletions jsonrpc/src/main/java/me/uport/sdk/jsonrpc/JsonRPC.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

package me.uport.sdk.jsonrpc

import kotlinx.serialization.builtins.list
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
Expand All @@ -28,13 +28,11 @@ open class JsonRPC(
private val httpClient: HttpClient = HttpClient()
) {

private val lenientJson = Json(
JsonConfiguration.Stable.copy(
isLenient = true,
ignoreUnknownKeys = true,
useArrayPolymorphism = true
)
)
private val lenientJson = Json {
isLenient = true
ignoreUnknownKeys = true
useArrayPolymorphism = true
}

//=============================
// eth_call
Expand Down Expand Up @@ -99,8 +97,8 @@ open class JsonRPC(

val rawResult = httpClient.urlPost(rpcEndpoint, payloadRequest)

val parsedResponse = lenientJson.parse(
JsonRpcResponse.serializer(JsonRpcLogItem.serializer().list),
val parsedResponse = lenientJson.decodeFromString(
JsonRpcResponse.serializer(ListSerializer(JsonRpcLogItem.serializer())),
rawResult
)

Expand Down Expand Up @@ -159,8 +157,6 @@ open class JsonRPC(
* The number is usable as `nonce` (since nonce is zero indexed)
*
* See also: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getTransactionCount
*
* FIXME: add support for pending transactions
*/
suspend fun getTransactionCount(address: String): BigInteger {
val payloadRequest = JsonRpcRequest(
Expand Down Expand Up @@ -210,7 +206,7 @@ open class JsonRPC(

val rawResult = httpClient.urlPost(rpcEndpoint, payloadRequest)

val parsedResponse = lenientJson.parse(
val parsedResponse = lenientJson.decodeFromString(
JsonRpcResponse.serializer(TransactionReceipt.serializer()),
rawResult
)
Expand Down Expand Up @@ -244,7 +240,7 @@ open class JsonRPC(

val rawResult = httpClient.urlPost(rpcEndpoint, payloadRequest)

val parsedResponse = lenientJson.parse(
val parsedResponse = lenientJson.decodeFromString(
JsonRpcResponse.serializer(TransactionInformation.serializer()),
rawResult
)
Expand Down Expand Up @@ -296,7 +292,7 @@ open class JsonRPC(
private suspend fun jsonRpcGenericCall(url: String, payloadRequest: String): String {
val rawResult = httpClient.urlPost(url, payloadRequest)

val parsedResponse = lenientJson.parse(
val parsedResponse = lenientJson.decodeFromString(
JsonRpcResponse.serializer(String.serializer()),
rawResult
)
Expand Down
16 changes: 9 additions & 7 deletions jsonrpc/src/main/java/me/uport/sdk/jsonrpc/model/Serializers.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package me.uport.sdk.jsonrpc.model

import kotlinx.serialization.Decoder
import kotlinx.serialization.Encoder
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.PrimitiveDescriptor
import kotlinx.serialization.PrimitiveKind
import kotlinx.serialization.SerialDescriptor
import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import me.uport.sdk.core.clean0xPrefix
import me.uport.sdk.core.hexToBigInteger
import me.uport.sdk.core.hexToByteArray
Expand All @@ -18,10 +19,11 @@ import java.math.BigInteger
* This is a (de)serialization helper for BigInteger encoded as hex string,
* optionally prefixed with `0x`. This is usable for eth_QUANTITY
*/
@ExperimentalSerializationApi
@Serializer(forClass = BigInteger::class)
object BigIntegerSerializer : KSerializer<BigInteger> {
override val descriptor: SerialDescriptor =
PrimitiveDescriptor("BigIntegerSerializer", PrimitiveKind.STRING)
PrimitiveSerialDescriptor("BigIntegerSerializer", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: BigInteger) {
encoder.encodeString(value.toHexString())
Expand All @@ -47,7 +49,7 @@ object BigIntegerSerializer : KSerializer<BigInteger> {
@Serializer(forClass = ByteArray::class)
object ByteArraySerializer : KSerializer<ByteArray> {
override val descriptor: SerialDescriptor =
PrimitiveDescriptor("ByteArraySerializer", PrimitiveKind.STRING)
PrimitiveSerialDescriptor("ByteArraySerializer", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: ByteArray) {
encoder.encodeString(value.toHexString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
import java.math.BigInteger
import javax.annotation.Generated

/**
* Data representing the transaction information resulting from `eth_getTransactionByHash`
Expand All @@ -32,7 +31,6 @@ data class TransactionInformation(

{
@Suppress("ComplexMethod")
@Generated
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
Expand All @@ -57,7 +55,6 @@ data class TransactionInformation(
return true
}

@Generated
override fun hashCode(): Int {
var result = txHash?.hashCode() ?: 0
result = 31 * result + nonce.hashCode()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,49 @@

package me.uport.sdk.jsonrpc.model.request

import kotlinx.serialization.ContextualSerialization
import kotlinx.serialization.ContextualSerializer
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Required
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import kotlinx.serialization.serializer
import me.uport.sdk.jsonrpc.model.BigIntegerSerializer

@ExperimentalSerializationApi
class DynamicLookupSerializer : KSerializer<Any> {
override val descriptor: SerialDescriptor =
ContextualSerializer(Any::class, null, emptyArray()).descriptor

@InternalSerializationApi
override fun serialize(encoder: Encoder, value: Any) {
val actualSerializer =
encoder.serializersModule.getContextual(value::class) ?: value::class.serializer()
encoder.encodeSerializableValue(actualSerializer as KSerializer<Any>, value)
}

override fun deserialize(decoder: Decoder): Any {
error("Unsupported")
}
}

/**
* Encapsulates the body of an eth JsonRPC call
*/
@Serializable
internal class JsonRpcRequest(
private val method: String,
private val params: List<@ContextualSerialization Any?>,
private val params: List<@Serializable(with = DynamicLookupSerializer::class) Any?>,
@Required
private val id: Int = 1,
@Required
private val jsonrpc: String = "2.0"
) {
fun toJson() = Json(JsonConfiguration.Stable).stringify(serializer(), this)
fun toJson() = Json.encodeToString(serializer(), this)
}

Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class JsonRpcBaseResponseTest {

@Test
fun `can deserialize log item json`() {
val item = Json(JsonConfiguration.Stable).parse(JsonRpcLogItem.serializer(), logItemJson)
val item = Json.decodeFromString(JsonRpcLogItem.serializer(), logItemJson)


assertThat(item).isNotNull()
Expand Down

0 comments on commit 46197c6

Please sign in to comment.