Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfixing numeric serialize #392

Merged
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions modules/block/src/main/kotlin/jp/co/soramitsu/iroha2/Serde.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import jp.co.soramitsu.iroha2.generated.DomainId
import jp.co.soramitsu.iroha2.generated.EvaluatesTo
import jp.co.soramitsu.iroha2.generated.ExecutorMode
import jp.co.soramitsu.iroha2.generated.Expression
import jp.co.soramitsu.iroha2.generated.Fixed
import jp.co.soramitsu.iroha2.generated.GrantExpr
import jp.co.soramitsu.iroha2.generated.Hash
import jp.co.soramitsu.iroha2.generated.HashValue
Expand Down Expand Up @@ -75,7 +76,6 @@ import jp.co.soramitsu.iroha2.generated.TriggerId
import jp.co.soramitsu.iroha2.generated.TriggerOfTriggeringFilterBox
import jp.co.soramitsu.iroha2.generated.Value
import java.io.ByteArrayOutputStream
import java.math.BigInteger
import kotlin.reflect.KClass
import kotlin.reflect.full.createInstance
import kotlin.reflect.full.memberProperties
Expand Down Expand Up @@ -777,10 +777,10 @@ private fun mintBurnSerialize(
}

private fun NumericValue.formatAsString() = when (this) {
is NumericValue.U32 -> this.u32
is NumericValue.U64 -> this.u64
is NumericValue.U128 -> this.u128
is NumericValue.Fixed -> this.fixed.fixedPointOfI64
is NumericValue.U32 -> "${this.u32}_u32"
is NumericValue.U64 -> "${this.u64}_u64"
is NumericValue.U128 -> "${this.u128}_u128"
is NumericValue.Fixed -> "${this.fixed.fixedPointOfI64}_fx"
}.toString()

private fun NumericValue.format() = when (this) {
Expand Down Expand Up @@ -1135,11 +1135,12 @@ private fun deserializeMetadata(p: JsonParser, mapper: ObjectMapper): Metadata {
}

private fun String.toNumericValue(): NumericValue {
val number = BigInteger(this)
return when {
number >= BigInteger.ZERO && number <= "4294967295".toBigInteger() -> NumericValue.U32(number.toLong())
number <= "18446744073709551615".toBigInteger() -> NumericValue.U64(number)
number <= "340282366920938463463374607431768211455".toBigInteger() -> NumericValue.U128(number)
val (number, type) = this.split('_')
return when (type) {
NumericValue.U32::class.simpleName?.lowercase() -> NumericValue.U32(number.toLong())
NumericValue.U64::class.simpleName?.lowercase() -> NumericValue.U64(number.toBigInteger())
NumericValue.U128::class.simpleName?.lowercase() -> NumericValue.U128(number.toBigInteger())
"fx" -> NumericValue.Fixed(Fixed(number.toBigDecimal()))
else -> throw IllegalArgumentException("Number out of range")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,6 @@ class DeserializerTest {
.replace(regex, "publicKey")
}
}

// {"transactions":[[{"Register":{"NewDomain":{"id":"wonderland","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"dnalrednow","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"test","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"admin","logo":null,"metadata":{}}}},{"Register":{"NewAccount":{"id":"alice@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin@dnalrednow","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin2@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"bob@admin","signatories":[publicKey],"metadata":{"authentication":{"String":"9321c6560bdbe28df7808e4d03b0ef625c4e8f8e9935907763477ac601421066"}}}}},{"Register":{"NewAssetDefinition":{"id":"test_asset#admin","value_type":"Store","mintable":"Once","logo":null,"metadata":{}}}},{"Register":{"NewAssetDefinition":{"id":"wonderland_asset#admin","value_type":"Store","mintable":"Once","logo":null,"metadata":{}}}},{"Register":{"NewAssetDefinition":{"id":"123#test","value_type":"Store","mintable":"Infinitely","logo":null,"metadata":{}}}},{"Register":{"Asset":{"id":"wonderland_asset#admin#bob@admin","value":{"Store":{}}}}},{"Register":{"Asset":{"id":"test_asset#admin#bob@admin","value":{"Store":{}}}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"id"},"value":{"String":"123"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"wt"},"value":"123"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"fg"},"value":{"String":"test"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ij"},"value":{"String":"test"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"gh"},"value":"123"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ef"},"value":"1234"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"cd"},"value":"123"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ab"},"value":{"Bool":false}}},{"Grant":{"object":{"PermissionToken":{"definition_id":"CanSetKeyValueInUserAssets","payload":{"asset_id":"123#test#alice@wonderland"}}},"destination_id":{"AccountId":"bob@admin"}}}]],"executor":"./executor.wasm"}
// {"transactions":[[{"Register":{"NewDomain":{"id":"wonderland","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"dnalrednow","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"test","logo":null,"metadata":{}}}},{"Register":{"NewDomain":{"id":"admin","logo":null,"metadata":{}}}},{"Register":{"NewAccount":{"id":"alice@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin@dnalrednow","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"admin2@wonderland","signatories":[publicKey],"metadata":{}}}},{"Register":{"NewAccount":{"id":"bob@admin","signatories":[publicKey],"metadata":{"authentication":{"String":"9321c6560bdbe28df7808e4d03b0ef625c4e8f8e9935907763477ac601421066"}}}}},{"Register":{"NewAssetDefinition":{"id":"test_asset#admin","value_type":"Store","mintable":"Once","logo":null,"metadata":{}}}},{"Register":{"NewAssetDefinition":{"id":"wonderland_asset#admin","value_type":"Store","mintable":"Once","logo":null,"metadata":{}}}},{"Register":{"NewAssetDefinition":{"id":"123#test","value_type":"Store","mintable":"Infinitely","logo":null,"metadata":{}}}},{"Register":{"Asset":{"id":"wonderland_asset#admin#bob@admin","value":{"Store":{}}}}},{"Register":{"Asset":{"id":"test_asset#admin#bob@admin","value":{"Store":{}}}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"id"},"value":{"String":"123"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"wt"},"value":"123_u32"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"fg"},"value":{"String":"test"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ij"},"value":{"String":"test"}}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"gh"},"value":"123_u32"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ef"},"value":"1234_u32"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"cd"},"value":"123_u32"}},{"SetKeyValue":{"AssetId":"123#test#alice@wonderland","key":{"Name":"ab"},"value":{"Bool":false}}},{"Grant":{"object":{"PermissionToken":{"definition_id":"CanSetKeyValueInUserAssets","payload":{"asset_id":"123#test#alice@wonderland"}}},"destination_id":{"AccountId":"bob@admin"}}}]],"executor":"./executor.wasm"}
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,14 @@ fun String.asValue() = Value.String(this)

fun Int.asValue() = Value.Numeric(NumericValue.U32(this.toLong()))

fun Long.asValue() = Value.Numeric(NumericValue.U128(BigInteger.valueOf(this)))

fun BigInteger.asValue() = Value.Numeric(NumericValue.U128(this))
fun Double.asValue() = Value.Numeric(NumericValue.Fixed(Fixed(this.toBigDecimal())))

fun BigDecimal.asValue() = Value.Numeric(NumericValue.Fixed(Fixed(this)))

fun Long.asValue() = Value.Numeric(NumericValue.U64(BigInteger.valueOf(this)))

fun BigInteger.asValue() = Value.Numeric(NumericValue.U128(this))

fun Boolean.asValue() = Value.Bool(this)

fun AccountId.asValue() = Value.Id(IdBox.AccountId(this))
Expand Down Expand Up @@ -298,6 +300,7 @@ inline fun <reified T> T.asValue() = when (this) {
is String -> this.asValue()
is Long -> this.asValue()
is Int -> this.asValue()
is Double -> this.asValue()
is BigInteger -> this.asValue()
is BigDecimal -> this.asValue()
is Boolean -> this.asValue()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,8 @@ class InstructionsTest : IrohaTest<Iroha2Client>() {
@Test
@WithIroha([FatGenesis::class])
fun `fat genesis apply`(): Unit = runBlocking {
// val qwe = JSON_SERDE.writeValueAsString(FatGenesis::class.createInstance().block)
// print(qwe)
Mingela marked this conversation as resolved.
Show resolved Hide resolved
QueryBuilder.findAllAccounts()
.account(ALICE_ACCOUNT_ID)
.buildSigned(ALICE_KEYPAIR)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ import jp.co.soramitsu.iroha2.toIrohaPublicKey
import jp.co.soramitsu.iroha2.transaction.Instructions
import org.apache.commons.lang3.RandomStringUtils.randomAlphabetic
import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils
import java.math.BigDecimal
import java.math.BigInteger
import kotlin.random.Random.Default.nextDouble

/**
* Create a default genesis where there is just one domain with only Alice and Bob in it
Expand Down Expand Up @@ -369,7 +372,15 @@ open class FatGenesis : Genesis(
Instructions.grantRole(ROLE_ID, ALICE_ACCOUNT_ID),
Instructions.mintAsset(AssetId(DEFAULT_ASSET_DEFINITION_ID, BOB_ACCOUNT_ID), 100),
Instructions.burnAsset(AssetId(DEFAULT_ASSET_DEFINITION_ID, BOB_ACCOUNT_ID), 100),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), 100.asValue()),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), Int.MAX_VALUE.asValue()),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), (Int.MAX_VALUE * 10L).asValue()),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), nextDouble().asValue()),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), BigDecimal(nextDouble()).asValue()),
Instructions.setKeyValue(
ASSET_ID,
randomAlphabetic(10).asName(),
(BigInteger.valueOf(Long.MAX_VALUE) * BigInteger.valueOf(2)).asValue(),
),
Instructions.setKeyValue(ASSET_ID, randomAlphabetic(10).asName(), randomAlphabetic(10).asValue()),
),
) {
Expand Down
Binary file modified modules/test-tools/src/main/resources/executor.wasm
100755 → 100644
Binary file not shown.
10 changes: 5 additions & 5 deletions modules/test-tools/src/main/resources/genesis2.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
"Name" : "id"
},
"value" : {
"String" : "123"
"String" : "123_u32"
}
}
}, {
Expand All @@ -139,7 +139,7 @@
"key" : {
"Name" : "wt"
},
"value" : "123"
"value" : "123_u32"
}
}, {
"SetKeyValue" : {
Expand Down Expand Up @@ -167,23 +167,23 @@
"key" : {
"Name" : "gh"
},
"value" : "123"
"value" : "123_u32"
}
}, {
"SetKeyValue" : {
"AssetId" : "123#test#alice@wonderland",
"key" : {
"Name" : "ef"
},
"value" : "1234"
"value" : "1234_u32"
}
}, {
"SetKeyValue" : {
"AssetId" : "123#test#alice@wonderland",
"key" : {
"Name" : "cd"
},
"value" : "123"
"value" : "123_u32"
}
}, {
"SetKeyValue" : {
Expand Down
2 changes: 1 addition & 1 deletion modules/test-tools/src/main/resources/genesis3.json
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
"key" : {
"Name" : "key2"
},
"value" : "123"
"value" : "123_u32"
}
},{
"Mint" : {
Expand Down