From 6485d4f77d88166099b50586cf190ec9467f3d56 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 07:40:58 +0300 Subject: [PATCH 01/16] WIP --- build.gradle | 4 +- fearless-utils/build.gradle | 2 + .../fearless_utils/encrypt/qr/QrSharing.kt | 4 +- .../fearless_utils/extensions/Hex.kt | 42 ++-- .../fearless_utils/extensions/Kotlin.kt | 40 ++-- .../fearless_utils/runtime/StorageUtils.kt | 2 +- .../runtime/definitions/ParsingExt.kt | 56 ++--- .../definitions/TypeDefinitionParser.kt | 37 ++- .../dynamic/DynamicTypeExtension.kt | 22 +- .../dynamic/DynamicTypeResolver.kt | 43 ---- .../dynamic/extentsions/Default.kt | 210 +++++++++--------- .../dynamic/extentsions/GenericsExtension.kt | 38 ++-- .../dynamic/extentsions/WrapperExtension.kt | 46 ++-- .../definitions/registry/TypePreset.kt | 66 +++--- .../definitions/registry/TypeRegistry.kt | 10 +- .../definitions/types/generics/Bytes.kt | 5 - .../definitions/types/generics/EventRecord.kt | 22 -- .../types/generics/GenericAccountId.kt | 5 - .../generics/GenericConsensusEngineId.kt | 24 -- .../definitions/types/primitives/Primitive.kt | 8 - .../runtime/metadata/RuntimeMetadataExt.kt | 5 +- .../soramitsu/fearless_utils/scale/Schema.kt | 3 +- .../fearless_utils/scale/dataType/Numbers.kt | 3 +- .../fearless_utils/encrypt/SignerTest.kt | 11 +- .../encrypt/qr/QrSharingTest.kt | 3 +- .../fearless_utils/extensions/KotlinKtTest.kt | 6 +- .../extrinsic/SendIntegrationTest.kt | 9 +- .../fearless_utils/runtime/Common.kt | 11 +- .../definitions/TypeDefinitionParserTest.kt | 12 +- .../extensions/GenericsExtensionTest.kt | 2 +- .../extensions/HashMapExtensionTest.kt | 8 +- .../extensions/VectorExtensionTest.kt | 2 +- .../runtime/definitions/types/BaseTypeTest.kt | 4 +- .../definitions/types/generics/BitVecTest.kt | 1 - .../definitions/types/generics/DataTest.kt | 10 +- .../types/generics/ExtrinsicTest.kt | 10 +- .../runtime/extrinsic/ExtrinsicBuilderTest.kt | 27 ++- .../fearless_utils/ss58/SS58EncoderTest.kt | 24 +- gradle/wrapper/gradle-wrapper.properties | 2 +- iroha2/.gitignore | 1 + iroha2/build.gradle | 14 ++ .../co/soramitsu/TypeDefinitionParserImpl.kt | 17 ++ schema/.gitignore | 1 + schema/build.gradle | 18 ++ schema/libs/polkaj-scale-0.2.3.jar | Bin 0 -> 34149 bytes .../soramitsu/schema/DynamicTypeResolver.kt | 44 ++++ .../jp/co/soramitsu/schema/RuntimeSnapshot.kt | 4 + .../soramitsu/schema/TypeDefinitionParser.kt | 18 ++ .../schema/definitions/ParsingExt.kt | 28 +++ .../dynamic/DynamicTypeExtension.kt | 11 + .../dynamic/extentsions/Default.kt | 106 +++++++++ .../dynamic/extentsions/GenericsExtension.kt | 20 ++ .../dynamic/extentsions/WrapperExtension.kt | 25 +++ .../schema}/definitions/types/Type.kt | 6 +- .../schema}/definitions/types/TypeExt.kt | 14 +- .../definitions/types/TypeReferenceExt.kt | 5 +- .../definitions/types/composite/Alias.kt | 8 +- .../types/composite/CollectionEnum.kt | 6 +- .../definitions/types/composite/DictEnum.kt | 12 +- .../definitions/types/composite/FixedArray.kt | 6 +- .../definitions/types/composite/Option.kt | 10 +- .../definitions/types/composite/SetType.kt | 8 +- .../definitions/types/composite/Struct.kt | 10 +- .../definitions/types/composite/Tuple.kt | 10 +- .../definitions/types/composite/Vec.kt | 6 +- .../types/composite/WrapperType.kt | 8 +- .../types/errors/EncodeDecodeException.kt | 2 +- .../definitions/types/generics/BitVec.kt | 6 +- .../definitions/types/generics/Bytes.kt | 5 + .../definitions/types/generics/CallBytes.kt | 9 +- .../definitions/types/generics/Data.kt | 14 +- .../schema}/definitions/types/generics/Era.kt | 11 +- .../definitions/types/generics/EventRecord.kt | 22 ++ .../definitions/types/generics/Extrinsic.kt | 12 +- .../types/generics/ExtrinsicExt.kt | 4 +- .../types/generics/ExtrinsicPayloadExtras.kt | 12 +- .../types/generics/GenericAccountId.kt | 5 + .../definitions/types/generics/GenericCall.kt | 16 +- .../generics/GenericConsensusEngineId.kt | 24 ++ .../types/generics/GenericEvent.kt | 14 +- .../types/generics/GenericMultiAddress.kt | 12 +- .../definitions/types/generics/GenericSeal.kt | 8 +- .../definitions/types/generics/Hash.kt | 4 +- .../definitions/types/generics/Null.kt | 6 +- .../definitions/types/generics/OpaqueCall.kt | 10 +- .../definitions/types/generics/ResultType.kt | 6 +- .../types/generics/SessionKeysSubstrate.kt | 8 +- .../types/primitives/BooleanType.kt | 4 +- .../definitions/types/primitives/Compact.kt | 4 +- .../types/primitives/DynamicByteArray.kt | 4 +- .../types/primitives/FixedByteArray.kt | 4 +- .../types/primitives/NumberType.kt | 2 +- .../definitions/types/primitives/Primitive.kt | 8 + .../definitions/types/primitives/UIntType.kt | 4 +- .../definitions/types/stub/FakeType.kt | 6 +- .../soramitsu/schema/extensions/Exceptions.kt | 16 ++ .../jp/co/soramitsu/schema/extensions/Hex.kt | 21 ++ .../co/soramitsu/schema/extensions/Kotlin.kt | 20 ++ settings.gradle | 4 +- 99 files changed, 935 insertions(+), 627 deletions(-) delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeResolver.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Primitive.kt create mode 100644 iroha2/.gitignore create mode 100644 iroha2/build.gradle create mode 100644 iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt create mode 100644 schema/.gitignore create mode 100644 schema/build.gradle create mode 100644 schema/libs/polkaj-scale-0.2.3.jar create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/ParsingExt.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/DynamicTypeExtension.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/Type.kt (88%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/TypeExt.kt (83%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/TypeReferenceExt.kt (83%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/Alias.kt (73%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/CollectionEnum.kt (79%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/DictEnum.kt (78%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/FixedArray.kt (82%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/Option.kt (79%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/SetType.kt (83%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/Struct.kt (79%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/Tuple.kt (77%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/Vec.kt (85%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/composite/WrapperType.kt (54%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/errors/EncodeDecodeException.kt (75%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/BitVec.kt (88%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/CallBytes.kt (72%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/Data.kt (83%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/Era.kt (85%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/Extrinsic.kt (89%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/ExtrinsicExt.kt (91%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/ExtrinsicPayloadExtras.kt (83%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/GenericCall.kt (79%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/GenericEvent.kt (81%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/GenericMultiAddress.kt (55%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/GenericSeal.kt (63%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/Hash.kt (53%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/Null.kt (68%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/OpaqueCall.kt (70%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/ResultType.kt (50%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/generics/SessionKeysSubstrate.kt (53%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/BooleanType.kt (79%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/Compact.kt (80%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/DynamicByteArray.kt (82%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/FixedByteArray.kt (82%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/NumberType.kt (73%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Primitive.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/primitives/UIntType.kt (84%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime => schema/src/main/java/jp/co/soramitsu/schema}/definitions/types/stub/FakeType.kt (74%) create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/extensions/Exceptions.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/extensions/Hex.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/extensions/Kotlin.kt diff --git a/build.gradle b/build.gradle index dd465b69..db856197 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { minVersion = 21 targetVersion = 28 - kotlinVersion = '1.4.21' + kotlinVersion = '1.4.31' supportVersion = '1.0.0' constraintVersion = '1.1.3' @@ -99,4 +99,4 @@ task ktlint(type: JavaExec, group: "verification") { classpath = configurations.ktlint main = "com.github.shyiko.ktlint.Main" args "$project.rootDir/**/src/main/**/*.kt", "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/reports/checkstyle/kotlin-checkstyle-report.xml" -} \ No newline at end of file +} diff --git a/fearless-utils/build.gradle b/fearless-utils/build.gradle index afede04d..c754ec53 100644 --- a/fearless-utils/build.gradle +++ b/fearless-utils/build.gradle @@ -87,6 +87,8 @@ dependencies { testImplementation jUnitDep testImplementation mockitoDep + + implementation project(":schema") } def computeVersionName() { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharing.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharing.kt index 4ae4dfb8..16dc7807 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharing.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharing.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.encrypt.qr -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString private const val PREFIX = "substrate" diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt index bd5819ae..1dc402af 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt @@ -1,21 +1,21 @@ -package jp.co.soramitsu.fearless_utils.extensions - -import org.bouncycastle.util.encoders.Hex - -private const val HEX_PREFIX = "0x" - -fun ByteArray.toHexString(withPrefix: Boolean = false): String { - val encoded = Hex.toHexString(this) - - return if (withPrefix) return HEX_PREFIX + encoded else encoded -} - -fun String.fromHex(): ByteArray = Hex.decode(removePrefix(HEX_PREFIX)) - -fun String.requirePrefix(prefix: String) = if (startsWith(prefix)) this else prefix + this - -fun String.requireHexPrefix() = requirePrefix(HEX_PREFIX) - -fun Byte.toHex(withPrefix: Boolean = false): String { - return byteArrayOf(this).toHexString(withPrefix) -} \ No newline at end of file +//package jp.co.soramitsu.fearless_utils.extensions +// +//import org.bouncycastle.util.encoders.Hex +// +//private const val HEX_PREFIX = "0x" +// +//fun ByteArray.toHexString(withPrefix: Boolean = false): String { +// val encoded = Hex.toHexString(this) +// +// return if (withPrefix) return HEX_PREFIX + encoded else encoded +//} +// +//fun String.fromHex(): ByteArray = Hex.decode(removePrefix(HEX_PREFIX)) +// +//fun String.requirePrefix(prefix: String) = if (startsWith(prefix)) this else prefix + this +// +//fun String.requireHexPrefix() = jp.co.soramitsu.schema.extensions.requirePrefix(HEX_PREFIX) +// +//fun Byte.toHex(withPrefix: Boolean = false): String { +// return jp.co.soramitsu.schema.extensions.toHexString(withPrefix) +//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt index 1233d779..4f44946b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt @@ -1,20 +1,20 @@ -package jp.co.soramitsu.fearless_utils.extensions - -import java.math.BigInteger -import java.nio.ByteOrder - -inline fun Iterable.tryFindNonNull(transform: (T) -> R?): R? { - for (item in this) { - val transformed = transform(item) - - if (transformed != null) return transformed - } - - return null -} - -fun ByteArray.toBigInteger(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): BigInteger { - val preprocessed = if (byteOrder == ByteOrder.LITTLE_ENDIAN) reversedArray() else this - - return BigInteger(preprocessed) -} \ No newline at end of file +//package jp.co.soramitsu.fearless_utils.extensions +// +//import java.math.BigInteger +//import java.nio.ByteOrder +// +//inline fun Iterable.tryFindNonNull(transform: (T) -> R?): R? { +// for (item in this) { +// val transformed = transform(item) +// +// if (transformed != null) return transformed +// } +// +// return null +//} +// +//fun ByteArray.toBigInteger(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): BigInteger { +// val preprocessed = if (byteOrder == ByteOrder.LITTLE_ENDIAN) reversedArray() else this +// +// return BigInteger(preprocessed) +//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt index ffb3b335..8f7f0066 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt @@ -1,6 +1,6 @@ package jp.co.soramitsu.fearless_utils.runtime -import jp.co.soramitsu.fearless_utils.extensions.toHexString +import jp.co.soramitsu.schema.extensions.toHexString import jp.co.soramitsu.fearless_utils.hash.Hasher import jp.co.soramitsu.fearless_utils.hash.Hasher.xxHash128 import jp.co.soramitsu.fearless_utils.hash.hashConcat diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt index 0317a2c3..df52c324 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt @@ -1,28 +1,28 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions - -internal fun String.splitTuple(): List { - val innerPart = removeSurrounding("(", ")").replace(" ", "") - - val result = mutableListOf() - var bracketsCount = 0 - var currentBeginning = 0 - - innerPart.forEachIndexed { index, c -> - when (c) { - '(', '<', '[' -> bracketsCount++ - ')', '>', ']' -> bracketsCount-- - ',' -> { - if (bracketsCount == 0) { - result += innerPart.substring(currentBeginning, index) - currentBeginning = index + 1 - } - } - } - } - - if (currentBeginning < innerPart.length) { - result += innerPart.substring(currentBeginning, innerPart.length) - } - - return result -} \ No newline at end of file +//package jp.co.soramitsu.fearless_utils.runtime.definitions +// +//internal fun String.splitTuple(): List { +// val innerPart = removeSurrounding("(", ")").replace(" ", "") +// +// val result = mutableListOf() +// var bracketsCount = 0 +// var currentBeginning = 0 +// +// innerPart.forEachIndexed { index, c -> +// when (c) { +// '(', '<', '[' -> bracketsCount++ +// ')', '>', ']' -> bracketsCount-- +// ',' -> { +// if (bracketsCount == 0) { +// result += innerPart.substring(currentBeginning, index) +// currentBeginning = index + 1 +// } +// } +// } +// } +// +// if (currentBeginning < innerPart.length) { +// result += innerPart.substring(currentBeginning, innerPart.length) +// } +// +// return result +//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt index 1aee8999..54a046ae 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt @@ -1,20 +1,14 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions import com.google.gson.annotations.SerializedName -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePreset -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.create -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.newBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.CollectionEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.SetType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.* +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.ParseResult +import jp.co.soramitsu.schema.TypeDefinitionParser +import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.* import java.math.BigInteger class TypeDefinitionsTree( @@ -33,16 +27,11 @@ class TypeDefinitionsTree( } } -class ParseResult( - val typePreset: TypePreset, - val unknownTypes: List -) - private const val TOKEN_SET = "set" private const val TOKEN_STRUCT = "struct" private const val TOKEN_ENUM = "enum" -object TypeDefinitionParser { +object TypeDefinitionParserImpl : TypeDefinitionParser { private class Params( val types: Map, @@ -50,14 +39,14 @@ object TypeDefinitionParser { val typesBuilder: TypePresetBuilder ) - fun parseBaseDefinitions( - tree: TypeDefinitionsTree, + override fun parseBaseDefinitions( + types: Map, typePreset: TypePreset, - dynamicTypeResolver: DynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() + dynamicTypeResolver: DynamicTypeResolver ): ParseResult { val builder = typePreset.newBuilder() - val params = Params(tree.types, dynamicTypeResolver, builder) + val params = Params(types, dynamicTypeResolver, builder) parseTypes(params) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt index 96e2eed1..03413af5 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic - -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference - -typealias TypeProvider = (typeDef: String) -> TypeReference - -interface DynamicTypeExtension { - - fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? -} +//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic +// +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference +// +//typealias TypeProvider = (typeDef: String) -> TypeReference +// +//interface DynamicTypeExtension { +// +// fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? +//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeResolver.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeResolver.kt deleted file mode 100644 index eeac1816..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeResolver.kt +++ /dev/null @@ -1,43 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic - -import jp.co.soramitsu.fearless_utils.extensions.tryFindNonNull -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.BoxExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.CompactExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.FixedArrayExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.HashMapExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.OptionExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.ResultTypeExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.TupleExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.VectorExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type - -class DynamicTypeResolver( - val extensions: List -) { - constructor(vararg extensions: DynamicTypeExtension) : this(extensions.toList()) - - companion object { - fun defaultCompoundResolver(): DynamicTypeResolver { - return DynamicTypeResolver(DEFAULT_COMPOUND_EXTENSIONS) - } - - val DEFAULT_COMPOUND_EXTENSIONS = listOf( - VectorExtension, - CompactExtension, - OptionExtension, - BoxExtension, - TupleExtension, - FixedArrayExtension, - HashMapExtension, - ResultTypeExtension - ) - } - - fun createDynamicType( - name: String, - typeDef: String, - innerTypeProvider: TypeProvider - ): Type<*>? { - return extensions.tryFindNonNull { it.createType(name, typeDef, innerTypeProvider) } - } -} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt index e49cb343..599ffe93 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt @@ -1,105 +1,105 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions - -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.splitTuple -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.FixedArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Option -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Tuple -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.ResultType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Compact -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.DynamicByteArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 - -object VectorExtension : WrapperExtension() { - override val wrapperName = "Vec" - - override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> { - return if (innerTypeRef.value == u8) { - DynamicByteArray(name) - } else { - Vec(name, innerTypeRef) - } - } -} - -object CompactExtension : WrapperExtension() { - override val wrapperName = "Compact" - - override fun createWrapper(name: String, innerTypeRef: TypeReference) = Compact(name) -} - -object OptionExtension : WrapperExtension() { - override val wrapperName = "Option" - - override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) -} - -object BoxExtension : WrapperExtension() { - override val wrapperName: String - get() = "Box" - - override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? { - return innerTypeRef.value - } -} - -object TupleExtension : DynamicTypeExtension { - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("(")) return null - - val innerTypeRefDefinitions = typeDef.splitTuple() - - val innerTypeRefs = innerTypeRefDefinitions.map(typeProvider) - - return Tuple(name, innerTypeRefs) - } -} - -object FixedArrayExtension : DynamicTypeExtension { - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("[")) return null - - val withoutBrackets = typeDef.removeSurrounding("[", "]").replace(" ", "") - val (typeName, lengthRaw) = withoutBrackets.split(";") - - val length = lengthRaw.toInt() - - val typeRef = typeProvider(typeName) - - return if (typeRef.value == u8) { - FixedByteArray(name, length) - } else { - FixedArray(name, length, typeRef) - } - } -} - -object HashMapExtension : DynamicTypeExtension { - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("HashMap")) return null - val withoutBrackets = typeDef.removePrefix("HashMap").removeSurrounding("<", ">").replace(" ", "") - if (withoutBrackets.split(",").size != 2) return null - val tuple = "($withoutBrackets)" - val typeRef = typeProvider(tuple) - return Vec("Vec<$tuple>", typeRef) - } -} - -object ResultTypeExtension : DynamicTypeExtension { - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("Result")) return null - val withoutBrackets = - typeDef.removePrefix("Result").removeSurrounding("<", ">").replace(" ", "") - val types = withoutBrackets.split(",") - if (types.size != 2) return null - return ResultType(typeProvider(types[0]), typeProvider(types[1])) - } -} +//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions +// +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider +//import jp.co.soramitsu.fearless_utils.runtime.definitions.splitTuple +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.FixedArray +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Option +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Tuple +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.ResultType +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Compact +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.DynamicByteArray +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 +// +//object VectorExtension : WrapperExtension() { +// override val wrapperName = "Vec" +// +// override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> { +// return if (innerTypeRef.value == u8) { +// DynamicByteArray(name) +// } else { +// Vec(name, innerTypeRef) +// } +// } +//} +// +//object CompactExtension : WrapperExtension() { +// override val wrapperName = "Compact" +// +// override fun createWrapper(name: String, innerTypeRef: TypeReference) = Compact(name) +//} +// +//object OptionExtension : WrapperExtension() { +// override val wrapperName = "Option" +// +// override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) +//} +// +//object BoxExtension : WrapperExtension() { +// override val wrapperName: String +// get() = "Box" +// +// override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? { +// return innerTypeRef.value +// } +//} +// +//object TupleExtension : DynamicTypeExtension { +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// if (!typeDef.startsWith("(")) return null +// +// val innerTypeRefDefinitions = typeDef.splitTuple() +// +// val innerTypeRefs = innerTypeRefDefinitions.map(typeProvider) +// +// return Tuple(name, innerTypeRefs) +// } +//} +// +//object FixedArrayExtension : DynamicTypeExtension { +// +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// if (!typeDef.startsWith("[")) return null +// +// val withoutBrackets = typeDef.removeSurrounding("[", "]").replace(" ", "") +// val (typeName, lengthRaw) = withoutBrackets.split(";") +// +// val length = lengthRaw.toInt() +// +// val typeRef = typeProvider(typeName) +// +// return if (typeRef.value == u8) { +// FixedByteArray(name, length) +// } else { +// FixedArray(name, length, typeRef) +// } +// } +//} +// +//object HashMapExtension : DynamicTypeExtension { +// +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// if (!typeDef.startsWith("HashMap")) return null +// val withoutBrackets = typeDef.removePrefix("HashMap").removeSurrounding("<", ">").replace(" ", "") +// if (withoutBrackets.split(",").size != 2) return null +// val tuple = "($withoutBrackets)" +// val typeRef = typeProvider(tuple) +// return Vec("Vec<$tuple>", typeRef) +// } +//} +// +//object ResultTypeExtension : DynamicTypeExtension { +// +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// if (!typeDef.startsWith("Result")) return null +// val withoutBrackets = +// typeDef.removePrefix("Result").removeSurrounding("<", ">").replace(" ", "") +// val types = withoutBrackets.split(",") +// if (types.size != 2) return null +// return ResultType(typeProvider(types[0]), typeProvider(types[1])) +// } +//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt index 7ad67768..8af76add 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt @@ -1,19 +1,19 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions - -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type - -private val GENERIC_REGEX = "^([^<]*)<(.+)>\$".toRegex() // PartName - -private const val RAW_TYPE_GROUP_INDEX = 1 // first one will be the entire typeDef, the second one will be raw type - -object GenericsExtension : DynamicTypeExtension { - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - val groups = GENERIC_REGEX.find(typeDef)?.groupValues ?: return null - val rawType = groups.getOrNull(RAW_TYPE_GROUP_INDEX) ?: return null - - return typeProvider(rawType).value - } -} \ No newline at end of file +//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions +// +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +// +//private val GENERIC_REGEX = "^([^<]*)<(.+)>\$".toRegex() // PartName +// +//private const val RAW_TYPE_GROUP_INDEX = 1 // first one will be the entire typeDef, the second one will be raw type +// +//object GenericsExtension : DynamicTypeExtension { +// +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// val groups = GENERIC_REGEX.find(typeDef)?.groupValues ?: return null +// val rawType = groups.getOrNull(RAW_TYPE_GROUP_INDEX) ?: return null +// +// return typeProvider(rawType).value +// } +//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt index ad5e0813..5b8b9967 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt @@ -1,23 +1,23 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions - -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference - -abstract class WrapperExtension : DynamicTypeExtension { - - abstract val wrapperName: String - - abstract fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("$wrapperName<")) return null - - val innerTypeDef = typeDef.removeSurrounding("$wrapperName<", ">") - - val innerTypeRef = typeProvider(innerTypeDef) - - return createWrapper(name, innerTypeRef) - } -} \ No newline at end of file +//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions +// +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension +//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference +// +//abstract class WrapperExtension : DynamicTypeExtension { +// +// abstract val wrapperName: String +// +// abstract fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? +// +// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { +// if (!typeDef.startsWith("$wrapperName<")) return null +// +// val innerTypeDef = typeDef.removeSurrounding("$wrapperName<", ">") +// +// val innerTypeRef = typeProvider(innerTypeDef) +// +// return createWrapper(name, innerTypeRef) +// } +//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index e1f3c69a..861ad337 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -1,40 +1,40 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.CallBytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EraType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EventRecord -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericAccountId -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensus -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensusEngineId -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericEvent -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericMultiAddress -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSeal -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSealV0 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H160 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H512 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.OpaqueCall -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SessionKeysSubstrate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u128 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u16 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u256 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u32 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u64 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.generics.BitVec +import jp.co.soramitsu.schema.definitions.types.generics.Bytes +import jp.co.soramitsu.schema.definitions.types.generics.CallBytes +import jp.co.soramitsu.schema.definitions.types.generics.Data +import jp.co.soramitsu.schema.definitions.types.generics.EraType +import jp.co.soramitsu.schema.definitions.types.generics.EventRecord +import jp.co.soramitsu.schema.definitions.types.generics.Extrinsic +import jp.co.soramitsu.schema.definitions.types.generics.GenericAccountId +import jp.co.soramitsu.schema.definitions.types.generics.GenericCall +import jp.co.soramitsu.schema.definitions.types.generics.GenericConsensus +import jp.co.soramitsu.schema.definitions.types.generics.GenericConsensusEngineId +import jp.co.soramitsu.schema.definitions.types.generics.GenericEvent +import jp.co.soramitsu.schema.definitions.types.generics.GenericMultiAddress +import jp.co.soramitsu.schema.definitions.types.generics.GenericSeal +import jp.co.soramitsu.schema.definitions.types.generics.GenericSealV0 +import jp.co.soramitsu.schema.definitions.types.generics.H160 +import jp.co.soramitsu.schema.definitions.types.generics.H256 +import jp.co.soramitsu.schema.definitions.types.generics.H512 +import jp.co.soramitsu.schema.definitions.types.generics.Null +import jp.co.soramitsu.schema.definitions.types.generics.OpaqueCall +import jp.co.soramitsu.schema.definitions.types.generics.SessionKeysSubstrate +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u128 +import jp.co.soramitsu.schema.definitions.types.primitives.u16 +import jp.co.soramitsu.schema.definitions.types.primitives.u256 +import jp.co.soramitsu.schema.definitions.types.primitives.u32 +import jp.co.soramitsu.schema.definitions.types.primitives.u64 +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.definitions.types.TypeReference typealias TypePresetBuilder = MutableMap -typealias TypePreset = Map fun TypePreset.newBuilder(): TypePresetBuilder = toMutableMap() diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt index 206c1e60..0ecb708f 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt @@ -1,11 +1,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver +import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.preprocessors.RemoveGenericNoisePreprocessor -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.skipAliases -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.resolvedOrNull +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.skipAliases +import jp.co.soramitsu.schema.definitions.types.resolvedOrNull interface RequestPreprocessor { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt deleted file mode 100644 index 628a0820..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt +++ /dev/null @@ -1,5 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics - -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.DynamicByteArray - -val Bytes = DynamicByteArray("Bytes") \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt deleted file mode 100644 index a9318e55..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt +++ /dev/null @@ -1,22 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics - -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec - -@Suppress("FunctionName") -fun EventRecord(typePresetBuilder: TypePresetBuilder) = Struct( - name = "EventRecord", - mapping = linkedMapOf( - "phase" to typePresetBuilder.getOrCreate("Phase"), - "event" to typePresetBuilder.getOrCreate("GenericEvent"), - "topics" to TypeReference( - Vec( - name = "Vec", - typeReference = typePresetBuilder.getOrCreate("Hash") - ) - ) - ) -) \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt deleted file mode 100644 index f043fe41..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt +++ /dev/null @@ -1,5 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics - -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray - -object GenericAccountId : FixedByteArray("GenericAccountId", 32) \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt deleted file mode 100644 index a86c1a0b..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt +++ /dev/null @@ -1,24 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics - -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray - -val GenericConsensusEngineId = FixedByteArray("GenericConsensusEngineId", 4) - -@Suppress("FunctionName") -fun GenericConsensus(typePresetBuilder: TypePresetBuilder) = Struct( - name = "GenericConsensus", - mapping = linkedMapOf( - "engine" to typePresetBuilder.getOrCreate("ConsensusEngineId"), - "data" to TypeReference( - Vec( - name = "Vec", - typeReference = typePresetBuilder.getOrCreate("u8") - ) - ) - ) -) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Primitive.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Primitive.kt deleted file mode 100644 index 9c262e45..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Primitive.kt +++ /dev/null @@ -1,8 +0,0 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives - -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type - -abstract class Primitive(name: String) : Type(name) { - - override val isFullyResolved = true -} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt index 8bbd6bba..a3793799 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt @@ -1,6 +1,5 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata -import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.hash.Hasher.xxHash128 import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.definitions.types.bytes @@ -64,7 +63,7 @@ fun Module.eventOrNull(name: String): Event? = events?.get(name) * */ fun StorageEntry.storageKey(): String { - return (moduleHash() + serviceHash()).toHexString(withPrefix = true) + return jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) } fun StorageEntry.storageKeyOrNull() = nullOnException { storageKey() } @@ -119,7 +118,7 @@ fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key1: Any?, key2: Any?): S val storageKey = moduleHash() + serviceHash() + key1Hashed + key2Hashed - return storageKey.toHexString(withPrefix = true) + return jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) } fun StorageEntry.storageKeyOrNull(runtime: RuntimeSnapshot, key1: Any?, key2: Any?) = diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt index 2e0a8363..56605b5f 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt @@ -4,7 +4,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.ScaleReader import io.emeraldpay.polkaj.scale.ScaleWriter -import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.scale.dataType.DataType import jp.co.soramitsu.fearless_utils.scale.dataType.optional import org.bouncycastle.util.encoders.Hex @@ -74,7 +73,7 @@ abstract class Schema> : ScaleReader>, } fun toHexString(struct: EncodableStruct): String = - toByteArray(struct).toHexString(withPrefix = true) + jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) override fun write(writer: ScaleCodecWriter, struct: EncodableStruct) { for (field in fields) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt index a4aadc72..13757e7e 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt @@ -5,7 +5,6 @@ package jp.co.soramitsu.fearless_utils.scale.dataType import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.reader.CompactBigIntReader -import jp.co.soramitsu.fearless_utils.extensions.toBigInteger import jp.co.soramitsu.fearless_utils.scale.utils.CompactBigIntWriter import java.math.BigInteger import java.nio.ByteOrder @@ -67,7 +66,7 @@ open class uint(val size: Int) : DataType() { override fun read(reader: ScaleCodecReader): BigInteger { val bytes = reader.readByteArray(size) - return bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN) + return jp.co.soramitsu.schema.extensions.toBigInteger(ByteOrder.LITTLE_ENDIAN) } override fun write(writer: ScaleCodecWriter, value: BigInteger) { diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt index d2eaef04..ae2ed058 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt @@ -1,8 +1,6 @@ package jp.co.soramitsu.fearless_utils.encrypt import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -27,17 +25,20 @@ class SignerTest { val publicKeyHex = "f65a7d560102f2019da9b9d8993f53f51cc38d50cdff3d0b8e71997d7f911ff1" val privateKeyHex = "ae4093af3c40f2ecc32c14d4dada9628a4a42b28ca1a5b200b89321cbc883182" - val keypair = Keypair(privateKeyHex.fromHex(), publicKeyHex.fromHex()) + val keypair = Keypair( + jp.co.soramitsu.schema.extensions.fromHex(), + jp.co.soramitsu.schema.extensions.fromHex() + ) val message = "0400340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c6302286bee0000002d00000003000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423ee143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e" - val messageBytes = message.fromHex() + val messageBytes = jp.co.soramitsu.schema.extensions.fromHex() val signatureWrapper = Signer.sign(EncryptionType.ECDSA, messageBytes, keypair) as SignatureWrapper.Ecdsa val expected = "352e2738b0e361a7c59be05d52e7e7fb860bf79c03bb7858ce3e48748b00040c4dc6eadbfd526d35ba6dff1468bf61198cc5e8570a80ddc63fdebe68dc6016a41b" - assertEquals(expected, signatureWrapper.signature.toHexString()) + assertEquals(expected, jp.co.soramitsu.schema.extensions.toHexString()) } } \ No newline at end of file diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt index 47ea5965..d0485412 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt @@ -1,7 +1,6 @@ package jp.co.soramitsu.fearless_utils.encrypt.qr import jp.co.soramitsu.fearless_utils.common.assertThrows -import jp.co.soramitsu.fearless_utils.extensions.fromHex import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -14,7 +13,7 @@ class QrSharingTest { "0x8ad2a3fba73321961cd5d1b8272aa95a21e75dd5b098fb36ed996961ac7b2931" private val name = "Russel" - private val publicKeyBytes = publicKeyEncoded.fromHex() + private val publicKeyBytes = jp.co.soramitsu.schema.extensions.fromHex() private val qrContentWithName = "substrate:FiLhWLARS32oxm4s64gmEMSppAdugsvaAx1pCjweTLGn5Rf:0x8ad2a3fba73321961cd5d1b8272aa95a21e75dd5b098fb36ed996961ac7b2931:Russel" diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt index fa28dc0b..15611430 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt @@ -9,8 +9,10 @@ class KotlinKtTest { @Test fun `should create little endian big int`() { - val bytes = "0xb63f9b9eff0000000000000000000000".fromHex() + val bytes = jp.co.soramitsu.schema.extensions.fromHex() - assertEquals(BigInteger("1097877634998"), bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN)) + assertEquals(BigInteger("1097877634998"), + jp.co.soramitsu.schema.extensions.toBigInteger(ByteOrder.LITTLE_ENDIAN) + ) } } \ No newline at end of file diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt index 6a2bfd18..8c048a5a 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt @@ -2,7 +2,6 @@ package jp.co.soramitsu.fearless_utils.integration.extrinsic import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair -import jp.co.soramitsu.fearless_utils.extensions.fromHex import jp.co.soramitsu.fearless_utils.integration.BaseIntegrationTest import jp.co.soramitsu.fearless_utils.integration.WESTEND_URL import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider @@ -18,8 +17,8 @@ import org.junit.Test import java.math.BigInteger private val KEYPAIR = Keypair( - publicKey = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex(), - privateKey = "f3923eea431177cd21906d4308aea61c037055fb00575cae687217c6d8b2397f".fromHex() + publicKey = jp.co.soramitsu.schema.extensions.fromHex(), + privateKey = jp.co.soramitsu.schema.extensions.fromHex() ) @Ignore("Manual run only") @@ -34,14 +33,14 @@ class SendIntegrationTest : BaseIntegrationTest(WESTEND_URL) { keypair = KEYPAIR, nonce = 38.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), + genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), ) repeat(2) { builder.transfer( - recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), + recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), amount = BigInteger("5000000001") ) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt index a80c55d4..91e2c744 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt @@ -4,15 +4,14 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.getFileContentFromResources import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParser +import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.GenericsExtension +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadataSchema -import org.junit.Assert object RealRuntimeProvider { @@ -39,8 +38,8 @@ object RealRuntimeProvider { gson.fromJson(kusamaReader, TypeDefinitionsTree::class.java) val defaultTypeRegistry = - TypeDefinitionParser.parseBaseDefinitions(tree, substratePreParsePreset()).typePreset - val networkParsed = TypeDefinitionParser.parseNetworkVersioning( + TypeDefinitionParserImpl.parseBaseDefinitions(tree, substratePreParsePreset()).typePreset + val networkParsed = TypeDefinitionParserImpl.parseNetworkVersioning( kusamaTree, defaultTypeRegistry ) diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt index 231798d8..b29d2aeb 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt @@ -4,7 +4,7 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver +import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePreset import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset @@ -365,7 +365,7 @@ class TypeDefinitionParserTest { val tree = gson.fromJson(definitions, TypeDefinitionsTree::class.java) val unknown = - TypeDefinitionParser.parseBaseDefinitions(tree, initialTypeRegistry).unknownTypes + TypeDefinitionParserImpl.parseBaseDefinitions(tree.types, initialTypeRegistry).unknownTypes assert("F" in unknown) } @@ -376,7 +376,7 @@ class TypeDefinitionParserTest { val reader = JsonReader(getResourceReader("default.json")) val tree = gson.fromJson(reader, TypeDefinitionsTree::class.java) - val result = TypeDefinitionParser.parseBaseDefinitions(tree, substratePreParsePreset()) + val result = TypeDefinitionParserImpl.parseBaseDefinitions(tree.types, substratePreParsePreset()) print(result.unknownTypes) @@ -395,13 +395,13 @@ class TypeDefinitionParserTest { val kusamaTree = gson.fromJson(kusamaReader, TypeDefinitionsTree::class.java) - val defaultParsed = TypeDefinitionParser.parseBaseDefinitions(defaultTree, substratePreParsePreset()) + val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree.types, substratePreParsePreset()) val defaultRegistry = TypeRegistry(defaultParsed.typePreset, DynamicTypeResolver.defaultCompoundResolver()) val keysDefault = defaultRegistry["Keys"] assertEquals("SessionKeysSubstrate", keysDefault?.name) - val kusamaParsed = TypeDefinitionParser.parseNetworkVersioning( + val kusamaParsed = TypeDefinitionParserImpl.parseNetworkVersioning( kusamaTree, defaultParsed.typePreset, 1057 @@ -430,7 +430,7 @@ class TypeDefinitionParserTest { val tree = gson.fromJson(json, TypeDefinitionsTree::class.java) return TypeRegistry( - TypeDefinitionParser.parseBaseDefinitions(tree, typePreset).typePreset, + TypeDefinitionParserImpl.parseBaseDefinitions(tree.types, typePreset).typePreset, dynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() ) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt index 4efc14d6..2ef6fdb2 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry.extensions import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.GenericsExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType import org.junit.Assert.assertEquals diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt index 42d84e24..6f6dd4bb 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt @@ -4,11 +4,11 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParser +import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver +import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.HashMapExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.HashMapExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference @@ -37,7 +37,7 @@ class HashMapExtensionTest { val defaultReader = JsonReader(getResourceReader("default.json")) val defaultTree = gson.fromJson(defaultReader, TypeDefinitionsTree::class.java) - val defaultParsed = TypeDefinitionParser.parseBaseDefinitions(defaultTree, substratePreParsePreset()) + val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree, substratePreParsePreset()) val defaultRegistry = TypeRegistry(defaultParsed.typePreset, DynamicTypeResolver.defaultCompoundResolver()) val type = defaultRegistry["HashMap"] assertInstance(type) diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt index da9bd3fe..a6f06d97 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry.extensions import jp.co.soramitsu.fearless_utils.common.assertInstance -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.VectorExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.VectorExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt index 6536ef9f..a290f103 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt @@ -1,8 +1,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeResolver -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions.GenericsExtension +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt index b3cac914..1c85ce42 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt @@ -1,6 +1,5 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.extensions.fromHex import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt index 25b62b55..6bc070ab 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt @@ -2,8 +2,6 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.assertThrows -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference @@ -76,14 +74,18 @@ class DataTest : BaseTypeTest() { @Test fun `should encode raw`() { - val encoded = type.toHex(runtime, DictEnum.Entry("Raw", "0x0102030405060708".fromHex())) + val encoded = type.toHex(runtime, DictEnum.Entry("Raw", + jp.co.soramitsu.schema.extensions.fromHex() + )) assertEquals("0x090102030405060708", encoded) } @Test fun `should encode hasher`() { - val encoded = type.toHex(runtime, DictEnum.Entry("Keccak256", "0x1234567890123456789012345678901212345678901234567890123456789012".fromHex())) + val encoded = type.toHex(runtime, DictEnum.Entry("Keccak256", + jp.co.soramitsu.schema.extensions.fromHex() + )) assertEquals("0x241234567890123456789012345678901212345678901234567890123456789012", encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt index 8a99f103..53eb0838 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt @@ -1,8 +1,6 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex @@ -46,13 +44,15 @@ class ExtrinsicTest { arguments = mapOf( "dest" to DictEnum.Entry( name = "Id", - value = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex() + value = jp.co.soramitsu.schema.extensions.fromHex() ), "value" to BigInteger("10000000000") ) ) - val signature = MultiSignature(EncryptionType.SR25519, signatureInHex.fromHex()) + val signature = MultiSignature(EncryptionType.SR25519, + jp.co.soramitsu.schema.extensions.fromHex() + ) val signedExtras = mapOf( SignedExtras.TIP to 0.toBigInteger(), @@ -62,7 +62,7 @@ class ExtrinsicTest { val extrinsic = Extrinsic.Instance( signature = Extrinsic.Signature.newV28( - accountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), + accountId = jp.co.soramitsu.schema.extensions.fromHex(), signature = signature, signedExtras = signedExtras ), diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt index 6ab654ac..07791985 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt @@ -2,7 +2,6 @@ package jp.co.soramitsu.fearless_utils.runtime.extrinsic import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair -import jp.co.soramitsu.fearless_utils.extensions.fromHex import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.multiAddressFromId @@ -13,8 +12,8 @@ import org.junit.Test import java.math.BigInteger private val KEYPAIR = Keypair( - publicKey = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex(), - privateKey = "f3923eea431177cd21906d4308aea61c037055fb00575cae687217c6d8b2397f".fromHex() + publicKey = jp.co.soramitsu.schema.extensions.fromHex(), + privateKey = jp.co.soramitsu.schema.extensions.fromHex() ) class ExtrinsicBuilderTest { @@ -25,8 +24,8 @@ class ExtrinsicBuilderTest { fun `should build single sora transfer extrinsic`() { val soraRuntime = RealRuntimeProvider.buildRuntime("sora2") val soraKeypair = Keypair( - privateKey = "dd9b35e3288c2e2667313532f825f60fc5e8523b16d8e3ddc0b0ff5200b4c145".fromHex(), - publicKey = "83ba494b62a40d20c370e5381230d74b4e8906d0334a91777baef57c9a935467".fromHex() + privateKey = jp.co.soramitsu.schema.extensions.fromHex(), + publicKey = jp.co.soramitsu.schema.extensions.fromHex() ) val from = "5F3RU8neUpkZJK7QxAHJ9TGDjUiyjfufpZvaXDBEifPkeJSz" val to = "5EcDoG4T1SLbop4bxBjLL9VJaaytZxGXA7mLaY9y84GYpzsR" @@ -39,18 +38,18 @@ class ExtrinsicBuilderTest { keypair = soraKeypair, nonce = 1.toBigInteger(), runtimeVersion = RuntimeVersion(1, 1), - genesisHash = "0f751ca2d30efe3385a4001d0bfa1548471babf5095f6fe88ee4813cf724fafc".fromHex(), + genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = from.toAccountId(), era = Era.getEraFromBlockPeriod(44866, 64), - blockHash = "0xa532ea14451c9b4e1a9ed1c75ab67d8be659362c9d8f2206009ae8d62faf9fca".fromHex() + blockHash = jp.co.soramitsu.schema.extensions.fromHex() ) builder.call( "Assets", "transfer", mapOf( - "asset_id" to asset.fromHex(), + "asset_id" to jp.co.soramitsu.schema.extensions.fromHex(), "to" to to.toAccountId(), "amount" to BigInteger("200000000000000000") ) @@ -71,15 +70,15 @@ class ExtrinsicBuilderTest { keypair = KEYPAIR, nonce = 34.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), + genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), era = Era.Mortal(64, 59), - blockHash = "0x1b876104c68b4a8924c098d61d2ad798761bb6fff55cca2885939ffc27ef5ecb".fromHex() + blockHash = jp.co.soramitsu.schema.extensions.fromHex() ) builder.transfer( - recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), + recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), amount = BigInteger("10000000000") ) @@ -99,16 +98,16 @@ class ExtrinsicBuilderTest { keypair = KEYPAIR, nonce = 34.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), + genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), era = Era.Mortal(64, 59), - blockHash = "0x1b876104c68b4a8924c098d61d2ad798761bb6fff55cca2885939ffc27ef5ecb".fromHex() + blockHash = jp.co.soramitsu.schema.extensions.fromHex() ) repeat(2) { builder.transfer( - recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), + recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), amount = BigInteger("10000000000") ) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt index 980c172a..c10de84b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt @@ -1,11 +1,7 @@ package jp.co.soramitsu.fearless_utils.ss58 import jp.co.soramitsu.fearless_utils.common.TestAddressBytes -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.addressByte -import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAccountId -import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAddress import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -19,14 +15,14 @@ class SS58EncoderTest { @Test fun `should encode address from public key`() { - val result = PUBLIC_KEY.fromHex().toAddress(TestAddressBytes.KUSAMA) + val result = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.KUSAMA) assertEquals(KUSAMA_ADDRESS, result) } @Test fun `should decode public key from address`() { - val result = KUSAMA_ADDRESS.toAccountId().toHexString() + val result = jp.co.soramitsu.schema.extensions.toHexString() assertEquals(PUBLIC_KEY, result) } @@ -34,35 +30,35 @@ class SS58EncoderTest { @Test fun `encode key to address with 69 prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = hexKey.fromHex().toAddress(69) + val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(69) assertEquals("cnUVLAjzRsrXrzEiqjxMpBwvb6YgdBy8DKibonvZgtcQY5ZKe", address) } @Test fun `encode key to address with kusama prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = hexKey.fromHex().toAddress(TestAddressBytes.KUSAMA) + val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.KUSAMA) assertEquals("FaNDBF8erbEfQtpLuwpk6kmQrYyiKNzBQm6BSuh2fdCqajb", address) } @Test fun `encode key to address with polkadot prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = hexKey.fromHex().toAddress(TestAddressBytes.POLKADOT) + val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.POLKADOT) assertEquals("1413hCAKtGqnMJ5tXrBmzJDv7tGPbx7woXepx5d66xSEH6qM", address) } @Test fun `encode key to address with westend prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = hexKey.fromHex().toAddress(TestAddressBytes.WESTEND) + val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.WESTEND) assertEquals("5F4kYruG2VaJum5NaD8mr9PmGGGjueZoj2vLnndjYsQi6Vkw", address) } @Test fun `decode address to key with 69 prefix`() { val address = "cnUVLAjzRsrXrzEiqjxMpBwvb6YgdBy8DKibonvZgtcQY5ZKe" - val hexKey = address.toAccountId().toHexString(true) + val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(69.toByte(), prefix) @@ -71,7 +67,7 @@ class SS58EncoderTest { @Test fun `decode address to key with kusama prefix`() { val address = "FaNDBF8erbEfQtpLuwpk6kmQrYyiKNzBQm6BSuh2fdCqajb" - val hexKey = address.toAccountId().toHexString(true) + val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.KUSAMA, prefix) @@ -80,7 +76,7 @@ class SS58EncoderTest { @Test fun `decode address to key with polkadot prefix`() { val address = "1413hCAKtGqnMJ5tXrBmzJDv7tGPbx7woXepx5d66xSEH6qM" - val hexKey = address.toAccountId().toHexString(true) + val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.POLKADOT, prefix) @@ -89,7 +85,7 @@ class SS58EncoderTest { @Test fun `decode address to key with westend prefix`() { val address = "5F4kYruG2VaJum5NaD8mr9PmGGGjueZoj2vLnndjYsQi6Vkw" - val hexKey = address.toAccountId().toHexString(true) + val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.WESTEND, prefix) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c36d4211..85185ea1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip diff --git a/iroha2/.gitignore b/iroha2/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/iroha2/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/iroha2/build.gradle b/iroha2/build.gradle new file mode 100644 index 00000000..72d8edd6 --- /dev/null +++ b/iroha2/build.gradle @@ -0,0 +1,14 @@ +plugins { + id 'java-library' + id 'kotlin' +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +dependencies { + implementation project(":schema") + implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" +} \ No newline at end of file diff --git a/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt new file mode 100644 index 00000000..52c71d4d --- /dev/null +++ b/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt @@ -0,0 +1,17 @@ +package jp.co.soramitsu + +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.ParseResult +import jp.co.soramitsu.schema.TypeDefinitionParser +import jp.co.soramitsu.schema.TypePreset + +class TypeDefinitionParserImpl : TypeDefinitionParser { + override fun parseBaseDefinitions( + types: Map, + typePreset: TypePreset, + dynamicTypeResolver: DynamicTypeResolver + ): ParseResult { + TODO("Not yet implemented") + } + +} \ No newline at end of file diff --git a/schema/.gitignore b/schema/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/schema/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/schema/build.gradle b/schema/build.gradle new file mode 100644 index 00000000..9d25736f --- /dev/null +++ b/schema/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java' + id 'kotlin' +} + +apply plugin: 'kotlin' +apply plugin: 'java' + +dependencies { + implementation(fileTree("libs") {include("*.jar")}) + implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" + implementation("org.bouncycastle:bcprov-jdk15on:1.60") +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} diff --git a/schema/libs/polkaj-scale-0.2.3.jar b/schema/libs/polkaj-scale-0.2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..3b9e50e1e2484304eae189331b3041143682417f GIT binary patch literal 34149 zcmb4rWpJC@l5LDJGh@um%y!Joj50Gb#w0T{Gcz;WF*7q$Vu>cs?`ty*as4HFKV- zq|%SQ_oq+lUcGvCw-ltoz+papf`a;F+;yq&>Ei+V*UQHP`r|1psv<-uDJRAN_DSLY zE&SAZp-}G!dV%|~0Q=*K_Vln|b1U)xyw%YJU~J;}-%gPEQ3xFX^668|$NjVZ zqZ5>!9W89ll>Xy5dLwIqlT(q>xYU3k8sEIQp;6;+)$JJDLTVgL+d*QqK2=4=xmQ-~ z9}BE;Oz1B(o0P4;z+Nb?ZA-?duootBq(Oq)hiy%d#Y+#N#7?BO!sqSSWDTiSHSj;J{Zf+-HI6PA0=+hkQBoE6`CD8_df=2V8s z$I{vjmSs0E7!(GNo3T>Q6h%DH=RV!5fOC-sc(#*eIg6^}PZwLh#57B-@x6&Hotd5p z^d zJN_D!SSe37@h#~GDNDu}o>KG_v#TTpPbJGrP}~n=#*`HgT2hTS(Esw0zpR4Gv3>m8 zhc`(=eEP)vkABmyc6Qc(|3$M@wB=D1k=}~wHeEHPgy{9kRTMWIPxIXmO-pBk3cni4 zqI&b##JB)fZIbEYdUgxs-@v`8#87>SScQ{sc=_b74Dmrm8Yux?lFN4`un^t5*?rd>`8md3nbku(8w`d&9UcAnv ztFt(__iyy3!kKH4%0BKyh=J892?&b!&;y8Sl9doFqK{=5s%u2sXAotg(HjlD0_9WN zkWl0Y`U=RfTJ6^kc8%LQ*04WR{p1e5SbJ^D(vG#1}j zDR}oeyR^+ZK&AgzI_80B_fk^qHoBbl)G<8oP$x4iBt~7KdkTEy9y8#HcwBHK8xIMv zw@ogR+TN>+tQ6kWh&f`v`gr|WPBt|+7{0oPBr?@*daJe2ys2>fna3zuKKgt`3@?Ke z^Jrr6My~|42A3Evtpt_J=z+GM+V2}c#pmmZ1TnjJbmaSd&KWlbvAxk;=FI*P1L5l*%ViS>IqW@})E zHHN9C<^E^07rHlp?t;El?DONN6ue=l6nL}|k%t||jTWa1kL(-Q`$vJEcMt<)GIYfa zgk8KX<+>n~BsB|kw_0ZZdk1wPvA*(fhYf<^^h|-+0Y0wE3WZ;JD$f!^uAl(#N&{h0 za4w6(?f_W`M65&~y&7D#B%;jq!uU|-VNGJR#~M@vdn(4i^4?FZG?Q_v07}a?sQVi z28Vo?al%&9OYNM;YAeq++l{50wFZEzKLQXRNO30x^vwNY>jt#)>rk@N8pQ3cDS*V? zwROhj662o|<(2-Xh!|s{_oCkL(PVC(L_Fz(y#{(4hhngu3dUnX5?&oZk%`H7AG9=i z?m(r0xlF3mh+5tPuexGIez*V>hfDU_-X?AnE#>P&6=<{hqRIe@7+>TVc8av@1EdL_e)w{7L^k~f! zx#oD#hH?g|sxt}`zN}(?5yl@uO6%GJ!~P*CwfYl(gtMyDoo}RPB<|BB?x=9&rsNCg zHgZ5>dyf4n*4Q1>_ZDp^(FI|dL4-Vf!}{Pdfg-&#sCj-~VNQ>r6z>&YF=L)&OTZCT z8fw{5=?W4e_vZreSVjAe zeAIT99_o%mi2|V;eQLy)Tzjrhm7%x~+=KJE5mljmA1LNHyWujk?^twvP;S*=^Jvq# zKXv&A`zKB`<3+yFeBi_s7H0_-pu1;Cr7yAIsCH$cdAVcgbNs3)5CD|54-n z%*ht7yY?xCfjz9UJbkRot<$olXOOtc0fy++7MC$Kxv%LO{T z@H^PcM#P|4n8<@c-y}h%Avz6y#aOkQ$}_w7cVRf==K9c2U6dFAKSkiW&X`>X==_hwSm!2TUv4%qSs24{Xx9b^EuHlMqepk zGMv6RDnCi}n02f32$t^jSPvzAhV~0N0EcBzx}WxlbfQ4HR~p)(GyWG&77EIV@d+1~ zx#l)?dNE+tlHNoqyxH`mfk$)k02Y{xYP{CW>cgkDaP3SP7?Z+E3ILI$SAv5lvY{!& zb(Nq=_1Kd}b41zNp_8{&{EBNZb`mR_Mj zxJ5bl=CnDdL${k5@Lq;zcxrdEk1hmpMQn6%2CEy2RAk-++jvIqy&f_a^Ocyd(86A_ zc}9+WQsS97#6aId(O;YNHCnOPCSD2p8;?2J&sJ4gzlW1*xUvl5)I|3hKO=r&gHJ=b}~FP|8ywVn(SY2VzEHG?dm5)^l|v zM{_YL6`gc%7sUIpQbY`*wKB%VmE6!Q=OeHuJ&0+$MrIIQSzQ-pw8nM1(@#P)?(igo zMZP^Uvac5a^b-eTtgh(j7l=PSu)#+dXZC}6UVV7rKVzOU7EXV-UXiNo2lGVZv*XUH z6ZXGW6cij{prt#{{X)H9IFuTzB4ZsmyJ^MK=bvX&tcBtm4l_dTm;aC--| z%dVI%83o^&$?3A=e$#2X?b7Ax{MS6@C)g3onOG>IAWeA5LX{I7s#Y0xrxyf#evM9l1!WGJ4T}{> z;W;zSb_Ih!p*oWG& z6SFW)vxt6|AT+~PA5XN;W3bObH)~sgOy$6o6}e2+h}85hQuSh~z3EXwDp|@>whZYz zcI~DnO9y(gBxJJzzv(u=X3kyOixk*)6R(EbEZ`;&Af4JG@nKkoT}<+HHok@~Z_Jjp zPX5|?UucYNcn3GS8Y_NlZ8b>*|2gRlDC5aKMR??ELv4d;*6LoXmHsX~e|=%|)3H!Q z2n%@wnj}&WT^c}3GRf#1l-Oj`O(Qkf-2sRs5e|eig18?v3;^7*-p5T{w(h0+p16+HvH2(6z0+}?Du8v$^rV?r@^IYXVV+i$ z_;*$+O+eU}-Q(Mir-5ShSb`m6vdrMN z@LI?Ii*{1LZ9NaU`HWM(G_{CLyb6Yv969IF?n;0Ohze;HeS2 z#GU{%R2qpTHNR5iw=!#;^x%nvXn9%xxNh+Vx*NtE5oBt3#o1@YUqQ0s^#}SS5=3Xd zPPtNwh{}1q=8*w9E5DP-i)N!oQX@`@hC}mfuk`mab*7Nq)29<8M^l?m z=~#54T)-#JaJEmiNP8*Vd0cGk#_@#U~(p)oiu z*M_6-Q>r>t3h#eWE&7!0*rs?;J@HGVTxF=qwYFf)s+UKX$Ru=*x$pN8Z-M>8NT~#x z2hRYUrHn#yp$O?f;L7@p(^r_gV6`--EX*-ppub$hHeEa1X!Q)XH~HcqJ7wmWN}P$t zNxk6eY|{JmkE=Hj2KS)4jL{N?*|EWtlw=;CcQ$n|v&KwiCs^-Iw8`_Hla0<#OH4p< zI8;o@X3ONJ^VH_y%_ck8&b_qgNu<$qRfZql=!avj!m+(PW_)wiXSJBRJfK*$(VI%8`2c2P5YZjf$Z-tN754i5am;_wYZ0B>9lZ~Mm zd=>c5Gp^lrCdH-RnWv@Ec-LRgPF996xeZf|S{Elv=QngOAOGg?-pDHl633 z2VAlV53w%X^nm#81Z0KdQ%nq-VwWKPVgAT|`6sOJl71<)0<&A8dm6mkTm9tEsLeG#bz1mF>mNa_s3<&z4XlChqX zgOssJr&;o3@C)D;HQ*K^_PU9EDi$giOhi;Fxn`p-Lg_Z(tH0Z@RIs-gnnn>UYt3muxe*7ZnA5ozec>khoAe z+4H!;U#}rwr8f&-;fk_FGjG>PA(~om=PhI=fn8O1W@QFybKr#1qOoV4?<_7Mr9%^e8|F=qzKy)-5fh0 zr&Lt!N*>QViq~hS>$Ix}lDg!br5mhkb84_Z4xChb803O6!%L4J9Ttpo1Ab8Vf0tnF zY>E$Lm4RxMHh=30?Q+$3MS-Mk3eY2sSGiJs`3dhw*4n$(-oDK)yk5nrivP$xgPHU6 z8tt-qZh%JyJC30CYp}mOkWB?ork`v<+zT_nOO*@od%F0KyxHEYiLD{;BTV0a z6ZGUZ;=gTu7!2%(!Tdu3`6Ml>0bUNDXN_C+S^oj~5Hu7_Ah!pa$P}LtsS0Md*3Q+;Y%3!xDL$}u^Ii`rlw#G;f1-77IDi}G!>oAW{9%1p>7iRuXoXQXoio@C;y33qQj zg|2S7FF|dvS-FIx#+7L`K3qFBpr{vFGM`EkEvJYy)yCyf_X4{g&T7FivzcP+v?iBC3C6S>kYbSHWzH%)jsA%m? zwc(p8fh{iHXn|ebp&DbmH;Q%Gxy(N7396lAs!^kI34F|K26%2LuJvdmtu%pStTI^y0lfAWI#-&=Oc3z-#0$sq>wSA5-~9lBB1YjjKsFNpyt)NQ8`^lhOpD zN@?TpoOIePYWH|r2c*^UbPd(U)QZ!D?Jo@5lDjE}Kk?-xeMLO{gJk%AkPM#xpFH@h zh1tJn!m3suYy-U%K^nn_%9-zO>1wKA4=QX1VA9aBy2 z@7S+}0=+#uk^AaeX1PXYPhc;5?+)L8II&xtYKV-5WR7=S9(rtzk6y<3dO_{rdnXSf z!ANG)Qz#B5fv31F{_X;YWQrSvmLX>fu8_Pn((-ZF-ve_=lT_+UPF3ZG2ty=0BCUod z?KEvY<96XdYSp>ZN?x}I8?I@|ie9vR%$Nc;sXBQt!w{2MH7}a;G}#y3u2?Jere3G( zand18AE`k!uBvUKV^Mm^x;b>z9YLy^O_m%4J4RHiW%VlGXDh(kd1-^HM-!~yE#*X4 zm(_qetq$<2ER@?Xdb+k<1D%HJaOB+Ae{ef5lej(M4{wvxD=MvQh-HXp2*lh5a5u2N z={O`N$Z20$i)eD8nZ)dXvRPo=Zx#!lVHA{5=P9r2*sm$hkyc9|fSX2(uDYfFT$)=0 zYQtg|+La&Om#37v|CFWJK!9?3)ZBcJT7+kDu{SKirqQ&p`OJ2oUh>2D`kSSmN-_DI zyW}1)4CP32aZsExL!%c0H9~{=iWn#xxnmS2FGFjzB?6&}N@H*dPl%@D@uHHJi9v~1 zFvNvDY$@m8=Vzw4^D;Z<-nyq8MI7rFO>U5czJ=a_+CJM^KYplX*0g@}SeeD+>4)Qb z>S<9owzRc&%So=)T=;#P-&g%Yes_lDYcq9DIe`K;{OO!JXxiC}U$mo?qN>%qQ=kUgWix9ClccLP48 zu41=#2PvX-IZLi_nKS#MBsRvkA?@#|-&s7@DA9`6n7M;33aS@j7hj#U)Ot7u8T{U_ zKD}}@MRtF73i-5$d;;D5()&pWo>+8i;2?|WrxR~foP&QZ1y!36wKVAsMA<{7O zk1P#|dR4dgcFN{uCZ8F@q84$($1j zk42NlGF5Us@~a*5tMZamojF~PuAa8mXbsb?CPfF-`eE~$(|3y-v#QjeJN&V*O*Als z-DRLdVmmbA!3_^as>8N3VOTvJFX;=GbLzNw^;OI|yq*-L0Ci4(of_(ZMN~WRf!iJB zFLHY zVnW%Gz1Whi@+-m~GT!OZXS#`JMXo1J3pB}FavgwGEW>JW9tVNSsB!yn*kYQuqO|QndXD|h10PqH@7!hB= z|1@GDM;JMy4%r9|2yOCNcd~f{1blP`YZz|jS`Rx(*8$@LpR$pQ` zr!9s3XSX63`61Q|Y3UT=iZ2u{dP8ugs^+Q629&AlzrGQv)vhJC3?eNxWWdFtmr!Ae z$yU&fz1ixvvgx&qCa`Bgws5prjb3)M?Ad60!2vC}fGgtgwS2mIAq zyjv_c`zjZ96#$J29`Q<|F90~~p1(_#P32y_3xUCg_Dg91MUTl??o@w(IUGg`N3FJe z7lnS_ecGi*Wq#BbyZF5d0OV}3(PE3y%9vSh5U!?t4e8i}oI!T#Qe#=(s!CE{jxYf- zIWdOUDwbeoFU#`~CNud(C*{%~Xpr)|Ymmj`Zztd<0k6chniunEW@A3T@J8A}Go;!J zsuz9sG-UXwfZ0Chf3@N(R{yLIQ+%=;^KBROm7~AVLQ+DnkRgzj1b@;8^jT00$|An5 zH|;C1a0#~eBmZP+L-(nbp9Rc4o*;iEM7|)dXG*vvUK2e#w<~}>q}kIYjm{-_lZq1y zGKQ2SPF~;$)hNz5Q@op(v;tM91jNf#@8NtcBNo-WOktF_CepNzo+Cq?Hvh6@2B%0) zWw)o6OX2somXW_|>->___zNF4>+qp)a{nW4^;d0O-ro76APM-R#$KedDUT|I^lsBr zji+9ggeXvsrqUW66N>uzK9kw{W42_zEJ30T?)Rn5R9gxTj_` zx5Cy6VxS_rO>2pPOrOt3<5iJr;a zlH6)F=3@})emUU+tP42BGL&uIC|`IeR&=UV?KZ4b{>G@&N7K)C9c@In#5-Tt_Ir*) zR-u#EICVA#j8clqA}O%d8W3z}UvQC@e1#j|+iyE$g2j!F21YY0Fda+j+1dFNupBU_ z6>hqCq_*P(nfY_{_VV3z#RZXnkN4Y8EDS_hT7<#!o#FIs!GT0 z(n5PA;~}6s36G!bkE7I@`vK4nGL$10se_3D;y46GTEYY@aGTHAM|9FEZK5fcVXOBh zyI?3!-Qu%OvK{F)85l(dCpz|>aMOu66U@xd;U4gIZLn=<{SowxkM>ca1C*l+DkHy_gl(-w^5koD^ zXR>#(Q_Mkl+>5`Du(^q4BbP1vi`98<&14FsKOfx)?o%>WO%uA|-Dd*B@^tN7Nn@f1 zQ0VhQy3HjOUT&x0loGccLj}Ir+e17>qMfQ zPB_hEwI${AU8U~?0tf9w8StYNI0Px%)vIt3!c55JdrR2l?UAzmM=^MDZa-ZvZ7$wn zX;kk-7Kx%IR;^jv_SaZTmHhhkA=)?6U_GZ$I<#!tTva=n5BUbCW!xl>tgwW124K|C zD=plEhHzo=cF+jzgUC19=wlM})2?x@3%Is@LKG*-!m4eV}*S zOGvdY?<>sZf64NK53a{h$OGkyxEi)cq(4P;zov zoD7ZKwfQ@Z7J6OBcIgBC-6$M}7mzo~eXnL*qoCa1AC_x;lorGCpE?~A4!@4hy#rVT zzwKUf4EDxd?EzqQ0N=j@J1XBM%w)b>yNsQhdp0u5l(G5_eAYus~eCsXdi1vVC{&_p=uWE(~O~b77Dq zNv6OEiyXKID}QLOn?&RmiF+PNQ_m++<9oelpNyaEM7^}s1Q(DWY9oOfD6b%2FJ5`T z?^9oKh1Uj;zOfz`28|5En2ofmo(`wPA1|LCQJYZrVLOG<&DvkpY8C9VUBNVtR67hv z?Y8ocm??dVIfYf)EOqECtmpO^KWmw!U0-2u zwnNN1R(5`^UtIpXF85b6YPAH(z1Ro1t$sAJ(*Dn6;9s2vvUbKM|JgK|q^7N`td91E z(3VL`ilrnXSh%1l6M%B5l{Y3@TSue48P^B*=6Ce%`t+FPON#IcP+Q{G~KnhUElZgyhHDhcK;rTssJ%&tk`P}Z~KG* z(3@aOYoj+6nt*5G81hETebgAD;P=K6gv#+yc-OJ##?*8FF&TjgVm>0JAm~D~`;3I%8i43P2J43tZw|9?i8Ck9HukP_({o9Nr+XIlHxYs*7CcdXh%wE zVwCopRDSwA93PV+y;@@?o37qM2zsk&%_OD0{N#i#S+D!G5;NcU>}lOk7;a^nwen<2 z%Oyv{&RF?mTE3bLxa&$wF!MbX5<8ubB0Gz!N?@%5>>d;_Kw}6WLfC?0a7JdSZCh(e>UDVkN|{2AkZTFm7nO3(p}(sgnRvC+c53HX%XGzd zwS}0=e6^fo9d3XFSM#FuNqOSsNch1Ljp>|soX?`x5;GNH_DV8G;pwjvrngUcdkHns zt`Sq8njK2;o!18Dh`+SQ5`IP|L%KkAn7_aA3g|KArSg1U9iym4Fae{R-qk87*SGw?y50<2`0)SE->`n0BksSkek%IU@3 zzQ#YQd6sh&=KJ}J>CLS4taA3I=k{d}LeJB`$)!;WMCXp)N5P^a%@q-KHG=;3 zx&sj`GpwKoaG&>-XE0~FX9*iDVGNUkM=Xv{yp?^KP2Aen{~7mNXQkPkTp&Xv>MP$* z8g!oZW4~WuU#F3@LL2$|s(YTek$is{@loB8{O;C&!vFnN90VB(n>;H01o%-Nk^Y11 z5v-7qY`kD$L9+amEvMn&#y=qy^TOWBs$!Dv(Ed4Oq~4aS+kc8Zl=<;!B}&*Q=2^Z*<8mH7c~Og zexEeN=%aBZtlV<}{Lx?L6lq6X6oHX&i2G1GifGbIxBGQ)<2Y)pyZ|U|Iaxf$THeFw z4O>`XUO&S2F?I&e?+H^Aag{DMpvG)D&xTdU0upUfDaxo;^x+|v*yPJ$m`WPaZMkN_ zoqxb#sN1=iXe*gs-6HfPb<6lh(}7b7)^&3gAFwT8aUv9G-==GIH6T-Aae19JK>!~* z@p;&i+e9(}D$=z8uX!r&sOEDV88%n{DT8Nc`*U*3!b2NNdRmDO6^Rz6-c}2hdGWPx z-kBGhb#b*LjdgLNxM_2vr-y*sqD1G4b%*MQ#sC9JuR%Yihfm@@#^}S8(qf}{eAljR z#}Tw|gQp@oUVsg(izv=N){=WQS+BS1H%V2Zj-+U7J6F!PHCvpyf}1wc zSgZq9^4>uVR2q^TN7~43!uuM~R#jsC@LAPnMXSUk=*^7=2V$94yMVz3cF9r3jNU@o zH3cafX)wZe1uQA0Na05v><6X2Z@Vs7Jr!+r{1jw~)NwJuR=!=`$VH?V6qqYxj)wte zP!kp-Mgf_m9fCpZCTuDKbcmd@! z6{KG9!}ykMmy-FUFR~yqO4))tkvoAn7tB$=M&R^s(fVZO5tQSXEs|ImhoGcqe4db`kzAUSkeX6` znUk25u47n*{e7hOP%AD|OCdfjM}1*O^!FXba275sUkuWI0FjJ2p|EA&m`@jwH{|pmu|M3m| zF*Wno2_uRNO_3j2LGJ%vVf)t!|KflDSz-J8_nxI{qmC+$<_kPCHE4i>4_LEo>Lv%@ zSV~!eDMEs2#X^y0TzJaEk7uJNU(Ga8eBAPzo#uOun0^HkRCOL%^w zRf}bkM|@AzG~4jYxFcT#Rj*2kDNE$_6j6K!a)D?LF z!)n8M$_4C$gkDFVLH92YqZqTxpU44`XP2pA?8I6KBCC`3VadB;kY2zXM1PgnWwTOqu-PmF zM`r6vNb+o1@*!(kQt2z6&P;x{dF|=rb|AkuvkG6uC9|8a;k>b3A)~l2dtLlh8n%yR zIz@i1!K^4aJII&G5jPkcW>-tA$XpljOwRvxb&$H7OrD%zhsS^a83GYr9(IFs%mk^` zqmUf~>xCi^GzC#SPwFKTP1Fq)nSs-9sxa4Bq-aRiUn+*nRawsJn8+>C1Kt1#zVK z+4G3d!f!T;6)++1u=1Y`A{AL7;?k?9%>28!JW&3K56_He{N2kqCe0MX$knt{0S)|5 zD25qd5#{V7#ihU~xYF^#GV@^-OeyBVLxRQ3;@iE9YG#zNtVmq7d5XGb%Qg9uqhfl# z-Lb?o&pcQ?FueK*dqb26r^Q%OEpfv3%YN{rwECnHG=kW3IeH4 zz;nL57=!x+LCF~;o-m8B^ewVZ^?o0w+|vnql>4lX=|q{eTOC^1(0H0R+);SUyHCm( z0^2&G6Q9~orgOB#*rk_;CLV4kN76i?phQf^L>(80m4JnL%fT2_p{rEYhn@e}H~{~S zVe}F|FgvlLO}fU2Xt;bry!ks=&%0T>5SACy7o{ify-ynN8U4vsC7jQUT((*iq?*N< zbNdDLPc&_|m%NDkaPq7VC;wlh-anmO^{-mnzxnuIJ$t_Nt7q{hupnBN+qG3nVE)y2 zWEw(Jf!`vC6ywS7ly#HIbkkct)S>U#0;iEZ{W0feKV*KKMDCmUh4us>=X7L9CUHwh zlDl1wb4`0paZPW%TrD&7fV2iPxWMfJ5x_WH=Rc zTqbs_fgV|E_pHW6lko7cIQ+A*lK+rWKlA z)^=&@(Yj8PCEb{<-EA|KE!Gqxo~jkdDj&V*ATCQ*?tPhpv}}493K;3Q)xCmKR;`a& zPwhWb&VJ*#0Uc!nl5DmUeohsm@Lo4VFb~K03M^ZzboA}-=Jk62pbW~#BV#DpPhGFi zSuvfoRgs0}APE~@b^}Y%2^vz#e)8{Kzy+Y}hUu;or5ym=k2Dc097)IJ0xB8{LyknG zQM3RZ;r{2mdQIAZO;%dylL&ntTbf_#Q8w`7psT1UxwYMg+(H^bTbddTE$)~((aq$qvK(!v(###=n;M&iT=maq4bu$0GW zCz)%NzV;XQa)mwXi-~A*hlwE$1aVij_f<^PAE-B8k8|l+*C`eC9&CMy6x;?LH?Sm~ zeDobGxnrxlJ0JusWB45x9l4{@WGW}(O*@)gQ$0k=cLuHO7k;*LP#KWLKjy@V0|BA` zMOFC8Le%VvppW%Jm16zm5xeeX0hV%_@fP&Txv{7@?|jt4+pRom>+;+pm_5u)f)e{T z7qD%nEp$A%++=~}M@(xhfub+gU|);PZ4~9`mR)hu2SsI^e`L#T89kC0 zTwf8=e`gryjmv()7sD-yw*0mQSR5iwDYGRc<9IxMMt?=rGu)vVyzjT|0%b9GsrnE&u`73q(e5wtgY8%bQyL?sA)ETq~Z z!Gm2`Bo8PUWq=~x0CS_8)ECk;RtS7d`oqt)&M%18W04c3R(?@Ef_xlR1`&aVn8zDV zPg%=u)04}WgaRN~!z|big~p8lh5pze0JczJ|4dLf$zUi_0W&BTtRj@}3`3;DJFN`1 zn}dA65B9nHm)*P|Xy^pEC}p6D`#hY#2=h2nX3I@x9-EDZcTrL%ZR*ri z%?%!)o+V^APstov2(P`*v#~hYSiy-t9wINj(hzI z#}alE!16Ub*>SP=Ho3dPs@N8tHO^k?7H`Fg510pgm7|a)r^;~GFzRa*?sD!BicAJpva3X1*UNN>zh_yymxu`v&9ensTDGg zVNCeNc&V7;Z)@#MR+tRb z@*oI^2=}oWC7$E}+!MnY`c^aNj^BgKx9_+O3weanCq;|ft)ZzZU$j^8Jz2(YgPezV z)w0zX=}kqOo2i>oXX?R)ECj$*1*Yn3>4`tQ8Tcn zYDk&R%5Fz-mV)}ofEHQ=O1Q=s#hDfggNYl2IGgvP$47OuL{^X{!F*b_&tgSQk)%X^ ziRuKIdk!>V6+zf4_=)BJ+X#F)1}U5^nP`@9mzh{RRsdE8PxdpRrQ&2$sS3o>wQEmg zsh!Axo#nZC)~1Ic;nRND+cPrJs)&*hgO>S(8twdNcX%eW&`7@gef(LXBV`&Em1ESB zj02;$GF(2^pLE=xXJ^*M+Xln(7`UZ*Z`D1pO5lh?cw=#10-Bi(kC~{{X|fK84{Qi? z1m~8)1pYRp`4=UIGfA(&`*5O?j~>PUW%T1;(el4V$%Jv+c|kPbyG14^XE8i{ilaPi z5Ub=qeY>EgiV(7dkXi?n)H13W8hNYh0Vf?gLvOM;0F@L2s_q~U$?Ur#PJjwj1{Y?| z%`=bL8KFRrH$-iq4XoxyL+p1SSkX$Fk9ln{SaO1NcjJ8HJtpB|A~5Vrroyod8_0c+ z6?8b7YPi9^lU9=a<<5O&(?xi`ixv-3RbEM)D_kz)(hg?l!Mf1aZTw#>W=KzV9^2ST zf%bAF*byTR1G#R6o4UY8Ic8ou{e@MflD#YPDBGMI`{83D`SEk=odpXt7Hhgf;ZGDB zgvf%vdhvapS5v5g8o<68ku<=24>lr?&+btAwUYE5C_xOdXUVhKsQz|rD94e-J(?X2 zo@ll^m5-0zJlnEr6+A2#ZboTp=~^jZTnry!;QCUEz1kotuX%)T?(XO_fbw;n6b@oj zdU0~#wBJHLt3jhNp(78`F(}1qFnLP&Tb{L;>~U3qIs1$fl)DWD%3n7|!F_ zGa_M$kT1JN27GvfkO%upHheZ|AD6adOdJU}?lNVAP$I%CTWF1>v(4U(!pzxFkX?Uu zCusGLk0xoaEHt}VI|Wm^_ef7WIr8;9{zVJb@+Lcpn7B4`jwKPla?zv~=U1DJ*}IFs z6&C-pwcoR)R)`d2ry14gFA{-Z#{!rFy07YX=%%L>V%+4DJkJsZmfFAKWuZ8_-175RekAxWbDvoy!sa5+@}x2O9EQg*oB(p3u?sNSeS?WDYeh2NGwMw`X3` z#zmG+Jte=IE>S}S&;Jq>%vr0;ioe8w#l<0jDWw14>>KGu&qDBqnr=-7j~N7qlY}8J z_d&7Vw?UP|X~Efaww}!_=VKi`j%Q+*W0YVi3PwA~VyQ*`ijmk@;u#-f^7(*%L6`){ zY^iCqHSizN_$Il?>fn&{Gs>V%??<#VF3pAVp9$LJTt)4nW=|gnq|r*9Vc!f_*uAB# z`&Oi8VYg!iJ9##p?p(u)=U7hLARMc?#W|G^xWr?iROmVgtZLEtS%Ps^NM@})ZOK_g zzXun2IREl9_=Z0wAQ{AB7h^=HPHxtxdHxD>l_m!9gHsI54DL5x6w)_Hog><*0 zIAYDj?xt=&6>ni<`YVVrah)iNyW9&R>P<;e>GGV|*yeT;4m~pTy~dbOD#sH42q}7% zwosIfQeQ#oPQ|i;KAw11>ZT;SgfXw*JM(>)(?Xz10P0x%D5)v7Tb-h%p9?FJKCddA zGSgV;D?yX)K(&cI$m{}mhFOFR2#2u5)haG?dAuT#% zbbps9ICPcxeQX<%dlv44j6*rBbva|c1s`Y2lNIp>#ydqKEr$f(VBV}IR25&EN?N~r zWZ!RFxR=jiD+IUm7h((*+y}(huHP>EvkWf&K2H0WmkC3bzJq@ty5c`Z^uJnN{%|j4 zS^4$9n$CF~>}62D&R-&$Q%zz%^uq_KD9{iUO%hQ`blGI0TQh#(`OI75TR?W3LRm=p z@mpzmL$hd6fcgA*_v-9K1_w)rfUoZ>qyd-}J1uV=V6QCd<8MOTO$)vqW2n(~*49c< zT9*k9t%DbAouE!^+EYRwM#CI*oQ?{LJsa*cl&nGX?cR$P-tsx6U&W;(E%8u0ABIH+ z3E)MpUO|IWk*G~;zWN-WTVv^kV?HA>gVyL`L0=V_Y*N2Z7Q4e+Jut5mm(EZF)+z$R=-9K|+eRnLpp+fVL|K0NEsF08by_>D8< zv^u*E3Von?eB++bNdi1Xm2cWKol&GI1^4YKs1%%mD)Iul*aD09K}&G3UlM`ThE$(V z2Uvc3Me!#;GH853du+gpWJKyifKW~AV!N6Or&gB18_7+faWNX(jAvjHNcXubay9Rd&E(z`g2u^T!_u%dj z2o8bZ5Zv7f5H#>NGxvUEdhR=uzZR>zSgX(8b*kz}o!ZZSm@+8q*fitY$vHdLw398Y zSpz8aq+?kPtyHU$&`RuN!v~Hltw_|_?KrAnE@>(_Z{Jhs`(d+vShTEb_bb`9dDAgW zqib)s;YW5)OhA5hh56U1wmDUO2^6sBRscRz|K=4E0xR-s46FludP*DUrYd$Us*9s-o>!Tmpk;K-AXIj zH4Kr69LNLQQFP=}#2ThGDv=Me6d=>MQI+bxotkRXy+-n^mt+dOZhws)VN5$7JMWRW zPyVeoFRa?cF$NWCfHicR2T4l)a<@VOhmvH44+o3cBOmq+GT~5z2A0W3IxxkHCGcve5SzNfM4m`YQ z)j8MYXUQqwmL{oPJE>v);3!amK;JqRdXF7P(1eIMb!2l24gwSZTW_$kouYZgnF3(zrId>WC7H> z&hxV%#nCyjOg+Tr)%-^2PiU8l6e1-b)V!|vG&sM%$l$0w%gMawF^4puLc4|`m2A;( z!r8VZh*HG%%v!aqbe`5VY7;~bPhf&PHq+8JPY)A~TruJF7Z!r=+M7Yv!qzj00*^Nk zhiwm_WXZzI{u=sCpdHRLWD+wD=2Q2?2ZJx&RIEY=!e&Wt0tfsC8-?AU7VWOBa4kOg&7OSg?YP z9pxv)GVz_0kv91!dAKQKotKVT#H0|Dn!M;4RJ|KGx4(p4Klaq4rX^j+z%_r~e-9}8 z&wS`lp~|oADqR^k`&K~WQ|7VTOJcWhL(R(1-w;Dk>Ip1HQ6Ulw=_iRQw@E9p^?NH3 zF#!&LA1oK8K{V}w#`LWoE=QHvax0(9EW)h3-SgoN^7D%ncDjXHgSCY4d5xM%Ytl#_ z40bw8twx#t<6^-ccZgiAedM8^wnVUlR_Ohh6J2d#dLeBi@$t?(uI7dTul%Z9wW6MzCXoB2#gRkuBVZymy2vWUJ>1KH` z{=rmDyN+P``a)a(%{?FBM=Mgj*s#uzZhrL#h@1WnaJ>5KJYXD0{i``|a=IGIPn1XF zEBvw82ejc^0Cet^Yv(UZBUs6jcT1$}s1C<6Dg1rGHUz!#^# zx77Kos`b~~C|_myQPp~1@3OgLC+GtgQkWI=^I4jq7=pj(U38QRa}o7egVpS0zE`&#Na_a2$R%+Ai&(pJc7cep2Is>EWz4@oiz#SYejso%;NU^^je*Qa5XIZ!2gzU0U~|&1%sm z8`W2{RhIETVtdBP1#ZRwbgC$YkE}SZvgcu1b=%h2sf8M$v%^Gp%AtK4W`m4Z9BgD- z)UaZ>`%g&RF@!axdP=6H=nhXjkLpQwn<%4bLt5>S!~yV_og^r?3vZEwWf?UBPX%xV zEYsLB_wC-l{Nc7xu^$0>sXh&3T#0u&cl35?XJd|0V9I~kLaT8kie|8RBv(zc>hggv zY>95tf11&+%#OW;CkMj5-^@cAi+NI|4G{u@pAnvg2;TRjT-k?d!mgt1)*^y$F zoCuP7F_tKk68&nc-Peq{+g#Q_P&IimDT8&W%e3#DG> zA@&#vEGn}3o!c+bB{U|kbSzUveH{RwN{&B=3XsaVJ@m-DO-1wv}#WeeHVoCKB zw(&Htc{U4pV>g=0-Efo>q-=|kx)2s7FuqzS66CWA)f>d_ZT7MSOvZywNdHlBXLaxu6 z#`I;Ykje$e^rlOBM<3w z;=o2=q(LW>1C5VKFjT{ItN2^>nR}^k08}qQ^kvpV@oW<P14}*0_wY(&E|;h(3_a@RqBMi{ zYr2e+el}Q)3qw@-GbG5@5i(n~&&^^r(}*>5EjR_}Qd$R(&yH=x@|7Reem6U5Z&(HQ z=yu^|2&@uij6z!9X3qL4t!pTT9k^E@p~KFt&YDI=QIb@!ZHUDt|ISW0&%#VHVmwhO zCHg3n2b_m27tx3e8r%$GoviK!m^!mi%0Mhx9N=E?SSiSnVNrZpLNq^Qb(>NapS0F3 z>|_i1X8pMp)j8#O?+Wr{1$FQnqaCIdlF%ONa5_{GG>f%l@{H=rC8;HPx-zK+nEnl0 z)P|sLv{{2GyjrwS z@#lq79plsQr0Oe?Vj5>_SNvG-vH7oO%*@b4&C>X9x7t@SSN$&1Qoo8zezZ=rW0`e7 zYT90RX*)Wy@%nj3>rKtcEzb0D^&Q~MRbB#yBZo5_a;c553%dVwT?B!UnXy zZa-+<2tRX0xd6^XD~vcK6-P}&U$x5&#~Rk0r&_O}1Q%T7n*LfaMebX9l3UB_FpMbt z4{_CIxjvM}cL$uQ4Q~tTjJT?m$_M#s^hzuT>1z~Y&QwcShz^ z=hM-#UJe(}vJAAok1r{r`E?)uxBYUyMvtOipTj3^u8%#*oSY7*xY9Fq- z_%0=I9{j8ieyqlhL5ISP$DCNhgSV1xing#cb92zA!<7b5B%l9U|6-XZB(-*9)jgrI zcq62gjee8(ZZtbEeP@7o_1$ME2nNV=QC12WYh^W8a}^WX>ShCm3L8!GjBQyap2KPQ z37V|s8G22p#22_YM=%T50x@wHZ|y!woaq`=M_1JJ>>kC=TC0uf?UKX2O4loVnI2Q8 zf2PWO9$A%P3!_+96H5Fv?OCuBj{0-*I0TJGMq6eq z%jdW=llr(bo$T7Yz}S6v9A|*atOxM**yL%x&o^5!B4jFQjQ8m&O&|Bes%?3%!6_q_ z_$TY|#UtYKv>oOwNNk!++R=-+V)ydLD%-0kDI`*jBix?XS8%7`jku)d-I%9VR~a8R zOFM?z6pPiobar!c|!faU!E zxEvb*qnERdb+hXh;%q0(1c;52MRf{LXqBbhMxxLIn4yckhutsn&e7r=A&hQbks89DR*Cv^*ZdQK2 z@kwa?oVcW=N&}N8?L!cz6g=OnS(n=ETx+Mb^4bm-1-d(#Fd(U}%onE!iGj6d-KOo@ z+4Sf7_BR`_`cdcAl{R=>L>=Dl6h9|S6JGn1nGRHFT>tM8A*#(Xm3!d~9q*IR$qlM< z4X>R&=3;Nscf`^(kI1rvnuTc{7-F2?m5M{O=c2sMkfzVMSMWIhAmvB`bsq$u=T)vs zQ%8tL$;~&kW+hBLi1K4kJszqTN60{N20Ms#Rf2^7%XNLY@xIPSe=}C(DqmLQaLtZ! zG|CRo3*xvg74p;m4vN(tuM*xJ1mmQ^G@vG*ZoF!%z@~uM>o6+zSax9XrLUiHsmQff za{lB!)`f%L4<^KKUCNXAY`kn^Yml#VP8GUP?;N@i7fBu#b9VP>2og;8MeNv zV`JZ2x8c2yeU|;Q>jZYHZJcg{$xGkavwf_GTi_kEKimU4hIh#&{?WKzmb0!lHfB{nw`?G<&@5e}ee&9t`MYxZ04y z;k{JoZViRRWYlRTi>p^D9k=pT_H>Y>YL$;5Gbk-LZ2HDyA?-<&g6z_}FGZCjk{w@k zW=hPbrrY^Wm)wUpT1!*{|McY!*_hebi)PuVj%2l>Ng>iH8f(w$9*S)9d4HFw`9_2q z90`M0r42nrFeJzg_8oFYb6gYD22Moe^|mxQ8GM?VR2{b`6)hO{-o@{HI+?J|K~C3qwj-+-GBkMd?isX+R^4buqIr_H%9h@9J03tOXu7dEw6*E4IG zD@Ea~-~QT}^tip4Xamma*MW2Te~H5RPiOL{Th6byMY_s7aM2KnPXrt{L9A2mB#@Yj z0-_qml~e~px%trAx3}ai)MsI*^xEu!^`Dr>hV~I&;< zWN_V{Tw!Gunga-G*eqw0<*q=K8Z1=v zn9&Ms21~cRYNeIp){mIiR2^i1%``BMSIVoSG!&AjWj+c` zTK}SvzvouYC}zQKx`J&QKY*3g)ynND)Rp72twHim4g~;MgA%!UQ`3XQw=5nw=Cw~6 zE*vGZb1+A}h&&h_a8o);KQNxZnn9U{60Sqy(ngtVtXw!&FvN9til^fnDcL|^xFf^% z9CpkL`FTp|BzjqupMRxi!bA|^-Q z!~E2i7HU4-S4P0^;KsRjHO1v?!RK8ffQUo?NNjG*(~lDro5d!TLMg=+bCv)>U0%hV z38h}w9IXB9L2jWJe~nMYMhMTv0=YoGY6nFM$67KaJF?iHKLO|AMQ-5mU`h_h3+^JZ zephe8j!&PL9}u3}!(#+8vs|IccbKSaJ_u8#IVkJCR@zUiuO<#B+v zQJBcaVuEx(tfp?jJW8z&WeTmT-lS%E3d)9MG7PG!CoF!g#`>xLLq?9xLV(@kCN*Uk zvRGr%P^xi+%WQZkec=Ae=^XttT>?5)<8hxPrZ~DQ6Gr~Jlt2O66%#%5R3x?l0n^oZ zb5Y9~0ROZb$IqpM1}@N6jicvHoet8g3`_ubuqk~w?%Rd2%{IFor-lnS5t0(^Vk-C# zxMHctCG{q8R}oso-U<%(Itvc?K;=mhTaJ}RStjET_84<6wc?f<}EEnO(pP53LlaV%9HxAc;dnNd4nWahF z$-M02nS;|I6i374WdOdAMUsuW>0(d**hdZ)1bjumM0hcN` zaQ49!f8_#c@+R1zw#;={<=V{|E9avckr%#xHM99acDgicZWF5;%#UOY0)O-KsTVCs z18f)JnBppnD~HKlB`#i6=mmd6|bBkyY0k(O)*NUM9F>AJo(CT4lw(Fy?|o)*RF zdU^Bwr`fCW36I=zHviO@at$OQrHO$%k&filU418I@_3!?EXjAi<$kEw-=C9fKJO;~ zgfRUTcWGmf0V;@2&}S)E8*veFYP73=@&r(E0#z~a(^W(}%@Qb$Tmvy<({mMn<-WxygadWS`2Moo({Fi7G!;Lx+xwj_xmp;O($Rk(!)tS zaR+k(CDZrQKkYs}!^+z2bQmMz6z3$7+&p&i8EQ{Fu9-{A+(w!aLI`4RluL#smXn z{*C@b1Q^0-^y^tDQ@3zM{f5qGG(f;i0AQbig{g$0@2~FA|4gh8Q_q|=S&yg9`LdSS z$gL8xI!~I^w?z=nqNZUtVVX@&1}CMKoL)alDo%KU-m3Zdw(a=#=3@VwyP0@yRVl>k zj}Oc44i`sm+YHA`+hz}E8)9JlCycPVSeXH@@U~YEQ3$$uM0v^9(ow!J9d)+2@^^G~ zF|?*`OOVB_<-s4@tttk`5ul#xVJ>ZV-jb`V{5d!jjgm*$Uf#aq!vWI#Gj($*hihx~fYCZ&A{&Eg); zA@{muC~T`j%AA$=+zEME|NXkGRa(*L$a35Y$NT$)Ae+#u2(Ts_vn-CrhK5`xZHWr+ z-eKEPMSN9MX=AGLu$R3?(a*o!_ZmwE7ly;CVk@DBdy-c9PnT41z)~Fp9FHr{)zPz; zu|r>I@8!45LHXkM;J21o$tu%-t=7FiT1hc|RuZasAyN18tFqHKcJzvtdg{Iz75cza z6}cw9(W!|!f`!44@EWfn1l=v!%Kh02^gB4`!F`6;bQUo}#ppiGmNsyVqMk!HYr|$W zNqP(F!1v`yzbGtaoY_BKQcSzNsTG~UIIcFPi-#!!m;O-;Yujxk^~^VOgMQUqV_x{^ z;>e<8pOSXoNTk;4l^JKT^G9*$DNzONu&BIZR`IK!(j-I61*1jb{;(FCXUKc&(TXA% zxOSpa&Ltn%4A;u$ArK;GI(iF)8absKL9RGI-nl*&G&%!-_ad z({pvTFee`+ucd~((T;nNzGs|;Xy2Sn!+C^Z&;ZR|D$)PiaE|}#&Db#qOrd_X+cT<% z0gmQDYEspJHKH?hb`D51Ihy^;IE)B3(~D~@a--aCxh%HE>jy(;AERo1h7qm#+P370 zk_g7G155Eb3Y0Hc%Mk4hj537-Dx$2O#tW3s&OZIPW6sm$*hkm;+*+iq(KsNhQ{Lei zUtp<^{jh`*lH?M-CTPKUv8(Rvo>WuB{eV$s2!?%o;vGg@$O46oa;l5H+;s`56YF;= zL9$ngVj&0kC_Ys2r-y8-+JnIAZmP)=dvK9Uh3*okiW8N`eHwT%q36tutPggt^;gh8b~^ ztl6;KM|i;`r4m{#IU+(ws4c=UeGxD@UlA|XRX@j}{<5>MpG)OBpX#Ty`-K2UjMjJ= zMvS@oF!9t70HeX<=OU`OaPUdHmtFy4^0km(I?CJJASKn2;AS){|Bx`2BsMKNf#-3q zI^jyVy1VImiv^gxH3|w-TB0{2XEidRCh%rX#KtrZgQ2uX;988!&<7P^zE*8kTUcnq zP8uA=_9;<-e65KJQ6-h)ip*;eA=LRlvFD-~4xaL-YV7b7il;aA-s0gN)LGF%*m5BDtmSRf+QzkeOL|#Z zr#E?pt3~FYN9tkz+@>>nhN-4SzfxU1GO2f-oD#yX{CdochU!LES1hxrYKIm5oo4}w zpaZOnn`c3S{24EdPP+wOb_LjgjCsa-s{e{ZnnZBLJujY_V*pdQs_l4VRBs70ytRrx z@{icOUWKk_qF|mqeF_fS8J51sS$yC|SHs9hT$~L2fU#?;vRb7P+YoDFP>L6%dU^2dTku*?} z=}JF9X+*j*jc*5j@q-V2E2EeT%ArpT*XRu2ic4P^){Nr*p*1Ti~clOsD+6nR0_uoe;&7AJSBChmF4uk4|uOE3E`4@ zp9ZVwUF_F1`!n8W4d}iaqDZ0ef(O(vr*H7mUsU-My_q=S&48|IAnL9Xrb|HSehI1J z4=21}y{L!V&Eo4Sgu^)W0gD0V6sL7MY)6F6p%iB?v-kUYl(`o3u(uv~DUY0=%~_6J zf7=b)9%I((Ib`Wj&usrWL=UIbn2h2nmn60qt;t=|`|`fe^@dCOy$j*e3qCx%2Ri4t zmSZj*ip2N0@xIC6F41?^3q~oQdfBwkzh2~3?Kx%)e6XSjO&GY;+B-BAqNiNP(e^l^ zMvA$gP;7SSv(!wz(4odRK*NG+9f1JErX2z^g>3GPALHpZK}mG=z-y$_nj$obguQWw z4tG(iYKIRUXiRH)L+>(`@_}o>pd!~&zvgx1?N_7J>zK-X>{4tZ?G%bC_GL_)+H2u@ zk5i}^Tr9Z)T3xfM2%_ojeF6Om7tI@+&eV_l9I^Lx*EfCeJ1r*|oiESjca9(@0qhE5 zE!N=sEHjcNa;WCRSpjOPl$At&^tH|J!9!VQq)Vn@8CI-n-(-HS2XLF$d4kKZYP>4J zN7YE^fYUlm^X7OiP-dOf}xc@&BvtL&|%G85j<9VRP67UoNcrhioyGsS) z%J6C@jQL<%x+eQn%$>lsXET4b$FZrDV=J!|V{7|TpkoqPG9(@I%~GRowGSoEXJvQw z-e+#ieKHikjLu$U5NNODgrMQy<`O_ z$v#1_+OxQ_v)LV$3b47V`8EKOqGw%6;1w`oUM#-dbxFu34C*tbyTD<8(2w+gZem`& z3GM#fsio!1x5J}qN2^>*4q8GwiDawcvGVVbem>t@FM8G$WhxRbD15unDl=G|{LbEy z5h&MS#h=D8WRu$}>MDHlN0!|^qxKY)H{Zh}lzvTyF%~Il?i9Z?&M*E0vHK$%Y$|wk z5_?=q>Ld!W6N@y81ko#~u%cj?3OR##eq1T(#-Ht)yq)sm2xiJMuFN>WySg8!KTnmz z^KX^wDdbWMmo=`$DhTA1tjc_xa*LHFXhoU!?~}rPPm(R9e}&;xCJ?QFNxfJ=0!we1 zN2s~=oi&e5>ft>cjp9{69t%I8+(;n?Y3Hsv4VMgUViuyrx|C8`o2B5wdUL*ZfkdyJ z_|!}o2d7(f7?OmhQMa`4ET_j8F$KJ_*4)==BX|#GBa2{1@B!~4ZGA_nI`~nNgNxqL z2*KR9jV|`YNqniB0V{yMecM3N*~dsiqe!%0s()rOTz(a(+Vm>e>LUx60R{_RG1e)xiCAUk)$EwiLxo6#d-Hx$T$eurjLb!7&3v#QMGz0Q7@ z*3+(kIuCc$xrp+@DsM}AM?*eY-Inpy+=&cidnb?V{aZ*sPJ=F+nY88V4Hvlgkpfg# zr1!>Mndog=lvDEIn0dj^YBIorSCd!)yKw(4LrWr@8!ZzeKJS*z?AO=@Li!q&X*+ZIkU-& zQbH<{&(71vLbq4#Yp6`~O@?nR)ljxj1f7 zTed|Tu8NStvd*#vvlPv?i`=Qr@V~sgZlhR4TQ_9?~)0 zMOOm8qBu;|+FBhp)On2j88e$gM!n(@H?<27wfu3;!NJG7fvuL2>T$EpmI|t6Pqnt& zArC@SH`_|DOvZg|1 z8%-h?hAuzajWtrV@;-YVyxKqh$T-S3nmEmy`j0UjbmCkF#TfX7&o0*#S^0$7Sd{(D zVBN=O+*7`KsT)+d3dE-%W)aA5%uMUgP76{+BEO-xYl~!17t?FzeKnU{ZjhJb346Pc z!DdZ6)I|xqR`jx2JP6P~(nWdFVYu=WaCaoU@)7nb`K6CQ9JG#%scgzJw0y|o=VaB! zUYjgWY;CpGf@Cx7TeUHvn)$>kFZ6V_GX{qm0l^x-L3153%&*Ofs~SD*Dfn9A^ECD2 z2PZ6Avw~7sjfpTq60{S{>_({M5~Mnl2`zX!_U3A3tt+KGeX^|5xmnWU!zJkG}@KP5NU4uA={E zdn9%S?gMkL{!@X+46uK0j|Gx}yTAg!By0VrvXA*-|J)wS_5pYQTJ}GQUVnvnRP#I* z`S0;QW{3TAdxW?H?*2~*hd*+~{tEQ?-r%v|e}PE;L;-$20&xJBKK}v8{?E*@pm?B} zWB&`8=i~NUcz@3$3(5eR$MlIo4tVAM{fHkms=qE&g5rbbm3+d-2L_h?JO1CYOo9@C zCZu~J5CgV^e<%1q($j&`fM(r#qUl5U9U9OaT%h=%NsFHFcaVMuA2fv#C_ZRDlqdW{ zV2bB|KTUtW@BODM4VpmXiGcw4aP=Dupy@O~s{opE;fX*F`*#TbVh{6AH32n#eL2;a?E`4*uU9x z2I1eq|L>^+iSh=m254aG6HT1h@6bGULH~5cL4zEh@OLDB2mf(A{wI9UaIYtPewp9F z|9kKk=otcy2YO=glKUNoUpwi4stIVk#uJYOaK8HQjan5ndIPi~pj!AR0$JtXA^=s! zgA#yBU7rYs)qjWJZ^Bnl0#H@t69I(QZxJ}!Tm03H3X}mJM!OD62Bh!<46g*y8i@^ dX7!u!e{ETiz-N|6+f!OFeMB&@W2eXe{yzZTQ!fAj literal 0 HcmV?d00001 diff --git a/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt b/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt new file mode 100644 index 00000000..26dcf087 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt @@ -0,0 +1,44 @@ +package jp.co.soramitsu.schema + +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.* +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.extensions.tryFindNonNull + +class DynamicTypeResolver( + val extensions: List +) { + constructor(vararg extensions: DynamicTypeExtension) : this(extensions.toList()) + + companion object { + fun defaultCompoundResolver(): DynamicTypeResolver { + return DynamicTypeResolver(DEFAULT_COMPOUND_EXTENSIONS) + } + + val DEFAULT_COMPOUND_EXTENSIONS = listOf( + VectorExtension, + CompactExtension, + OptionExtension, + BoxExtension, + TupleExtension, + FixedArrayExtension, + HashMapExtension, + ResultTypeExtension + ) + } + + fun createDynamicType( + name: String, + typeDef: String, + innerTypeProvider: TypeProvider + ): Type<*>? { + return extensions.tryFindNonNull { + it.createType( + name, + typeDef, + innerTypeProvider + ) + } + } +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt b/schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt new file mode 100644 index 00000000..c1bc6f1a --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt @@ -0,0 +1,4 @@ +package jp.co.soramitsu.schema + +class RuntimeSnapshot { +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt new file mode 100644 index 00000000..6beff735 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt @@ -0,0 +1,18 @@ +package jp.co.soramitsu.schema + +import jp.co.soramitsu.schema.definitions.types.TypeReference + +interface TypeDefinitionParser { + fun parseBaseDefinitions( + types: Map, + typePreset: TypePreset, + dynamicTypeResolver: DynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() + ) : ParseResult +} + +class ParseResult( + val typePreset: TypePreset, + val unknownTypes: List +) + +typealias TypePreset = Map diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/ParsingExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/ParsingExt.kt new file mode 100644 index 00000000..046254e3 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/ParsingExt.kt @@ -0,0 +1,28 @@ +package jp.co.soramitsu.schema.definitions + +internal fun String.splitTuple(): List { + val innerPart = removeSurrounding("(", ")").replace(" ", "") + + val result = mutableListOf() + var bracketsCount = 0 + var currentBeginning = 0 + + innerPart.forEachIndexed { index, c -> + when (c) { + '(', '<', '[' -> bracketsCount++ + ')', '>', ']' -> bracketsCount-- + ',' -> { + if (bracketsCount == 0) { + result += innerPart.substring(currentBeginning, index) + currentBeginning = index + 1 + } + } + } + } + + if (currentBeginning < innerPart.length) { + result += innerPart.substring(currentBeginning, innerPart.length) + } + + return result +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/DynamicTypeExtension.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/DynamicTypeExtension.kt new file mode 100644 index 00000000..490216da --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/DynamicTypeExtension.kt @@ -0,0 +1,11 @@ +package jp.co.soramitsu.schema.definitions.dynamic + +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference + +typealias TypeProvider = (typeDef: String) -> TypeReference + +interface DynamicTypeExtension { + + fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt new file mode 100644 index 00000000..631aede4 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt @@ -0,0 +1,106 @@ +package jp.co.soramitsu.schema.definitions.dynamic.extentsions + + +import jp.co.soramitsu.schema.definitions.splitTuple +import jp.co.soramitsu.schema.definitions.types.composite.FixedArray +import jp.co.soramitsu.schema.definitions.types.composite.Option +import jp.co.soramitsu.schema.definitions.types.composite.Tuple +import jp.co.soramitsu.schema.definitions.types.generics.ResultType +import jp.co.soramitsu.schema.definitions.types.primitives.Compact +import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray +import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Vec + +object VectorExtension : WrapperExtension() { + override val wrapperName = "Vec" + + override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> { + return if (innerTypeRef.value == u8) { + DynamicByteArray(name) + } else { + Vec(name, innerTypeRef) + } + } +} + +object CompactExtension : WrapperExtension() { + override val wrapperName = "Compact" + + override fun createWrapper(name: String, innerTypeRef: TypeReference) = Compact(name) +} + +object OptionExtension : WrapperExtension() { + override val wrapperName = "Option" + + override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) +} + +object BoxExtension : WrapperExtension() { + override val wrapperName: String + get() = "Box" + + override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? { + return innerTypeRef.value + } +} + +object TupleExtension : DynamicTypeExtension { + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("(")) return null + + val innerTypeRefDefinitions = typeDef.splitTuple() + + val innerTypeRefs = innerTypeRefDefinitions.map(typeProvider) + + return Tuple(name, innerTypeRefs) + } +} + +object FixedArrayExtension : DynamicTypeExtension { + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("[")) return null + + val withoutBrackets = typeDef.removeSurrounding("[", "]").replace(" ", "") + val (typeName, lengthRaw) = withoutBrackets.split(";") + + val length = lengthRaw.toInt() + + val typeRef = typeProvider(typeName) + + return if (typeRef.value == u8) { + FixedByteArray(name, length) + } else { + FixedArray(name, length, typeRef) + } + } +} + +object HashMapExtension : DynamicTypeExtension { + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("HashMap")) return null + val withoutBrackets = typeDef.removePrefix("HashMap").removeSurrounding("<", ">").replace(" ", "") + if (withoutBrackets.split(",").size != 2) return null + val tuple = "($withoutBrackets)" + val typeRef = typeProvider(tuple) + return Vec("Vec<$tuple>", typeRef) + } +} + +object ResultTypeExtension : DynamicTypeExtension { + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("Result")) return null + val withoutBrackets = + typeDef.removePrefix("Result").removeSurrounding("<", ">").replace(" ", "") + val types = withoutBrackets.split(",") + if (types.size != 2) return null + return ResultType(typeProvider(types[0]), typeProvider(types[1])) + } +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt new file mode 100644 index 00000000..21eca406 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt @@ -0,0 +1,20 @@ +package jp.co.soramitsu.schema.definitions.dynamic.extentsions + +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.types.Type + + +private val GENERIC_REGEX = "^([^<]*)<(.+)>\$".toRegex() // PartName + +private const val RAW_TYPE_GROUP_INDEX = 1 // first one will be the entire typeDef, the second one will be raw type + +object GenericsExtension : DynamicTypeExtension { + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + val groups = GENERIC_REGEX.find(typeDef)?.groupValues ?: return null + val rawType = groups.getOrNull(RAW_TYPE_GROUP_INDEX) ?: return null + + return typeProvider(rawType).value + } +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt new file mode 100644 index 00000000..74198ab7 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt @@ -0,0 +1,25 @@ +package jp.co.soramitsu.schema.definitions.dynamic.extentsions + + +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference + + +abstract class WrapperExtension : DynamicTypeExtension { + + abstract val wrapperName: String + + abstract fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("$wrapperName<")) return null + + val innerTypeDef = typeDef.removeSurrounding("$wrapperName<", ">") + + val innerTypeRef = typeProvider(innerTypeDef) + + return createWrapper(name, innerTypeRef) + } +} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/Type.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt similarity index 88% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/Type.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt index f4112640..b2399438 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/Type.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types +package jp.co.soramitsu.schema.definitions.types import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class TypeReference(var value: Type<*>?) { private var resolutionInProgress: Boolean = false diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt similarity index 83% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeExt.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt index 65d4c225..b3032aa2 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt @@ -1,13 +1,13 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types +package jp.co.soramitsu.schema.definitions.types import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.extensions.ensureExceptionType -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.extensions.toHexString -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.extensions.ensureExceptionType +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import java.io.ByteArrayOutputStream /** diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt similarity index 83% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExt.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt index 89515185..aab1b900 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt @@ -1,9 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types +package jp.co.soramitsu.schema.definitions.types -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.composite.Alias class CyclicAliasingException : Exception() +//todo possibly no need in core /** * @throws CyclicAliasingException */ diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Alias.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt similarity index 73% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Alias.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt index 85d91812..3db0f8a3 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Alias.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.TypeReference class Alias(alias: String, val aliasedReference: TypeReference) : Type(alias) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnum.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt index ce89980c..e9a49b52 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.fearless_utils.scale.dataType.CollectionEnumType -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot class CollectionEnum( name: String, diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt similarity index 78% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnum.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt index a31304c9..a0f93616 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt @@ -1,12 +1,12 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.skipAliasesOrNull +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull open class DictEnum( name: String, diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt similarity index 82% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArray.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt index 9463f0b7..bb53c504 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.RuntimeSnapshot class FixedArray(name: String, val length: Int, typeReference: TypeReference) : WrapperType>(name, typeReference) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Option.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Option.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt index 28678e67..16be013b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Option.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class Option( name: String, diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt similarity index 83% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt index c5c42cb3..35a2f223 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt @@ -1,12 +1,12 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.hash.isPositive -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.NumberType +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.primitives.NumberType import java.math.BigInteger -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot class SetType( name: String, diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Struct.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Struct.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt index e6bf117c..d4e60e65 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Struct.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.skipAliases -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.skipAliases +import jp.co.soramitsu.schema.RuntimeSnapshot @Suppress("UNCHECKED_CAST") class Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Tuple.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt similarity index 77% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Tuple.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt index 03f43159..b46528bc 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Tuple.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.skipAliasesOrNull +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull class Tuple(name: String, val typeReferences: List) : Type>(name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Vec.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt similarity index 85% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Vec.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt index 900001b7..19bc758d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/Vec.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot class Vec(name: String, typeReference: TypeReference) : WrapperType>(name, typeReference) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/WrapperType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/WrapperType.kt similarity index 54% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/WrapperType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/WrapperType.kt index 8fa878d8..0b301dc5 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/WrapperType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/WrapperType.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite +package jp.co.soramitsu.schema.definitions.types.composite -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.skipAliasesOrNull +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull abstract class WrapperType(name: String, val typeReference: TypeReference) : Type(name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/errors/EncodeDecodeException.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/errors/EncodeDecodeException.kt similarity index 75% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/errors/EncodeDecodeException.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/errors/EncodeDecodeException.kt index 766e3cbd..db86cf4d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/errors/EncodeDecodeException.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/errors/EncodeDecodeException.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors +package jp.co.soramitsu.schema.definitions.types.errors class EncodeDecodeException( message: String? = null, diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt similarity index 88% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt index 4a410b9e..8eb5fe06 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.hash.isPositive -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Primitive +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt import jp.co.soramitsu.fearless_utils.scale.dataType.uint import java.math.BigInteger diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt new file mode 100644 index 00000000..48d6eb66 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt @@ -0,0 +1,5 @@ +package jp.co.soramitsu.schema.definitions.types.generics + +import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray + +val Bytes = DynamicByteArray("Bytes") \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt similarity index 72% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt index 86553789..78c001f8 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt @@ -1,11 +1,12 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.extensions.fromHex -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Primitive +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.fearless_utils.scale.dataType.byteArraySized +import jp.co.soramitsu.schema.extensions.fromHex + object CallBytes : Primitive("CallBytes") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt similarity index 83% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt index ea2c311d..2a5d3d87 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt @@ -1,13 +1,13 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.fearless_utils.scale.dataType.byte import jp.co.soramitsu.fearless_utils.scale.utils.directWrite diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Era.kt similarity index 85% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Era.kt index cd68f41e..7620b054 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Era.kt @@ -1,10 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.extensions.toHex -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Primitive +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.fearless_utils.scale.dataType.byte import jp.co.soramitsu.fearless_utils.scale.dataType.uint16 import kotlin.math.ceil @@ -43,12 +42,12 @@ sealed class Era { object EraType : Primitive("Era") { override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Era { - val firstByte = byte.read(scaleCodecReader).toHex() + val firstByte = jp.co.soramitsu.schema.extensions.toHex() return if (firstByte == "00") { Era.Immortal } else { - val secondByte = byte.read(scaleCodecReader).toHex() + val secondByte = jp.co.soramitsu.schema.extensions.toHex() val encoded = (secondByte + firstByte).toInt(16) val period = 2 shl (encoded % 16) val quantizeFactor = max(1, period shr 12) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt new file mode 100644 index 00000000..23d68059 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt @@ -0,0 +1,22 @@ +package jp.co.soramitsu.schema.definitions.types.generics + +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.definitions.types.composite.Vec + +@Suppress("FunctionName") +fun EventRecord(typePresetBuilder: TypePresetBuilder) = Struct( + name = "EventRecord", + mapping = linkedMapOf( + "phase" to typePresetBuilder.getOrCreate("Phase"), + "event" to typePresetBuilder.getOrCreate("GenericEvent"), + "topics" to TypeReference( + Vec( + name = "Vec", + typeReference = typePresetBuilder.getOrCreate("Hash") + ) + ) + ) +) \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt similarity index 89% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt index 833a0cff..99aab9fa 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt @@ -1,14 +1,14 @@ @file:Suppress("EXPERIMENTAL_API_USAGE") // unsigned types -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.bytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toByteArray +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.bytes +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.toByteArray import jp.co.soramitsu.fearless_utils.scale.dataType.byte import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt similarity index 91% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt index b4ed90d2..b134bd0c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum class MultiSignature(val encryptionType: EncryptionType, val value: ByteArray) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt similarity index 83% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt index d276c100..07708568 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -1,12 +1,12 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Compact -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u32 +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.primitives.Compact +import jp.co.soramitsu.schema.definitions.types.primitives.u32 typealias ExtrinsicPayloadExtrasInstance = Map diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt new file mode 100644 index 00000000..ab2f8ec6 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt @@ -0,0 +1,5 @@ +package jp.co.soramitsu.schema.definitions.types.generics + +import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray + +object GenericAccountId : FixedByteArray("GenericAccountId", 32) \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt index 47e95551..7d1b6762 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt @@ -1,14 +1,14 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.metadata.Function -import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument -import jp.co.soramitsu.fearless_utils.runtime.metadata.callOrNull -import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.metadata.Function +import jp.co.soramitsu.schema.metadata.FunctionArgument +import jp.co.soramitsu.schema.metadata.callOrNull +import jp.co.soramitsu.schema.metadata.moduleOrNull import jp.co.soramitsu.fearless_utils.scale.dataType.tuple import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt new file mode 100644 index 00000000..e2ce9507 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt @@ -0,0 +1,24 @@ +package jp.co.soramitsu.schema.definitions.types.generics + +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray + +val GenericConsensusEngineId = FixedByteArray("GenericConsensusEngineId", 4) + +@Suppress("FunctionName") +fun GenericConsensus(typePresetBuilder: TypePresetBuilder) = Struct( + name = "GenericConsensus", + mapping = linkedMapOf( + "engine" to typePresetBuilder.getOrCreate("ConsensusEngineId"), + "data" to TypeReference( + Vec( + name = "Vec", + typeReference = typePresetBuilder.getOrCreate("u8") + ) + ) + ) +) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt similarity index 81% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt index 0a59c312..cf2c1b0a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt @@ -1,13 +1,13 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.metadata.Event -import jp.co.soramitsu.fearless_utils.runtime.metadata.eventOrNull -import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.metadata.Event +import jp.co.soramitsu.schema.metadata.eventOrNull +import jp.co.soramitsu.schema.metadata.moduleOrNull import jp.co.soramitsu.fearless_utils.scale.dataType.tuple import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt similarity index 55% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt index bd769398..b6a89faa 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Compact +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.primitives.Compact const val MULTI_ADDRESS_ID = "Id" diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt similarity index 63% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt index 2c3146d1..8bfc9aec 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") fun GenericSealV0(typePresetBuilder: TypePresetBuilder) = Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt similarity index 53% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt index 5a548144..aed66b64 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt @@ -1,6 +1,6 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray +import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray val H160 = Hash(160) val H256 = Hash(256) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt similarity index 68% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt index 1b5ec56c..b34fca96 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Primitive -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.primitives.Primitive +import jp.co.soramitsu.schema.RuntimeSnapshot object Null : Primitive("Null") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt similarity index 70% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt index 637d980f..4092b81c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromByteArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toByteArray +import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.fromByteArray +import jp.co.soramitsu.schema.definitions.types.toByteArray object OpaqueCall : Type("OpaqueCall") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt similarity index 50% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt index aeceaa00..bda40d23 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum class ResultType(ok: TypeReference, err: TypeReference) : DictEnum( "Result", listOf( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt similarity index 53% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt index 48d18504..29a6ce04 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct +import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") fun SessionKeysSubstrate(typePresetBuilder: TypePresetBuilder) = Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/BooleanType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/BooleanType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt index debef5ef..22fb51b0 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/BooleanType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot object BooleanType : Primitive("bool") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Compact.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt similarity index 80% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Compact.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt index 362ecef7..29c49e7d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/Compact.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt import java.math.BigInteger -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot class Compact(name: String) : NumberType(name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/DynamicByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt similarity index 82% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/DynamicByteArray.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt index 5c662408..2a9abeb7 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/DynamicByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.scale.dataType.byteArray -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot class DynamicByteArray(name: String) : Primitive(name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/FixedByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt similarity index 82% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/FixedByteArray.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt index 88120925..b82bdae7 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/FixedByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot open class FixedByteArray(name: String, val length: Int) : Primitive(name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/NumberType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/NumberType.kt similarity index 73% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/NumberType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/NumberType.kt index 9ec3fd8a..f34df658 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/NumberType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/NumberType.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import java.math.BigInteger diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Primitive.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Primitive.kt new file mode 100644 index 00000000..9d76e711 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Primitive.kt @@ -0,0 +1,8 @@ +package jp.co.soramitsu.schema.definitions.types.primitives + +import jp.co.soramitsu.schema.definitions.types.Type + +abstract class Primitive(name: String) : Type(name) { + + override val isFullyResolved = true +} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/UIntType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt similarity index 84% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/UIntType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt index 1e9fe3dc..9ea1d3ad 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/primitives/UIntType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives +package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.scale.dataType.uint import java.math.BigInteger -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.RuntimeSnapshot val u8 = UIntType(8) val u16 = UIntType(16) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/stub/FakeType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt similarity index 74% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/stub/FakeType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt index 466e07c5..f868d942 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/stub/FakeType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub +package jp.co.soramitsu.schema.definitions.types.stub import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.RuntimeSnapshot class FakeType(name: String) : Type(name) { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/extensions/Exceptions.kt b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Exceptions.kt new file mode 100644 index 00000000..2283d97d --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Exceptions.kt @@ -0,0 +1,16 @@ +package jp.co.soramitsu.schema.extensions + +inline fun ensureExceptionType( + creator: (Exception) -> T, + block: () -> R +): R { + return try { + block() + } catch (e: Exception) { + if (e is T) { + throw e + } else { + throw creator(e) + } + } +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/extensions/Hex.kt b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Hex.kt new file mode 100644 index 00000000..b17b0ac1 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Hex.kt @@ -0,0 +1,21 @@ +package jp.co.soramitsu.schema.extensions + +import org.bouncycastle.util.encoders.Hex + +private const val HEX_PREFIX = "0x" + +fun ByteArray.toHexString(withPrefix: Boolean = false): String { + val encoded = Hex.toHexString(this) + + return if (withPrefix) return HEX_PREFIX + encoded else encoded +} + +fun String.fromHex(): ByteArray = Hex.decode(removePrefix(HEX_PREFIX)) + +fun String.requirePrefix(prefix: String) = if (startsWith(prefix)) this else prefix + this + +fun String.requireHexPrefix() = requirePrefix(HEX_PREFIX) + +fun Byte.toHex(withPrefix: Boolean = false): String { + return byteArrayOf(this).toHexString(withPrefix) +} \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/extensions/Kotlin.kt b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Kotlin.kt new file mode 100644 index 00000000..4da6bed6 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/extensions/Kotlin.kt @@ -0,0 +1,20 @@ +package jp.co.soramitsu.schema.extensions + +import java.math.BigInteger +import java.nio.ByteOrder + +inline fun Iterable.tryFindNonNull(transform: (T) -> R?): R? { + for (item in this) { + val transformed = transform(item) + + if (transformed != null) return transformed + } + + return null +} + +fun ByteArray.toBigInteger(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): BigInteger { + val preprocessed = if (byteOrder == ByteOrder.LITTLE_ENDIAN) reversedArray() else this + + return BigInteger(preprocessed) +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index aa550cf5..a44a2f09 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,5 @@ include ':fearless-utils' include ':app' -rootProject.name = "fearless-utils-android" \ No newline at end of file +rootProject.name = "fearless-utils-android" +include ':schema' +include ':iroha2' \ No newline at end of file From 5d9ac2c410f6ec43138be06c441fb699119d03d4 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 08:45:09 +0300 Subject: [PATCH 02/16] WIP --- .../definitions/types/generics/BitVec.kt | 8 ++-- .../definitions/types/generics/Bytes.kt | 5 +++ .../definitions/types/generics/CallBytes.kt | 6 +-- .../schema/definitions/types/generics/Data.kt | 8 ++-- .../schema/definitions/types/generics/Era.kt | 4 +- .../definitions/types/generics/EventRecord.kt | 4 +- .../definitions/types/generics/Extrinsic.kt | 4 +- .../types/generics/ExtrinsicExt.kt | 4 +- .../types/generics/ExtrinsicPayloadExtras.kt | 4 +- .../types/generics/GenericAccountId.kt | 4 +- .../definitions/types/generics/GenericCall.kt | 5 +-- .../generics/GenericConsensusEngineId.kt | 2 +- .../types/generics/GenericEvent.kt | 4 +- .../types/generics/GenericMultiAddress.kt | 4 +- .../definitions/types/generics/GenericSeal.kt | 2 +- .../schema/definitions/types/generics/Hash.kt | 4 +- .../schema/definitions/types/generics/Null.kt | 4 +- .../definitions/types/generics/OpaqueCall.kt | 4 +- .../definitions/types/generics/ResultType.kt | 2 +- .../types/generics/SessionKeysSubstrate.kt | 4 +- .../definitions/registry/TypePreset.kt | 42 +++++++++---------- .../runtime/metadata/RuntimeMetadata.kt | 4 +- .../runtime/metadata/RuntimeMetadataSchema.kt | 26 ++++++------ .../fearless_utils/wsrpc/mappers/Types.kt | 6 +-- .../runtime/metadata/MetadataTest.kt | 2 +- .../fearless_utils/scale/ScaleStructTest.kt | 17 ++++---- .../fearless_utils/scale/dataType/EnumTest.kt | 8 ++-- .../wsrpc/mappers/MappersTest.kt | 12 +++--- .../dynamic/extentsions/Default.kt | 2 +- .../types/composite/CollectionEnum.kt | 4 +- .../definitions/types/composite/SetType.kt | 7 ++-- .../schema/definitions/types/composite/Vec.kt | 4 +- .../definitions/types/generics/Bytes.kt | 5 --- .../definitions/types/primitives/Compact.kt | 4 +- .../types/primitives/DynamicByteArray.kt | 4 +- .../definitions/types/primitives/UIntType.kt | 2 +- .../jp/co/soramitsu/schema}/scale/Delegate.kt | 8 ++-- .../java/jp/co/soramitsu/schema}/scale/Dsl.kt | 42 +++++++++---------- .../co/soramitsu/schema}/scale/ScaleStruct.kt | 8 ++-- .../jp/co/soramitsu/schema}/scale/Schema.kt | 8 ++-- .../schema}/scale/dataType/Compound.kt | 8 ++-- .../schema}/scale/dataType/DataType.kt | 4 +- .../schema}/scale/dataType/Numbers.kt | 9 ++-- .../schema}/scale/dataType/Primitives.kt | 4 +- .../schema}/scale/utils/CompactIntWriter.kt | 4 +- .../co/soramitsu/schema}/scale/utils/Ext.kt | 4 +- 46 files changed, 167 insertions(+), 167 deletions(-) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt (89%) create mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt (84%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/Data.kt (94%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/Era.kt (96%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt (89%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt (97%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt (95%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt (96%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt (60%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt (96%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt (90%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt (96%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt (90%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt (89%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt (73%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/Null.kt (86%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt (92%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt (80%) rename {schema/src/main/java => fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils}/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt (86%) delete mode 100644 schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/Delegate.kt (84%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/Dsl.kt (70%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/ScaleStruct.kt (85%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/Schema.kt (92%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/dataType/Compound.kt (96%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/dataType/DataType.kt (79%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/dataType/Numbers.kt (92%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/dataType/Primitives.kt (96%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/utils/CompactIntWriter.kt (95%) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java/jp/co/soramitsu/schema}/scale/utils/Ext.kt (75%) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt similarity index 89% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt index 8eb5fe06..160df4cc 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt @@ -1,12 +1,12 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.hash.isPositive import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt -import jp.co.soramitsu.fearless_utils.scale.dataType.uint +import jp.co.soramitsu.schema.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.uint import java.math.BigInteger import kotlin.math.ceil @@ -58,4 +58,4 @@ object BitVec : Primitive("BitVec") { } private fun sizeInBytes(inBits: Int) = ceil(inBits / 8.0).toInt() -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt new file mode 100644 index 00000000..37823099 --- /dev/null +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt @@ -0,0 +1,5 @@ +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics + +import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray + +val Bytes = DynamicByteArray("Bytes") diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt similarity index 84% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt index 78c001f8..1a5f4ef5 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.fearless_utils.scale.dataType.byteArraySized +import jp.co.soramitsu.schema.scale.dataType.byteArraySized import jp.co.soramitsu.schema.extensions.fromHex @@ -23,4 +23,4 @@ object CallBytes : Primitive("CallBytes") { override fun isValidInstance(instance: Any?): Boolean { return instance is String } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt similarity index 94% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt index 2a5d3d87..30707851 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -8,8 +8,8 @@ import jp.co.soramitsu.schema.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.scale.dataType.byte -import jp.co.soramitsu.fearless_utils.scale.utils.directWrite +import jp.co.soramitsu.schema.scale.dataType.byte +import jp.co.soramitsu.schema.scale.utils.directWrite class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) { @@ -87,4 +87,4 @@ private fun createMapping(preset: TypePresetBuilder): List("Era") { } override fun isValidInstance(instance: Any?) = instance is Era -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt similarity index 89% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt index 23d68059..7a5d7917 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate @@ -19,4 +19,4 @@ fun EventRecord(typePresetBuilder: TypePresetBuilder) = Struct( ) ) ) -) \ No newline at end of file +) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt similarity index 97% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt index 99aab9fa..58ebdbf5 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt @@ -1,6 +1,6 @@ @file:Suppress("EXPERIMENTAL_API_USAGE") // unsigned types -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -112,4 +112,4 @@ object Extrinsic : Type("ExtrinsicsDecoder") { private fun requiredTypeNotFound(name: String): Nothing { throw EncodeDecodeException("Cannot resolve $name type, which is required to work with Extrinsic") } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt similarity index 95% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt index b134bd0c..b5238092 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType import jp.co.soramitsu.schema.definitions.types.composite.DictEnum @@ -56,4 +56,4 @@ fun multiAddressFromId(addressId: ByteArray): DictEnum.Entry { name = MULTI_ADDRESS_ID, value = addressId ) -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt similarity index 96% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt index 07708568..ef3f4d48 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -82,4 +82,4 @@ open class ExtrinsicPayloadExtras( private fun unknownSignedExtension(name: String): Nothing = throw EncodeDecodeException("Unknown signed extension: $name") -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt similarity index 60% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt index ab2f8ec6..6baf58c2 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt @@ -1,5 +1,5 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray -object GenericAccountId : FixedByteArray("GenericAccountId", 32) \ No newline at end of file +object GenericAccountId : FixedByteArray("GenericAccountId", 32) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt similarity index 96% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt index 7d1b6762..6a5d69f8 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt @@ -1,11 +1,10 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.schema.metadata.Function import jp.co.soramitsu.schema.metadata.FunctionArgument import jp.co.soramitsu.schema.metadata.callOrNull import jp.co.soramitsu.schema.metadata.moduleOrNull @@ -70,4 +69,4 @@ object GenericCall : Type("GenericCall") { private fun callNotFound(moduleIndex: Int, callIndex: Int): Nothing { throw EncodeDecodeException("No call found for index ($moduleIndex, $callIndex)") } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt similarity index 90% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt index e2ce9507..226a54a7 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt similarity index 96% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt index cf2c1b0a..1800ac66 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -68,4 +68,4 @@ object GenericEvent : Type("GenericEvent") { private fun eventNotFound(moduleIndex: Int, eventIndex: Int): Nothing { throw EncodeDecodeException("No event for ($moduleIndex, $eventIndex) index found") } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt similarity index 90% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt index b6a89faa..e9ce676c 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate @@ -18,4 +18,4 @@ fun GenericMultiAddress(typePresetBuilder: TypePresetBuilder) = DictEnum( DictEnum.Entry("Address32", typePresetBuilder.getOrCreate("H256")), DictEnum.Entry("Address20", typePresetBuilder.getOrCreate("H160")) ) -) \ No newline at end of file +) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt similarity index 89% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt index 8bfc9aec..f7808341 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt similarity index 73% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt index aed66b64..fd30faf7 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray @@ -10,4 +10,4 @@ class Hash(bits: Int) : FixedByteArray("H$bits", length = bits / 8) { init { require(bits % 8 == 0) } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt similarity index 86% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt index b34fca96..eea1ba10 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Null.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -18,4 +18,4 @@ object Null : Primitive("Null") { override fun isValidInstance(instance: Any?): Boolean { return instance == null } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt similarity index 92% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt index 4092b81c..115ee475 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -33,4 +33,4 @@ object OpaqueCall : Type("OpaqueCall") { override fun isValidInstance(instance: Any?): Boolean { return instance is ByteArray } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt similarity index 80% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt index bda40d23..dff6d4d7 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt similarity index 86% rename from schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt index 29a6ce04..70bb7a25 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate @@ -12,4 +12,4 @@ fun SessionKeysSubstrate(typePresetBuilder: TypePresetBuilder) = Struct( "babe" to typePresetBuilder.getOrCreate("AccountId"), "im_online" to typePresetBuilder.getOrCreate("AccountId") ) -) \ No newline at end of file +) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 861ad337..76d86387 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -2,27 +2,27 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.composite.Alias -import jp.co.soramitsu.schema.definitions.types.generics.BitVec -import jp.co.soramitsu.schema.definitions.types.generics.Bytes -import jp.co.soramitsu.schema.definitions.types.generics.CallBytes -import jp.co.soramitsu.schema.definitions.types.generics.Data -import jp.co.soramitsu.schema.definitions.types.generics.EraType -import jp.co.soramitsu.schema.definitions.types.generics.EventRecord -import jp.co.soramitsu.schema.definitions.types.generics.Extrinsic -import jp.co.soramitsu.schema.definitions.types.generics.GenericAccountId -import jp.co.soramitsu.schema.definitions.types.generics.GenericCall -import jp.co.soramitsu.schema.definitions.types.generics.GenericConsensus -import jp.co.soramitsu.schema.definitions.types.generics.GenericConsensusEngineId -import jp.co.soramitsu.schema.definitions.types.generics.GenericEvent -import jp.co.soramitsu.schema.definitions.types.generics.GenericMultiAddress -import jp.co.soramitsu.schema.definitions.types.generics.GenericSeal -import jp.co.soramitsu.schema.definitions.types.generics.GenericSealV0 -import jp.co.soramitsu.schema.definitions.types.generics.H160 -import jp.co.soramitsu.schema.definitions.types.generics.H256 -import jp.co.soramitsu.schema.definitions.types.generics.H512 -import jp.co.soramitsu.schema.definitions.types.generics.Null -import jp.co.soramitsu.schema.definitions.types.generics.OpaqueCall -import jp.co.soramitsu.schema.definitions.types.generics.SessionKeysSubstrate +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.BitVec +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Bytes +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.CallBytes +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Data +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.EraType +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.EventRecord +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Extrinsic +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericAccountId +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericCall +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericConsensus +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericConsensusEngineId +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericEvent +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericMultiAddress +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericSeal +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericSealV0 +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H160 +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H256 +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H512 +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Null +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.OpaqueCall +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.SessionKeysSubstrate import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType import jp.co.soramitsu.schema.definitions.types.primitives.u128 import jp.co.soramitsu.schema.definitions.types.primitives.u16 diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt index 03f873ce..e4d0388e 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -import jp.co.soramitsu.fearless_utils.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.EncodableStruct import java.math.BigInteger interface WithName { @@ -276,4 +276,4 @@ class ExtrinsicMetadata( version = struct[ExtrinsicMetadataSchema.version].toInt().toBigInteger(), signedExtensions = struct[ExtrinsicMetadataSchema.signedExtensions] ) -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt index b03d60f5..6e7492ac 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt @@ -2,18 +2,18 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.hash.Hasher import jp.co.soramitsu.fearless_utils.hash.hashConcat -import jp.co.soramitsu.fearless_utils.scale.EncodableStruct -import jp.co.soramitsu.fearless_utils.scale.Schema -import jp.co.soramitsu.fearless_utils.scale.bool -import jp.co.soramitsu.fearless_utils.scale.byteArray -import jp.co.soramitsu.fearless_utils.scale.dataType.scalable -import jp.co.soramitsu.fearless_utils.scale.enum -import jp.co.soramitsu.fearless_utils.scale.schema -import jp.co.soramitsu.fearless_utils.scale.string -import jp.co.soramitsu.fearless_utils.scale.uint32 -import jp.co.soramitsu.fearless_utils.scale.uint8 -import jp.co.soramitsu.fearless_utils.scale.vector -import jp.co.soramitsu.fearless_utils.scale.dataType.string as stringType +import jp.co.soramitsu.schema.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.Schema +import jp.co.soramitsu.schema.scale.bool +import jp.co.soramitsu.schema.scale.byteArray +import jp.co.soramitsu.schema.scale.dataType.scalable +import jp.co.soramitsu.schema.scale.enum +import jp.co.soramitsu.schema.scale.schema +import jp.co.soramitsu.schema.scale.string +import jp.co.soramitsu.schema.scale.uint32 +import jp.co.soramitsu.schema.scale.uint8 +import jp.co.soramitsu.schema.scale.vector +import jp.co.soramitsu.schema.scale.dataType.string as stringType object RuntimeMetadataSchema : Schema() { val magicNumber by uint32() @@ -140,4 +140,4 @@ fun EncodableStruct.module(name: String) = get(RuntimeMet fun EncodableStruct.call(name: String) = get(ModuleMetadataSchema.calls)?.find { it[FunctionMetadataSchema.name] == name } -fun EncodableStruct.storage(name: String) = get(ModuleMetadataSchema.storage)?.get(StorageMetadataSchema.entries)?.find { it[StorageEntryMetadataSchema.name] == name } \ No newline at end of file +fun EncodableStruct.storage(name: String) = get(ModuleMetadataSchema.storage)?.get(StorageMetadataSchema.entries)?.find { it[StorageEntryMetadataSchema.name] == name } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/Types.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/Types.kt index 76707850..f99e964d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/Types.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/Types.kt @@ -1,8 +1,8 @@ package jp.co.soramitsu.fearless_utils.wsrpc.mappers import com.google.gson.Gson -import jp.co.soramitsu.fearless_utils.scale.EncodableStruct -import jp.co.soramitsu.fearless_utils.scale.Schema +import jp.co.soramitsu.schema.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.Schema import jp.co.soramitsu.fearless_utils.wsrpc.exception.RpcException import jp.co.soramitsu.fearless_utils.wsrpc.response.RpcResponse @@ -62,4 +62,4 @@ class POJOMapper(val classRef: Class) : NullableMapper() { else -> rpcResponse.result as? T ?: null } } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt index 56c44d9c..9effed60 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt @@ -5,7 +5,7 @@ import jp.co.soramitsu.fearless_utils.common.getFileContentFromResources import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType -import jp.co.soramitsu.fearless_utils.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.EncodableStruct import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/ScaleStructTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/ScaleStructTest.kt index c5f28757..45f2205b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/ScaleStructTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/ScaleStructTest.kt @@ -20,11 +20,12 @@ import jp.co.soramitsu.fearless_utils.scale.DefaultValues.bigInteger import jp.co.soramitsu.fearless_utils.scale.DefaultValues.bytes import jp.co.soramitsu.fearless_utils.scale.DefaultValues.text import jp.co.soramitsu.fearless_utils.scale.Vector.numbers -import jp.co.soramitsu.fearless_utils.scale.dataType.DataType -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt -import jp.co.soramitsu.fearless_utils.scale.dataType.scalable -import jp.co.soramitsu.fearless_utils.scale.dataType.string -import jp.co.soramitsu.fearless_utils.scale.dataType.uint16 +import jp.co.soramitsu.schema.scale.* +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.scalable +import jp.co.soramitsu.schema.scale.dataType.string +import jp.co.soramitsu.schema.scale.dataType.uint16 import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test @@ -33,8 +34,8 @@ import org.mockito.junit.MockitoJUnitRunner import java.math.BigDecimal import java.math.BigInteger import java.math.MathContext -import jp.co.soramitsu.fearless_utils.scale.dataType.boolean as Bool -import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 as Uint8 +import jp.co.soramitsu.schema.scale.dataType.boolean as Bool +import jp.co.soramitsu.schema.scale.dataType.uint8 as Uint8 object OnlyCompact : Schema() { val compact by compactInt() @@ -293,4 +294,4 @@ class ScaleStructTest { assertEquals(struct[CustomTypeTest.delimiter], afterIo[CustomTypeTest.delimiter]) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/dataType/EnumTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/dataType/EnumTest.kt index 2b8f3d51..7761d080 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/dataType/EnumTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/scale/dataType/EnumTest.kt @@ -1,8 +1,8 @@ package jp.co.soramitsu.fearless_utils.scale.dataType -import jp.co.soramitsu.fearless_utils.scale.Schema -import jp.co.soramitsu.fearless_utils.scale.enum -import jp.co.soramitsu.fearless_utils.scale.toHexString +import jp.co.soramitsu.schema.scale.Schema +import jp.co.soramitsu.schema.scale.enum +import jp.co.soramitsu.schema.scale.toHexString import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -31,4 +31,4 @@ class EnumTest { assertEquals(hex, afterIo) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/MappersTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/MappersTest.kt index 68341449..7987fefe 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/MappersTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/wsrpc/mappers/MappersTest.kt @@ -2,11 +2,11 @@ package jp.co.soramitsu.fearless_utils.wsrpc.mappers import com.google.gson.Gson import jp.co.soramitsu.fearless_utils.common.assertThrows -import jp.co.soramitsu.fearless_utils.scale.Schema -import jp.co.soramitsu.fearless_utils.scale.bool -import jp.co.soramitsu.fearless_utils.scale.invoke -import jp.co.soramitsu.fearless_utils.scale.toHexString -import jp.co.soramitsu.fearless_utils.scale.uint32 +import jp.co.soramitsu.schema.scale.Schema +import jp.co.soramitsu.schema.scale.bool +import jp.co.soramitsu.schema.scale.invoke +import jp.co.soramitsu.schema.scale.toHexString +import jp.co.soramitsu.schema.scale.uint32 import jp.co.soramitsu.fearless_utils.wsrpc.exception.RpcException import jp.co.soramitsu.fearless_utils.wsrpc.response.RpcError import jp.co.soramitsu.fearless_utils.wsrpc.response.RpcResponse @@ -139,4 +139,4 @@ class MappersTest { message = error ) ) -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt index 631aede4..f0ef61ad 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt @@ -5,7 +5,7 @@ import jp.co.soramitsu.schema.definitions.splitTuple import jp.co.soramitsu.schema.definitions.types.composite.FixedArray import jp.co.soramitsu.schema.definitions.types.composite.Option import jp.co.soramitsu.schema.definitions.types.composite.Tuple -import jp.co.soramitsu.schema.definitions.types.generics.ResultType +import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.ResultType import jp.co.soramitsu.schema.definitions.types.primitives.Compact import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt index e9a49b52..4d824a21 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt @@ -3,7 +3,7 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.fearless_utils.scale.dataType.CollectionEnumType +import jp.co.soramitsu.schema.scale.dataType.CollectionEnumType import jp.co.soramitsu.schema.RuntimeSnapshot class CollectionEnum( @@ -26,4 +26,4 @@ class CollectionEnum( operator fun get(key: Int): String = elements[key] override val isFullyResolved = true -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt index 35a2f223..9d59ce4a 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt @@ -2,11 +2,10 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.hash.isPositive +import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.primitives.NumberType import java.math.BigInteger -import jp.co.soramitsu.schema.RuntimeSnapshot class SetType( name: String, @@ -21,7 +20,7 @@ class SetType( val value = valueType.decode(scaleCodecReader, runtime) return valueList.mapNotNullTo(mutableSetOf()) { (name, mask) -> - if (value.and(mask).isPositive()) { + if (value.and(mask).signum() == 1) { name } else { null @@ -49,4 +48,4 @@ class SetType( } operator fun get(key: String) = valueList[key] -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt index 19bc758d..6c41a4c1 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt @@ -3,7 +3,7 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.compactInt import jp.co.soramitsu.schema.RuntimeSnapshot class Vec(name: String, typeReference: TypeReference) : WrapperType>(name, typeReference) { @@ -36,4 +36,4 @@ class Vec(name: String, typeReference: TypeReference) : WrapperType>(nam typeReference.requireValue().isValidInstance(it) } } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt deleted file mode 100644 index 48d6eb66..00000000 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt +++ /dev/null @@ -1,5 +0,0 @@ -package jp.co.soramitsu.schema.definitions.types.generics - -import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray - -val Bytes = DynamicByteArray("Bytes") \ No newline at end of file diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt index 29c49e7d..655acc85 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.compactInt import java.math.BigInteger import jp.co.soramitsu.schema.RuntimeSnapshot @@ -15,4 +15,4 @@ class Compact(name: String) : NumberType(name) { override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: BigInteger) { return compactInt.write(scaleCodecWriter, value) } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt index 2a9abeb7..e3b6e60e 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.scale.dataType.byteArray +import jp.co.soramitsu.schema.scale.dataType.byteArray import jp.co.soramitsu.schema.RuntimeSnapshot class DynamicByteArray(name: String) : Primitive(name) { @@ -18,4 +18,4 @@ class DynamicByteArray(name: String) : Primitive(name) { override fun isValidInstance(instance: Any?): Boolean { return instance is ByteArray } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt index 9ea1d3ad..7fe23154 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.scale.dataType.uint +import jp.co.soramitsu.schema.scale.dataType.uint import java.math.BigInteger import jp.co.soramitsu.schema.RuntimeSnapshot diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Delegate.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Delegate.kt similarity index 84% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Delegate.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/Delegate.kt index 5cb50a1e..5cc46956 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Delegate.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Delegate.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.scale +package jp.co.soramitsu.schema.scale -import jp.co.soramitsu.fearless_utils.scale.dataType.DataType -import jp.co.soramitsu.fearless_utils.scale.dataType.optional +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.optional import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty @@ -32,4 +32,4 @@ class NullableFieldDelegate, T>( private var field: Field = schema.nullableField(dataType, default) override fun getValue(thisRef: Schema, property: KProperty<*>) = field -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Dsl.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt similarity index 70% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Dsl.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt index 3a243b9a..fc2decf4 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Dsl.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt @@ -1,25 +1,25 @@ @file:Suppress("unused", "EXPERIMENTAL_API_USAGE") -package jp.co.soramitsu.fearless_utils.scale - -import jp.co.soramitsu.fearless_utils.scale.dataType.DataType -import jp.co.soramitsu.fearless_utils.scale.dataType.EnumType -import jp.co.soramitsu.fearless_utils.scale.dataType.boolean -import jp.co.soramitsu.fearless_utils.scale.dataType.byte -import jp.co.soramitsu.fearless_utils.scale.dataType.byteArray -import jp.co.soramitsu.fearless_utils.scale.dataType.byteArraySized -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt -import jp.co.soramitsu.fearless_utils.scale.dataType.list -import jp.co.soramitsu.fearless_utils.scale.dataType.long -import jp.co.soramitsu.fearless_utils.scale.dataType.scalable -import jp.co.soramitsu.fearless_utils.scale.dataType.string -import jp.co.soramitsu.fearless_utils.scale.dataType.tuple -import jp.co.soramitsu.fearless_utils.scale.dataType.uint128 -import jp.co.soramitsu.fearless_utils.scale.dataType.uint16 -import jp.co.soramitsu.fearless_utils.scale.dataType.uint32 -import jp.co.soramitsu.fearless_utils.scale.dataType.uint64 -import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 -import jp.co.soramitsu.fearless_utils.scale.dataType.union +package jp.co.soramitsu.schema.scale + +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.EnumType +import jp.co.soramitsu.schema.scale.dataType.boolean +import jp.co.soramitsu.schema.scale.dataType.byte +import jp.co.soramitsu.schema.scale.dataType.byteArray +import jp.co.soramitsu.schema.scale.dataType.byteArraySized +import jp.co.soramitsu.schema.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.list +import jp.co.soramitsu.schema.scale.dataType.long +import jp.co.soramitsu.schema.scale.dataType.scalable +import jp.co.soramitsu.schema.scale.dataType.string +import jp.co.soramitsu.schema.scale.dataType.tuple +import jp.co.soramitsu.schema.scale.dataType.uint128 +import jp.co.soramitsu.schema.scale.dataType.uint16 +import jp.co.soramitsu.schema.scale.dataType.uint32 +import jp.co.soramitsu.schema.scale.dataType.uint64 +import jp.co.soramitsu.schema.scale.dataType.uint8 +import jp.co.soramitsu.schema.scale.dataType.union import java.math.BigInteger import kotlin.reflect.KClass @@ -88,4 +88,4 @@ fun > S.enum(vararg types: DataType<*>, default: Any? = null) = No fun , E : Enum> S.enum(enumClass: KClass, default: E? = null) = NonNullFieldDelegate(EnumType(enumClass.java), this, default) -fun , T> S.custom(type: DataType, default: T? = null) = NonNullFieldDelegate(type, this, default) \ No newline at end of file +fun , T> S.custom(type: DataType, default: T? = null) = NonNullFieldDelegate(type, this, default) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/ScaleStruct.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/ScaleStruct.kt similarity index 85% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/ScaleStruct.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/ScaleStruct.kt index 98842910..2c063ea0 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/ScaleStruct.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/ScaleStruct.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.scale +package jp.co.soramitsu.schema.scale -import jp.co.soramitsu.fearless_utils.scale.dataType.DataType -import jp.co.soramitsu.fearless_utils.scale.dataType.optional +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.optional class Field(val dataType: DataType, val defaultValue: T? = null) @@ -41,4 +41,4 @@ class EncodableStruct>(val schema: S) { fun > EncodableStruct.toHexString() = schema.toHexString(this) -fun > EncodableStruct.toByteArray() = schema.toByteArray(this) \ No newline at end of file +fun > EncodableStruct.toByteArray() = schema.toByteArray(this) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt similarity index 92% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt index 56605b5f..a512b85d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/Schema.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt @@ -1,11 +1,11 @@ -package jp.co.soramitsu.fearless_utils.scale +package jp.co.soramitsu.schema.scale import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.ScaleReader import io.emeraldpay.polkaj.scale.ScaleWriter -import jp.co.soramitsu.fearless_utils.scale.dataType.DataType -import jp.co.soramitsu.fearless_utils.scale.dataType.optional +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.optional import org.bouncycastle.util.encoders.Hex import java.io.ByteArrayOutputStream import kotlin.Exception @@ -84,4 +84,4 @@ abstract class Schema> : ScaleReader>, type.write(writer, value) } } -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Compound.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Compound.kt similarity index 96% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Compound.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Compound.kt index 48c33f87..b6c36c87 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Compound.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Compound.kt @@ -1,12 +1,12 @@ @file:Suppress("ClassName", "UNCHECKED_CAST") -package jp.co.soramitsu.fearless_utils.scale.dataType +package jp.co.soramitsu.schema.scale.dataType import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.writer.BoolWriter -import jp.co.soramitsu.fearless_utils.scale.EncodableStruct -import jp.co.soramitsu.fearless_utils.scale.Schema +import jp.co.soramitsu.schema.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.Schema class tuple( private val a: DataType, @@ -169,4 +169,4 @@ class union(val dataTypes: Array>) : DataType() { override fun conformsType(value: Any?): Boolean { return dataTypes.any { it.conformsType(value) } } -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/DataType.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/DataType.kt similarity index 79% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/DataType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/DataType.kt index f4eb6aed..967a673a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/DataType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/DataType.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.scale.dataType +package jp.co.soramitsu.schema.scale.dataType import io.emeraldpay.polkaj.scale.ScaleReader import io.emeraldpay.polkaj.scale.ScaleWriter abstract class DataType : ScaleReader, ScaleWriter { abstract fun conformsType(value: Any?): Boolean -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Numbers.kt similarity index 92% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Numbers.kt index 13757e7e..f0787f18 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Numbers.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Numbers.kt @@ -1,11 +1,12 @@ @file:Suppress("EXPERIMENTAL_API_USAGE") -package jp.co.soramitsu.fearless_utils.scale.dataType +package jp.co.soramitsu.schema.scale.dataType import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.reader.CompactBigIntReader -import jp.co.soramitsu.fearless_utils.scale.utils.CompactBigIntWriter +import jp.co.soramitsu.schema.extensions.toBigInteger +import jp.co.soramitsu.schema.scale.utils.CompactBigIntWriter import java.math.BigInteger import java.nio.ByteOrder @@ -66,7 +67,7 @@ open class uint(val size: Int) : DataType() { override fun read(reader: ScaleCodecReader): BigInteger { val bytes = reader.readByteArray(size) - return jp.co.soramitsu.schema.extensions.toBigInteger(ByteOrder.LITTLE_ENDIAN) + return bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN) } override fun write(writer: ScaleCodecWriter, value: BigInteger) { @@ -101,4 +102,4 @@ object compactInt : DataType() { } override fun conformsType(value: Any?) = value is BigInteger -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Primitives.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Primitives.kt similarity index 96% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Primitives.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Primitives.kt index b9b23333..91f24403 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/dataType/Primitives.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/dataType/Primitives.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.scale.dataType +package jp.co.soramitsu.schema.scale.dataType import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -45,4 +45,4 @@ class byteArraySized(private val length: Int) : DataType() { override fun write(writer: ScaleCodecWriter, value: ByteArray) = writer.directWrite(value, 0, length) override fun conformsType(value: Any?) = value is ByteArray -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/CompactIntWriter.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/utils/CompactIntWriter.kt similarity index 95% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/CompactIntWriter.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/utils/CompactIntWriter.kt index 6c83aa27..156652f9 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/CompactIntWriter.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/utils/CompactIntWriter.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.scale.utils +package jp.co.soramitsu.schema.scale.utils import io.emeraldpay.polkaj.scale.CompactMode import io.emeraldpay.polkaj.scale.ScaleCodecWriter @@ -35,4 +35,4 @@ class CompactBigIntWriter : ScaleWriter { } } } -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/Ext.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/utils/Ext.kt similarity index 75% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/Ext.kt rename to schema/src/main/java/jp/co/soramitsu/schema/scale/utils/Ext.kt index 704dd0c9..f922f64c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/scale/utils/Ext.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/utils/Ext.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.scale.utils +package jp.co.soramitsu.schema.scale.utils import io.emeraldpay.polkaj.scale.ScaleCodecWriter fun ScaleCodecWriter.directWrite(byteArray: ByteArray) { directWrite(byteArray, 0, byteArray.size) -} \ No newline at end of file +} From 108a00541a6581bd1b550043f924dc58e066bd18 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 08:55:05 +0300 Subject: [PATCH 03/16] WIP --- .../java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt | 2 +- .../schema/definitions/dynamic/extentsions/Default.kt | 2 +- .../schema/definitions/types/generics/ResultType.kt | 2 +- schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt | 5 ++--- 4 files changed, 5 insertions(+), 6 deletions(-) rename {fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils => schema/src/main/java}/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt (80%) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt index 1dc402af..d2aabdaf 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt @@ -18,4 +18,4 @@ // //fun Byte.toHex(withPrefix: Boolean = false): String { // return jp.co.soramitsu.schema.extensions.toHexString(withPrefix) -//} \ No newline at end of file +//} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt index f0ef61ad..bde2a160 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt @@ -5,7 +5,6 @@ import jp.co.soramitsu.schema.definitions.splitTuple import jp.co.soramitsu.schema.definitions.types.composite.FixedArray import jp.co.soramitsu.schema.definitions.types.composite.Option import jp.co.soramitsu.schema.definitions.types.composite.Tuple -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.ResultType import jp.co.soramitsu.schema.definitions.types.primitives.Compact import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray @@ -15,6 +14,7 @@ import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.generics.ResultType object VectorExtension : WrapperExtension() { override val wrapperName = "Vec" diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt similarity index 80% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt rename to schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt index dff6d4d7..bda40d23 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/generics/ResultType.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.schema.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum diff --git a/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt index a512b85d..83a0a4fb 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Schema.kt @@ -4,11 +4,11 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import io.emeraldpay.polkaj.scale.ScaleReader import io.emeraldpay.polkaj.scale.ScaleWriter +import jp.co.soramitsu.schema.extensions.toHexString import jp.co.soramitsu.schema.scale.dataType.DataType import jp.co.soramitsu.schema.scale.dataType.optional import org.bouncycastle.util.encoders.Hex import java.io.ByteArrayOutputStream -import kotlin.Exception @Suppress("UNCHECKED_CAST") abstract class Schema> : ScaleReader>, @@ -72,8 +72,7 @@ abstract class Schema> : ScaleReader>, return outputStream.toByteArray() } - fun toHexString(struct: EncodableStruct): String = - jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) + fun toHexString(struct: EncodableStruct): String = toByteArray(struct).toHexString(withPrefix = true) override fun write(writer: ScaleCodecWriter, struct: EncodableStruct) { for (field in fields) { From 0bb0fdfb81649efcf54beb8b72d99e87900b9794 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 09:05:11 +0300 Subject: [PATCH 04/16] WIP --- fearless-utils/build.gradle | 10 +++++----- .../schema/definitions/types/generics/Data.kt | 4 ++-- .../soramitsu/schema/definitions/types/generics/Era.kt | 9 +++++---- .../schema/definitions/types/generics/EventRecord.kt | 4 ++-- .../schema/definitions/types/generics/Extrinsic.kt | 4 ++-- .../schema/definitions/types/generics/GenericCall.kt | 8 +++----- .../types/generics/GenericConsensusEngineId.kt | 2 +- .../schema/definitions/types/generics/GenericEvent.kt | 8 +++----- .../definitions/types/generics/GenericMultiAddress.kt | 4 ++-- .../schema/definitions/types/generics/GenericSeal.kt | 4 ++-- .../definitions/types/generics/SessionKeysSubstrate.kt | 4 ++-- 11 files changed, 29 insertions(+), 32 deletions(-) diff --git a/fearless-utils/build.gradle b/fearless-utils/build.gradle index c754ec53..b2563ffc 100644 --- a/fearless-utils/build.gradle +++ b/fearless-utils/build.gradle @@ -48,11 +48,11 @@ cargo { targets = ["arm", "arm64", "x86", "x86_64"] } -tasks.whenTaskAdded { task -> - if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) { - task.dependsOn 'cargoBuild' - } -} +//tasks.whenTaskAdded { task -> +// if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) { +// task.dependsOn 'cargoBuild' +// } +//} task deleteJar(type: Delete) { delete 'libs/jars/libfearless.jar' diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt index 30707851..77fa2f64 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt @@ -2,9 +2,9 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types. import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.RuntimeSnapshot -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt index b72b467e..fae0259f 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt @@ -4,8 +4,9 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.fearless_utils.scale.dataType.byte -import jp.co.soramitsu.fearless_utils.scale.dataType.uint16 +import jp.co.soramitsu.schema.extensions.toHex +import jp.co.soramitsu.schema.scale.dataType.byte +import jp.co.soramitsu.schema.scale.dataType.uint16 import kotlin.math.ceil import kotlin.math.log2 import kotlin.math.max @@ -42,12 +43,12 @@ sealed class Era { object EraType : Primitive("Era") { override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Era { - val firstByte = jp.co.soramitsu.schema.extensions.toHex() + val firstByte = byte.read(scaleCodecReader).toHex() return if (firstByte == "00") { Era.Immortal } else { - val secondByte = jp.co.soramitsu.schema.extensions.toHex() + val secondByte = byte.read(scaleCodecReader).toHex() val encoded = (secondByte + firstByte).toInt(16) val period = 2 shl (encoded % 16) val quantizeFactor = max(1, period shr 12) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt index 7a5d7917..9681e56c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt index 58ebdbf5..60305095 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt @@ -9,8 +9,8 @@ import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.toByteArray -import jp.co.soramitsu.fearless_utils.scale.dataType.byte -import jp.co.soramitsu.fearless_utils.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.byte +import jp.co.soramitsu.schema.scale.dataType.compactInt private val SIGNED_MASK = 0b1000_0000.toUByte() diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt index 6a5d69f8..f0d87305 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt @@ -2,14 +2,12 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types. import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.schema.metadata.FunctionArgument -import jp.co.soramitsu.schema.metadata.callOrNull -import jp.co.soramitsu.schema.metadata.moduleOrNull -import jp.co.soramitsu.fearless_utils.scale.dataType.tuple -import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 +import jp.co.soramitsu.schema.scale.dataType.tuple +import jp.co.soramitsu.schema.scale.dataType.uint8 object GenericCall : Type("GenericCall") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt index 226a54a7..1dacfda1 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt @@ -1,6 +1,6 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.schema.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt index 1800ac66..65ad13a9 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt @@ -2,14 +2,12 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types. import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.metadata.Event import jp.co.soramitsu.schema.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.schema.metadata.Event -import jp.co.soramitsu.schema.metadata.eventOrNull -import jp.co.soramitsu.schema.metadata.moduleOrNull -import jp.co.soramitsu.fearless_utils.scale.dataType.tuple -import jp.co.soramitsu.fearless_utils.scale.dataType.uint8 +import jp.co.soramitsu.schema.scale.dataType.uint8 +import jp.co.soramitsu.schema.scale.dataType.tuple object GenericEvent : Type("GenericEvent") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt index e9ce676c..4e8ae2c2 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.primitives.Compact diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt index f7808341..ac27ac06 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt index 70bb7a25..70365d3b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics -import jp.co.soramitsu.schema.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") From 6c8cf443c1bf2c8d50af27ad4baf076a70bb9693 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 09:41:56 +0300 Subject: [PATCH 05/16] WIP --- .../fearless_utils/runtime/RuntimeSnapshot.kt | 5 ++- .../definitions/registry/TypePreset.kt | 42 +++++++++---------- .../definitions/types/generics/BitVec.kt | 8 ++-- .../definitions/types/generics/Bytes.kt | 2 +- .../definitions/types/generics/CallBytes.kt | 8 ++-- .../definitions/types/generics/Data.kt | 10 ++--- .../definitions/types/generics/Era.kt | 8 ++-- .../definitions/types/generics/EventRecord.kt | 2 +- .../definitions/types/generics/Extrinsic.kt | 37 ++++++++-------- .../types/generics/ExtrinsicExt.kt | 2 +- .../types/generics/ExtrinsicPayloadExtras.kt | 17 ++++---- .../types/generics/GenericAccountId.kt | 2 +- .../definitions/types/generics/GenericCall.kt | 21 ++++++---- .../generics/GenericConsensusEngineId.kt | 4 +- .../types/generics/GenericEvent.kt | 21 ++++++---- .../types/generics/GenericMultiAddress.kt | 2 +- .../definitions/types/generics/GenericSeal.kt | 2 +- .../definitions/types/generics/Hash.kt | 2 +- .../definitions/types/generics/Null.kt | 8 ++-- .../definitions/types/generics/OpaqueCall.kt | 12 +++--- .../types/generics/SessionKeysSubstrate.kt | 2 +- .../runtime/extrinsic/ExtrinsicBuilder.kt | 15 ++----- .../runtime/extrinsic/ExtrinsicBuilderExt.kt | 4 +- .../runtime/metadata/RuntimeMetadata.kt | 2 +- .../runtime/metadata/RuntimeMetadataExt.kt | 17 ++++---- .../schema/{RuntimeSnapshot.kt => Context.kt} | 4 +- .../schema/definitions/types/Type.kt | 10 ++--- .../schema/definitions/types/TypeExt.kt | 24 +++++------ .../definitions/types/composite/Alias.kt | 10 ++--- .../types/composite/CollectionEnum.kt | 6 +-- .../definitions/types/composite/DictEnum.kt | 8 ++-- .../definitions/types/composite/FixedArray.kt | 10 ++--- .../definitions/types/composite/Option.kt | 10 ++--- .../definitions/types/composite/SetType.kt | 8 ++-- .../definitions/types/composite/Struct.kt | 10 ++--- .../definitions/types/composite/Tuple.kt | 10 ++--- .../schema/definitions/types/composite/Vec.kt | 8 ++-- .../types/primitives/BooleanType.kt | 8 ++-- .../definitions/types/primitives/Compact.kt | 6 +-- .../types/primitives/DynamicByteArray.kt | 6 +-- .../types/primitives/FixedByteArray.kt | 8 ++-- .../definitions/types/primitives/UIntType.kt | 6 +-- .../schema/definitions/types/stub/FakeType.kt | 8 ++-- 43 files changed, 210 insertions(+), 205 deletions(-) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/BitVec.kt (86%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Bytes.kt (56%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/CallBytes.kt (72%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Data.kt (90%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Era.kt (90%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/EventRecord.kt (90%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Extrinsic.kt (68%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/ExtrinsicExt.kt (95%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/ExtrinsicPayloadExtras.kt (82%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericAccountId.kt (61%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericCall.kt (72%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericConsensusEngineId.kt (84%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericEvent.kt (75%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericMultiAddress.kt (91%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/GenericSeal.kt (89%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Hash.kt (74%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/Null.kt (61%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/OpaqueCall.kt (72%) rename fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/{jp/co/soramitsu/schema => runtime}/definitions/types/generics/SessionKeysSubstrate.kt (86%) rename schema/src/main/java/jp/co/soramitsu/schema/{RuntimeSnapshot.kt => Context.kt} (56%) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt index 42c5cb06..ffc12457 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt @@ -2,8 +2,9 @@ package jp.co.soramitsu.fearless_utils.runtime import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata +import jp.co.soramitsu.schema.Context -class RuntimeSnapshot( +class RuntimeSnapshot ( val typeRegistry: TypeRegistry, val metadata: RuntimeMetadata -) \ No newline at end of file +) : Context diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 76d86387..baf5c66b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -2,27 +2,27 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.BitVec -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Bytes -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.CallBytes -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Data -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.EraType -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.EventRecord -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Extrinsic -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericAccountId -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericCall -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericConsensus -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericConsensusEngineId -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericEvent -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericMultiAddress -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericSeal -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.GenericSealV0 -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H160 -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H256 -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.H512 -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.Null -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.OpaqueCall -import jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics.SessionKeysSubstrate +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.CallBytes +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EraType +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EventRecord +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericAccountId +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensus +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensusEngineId +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericEvent +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericMultiAddress +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSeal +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSealV0 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H160 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H512 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.OpaqueCall +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SessionKeysSubstrate import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType import jp.co.soramitsu.schema.definitions.types.primitives.u128 import jp.co.soramitsu.schema.definitions.types.primitives.u16 diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt similarity index 86% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt index 160df4cc..99fbfdcc 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/BitVec.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt @@ -1,9 +1,9 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.hash.isPositive -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.scale.dataType.compactInt import jp.co.soramitsu.schema.scale.dataType.uint @@ -16,7 +16,7 @@ object BitVec : Primitive("BitVec") { private val TWO = BigInteger("2") - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Bits { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Bits { val sizeInBits = compactInt.read(scaleCodecReader).toInt() val sizeInBytes = sizeInBytes(sizeInBits) @@ -35,7 +35,7 @@ object BitVec : Primitive("BitVec") { return bits } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Bits) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Bits) { val intValue = value.foldIndexed(BigInteger.ZERO) { index, acc, bit -> if (bit) { acc + TWO.pow(index) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt similarity index 56% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt index 37823099..e03a56a0 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Bytes.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Bytes.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt similarity index 72% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt index 1a5f4ef5..f50ac77c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/CallBytes.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.scale.dataType.byteArraySized import jp.co.soramitsu.schema.extensions.fromHex @@ -10,11 +10,11 @@ import jp.co.soramitsu.schema.extensions.fromHex object CallBytes : Primitive("CallBytes") { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): String { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): String { throw NotImplementedError() // the same as in polkascan implementation } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: String) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: String) { val bytes = value.fromHex() byteArraySized(bytes.size).write(scaleCodecWriter, bytes) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt similarity index 90% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt index 77fa2f64..546cf782 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt @@ -1,10 +1,10 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException @@ -22,7 +22,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) const val SHA_3_256 = "ShaThree256" } - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Entry { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Entry { return when (val typeIndex = byte.read(scaleCodecReader).toInt()) { 0 -> Entry(NONE, null) @@ -39,7 +39,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) val typeEntry = elements[typeIndex - offset] - val decoded = typeEntry.value.requireValue().decode(scaleCodecReader, runtime) + val decoded = typeEntry.value.requireValue().decode(scaleCodecReader, context) Entry(typeEntry.name, decoded) } @@ -50,7 +50,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + runtime: Context, value: Entry ) { when (value.name) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt similarity index 90% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt index fae0259f..320bf722 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Era.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.extensions.toHex import jp.co.soramitsu.schema.scale.dataType.byte @@ -42,7 +42,7 @@ sealed class Era { object EraType : Primitive("Era") { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Era { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Era { val firstByte = byte.read(scaleCodecReader).toHex() return if (firstByte == "00") { @@ -58,7 +58,7 @@ object EraType : Primitive("Era") { } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Era) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Era) { when (value) { is Era.Immortal -> byte.write(scaleCodecWriter, 0) is Era.Mortal -> { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt similarity index 90% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt index 9681e56c..1cfbdaa7 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/EventRecord.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt similarity index 68% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt index 60305095..8a0a7694 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt @@ -1,10 +1,11 @@ @file:Suppress("EXPERIMENTAL_API_USAGE") // unsigned types -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException @@ -34,53 +35,53 @@ object Extrinsic : Type("ExtrinsicsDecoder") { override val isFullyResolved: Boolean = true - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { val length = compactInt.read(scaleCodecReader) val extrinsicVersion = byte.read(scaleCodecReader).toUByte() val signature = if (isSigned(extrinsicVersion)) { Signature( - accountIdentifier = addressType(runtime).decode(scaleCodecReader, runtime), - signature = signatureType(runtime).decode(scaleCodecReader, runtime), - signedExtras = SignedExtras.decode(scaleCodecReader, runtime) + accountIdentifier = addressType(context).decode(scaleCodecReader, context), + signature = signatureType(context).decode(scaleCodecReader, context), + signedExtras = SignedExtras.decode(scaleCodecReader, context) ) } else { null } - val call = GenericCall.decode(scaleCodecReader, runtime) + val call = GenericCall.decode(scaleCodecReader, context) return Instance(signature, call) } override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + context: Context, value: Instance ) { val isSigned = value.signature != null - val extrinsicVersion = runtime.metadata.extrinsic.version.toInt().toUByte() + val extrinsicVersion = (context as RuntimeSnapshot).metadata.extrinsic.version.toInt().toUByte() val encodedVersion = encodedVersion(extrinsicVersion, isSigned).toByte() val signatureWrapperBytes = if (isSigned) { val signature = value.signature!! - val addressBytes = addressType(runtime).bytes(runtime, signature.accountIdentifier) - val signatureBytes = signatureType(runtime).bytes(runtime, signature.signature) - val signedExtrasBytes = SignedExtras.bytes(runtime, signature.signedExtras) + val addressBytes = addressType(context).bytes(context, signature.accountIdentifier) + val signatureBytes = signatureType(context).bytes(context, signature.signature) + val signedExtrasBytes = SignedExtras.bytes(context, signature.signedExtras) addressBytes + signatureBytes + signedExtrasBytes } else { byteArrayOf() } - val callBytes = GenericCall.toByteArray(runtime, value.call) + val callBytes = GenericCall.toByteArray(context, value.call) val extrinsicBodyBytes = byteArrayOf(encodedVersion) + signatureWrapperBytes + callBytes - Bytes.encode(scaleCodecWriter, runtime, extrinsicBodyBytes) + Bytes.encode(scaleCodecWriter, context, extrinsicBodyBytes) } override fun isValidInstance(instance: Any?): Boolean { @@ -99,13 +100,13 @@ object Extrinsic : Type("ExtrinsicsDecoder") { return extrinsicVersion and SIGNED_MASK != 0.toUByte() } - private fun addressType(runtime: RuntimeSnapshot): Type<*> { - return runtime.typeRegistry[TYPE_ADDRESS] + private fun addressType(context: Context): Type<*> { + return (context as RuntimeSnapshot).typeRegistry[TYPE_ADDRESS] ?: requiredTypeNotFound(TYPE_ADDRESS) } - private fun signatureType(runtime: RuntimeSnapshot): Type<*> { - return runtime.typeRegistry[TYPE_SIGNATURE] + private fun signatureType(context: Context): Type<*> { + return (context as RuntimeSnapshot).typeRegistry[TYPE_SIGNATURE] ?: requiredTypeNotFound(TYPE_SIGNATURE) } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt similarity index 95% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt index b5238092..261bfb11 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicExt.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType import jp.co.soramitsu.schema.definitions.types.composite.DictEnum diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt similarity index 82% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt index ef3f4d48..144bd558 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -1,8 +1,9 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.primitives.Compact @@ -53,24 +54,24 @@ open class ExtrinsicPayloadExtras( override fun decode( scaleCodecReader: ScaleCodecReader, - runtime: RuntimeSnapshot + context: Context ): ExtrinsicPayloadExtrasInstance { - val enabledSignedExtras = runtime.metadata.extrinsic.signedExtensions + val enabledSignedExtras = (context as RuntimeSnapshot).metadata.extrinsic.signedExtensions return enabledSignedExtras.associateWith { name -> - extrasMapping[name]?.decode(scaleCodecReader, runtime) + extrasMapping[name]?.decode(scaleCodecReader, context) } } override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + context: Context, value: ExtrinsicPayloadExtrasInstance ) { - val enabledSignedExtras = runtime.metadata.extrinsic.signedExtensions + val enabledSignedExtras = (context as RuntimeSnapshot).metadata.extrinsic.signedExtensions return enabledSignedExtras.forEach { name -> - extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, runtime, value[name]) + extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, context, value[name]) } } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt similarity index 61% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt index 6baf58c2..f4165f86 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericAccountId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericAccountId.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt similarity index 72% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt index f0d87305..10cbe8e4 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt @@ -1,9 +1,13 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.metadata.callOrNull +import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull +import jp.co.soramitsu.fearless_utils.runtime.metadata.Function +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple @@ -17,15 +21,15 @@ object GenericCall : Type("GenericCall") { override val isFullyResolved = true - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { val (moduleIndex, callIndex) = indexCoder.read(scaleCodecReader) .run { first.toInt() to second.toInt() } - val call = getCallOrThrow(runtime, moduleIndex, callIndex) + val call = getCallOrThrow(context as RuntimeSnapshot, moduleIndex, callIndex) val arguments = call.arguments.associate { argumentDefinition -> argumentDefinition.name to argumentDefinition.typeOrThrow() - .decode(scaleCodecReader, runtime) + .decode(scaleCodecReader, context) } return Instance(moduleIndex, callIndex, arguments) @@ -33,16 +37,16 @@ object GenericCall : Type("GenericCall") { override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + context: Context, value: Instance ) = with(value) { - val call = getCallOrThrow(runtime, moduleIndex, callIndex) + val call = getCallOrThrow(context as RuntimeSnapshot, moduleIndex, callIndex) indexCoder.write(scaleCodecWriter, moduleIndex.toUByte() to callIndex.toUByte()) call.arguments.forEach { argumentDefinition -> argumentDefinition.typeOrThrow() - .encodeUnsafe(scaleCodecWriter, runtime, arguments[argumentDefinition.name]) + .encodeUnsafe(scaleCodecWriter, context, arguments[argumentDefinition.name]) } } @@ -64,6 +68,7 @@ object GenericCall : Type("GenericCall") { ) } + private fun callNotFound(moduleIndex: Int, callIndex: Int): Nothing { throw EncodeDecodeException("No call found for index ($moduleIndex, $callIndex)") } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt similarity index 84% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt index 1dacfda1..807467e5 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericConsensusEngineId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt @@ -1,7 +1,7 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.schema.definitions.registry.getOrCreate +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt similarity index 75% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt index 65ad13a9..bd26209e 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericEvent.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt @@ -1,13 +1,16 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.Event -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.metadata.eventOrNull +import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.schema.scale.dataType.uint8 import jp.co.soramitsu.schema.scale.dataType.tuple +import jp.co.soramitsu.schema.scale.dataType.uint8 object GenericEvent : Type("GenericEvent") { @@ -17,14 +20,14 @@ object GenericEvent : Type("GenericEvent") { override val isFullyResolved = true - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { val (moduleIndex, eventIndex) = indexCoder.read(scaleCodecReader) .run { first.toInt() to second.toInt() } - val call = getEventOrThrow(runtime, moduleIndex, eventIndex) + val call = getEventOrThrow(context, moduleIndex, eventIndex) val arguments = call.arguments.map { argumentDefinition -> - argumentDefinition.requireNonNull().decode(scaleCodecReader, runtime) + argumentDefinition.requireNonNull().decode(scaleCodecReader, context) } return Instance(moduleIndex, eventIndex, arguments) @@ -32,7 +35,7 @@ object GenericEvent : Type("GenericEvent") { override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + runtime: Context, value: Instance ) = with(value) { val call = getEventOrThrow(runtime, moduleIndex, eventIndex) @@ -53,11 +56,11 @@ object GenericEvent : Type("GenericEvent") { this ?: throw EncodeDecodeException("Argument $name is not resolved") private fun getEventOrThrow( - runtime: RuntimeSnapshot, + context: Context, moduleIndex: Int, callIndex: Int ): Event { - return runtime.metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( + return (context as RuntimeSnapshot).metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( moduleIndex, callIndex ) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt similarity index 91% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt index 4e8ae2c2..46f5d2b2 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericMultiAddress.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt similarity index 89% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt index ac27ac06..eed83bbe 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/GenericSeal.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt similarity index 74% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt index fd30faf7..29d5fc5b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Hash.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Hash.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt similarity index 61% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt index eea1ba10..e2da875e 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/Null.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt @@ -1,17 +1,17 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context object Null : Primitive("Null") { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Any? { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { return null } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Any?) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { // pass } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt similarity index 72% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt index 115ee475..ae628080 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt @@ -1,8 +1,8 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.fromByteArray import jp.co.soramitsu.schema.definitions.types.toByteArray @@ -13,16 +13,16 @@ object OpaqueCall : Type("OpaqueCall") { override fun decode( scaleCodecReader: ScaleCodecReader, - runtime: RuntimeSnapshot + context: Context ): GenericCall.Instance { - val bytes = Bytes.decode(scaleCodecReader, runtime) + val bytes = Bytes.decode(scaleCodecReader, context) - return GenericCall.fromByteArray(runtime, bytes) + return GenericCall.fromByteArray(context, bytes) } override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + runtime: Context, value: GenericCall.Instance ) { val callEncoded = GenericCall.toByteArray(runtime, value) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt similarity index 86% rename from fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt rename to fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt index 70365d3b..2da7b3f4 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/jp/co/soramitsu/schema/definitions/types/generics/SessionKeysSubstrate.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,4 +1,4 @@ -package jp.co.soramitsu.fearless_utils.jp.co.soramitsu.schema.definitions.types.generics +package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt index 8e392b5e..f888bfab 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt @@ -5,19 +5,12 @@ import jp.co.soramitsu.fearless_utils.encrypt.Signer import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair import jp.co.soramitsu.fearless_utils.hash.Hasher.blake2b256 import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.AdditionalExtras -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.ExtrinsicPayloadExtrasInstance -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.MultiSignature -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SignedExtras -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.new -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.useScaleWriter +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* import jp.co.soramitsu.fearless_utils.runtime.metadata.call import jp.co.soramitsu.fearless_utils.runtime.metadata.module import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.chain.RuntimeVersion +import jp.co.soramitsu.schema.definitions.types.toHex +import jp.co.soramitsu.schema.definitions.types.useScaleWriter import java.math.BigInteger private val DEFAULT_TIP = BigInteger.ZERO @@ -136,4 +129,4 @@ class ExtrinsicBuilder( SignedExtras.TIP to tip, SignedExtras.NONCE to nonce ) -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderExt.kt index f06692e2..2f1b7210 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderExt.kt @@ -1,6 +1,6 @@ package jp.co.soramitsu.fearless_utils.runtime.extrinsic -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import java.math.BigInteger fun ExtrinsicBuilder.transfer(recipientAccountId: ByteArray, amount: BigInteger): ExtrinsicBuilder { @@ -15,4 +15,4 @@ fun ExtrinsicBuilder.transfer(recipientAccountId: ByteArray, amount: BigInteger) "value" to amount ) ) -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt index e4d0388e..e44fbc83 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadata.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.scale.EncodableStruct import java.math.BigInteger diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt index a3793799..0121a012 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt @@ -2,8 +2,9 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.hash.Hasher.xxHash128 import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.bytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.Context +import jp.co.soramitsu.schema.definitions.types.bytes +import jp.co.soramitsu.schema.extensions.toHexString /** * @throws NoSuchElementException if module was not found @@ -63,7 +64,7 @@ fun Module.eventOrNull(name: String): Event? = events?.get(name) * */ fun StorageEntry.storageKey(): String { - return jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) + return (moduleHash() + serviceHash()).toHexString(withPrefix = true) } fun StorageEntry.storageKeyOrNull() = nullOnException { storageKey() } @@ -84,7 +85,7 @@ fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key: Any?): String { else -> wrongEntryType() } - val keyEncoded = keyType?.bytes(runtime, key) ?: typeNotResolved(name) + val keyEncoded = keyType?.bytes(runtime as Context, key) ?: typeNotResolved(name) val storageKey = moduleHash() + serviceHash() + hasher.hashingFunction(keyEncoded) @@ -110,15 +111,15 @@ fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key1: Any?, key2: Any?): S val key1Type = type.key1 ?: typeNotResolved(name) val key2Type = type.key2 ?: typeNotResolved(name) - val key1Encoded = key1Type.bytes(runtime, key1) - val key2Encoded = key2Type.bytes(runtime, key2) + val key1Encoded = key1Type.bytes(runtime as Context, key1) + val key2Encoded = key2Type.bytes(runtime as Context, key2) val key1Hashed = type.key1Hasher.hashingFunction(key1Encoded) val key2Hashed = type.key2Hasher.hashingFunction(key2Encoded) val storageKey = moduleHash() + serviceHash() + key1Hashed + key2Hashed - return jp.co.soramitsu.schema.extensions.toHexString(withPrefix = true) + return storageKey.toHexString(withPrefix = true) } fun StorageEntry.storageKeyOrNull(runtime: RuntimeSnapshot, key1: Any?, key2: Any?) = @@ -144,4 +145,4 @@ private fun requireElementInMap(map: Map?, index: Int): V { if (map == null) throw NoSuchElementException() return map.values.elementAtOrNull(index) ?: throw NoSuchElementException() -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt b/schema/src/main/java/jp/co/soramitsu/schema/Context.kt similarity index 56% rename from schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt rename to schema/src/main/java/jp/co/soramitsu/schema/Context.kt index c1bc6f1a..ad4e9f25 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/RuntimeSnapshot.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/Context.kt @@ -1,4 +1,4 @@ package jp.co.soramitsu.schema -class RuntimeSnapshot { -} \ No newline at end of file +interface Context { +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt index b2399438..117d4253 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.schema.definitions.types import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class TypeReference(var value: Type<*>?) { @@ -36,14 +36,14 @@ abstract class Type(val name: String) { /** * @throws EncodeDecodeException */ - abstract fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): InstanceType + abstract fun decode(scaleCodecReader: ScaleCodecReader, context: Context): InstanceType /** * @throws EncodeDecodeException */ abstract fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: RuntimeSnapshot, + runtime: Context, value: InstanceType ) @@ -53,7 +53,7 @@ abstract class Type(val name: String) { * @throws EncodeDecodeException */ @Suppress("UNCHECKED_CAST") - fun encodeUnsafe(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Any?) { + fun encodeUnsafe(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { if (!isValidInstance(value)) { val valueTypeName = value?.let { it::class.java.simpleName } @@ -66,4 +66,4 @@ abstract class Type(val name: String) { override fun toString(): String { return name } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt index b3032aa2..adcaf230 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt @@ -5,7 +5,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.extensions.ensureExceptionType import jp.co.soramitsu.schema.extensions.fromHex import jp.co.soramitsu.schema.extensions.toHexString -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.composite.Alias import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import java.io.ByteArrayOutputStream @@ -24,7 +24,7 @@ fun Type<*>?.isFullyResolved() = this?.isFullyResolved ?: false /** * @throws EncodeDecodeException */ -fun Type.fromByteArray(runtime: RuntimeSnapshot, byteArray: ByteArray): I { +fun Type.fromByteArray(runtime: Context, byteArray: ByteArray): I { val reader = ScaleCodecReader(byteArray) return ensureUnifiedException { decode(reader, runtime) } @@ -33,22 +33,22 @@ fun Type.fromByteArray(runtime: RuntimeSnapshot, byteArray: ByteArray): I /** * @throws EncodeDecodeException */ -fun Type.fromHex(runtime: RuntimeSnapshot, hex: String): I { +fun Type.fromHex(runtime: Context, hex: String): I { return ensureUnifiedException { fromByteArray(runtime, hex.fromHex()) } } -fun Type.fromByteArrayOrNull(runtime: RuntimeSnapshot, byteArray: ByteArray): I? { +fun Type.fromByteArrayOrNull(runtime: Context, byteArray: ByteArray): I? { return runCatching { fromByteArray(runtime, byteArray) }.getOrNull() } -fun Type.fromHexOrNull(runtime: RuntimeSnapshot, hex: String): I? { +fun Type.fromHexOrNull(runtime: Context, hex: String): I? { return runCatching { fromHex(runtime, hex) }.getOrNull() } /** * @throws EncodeDecodeException */ -fun Type.toByteArray(runtime: RuntimeSnapshot, value: I): ByteArray { +fun Type.toByteArray(runtime: Context, value: I): ByteArray { return ensureUnifiedException { useScaleWriter { encode(this, runtime, value) } } @@ -59,27 +59,27 @@ fun Type.toByteArray(runtime: RuntimeSnapshot, value: I): ByteArray { * * @throws EncodeDecodeException */ -fun Type<*>.bytes(runtime: RuntimeSnapshot, value: Any?): ByteArray { +fun Type<*>.bytes(runtime: Context, value: Any?): ByteArray { return ensureUnifiedException { useScaleWriter { encodeUnsafe(this, runtime, value) } } } -fun Type.toByteArrayOrNull(runtime: RuntimeSnapshot, value: I): ByteArray? { +fun Type.toByteArrayOrNull(runtime: Context, value: I): ByteArray? { return runCatching { toByteArray(runtime, value) }.getOrNull() } -fun Type<*>.bytesOrNull(runtime: RuntimeSnapshot, value: Any?): ByteArray? { +fun Type<*>.bytesOrNull(runtime: Context, value: Any?): ByteArray? { return runCatching { bytes(runtime, value) }.getOrNull() } /** * @throws EncodeDecodeException */ -fun Type.toHex(runtime: RuntimeSnapshot, value: I) = +fun Type.toHex(runtime: Context, value: I) = toByteArray(runtime, value).toHexString(withPrefix = true) -fun Type.toHexOrNull(runtime: RuntimeSnapshot, value: I) = +fun Type.toHexOrNull(runtime: Context, value: I) = toByteArrayOrNull(runtime, value)?.toHexString(withPrefix = true) fun useScaleWriter(use: ScaleCodecWriter.() -> Unit): ByteArray { @@ -93,4 +93,4 @@ fun useScaleWriter(use: ScaleCodecWriter.() -> Unit): ByteArray { private inline fun ensureUnifiedException(block: () -> R): R { return ensureExceptionType(::EncodeDecodeException, block) -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt index 3db0f8a3..946f99a8 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt @@ -3,16 +3,16 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.TypeReference class Alias(alias: String, val aliasedReference: TypeReference) : Type(alias) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Any? { - return aliasedReference.requireValue().decode(scaleCodecReader, runtime) + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { + return aliasedReference.requireValue().decode(scaleCodecReader, context) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Any?) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { aliasedReference.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value) } @@ -22,4 +22,4 @@ class Alias(alias: String, val aliasedReference: TypeReference) : Type(ali override val isFullyResolved: Boolean get() = aliasedReference.isResolved() -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt index 4d824a21..e5abbc5a 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt @@ -4,18 +4,18 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.scale.dataType.CollectionEnumType -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context class CollectionEnum( name: String, val elements: List ) : Type(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): String { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): String { return CollectionEnumType(elements).read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: String) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: String) { CollectionEnumType(elements).write(scaleCodecWriter, value) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt index a0f93616..c7fc498c 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt @@ -4,7 +4,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull @@ -15,16 +15,16 @@ open class DictEnum( class Entry(val name: String, val value: T) - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Entry { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Entry { val typeIndex = scaleCodecReader.readByte() val entry = elements[typeIndex.toInt()] - val decoded = entry.value.requireValue().decode(scaleCodecReader, runtime) + val decoded = entry.value.requireValue().decode(scaleCodecReader, context) return Entry(entry.name, decoded) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Entry) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Entry) { val index = elements.indexOfFirst { it.name == value.name } if (index == -1) elementNotFound(value.name) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt index bb53c504..fbc1876a 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt @@ -3,23 +3,23 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context class FixedArray(name: String, val length: Int, typeReference: TypeReference) : WrapperType>(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): List<*> { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { val type = typeReference.requireValue() val list = mutableListOf() repeat(length) { - list += type.decode(scaleCodecReader, runtime) + list += type.decode(scaleCodecReader, context) } return list } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { val type = typeReference.requireValue() value.forEach { @@ -32,4 +32,4 @@ class FixedArray(name: String, val length: Int, typeReference: TypeReference) : return instance is List<*> && instance.size == length && instance.all(type::isValidInstance) } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt index 16be013b..5f428227 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt @@ -4,7 +4,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class Option( @@ -12,7 +12,7 @@ class Option( typeReference: TypeReference ) : WrapperType(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Any? { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { if (typeReference.requireValue() is BooleanType) { return when (scaleCodecReader.readByte().toInt()) { 0 -> null @@ -24,10 +24,10 @@ class Option( val some: Boolean = scaleCodecReader.readBoolean() - return if (some) typeReference.requireValue().decode(scaleCodecReader, runtime) else null + return if (some) typeReference.requireValue().decode(scaleCodecReader, context) else null } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Any?) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { val type = typeReference.requireValue() if (type is BooleanType) { @@ -45,4 +45,4 @@ class Option( override fun isValidInstance(instance: Any?): Boolean { return instance == null || typeReference.requireValue().isValidInstance(instance) } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt index 9d59ce4a..f41b36c2 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.primitives.NumberType import java.math.BigInteger @@ -13,11 +13,11 @@ class SetType( val valueList: LinkedHashMap ) : WrapperType>(name, valueTypeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Set { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Set { val valueType = typeReference.requireValue() require(valueType is NumberType) - val value = valueType.decode(scaleCodecReader, runtime) + val value = valueType.decode(scaleCodecReader, context) return valueList.mapNotNullTo(mutableSetOf()) { (name, mask) -> if (value.and(mask).signum() == 1) { @@ -28,7 +28,7 @@ class SetType( } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Set) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Set) { val valueType = typeReference.requireValue() require(valueType is NumberType) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt index d4e60e65..40d406ee 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt @@ -5,7 +5,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.skipAliases -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context @Suppress("UNCHECKED_CAST") class Struct( @@ -17,15 +17,15 @@ class Struct( inline operator fun get(key: String): R? = mapping[key] as? R } - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { val values = mapping.mapValues { (_, type) -> - type.requireValue().decode(scaleCodecReader, runtime) + type.requireValue().decode(scaleCodecReader, context) } return Instance(values) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Instance) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Instance) { mapping.forEach { (name, type) -> type.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value[name]) } @@ -43,4 +43,4 @@ class Struct( override val isFullyResolved: Boolean get() = mapping.all { (_, ref) -> ref.isResolved() } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt index b46528bc..3161ec2e 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt @@ -4,16 +4,16 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull class Tuple(name: String, val typeReferences: List) : Type>(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): List<*> { - return typeReferences.map { it.requireValue().decode(scaleCodecReader, runtime) } + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { + return typeReferences.map { it.requireValue().decode(scaleCodecReader, context) } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { typeReferences.zip(value).onEach { (type, value) -> type.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value) } @@ -35,4 +35,4 @@ class Tuple(name: String, val typeReferences: List) : Type>(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): List<*> { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { val type = typeReference.requireValue() val size = compactInt.read(scaleCodecReader) val result = mutableListOf() repeat(size.toInt()) { - val element = type.decode(scaleCodecReader, runtime) + val element = type.decode(scaleCodecReader, context) result.add(element) } return result } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { val type = typeReference.requireValue() val size = value.size.toBigInteger() compactInt.write(scaleCodecWriter, size) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt index 22fb51b0..a9d5cfff 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt @@ -2,17 +2,17 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context object BooleanType : Primitive("bool") { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Boolean { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Boolean { return scaleCodecReader.readBoolean() } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Boolean) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Boolean) { scaleCodecWriter.write(ScaleCodecWriter.BOOL, value) } override fun isValidInstance(instance: Any?) = instance is Boolean -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt index 655acc85..7e7ebdf3 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt @@ -4,15 +4,15 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.compactInt import java.math.BigInteger -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context class Compact(name: String) : NumberType(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): BigInteger { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): BigInteger { return compactInt.read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: BigInteger) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: BigInteger) { return compactInt.write(scaleCodecWriter, value) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt index e3b6e60e..43879b56 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt @@ -3,15 +3,15 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.byteArray -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context class DynamicByteArray(name: String) : Primitive(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): ByteArray { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): ByteArray { return byteArray.read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: ByteArray) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: ByteArray) { return byteArray.write(scaleCodecWriter, value) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt index b82bdae7..fdafc5e3 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt @@ -2,19 +2,19 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context open class FixedByteArray(name: String, val length: Int) : Primitive(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): ByteArray { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): ByteArray { return scaleCodecReader.readByteArray(length) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: ByteArray) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: ByteArray) { return scaleCodecWriter.directWrite(value, 0, length) } override fun isValidInstance(instance: Any?): Boolean { return instance is ByteArray && instance.size == length } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt index 7fe23154..599b3b62 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt @@ -4,7 +4,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.uint import java.math.BigInteger -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context val u8 = UIntType(8) val u16 = UIntType(16) @@ -23,9 +23,9 @@ class UIntType(bits: Int) : NumberType("u$bits") { private val codec = uint(size = bytes) - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: BigInteger) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: BigInteger) { codec.write(scaleCodecWriter, value) } - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot) = codec.read(scaleCodecReader) + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context) = codec.read(scaleCodecReader) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt index f868d942..10718bb3 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt @@ -3,15 +3,15 @@ package jp.co.soramitsu.schema.definitions.types.stub import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.RuntimeSnapshot +import jp.co.soramitsu.schema.Context class FakeType(name: String) : Type(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, runtime: RuntimeSnapshot): Nothing { + override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Nothing { throw IllegalArgumentException("Fake") } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: RuntimeSnapshot, value: Nothing) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Nothing) { throw IllegalArgumentException("Fake") } @@ -20,4 +20,4 @@ class FakeType(name: String) : Type(name) { } override val isFullyResolved = true -} \ No newline at end of file +} From cf0ebd7847b5eb368d694594514e8fefc78bc3a7 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 12:20:36 +0300 Subject: [PATCH 06/16] WIP --- .../fearless_utils/runtime/RuntimeSnapshot.kt | 4 +- .../definitions/registry/TypePreset.kt | 11 ++--- .../definitions/types/generics/BitVec.kt | 6 +-- .../definitions/types/generics/CallBytes.kt | 6 +-- .../definitions/types/generics/Data.kt | 9 ++-- .../runtime/definitions/types/generics/Era.kt | 6 +-- .../definitions/types/generics/Extrinsic.kt | 35 +++++++-------- .../types/generics/ExtrinsicPayloadExtras.kt | 45 +++++++++++-------- .../definitions/types/generics/GenericCall.kt | 19 ++++---- .../types/generics/GenericEvent.kt | 17 +++---- .../definitions/types/generics/Null.kt | 5 +-- .../definitions/types/generics/OpaqueCall.kt | 14 +++--- .../runtime/extrinsic/ExtrinsicBuilder.kt | 8 ++-- .../runtime/metadata/RuntimeMetadataExt.kt | 14 +++--- .../runtime/definitions/types/BaseTypeTest.kt | 6 +-- .../java/jp/co/soramitsu/schema/Context.kt | 4 -- .../schema/definitions/types/Type.kt | 13 ++---- .../schema/definitions/types/TypeExt.kt | 45 +++++++++---------- .../definitions/types/composite/Alias.kt | 9 ++-- .../types/composite/CollectionEnum.kt | 5 +-- .../definitions/types/composite/DictEnum.kt | 9 ++-- .../definitions/types/composite/FixedArray.kt | 9 ++-- .../definitions/types/composite/Option.kt | 9 ++-- .../definitions/types/composite/SetType.kt | 9 ++-- .../definitions/types/composite/Struct.kt | 9 ++-- .../definitions/types/composite/Tuple.kt | 9 ++-- .../schema/definitions/types/composite/Vec.kt | 9 ++-- .../types/primitives/BooleanType.kt | 5 +-- .../definitions/types/primitives/Compact.kt | 5 +-- .../types/primitives/DynamicByteArray.kt | 5 +-- .../types/primitives/FixedByteArray.kt | 5 +-- .../definitions/types/primitives/UIntType.kt | 5 +-- .../schema/definitions/types/stub/FakeType.kt | 5 +-- 33 files changed, 173 insertions(+), 201 deletions(-) delete mode 100644 schema/src/main/java/jp/co/soramitsu/schema/Context.kt diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt index ffc12457..de31d20a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt @@ -2,9 +2,9 @@ package jp.co.soramitsu.fearless_utils.runtime import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata -import jp.co.soramitsu.schema.Context + class RuntimeSnapshot ( val typeRegistry: TypeRegistry, val metadata: RuntimeMetadata -) : Context +) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index baf5c66b..5a1905f3 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -1,5 +1,6 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.composite.Alias import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec @@ -67,7 +68,7 @@ fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { return createTypePresetBuilder().apply(builder) } -fun substratePreParsePreset(): TypePreset = typePreset { +fun substratePreParsePreset(context: RuntimeSnapshot): TypePreset = typePreset { type(BooleanType) type(u8) @@ -79,7 +80,7 @@ fun substratePreParsePreset(): TypePreset = typePreset { type(GenericAccountId) type(Null) - type(GenericCall) + type(GenericCall(context)) fakeType("GenericBlock") @@ -92,7 +93,7 @@ fun substratePreParsePreset(): TypePreset = typePreset { type(Bytes) type(BitVec) - type(Extrinsic) + type(Extrinsic(context)) type(CallBytes) // seems to be unused in runtime type(EraType) @@ -108,9 +109,9 @@ fun substratePreParsePreset(): TypePreset = typePreset { type(GenericMultiAddress(this)) - type(OpaqueCall) + type(OpaqueCall(context)) - type(GenericEvent) + type(GenericEvent(context)) type(EventRecord(this)) alias("::Source", "LookupSource") diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt index 99fbfdcc..76b3f7c1 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVec.kt @@ -3,7 +3,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.hash.isPositive -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.scale.dataType.compactInt import jp.co.soramitsu.schema.scale.dataType.uint @@ -16,7 +16,7 @@ object BitVec : Primitive("BitVec") { private val TWO = BigInteger("2") - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Bits { + override fun decode(scaleCodecReader: ScaleCodecReader): Bits { val sizeInBits = compactInt.read(scaleCodecReader).toInt() val sizeInBytes = sizeInBytes(sizeInBits) @@ -35,7 +35,7 @@ object BitVec : Primitive("BitVec") { return bits } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Bits) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Bits) { val intValue = value.foldIndexed(BigInteger.ZERO) { index, acc, bit -> if (bit) { acc + TWO.pow(index) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt index f50ac77c..f31ad742 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.scale.dataType.byteArraySized import jp.co.soramitsu.schema.extensions.fromHex @@ -10,11 +10,11 @@ import jp.co.soramitsu.schema.extensions.fromHex object CallBytes : Primitive("CallBytes") { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): String { + override fun decode(scaleCodecReader: ScaleCodecReader): String { throw NotImplementedError() // the same as in polkascan implementation } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: String) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: String) { val bytes = value.fromHex() byteArraySized(bytes.size).write(scaleCodecWriter, bytes) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt index 546cf782..33c47371 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt @@ -4,7 +4,7 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException @@ -22,7 +22,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) const val SHA_3_256 = "ShaThree256" } - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Entry { + override fun decode(scaleCodecReader: ScaleCodecReader): Entry { return when (val typeIndex = byte.read(scaleCodecReader).toInt()) { 0 -> Entry(NONE, null) @@ -39,7 +39,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) val typeEntry = elements[typeIndex - offset] - val decoded = typeEntry.value.requireValue().decode(scaleCodecReader, context) + val decoded = typeEntry.value.requireValue().decode(scaleCodecReader) Entry(typeEntry.name, decoded) } @@ -50,7 +50,6 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: Context, value: Entry ) { when (value.name) { @@ -72,7 +71,7 @@ class Data(preset: TypePresetBuilder) : DictEnum("Data", createMapping(preset)) val type = elements[index].value.requireValue() scaleCodecWriter.writeByte(index + offset) - type.encodeUnsafe(scaleCodecWriter, runtime, value.value) + type.encodeUnsafe(scaleCodecWriter, value.value) } } } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt index 320bf722..86336862 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Era.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.primitives.Primitive import jp.co.soramitsu.schema.extensions.toHex import jp.co.soramitsu.schema.scale.dataType.byte @@ -42,7 +42,7 @@ sealed class Era { object EraType : Primitive("Era") { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Era { + override fun decode(scaleCodecReader: ScaleCodecReader): Era { val firstByte = byte.read(scaleCodecReader).toHex() return if (firstByte == "00") { @@ -58,7 +58,7 @@ object EraType : Primitive("Era") { } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Era) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Era) { when (value) { is Era.Immortal -> byte.write(scaleCodecWriter, 0) is Era.Mortal -> { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt index 8a0a7694..222f1a54 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt @@ -5,7 +5,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException @@ -18,7 +18,7 @@ private val SIGNED_MASK = 0b1000_0000.toUByte() private const val TYPE_ADDRESS = "Address" private const val TYPE_SIGNATURE = "ExtrinsicSignature" -object Extrinsic : Type("ExtrinsicsDecoder") { +class Extrinsic(private val context: RuntimeSnapshot) : Type("ExtrinsicsDecoder") { class Instance( val signature: Signature?, @@ -35,53 +35,52 @@ object Extrinsic : Type("ExtrinsicsDecoder") { override val isFullyResolved: Boolean = true - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader): Instance { val length = compactInt.read(scaleCodecReader) val extrinsicVersion = byte.read(scaleCodecReader).toUByte() val signature = if (isSigned(extrinsicVersion)) { Signature( - accountIdentifier = addressType(context).decode(scaleCodecReader, context), - signature = signatureType(context).decode(scaleCodecReader, context), - signedExtras = SignedExtras.decode(scaleCodecReader, context) + accountIdentifier = addressType(context).decode(scaleCodecReader), + signature = signatureType(context).decode(scaleCodecReader), + signedExtras = SignedExtras(context).decode(scaleCodecReader, ) ) } else { null } - val call = GenericCall.decode(scaleCodecReader, context) + val call = GenericCall(context).decode(scaleCodecReader) return Instance(signature, call) } override fun encode( scaleCodecWriter: ScaleCodecWriter, - context: Context, value: Instance ) { val isSigned = value.signature != null - val extrinsicVersion = (context as RuntimeSnapshot).metadata.extrinsic.version.toInt().toUByte() + val extrinsicVersion = context.metadata.extrinsic.version.toInt().toUByte() val encodedVersion = encodedVersion(extrinsicVersion, isSigned).toByte() val signatureWrapperBytes = if (isSigned) { val signature = value.signature!! - val addressBytes = addressType(context).bytes(context, signature.accountIdentifier) - val signatureBytes = signatureType(context).bytes(context, signature.signature) - val signedExtrasBytes = SignedExtras.bytes(context, signature.signedExtras) + val addressBytes = addressType(context).bytes(signature.accountIdentifier) + val signatureBytes = signatureType(context).bytes(signature.signature) + val signedExtrasBytes = SignedExtras(context).bytes(signature.signedExtras) addressBytes + signatureBytes + signedExtrasBytes } else { byteArrayOf() } - val callBytes = GenericCall.toByteArray(context, value.call) + val callBytes = GenericCall(context).toByteArray(value.call) val extrinsicBodyBytes = byteArrayOf(encodedVersion) + signatureWrapperBytes + callBytes - Bytes.encode(scaleCodecWriter, context, extrinsicBodyBytes) + Bytes.encode(scaleCodecWriter, extrinsicBodyBytes) } override fun isValidInstance(instance: Any?): Boolean { @@ -100,13 +99,13 @@ object Extrinsic : Type("ExtrinsicsDecoder") { return extrinsicVersion and SIGNED_MASK != 0.toUByte() } - private fun addressType(context: Context): Type<*> { - return (context as RuntimeSnapshot).typeRegistry[TYPE_ADDRESS] + private fun addressType(context: RuntimeSnapshot): Type<*> { + return context.typeRegistry[TYPE_ADDRESS] ?: requiredTypeNotFound(TYPE_ADDRESS) } - private fun signatureType(context: Context): Type<*> { - return (context as RuntimeSnapshot).typeRegistry[TYPE_SIGNATURE] + private fun signatureType(context: RuntimeSnapshot): Type<*> { + return context.typeRegistry[TYPE_SIGNATURE] ?: requiredTypeNotFound(TYPE_SIGNATURE) } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt index 144bd558..f522cd32 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -3,7 +3,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.primitives.Compact @@ -15,63 +15,70 @@ private const val _MORTALITY = "CheckMortality" private const val _NONCE = "CheckNonce" private const val _TIP = "ChargeTransactionPayment" -object SignedExtras : ExtrinsicPayloadExtras( +class SignedExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( name = "SignedExtras", extrasMapping = mapOf( _MORTALITY to EraType, _NONCE to Compact("Compact"), _TIP to Compact("Compact") - ) + ), + context ) { - const val ERA = _MORTALITY - const val NONCE = _NONCE - const val TIP = _TIP + + companion object { + const val ERA = _MORTALITY + const val NONCE = _NONCE + const val TIP = _TIP + } } private const val _GENESIS = "CheckGenesis" private const val _SPEC_VERSION = "CheckSpecVersion" private const val _TX_VERSION = "CheckTxVersion" -object AdditionalExtras : ExtrinsicPayloadExtras( +class AdditionalExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( name = "AdditionalExtras", extrasMapping = mapOf( _MORTALITY to H256, _GENESIS to H256, _SPEC_VERSION to u32, _TX_VERSION to u32 - ) + ), + context ) { - const val BLOCK_HASH = _MORTALITY - const val GENESIS = _GENESIS - const val SPEC_VERSION = _SPEC_VERSION - const val TX_VERSION = _TX_VERSION + + companion object { + const val BLOCK_HASH = _MORTALITY + const val GENESIS = _GENESIS + const val SPEC_VERSION = _SPEC_VERSION + const val TX_VERSION = _TX_VERSION + } } open class ExtrinsicPayloadExtras( name: String, - private val extrasMapping: Map> + private val extrasMapping: Map>, + private val context: RuntimeSnapshot ) : Type(name) { override fun decode( scaleCodecReader: ScaleCodecReader, - context: Context ): ExtrinsicPayloadExtrasInstance { - val enabledSignedExtras = (context as RuntimeSnapshot).metadata.extrinsic.signedExtensions + val enabledSignedExtras = context.metadata.extrinsic.signedExtensions return enabledSignedExtras.associateWith { name -> - extrasMapping[name]?.decode(scaleCodecReader, context) + extrasMapping[name]?.decode(scaleCodecReader) } } override fun encode( scaleCodecWriter: ScaleCodecWriter, - context: Context, value: ExtrinsicPayloadExtrasInstance ) { - val enabledSignedExtras = (context as RuntimeSnapshot).metadata.extrinsic.signedExtensions + val enabledSignedExtras = context.metadata.extrinsic.signedExtensions return enabledSignedExtras.forEach { name -> - extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, context, value[name]) + extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, value[name]) } } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt index 10cbe8e4..f9b49670 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt @@ -3,17 +3,16 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.metadata.Function import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument import jp.co.soramitsu.fearless_utils.runtime.metadata.callOrNull import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull -import jp.co.soramitsu.fearless_utils.runtime.metadata.Function -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple import jp.co.soramitsu.schema.scale.dataType.uint8 -object GenericCall : Type("GenericCall") { +class GenericCall(private val context: RuntimeSnapshot) : Type("GenericCall") { class Instance(val moduleIndex: Int, val callIndex: Int, val arguments: Map) @@ -21,15 +20,15 @@ object GenericCall : Type("GenericCall") { override val isFullyResolved = true - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader): Instance { val (moduleIndex, callIndex) = indexCoder.read(scaleCodecReader) .run { first.toInt() to second.toInt() } - val call = getCallOrThrow(context as RuntimeSnapshot, moduleIndex, callIndex) + val call = getCallOrThrow(moduleIndex, callIndex) val arguments = call.arguments.associate { argumentDefinition -> argumentDefinition.name to argumentDefinition.typeOrThrow() - .decode(scaleCodecReader, context) + .decode(scaleCodecReader) } return Instance(moduleIndex, callIndex, arguments) @@ -37,16 +36,15 @@ object GenericCall : Type("GenericCall") { override fun encode( scaleCodecWriter: ScaleCodecWriter, - context: Context, value: Instance ) = with(value) { - val call = getCallOrThrow(context as RuntimeSnapshot, moduleIndex, callIndex) + val call = getCallOrThrow(moduleIndex, callIndex) indexCoder.write(scaleCodecWriter, moduleIndex.toUByte() to callIndex.toUByte()) call.arguments.forEach { argumentDefinition -> argumentDefinition.typeOrThrow() - .encodeUnsafe(scaleCodecWriter, context, arguments[argumentDefinition.name]) + .encodeUnsafe(scaleCodecWriter, arguments[argumentDefinition.name]) } } @@ -58,11 +56,10 @@ object GenericCall : Type("GenericCall") { type ?: throw EncodeDecodeException("Argument $name is not resolved") private fun getCallOrThrow( - runtime: RuntimeSnapshot, moduleIndex: Int, callIndex: Int ): Function { - return runtime.metadata.moduleOrNull(moduleIndex)?.callOrNull(callIndex) ?: callNotFound( + return context.metadata.moduleOrNull(moduleIndex)?.callOrNull(callIndex) ?: callNotFound( moduleIndex, callIndex ) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt index bd26209e..31741480 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt @@ -6,13 +6,12 @@ import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.Event import jp.co.soramitsu.fearless_utils.runtime.metadata.eventOrNull import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple import jp.co.soramitsu.schema.scale.dataType.uint8 -object GenericEvent : Type("GenericEvent") { +class GenericEvent(val context: RuntimeSnapshot) : Type("GenericEvent") { class Instance(val moduleIndex: Int, val eventIndex: Int, val arguments: List) @@ -20,14 +19,14 @@ object GenericEvent : Type("GenericEvent") { override val isFullyResolved = true - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader): Instance { val (moduleIndex, eventIndex) = indexCoder.read(scaleCodecReader) .run { first.toInt() to second.toInt() } - val call = getEventOrThrow(context, moduleIndex, eventIndex) + val call = getEventOrThrow(moduleIndex, eventIndex) val arguments = call.arguments.map { argumentDefinition -> - argumentDefinition.requireNonNull().decode(scaleCodecReader, context) + argumentDefinition.requireNonNull().decode(scaleCodecReader) } return Instance(moduleIndex, eventIndex, arguments) @@ -35,16 +34,15 @@ object GenericEvent : Type("GenericEvent") { override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: Context, value: Instance ) = with(value) { - val call = getEventOrThrow(runtime, moduleIndex, eventIndex) + val call = getEventOrThrow(moduleIndex, eventIndex) indexCoder.write(scaleCodecWriter, moduleIndex.toUByte() to eventIndex.toUByte()) call.arguments.forEachIndexed { index, argumentType -> argumentType.requireNonNull() - .encodeUnsafe(scaleCodecWriter, runtime, arguments[index]) + .encodeUnsafe(scaleCodecWriter, arguments[index]) } } @@ -56,11 +54,10 @@ object GenericEvent : Type("GenericEvent") { this ?: throw EncodeDecodeException("Argument $name is not resolved") private fun getEventOrThrow( - context: Context, moduleIndex: Int, callIndex: Int ): Event { - return (context as RuntimeSnapshot).metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( + return context.metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( moduleIndex, callIndex ) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt index e2da875e..b282cd53 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Null.kt @@ -3,15 +3,14 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.schema.Context object Null : Primitive("Null") { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { + override fun decode(scaleCodecReader: ScaleCodecReader): Any? { return null } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Any?) { // pass } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt index ae628080..b1a813ed 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt @@ -2,32 +2,30 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.fromByteArray import jp.co.soramitsu.schema.definitions.types.toByteArray -object OpaqueCall : Type("OpaqueCall") { +class OpaqueCall(private val context: RuntimeSnapshot) : Type("OpaqueCall") { override val isFullyResolved = true override fun decode( scaleCodecReader: ScaleCodecReader, - context: Context ): GenericCall.Instance { - val bytes = Bytes.decode(scaleCodecReader, context) + val bytes = Bytes.decode(scaleCodecReader) - return GenericCall.fromByteArray(context, bytes) + return GenericCall(context).fromByteArray(bytes) } override fun encode( scaleCodecWriter: ScaleCodecWriter, - runtime: Context, value: GenericCall.Instance ) { - val callEncoded = GenericCall.toByteArray(runtime, value) + val callEncoded = GenericCall(context).toByteArray(value) - return Bytes.encode(scaleCodecWriter, runtime, callEncoded) + return Bytes.encode(scaleCodecWriter, callEncoded) } override fun isValidInstance(instance: Any?): Boolean { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt index f888bfab..48a954de 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt @@ -69,7 +69,7 @@ class ExtrinsicBuilder( call = call ) - return Extrinsic.toHex(runtime, extrinsic) + return Extrinsic(runtime).toHex(extrinsic) } private fun maybeWrapInBatch(): GenericCall.Instance { @@ -95,9 +95,9 @@ class ExtrinsicBuilder( ) val payloadBytes = useScaleWriter { - GenericCall.encode(this, runtime, call) - SignedExtras.encode(this, runtime, signedExtrasInstance) - AdditionalExtras.encode(this, runtime, additionalExtrasInstance) + GenericCall(runtime).encode(this, call) + SignedExtras(runtime).encode(this, signedExtrasInstance) + AdditionalExtras(runtime).encode(this, additionalExtrasInstance) } val messageToSign = if (payloadBytes.size > PAYLOAD_HASH_THRESHOLD) { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt index 0121a012..bd6424ea 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataExt.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.hash.Hasher.xxHash128 import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.schema.Context + import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.extensions.toHexString @@ -85,7 +85,7 @@ fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key: Any?): String { else -> wrongEntryType() } - val keyEncoded = keyType?.bytes(runtime as Context, key) ?: typeNotResolved(name) + val keyEncoded = keyType?.bytes(key) ?: typeNotResolved(name) val storageKey = moduleHash() + serviceHash() + hasher.hashingFunction(keyEncoded) @@ -105,14 +105,14 @@ fun StorageEntry.storageKeyOrNull(runtime: RuntimeSnapshot, key1: Any?) = nullOn * @throws IllegalStateException if some of types used for encoding cannot be resolved * @throws EncodeDecodeException if error happened during encoding */ -fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key1: Any?, key2: Any?): String { +fun StorageEntry.storageKey(key1: Any?, key2: Any?): String { if (type !is StorageEntryType.DoubleMap) wrongEntryType() val key1Type = type.key1 ?: typeNotResolved(name) val key2Type = type.key2 ?: typeNotResolved(name) - val key1Encoded = key1Type.bytes(runtime as Context, key1) - val key2Encoded = key2Type.bytes(runtime as Context, key2) + val key1Encoded = key1Type.bytes(key1) + val key2Encoded = key2Type.bytes(key2) val key1Hashed = type.key1Hasher.hashingFunction(key1Encoded) val key2Hashed = type.key2Hasher.hashingFunction(key2Encoded) @@ -122,9 +122,9 @@ fun StorageEntry.storageKey(runtime: RuntimeSnapshot, key1: Any?, key2: Any?): S return storageKey.toHexString(withPrefix = true) } -fun StorageEntry.storageKeyOrNull(runtime: RuntimeSnapshot, key1: Any?, key2: Any?) = +fun StorageEntry.storageKeyOrNull(key1: Any?, key2: Any?) = nullOnException { - storageKey(runtime, key1, key2) + storageKey(key1, key2) } private fun typeNotResolved(entryName: String): Nothing = diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt index a290f103..bd3315cc 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt @@ -5,8 +5,6 @@ import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 import jp.co.soramitsu.fearless_utils.runtime.metadata.Event import jp.co.soramitsu.fearless_utils.runtime.metadata.ExtrinsicMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.Function @@ -14,6 +12,8 @@ import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument import jp.co.soramitsu.fearless_utils.runtime.metadata.Module import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.Storage +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u8 import java.math.BigInteger abstract class BaseTypeTest { @@ -73,4 +73,4 @@ abstract class BaseTypeTest { ) ) -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/Context.kt b/schema/src/main/java/jp/co/soramitsu/schema/Context.kt deleted file mode 100644 index ad4e9f25..00000000 --- a/schema/src/main/java/jp/co/soramitsu/schema/Context.kt +++ /dev/null @@ -1,4 +0,0 @@ -package jp.co.soramitsu.schema - -interface Context { -} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt index 117d4253..bfb9f213 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt @@ -2,7 +2,6 @@ package jp.co.soramitsu.schema.definitions.types import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class TypeReference(var value: Type<*>?) { @@ -36,16 +35,12 @@ abstract class Type(val name: String) { /** * @throws EncodeDecodeException */ - abstract fun decode(scaleCodecReader: ScaleCodecReader, context: Context): InstanceType + abstract fun decode(scaleCodecReader: ScaleCodecReader): InstanceType /** * @throws EncodeDecodeException */ - abstract fun encode( - scaleCodecWriter: ScaleCodecWriter, - runtime: Context, - value: InstanceType - ) + abstract fun encode(scaleCodecWriter: ScaleCodecWriter, value: InstanceType) abstract fun isValidInstance(instance: Any?): Boolean @@ -53,14 +48,14 @@ abstract class Type(val name: String) { * @throws EncodeDecodeException */ @Suppress("UNCHECKED_CAST") - fun encodeUnsafe(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { + fun encodeUnsafe(scaleCodecWriter: ScaleCodecWriter, value: Any?) { if (!isValidInstance(value)) { val valueTypeName = value?.let { it::class.java.simpleName } throw EncodeDecodeException("$value ($valueTypeName) is not a valid instance if $this") } - encode(scaleCodecWriter, runtime, value as InstanceType) + encode(scaleCodecWriter, value as InstanceType) } override fun toString(): String { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt index adcaf230..f8ee4879 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt @@ -2,12 +2,11 @@ package jp.co.soramitsu.schema.definitions.types import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.schema.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.extensions.ensureExceptionType import jp.co.soramitsu.schema.extensions.fromHex import jp.co.soramitsu.schema.extensions.toHexString -import jp.co.soramitsu.schema.Context -import jp.co.soramitsu.schema.definitions.types.composite.Alias -import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import java.io.ByteArrayOutputStream /** @@ -24,33 +23,33 @@ fun Type<*>?.isFullyResolved() = this?.isFullyResolved ?: false /** * @throws EncodeDecodeException */ -fun Type.fromByteArray(runtime: Context, byteArray: ByteArray): I { +fun Type.fromByteArray(byteArray: ByteArray): I { val reader = ScaleCodecReader(byteArray) - return ensureUnifiedException { decode(reader, runtime) } + return ensureUnifiedException { decode(reader) } } /** * @throws EncodeDecodeException */ -fun Type.fromHex(runtime: Context, hex: String): I { - return ensureUnifiedException { fromByteArray(runtime, hex.fromHex()) } +fun Type.fromHex(hex: String): I { + return ensureUnifiedException { fromByteArray( hex.fromHex()) } } -fun Type.fromByteArrayOrNull(runtime: Context, byteArray: ByteArray): I? { - return runCatching { fromByteArray(runtime, byteArray) }.getOrNull() +fun Type.fromByteArrayOrNull(byteArray: ByteArray): I? { + return runCatching { fromByteArray(byteArray) }.getOrNull() } -fun Type.fromHexOrNull(runtime: Context, hex: String): I? { - return runCatching { fromHex(runtime, hex) }.getOrNull() +fun Type.fromHexOrNull(hex: String): I? { + return runCatching { fromHex(hex) }.getOrNull() } /** * @throws EncodeDecodeException */ -fun Type.toByteArray(runtime: Context, value: I): ByteArray { +fun Type.toByteArray(value: I): ByteArray { return ensureUnifiedException { - useScaleWriter { encode(this, runtime, value) } + useScaleWriter { encode(this, value) } } } @@ -59,28 +58,28 @@ fun Type.toByteArray(runtime: Context, value: I): ByteArray { * * @throws EncodeDecodeException */ -fun Type<*>.bytes(runtime: Context, value: Any?): ByteArray { +fun Type<*>.bytes(value: Any?): ByteArray { return ensureUnifiedException { - useScaleWriter { encodeUnsafe(this, runtime, value) } + useScaleWriter { encodeUnsafe(this, value) } } } -fun Type.toByteArrayOrNull(runtime: Context, value: I): ByteArray? { - return runCatching { toByteArray(runtime, value) }.getOrNull() +fun Type.toByteArrayOrNull(value: I): ByteArray? { + return runCatching { toByteArray(value) }.getOrNull() } -fun Type<*>.bytesOrNull(runtime: Context, value: Any?): ByteArray? { - return runCatching { bytes(runtime, value) }.getOrNull() +fun Type<*>.bytesOrNull(value: Any?): ByteArray? { + return runCatching { bytes(value) }.getOrNull() } /** * @throws EncodeDecodeException */ -fun Type.toHex(runtime: Context, value: I) = - toByteArray(runtime, value).toHexString(withPrefix = true) +fun Type.toHex(value: I) = + toByteArray(value).toHexString(withPrefix = true) -fun Type.toHexOrNull(runtime: Context, value: I) = - toByteArrayOrNull(runtime, value)?.toHexString(withPrefix = true) +fun Type.toHexOrNull(value: I) = + toByteArrayOrNull(value)?.toHexString(withPrefix = true) fun useScaleWriter(use: ScaleCodecWriter.() -> Unit): ByteArray { val stream = ByteArrayOutputStream() diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt index 946f99a8..badc6d56 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Alias.kt @@ -3,17 +3,16 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.TypeReference class Alias(alias: String, val aliasedReference: TypeReference) : Type(alias) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { - return aliasedReference.requireValue().decode(scaleCodecReader, context) + override fun decode(scaleCodecReader: ScaleCodecReader): Any? { + return aliasedReference.requireValue().decode(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { - aliasedReference.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value) + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Any?) { + aliasedReference.requireValue().encodeUnsafe(scaleCodecWriter, value) } override fun isValidInstance(instance: Any?): Boolean { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt index e5abbc5a..790bd1d8 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/CollectionEnum.kt @@ -4,18 +4,17 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.scale.dataType.CollectionEnumType -import jp.co.soramitsu.schema.Context class CollectionEnum( name: String, val elements: List ) : Type(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): String { + override fun decode(scaleCodecReader: ScaleCodecReader): String { return CollectionEnumType(elements).read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: String) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: String) { CollectionEnumType(elements).write(scaleCodecWriter, value) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt index c7fc498c..5996469d 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/DictEnum.kt @@ -4,7 +4,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull @@ -15,16 +14,16 @@ open class DictEnum( class Entry(val name: String, val value: T) - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Entry { + override fun decode(scaleCodecReader: ScaleCodecReader): Entry { val typeIndex = scaleCodecReader.readByte() val entry = elements[typeIndex.toInt()] - val decoded = entry.value.requireValue().decode(scaleCodecReader, context) + val decoded = entry.value.requireValue().decode(scaleCodecReader) return Entry(entry.name, decoded) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Entry) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Entry) { val index = elements.indexOfFirst { it.name == value.name } if (index == -1) elementNotFound(value.name) @@ -32,7 +31,7 @@ open class DictEnum( val type = elements[index].value.requireValue() scaleCodecWriter.writeByte(index) - type.encodeUnsafe(scaleCodecWriter, runtime, value.value) + type.encodeUnsafe(scaleCodecWriter, value.value) } override fun isValidInstance(instance: Any?): Boolean { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt index fbc1876a..35ae05da 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/FixedArray.kt @@ -3,27 +3,26 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.Context class FixedArray(name: String, val length: Int, typeReference: TypeReference) : WrapperType>(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { + override fun decode(scaleCodecReader: ScaleCodecReader): List<*> { val type = typeReference.requireValue() val list = mutableListOf() repeat(length) { - list += type.decode(scaleCodecReader, context) + list += type.decode(scaleCodecReader) } return list } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: List<*>) { val type = typeReference.requireValue() value.forEach { - type.encodeUnsafe(scaleCodecWriter, runtime, it) + type.encodeUnsafe(scaleCodecWriter, it) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt index 5f428227..088daaf7 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt @@ -4,7 +4,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException class Option( @@ -12,7 +11,7 @@ class Option( typeReference: TypeReference ) : WrapperType(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Any? { + override fun decode(scaleCodecReader: ScaleCodecReader): Any? { if (typeReference.requireValue() is BooleanType) { return when (scaleCodecReader.readByte().toInt()) { 0 -> null @@ -24,10 +23,10 @@ class Option( val some: Boolean = scaleCodecReader.readBoolean() - return if (some) typeReference.requireValue().decode(scaleCodecReader, context) else null + return if (some) typeReference.requireValue().decode(scaleCodecReader) else null } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Any?) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Any?) { val type = typeReference.requireValue() if (type is BooleanType) { @@ -37,7 +36,7 @@ class Option( scaleCodecWriter.write(ScaleCodecWriter.BOOL, false) } else { scaleCodecWriter.write(ScaleCodecWriter.BOOL, true) - type.encodeUnsafe(scaleCodecWriter, runtime, value) + type.encodeUnsafe(scaleCodecWriter, value) } } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt index f41b36c2..6b60dfbd 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/SetType.kt @@ -2,7 +2,6 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.primitives.NumberType import java.math.BigInteger @@ -13,11 +12,11 @@ class SetType( val valueList: LinkedHashMap ) : WrapperType>(name, valueTypeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Set { + override fun decode(scaleCodecReader: ScaleCodecReader): Set { val valueType = typeReference.requireValue() require(valueType is NumberType) - val value = valueType.decode(scaleCodecReader, context) + val value = valueType.decode(scaleCodecReader) return valueList.mapNotNullTo(mutableSetOf()) { (name, mask) -> if (value.and(mask).signum() == 1) { @@ -28,7 +27,7 @@ class SetType( } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Set) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Set) { val valueType = typeReference.requireValue() require(valueType is NumberType) @@ -40,7 +39,7 @@ class SetType( } } - valueType.encode(scaleCodecWriter, runtime, folded) + valueType.encode(scaleCodecWriter, folded) } override fun isValidInstance(instance: Any?): Boolean { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt index 40d406ee..e821e755 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Struct.kt @@ -5,7 +5,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.skipAliases -import jp.co.soramitsu.schema.Context @Suppress("UNCHECKED_CAST") class Struct( @@ -17,17 +16,17 @@ class Struct( inline operator fun get(key: String): R? = mapping[key] as? R } - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Instance { + override fun decode(scaleCodecReader: ScaleCodecReader): Instance { val values = mapping.mapValues { (_, type) -> - type.requireValue().decode(scaleCodecReader, context) + type.requireValue().decode(scaleCodecReader) } return Instance(values) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Instance) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Instance) { mapping.forEach { (name, type) -> - type.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value[name]) + type.requireValue().encodeUnsafe(scaleCodecWriter, value[name]) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt index 3161ec2e..93f0dfff 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Tuple.kt @@ -4,18 +4,17 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.Context import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull class Tuple(name: String, val typeReferences: List) : Type>(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { - return typeReferences.map { it.requireValue().decode(scaleCodecReader, context) } + override fun decode(scaleCodecReader: ScaleCodecReader): List<*> { + return typeReferences.map { it.requireValue().decode(scaleCodecReader) } } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: List<*>) { typeReferences.zip(value).onEach { (type, value) -> - type.requireValue().encodeUnsafe(scaleCodecWriter, runtime, value) + type.requireValue().encodeUnsafe(scaleCodecWriter, value) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt index c56ac523..8b2cca35 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Vec.kt @@ -4,30 +4,29 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.scale.dataType.compactInt -import jp.co.soramitsu.schema.Context class Vec(name: String, typeReference: TypeReference) : WrapperType>(name, typeReference) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): List<*> { + override fun decode(scaleCodecReader: ScaleCodecReader): List<*> { val type = typeReference.requireValue() val size = compactInt.read(scaleCodecReader) val result = mutableListOf() repeat(size.toInt()) { - val element = type.decode(scaleCodecReader, context) + val element = type.decode(scaleCodecReader) result.add(element) } return result } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: List<*>) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: List<*>) { val type = typeReference.requireValue() val size = value.size.toBigInteger() compactInt.write(scaleCodecWriter, size) value.forEach { - type.encodeUnsafe(scaleCodecWriter, runtime, it) + type.encodeUnsafe(scaleCodecWriter, it) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt index a9d5cfff..35104598 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/BooleanType.kt @@ -2,15 +2,14 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context object BooleanType : Primitive("bool") { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Boolean { + override fun decode(scaleCodecReader: ScaleCodecReader): Boolean { return scaleCodecReader.readBoolean() } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Boolean) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Boolean) { scaleCodecWriter.write(ScaleCodecWriter.BOOL, value) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt index 7e7ebdf3..d5afba3c 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/Compact.kt @@ -4,15 +4,14 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.compactInt import java.math.BigInteger -import jp.co.soramitsu.schema.Context class Compact(name: String) : NumberType(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): BigInteger { + override fun decode(scaleCodecReader: ScaleCodecReader): BigInteger { return compactInt.read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: BigInteger) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: BigInteger) { return compactInt.write(scaleCodecWriter, value) } } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt index 43879b56..e1892d03 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/DynamicByteArray.kt @@ -3,15 +3,14 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.byteArray -import jp.co.soramitsu.schema.Context class DynamicByteArray(name: String) : Primitive(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): ByteArray { + override fun decode(scaleCodecReader: ScaleCodecReader): ByteArray { return byteArray.read(scaleCodecReader) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: ByteArray) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: ByteArray) { return byteArray.write(scaleCodecWriter, value) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt index fdafc5e3..31d3a10f 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/FixedByteArray.kt @@ -2,15 +2,14 @@ package jp.co.soramitsu.schema.definitions.types.primitives import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.schema.Context open class FixedByteArray(name: String, val length: Int) : Primitive(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): ByteArray { + override fun decode(scaleCodecReader: ScaleCodecReader): ByteArray { return scaleCodecReader.readByteArray(length) } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: ByteArray) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: ByteArray) { return scaleCodecWriter.directWrite(value, 0, length) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt index 599b3b62..50bd6fa4 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/primitives/UIntType.kt @@ -4,7 +4,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.scale.dataType.uint import java.math.BigInteger -import jp.co.soramitsu.schema.Context val u8 = UIntType(8) val u16 = UIntType(16) @@ -23,9 +22,9 @@ class UIntType(bits: Int) : NumberType("u$bits") { private val codec = uint(size = bytes) - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: BigInteger) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: BigInteger) { codec.write(scaleCodecWriter, value) } - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context) = codec.read(scaleCodecReader) + override fun decode(scaleCodecReader: ScaleCodecReader) = codec.read(scaleCodecReader) } diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt index 10718bb3..b09c949e 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/stub/FakeType.kt @@ -3,15 +3,14 @@ package jp.co.soramitsu.schema.definitions.types.stub import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.Context class FakeType(name: String) : Type(name) { - override fun decode(scaleCodecReader: ScaleCodecReader, context: Context): Nothing { + override fun decode(scaleCodecReader: ScaleCodecReader): Nothing { throw IllegalArgumentException("Fake") } - override fun encode(scaleCodecWriter: ScaleCodecWriter, runtime: Context, value: Nothing) { + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Nothing) { throw IllegalArgumentException("Fake") } From 61cd6ede5e1db013523efdc33d965b4a5d43855b Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 13:21:24 +0300 Subject: [PATCH 07/16] WIP --- .../runtime/definitions/ParsingExt.kt | 56 +++++++++---------- .../fearless_utils/encrypt/SignerTest.kt | 13 ++--- .../encrypt/qr/QrSharingTest.kt | 5 +- .../fearless_utils/extensions/KotlinKtTest.kt | 10 ++-- .../extrinsic/SendIntegrationTest.kt | 11 ++-- .../fearless_utils/runtime/Common.kt | 6 +- .../definitions/TypeDefinitionParserTest.kt | 25 +++------ .../extensions/GenericsExtensionTest.kt | 8 +-- .../extensions/HashMapExtensionTest.kt | 14 ++--- .../extensions/VectorExtensionTest.kt | 12 ++-- .../runtime/definitions/types/BaseTypeTest.kt | 29 ++++++---- .../definitions/types/TypeReferenceExtTest.kt | 10 +++- .../types/composite/CollectionEnumTest.kt | 15 +++-- .../types/composite/DictEnumTest.kt | 24 ++++---- .../types/composite/FixedArrayTest.kt | 19 +++---- .../definitions/types/composite/OptionTest.kt | 37 ++++++------ .../types/composite/SetTypeTest.kt | 23 ++++---- .../definitions/types/composite/StructTest.kt | 21 ++++--- .../definitions/types/composite/TupleTest.kt | 21 ++++--- .../definitions/types/composite/VecTest.kt | 19 +++---- .../definitions/types/generics/BitVecTest.kt | 30 ++++------ .../definitions/types/generics/DataTest.kt | 34 +++++------ .../definitions/types/generics/EraTypeTest.kt | 18 +++--- .../types/generics/ExtrinsicTest.kt | 24 ++++---- .../types/generics/GenericCallTest.kt | 28 +++++----- .../types/generics/GenericEventTest.kt | 24 ++++---- .../definitions/types/generics/HashTest.kt | 2 +- .../types/generics/OpaqueCallTest.kt | 12 ++-- .../types/generics/ResultTypeTest.kt | 23 ++++---- .../types/generics/SignedExtrasTest.kt | 22 ++++---- .../runtime/extrinsic/ExtrinsicBuilderTest.kt | 29 +++++----- .../runtime/metadata/MetadataTest.kt | 2 +- .../fearless_utils/ss58/SS58EncoderTest.kt | 26 +++++---- 33 files changed, 328 insertions(+), 324 deletions(-) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt index df52c324..36738801 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/ParsingExt.kt @@ -1,28 +1,28 @@ -//package jp.co.soramitsu.fearless_utils.runtime.definitions -// -//internal fun String.splitTuple(): List { -// val innerPart = removeSurrounding("(", ")").replace(" ", "") -// -// val result = mutableListOf() -// var bracketsCount = 0 -// var currentBeginning = 0 -// -// innerPart.forEachIndexed { index, c -> -// when (c) { -// '(', '<', '[' -> bracketsCount++ -// ')', '>', ']' -> bracketsCount-- -// ',' -> { -// if (bracketsCount == 0) { -// result += innerPart.substring(currentBeginning, index) -// currentBeginning = index + 1 -// } -// } -// } -// } -// -// if (currentBeginning < innerPart.length) { -// result += innerPart.substring(currentBeginning, innerPart.length) -// } -// -// return result -//} +package jp.co.soramitsu.fearless_utils.runtime.definitions + +internal fun String.splitTuple(): List { + val innerPart = removeSurrounding("(", ")").replace(" ", "") + + val result = mutableListOf() + var bracketsCount = 0 + var currentBeginning = 0 + + innerPart.forEachIndexed { index, c -> + when (c) { + '(', '<', '[' -> bracketsCount++ + ')', '>', ']' -> bracketsCount-- + ',' -> { + if (bracketsCount == 0) { + result += innerPart.substring(currentBeginning, index) + currentBeginning = index + 1 + } + } + } + } + + if (currentBeginning < innerPart.length) { + result += innerPart.substring(currentBeginning, innerPart.length) + } + + return result +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt index ae2ed058..9f7dc07f 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/SignerTest.kt @@ -1,6 +1,8 @@ package jp.co.soramitsu.fearless_utils.encrypt import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -25,20 +27,17 @@ class SignerTest { val publicKeyHex = "f65a7d560102f2019da9b9d8993f53f51cc38d50cdff3d0b8e71997d7f911ff1" val privateKeyHex = "ae4093af3c40f2ecc32c14d4dada9628a4a42b28ca1a5b200b89321cbc883182" - val keypair = Keypair( - jp.co.soramitsu.schema.extensions.fromHex(), - jp.co.soramitsu.schema.extensions.fromHex() - ) + val keypair = Keypair(privateKeyHex.fromHex(), publicKeyHex.fromHex()) val message = "0400340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c6302286bee0000002d00000003000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423ee143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e" - val messageBytes = jp.co.soramitsu.schema.extensions.fromHex() + val messageBytes = message.fromHex() val signatureWrapper = Signer.sign(EncryptionType.ECDSA, messageBytes, keypair) as SignatureWrapper.Ecdsa val expected = "352e2738b0e361a7c59be05d52e7e7fb860bf79c03bb7858ce3e48748b00040c4dc6eadbfd526d35ba6dff1468bf61198cc5e8570a80ddc63fdebe68dc6016a41b" - assertEquals(expected, jp.co.soramitsu.schema.extensions.toHexString()) + assertEquals(expected, signatureWrapper.signature.toHexString()) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt index d0485412..bafd3359 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/encrypt/qr/QrSharingTest.kt @@ -1,6 +1,7 @@ package jp.co.soramitsu.fearless_utils.encrypt.qr import jp.co.soramitsu.fearless_utils.common.assertThrows +import jp.co.soramitsu.schema.extensions.fromHex import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -13,7 +14,7 @@ class QrSharingTest { "0x8ad2a3fba73321961cd5d1b8272aa95a21e75dd5b098fb36ed996961ac7b2931" private val name = "Russel" - private val publicKeyBytes = jp.co.soramitsu.schema.extensions.fromHex() + private val publicKeyBytes = publicKeyEncoded.fromHex() private val qrContentWithName = "substrate:FiLhWLARS32oxm4s64gmEMSppAdugsvaAx1pCjweTLGn5Rf:0x8ad2a3fba73321961cd5d1b8272aa95a21e75dd5b098fb36ed996961ac7b2931:Russel" @@ -82,4 +83,4 @@ class QrSharingTest { QrSharing.decode(wrongContent) } } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt index 15611430..2fbf6bf3 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt @@ -1,6 +1,8 @@ package jp.co.soramitsu.fearless_utils.extensions -import org.junit.Assert.* +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toBigInteger +import org.junit.Assert.assertEquals import org.junit.Test import java.math.BigInteger import java.nio.ByteOrder @@ -9,10 +11,10 @@ class KotlinKtTest { @Test fun `should create little endian big int`() { - val bytes = jp.co.soramitsu.schema.extensions.fromHex() + val bytes = "0xb63f9b9eff0000000000000000000000".fromHex() assertEquals(BigInteger("1097877634998"), - jp.co.soramitsu.schema.extensions.toBigInteger(ByteOrder.LITTLE_ENDIAN) + assertEquals(BigInteger("1097877634998"), bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN)) ) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt index 8c048a5a..0416e610 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/integration/extrinsic/SendIntegrationTest.kt @@ -11,14 +11,15 @@ import jp.co.soramitsu.fearless_utils.runtime.extrinsic.transfer import jp.co.soramitsu.fearless_utils.wsrpc.executeAsync import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.author.SubmitExtrinsicRequest import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.chain.RuntimeVersion +import jp.co.soramitsu.schema.extensions.fromHex import kotlinx.coroutines.runBlocking import org.junit.Ignore import org.junit.Test import java.math.BigInteger private val KEYPAIR = Keypair( - publicKey = jp.co.soramitsu.schema.extensions.fromHex(), - privateKey = jp.co.soramitsu.schema.extensions.fromHex() + publicKey = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex(), + privateKey = "f3923eea431177cd21906d4308aea61c037055fb00575cae687217c6d8b2397f".fromHex() ) @Ignore("Manual run only") @@ -33,14 +34,14 @@ class SendIntegrationTest : BaseIntegrationTest(WESTEND_URL) { keypair = KEYPAIR, nonce = 38.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), + genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), ) repeat(2) { builder.transfer( - recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), + recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), amount = BigInteger("5000000001") ) } @@ -49,4 +50,4 @@ class SendIntegrationTest : BaseIntegrationTest(WESTEND_URL) { print(socketService.executeAsync(SubmitExtrinsicRequest(extrinsic)).result!!) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt index 91e2c744..cbddf062 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt @@ -6,12 +6,12 @@ import jp.co.soramitsu.fearless_utils.common.getFileContentFromResources import jp.co.soramitsu.fearless_utils.common.getResourceReader import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadataSchema +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension object RealRuntimeProvider { @@ -51,4 +51,4 @@ object RealRuntimeProvider { ) ) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt index b29d2aeb..ebbfdb97 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt @@ -4,25 +4,18 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePreset import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.type import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.typePreset -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.CollectionEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.FixedArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Option -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.SetType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Struct -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Tuple -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u64 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.definitions.types.composite.* +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray +import jp.co.soramitsu.schema.definitions.types.primitives.u64 +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.stub.FakeType import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -444,4 +437,4 @@ class TypeDefinitionParserTest { } """.trimIndent() } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt index 2ef6fdb2..7b68c7a0 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/GenericsExtensionTest.kt @@ -1,9 +1,9 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry.extensions -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.stub.FakeType import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -34,4 +34,4 @@ class GenericsExtensionTest { assert(createdType == null) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt index 6f6dd4bb..64b16dd0 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt @@ -6,15 +6,15 @@ import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.HashMapExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Tuple -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.HashMapExtension +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Tuple +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.stub.FakeType import org.junit.Assert import org.junit.Test diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt index a6f06d97..d4ca5b63 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/VectorExtensionTest.kt @@ -2,11 +2,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry.extensions import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.schema.definitions.dynamic.extentsions.VectorExtension -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.DynamicByteArray -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray +import jp.co.soramitsu.schema.definitions.types.primitives.u8 import org.junit.Test class VectorExtensionTest { @@ -24,4 +24,4 @@ class VectorExtensionTest { assertInstance(result) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt index bd3315cc..100b5e5b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt @@ -1,23 +1,28 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset -import jp.co.soramitsu.fearless_utils.runtime.metadata.Event -import jp.co.soramitsu.fearless_utils.runtime.metadata.ExtrinsicMetadata +import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function -import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument -import jp.co.soramitsu.fearless_utils.runtime.metadata.Module -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata -import jp.co.soramitsu.fearless_utils.runtime.metadata.Storage +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType import jp.co.soramitsu.schema.definitions.types.primitives.u8 import java.math.BigInteger abstract class BaseTypeTest { + fun foo () { + val typeRegistry = TypeRegistry( + mapOf(), + dynamicTypeResolver = DynamicTypeResolver( + extensions = DynamicTypeResolver.DEFAULT_COMPOUND_EXTENSIONS + listOf(GenericsExtension) + ) + ) + var runtimeSnapshot = RuntimeSnapshot(typeRegistry, meta()) + } + protected val typeRegistry = TypeRegistry( substratePreParsePreset(), dynamicTypeResolver = DynamicTypeResolver( @@ -27,7 +32,11 @@ abstract class BaseTypeTest { protected val runtime: RuntimeSnapshot = RuntimeSnapshot( typeRegistry = typeRegistry, - metadata = RuntimeMetadata( + metadata = meta() + ) + + fun meta() : RuntimeMetadata { + return RuntimeMetadata( runtimeVersion = BigInteger.ONE, modules = mapOf( "A" to Module( @@ -71,6 +80,6 @@ abstract class BaseTypeTest { signedExtensions = emptyList() ) ) - ) + } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExtTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExtTest.kt index 33c7b1af..97860e00 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExtTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/TypeReferenceExtTest.kt @@ -1,8 +1,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types import jp.co.soramitsu.fearless_utils.common.assertThrows -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.CyclicAliasingException +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.skipAliases +import jp.co.soramitsu.schema.definitions.types.skipAliasesOrNull import org.junit.Assert.assertEquals import org.junit.Test @@ -70,4 +74,4 @@ class TypeReferenceExtTest { assertEquals(null, alias1Ref.skipAliasesOrNull()) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnumTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnumTest.kt index b5262cf7..da9f1269 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnumTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/CollectionEnumTest.kt @@ -1,11 +1,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.composite.CollectionEnum +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 @@ -20,7 +19,7 @@ class EnumTest : BaseTypeTest() { val expectedInstance = enumValues[1] val inHex = "0x01" - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(expectedInstance, decoded) } @@ -29,7 +28,7 @@ class EnumTest : BaseTypeTest() { fun `should encode instance`() { val instance = enumValues[1] - val encoded = type.toHex(runtime, instance) + val encoded = type.toHex(instance) assertEquals("0x01", encoded) } @@ -42,4 +41,4 @@ class EnumTest : BaseTypeTest() { assertFalse(type.isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnumTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnumTest.kt index 49d192b1..97b16a0e 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnumTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/DictEnumTest.kt @@ -1,19 +1,19 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u128 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u128 +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 + @RunWith(JUnit4::class) class DictEnumTest : BaseTypeTest() { @@ -33,7 +33,7 @@ class DictEnumTest : BaseTypeTest() { val expectedInstance = DictEnum.Entry("B", true) val inHex = "0x0101" - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(expectedInstance.name, decoded.name) assertEquals(expectedInstance.value, decoded.value) @@ -43,7 +43,7 @@ class DictEnumTest : BaseTypeTest() { fun `should encode instance`() { val instance = DictEnum.Entry("A", 1.toBigInteger()) - val encoded = type.toHex(runtime, instance) + val encoded = type.toHex(instance) assertEquals("0x0001", encoded) } @@ -57,4 +57,4 @@ class DictEnumTest : BaseTypeTest() { assertFalse(type.isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArrayTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArrayTest.kt index a9cfba16..e48eb40a 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArrayTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/FixedArrayTest.kt @@ -1,13 +1,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.FixedArray +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 @@ -29,14 +28,14 @@ class FixedArrayTest : BaseTypeTest() { @Test fun `should decode instance`() { - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(typeInstance, decoded) } @Test fun `should encode instance`() { - val encoded = type.toHex(runtime, typeInstance) + val encoded = type.toHex(typeInstance) assertEquals(inHex, encoded) } @@ -49,4 +48,4 @@ class FixedArrayTest : BaseTypeTest() { assertFalse(type.isValidInstance(listOf(1))) assertFalse(type.isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/OptionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/OptionTest.kt index 3dbc8618..4820c18c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/OptionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/OptionTest.kt @@ -2,15 +2,14 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.common.assertThrows import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Option +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class OptionTest : BaseTypeTest() { @@ -28,7 +27,7 @@ class OptionTest : BaseTypeTest() { @Test fun `should decode optional true`() { val inHex = "0x02" - val decoded = optionalBoolean.fromHex(runtime, inHex) + val decoded = optionalBoolean.fromHex(inHex) assertEquals(true, decoded) } @@ -38,14 +37,14 @@ class OptionTest : BaseTypeTest() { val inHex = "0x05" assertThrows { - optionalBoolean.fromHex(runtime, inHex) + optionalBoolean.fromHex(inHex) } } @Test fun `should decode optional false`() { val inHex = "0x01" - val decoded = optionalBoolean.fromHex(runtime, inHex) + val decoded = optionalBoolean.fromHex(inHex) assertEquals(false, decoded) } @@ -53,7 +52,7 @@ class OptionTest : BaseTypeTest() { @Test fun `should decode null boolean`() { val inHex = "0x00" - val decoded = optionalBoolean.fromHex(runtime, inHex) + val decoded = optionalBoolean.fromHex(inHex) assertEquals(null, decoded) } @@ -61,7 +60,7 @@ class OptionTest : BaseTypeTest() { @Test fun `should decode non-null other type`() { val inHex = "0x0109" - val decoded = optionalU8.fromHex(runtime, inHex) + val decoded = optionalU8.fromHex(inHex) assertEquals(9.toBigInteger(), decoded) } @@ -69,28 +68,28 @@ class OptionTest : BaseTypeTest() { @Test fun `should decode null other type`() { val inHex = "0x00" - val decoded = optionalU8.fromHex(runtime, inHex) + val decoded = optionalU8.fromHex(inHex) assertEquals(null, decoded) } @Test fun `should encode non-boolean instance`() { - val encoded = optionalU8.toHex(runtime, 9.toBigInteger()) + val encoded = optionalU8.toHex(9.toBigInteger()) assertEquals("0x0109", encoded) } @Test fun `should encode null non-boolean instance`() { - val encoded = optionalU8.toHex(runtime, null) + val encoded = optionalU8.toHex(null) assertEquals("0x00", encoded) } @Test fun `should encode boolean instance`() { - val encoded = optionalBoolean.toHex(runtime, true) + val encoded = optionalBoolean.toHex(true) assertEquals("0x02", encoded) } @@ -106,4 +105,4 @@ class OptionTest : BaseTypeTest() { assertFalse(optionalBoolean.isValidInstance(1)) assertFalse(optionalU8.isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetTypeTest.kt index 214c4243..61d03c82 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/SetTypeTest.kt @@ -1,13 +1,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.SetType +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class SetTypeTest : BaseTypeTest() { @@ -26,7 +25,7 @@ class SetTypeTest : BaseTypeTest() { @Test fun `should decode one flag`() { val inHex = "0x04" - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(setOf("C"), decoded) } @@ -34,7 +33,7 @@ class SetTypeTest : BaseTypeTest() { @Test fun `should decode multiple flags`() { val inHex = "0x0d" - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(setOf("A", "C", "D"), decoded) } @@ -42,7 +41,7 @@ class SetTypeTest : BaseTypeTest() { @Test fun `should encode one flag`() { val instance = setOf("C") - val encoded = type.toHex(runtime, instance) + val encoded = type.toHex(instance) assertEquals("0x04", encoded) } @@ -50,7 +49,7 @@ class SetTypeTest : BaseTypeTest() { @Test fun `should encode multiple flags`() { val instance = setOf("A", "C", "D") - val encoded = type.toHex(runtime, instance) + val encoded = type.toHex(instance) assertEquals("0x0d", encoded) } @@ -65,4 +64,4 @@ class SetTypeTest : BaseTypeTest() { assertFalse(type.isValidInstance(setOf("F"))) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/StructTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/StructTest.kt index c482faec..9453d465 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/StructTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/StructTest.kt @@ -1,14 +1,13 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class StructTest : BaseTypeTest() { @@ -30,14 +29,14 @@ class StructTest : BaseTypeTest() { @Test fun `should decode instance`() { - val decoded = type.fromHex(runtime, expectedInHex) + val decoded = type.fromHex(expectedInHex) assertEquals(expectedInstance, decoded.mapping) } @Test fun `should encode instance`() { - val encoded = type.toHex(runtime, Struct.Instance(expectedInstance)) + val encoded = type.toHex(Struct.Instance(expectedInstance)) assertEquals(expectedInHex, encoded) } @@ -52,4 +51,4 @@ class StructTest : BaseTypeTest() { assertFalse(type.isValidInstance(mapOf())) assertFalse(type.isValidInstance(Struct.Instance(mapOf()))) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/TupleTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/TupleTest.kt index b43684d9..a72a2980 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/TupleTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/TupleTest.kt @@ -1,14 +1,13 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Tuple +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class TupleTest : BaseTypeTest() { @@ -29,14 +28,14 @@ class TupleTest : BaseTypeTest() { @Test fun `should decode instance`() { - val decoded = type.fromHex(runtime, expectedInHex) + val decoded = type.fromHex(expectedInHex) assertEquals(expectedInstance, decoded) } @Test fun `should encode instance`() { - val encoded = type.toHex(runtime, expectedInstance) + val encoded = type.toHex(expectedInstance) assertEquals(expectedInHex, encoded) } @@ -48,4 +47,4 @@ class TupleTest : BaseTypeTest() { assertFalse(type.isValidInstance(1)) assertFalse(type.isValidInstance(listOf(false))) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/VecTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/VecTest.kt index 7d689428..bc977e0b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/VecTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/composite/VecTest.kt @@ -1,13 +1,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class VecTest : BaseTypeTest() { @@ -24,14 +23,14 @@ class VecTest : BaseTypeTest() { @Test fun `should decode instance`() { - val decoded = type.fromHex(runtime, inHex) + val decoded = type.fromHex(inHex) assertEquals(typeInstance, decoded) } @Test fun `should encode instance`() { - val encoded = type.toHex(runtime, typeInstance) + val encoded = type.toHex(typeInstance) assertEquals(inHex, encoded) } @@ -45,4 +44,4 @@ class VecTest : BaseTypeTest() { assertFalse(type.isValidInstance(listOf(1))) assertFalse(type.isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt index 1c85ce42..dd3d853c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/BitVecTest.kt @@ -1,8 +1,9 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex import org.junit.Assert.* import org.junit.Test @@ -10,31 +11,28 @@ class BitVecTest : BaseTypeTest() { @Test fun `should decode empty array`() { - val decoded = BitVec.fromHex( - runtime, - "0x00" - ) + val decoded = BitVec.fromHex( "0x00" ) assertArrayEquals(booleanArrayOf(), decoded) } @Test fun `should decode size 3`() { - val decoded = BitVec.fromHex(runtime, "0x0c07") + val decoded = BitVec.fromHex( "0x0c07") assertArrayEquals(booleanArrayOf(true, true, true), decoded) } @Test fun `should decode size 2`() { - val decoded = BitVec.fromHex(runtime, "0x0803") + val decoded = BitVec.fromHex( "0x0803") assertArrayEquals(booleanArrayOf(true, true), decoded) } @Test fun `should decode size 2 bytes`() { - val decoded = BitVec.fromHex(runtime, "0x28fd02") + val decoded = BitVec.fromHex( "0x28fd02") assertArrayEquals( booleanArrayOf(true, false, true, true, true, true, true, true, false, true), @@ -44,21 +42,21 @@ class BitVecTest : BaseTypeTest() { @Test fun `should encode size 3`() { - val decoded = BitVec.toHex(runtime, booleanArrayOf(true, true, true)) + val decoded = BitVec.toHex(booleanArrayOf(true, true, true)) assertEquals("0x0c07", decoded) } @Test fun `should encode false true`() { - val decoded = BitVec.toHex(runtime, booleanArrayOf(false, true)) + val decoded = BitVec.toHex(booleanArrayOf(false, true)) assertEquals("0x0802", decoded) } @Test fun `should encode true false`() { - val decoded = BitVec.toHex(runtime, booleanArrayOf(true, false)) + val decoded = BitVec.toHex(booleanArrayOf(true, false)) assertEquals("0x0801", decoded) } @@ -66,7 +64,6 @@ class BitVecTest : BaseTypeTest() { @Test fun `should encode size 2 bytes`() { val decoded = BitVec.toHex( - runtime, booleanArrayOf(true, false, true, true, true, true, true, true, false, true) ) @@ -75,11 +72,8 @@ class BitVecTest : BaseTypeTest() { @Test fun `should encode empty array`() { - val decoded = BitVec.toHex( - runtime, - booleanArrayOf() - ) + val decoded = BitVec.toHex(booleanArrayOf()) assertEquals("0x00", decoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt index 6bc070ab..ff346afc 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt @@ -4,11 +4,17 @@ import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.assertThrows import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test @@ -21,7 +27,7 @@ class DataTest : BaseTypeTest() { fun `should decode none`() { val hex = "0x00" - val decoded = type.fromHex(runtime, hex) + val decoded = type.fromHex(hex) assertNull(decoded.value) assertEquals("None", decoded.name) @@ -31,7 +37,7 @@ class DataTest : BaseTypeTest() { fun `should decode raw`() { val hex = "0x090102030405060708" - val decodedEntry = type.fromHex(runtime, hex) + val decodedEntry = type.fromHex(hex) assertEquals("Raw", decodedEntry.name) val value = decodedEntry.value @@ -44,7 +50,7 @@ class DataTest : BaseTypeTest() { fun `should decode hasher`() { val hex = "0x241234567890123456789012345678901212345678901234567890123456789012" - val decodedEntry = type.fromHex(runtime, hex) + val decodedEntry = type.fromHex(hex) assertEquals("Keccak256", decodedEntry.name) val value = decodedEntry.value @@ -61,31 +67,27 @@ class DataTest : BaseTypeTest() { val hex = "0x26" assertThrows { - type.fromHex(runtime, hex) + type.fromHex(hex) } } @Test fun `should encode none`() { - val encoded = type.toHex(runtime, DictEnum.Entry("None", null)) + val encoded = type.toHex(DictEnum.Entry("None", null)) assertEquals("0x00", encoded) } @Test fun `should encode raw`() { - val encoded = type.toHex(runtime, DictEnum.Entry("Raw", - jp.co.soramitsu.schema.extensions.fromHex() - )) + val encoded = type.toHex(DictEnum.Entry("Raw", "0x0102030405060708".fromHex())) assertEquals("0x090102030405060708", encoded) } @Test fun `should encode hasher`() { - val encoded = type.toHex(runtime, DictEnum.Entry("Keccak256", - jp.co.soramitsu.schema.extensions.fromHex() - )) + val encoded = type.toHex(DictEnum.Entry("Keccak256", "0x1234567890123456789012345678901212345678901234567890123456789012".fromHex())) assertEquals("0x241234567890123456789012345678901212345678901234567890123456789012", encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EraTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EraTypeTest.kt index f4bb8e44..9f5118a6 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EraTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EraTypeTest.kt @@ -2,10 +2,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era.Companion.getPeriodPhaseFromBlockPeriod -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.* +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EraType +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.assertEquals import org.junit.Test class EraTypeTest : BaseTypeTest() { @@ -18,7 +20,7 @@ class EraTypeTest : BaseTypeTest() { @Test fun `should decode immortal`() { - val decoded = EraType.fromHex(runtime, "0x00") + val decoded = EraType.fromHex("0x00") assertEquals(Era.Immortal, decoded) } @@ -33,7 +35,7 @@ class EraTypeTest : BaseTypeTest() { @Test fun `should encode immortal`() { val inHex = "0x00" - val encoded = EraType.toHex(runtime, Era.Immortal) + val encoded = EraType.toHex(Era.Immortal) assertEquals(inHex, encoded) } @@ -46,7 +48,7 @@ class EraTypeTest : BaseTypeTest() { } private fun performMortalDecodeTest(inHex: String, period: Int, phase: Int) { - val decoded = EraType.fromHex(runtime, inHex) + val decoded = EraType.fromHex(inHex) assertInstance(decoded) @@ -55,8 +57,8 @@ class EraTypeTest : BaseTypeTest() { } private fun performMortalEncodeTest(inHex: String, period: Int, phase: Int) { - val encoded = EraType.toHex(runtime, Era.Mortal(period, phase)) + val encoded = EraType.toHex(Era.Mortal(period, phase)) assertEquals(inHex, encoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt index 53eb0838..447cb29c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt @@ -2,9 +2,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString import org.junit.Assert.assertEquals import org.junit.Test import java.math.BigInteger @@ -18,7 +20,7 @@ class ExtrinsicTest { @Test fun `should decode transfer extrinsic`() { - val decoded = Extrinsic.fromHex(runtime, inHex) + val decoded = Extrinsic(runtime).fromHex(inHex) val multiSignature = decoded.signature!!.tryExtractMultiSignature()!! @@ -29,7 +31,7 @@ class ExtrinsicTest { fun `should decode batch extrinsic`() { val batch = "0x01038400fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d16800b2b0e48ec54dd07af525e605c2d674ef57eef7d9932c3ad16f68c1e41a18ce579a207aa910b22bcddcf0a2eea96d4617fe618dff95de548bbf53e1773416700815009000100008040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f0000c16ff28623040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f00106644db8723" - val decoded = Extrinsic.fromHex(runtime, batch) + val decoded = Extrinsic(runtime).fromHex(batch) assertEquals(16, decoded.call.moduleIndex) assertEquals(0, decoded.call.callIndex) @@ -44,15 +46,13 @@ class ExtrinsicTest { arguments = mapOf( "dest" to DictEnum.Entry( name = "Id", - value = jp.co.soramitsu.schema.extensions.fromHex() + value = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex() ), "value" to BigInteger("10000000000") ) ) - val signature = MultiSignature(EncryptionType.SR25519, - jp.co.soramitsu.schema.extensions.fromHex() - ) + val signature = MultiSignature(EncryptionType.SR25519, signatureInHex.fromHex()) val signedExtras = mapOf( SignedExtras.TIP to 0.toBigInteger(), @@ -62,15 +62,15 @@ class ExtrinsicTest { val extrinsic = Extrinsic.Instance( signature = Extrinsic.Signature.newV28( - accountId = jp.co.soramitsu.schema.extensions.fromHex(), + accountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), signature = signature, signedExtras = signedExtras ), call = call ) - val encoded = Extrinsic.toHex(runtime, extrinsic) + val encoded = Extrinsic(runtime).toHex(extrinsic) assertEquals(inHex, encoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt index 9ce5de9e..80d4468d 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt @@ -2,12 +2,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertThrows import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.* import org.junit.Test class GenericCallTest : BaseTypeTest() { @@ -25,14 +23,14 @@ class GenericCallTest : BaseTypeTest() { @Test fun `should encode correct call`() { - val encoded = GenericCall.toHex(runtime, instance) + val encoded = GenericCall(runtime).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericCall.fromHex(runtime, inHex) + val decoded = GenericCall(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -47,7 +45,7 @@ class GenericCallTest : BaseTypeTest() { arguments = emptyMap() ) - assertThrows { GenericCall.toHex(runtime, invalidInstance) } + assertThrows { GenericCall(runtime).toHex(invalidInstance) } } @Test @@ -61,27 +59,27 @@ class GenericCallTest : BaseTypeTest() { ) ) - assertThrows { GenericCall.toHex(runtime, invalidInstance) } + assertThrows { GenericCall(runtime).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericCall.fromHex(runtime, inHex) } + assertThrows { GenericCall(runtime).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericCall.fromHex(runtime, inHex) } + assertThrows { GenericCall(runtime).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericCall.isValidInstance(instance)) + assertTrue(GenericCall(runtime).isValidInstance(instance)) - assertFalse(GenericCall.isValidInstance(1)) + assertFalse(GenericCall(runtime).isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt index 1f5aafaf..83d12ceb 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt @@ -2,9 +2,9 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertThrows import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex import org.junit.Assert.* import org.junit.Test @@ -23,14 +23,14 @@ class GenericEventTest : BaseTypeTest() { @Test fun `should encode correct event`() { - val encoded = GenericEvent.toHex(runtime, instance) + val encoded = GenericEvent(runtime).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericEvent.fromHex(runtime, inHex) + val decoded = GenericEvent(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -45,7 +45,7 @@ class GenericEventTest : BaseTypeTest() { arguments = emptyList() ) - assertThrows { GenericEvent.toHex(runtime, invalidInstance) } + assertThrows { GenericEvent(runtime).toHex(invalidInstance) } } @Test @@ -59,27 +59,27 @@ class GenericEventTest : BaseTypeTest() { ) ) - assertThrows { GenericEvent.toHex(runtime, invalidInstance) } + assertThrows { GenericEvent(runtime).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericEvent.fromHex(runtime, inHex) } + assertThrows { GenericEvent(runtime).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericEvent.fromHex(runtime, inHex) } + assertThrows { GenericEvent(runtime).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericEvent.isValidInstance(instance)) + assertTrue(GenericEvent(runtime).isValidInstance(instance)) - assertFalse(GenericEvent.isValidInstance(1)) + assertFalse(GenericEvent(runtime).isValidInstance(1)) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/HashTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/HashTest.kt index 2d169a79..fa1225a5 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/HashTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/HashTest.kt @@ -26,4 +26,4 @@ class HashTest { assertEquals(hash.length, 32) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt index a93c7d65..77d43e1c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt @@ -1,9 +1,9 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex -import org.junit.Assert.* +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex +import org.junit.Assert.assertEquals import org.junit.Test class OpaqueCallTest : BaseTypeTest() { @@ -20,7 +20,7 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should decode call`() { - val decoded = OpaqueCall.fromHex(runtime, inHex) + val decoded = OpaqueCall(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -29,8 +29,8 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should encode call`() { - val encoded = OpaqueCall.toHex(runtime, instance) + val encoded = OpaqueCall(runtime).toHex(instance) assertEquals(inHex, encoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultTypeTest.kt index 9bb77893..0d9ff14b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ResultTypeTest.kt @@ -1,13 +1,14 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.DictEnum -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.BooleanType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u32 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.generics.ResultType +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u32 +import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.toHex import org.junit.Assert import org.junit.Test @@ -17,7 +18,7 @@ class ResultTypeTest : BaseTypeTest() { fun `should decode err false`() { val hex = "0x0100" val type = ResultType(TypeReference(u32), TypeReference(BooleanType)) - val decoded = type.fromHex(runtime, hex) + val decoded = type.fromHex(hex) Assert.assertEquals(ResultType.Err, decoded.name) Assert.assertEquals(false, decoded.value) @@ -27,7 +28,7 @@ class ResultTypeTest : BaseTypeTest() { fun `should decode ok u8`() { val hex = "0x002a" val type = ResultType(TypeReference(u8), TypeReference(BooleanType)) - val decoded = type.fromHex(runtime, hex) + val decoded = type.fromHex(hex) Assert.assertEquals(ResultType.Ok, decoded.name) Assert.assertEquals(42.toBigInteger(), decoded.value) @@ -36,9 +37,9 @@ class ResultTypeTest : BaseTypeTest() { @Test fun `should encode ok u8`() { val type = ResultType(TypeReference(u8), TypeReference(BooleanType)) - val decoded = type.toHex(runtime, DictEnum.Entry(ResultType.Ok, 42.toBigInteger())) + val decoded = type.toHex(DictEnum.Entry(ResultType.Ok, 42.toBigInteger())) Assert.assertEquals("0x002a", decoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt index 5fad97eb..f9036cce 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt @@ -2,11 +2,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertThrows import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.errors.EncodeDecodeException -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.fromHex -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.toHex import jp.co.soramitsu.fearless_utils.runtime.metadata.ExtrinsicMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata +import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.fromHex +import jp.co.soramitsu.schema.definitions.types.toHex import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test @@ -44,7 +44,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras.toHex(runtime, extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x002804", encoded) } @@ -59,7 +59,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal // CheckMortality is unused ) - val encoded = SignedExtras.toHex(runtime, extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x2804", encoded) } @@ -75,7 +75,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras.toHex(runtime, extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x", encoded) } @@ -89,7 +89,7 @@ class SignedExtrasTest { ) assertThrows { - SignedExtras.toHex(runtime, extras) + SignedExtras(runtime).toHex( extras) } } @@ -99,7 +99,7 @@ class SignedExtrasTest { val inHex = "0x002804" - val decoded = SignedExtras.fromHex(runtime, inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 3) } @@ -110,7 +110,7 @@ class SignedExtrasTest { val inHex = "0x2804" - val decoded = SignedExtras.fromHex(runtime, inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 2) } @@ -121,7 +121,7 @@ class SignedExtrasTest { val inHex = "0x" - val decoded = SignedExtras.fromHex(runtime, inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 0) } @@ -129,4 +129,4 @@ class SignedExtrasTest { private fun extrinsicContainsExtras(vararg extras: String) { `when`(extrinsicMetadata.signedExtensions).thenReturn(extras.toList()) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt index 07791985..4369b199 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilderTest.kt @@ -7,13 +7,14 @@ import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.multiAddressFromId import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAccountId import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.chain.RuntimeVersion +import jp.co.soramitsu.schema.extensions.fromHex import org.junit.Assert.assertEquals import org.junit.Test import java.math.BigInteger private val KEYPAIR = Keypair( - publicKey = jp.co.soramitsu.schema.extensions.fromHex(), - privateKey = jp.co.soramitsu.schema.extensions.fromHex() + publicKey = "fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d168".fromHex(), + privateKey = "f3923eea431177cd21906d4308aea61c037055fb00575cae687217c6d8b2397f".fromHex() ) class ExtrinsicBuilderTest { @@ -24,8 +25,8 @@ class ExtrinsicBuilderTest { fun `should build single sora transfer extrinsic`() { val soraRuntime = RealRuntimeProvider.buildRuntime("sora2") val soraKeypair = Keypair( - privateKey = jp.co.soramitsu.schema.extensions.fromHex(), - publicKey = jp.co.soramitsu.schema.extensions.fromHex() + privateKey = "dd9b35e3288c2e2667313532f825f60fc5e8523b16d8e3ddc0b0ff5200b4c145".fromHex(), + publicKey = "83ba494b62a40d20c370e5381230d74b4e8906d0334a91777baef57c9a935467".fromHex() ) val from = "5F3RU8neUpkZJK7QxAHJ9TGDjUiyjfufpZvaXDBEifPkeJSz" val to = "5EcDoG4T1SLbop4bxBjLL9VJaaytZxGXA7mLaY9y84GYpzsR" @@ -38,18 +39,18 @@ class ExtrinsicBuilderTest { keypair = soraKeypair, nonce = 1.toBigInteger(), runtimeVersion = RuntimeVersion(1, 1), - genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), + genesisHash = "0f751ca2d30efe3385a4001d0bfa1548471babf5095f6fe88ee4813cf724fafc".fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = from.toAccountId(), era = Era.getEraFromBlockPeriod(44866, 64), - blockHash = jp.co.soramitsu.schema.extensions.fromHex() + blockHash = "0xa532ea14451c9b4e1a9ed1c75ab67d8be659362c9d8f2206009ae8d62faf9fca".fromHex() ) builder.call( "Assets", "transfer", mapOf( - "asset_id" to jp.co.soramitsu.schema.extensions.fromHex(), + "asset_id" to asset.fromHex(), "to" to to.toAccountId(), "amount" to BigInteger("200000000000000000") ) @@ -70,15 +71,15 @@ class ExtrinsicBuilderTest { keypair = KEYPAIR, nonce = 34.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), + genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), era = Era.Mortal(64, 59), - blockHash = jp.co.soramitsu.schema.extensions.fromHex() + blockHash = "0x1b876104c68b4a8924c098d61d2ad798761bb6fff55cca2885939ffc27ef5ecb".fromHex() ) builder.transfer( - recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), + recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), amount = BigInteger("10000000000") ) @@ -98,16 +99,16 @@ class ExtrinsicBuilderTest { keypair = KEYPAIR, nonce = 34.toBigInteger(), runtimeVersion = RuntimeVersion(48, 4), - genesisHash = jp.co.soramitsu.schema.extensions.fromHex(), + genesisHash = "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e".fromHex(), encryptionType = EncryptionType.ED25519, accountIdentifier = multiAddressFromId(KEYPAIR.publicKey), era = Era.Mortal(64, 59), - blockHash = jp.co.soramitsu.schema.extensions.fromHex() + blockHash = "0x1b876104c68b4a8924c098d61d2ad798761bb6fff55cca2885939ffc27ef5ecb".fromHex() ) repeat(2) { builder.transfer( - recipientAccountId = jp.co.soramitsu.schema.extensions.fromHex(), + recipientAccountId = "340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c63".fromHex(), amount = BigInteger("10000000000") ) } @@ -116,4 +117,4 @@ class ExtrinsicBuilderTest { assertEquals(extrinsicInHex, encoded) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt index 9effed60..bb35288d 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/metadata/MetadataTest.kt @@ -4,7 +4,7 @@ import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getFileContentFromResources import jp.co.soramitsu.fearless_utils.runtime.RealRuntimeProvider import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.definitions.types.stub.FakeType import jp.co.soramitsu.schema.scale.EncodableStruct import org.junit.Assert.assertEquals import org.junit.Before diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt index c10de84b..3dfce584 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/ss58/SS58EncoderTest.kt @@ -2,6 +2,10 @@ package jp.co.soramitsu.fearless_utils.ss58 import jp.co.soramitsu.fearless_utils.common.TestAddressBytes import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.addressByte +import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAccountId +import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAddress +import jp.co.soramitsu.schema.extensions.fromHex +import jp.co.soramitsu.schema.extensions.toHexString import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith @@ -15,14 +19,14 @@ class SS58EncoderTest { @Test fun `should encode address from public key`() { - val result = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.KUSAMA) + val result = PUBLIC_KEY.fromHex().toAddress(TestAddressBytes.KUSAMA) assertEquals(KUSAMA_ADDRESS, result) } @Test fun `should decode public key from address`() { - val result = jp.co.soramitsu.schema.extensions.toHexString() + val result = KUSAMA_ADDRESS.toAccountId().toHexString() assertEquals(PUBLIC_KEY, result) } @@ -30,35 +34,35 @@ class SS58EncoderTest { @Test fun `encode key to address with 69 prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(69) + val address = hexKey.fromHex().toAddress(69) assertEquals("cnUVLAjzRsrXrzEiqjxMpBwvb6YgdBy8DKibonvZgtcQY5ZKe", address) } @Test fun `encode key to address with kusama prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.KUSAMA) + val address = hexKey.fromHex().toAddress(TestAddressBytes.KUSAMA) assertEquals("FaNDBF8erbEfQtpLuwpk6kmQrYyiKNzBQm6BSuh2fdCqajb", address) } @Test fun `encode key to address with polkadot prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.POLKADOT) + val address = hexKey.fromHex().toAddress(TestAddressBytes.POLKADOT) assertEquals("1413hCAKtGqnMJ5tXrBmzJDv7tGPbx7woXepx5d66xSEH6qM", address) } @Test fun `encode key to address with westend prefix`() { val hexKey = "0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859" - val address = jp.co.soramitsu.schema.extensions.fromHex().toAddress(TestAddressBytes.WESTEND) + val address = hexKey.fromHex().toAddress(TestAddressBytes.WESTEND) assertEquals("5F4kYruG2VaJum5NaD8mr9PmGGGjueZoj2vLnndjYsQi6Vkw", address) } @Test fun `decode address to key with 69 prefix`() { val address = "cnUVLAjzRsrXrzEiqjxMpBwvb6YgdBy8DKibonvZgtcQY5ZKe" - val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) + val hexKey = address.toAccountId().toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(69.toByte(), prefix) @@ -67,7 +71,7 @@ class SS58EncoderTest { @Test fun `decode address to key with kusama prefix`() { val address = "FaNDBF8erbEfQtpLuwpk6kmQrYyiKNzBQm6BSuh2fdCqajb" - val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) + val hexKey = address.toAccountId().toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.KUSAMA, prefix) @@ -76,7 +80,7 @@ class SS58EncoderTest { @Test fun `decode address to key with polkadot prefix`() { val address = "1413hCAKtGqnMJ5tXrBmzJDv7tGPbx7woXepx5d66xSEH6qM" - val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) + val hexKey = address.toAccountId().toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.POLKADOT, prefix) @@ -85,9 +89,9 @@ class SS58EncoderTest { @Test fun `decode address to key with westend prefix`() { val address = "5F4kYruG2VaJum5NaD8mr9PmGGGjueZoj2vLnndjYsQi6Vkw" - val hexKey = jp.co.soramitsu.schema.extensions.toHexString(true) + val hexKey = address.toAccountId().toHexString(true) val prefix = address.addressByte() assertEquals("0x84bdc405d139399bba3ccea5d3de23316c9deeab661f57e2f4d1720cc6649859", hexKey) assertEquals(TestAddressBytes.WESTEND, prefix) } -} \ No newline at end of file +} From 74e9d8f165c1c90a7641375b3ff2d36ce1488762 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Fri, 18 Jun 2021 13:43:17 +0300 Subject: [PATCH 08/16] WIP --- .../definitions/TypeDefinitionParser.kt | 2 +- .../definitions/registry/TypePreset.kt | 46 ++++--------------- .../definitions/types/generics/Extrinsic.kt | 33 ++++++------- .../types/generics/ExtrinsicPayloadExtras.kt | 17 ++++--- .../definitions/types/generics/GenericCall.kt | 9 ++-- .../types/generics/GenericEvent.kt | 6 +-- .../definitions/types/generics/OpaqueCall.kt | 8 ++-- .../runtime/extrinsic/ExtrinsicBuilder.kt | 8 ++-- .../types/generics/ExtrinsicTest.kt | 6 +-- .../types/generics/GenericCallTest.kt | 16 +++---- .../types/generics/GenericEventTest.kt | 16 +++---- .../types/generics/OpaqueCallTest.kt | 4 +- .../types/generics/SignedExtrasTest.kt | 14 +++--- 13 files changed, 78 insertions(+), 107 deletions(-) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt index 54a046ae..b59689d7 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt @@ -188,4 +188,4 @@ object TypeDefinitionParserImpl : TypeDefinitionParser { ?: resolveDynamicType(parsingParams, name, typeDef)?.let(::TypeReference) ?: parsingParams.typesBuilder.create(name) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 5a1905f3..136227c5 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -1,39 +1,13 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* +import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata +import jp.co.soramitsu.schema.TypePreset import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Alias -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.CallBytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EraType -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EventRecord -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericAccountId -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensus -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensusEngineId -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericEvent -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericMultiAddress -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSeal -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSealV0 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H160 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H512 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.OpaqueCall -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SessionKeysSubstrate -import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType -import jp.co.soramitsu.schema.definitions.types.primitives.u128 -import jp.co.soramitsu.schema.definitions.types.primitives.u16 -import jp.co.soramitsu.schema.definitions.types.primitives.u256 -import jp.co.soramitsu.schema.definitions.types.primitives.u32 -import jp.co.soramitsu.schema.definitions.types.primitives.u64 -import jp.co.soramitsu.schema.definitions.types.primitives.u8 +import jp.co.soramitsu.schema.definitions.types.primitives.* import jp.co.soramitsu.schema.definitions.types.stub.FakeType -import jp.co.soramitsu.schema.TypePreset -import jp.co.soramitsu.schema.definitions.types.TypeReference typealias TypePresetBuilder = MutableMap @@ -68,7 +42,7 @@ fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { return createTypePresetBuilder().apply(builder) } -fun substratePreParsePreset(context: RuntimeSnapshot): TypePreset = typePreset { +fun substratePreParsePreset(types: Map> = mapOf(), metadata: RuntimeMetadata): TypePreset = typePreset { type(BooleanType) type(u8) @@ -80,7 +54,7 @@ fun substratePreParsePreset(context: RuntimeSnapshot): TypePreset = typePreset { type(GenericAccountId) type(Null) - type(GenericCall(context)) + type(GenericCall(metadata)) fakeType("GenericBlock") @@ -93,7 +67,7 @@ fun substratePreParsePreset(context: RuntimeSnapshot): TypePreset = typePreset { type(Bytes) type(BitVec) - type(Extrinsic(context)) + type(Extrinsic(metadata, types)) type(CallBytes) // seems to be unused in runtime type(EraType) @@ -109,9 +83,9 @@ fun substratePreParsePreset(context: RuntimeSnapshot): TypePreset = typePreset { type(GenericMultiAddress(this)) - type(OpaqueCall(context)) + type(OpaqueCall(metadata)) - type(GenericEvent(context)) + type(GenericEvent(metadata)) type(EventRecord(this)) alias("::Source", "LookupSource") diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt index 222f1a54..b7663f6c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt @@ -4,9 +4,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot - +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry +import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.toByteArray @@ -18,7 +19,7 @@ private val SIGNED_MASK = 0b1000_0000.toUByte() private const val TYPE_ADDRESS = "Address" private const val TYPE_SIGNATURE = "ExtrinsicSignature" -class Extrinsic(private val context: RuntimeSnapshot) : Type("ExtrinsicsDecoder") { +class Extrinsic(private val metadata: RuntimeMetadata, private val types: Map>) : Type("ExtrinsicsDecoder") { class Instance( val signature: Signature?, @@ -42,15 +43,15 @@ class Extrinsic(private val context: RuntimeSnapshot) : Type val signature = if (isSigned(extrinsicVersion)) { Signature( - accountIdentifier = addressType(context).decode(scaleCodecReader), - signature = signatureType(context).decode(scaleCodecReader), - signedExtras = SignedExtras(context).decode(scaleCodecReader, ) + accountIdentifier = addressType().decode(scaleCodecReader), + signature = signatureType().decode(scaleCodecReader), + signedExtras = SignedExtras(metadata).decode(scaleCodecReader, ) ) } else { null } - val call = GenericCall(context).decode(scaleCodecReader) + val call = GenericCall(metadata).decode(scaleCodecReader) return Instance(signature, call) } @@ -61,22 +62,22 @@ class Extrinsic(private val context: RuntimeSnapshot) : Type ) { val isSigned = value.signature != null - val extrinsicVersion = context.metadata.extrinsic.version.toInt().toUByte() + val extrinsicVersion = metadata.extrinsic.version.toInt().toUByte() val encodedVersion = encodedVersion(extrinsicVersion, isSigned).toByte() val signatureWrapperBytes = if (isSigned) { val signature = value.signature!! - val addressBytes = addressType(context).bytes(signature.accountIdentifier) - val signatureBytes = signatureType(context).bytes(signature.signature) - val signedExtrasBytes = SignedExtras(context).bytes(signature.signedExtras) + val addressBytes = addressType().bytes(signature.accountIdentifier) + val signatureBytes = signatureType().bytes(signature.signature) + val signedExtrasBytes = SignedExtras(metadata).bytes(signature.signedExtras) addressBytes + signatureBytes + signedExtrasBytes } else { byteArrayOf() } - val callBytes = GenericCall(context).toByteArray(value.call) + val callBytes = GenericCall(metadata).toByteArray(value.call) val extrinsicBodyBytes = byteArrayOf(encodedVersion) + signatureWrapperBytes + callBytes @@ -99,13 +100,13 @@ class Extrinsic(private val context: RuntimeSnapshot) : Type return extrinsicVersion and SIGNED_MASK != 0.toUByte() } - private fun addressType(context: RuntimeSnapshot): Type<*> { - return context.typeRegistry[TYPE_ADDRESS] + private fun addressType(): Type<*> { + return types[TYPE_ADDRESS] ?: requiredTypeNotFound(TYPE_ADDRESS) } - private fun signatureType(context: RuntimeSnapshot): Type<*> { - return context.typeRegistry[TYPE_SIGNATURE] + private fun signatureType(): Type<*> { + return types[TYPE_SIGNATURE] ?: requiredTypeNotFound(TYPE_SIGNATURE) } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt index f522cd32..54f09759 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -2,8 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot - +import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.primitives.Compact @@ -15,14 +14,14 @@ private const val _MORTALITY = "CheckMortality" private const val _NONCE = "CheckNonce" private const val _TIP = "ChargeTransactionPayment" -class SignedExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( +class SignedExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( name = "SignedExtras", extrasMapping = mapOf( _MORTALITY to EraType, _NONCE to Compact("Compact"), _TIP to Compact("Compact") ), - context + metadata ) { companion object { @@ -36,7 +35,7 @@ private const val _GENESIS = "CheckGenesis" private const val _SPEC_VERSION = "CheckSpecVersion" private const val _TX_VERSION = "CheckTxVersion" -class AdditionalExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( +class AdditionalExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( name = "AdditionalExtras", extrasMapping = mapOf( _MORTALITY to H256, @@ -44,7 +43,7 @@ class AdditionalExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( _SPEC_VERSION to u32, _TX_VERSION to u32 ), - context + metadata ) { companion object { @@ -58,13 +57,13 @@ class AdditionalExtras(context: RuntimeSnapshot) : ExtrinsicPayloadExtras( open class ExtrinsicPayloadExtras( name: String, private val extrasMapping: Map>, - private val context: RuntimeSnapshot + private val metadata: RuntimeMetadata ) : Type(name) { override fun decode( scaleCodecReader: ScaleCodecReader, ): ExtrinsicPayloadExtrasInstance { - val enabledSignedExtras = context.metadata.extrinsic.signedExtensions + val enabledSignedExtras = metadata.extrinsic.signedExtensions return enabledSignedExtras.associateWith { name -> extrasMapping[name]?.decode(scaleCodecReader) @@ -75,7 +74,7 @@ open class ExtrinsicPayloadExtras( scaleCodecWriter: ScaleCodecWriter, value: ExtrinsicPayloadExtrasInstance ) { - val enabledSignedExtras = context.metadata.extrinsic.signedExtensions + val enabledSignedExtras = metadata.extrinsic.signedExtensions return enabledSignedExtras.forEach { name -> extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, value[name]) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt index f9b49670..2aee9e4f 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt @@ -2,17 +2,14 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function -import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument -import jp.co.soramitsu.fearless_utils.runtime.metadata.callOrNull -import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple import jp.co.soramitsu.schema.scale.dataType.uint8 -class GenericCall(private val context: RuntimeSnapshot) : Type("GenericCall") { +class GenericCall(private val metadata: RuntimeMetadata) : Type("GenericCall") { class Instance(val moduleIndex: Int, val callIndex: Int, val arguments: Map) @@ -59,7 +56,7 @@ class GenericCall(private val context: RuntimeSnapshot) : Type("GenericEvent") { +class GenericEvent(val metadata: RuntimeMetadata) : Type("GenericEvent") { class Instance(val moduleIndex: Int, val eventIndex: Int, val arguments: List) @@ -57,7 +57,7 @@ class GenericEvent(val context: RuntimeSnapshot) : Type(" moduleIndex: Int, callIndex: Int ): Event { - return context.metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( + return metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( moduleIndex, callIndex ) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt index b1a813ed..70eeccc4 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt @@ -2,12 +2,12 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.fromByteArray import jp.co.soramitsu.schema.definitions.types.toByteArray -class OpaqueCall(private val context: RuntimeSnapshot) : Type("OpaqueCall") { +class OpaqueCall(private val metadata: RuntimeMetadata) : Type("OpaqueCall") { override val isFullyResolved = true @@ -16,14 +16,14 @@ class OpaqueCall(private val context: RuntimeSnapshot) : Type PAYLOAD_HASH_THRESHOLD) { diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt index 447cb29c..1ad3ea3b 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt @@ -20,7 +20,7 @@ class ExtrinsicTest { @Test fun `should decode transfer extrinsic`() { - val decoded = Extrinsic(runtime).fromHex(inHex) + val decoded = Extrinsic(runtime.metadata, runtime.typeRegistry).fromHex(inHex) val multiSignature = decoded.signature!!.tryExtractMultiSignature()!! @@ -31,7 +31,7 @@ class ExtrinsicTest { fun `should decode batch extrinsic`() { val batch = "0x01038400fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d16800b2b0e48ec54dd07af525e605c2d674ef57eef7d9932c3ad16f68c1e41a18ce579a207aa910b22bcddcf0a2eea96d4617fe618dff95de548bbf53e1773416700815009000100008040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f0000c16ff28623040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f00106644db8723" - val decoded = Extrinsic(runtime).fromHex(batch) + val decoded = Extrinsic(runtime.metadata, runtime.typeRegistry).fromHex(batch) assertEquals(16, decoded.call.moduleIndex) assertEquals(0, decoded.call.callIndex) @@ -69,7 +69,7 @@ class ExtrinsicTest { call = call ) - val encoded = Extrinsic(runtime).toHex(extrinsic) + val encoded = Extrinsic(runtime.metadata, runtime.typeRegistry).toHex(extrinsic) assertEquals(inHex, encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt index 80d4468d..f9d0d812 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt @@ -23,14 +23,14 @@ class GenericCallTest : BaseTypeTest() { @Test fun `should encode correct call`() { - val encoded = GenericCall(runtime).toHex(instance) + val encoded = GenericCall(runtime.metadata).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericCall(runtime).fromHex(inHex) + val decoded = GenericCall(runtime.metadata).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -45,7 +45,7 @@ class GenericCallTest : BaseTypeTest() { arguments = emptyMap() ) - assertThrows { GenericCall(runtime).toHex(invalidInstance) } + assertThrows { GenericCall(runtime.metadata).toHex(invalidInstance) } } @Test @@ -59,27 +59,27 @@ class GenericCallTest : BaseTypeTest() { ) ) - assertThrows { GenericCall(runtime).toHex(invalidInstance) } + assertThrows { GenericCall(runtime.metadata).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericCall(runtime).fromHex(inHex) } + assertThrows { GenericCall(runtime.metadata).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericCall(runtime).fromHex(inHex) } + assertThrows { GenericCall(runtime.metadata).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericCall(runtime).isValidInstance(instance)) + assertTrue(GenericCall(runtime.metadata).isValidInstance(instance)) - assertFalse(GenericCall(runtime).isValidInstance(1)) + assertFalse(GenericCall(runtime.metadata).isValidInstance(1)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt index 83d12ceb..b08f04db 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt @@ -23,14 +23,14 @@ class GenericEventTest : BaseTypeTest() { @Test fun `should encode correct event`() { - val encoded = GenericEvent(runtime).toHex(instance) + val encoded = GenericEvent(runtime.metadata).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericEvent(runtime).fromHex(inHex) + val decoded = GenericEvent(runtime.metadata).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -45,7 +45,7 @@ class GenericEventTest : BaseTypeTest() { arguments = emptyList() ) - assertThrows { GenericEvent(runtime).toHex(invalidInstance) } + assertThrows { GenericEvent(runtime.metadata).toHex(invalidInstance) } } @Test @@ -59,27 +59,27 @@ class GenericEventTest : BaseTypeTest() { ) ) - assertThrows { GenericEvent(runtime).toHex(invalidInstance) } + assertThrows { GenericEvent(runtime.metadata).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericEvent(runtime).fromHex(inHex) } + assertThrows { GenericEvent(runtime.metadata).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericEvent(runtime).fromHex(inHex) } + assertThrows { GenericEvent(runtime.metadata).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericEvent(runtime).isValidInstance(instance)) + assertTrue(GenericEvent(runtime.metadata).isValidInstance(instance)) - assertFalse(GenericEvent(runtime).isValidInstance(1)) + assertFalse(GenericEvent(runtime.metadata).isValidInstance(1)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt index 77d43e1c..f66846e3 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt @@ -20,7 +20,7 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should decode call`() { - val decoded = OpaqueCall(runtime).fromHex(inHex) + val decoded = OpaqueCall(runtime.metadata).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -29,7 +29,7 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should encode call`() { - val encoded = OpaqueCall(runtime).toHex(instance) + val encoded = OpaqueCall(runtime.metadata).toHex(instance) assertEquals(inHex, encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt index f9036cce..4aca0604 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt @@ -44,7 +44,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras(runtime).toHex( extras) + val encoded = SignedExtras(runtime.metadata).toHex( extras) assertEquals("0x002804", encoded) } @@ -59,7 +59,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal // CheckMortality is unused ) - val encoded = SignedExtras(runtime).toHex( extras) + val encoded = SignedExtras(runtime.metadata).toHex( extras) assertEquals("0x2804", encoded) } @@ -75,7 +75,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras(runtime).toHex( extras) + val encoded = SignedExtras(runtime.metadata).toHex( extras) assertEquals("0x", encoded) } @@ -89,7 +89,7 @@ class SignedExtrasTest { ) assertThrows { - SignedExtras(runtime).toHex( extras) + SignedExtras(runtime.metadata).toHex( extras) } } @@ -99,7 +99,7 @@ class SignedExtrasTest { val inHex = "0x002804" - val decoded = SignedExtras(runtime).fromHex( inHex) + val decoded = SignedExtras(runtime.metadata).fromHex( inHex) assertEquals(decoded.size, 3) } @@ -110,7 +110,7 @@ class SignedExtrasTest { val inHex = "0x2804" - val decoded = SignedExtras(runtime).fromHex( inHex) + val decoded = SignedExtras(runtime.metadata).fromHex( inHex) assertEquals(decoded.size, 2) } @@ -121,7 +121,7 @@ class SignedExtrasTest { val inHex = "0x" - val decoded = SignedExtras(runtime).fromHex( inHex) + val decoded = SignedExtras(runtime.metadata).fromHex( inHex) assertEquals(decoded.size, 0) } From 701adc26c8a9ee5c32d3681b0083fd3ee4390113 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Sun, 20 Jun 2021 15:41:51 +0300 Subject: [PATCH 09/16] WIP --- .../fearless_utils/runtime/RuntimeSnapshot.kt | 8 ++--- .../definitions/registry/TypePreset.kt | 12 ++++---- .../definitions/registry/TypeRegistry.kt | 4 +-- .../definitions/types/generics/Extrinsic.kt | 20 ++++++------- .../types/generics/ExtrinsicPayloadExtras.kt | 16 +++++----- .../definitions/types/generics/GenericCall.kt | 5 ++-- .../types/generics/GenericEvent.kt | 5 ++-- .../definitions/types/generics/OpaqueCall.kt | 7 +++-- .../runtime/extrinsic/ExtrinsicBuilder.kt | 8 ++--- .../fearless_utils/runtime/Common.kt | 12 ++++---- .../definitions/TypeDefinitionParserTest.kt | 6 ++-- .../extensions/HashMapExtensionTest.kt | 3 +- .../runtime/definitions/types/BaseTypeTest.kt | 29 +++---------------- .../types/generics/ExtrinsicTest.kt | 6 ++-- .../types/generics/GenericCallTest.kt | 16 +++++----- .../types/generics/GenericEventTest.kt | 16 +++++----- .../types/generics/OpaqueCallTest.kt | 4 +-- .../types/generics/SignedExtrasTest.kt | 14 ++++----- 18 files changed, 85 insertions(+), 106 deletions(-) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt index de31d20a..2eaa5de1 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt @@ -4,7 +4,7 @@ import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata -class RuntimeSnapshot ( - val typeRegistry: TypeRegistry, - val metadata: RuntimeMetadata -) +class RuntimeSnapshot { + lateinit var typeRegistry: TypeRegistry + lateinit var metadata: RuntimeMetadata +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 136227c5..2419b390 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.TypePreset import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference @@ -42,7 +42,7 @@ fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { return createTypePresetBuilder().apply(builder) } -fun substratePreParsePreset(types: Map> = mapOf(), metadata: RuntimeMetadata): TypePreset = typePreset { +fun substratePreParsePreset(runtime: RuntimeSnapshot = RuntimeSnapshot()): TypePreset = typePreset { type(BooleanType) type(u8) @@ -54,7 +54,7 @@ fun substratePreParsePreset(types: Map> = mapOf(), metadata: Run type(GenericAccountId) type(Null) - type(GenericCall(metadata)) + type(GenericCall(runtime)) fakeType("GenericBlock") @@ -67,7 +67,7 @@ fun substratePreParsePreset(types: Map> = mapOf(), metadata: Run type(Bytes) type(BitVec) - type(Extrinsic(metadata, types)) + type(Extrinsic(runtime)) type(CallBytes) // seems to be unused in runtime type(EraType) @@ -83,9 +83,9 @@ fun substratePreParsePreset(types: Map> = mapOf(), metadata: Run type(GenericMultiAddress(this)) - type(OpaqueCall(metadata)) + type(OpaqueCall(runtime)) - type(GenericEvent(metadata)) + type(GenericEvent(runtime)) type(EventRecord(this)) alias("::Source", "LookupSource") diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt index 0ecb708f..f59b7b9a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt @@ -13,8 +13,8 @@ interface RequestPreprocessor { } class TypeRegistry( - val types: Map = mapOf(), - val dynamicTypeResolver: DynamicTypeResolver + var types: Map = mapOf(), + val dynamicTypeResolver: DynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() ) { operator fun get( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt index b7663f6c..de531733 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt @@ -4,10 +4,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.bytes import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.toByteArray @@ -19,7 +17,7 @@ private val SIGNED_MASK = 0b1000_0000.toUByte() private const val TYPE_ADDRESS = "Address" private const val TYPE_SIGNATURE = "ExtrinsicSignature" -class Extrinsic(private val metadata: RuntimeMetadata, private val types: Map>) : Type("ExtrinsicsDecoder") { +class Extrinsic(private val runtime: RuntimeSnapshot) : Type("ExtrinsicsDecoder") { class Instance( val signature: Signature?, @@ -45,13 +43,13 @@ class Extrinsic(private val metadata: RuntimeMetadata, private val types: Map { - return types[TYPE_ADDRESS] + return runtime.typeRegistry[TYPE_ADDRESS] ?: requiredTypeNotFound(TYPE_ADDRESS) } private fun signatureType(): Type<*> { - return types[TYPE_SIGNATURE] + return runtime.typeRegistry[TYPE_SIGNATURE] ?: requiredTypeNotFound(TYPE_SIGNATURE) } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt index 54f09759..663c3506 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -2,7 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.definitions.types.primitives.Compact @@ -14,14 +14,14 @@ private const val _MORTALITY = "CheckMortality" private const val _NONCE = "CheckNonce" private const val _TIP = "ChargeTransactionPayment" -class SignedExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( +class SignedExtras(runtime: RuntimeSnapshot) : ExtrinsicPayloadExtras( name = "SignedExtras", extrasMapping = mapOf( _MORTALITY to EraType, _NONCE to Compact("Compact"), _TIP to Compact("Compact") ), - metadata + runtime ) { companion object { @@ -35,7 +35,7 @@ private const val _GENESIS = "CheckGenesis" private const val _SPEC_VERSION = "CheckSpecVersion" private const val _TX_VERSION = "CheckTxVersion" -class AdditionalExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( +class AdditionalExtras(runtime: RuntimeSnapshot) : ExtrinsicPayloadExtras( name = "AdditionalExtras", extrasMapping = mapOf( _MORTALITY to H256, @@ -43,7 +43,7 @@ class AdditionalExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( _SPEC_VERSION to u32, _TX_VERSION to u32 ), - metadata + runtime ) { companion object { @@ -57,13 +57,13 @@ class AdditionalExtras(metadata: RuntimeMetadata) : ExtrinsicPayloadExtras( open class ExtrinsicPayloadExtras( name: String, private val extrasMapping: Map>, - private val metadata: RuntimeMetadata + private val runtime: RuntimeSnapshot ) : Type(name) { override fun decode( scaleCodecReader: ScaleCodecReader, ): ExtrinsicPayloadExtrasInstance { - val enabledSignedExtras = metadata.extrinsic.signedExtensions + val enabledSignedExtras = runtime.metadata.extrinsic.signedExtensions return enabledSignedExtras.associateWith { name -> extrasMapping[name]?.decode(scaleCodecReader) @@ -74,7 +74,7 @@ open class ExtrinsicPayloadExtras( scaleCodecWriter: ScaleCodecWriter, value: ExtrinsicPayloadExtrasInstance ) { - val enabledSignedExtras = metadata.extrinsic.signedExtensions + val enabledSignedExtras = runtime.metadata.extrinsic.signedExtensions return enabledSignedExtras.forEach { name -> extrasMapping[name]?.encodeUnsafe(scaleCodecWriter, value[name]) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt index 2aee9e4f..5f6065d9 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt @@ -2,6 +2,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function import jp.co.soramitsu.schema.definitions.types.Type @@ -9,7 +10,7 @@ import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple import jp.co.soramitsu.schema.scale.dataType.uint8 -class GenericCall(private val metadata: RuntimeMetadata) : Type("GenericCall") { +class GenericCall(val runtime: RuntimeSnapshot) : Type("GenericCall") { class Instance(val moduleIndex: Int, val callIndex: Int, val arguments: Map) @@ -56,7 +57,7 @@ class GenericCall(private val metadata: RuntimeMetadata) : Type("GenericEvent") { +class GenericEvent(val runtime: RuntimeSnapshot) : Type("GenericEvent") { class Instance(val moduleIndex: Int, val eventIndex: Int, val arguments: List) @@ -57,7 +58,7 @@ class GenericEvent(val metadata: RuntimeMetadata) : Type( moduleIndex: Int, callIndex: Int ): Event { - return metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( + return runtime.metadata.moduleOrNull(moduleIndex)?.eventOrNull(callIndex) ?: eventNotFound( moduleIndex, callIndex ) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt index 70eeccc4..e5fef944 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt @@ -2,12 +2,13 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.fromByteArray import jp.co.soramitsu.schema.definitions.types.toByteArray -class OpaqueCall(private val metadata: RuntimeMetadata) : Type("OpaqueCall") { +class OpaqueCall(val runtime: RuntimeSnapshot) : Type("OpaqueCall") { override val isFullyResolved = true @@ -16,14 +17,14 @@ class OpaqueCall(private val metadata: RuntimeMetadata) : Type PAYLOAD_HASH_THRESHOLD) { diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt index cbddf062..5ecbde63 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt @@ -7,6 +7,7 @@ import jp.co.soramitsu.fearless_utils.common.getResourceReader import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.createTypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadataSchema @@ -17,18 +18,17 @@ object RealRuntimeProvider { fun buildRuntime(networkName: String): RuntimeSnapshot { val metadataRaw = buildRawMetadata(networkName) - val typeRegistry = buildRegistry(networkName) - val metadata = RuntimeMetadata(typeRegistry, metadataRaw) - - return RuntimeSnapshot(typeRegistry, metadata) + return RuntimeSnapshot() + .also { it.typeRegistry = buildRegistry(networkName, it)} + .also { it.metadata = RuntimeMetadata(it.typeRegistry, metadataRaw) } } fun buildRawMetadata(networkName: String = "kusama") = getFileContentFromResources("${networkName}_metadata").run { RuntimeMetadataSchema.read(this) } - fun buildRegistry(networkName: String): TypeRegistry { + fun buildRegistry(networkName: String, runtime: RuntimeSnapshot = RuntimeSnapshot()): TypeRegistry { val gson = Gson() val reader = JsonReader(getResourceReader("default.json")) val kusamaReader = JsonReader(getResourceReader("${networkName}.json")) @@ -38,7 +38,7 @@ object RealRuntimeProvider { gson.fromJson(kusamaReader, TypeDefinitionsTree::class.java) val defaultTypeRegistry = - TypeDefinitionParserImpl.parseBaseDefinitions(tree, substratePreParsePreset()).typePreset + TypeDefinitionParserImpl.parseBaseDefinitions(tree.types, substratePreParsePreset(runtime)).typePreset val networkParsed = TypeDefinitionParserImpl.parseNetworkVersioning( kusamaTree, defaultTypeRegistry diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt index ebbfdb97..205f2744 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt @@ -4,10 +4,8 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.type -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.typePreset +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.* import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.schema.TypePreset import jp.co.soramitsu.schema.definitions.types.composite.* diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt index 64b16dd0..b0fec2e3 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt @@ -4,6 +4,7 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader +import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry @@ -37,7 +38,7 @@ class HashMapExtensionTest { val defaultReader = JsonReader(getResourceReader("default.json")) val defaultTree = gson.fromJson(defaultReader, TypeDefinitionsTree::class.java) - val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree, substratePreParsePreset()) + val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree.types, substratePreParsePreset(RuntimeSnapshot())) val defaultRegistry = TypeRegistry(defaultParsed.typePreset, DynamicTypeResolver.defaultCompoundResolver()) val type = defaultRegistry["HashMap"] assertInstance(type) diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt index 100b5e5b..d2ba79f9 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt @@ -1,41 +1,20 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.GenericsExtension import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType import jp.co.soramitsu.schema.definitions.types.primitives.u8 import java.math.BigInteger abstract class BaseTypeTest { - fun foo () { - val typeRegistry = TypeRegistry( - mapOf(), - dynamicTypeResolver = DynamicTypeResolver( - extensions = DynamicTypeResolver.DEFAULT_COMPOUND_EXTENSIONS + listOf(GenericsExtension) - ) - ) - var runtimeSnapshot = RuntimeSnapshot(typeRegistry, meta()) - } - - protected val typeRegistry = TypeRegistry( - substratePreParsePreset(), - dynamicTypeResolver = DynamicTypeResolver( - extensions = DynamicTypeResolver.DEFAULT_COMPOUND_EXTENSIONS + listOf(GenericsExtension) - ) - ) - - protected val runtime: RuntimeSnapshot = RuntimeSnapshot( - typeRegistry = typeRegistry, - metadata = meta() - ) + protected val runtime: RuntimeSnapshot = RuntimeSnapshot() + .also { it.typeRegistry.types = substratePreParsePreset(it) } + .also { it.metadata = meta() } - fun meta() : RuntimeMetadata { + fun meta(): RuntimeMetadata { return RuntimeMetadata( runtimeVersion = BigInteger.ONE, modules = mapOf( diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt index 1ad3ea3b..447cb29c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicTest.kt @@ -20,7 +20,7 @@ class ExtrinsicTest { @Test fun `should decode transfer extrinsic`() { - val decoded = Extrinsic(runtime.metadata, runtime.typeRegistry).fromHex(inHex) + val decoded = Extrinsic(runtime).fromHex(inHex) val multiSignature = decoded.signature!!.tryExtractMultiSignature()!! @@ -31,7 +31,7 @@ class ExtrinsicTest { fun `should decode batch extrinsic`() { val batch = "0x01038400fdc41550fb5186d71cae699c31731b3e1baa10680c7bd6b3831a6d222cf4d16800b2b0e48ec54dd07af525e605c2d674ef57eef7d9932c3ad16f68c1e41a18ce579a207aa910b22bcddcf0a2eea96d4617fe618dff95de548bbf53e1773416700815009000100008040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f0000c16ff28623040000340a806419d5e278172e45cb0e50da1b031795366c99ddfe0a680bd53b142c630f00106644db8723" - val decoded = Extrinsic(runtime.metadata, runtime.typeRegistry).fromHex(batch) + val decoded = Extrinsic(runtime).fromHex(batch) assertEquals(16, decoded.call.moduleIndex) assertEquals(0, decoded.call.callIndex) @@ -69,7 +69,7 @@ class ExtrinsicTest { call = call ) - val encoded = Extrinsic(runtime.metadata, runtime.typeRegistry).toHex(extrinsic) + val encoded = Extrinsic(runtime).toHex(extrinsic) assertEquals(inHex, encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt index f9d0d812..80d4468d 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCallTest.kt @@ -23,14 +23,14 @@ class GenericCallTest : BaseTypeTest() { @Test fun `should encode correct call`() { - val encoded = GenericCall(runtime.metadata).toHex(instance) + val encoded = GenericCall(runtime).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericCall(runtime.metadata).fromHex(inHex) + val decoded = GenericCall(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -45,7 +45,7 @@ class GenericCallTest : BaseTypeTest() { arguments = emptyMap() ) - assertThrows { GenericCall(runtime.metadata).toHex(invalidInstance) } + assertThrows { GenericCall(runtime).toHex(invalidInstance) } } @Test @@ -59,27 +59,27 @@ class GenericCallTest : BaseTypeTest() { ) ) - assertThrows { GenericCall(runtime.metadata).toHex(invalidInstance) } + assertThrows { GenericCall(runtime).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericCall(runtime.metadata).fromHex(inHex) } + assertThrows { GenericCall(runtime).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericCall(runtime.metadata).fromHex(inHex) } + assertThrows { GenericCall(runtime).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericCall(runtime.metadata).isValidInstance(instance)) + assertTrue(GenericCall(runtime).isValidInstance(instance)) - assertFalse(GenericCall(runtime.metadata).isValidInstance(1)) + assertFalse(GenericCall(runtime).isValidInstance(1)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt index b08f04db..83d12ceb 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEventTest.kt @@ -23,14 +23,14 @@ class GenericEventTest : BaseTypeTest() { @Test fun `should encode correct event`() { - val encoded = GenericEvent(runtime.metadata).toHex(instance) + val encoded = GenericEvent(runtime).toHex(instance) assertEquals(inHex, encoded) } @Test fun `should decode correct call`() { - val decoded = GenericEvent(runtime.metadata).fromHex(inHex) + val decoded = GenericEvent(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -45,7 +45,7 @@ class GenericEventTest : BaseTypeTest() { arguments = emptyList() ) - assertThrows { GenericEvent(runtime.metadata).toHex(invalidInstance) } + assertThrows { GenericEvent(runtime).toHex(invalidInstance) } } @Test @@ -59,27 +59,27 @@ class GenericEventTest : BaseTypeTest() { ) ) - assertThrows { GenericEvent(runtime.metadata).toHex(invalidInstance) } + assertThrows { GenericEvent(runtime).toHex(invalidInstance) } } @Test fun `should throw if decoding instance with invalid index`() { val inHex = "0x0203" - assertThrows { GenericEvent(runtime.metadata).fromHex(inHex) } + assertThrows { GenericEvent(runtime).fromHex(inHex) } } @Test fun `should throw if decoding instance with invalid arguments`() { val inHex = "0x01000412" - assertThrows { GenericEvent(runtime.metadata).fromHex(inHex) } + assertThrows { GenericEvent(runtime).fromHex(inHex) } } @Test fun `should validate instance`() { - assertTrue(GenericEvent(runtime.metadata).isValidInstance(instance)) + assertTrue(GenericEvent(runtime).isValidInstance(instance)) - assertFalse(GenericEvent(runtime.metadata).isValidInstance(1)) + assertFalse(GenericEvent(runtime).isValidInstance(1)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt index f66846e3..77d43e1c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCallTest.kt @@ -20,7 +20,7 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should decode call`() { - val decoded = OpaqueCall(runtime.metadata).fromHex(inHex) + val decoded = OpaqueCall(runtime).fromHex(inHex) assertEquals(instance.arguments, decoded.arguments) assertEquals(instance.moduleIndex, decoded.moduleIndex) @@ -29,7 +29,7 @@ class OpaqueCallTest : BaseTypeTest() { @Test fun `should encode call`() { - val encoded = OpaqueCall(runtime.metadata).toHex(instance) + val encoded = OpaqueCall(runtime).toHex(instance) assertEquals(inHex, encoded) } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt index 4aca0604..f9036cce 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SignedExtrasTest.kt @@ -44,7 +44,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras(runtime.metadata).toHex( extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x002804", encoded) } @@ -59,7 +59,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal // CheckMortality is unused ) - val encoded = SignedExtras(runtime.metadata).toHex( extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x2804", encoded) } @@ -75,7 +75,7 @@ class SignedExtrasTest { SignedExtras.ERA to Era.Immortal ) - val encoded = SignedExtras(runtime.metadata).toHex( extras) + val encoded = SignedExtras(runtime).toHex( extras) assertEquals("0x", encoded) } @@ -89,7 +89,7 @@ class SignedExtrasTest { ) assertThrows { - SignedExtras(runtime.metadata).toHex( extras) + SignedExtras(runtime).toHex( extras) } } @@ -99,7 +99,7 @@ class SignedExtrasTest { val inHex = "0x002804" - val decoded = SignedExtras(runtime.metadata).fromHex( inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 3) } @@ -110,7 +110,7 @@ class SignedExtrasTest { val inHex = "0x2804" - val decoded = SignedExtras(runtime.metadata).fromHex( inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 2) } @@ -121,7 +121,7 @@ class SignedExtrasTest { val inHex = "0x" - val decoded = SignedExtras(runtime.metadata).fromHex( inHex) + val decoded = SignedExtras(runtime).fromHex( inHex) assertEquals(decoded.size, 0) } From 95b2986ebb9297840a8a9572e42ef98aded5ad41 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Sun, 20 Jun 2021 16:10:37 +0300 Subject: [PATCH 10/16] Finished separating scheme and fearless specific code --- .../soramitsu/fearless_utils/extensions/KotlinKtTest.kt | 9 ++++++--- .../runtime/definitions/types/BaseTypeTest.kt | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt index 2fbf6bf3..0ffe0703 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt @@ -1,5 +1,7 @@ package jp.co.soramitsu.fearless_utils.extensions +//import jp.co.soramitsu.schema.extensions.fromHex +//import jp.co.soramitsu.schema.extensions.toBigInteger import jp.co.soramitsu.schema.extensions.fromHex import jp.co.soramitsu.schema.extensions.toBigInteger import org.junit.Assert.assertEquals @@ -13,8 +15,9 @@ class KotlinKtTest { fun `should create little endian big int`() { val bytes = "0xb63f9b9eff0000000000000000000000".fromHex() - assertEquals(BigInteger("1097877634998"), - assertEquals(BigInteger("1097877634998"), bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN)) - ) + val toBigInteger = bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN) + print(toBigInteger) + + assertEquals(BigInteger("1097877634998"), bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt index d2ba79f9..0fbf82c7 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/BaseTypeTest.kt @@ -1,6 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function @@ -11,7 +12,7 @@ import java.math.BigInteger abstract class BaseTypeTest { protected val runtime: RuntimeSnapshot = RuntimeSnapshot() - .also { it.typeRegistry.types = substratePreParsePreset(it) } + .also { it.typeRegistry = TypeRegistry(substratePreParsePreset(it)) } .also { it.metadata = meta() } fun meta(): RuntimeMetadata { From 2b1c300094b2d70f905c408da03f9ea327098dc5 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Sun, 20 Jun 2021 17:01:10 +0300 Subject: [PATCH 11/16] Added typedefinitionparser for iroha2 --- .../definitions/TypeDefinitionParser.kt | 6 +- .../definitions/registry/TypePreset.kt | 25 +--- .../definitions/types/generics/Data.kt | 4 +- .../definitions/types/generics/EventRecord.kt | 4 +- .../generics/GenericConsensusEngineId.kt | 4 +- .../types/generics/GenericMultiAddress.kt | 4 +- .../definitions/types/generics/GenericSeal.kt | 4 +- .../types/generics/SessionKeysSubstrate.kt | 4 +- .../fearless_utils/runtime/Common.kt | 1 - .../definitions/TypeDefinitionParserTest.kt | 3 +- .../definitions/types/generics/DataTest.kt | 6 +- .../co/soramitsu/TypeDefinitionParserImpl.kt | 17 --- .../java/jp/co/soramitsu/iroha2/EntryPoint.kt | 5 + .../iroha2/TypeDefinitionParserImpl.kt | 129 ++++++++++++++++++ .../soramitsu/schema/TypeDefinitionParser.kt | 4 - .../java/jp/co/soramitsu/schema/TypePreset.kt | 23 ++++ 16 files changed, 174 insertions(+), 69 deletions(-) delete mode 100644 iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt create mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt create mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt create mode 100644 schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt index b59689d7..481e294a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt @@ -1,11 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions import com.google.gson.annotations.SerializedName -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.* -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.ParseResult -import jp.co.soramitsu.schema.TypeDefinitionParser -import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.* import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.* diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 2419b390..55f054e3 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -2,23 +2,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* -import jp.co.soramitsu.schema.TypePreset -import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.* import jp.co.soramitsu.schema.definitions.types.composite.Alias import jp.co.soramitsu.schema.definitions.types.primitives.* import jp.co.soramitsu.schema.definitions.types.stub.FakeType -typealias TypePresetBuilder = MutableMap - -fun TypePreset.newBuilder(): TypePresetBuilder = toMutableMap() - -fun TypePresetBuilder.type(type: Type<*>) { - val currentRef = getOrCreate(type.name) - - currentRef.value = type -} - fun TypePresetBuilder.fakeType(name: String) { type(FakeType(name)) } @@ -31,17 +19,6 @@ fun TypePresetBuilder.alias(alias: String, original: String) { type(typeAlias) } -fun TypePresetBuilder.getOrCreate(definition: String) = getOrPut(definition) { TypeReference(null) } - -fun TypePresetBuilder.create(definition: String): TypeReference = - TypeReference(null).also { put(definition, it) } - -fun createTypePresetBuilder(): TypePresetBuilder = mutableMapOf() - -fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { - return createTypePresetBuilder().apply(builder) -} - fun substratePreParsePreset(runtime: RuntimeSnapshot = RuntimeSnapshot()): TypePreset = typePreset { type(BooleanType) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt index 33c47371..2820622f 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt @@ -2,8 +2,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt index 1cfbdaa7..77b1717a 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt index 807467e5..59039cbd 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt index 46f5d2b2..316be498 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.primitives.Compact diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt index eed83bbe..07cc8a94 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt index 2da7b3f4..3fa3230d 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,7 +1,7 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.getOrCreate +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct @Suppress("FunctionName") diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt index 5ecbde63..6b3138a9 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/Common.kt @@ -7,7 +7,6 @@ import jp.co.soramitsu.fearless_utils.common.getResourceReader import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionParserImpl import jp.co.soramitsu.fearless_utils.runtime.definitions.TypeDefinitionsTree import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.createTypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadataSchema diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt index 205f2744..6f9f18db 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt @@ -4,7 +4,6 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.* import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.schema.TypePreset @@ -14,6 +13,8 @@ import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray import jp.co.soramitsu.schema.definitions.types.primitives.u64 import jp.co.soramitsu.schema.definitions.types.primitives.u8 import jp.co.soramitsu.schema.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.type +import jp.co.soramitsu.schema.typePreset import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt index ff346afc..77d50d0c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/DataTest.kt @@ -2,12 +2,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.assertThrows -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypePresetBuilder +import jp.co.soramitsu.schema.TypePresetBuilder import jp.co.soramitsu.fearless_utils.runtime.definitions.types.BaseTypeTest -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException diff --git a/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt deleted file mode 100644 index 52c71d4d..00000000 --- a/iroha2/src/main/java/jp/co/soramitsu/TypeDefinitionParserImpl.kt +++ /dev/null @@ -1,17 +0,0 @@ -package jp.co.soramitsu - -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.ParseResult -import jp.co.soramitsu.schema.TypeDefinitionParser -import jp.co.soramitsu.schema.TypePreset - -class TypeDefinitionParserImpl : TypeDefinitionParser { - override fun parseBaseDefinitions( - types: Map, - typePreset: TypePreset, - dynamicTypeResolver: DynamicTypeResolver - ): ParseResult { - TODO("Not yet implemented") - } - -} \ No newline at end of file diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt new file mode 100644 index 00000000..1534f636 --- /dev/null +++ b/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt @@ -0,0 +1,5 @@ +package jp.co.soramitsu.iroha2 + +fun main() { + +} diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt new file mode 100644 index 00000000..845a0c84 --- /dev/null +++ b/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt @@ -0,0 +1,129 @@ +package jp.co.soramitsu.iroha2 + +import jp.co.soramitsu.schema.* +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Alias + +class TypeDefinitionParserImpl : TypeDefinitionParser { + + private class Params( + val types: Map, + val typeResolver: DynamicTypeResolver, + val typesBuilder: TypePresetBuilder + ) + + override fun parseBaseDefinitions( + types: Map, + typePreset: TypePreset, + typeResolver: DynamicTypeResolver + ): ParseResult { + val builder = typePreset.newBuilder() + val parsingParams: Params = Params(types, typeResolver, builder) + + for (name in types.keys) { + val typeValue = types[name] + val type = parseType(parsingParams, name, typeValue) ?: continue + + builder.type(type) + } + val unknownTypes = builder.entries + .mapNotNull { (name, typeRef) -> if (!typeRef.isResolved()) name else null } + + return ParseResult(builder, unknownTypes) + } + + private fun parseType(parsingParams: Params, name: String, typeValue: Any?): Type<*>? { + return when (typeValue) { + is String -> { + val dynamicType = resolveDynamicType(parsingParams, name, typeValue) + + when { + dynamicType != null -> dynamicType + typeValue == name -> parsingParams.typesBuilder[name]?.value + else -> Alias(name, parsingParams.typesBuilder.getOrCreate(typeValue)) + } + } + +// is Map<*, *> -> { +// val typeValueCasted = typeValue as Map +// +// when (typeValueCasted["type"]) { +// TOKEN_STRUCT -> { +// val typeMapping = typeValueCasted["type_mapping"] as List> +// val children = parseTypeMapping(parsingParams, typeMapping) +// +// Struct(name, children) +// } +// +// TOKEN_ENUM -> { +// val valueList = typeValueCasted["value_list"] as? List +// val typeMapping = typeValueCasted["type_mapping"] as? List> +// +// when { +// valueList != null -> CollectionEnum(name, valueList) +// +// typeMapping != null -> { +// val children = parseTypeMapping(parsingParams, typeMapping) +// .map { (name, typeRef) -> DictEnum.Entry(name, typeRef) } +// +// DictEnum(name, children) +// } +// else -> null +// } +// } +// +// TOKEN_SET -> { +// val valueTypeName = typeValueCasted["value_type"] as String +// val valueListRaw = typeValueCasted["value_list"] as Map +// +// val valueTypeRef = resolveTypeAllWaysOrCreate(parsingParams, valueTypeName) +// +// val valueList = valueListRaw.mapValues { (_, value) -> +// BigInteger(value.toInt().toString()) +// } +// +// SetType(name, valueTypeRef, LinkedHashMap(valueList)) +// } +// +// else -> null +// } +// } + + else -> null + } + } + + private fun resolveDynamicType( + parsingParams: Params, + name: String, + typeDef: String + ): Type<*>? { + return parsingParams.typeResolver.createDynamicType(name, typeDef) { + resolveTypeAllWaysOrCreate(parsingParams, it) + } + } + + private fun resolveTypeAllWaysOrCreate( + parsingParams: Params, + typeDef: String, + name: String = typeDef + ): TypeReference { + return parsingParams.typesBuilder[name] + ?: resolveDynamicType(parsingParams, name, typeDef)?.let(::TypeReference) + ?: parsingParams.typesBuilder.create(name) + } + + private fun parseTypeMapping( + parsingParams: Params, + typeMapping: List> + ): LinkedHashMap { + val children = LinkedHashMap() + + for ((fieldName, fieldType) in typeMapping) { + children[fieldName] = resolveTypeAllWaysOrCreate(parsingParams, fieldType) + } + + return children + } +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt index 6beff735..d3447d5b 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt @@ -1,7 +1,5 @@ package jp.co.soramitsu.schema -import jp.co.soramitsu.schema.definitions.types.TypeReference - interface TypeDefinitionParser { fun parseBaseDefinitions( types: Map, @@ -14,5 +12,3 @@ class ParseResult( val typePreset: TypePreset, val unknownTypes: List ) - -typealias TypePreset = Map diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt new file mode 100644 index 00000000..8aeba494 --- /dev/null +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt @@ -0,0 +1,23 @@ +package jp.co.soramitsu.schema + +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference + +typealias TypePreset = Map +typealias TypePresetBuilder = MutableMap + +fun TypePreset.newBuilder(): TypePresetBuilder = toMutableMap() +fun TypePresetBuilder.type(type: Type<*>) { + val currentRef = getOrCreate(type.name) + + currentRef.value = type +} + +fun TypePresetBuilder.getOrCreate(definition: String) = getOrPut(definition) { TypeReference(null) } +fun TypePresetBuilder.create(definition: String): TypeReference = + TypeReference(null).also { put(definition, it) } + +fun createTypePresetBuilder(): TypePresetBuilder = mutableMapOf() +fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { + return createTypePresetBuilder().apply(builder) +} From 92177845d48c024253a1441b6b2e6f97fbab854e Mon Sep 17 00:00:00 2001 From: rkharisov Date: Mon, 21 Jun 2021 08:05:54 +0300 Subject: [PATCH 12/16] WIP --- fearless-utils/build.gradle | 1 - .../extensions/HashMapExtensionTest.kt | 2 +- iroha2/build.gradle | 5 +- iroha2/libs/polkaj-scale-0.2.3.jar | Bin 0 -> 34149 bytes .../java/jp/co/soramitsu/iroha2/EntryPoint.kt | 112 +++++++++++++++ .../iroha2/TypeDefinitionParserImpl.kt | 129 ------------------ .../iroha2/schema/TypeDefinitionParserImpl.kt | 120 ++++++++++++++++ .../soramitsu/schema/TypeDefinitionParser.kt | 8 +- .../schema/definitions/types/Type.kt | 3 + 9 files changed, 247 insertions(+), 133 deletions(-) create mode 100644 iroha2/libs/polkaj-scale-0.2.3.jar delete mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt create mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt diff --git a/fearless-utils/build.gradle b/fearless-utils/build.gradle index b2563ffc..c6be9737 100644 --- a/fearless-utils/build.gradle +++ b/fearless-utils/build.gradle @@ -79,7 +79,6 @@ dependencies { implementation wsDep implementation gsonDep implementation web3jDep - implementation gsonDep implementation apacheXercesDep implementation xxHashDep diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt index b0fec2e3..5de3d225 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/extensions/HashMapExtensionTest.kt @@ -38,7 +38,7 @@ class HashMapExtensionTest { val defaultReader = JsonReader(getResourceReader("default.json")) val defaultTree = gson.fromJson(defaultReader, TypeDefinitionsTree::class.java) - val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree.types, substratePreParsePreset(RuntimeSnapshot())) + val defaultParsed = TypeDefinitionParserImpl.parseBaseDefinitions(defaultTree.types, substratePreParsePreset()) val defaultRegistry = TypeRegistry(defaultParsed.typePreset, DynamicTypeResolver.defaultCompoundResolver()) val type = defaultRegistry["HashMap"] assertInstance(type) diff --git a/iroha2/build.gradle b/iroha2/build.gradle index 72d8edd6..15286d8b 100644 --- a/iroha2/build.gradle +++ b/iroha2/build.gradle @@ -9,6 +9,9 @@ java { } dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(":schema") + implementation gsonDep implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" -} \ No newline at end of file +} diff --git a/iroha2/libs/polkaj-scale-0.2.3.jar b/iroha2/libs/polkaj-scale-0.2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..3b9e50e1e2484304eae189331b3041143682417f GIT binary patch literal 34149 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 literal 0 HcmV?d00001 diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt index 1534f636..03891098 100644 --- a/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt +++ b/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt @@ -1,5 +1,117 @@ package jp.co.soramitsu.iroha2 +import com.google.gson.Gson +import com.google.gson.stream.JsonReader +import io.emeraldpay.polkaj.scale.ScaleCodecReader +import io.emeraldpay.polkaj.scale.ScaleCodecWriter +import jp.co.soramitsu.iroha2.schema.TypeDefinitionParserImpl.parseBaseDefinitions +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.createTypePresetBuilder +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.WrapperExtension +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.Option +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import java.nio.file.Files +import java.nio.file.Paths + fun main() { + val gson = Gson() + val reader = JsonReader(Files.newBufferedReader(Paths.get("/Users/pd/Desktop/schema.json"))) + + val types = gson.fromJson>(reader, Map::class.java) + + val typeResolver = DynamicTypeResolver( + MapExtension, + VectorExtension, + OptionExtension + ) + val result = parseBaseDefinitions(types, createTypePresetBuilder(), typeResolver) + result.typePreset.forEach(::println) + println("\n=============================================\n") + result.unknownTypes.let { if (it.isNotEmpty()) it.forEach(::println) } +} + +object MapExtension : DynamicTypeExtension { + + override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { + if (!typeDef.startsWith("alloc::collections::BTreeMap")) return null + val withoutBrackets = typeDef.removePrefix("alloc::collections::BTreeMap").removeSurrounding("<", ">") + if (withoutBrackets.split(",").size != 2) return null + val tuple = "($withoutBrackets)" + val typeRef = typeProvider(tuple) + return Vec("Vec<$tuple>", typeRef) + } +} + +object VectorExtension : WrapperExtension() { + override val wrapperName = "alloc::vec::Vec" + + override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> = Vec(name, innerTypeRef) +} + +object OptionExtension : WrapperExtension() { + override val wrapperName = "core::option::Option" + + override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) +} + + +@Suppress("UNCHECKED_CAST") +class TupleStruct( + name: String, + private val types: List +) : Type(name) { + + class Instance(val mapping: Map) { + inline operator fun get(key: String): R? = mapping[key] as? R + } + + override fun decode(scaleCodecReader: ScaleCodecReader): Instance { + TODO("Not yet implemented") + } + + override fun isValidInstance(instance: Any?): Boolean { + if (instance !is Instance) return false + + return types.all { type -> + type.requireValue().isValidInstance(instance) + } + } + + override val isFullyResolved: Boolean + get() = types.all { it.isResolved() } + + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Instance) { + TODO("Not yet implemented") + } +} + + +@Suppress("UNCHECKED_CAST") +class Enum( + name: String, + private val variants: List +) : Type(name) { + + class Variant(val name: String, val discriminant: Int, val type: TypeReference) + + override fun decode(scaleCodecReader: ScaleCodecReader): Enum { + TODO("Not yet implemented") + } + + override fun isValidInstance(instance: Any?): Boolean { + if (instance !is Enum) return false + + return variants.all { it.type.requireValue().isValidInstance(instance) } + } + + override val isFullyResolved: Boolean + get() = variants.all { it.type.isResolved() } + override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Enum) { + TODO("Not yet implemented") + } } diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt deleted file mode 100644 index 845a0c84..00000000 --- a/iroha2/src/main/java/jp/co/soramitsu/iroha2/TypeDefinitionParserImpl.kt +++ /dev/null @@ -1,129 +0,0 @@ -package jp.co.soramitsu.iroha2 - -import jp.co.soramitsu.schema.* -import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.composite.Alias - -class TypeDefinitionParserImpl : TypeDefinitionParser { - - private class Params( - val types: Map, - val typeResolver: DynamicTypeResolver, - val typesBuilder: TypePresetBuilder - ) - - override fun parseBaseDefinitions( - types: Map, - typePreset: TypePreset, - typeResolver: DynamicTypeResolver - ): ParseResult { - val builder = typePreset.newBuilder() - val parsingParams: Params = Params(types, typeResolver, builder) - - for (name in types.keys) { - val typeValue = types[name] - val type = parseType(parsingParams, name, typeValue) ?: continue - - builder.type(type) - } - val unknownTypes = builder.entries - .mapNotNull { (name, typeRef) -> if (!typeRef.isResolved()) name else null } - - return ParseResult(builder, unknownTypes) - } - - private fun parseType(parsingParams: Params, name: String, typeValue: Any?): Type<*>? { - return when (typeValue) { - is String -> { - val dynamicType = resolveDynamicType(parsingParams, name, typeValue) - - when { - dynamicType != null -> dynamicType - typeValue == name -> parsingParams.typesBuilder[name]?.value - else -> Alias(name, parsingParams.typesBuilder.getOrCreate(typeValue)) - } - } - -// is Map<*, *> -> { -// val typeValueCasted = typeValue as Map -// -// when (typeValueCasted["type"]) { -// TOKEN_STRUCT -> { -// val typeMapping = typeValueCasted["type_mapping"] as List> -// val children = parseTypeMapping(parsingParams, typeMapping) -// -// Struct(name, children) -// } -// -// TOKEN_ENUM -> { -// val valueList = typeValueCasted["value_list"] as? List -// val typeMapping = typeValueCasted["type_mapping"] as? List> -// -// when { -// valueList != null -> CollectionEnum(name, valueList) -// -// typeMapping != null -> { -// val children = parseTypeMapping(parsingParams, typeMapping) -// .map { (name, typeRef) -> DictEnum.Entry(name, typeRef) } -// -// DictEnum(name, children) -// } -// else -> null -// } -// } -// -// TOKEN_SET -> { -// val valueTypeName = typeValueCasted["value_type"] as String -// val valueListRaw = typeValueCasted["value_list"] as Map -// -// val valueTypeRef = resolveTypeAllWaysOrCreate(parsingParams, valueTypeName) -// -// val valueList = valueListRaw.mapValues { (_, value) -> -// BigInteger(value.toInt().toString()) -// } -// -// SetType(name, valueTypeRef, LinkedHashMap(valueList)) -// } -// -// else -> null -// } -// } - - else -> null - } - } - - private fun resolveDynamicType( - parsingParams: Params, - name: String, - typeDef: String - ): Type<*>? { - return parsingParams.typeResolver.createDynamicType(name, typeDef) { - resolveTypeAllWaysOrCreate(parsingParams, it) - } - } - - private fun resolveTypeAllWaysOrCreate( - parsingParams: Params, - typeDef: String, - name: String = typeDef - ): TypeReference { - return parsingParams.typesBuilder[name] - ?: resolveDynamicType(parsingParams, name, typeDef)?.let(::TypeReference) - ?: parsingParams.typesBuilder.create(name) - } - - private fun parseTypeMapping( - parsingParams: Params, - typeMapping: List> - ): LinkedHashMap { - val children = LinkedHashMap() - - for ((fieldName, fieldType) in typeMapping) { - children[fieldName] = resolveTypeAllWaysOrCreate(parsingParams, fieldType) - } - - return children - } -} diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt new file mode 100644 index 00000000..ef0aeb65 --- /dev/null +++ b/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt @@ -0,0 +1,120 @@ +package jp.co.soramitsu.iroha2.schema + +import jp.co.soramitsu.iroha2.Enum +import jp.co.soramitsu.iroha2.TupleStruct +import jp.co.soramitsu.schema.* +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.composite.Struct + +object TypeDefinitionParserImpl : TypeDefinitionParser { + + private class Params( + val typeResolver: DynamicTypeResolver, + val typesBuilder: TypePresetBuilder + ) + + override fun parseBaseDefinitions( + types: Map, + typePreset: TypePreset, + dynamicTypeResolver: DynamicTypeResolver + ): ParseResult { + val builder = typePreset.newBuilder() + val parsingParams = Params(dynamicTypeResolver, builder) + + for (name in types.keys) { + val typeValue = types[name] + val type = parseType(parsingParams, name, typeValue) ?: continue + + builder.type(type) + } + val unknownTypes = builder.entries + .mapNotNull { (name, typeRef) -> if (!typeRef.isResolved()) name else null } + + return ParseResult(builder, unknownTypes) + } + + private fun parseType(parsingParams: Params, name: String, typeValue: Any?): Type<*>? { + return when (typeValue) { + is String -> { + return resolveDynamicType(parsingParams, name, typeValue) + ?: return parsingParams.typesBuilder.getOrCreate(typeValue).value + } + is Map<*, *> -> { + when { + typeValue["Map"] != null || typeValue["Vec"] != null || typeValue["Option"] != null -> { + resolveDynamicType(parsingParams, name, name) + ?: parsingParams.typesBuilder.getOrCreate(name).value + } + typeValue["NamedStruct"] != null -> { + val components = + (typeValue["NamedStruct"] as Map>>)["declarations"]!! + val children = parseTypeMapping(parsingParams, components) + Struct(name, children) + } + typeValue["UnnamedStruct"] != null -> { + val components = (typeValue["UnnamedStruct"] as Map>)["types"]!! + val children = components.map { resolveTypeAllWaysOrCreate(parsingParams, it) } + TupleStruct(name, children) + } + typeValue["Enum"] != null -> { + val components = (typeValue["Enum"] as Map>>)["variants"]!! + val variants = components.map { + val ty = resolveDynamicType(parsingParams, name, name)?.let(::TypeReference) + ?: parsingParams.typesBuilder.getOrCreate(name) + Enum.Variant( + it["name"]!! as String, + (it["discriminant"]!! as Double).toInt(), + ty + ) + } + Enum(name, variants) + } + typeValue["Int"] != null -> { + return null + } + else -> { + throw RuntimeException("Unexpected type $typeValue") + } + } + } + else -> null + } + } + +private fun resolveDynamicType( + parsingParams: Params, + name: String, + typeDef: String +): Type<*>? { + return parsingParams.typeResolver.createDynamicType(name, typeDef) { + resolveTypeAllWaysOrCreate(parsingParams, it) + } +} + +private fun resolveTypeAllWaysOrCreate( + parsingParams: Params, + typeDef: String, + name: String = typeDef +): TypeReference { + return parsingParams.typesBuilder[name] + ?: resolveDynamicType(parsingParams, name, typeDef)?.let(::TypeReference) + ?: parsingParams.typesBuilder.create(name) +} + +private fun parseTypeMapping( + parsingParams: Params, + typeMapping: List> +): LinkedHashMap { + val children = LinkedHashMap() + + for (singleMapping in typeMapping) { + for ((fieldName, fieldType) in singleMapping) { + children[fieldName] = resolveTypeAllWaysOrCreate(parsingParams, fieldType) + } + } + + return children +} +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt index d3447d5b..9f368b04 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt @@ -11,4 +11,10 @@ interface TypeDefinitionParser { class ParseResult( val typePreset: TypePreset, val unknownTypes: List -) + + +) { + override fun toString(): String { + return "ParseResult(typePreset=$typePreset, unknownTypes=$unknownTypes)" + } +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt index bfb9f213..02de88a6 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/Type.kt @@ -26,6 +26,9 @@ class TypeReference(var value: Type<*>?) { private fun resolveRecursive() = value?.isFullyResolved ?: false private fun isInRecursion() = resolutionInProgress + override fun toString(): String { + return "TypeReference(value=$value, resolutionInProgress=$resolutionInProgress)" + } } abstract class Type(val name: String) { From 82cdab9edf5f06d6fec2f60665f08d54f242c69e Mon Sep 17 00:00:00 2001 From: rkharisov Date: Mon, 21 Jun 2021 08:10:52 +0300 Subject: [PATCH 13/16] Remoced Iroha2 module --- iroha2/.gitignore | 1 - iroha2/build.gradle | 17 --- iroha2/libs/polkaj-scale-0.2.3.jar | Bin 34149 -> 0 bytes .../java/jp/co/soramitsu/iroha2/EntryPoint.kt | 117 ----------------- .../iroha2/schema/TypeDefinitionParserImpl.kt | 120 ------------------ settings.gradle | 1 - 6 files changed, 256 deletions(-) delete mode 100644 iroha2/.gitignore delete mode 100644 iroha2/build.gradle delete mode 100644 iroha2/libs/polkaj-scale-0.2.3.jar delete mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt delete mode 100644 iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt diff --git a/iroha2/.gitignore b/iroha2/.gitignore deleted file mode 100644 index 42afabfd..00000000 --- a/iroha2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/iroha2/build.gradle b/iroha2/build.gradle deleted file mode 100644 index 15286d8b..00000000 --- a/iroha2/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -plugins { - id 'java-library' - id 'kotlin' -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - - implementation project(":schema") - implementation gsonDep - implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" -} diff --git a/iroha2/libs/polkaj-scale-0.2.3.jar b/iroha2/libs/polkaj-scale-0.2.3.jar deleted file mode 100644 index 3b9e50e1e2484304eae189331b3041143682417f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34149 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 diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt deleted file mode 100644 index 03891098..00000000 --- a/iroha2/src/main/java/jp/co/soramitsu/iroha2/EntryPoint.kt +++ /dev/null @@ -1,117 +0,0 @@ -package jp.co.soramitsu.iroha2 - -import com.google.gson.Gson -import com.google.gson.stream.JsonReader -import io.emeraldpay.polkaj.scale.ScaleCodecReader -import io.emeraldpay.polkaj.scale.ScaleCodecWriter -import jp.co.soramitsu.iroha2.schema.TypeDefinitionParserImpl.parseBaseDefinitions -import jp.co.soramitsu.schema.DynamicTypeResolver -import jp.co.soramitsu.schema.createTypePresetBuilder -import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension -import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.WrapperExtension -import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.composite.Option -import jp.co.soramitsu.schema.definitions.types.composite.Vec -import java.nio.file.Files -import java.nio.file.Paths - -fun main() { - val gson = Gson() - val reader = JsonReader(Files.newBufferedReader(Paths.get("/Users/pd/Desktop/schema.json"))) - - val types = gson.fromJson>(reader, Map::class.java) - - val typeResolver = DynamicTypeResolver( - MapExtension, - VectorExtension, - OptionExtension - ) - val result = parseBaseDefinitions(types, createTypePresetBuilder(), typeResolver) - result.typePreset.forEach(::println) - println("\n=============================================\n") - result.unknownTypes.let { if (it.isNotEmpty()) it.forEach(::println) } -} - -object MapExtension : DynamicTypeExtension { - - override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { - if (!typeDef.startsWith("alloc::collections::BTreeMap")) return null - val withoutBrackets = typeDef.removePrefix("alloc::collections::BTreeMap").removeSurrounding("<", ">") - if (withoutBrackets.split(",").size != 2) return null - val tuple = "($withoutBrackets)" - val typeRef = typeProvider(tuple) - return Vec("Vec<$tuple>", typeRef) - } -} - -object VectorExtension : WrapperExtension() { - override val wrapperName = "alloc::vec::Vec" - - override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> = Vec(name, innerTypeRef) -} - -object OptionExtension : WrapperExtension() { - override val wrapperName = "core::option::Option" - - override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) -} - - -@Suppress("UNCHECKED_CAST") -class TupleStruct( - name: String, - private val types: List -) : Type(name) { - - class Instance(val mapping: Map) { - inline operator fun get(key: String): R? = mapping[key] as? R - } - - override fun decode(scaleCodecReader: ScaleCodecReader): Instance { - TODO("Not yet implemented") - } - - override fun isValidInstance(instance: Any?): Boolean { - if (instance !is Instance) return false - - return types.all { type -> - type.requireValue().isValidInstance(instance) - } - } - - override val isFullyResolved: Boolean - get() = types.all { it.isResolved() } - - override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Instance) { - TODO("Not yet implemented") - } -} - - -@Suppress("UNCHECKED_CAST") -class Enum( - name: String, - private val variants: List -) : Type(name) { - - class Variant(val name: String, val discriminant: Int, val type: TypeReference) - - override fun decode(scaleCodecReader: ScaleCodecReader): Enum { - TODO("Not yet implemented") - } - - override fun isValidInstance(instance: Any?): Boolean { - if (instance !is Enum) return false - - return variants.all { it.type.requireValue().isValidInstance(instance) } - } - - override val isFullyResolved: Boolean - get() = variants.all { it.type.isResolved() } - - override fun encode(scaleCodecWriter: ScaleCodecWriter, value: Enum) { - TODO("Not yet implemented") - } -} diff --git a/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt b/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt deleted file mode 100644 index ef0aeb65..00000000 --- a/iroha2/src/main/java/jp/co/soramitsu/iroha2/schema/TypeDefinitionParserImpl.kt +++ /dev/null @@ -1,120 +0,0 @@ -package jp.co.soramitsu.iroha2.schema - -import jp.co.soramitsu.iroha2.Enum -import jp.co.soramitsu.iroha2.TupleStruct -import jp.co.soramitsu.schema.* -import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.composite.DictEnum -import jp.co.soramitsu.schema.definitions.types.composite.Struct - -object TypeDefinitionParserImpl : TypeDefinitionParser { - - private class Params( - val typeResolver: DynamicTypeResolver, - val typesBuilder: TypePresetBuilder - ) - - override fun parseBaseDefinitions( - types: Map, - typePreset: TypePreset, - dynamicTypeResolver: DynamicTypeResolver - ): ParseResult { - val builder = typePreset.newBuilder() - val parsingParams = Params(dynamicTypeResolver, builder) - - for (name in types.keys) { - val typeValue = types[name] - val type = parseType(parsingParams, name, typeValue) ?: continue - - builder.type(type) - } - val unknownTypes = builder.entries - .mapNotNull { (name, typeRef) -> if (!typeRef.isResolved()) name else null } - - return ParseResult(builder, unknownTypes) - } - - private fun parseType(parsingParams: Params, name: String, typeValue: Any?): Type<*>? { - return when (typeValue) { - is String -> { - return resolveDynamicType(parsingParams, name, typeValue) - ?: return parsingParams.typesBuilder.getOrCreate(typeValue).value - } - is Map<*, *> -> { - when { - typeValue["Map"] != null || typeValue["Vec"] != null || typeValue["Option"] != null -> { - resolveDynamicType(parsingParams, name, name) - ?: parsingParams.typesBuilder.getOrCreate(name).value - } - typeValue["NamedStruct"] != null -> { - val components = - (typeValue["NamedStruct"] as Map>>)["declarations"]!! - val children = parseTypeMapping(parsingParams, components) - Struct(name, children) - } - typeValue["UnnamedStruct"] != null -> { - val components = (typeValue["UnnamedStruct"] as Map>)["types"]!! - val children = components.map { resolveTypeAllWaysOrCreate(parsingParams, it) } - TupleStruct(name, children) - } - typeValue["Enum"] != null -> { - val components = (typeValue["Enum"] as Map>>)["variants"]!! - val variants = components.map { - val ty = resolveDynamicType(parsingParams, name, name)?.let(::TypeReference) - ?: parsingParams.typesBuilder.getOrCreate(name) - Enum.Variant( - it["name"]!! as String, - (it["discriminant"]!! as Double).toInt(), - ty - ) - } - Enum(name, variants) - } - typeValue["Int"] != null -> { - return null - } - else -> { - throw RuntimeException("Unexpected type $typeValue") - } - } - } - else -> null - } - } - -private fun resolveDynamicType( - parsingParams: Params, - name: String, - typeDef: String -): Type<*>? { - return parsingParams.typeResolver.createDynamicType(name, typeDef) { - resolveTypeAllWaysOrCreate(parsingParams, it) - } -} - -private fun resolveTypeAllWaysOrCreate( - parsingParams: Params, - typeDef: String, - name: String = typeDef -): TypeReference { - return parsingParams.typesBuilder[name] - ?: resolveDynamicType(parsingParams, name, typeDef)?.let(::TypeReference) - ?: parsingParams.typesBuilder.create(name) -} - -private fun parseTypeMapping( - parsingParams: Params, - typeMapping: List> -): LinkedHashMap { - val children = LinkedHashMap() - - for (singleMapping in typeMapping) { - for ((fieldName, fieldType) in singleMapping) { - children[fieldName] = resolveTypeAllWaysOrCreate(parsingParams, fieldType) - } - } - - return children -} -} diff --git a/settings.gradle b/settings.gradle index a44a2f09..b134f31e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,4 +2,3 @@ include ':fearless-utils' include ':app' rootProject.name = "fearless-utils-android" include ':schema' -include ':iroha2' \ No newline at end of file From b64d8a0f2eedfc97c2d52cef96b6a652f3ff49d4 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Mon, 21 Jun 2021 08:27:50 +0300 Subject: [PATCH 14/16] Fixed minor issues --- build.gradle | 2 +- fearless-utils/build.gradle | 10 +- .../fearless_utils/extensions/Hex.kt | 21 ---- .../fearless_utils/extensions/Kotlin.kt | 20 ---- .../dynamic/DynamicTypeExtension.kt | 11 -- .../dynamic/extentsions/Default.kt | 105 ------------------ .../dynamic/extentsions/GenericsExtension.kt | 19 ---- .../dynamic/extentsions/WrapperExtension.kt | 23 ---- .../definitions/registry/TypeRegistry.kt | 4 +- .../runtime/metadata/RuntimeMetadataSchema.kt | 11 +- .../fearless_utils/extensions/KotlinKtTest.kt | 5 - .../definitions/TypeDefinitionParserTest.kt | 3 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../soramitsu/schema/TypeDefinitionParser.kt | 8 +- .../java/jp/co/soramitsu/schema/TypePreset.kt | 4 + 15 files changed, 17 insertions(+), 231 deletions(-) delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt delete mode 100644 fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt diff --git a/build.gradle b/build.gradle index db856197..afce6ca7 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { minVersion = 21 targetVersion = 28 - kotlinVersion = '1.4.31' + kotlinVersion = '1.4.21' supportVersion = '1.0.0' constraintVersion = '1.1.3' diff --git a/fearless-utils/build.gradle b/fearless-utils/build.gradle index c6be9737..63dc6b5e 100644 --- a/fearless-utils/build.gradle +++ b/fearless-utils/build.gradle @@ -48,11 +48,11 @@ cargo { targets = ["arm", "arm64", "x86", "x86_64"] } -//tasks.whenTaskAdded { task -> -// if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) { -// task.dependsOn 'cargoBuild' -// } -//} +tasks.whenTaskAdded { task -> + if ((task.name == 'javaPreCompileDebug' || task.name == 'javaPreCompileRelease')) { + task.dependsOn 'cargoBuild' + } +} task deleteJar(type: Delete) { delete 'libs/jars/libfearless.jar' diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt deleted file mode 100644 index d2aabdaf..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Hex.kt +++ /dev/null @@ -1,21 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.extensions -// -//import org.bouncycastle.util.encoders.Hex -// -//private const val HEX_PREFIX = "0x" -// -//fun ByteArray.toHexString(withPrefix: Boolean = false): String { -// val encoded = Hex.toHexString(this) -// -// return if (withPrefix) return HEX_PREFIX + encoded else encoded -//} -// -//fun String.fromHex(): ByteArray = Hex.decode(removePrefix(HEX_PREFIX)) -// -//fun String.requirePrefix(prefix: String) = if (startsWith(prefix)) this else prefix + this -// -//fun String.requireHexPrefix() = jp.co.soramitsu.schema.extensions.requirePrefix(HEX_PREFIX) -// -//fun Byte.toHex(withPrefix: Boolean = false): String { -// return jp.co.soramitsu.schema.extensions.toHexString(withPrefix) -//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt deleted file mode 100644 index 4f44946b..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/extensions/Kotlin.kt +++ /dev/null @@ -1,20 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.extensions -// -//import java.math.BigInteger -//import java.nio.ByteOrder -// -//inline fun Iterable.tryFindNonNull(transform: (T) -> R?): R? { -// for (item in this) { -// val transformed = transform(item) -// -// if (transformed != null) return transformed -// } -// -// return null -//} -// -//fun ByteArray.toBigInteger(byteOrder: ByteOrder = ByteOrder.BIG_ENDIAN): BigInteger { -// val preprocessed = if (byteOrder == ByteOrder.LITTLE_ENDIAN) reversedArray() else this -// -// return BigInteger(preprocessed) -//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt deleted file mode 100644 index 03413af5..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/DynamicTypeExtension.kt +++ /dev/null @@ -1,11 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic -// -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -// -//typealias TypeProvider = (typeDef: String) -> TypeReference -// -//interface DynamicTypeExtension { -// -// fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? -//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt deleted file mode 100644 index 599ffe93..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/Default.kt +++ /dev/null @@ -1,105 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions -// -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -//import jp.co.soramitsu.fearless_utils.runtime.definitions.splitTuple -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.FixedArray -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Option -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Tuple -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.composite.Vec -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.ResultType -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.Compact -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.DynamicByteArray -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.FixedByteArray -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.primitives.u8 -// -//object VectorExtension : WrapperExtension() { -// override val wrapperName = "Vec" -// -// override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*> { -// return if (innerTypeRef.value == u8) { -// DynamicByteArray(name) -// } else { -// Vec(name, innerTypeRef) -// } -// } -//} -// -//object CompactExtension : WrapperExtension() { -// override val wrapperName = "Compact" -// -// override fun createWrapper(name: String, innerTypeRef: TypeReference) = Compact(name) -//} -// -//object OptionExtension : WrapperExtension() { -// override val wrapperName = "Option" -// -// override fun createWrapper(name: String, innerTypeRef: TypeReference) = Option(name, innerTypeRef) -//} -// -//object BoxExtension : WrapperExtension() { -// override val wrapperName: String -// get() = "Box" -// -// override fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? { -// return innerTypeRef.value -// } -//} -// -//object TupleExtension : DynamicTypeExtension { -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// if (!typeDef.startsWith("(")) return null -// -// val innerTypeRefDefinitions = typeDef.splitTuple() -// -// val innerTypeRefs = innerTypeRefDefinitions.map(typeProvider) -// -// return Tuple(name, innerTypeRefs) -// } -//} -// -//object FixedArrayExtension : DynamicTypeExtension { -// -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// if (!typeDef.startsWith("[")) return null -// -// val withoutBrackets = typeDef.removeSurrounding("[", "]").replace(" ", "") -// val (typeName, lengthRaw) = withoutBrackets.split(";") -// -// val length = lengthRaw.toInt() -// -// val typeRef = typeProvider(typeName) -// -// return if (typeRef.value == u8) { -// FixedByteArray(name, length) -// } else { -// FixedArray(name, length, typeRef) -// } -// } -//} -// -//object HashMapExtension : DynamicTypeExtension { -// -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// if (!typeDef.startsWith("HashMap")) return null -// val withoutBrackets = typeDef.removePrefix("HashMap").removeSurrounding("<", ">").replace(" ", "") -// if (withoutBrackets.split(",").size != 2) return null -// val tuple = "($withoutBrackets)" -// val typeRef = typeProvider(tuple) -// return Vec("Vec<$tuple>", typeRef) -// } -//} -// -//object ResultTypeExtension : DynamicTypeExtension { -// -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// if (!typeDef.startsWith("Result")) return null -// val withoutBrackets = -// typeDef.removePrefix("Result").removeSurrounding("<", ">").replace(" ", "") -// val types = withoutBrackets.split(",") -// if (types.size != 2) return null -// return ResultType(typeProvider(types[0]), typeProvider(types[1])) -// } -//} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt deleted file mode 100644 index 8af76add..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/GenericsExtension.kt +++ /dev/null @@ -1,19 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions -// -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -// -//private val GENERIC_REGEX = "^([^<]*)<(.+)>\$".toRegex() // PartName -// -//private const val RAW_TYPE_GROUP_INDEX = 1 // first one will be the entire typeDef, the second one will be raw type -// -//object GenericsExtension : DynamicTypeExtension { -// -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// val groups = GENERIC_REGEX.find(typeDef)?.groupValues ?: return null -// val rawType = groups.getOrNull(RAW_TYPE_GROUP_INDEX) ?: return null -// -// return typeProvider(rawType).value -// } -//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt deleted file mode 100644 index 5b8b9967..00000000 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/dynamic/extentsions/WrapperExtension.kt +++ /dev/null @@ -1,23 +0,0 @@ -//package jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.extentsions -// -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.DynamicTypeExtension -//import jp.co.soramitsu.fearless_utils.runtime.definitions.dynamic.TypeProvider -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.Type -//import jp.co.soramitsu.fearless_utils.runtime.definitions.types.TypeReference -// -//abstract class WrapperExtension : DynamicTypeExtension { -// -// abstract val wrapperName: String -// -// abstract fun createWrapper(name: String, innerTypeRef: TypeReference): Type<*>? -// -// override fun createType(name: String, typeDef: String, typeProvider: TypeProvider): Type<*>? { -// if (!typeDef.startsWith("$wrapperName<")) return null -// -// val innerTypeDef = typeDef.removeSurrounding("$wrapperName<", ">") -// -// val innerTypeRef = typeProvider(innerTypeDef) -// -// return createWrapper(name, innerTypeRef) -// } -//} \ No newline at end of file diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt index f59b7b9a..c39296c6 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt @@ -1,11 +1,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry -import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.preprocessors.RemoveGenericNoisePreprocessor +import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.skipAliases import jp.co.soramitsu.schema.definitions.types.resolvedOrNull +import jp.co.soramitsu.schema.definitions.types.skipAliases interface RequestPreprocessor { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt index 6e7492ac..36ec97fe 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt @@ -2,17 +2,8 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.hash.Hasher import jp.co.soramitsu.fearless_utils.hash.hashConcat -import jp.co.soramitsu.schema.scale.EncodableStruct -import jp.co.soramitsu.schema.scale.Schema -import jp.co.soramitsu.schema.scale.bool -import jp.co.soramitsu.schema.scale.byteArray +import jp.co.soramitsu.schema.scale.* import jp.co.soramitsu.schema.scale.dataType.scalable -import jp.co.soramitsu.schema.scale.enum -import jp.co.soramitsu.schema.scale.schema -import jp.co.soramitsu.schema.scale.string -import jp.co.soramitsu.schema.scale.uint32 -import jp.co.soramitsu.schema.scale.uint8 -import jp.co.soramitsu.schema.scale.vector import jp.co.soramitsu.schema.scale.dataType.string as stringType object RuntimeMetadataSchema : Schema() { diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt index 0ffe0703..22e4615d 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/extensions/KotlinKtTest.kt @@ -1,7 +1,5 @@ package jp.co.soramitsu.fearless_utils.extensions -//import jp.co.soramitsu.schema.extensions.fromHex -//import jp.co.soramitsu.schema.extensions.toBigInteger import jp.co.soramitsu.schema.extensions.fromHex import jp.co.soramitsu.schema.extensions.toBigInteger import org.junit.Assert.assertEquals @@ -15,9 +13,6 @@ class KotlinKtTest { fun `should create little endian big int`() { val bytes = "0xb63f9b9eff0000000000000000000000".fromHex() - val toBigInteger = bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN) - print(toBigInteger) - assertEquals(BigInteger("1097877634998"), bytes.toBigInteger(ByteOrder.LITTLE_ENDIAN)) } } diff --git a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt index 6f9f18db..d6ce7f3c 100644 --- a/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt +++ b/fearless-utils/src/test/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParserTest.kt @@ -4,7 +4,8 @@ import com.google.gson.Gson import com.google.gson.stream.JsonReader import jp.co.soramitsu.fearless_utils.common.assertInstance import jp.co.soramitsu.fearless_utils.common.getResourceReader -import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.* +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry +import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.substratePreParsePreset import jp.co.soramitsu.schema.DynamicTypeResolver import jp.co.soramitsu.schema.TypePreset import jp.co.soramitsu.schema.definitions.types.composite.* diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 85185ea1..c36d4211 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt index 9f368b04..d3447d5b 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt @@ -11,10 +11,4 @@ interface TypeDefinitionParser { class ParseResult( val typePreset: TypePreset, val unknownTypes: List - - -) { - override fun toString(): String { - return "ParseResult(typePreset=$typePreset, unknownTypes=$unknownTypes)" - } -} +) diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt index 8aeba494..95140e15 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypePreset.kt @@ -4,9 +4,11 @@ import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference typealias TypePreset = Map + typealias TypePresetBuilder = MutableMap fun TypePreset.newBuilder(): TypePresetBuilder = toMutableMap() + fun TypePresetBuilder.type(type: Type<*>) { val currentRef = getOrCreate(type.name) @@ -14,10 +16,12 @@ fun TypePresetBuilder.type(type: Type<*>) { } fun TypePresetBuilder.getOrCreate(definition: String) = getOrPut(definition) { TypeReference(null) } + fun TypePresetBuilder.create(definition: String): TypeReference = TypeReference(null).also { put(definition, it) } fun createTypePresetBuilder(): TypePresetBuilder = mutableMapOf() + fun typePreset(builder: TypePresetBuilder.() -> Unit): TypePreset { return createTypePresetBuilder().apply(builder) } From 0d451cb7c9098eae4ff478f2efa60757277c48f6 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Mon, 21 Jun 2021 08:34:59 +0300 Subject: [PATCH 15/16] Minor issues --- .../definitions/registry/TypeRegistry.kt | 2 +- .../definitions/types/TypeReferenceExt.kt | 3 +-- .../java/jp/co/soramitsu/schema/scale/Dsl.kt | 19 +------------------ 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt index c39296c6..c3b23cca 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypeRegistry.kt @@ -13,7 +13,7 @@ interface RequestPreprocessor { } class TypeRegistry( - var types: Map = mapOf(), + val types: Map = mapOf(), val dynamicTypeResolver: DynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() ) { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt index aab1b900..b57f23e5 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeReferenceExt.kt @@ -4,7 +4,6 @@ import jp.co.soramitsu.schema.definitions.types.composite.Alias class CyclicAliasingException : Exception() -//todo possibly no need in core /** * @throws CyclicAliasingException */ @@ -34,4 +33,4 @@ fun TypeReference.skipAliasesOrNull(): TypeReference? { return runCatching { skipAliases() }.getOrNull() } -fun TypeReference.resolvedOrNull(): TypeReference? = if (isResolved()) this else null \ No newline at end of file +fun TypeReference.resolvedOrNull(): TypeReference? = if (isResolved()) this else null diff --git a/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt index fc2decf4..9d841b12 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt @@ -2,24 +2,7 @@ package jp.co.soramitsu.schema.scale -import jp.co.soramitsu.schema.scale.dataType.DataType -import jp.co.soramitsu.schema.scale.dataType.EnumType -import jp.co.soramitsu.schema.scale.dataType.boolean -import jp.co.soramitsu.schema.scale.dataType.byte -import jp.co.soramitsu.schema.scale.dataType.byteArray -import jp.co.soramitsu.schema.scale.dataType.byteArraySized -import jp.co.soramitsu.schema.scale.dataType.compactInt -import jp.co.soramitsu.schema.scale.dataType.list -import jp.co.soramitsu.schema.scale.dataType.long -import jp.co.soramitsu.schema.scale.dataType.scalable -import jp.co.soramitsu.schema.scale.dataType.string -import jp.co.soramitsu.schema.scale.dataType.tuple -import jp.co.soramitsu.schema.scale.dataType.uint128 -import jp.co.soramitsu.schema.scale.dataType.uint16 -import jp.co.soramitsu.schema.scale.dataType.uint32 -import jp.co.soramitsu.schema.scale.dataType.uint64 -import jp.co.soramitsu.schema.scale.dataType.uint8 -import jp.co.soramitsu.schema.scale.dataType.union +import jp.co.soramitsu.schema.scale.dataType.* import java.math.BigInteger import kotlin.reflect.KClass From 983f56a623270c3410d047c2dae1d93d2da08811 Mon Sep 17 00:00:00 2001 From: rkharisov Date: Mon, 21 Jun 2021 09:05:09 +0300 Subject: [PATCH 16/16] Fixed imports --- .../fearless_utils/runtime/RuntimeSnapshot.kt | 1 - .../fearless_utils/runtime/StorageUtils.kt | 4 +-- .../definitions/TypeDefinitionParser.kt | 16 +++++++-- .../definitions/registry/TypePreset.kt | 36 +++++++++++++++++-- .../definitions/types/generics/CallBytes.kt | 4 +-- .../definitions/types/generics/Data.kt | 3 +- .../definitions/types/generics/EventRecord.kt | 2 +- .../definitions/types/generics/Extrinsic.kt | 2 +- .../types/generics/ExtrinsicPayloadExtras.kt | 2 +- .../definitions/types/generics/GenericCall.kt | 5 +-- .../generics/GenericConsensusEngineId.kt | 2 +- .../types/generics/GenericEvent.kt | 1 - .../types/generics/GenericMultiAddress.kt | 2 +- .../definitions/types/generics/GenericSeal.kt | 2 +- .../definitions/types/generics/OpaqueCall.kt | 3 +- .../types/generics/SessionKeysSubstrate.kt | 2 +- .../runtime/extrinsic/ExtrinsicBuilder.kt | 9 ++++- .../runtime/metadata/RuntimeMetadataSchema.kt | 11 +++++- .../soramitsu/schema/DynamicTypeResolver.kt | 11 ++++-- .../soramitsu/schema/TypeDefinitionParser.kt | 2 +- .../dynamic/extentsions/Default.kt | 13 ++++--- .../dynamic/extentsions/GenericsExtension.kt | 3 +- .../dynamic/extentsions/WrapperExtension.kt | 4 +-- .../schema/definitions/types/TypeExt.kt | 2 +- .../definitions/types/composite/Option.kt | 2 +- .../java/jp/co/soramitsu/schema/scale/Dsl.kt | 19 +++++++++- 26 files changed, 118 insertions(+), 45 deletions(-) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt index 2eaa5de1..7b943bbc 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/RuntimeSnapshot.kt @@ -3,7 +3,6 @@ package jp.co.soramitsu.fearless_utils.runtime import jp.co.soramitsu.fearless_utils.runtime.definitions.registry.TypeRegistry import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata - class RuntimeSnapshot { lateinit var typeRegistry: TypeRegistry lateinit var metadata: RuntimeMetadata diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt index 8f7f0066..67f521ca 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/StorageUtils.kt @@ -1,9 +1,9 @@ package jp.co.soramitsu.fearless_utils.runtime -import jp.co.soramitsu.schema.extensions.toHexString import jp.co.soramitsu.fearless_utils.hash.Hasher import jp.co.soramitsu.fearless_utils.hash.Hasher.xxHash128 import jp.co.soramitsu.fearless_utils.hash.hashConcat +import jp.co.soramitsu.schema.extensions.toHexString typealias HashFunction = (ByteArray) -> ByteArray @@ -33,4 +33,4 @@ object StorageUtils { return keyBytes.toHexString(withPrefix = true) } -} \ No newline at end of file +} diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt index 481e294a..94b2b571 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/TypeDefinitionParser.kt @@ -1,10 +1,22 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions import com.google.gson.annotations.SerializedName -import jp.co.soramitsu.schema.* +import jp.co.soramitsu.schema.DynamicTypeResolver +import jp.co.soramitsu.schema.ParseResult +import jp.co.soramitsu.schema.TypeDefinitionParser +import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.TypePresetBuilder +import jp.co.soramitsu.schema.create import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.composite.* +import jp.co.soramitsu.schema.definitions.types.composite.Alias +import jp.co.soramitsu.schema.definitions.types.composite.CollectionEnum +import jp.co.soramitsu.schema.definitions.types.composite.DictEnum +import jp.co.soramitsu.schema.definitions.types.composite.SetType +import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.getOrCreate +import jp.co.soramitsu.schema.newBuilder +import jp.co.soramitsu.schema.type import java.math.BigInteger class TypeDefinitionsTree( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt index 55f054e3..be2baa2b 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/registry/TypePreset.kt @@ -1,11 +1,41 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.registry import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* -import jp.co.soramitsu.schema.* +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.BitVec +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Bytes +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.CallBytes +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Data +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EraType +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.EventRecord +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericAccountId +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensus +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericConsensusEngineId +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericEvent +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericMultiAddress +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSeal +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericSealV0 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H160 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H256 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.H512 +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Null +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.OpaqueCall +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SessionKeysSubstrate +import jp.co.soramitsu.schema.TypePreset +import jp.co.soramitsu.schema.TypePresetBuilder import jp.co.soramitsu.schema.definitions.types.composite.Alias -import jp.co.soramitsu.schema.definitions.types.primitives.* +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType +import jp.co.soramitsu.schema.definitions.types.primitives.u128 +import jp.co.soramitsu.schema.definitions.types.primitives.u16 +import jp.co.soramitsu.schema.definitions.types.primitives.u256 +import jp.co.soramitsu.schema.definitions.types.primitives.u32 +import jp.co.soramitsu.schema.definitions.types.primitives.u64 +import jp.co.soramitsu.schema.definitions.types.primitives.u8 import jp.co.soramitsu.schema.definitions.types.stub.FakeType +import jp.co.soramitsu.schema.getOrCreate +import jp.co.soramitsu.schema.type +import jp.co.soramitsu.schema.typePreset fun TypePresetBuilder.fakeType(name: String) { type(FakeType(name)) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt index f31ad742..25775454 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/CallBytes.kt @@ -2,11 +2,9 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter - import jp.co.soramitsu.schema.definitions.types.primitives.Primitive -import jp.co.soramitsu.schema.scale.dataType.byteArraySized import jp.co.soramitsu.schema.extensions.fromHex - +import jp.co.soramitsu.schema.scale.dataType.byteArraySized object CallBytes : Primitive("CallBytes") { diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt index 2820622f..16d9309c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Data.kt @@ -3,11 +3,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate - import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.scale.dataType.byte import jp.co.soramitsu.schema.scale.utils.directWrite diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt index 77b1717a..039b3928 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/EventRecord.kt @@ -1,10 +1,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.getOrCreate @Suppress("FunctionName") fun EventRecord(typePresetBuilder: TypePresetBuilder) = Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt index de531733..c9b17724 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/Extrinsic.kt @@ -43,7 +43,7 @@ class Extrinsic(private val runtime: RuntimeSnapshot) : Type Signature( accountIdentifier = addressType().decode(scaleCodecReader), signature = signatureType().decode(scaleCodecReader), - signedExtras = SignedExtras(runtime).decode(scaleCodecReader, ) + signedExtras = SignedExtras(runtime).decode(scaleCodecReader) ) } else { null diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt index 663c3506..ed5ae1f0 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/ExtrinsicPayloadExtras.kt @@ -61,7 +61,7 @@ open class ExtrinsicPayloadExtras( ) : Type(name) { override fun decode( - scaleCodecReader: ScaleCodecReader, + scaleCodecReader: ScaleCodecReader ): ExtrinsicPayloadExtrasInstance { val enabledSignedExtras = runtime.metadata.extrinsic.signedExtensions diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt index 5f6065d9..05b49e75 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericCall.kt @@ -3,8 +3,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.metadata.* import jp.co.soramitsu.fearless_utils.runtime.metadata.Function +import jp.co.soramitsu.fearless_utils.runtime.metadata.FunctionArgument +import jp.co.soramitsu.fearless_utils.runtime.metadata.callOrNull +import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException import jp.co.soramitsu.schema.scale.dataType.tuple @@ -63,7 +65,6 @@ class GenericCall(val runtime: RuntimeSnapshot) : Type("Ge ) } - private fun callNotFound(moduleIndex: Int, callIndex: Int): Nothing { throw EncodeDecodeException("No call found for index ($moduleIndex, $callIndex)") } diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt index 59039cbd..4ccda681 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericConsensusEngineId.kt @@ -1,11 +1,11 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.Struct import jp.co.soramitsu.schema.definitions.types.composite.Vec import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray +import jp.co.soramitsu.schema.getOrCreate val GenericConsensusEngineId = FixedByteArray("GenericConsensusEngineId", 4) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt index 946548fb..a2838ff4 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericEvent.kt @@ -4,7 +4,6 @@ import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot import jp.co.soramitsu.fearless_utils.runtime.metadata.Event -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.fearless_utils.runtime.metadata.eventOrNull import jp.co.soramitsu.fearless_utils.runtime.metadata.moduleOrNull import jp.co.soramitsu.schema.definitions.types.Type diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt index 316be498..6889a0af 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericMultiAddress.kt @@ -1,10 +1,10 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.DictEnum import jp.co.soramitsu.schema.definitions.types.primitives.Compact +import jp.co.soramitsu.schema.getOrCreate const val MULTI_ADDRESS_ID = "Id" diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt index 07cc8a94..12d55163 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/GenericSeal.kt @@ -1,8 +1,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.getOrCreate @Suppress("FunctionName") fun GenericSealV0(typePresetBuilder: TypePresetBuilder) = Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt index e5fef944..09e58e83 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/OpaqueCall.kt @@ -3,7 +3,6 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.metadata.RuntimeMetadata import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.fromByteArray import jp.co.soramitsu.schema.definitions.types.toByteArray @@ -13,7 +12,7 @@ class OpaqueCall(val runtime: RuntimeSnapshot) : Type("Opa override val isFullyResolved = true override fun decode( - scaleCodecReader: ScaleCodecReader, + scaleCodecReader: ScaleCodecReader ): GenericCall.Instance { val bytes = Bytes.decode(scaleCodecReader) diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt index 3fa3230d..7399cbe8 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/definitions/types/generics/SessionKeysSubstrate.kt @@ -1,8 +1,8 @@ package jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics import jp.co.soramitsu.schema.TypePresetBuilder -import jp.co.soramitsu.schema.getOrCreate import jp.co.soramitsu.schema.definitions.types.composite.Struct +import jp.co.soramitsu.schema.getOrCreate @Suppress("FunctionName") fun SessionKeysSubstrate(typePresetBuilder: TypePresetBuilder) = Struct( diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt index 48a954de..c7ba6c7c 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/extrinsic/ExtrinsicBuilder.kt @@ -5,7 +5,14 @@ import jp.co.soramitsu.fearless_utils.encrypt.Signer import jp.co.soramitsu.fearless_utils.encrypt.model.Keypair import jp.co.soramitsu.fearless_utils.hash.Hasher.blake2b256 import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot -import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.* +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.AdditionalExtras +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Era +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.Extrinsic +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.ExtrinsicPayloadExtrasInstance +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.GenericCall +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.MultiSignature +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.SignedExtras +import jp.co.soramitsu.fearless_utils.runtime.definitions.types.generics.new import jp.co.soramitsu.fearless_utils.runtime.metadata.call import jp.co.soramitsu.fearless_utils.runtime.metadata.module import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.chain.RuntimeVersion diff --git a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt index 36ec97fe..6e7492ac 100644 --- a/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt +++ b/fearless-utils/src/main/java/jp/co/soramitsu/fearless_utils/runtime/metadata/RuntimeMetadataSchema.kt @@ -2,8 +2,17 @@ package jp.co.soramitsu.fearless_utils.runtime.metadata import jp.co.soramitsu.fearless_utils.hash.Hasher import jp.co.soramitsu.fearless_utils.hash.hashConcat -import jp.co.soramitsu.schema.scale.* +import jp.co.soramitsu.schema.scale.EncodableStruct +import jp.co.soramitsu.schema.scale.Schema +import jp.co.soramitsu.schema.scale.bool +import jp.co.soramitsu.schema.scale.byteArray import jp.co.soramitsu.schema.scale.dataType.scalable +import jp.co.soramitsu.schema.scale.enum +import jp.co.soramitsu.schema.scale.schema +import jp.co.soramitsu.schema.scale.string +import jp.co.soramitsu.schema.scale.uint32 +import jp.co.soramitsu.schema.scale.uint8 +import jp.co.soramitsu.schema.scale.vector import jp.co.soramitsu.schema.scale.dataType.string as stringType object RuntimeMetadataSchema : Schema() { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt b/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt index 26dcf087..760d4661 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/DynamicTypeResolver.kt @@ -2,7 +2,14 @@ package jp.co.soramitsu.schema import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider -import jp.co.soramitsu.schema.definitions.dynamic.extentsions.* +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.BoxExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.CompactExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.FixedArrayExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.HashMapExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.OptionExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.ResultTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.TupleExtension +import jp.co.soramitsu.schema.definitions.dynamic.extentsions.VectorExtension import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.extensions.tryFindNonNull @@ -41,4 +48,4 @@ class DynamicTypeResolver( ) } } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt index d3447d5b..5a4248b2 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/TypeDefinitionParser.kt @@ -5,7 +5,7 @@ interface TypeDefinitionParser { types: Map, typePreset: TypePreset, dynamicTypeResolver: DynamicTypeResolver = DynamicTypeResolver.defaultCompoundResolver() - ) : ParseResult + ): ParseResult } class ParseResult( diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt index bde2a160..533e583a 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/Default.kt @@ -1,20 +1,19 @@ package jp.co.soramitsu.schema.definitions.dynamic.extentsions - +import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension +import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider import jp.co.soramitsu.schema.definitions.splitTuple +import jp.co.soramitsu.schema.definitions.types.Type +import jp.co.soramitsu.schema.definitions.types.TypeReference import jp.co.soramitsu.schema.definitions.types.composite.FixedArray import jp.co.soramitsu.schema.definitions.types.composite.Option import jp.co.soramitsu.schema.definitions.types.composite.Tuple +import jp.co.soramitsu.schema.definitions.types.composite.Vec +import jp.co.soramitsu.schema.definitions.types.generics.ResultType import jp.co.soramitsu.schema.definitions.types.primitives.Compact import jp.co.soramitsu.schema.definitions.types.primitives.DynamicByteArray import jp.co.soramitsu.schema.definitions.types.primitives.FixedByteArray import jp.co.soramitsu.schema.definitions.types.primitives.u8 -import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension -import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider -import jp.co.soramitsu.schema.definitions.types.Type -import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.composite.Vec -import jp.co.soramitsu.schema.definitions.types.generics.ResultType object VectorExtension : WrapperExtension() { override val wrapperName = "Vec" diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt index 21eca406..11b3938a 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/GenericsExtension.kt @@ -4,7 +4,6 @@ import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider import jp.co.soramitsu.schema.definitions.types.Type - private val GENERIC_REGEX = "^([^<]*)<(.+)>\$".toRegex() // PartName private const val RAW_TYPE_GROUP_INDEX = 1 // first one will be the entire typeDef, the second one will be raw type @@ -17,4 +16,4 @@ object GenericsExtension : DynamicTypeExtension { return typeProvider(rawType).value } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt index 74198ab7..5e9758c9 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/dynamic/extentsions/WrapperExtension.kt @@ -1,12 +1,10 @@ package jp.co.soramitsu.schema.definitions.dynamic.extentsions - import jp.co.soramitsu.schema.definitions.dynamic.DynamicTypeExtension import jp.co.soramitsu.schema.definitions.dynamic.TypeProvider import jp.co.soramitsu.schema.definitions.types.Type import jp.co.soramitsu.schema.definitions.types.TypeReference - abstract class WrapperExtension : DynamicTypeExtension { abstract val wrapperName: String @@ -22,4 +20,4 @@ abstract class WrapperExtension : DynamicTypeExtension { return createWrapper(name, innerTypeRef) } -} \ No newline at end of file +} diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt index f8ee4879..6f49aa48 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/TypeExt.kt @@ -33,7 +33,7 @@ fun Type.fromByteArray(byteArray: ByteArray): I { * @throws EncodeDecodeException */ fun Type.fromHex(hex: String): I { - return ensureUnifiedException { fromByteArray( hex.fromHex()) } + return ensureUnifiedException { fromByteArray(hex.fromHex()) } } fun Type.fromByteArrayOrNull(byteArray: ByteArray): I? { diff --git a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt index 088daaf7..316648d6 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/definitions/types/composite/Option.kt @@ -3,8 +3,8 @@ package jp.co.soramitsu.schema.definitions.types.composite import io.emeraldpay.polkaj.scale.ScaleCodecReader import io.emeraldpay.polkaj.scale.ScaleCodecWriter import jp.co.soramitsu.schema.definitions.types.TypeReference -import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType import jp.co.soramitsu.schema.definitions.types.errors.EncodeDecodeException +import jp.co.soramitsu.schema.definitions.types.primitives.BooleanType class Option( name: String, diff --git a/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt index 9d841b12..fc2decf4 100644 --- a/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt +++ b/schema/src/main/java/jp/co/soramitsu/schema/scale/Dsl.kt @@ -2,7 +2,24 @@ package jp.co.soramitsu.schema.scale -import jp.co.soramitsu.schema.scale.dataType.* +import jp.co.soramitsu.schema.scale.dataType.DataType +import jp.co.soramitsu.schema.scale.dataType.EnumType +import jp.co.soramitsu.schema.scale.dataType.boolean +import jp.co.soramitsu.schema.scale.dataType.byte +import jp.co.soramitsu.schema.scale.dataType.byteArray +import jp.co.soramitsu.schema.scale.dataType.byteArraySized +import jp.co.soramitsu.schema.scale.dataType.compactInt +import jp.co.soramitsu.schema.scale.dataType.list +import jp.co.soramitsu.schema.scale.dataType.long +import jp.co.soramitsu.schema.scale.dataType.scalable +import jp.co.soramitsu.schema.scale.dataType.string +import jp.co.soramitsu.schema.scale.dataType.tuple +import jp.co.soramitsu.schema.scale.dataType.uint128 +import jp.co.soramitsu.schema.scale.dataType.uint16 +import jp.co.soramitsu.schema.scale.dataType.uint32 +import jp.co.soramitsu.schema.scale.dataType.uint64 +import jp.co.soramitsu.schema.scale.dataType.uint8 +import jp.co.soramitsu.schema.scale.dataType.union import java.math.BigInteger import kotlin.reflect.KClass