From 8b6fc4c13a80fc293320aa8f3503f3705e1a3f40 Mon Sep 17 00:00:00 2001 From: Marian Vanderka Date: Mon, 22 Jul 2019 14:02:17 +0200 Subject: [PATCH 1/3] fix type resolution, kt suffix for java (#83) --- .../src/main/java/ch/decent/sdk/api/NftApi.kt | 6 ++++ .../java/ch/decent/sdk/model/AssetData.kt | 7 +++-- .../java/ch/decent/sdk/model/NftDataType.kt | 9 +++--- .../test/java/ch/decent/sdk/java/ApiTest.java | 30 +++++++++++++++++++ 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/ch/decent/sdk/api/NftApi.kt b/library/src/main/java/ch/decent/sdk/api/NftApi.kt index be033d96..23435bcd 100644 --- a/library/src/main/java/ch/decent/sdk/api/NftApi.kt +++ b/library/src/main/java/ch/decent/sdk/api/NftApi.kt @@ -92,6 +92,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * * @return NFT data objects, or [ObjectNotFoundException] if none found */ + @JvmName("getAllDataKt") fun getAllData(ids: List, clazz: KClass): Single>> = getAllDataRaw(ids).make(clazz) /** @@ -131,6 +132,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * * @return NFT data object, or [ObjectNotFoundException] if none found */ + @JvmName("getDataKt") fun getData(id: ChainObject, clazz: KClass): Single> = getAllData(listOf(id), clazz).map { it.single() } /** @@ -210,6 +212,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * * @return NFT data instances */ + @JvmName("getNftBalancesKt") fun getNftBalances(account: ChainObject, nftId: ChainObject, clazz: KClass): Single>> = getNftBalancesRaw(account, listOf(nftId)).make(clazz) @@ -245,6 +248,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * * @return NFT data objects */ + @JvmName("listDataByNftKt") fun listDataByNft(nftId: ChainObject, clazz: KClass): Single>> = listDataByNftRaw(nftId).make(clazz) /** @@ -296,6 +300,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * When set to other then DCT, the request might fail if the asset is not convertible to DCT or conversion pool is not large enough */ @JvmOverloads + @JvmName("createNftCreateOperationKt") fun createNftCreateOperation( symbol: String, options: NftOptions, @@ -337,6 +342,7 @@ class NftApi internal constructor(api: DCoreApi) : BaseApi(api) { * When set to other then DCT, the request might fail if the asset is not convertible to DCT or conversion pool is not large enough */ @JvmOverloads + @JvmName("createKt") fun create( credentials: Credentials, symbol: String, diff --git a/library/src/main/java/ch/decent/sdk/model/AssetData.kt b/library/src/main/java/ch/decent/sdk/model/AssetData.kt index b284440d..1a803461 100644 --- a/library/src/main/java/ch/decent/sdk/model/AssetData.kt +++ b/library/src/main/java/ch/decent/sdk/model/AssetData.kt @@ -1,11 +1,12 @@ package ch.decent.sdk.model +import ch.decent.sdk.model.types.Int64 import com.google.gson.annotations.SerializedName import java.math.BigInteger data class AssetData( @SerializedName("id") val id: ChainObject = ObjectType.ASSET_OBJECT.genericId, - @SerializedName("current_supply") val currentSupply: BigInteger, - @SerializedName("asset_pool") val assetPool: BigInteger, - @SerializedName("core_pool") val corePool: BigInteger + @SerializedName("current_supply") @Int64 val currentSupply: Long, + @SerializedName("asset_pool") @Int64 val assetPool: Long, + @SerializedName("core_pool") @Int64 val corePool: Long ) diff --git a/library/src/main/java/ch/decent/sdk/model/NftDataType.kt b/library/src/main/java/ch/decent/sdk/model/NftDataType.kt index a743ac17..10d233a9 100644 --- a/library/src/main/java/ch/decent/sdk/model/NftDataType.kt +++ b/library/src/main/java/ch/decent/sdk/model/NftDataType.kt @@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName import java.math.BigInteger import kotlin.reflect.KType import kotlin.reflect.full.createType +import kotlin.reflect.full.isSubtypeOf data class NftDataType( @SerializedName("type") val type: Type = Type.STRING, @@ -33,10 +34,10 @@ data class NftDataType( @SerializedName("boolean") BOOLEAN(Boolean::class.createType()); companion object { - operator fun get(type: KType): Type = when (type) { - in Type.STRING.types -> STRING - in Type.BOOLEAN.types -> BOOLEAN - in Type.INTEGER.types -> INTEGER + operator fun get(type: KType): Type = when { + Type.STRING.types.any { type.isSubtypeOf(it) } -> STRING + Type.BOOLEAN.types.any { type.isSubtypeOf(it) } -> BOOLEAN + Type.INTEGER.types.any { type.isSubtypeOf(it) } -> INTEGER else -> throw IllegalArgumentException("type '$type' not supported") } } diff --git a/library/src/test/java/ch/decent/sdk/java/ApiTest.java b/library/src/test/java/ch/decent/sdk/java/ApiTest.java index dcceaf74..59a37af4 100644 --- a/library/src/test/java/ch/decent/sdk/java/ApiTest.java +++ b/library/src/test/java/ch/decent/sdk/java/ApiTest.java @@ -5,6 +5,7 @@ import ch.decent.sdk.DCoreSdk; import ch.decent.sdk.Helpers; import ch.decent.sdk.crypto.Address; +import ch.decent.sdk.crypto.Credentials; import ch.decent.sdk.crypto.ECKeyPair; import ch.decent.sdk.model.*; import ch.decent.sdk.model.operation.BaseOperation; @@ -14,6 +15,7 @@ import ch.decent.sdk.utils.Utils; import com.google.gson.Gson; import kotlin.Pair; +import org.jetbrains.annotations.NotNull; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,6 +24,7 @@ import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.Map; /** @@ -223,5 +226,32 @@ public void ValidationApiTest() { @Test public void NftApiTest() { + Credentials credentials = new Credentials(ObjectType.ACCOUNT_OBJECT.getGenericId(), Helpers.getPrivate()); + api.getNftApi().countAll(); + api.getNftApi().countAllData(); + api.getNftApi().create(credentials, "NFT", 10, true, "description", NftJava.class, true); + + } + + class NftJava implements NftModel { + + public String string; + public boolean aBoolean; + public short aShort; + public byte aByte; + public int anInt; + public long aLong; + + @NotNull + @Override + public List values() { + return null; + } + + @NotNull + @Override + public Map createUpdate() { + return null; + } } } From 3bb35e208159048173dc1d3f2d0690dea92188f0 Mon Sep 17 00:00:00 2001 From: Peter Vanderka <45463125+petervanderkadecent@users.noreply.github.com> Date: Mon, 22 Jul 2019 14:03:26 +0200 Subject: [PATCH 2/3] Update DCore testnet endpoints (#84) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb073e13..11d84a43 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ import toChainObject import okhttp3.OkHttpClient // create API for HTTP -val api = DCoreSdk.createForHttp(OkHttpClient(), "https://testnet-api.dcore.io/") +val api = DCoreSdk.createForHttp(OkHttpClient(), "https://testnet.dcore.io/") // get account by name, resolves to account id '1.2.28' val disposable = api.accountApi.get("public-account-10").subscribe { account -> account.id == "1.2.28".toChainObject() @@ -72,7 +72,7 @@ import toChainObject import okhttp3.OkHttpClient // create API for websocket -val api = DCoreSdk.createForWebSocket(OkHttpClient(), "wss://testnet-api.dcore.io/") +val api = DCoreSdk.createForWebSocket(OkHttpClient(), "wss://testnet-socket.dcore.io/") // create account credentials form account id and corresponding private key val credentials = Credentials("1.2.28".toChainObject(), "5JMpT5C75rcAmuUB81mqVBXbmL1BKea4MYwVK6voMQLvigLKfrE") // 1 DCT From 9af9782e7ad2e2a39d6ea6271f92ea928bc3abe0 Mon Sep 17 00:00:00 2001 From: Peter Vanderka <45463125+petervanderkadecent@users.noreply.github.com> Date: Mon, 22 Jul 2019 15:05:22 +0200 Subject: [PATCH 3/3] Fix RPC endpoint path (#86) --- library/src/main/java/ch/decent/sdk/net/rpc/RpcService.kt | 2 +- library/src/test/java/ch/decent/sdk/Helpers.kt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/ch/decent/sdk/net/rpc/RpcService.kt b/library/src/main/java/ch/decent/sdk/net/rpc/RpcService.kt index ee2cbdf8..7e04d621 100644 --- a/library/src/main/java/ch/decent/sdk/net/rpc/RpcService.kt +++ b/library/src/main/java/ch/decent/sdk/net/rpc/RpcService.kt @@ -22,7 +22,7 @@ import retrofit2.http.POST internal class RpcService(url: String, client: OkHttpClient, private val gson: Gson) { private interface RpcEndpoint { - @POST("rpc") + @POST(".") fun request(@Body request: RequestBody): Single } diff --git a/library/src/test/java/ch/decent/sdk/Helpers.kt b/library/src/test/java/ch/decent/sdk/Helpers.kt index b2de9b13..c9644421 100644 --- a/library/src/test/java/ch/decent/sdk/Helpers.kt +++ b/library/src/test/java/ch/decent/sdk/Helpers.kt @@ -12,10 +12,12 @@ import org.slf4j.Logger import org.slf4j.LoggerFactory object Helpers { - @JvmStatic val testnetWs = "wss://testnet-api.dcore.io" - @JvmStatic val testnetHttp = "https://testnet-api.dcore.io/" + @JvmStatic val testnetWs = "wss://testnet-socket.dcore.io/" + @JvmStatic val testnetHttp = "https://testnet.dcore.io/" @JvmStatic val stageWs = "wss://stagesocket.decentgo.com:8090" @JvmStatic val stageHttp = "https://stagesocket.decentgo.com" + @JvmStatic val mainWs = "wss://api.decent.ch" + @JvmStatic val mainHttp = "https://api.decent.ch" @JvmStatic val dockerWs = "ws://localhost:8090/" @JvmStatic val dockerHttp = "http://localhost:8090/" @JvmStatic val wsUrl = dockerWs