Skip to content

Commit 4482cc8

Browse files
authored
TripleRefCount update (#232)
* TripleRefCount update * Remove kotlin 1.4.31 language feature usages to pass old formatter * Rename ref count updater * Increment version codes
1 parent 6c76c80 commit 4482cc8

File tree

8 files changed

+38
-146
lines changed

8 files changed

+38
-146
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
buildscript {
22
ext {
33
// App version
4-
versionName = '1.2.1'
5-
versionCode = 10
4+
versionName = '1.2.2'
5+
versionCode = 11
66

77
// SDK and tools
88
compileSdkVersion = 29

feature-wallet-impl/src/main/java/jp/co/soramitsu/feature_wallet_impl/data/network/blockchain/WssSubstrateSource.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.Stakin
4141
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountData
4242
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountInfoFactory
4343
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountInfoSchema
44-
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountInfoSchemaV28
44+
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountInfoSchemaWithTripleRefCount
4545
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.extrinsic.EncodeExtrinsicParams
4646
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.extrinsic.TransferExtrinsic
4747
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.extrinsic.TransferExtrinsicFactory
@@ -235,12 +235,12 @@ class WssSubstrateSource(
235235
return hex?.let { accountInfoFactory.decode(it) } ?: emptyAccountInfo()
236236
}
237237

238-
private fun emptyAccountInfo(): EncodableStruct<AccountInfoSchema> = AccountInfoSchemaV28 { info ->
239-
info[AccountInfoSchemaV28.nonce] = 0.toUInt()
240-
info[AccountInfoSchemaV28.providers] = 0.toUInt()
241-
info[AccountInfoSchemaV28.consumers] = 0.toUInt()
238+
private fun emptyAccountInfo(): EncodableStruct<AccountInfoSchema> = AccountInfoSchemaWithTripleRefCount { info ->
239+
info[AccountInfoSchemaWithTripleRefCount.nonce] = 0.toUInt()
240+
info[AccountInfoSchemaWithTripleRefCount.providers] = 0.toUInt()
241+
info[AccountInfoSchemaWithTripleRefCount.consumers] = 0.toUInt()
242242

243-
info[AccountInfoSchemaV28.data] = AccountData { data ->
243+
info[AccountInfoSchemaWithTripleRefCount.data] = AccountData { data ->
244244
data[AccountData.free] = 0.toBigInteger()
245245
data[AccountData.reserved] = 0.toBigInteger()
246246
data[AccountData.miscFrozen] = 0.toBigInteger()

feature-wallet-impl/src/main/java/jp/co/soramitsu/feature_wallet_impl/data/network/blockchain/struct/account/AccountInfo.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,21 @@ object AccountData : Schema<AccountData>() {
2020
val feeFrozen by uint128()
2121
}
2222

23-
object AccountInfoSchemaV27 : AccountInfoSchema() {
23+
object AccountInfoSchemaWithDualRefCount : AccountInfoSchema() {
2424
override val nonce by uint32()
2525

26-
val refCount by uint32()
26+
val consumers by uint32()
27+
val providers by uint32()
2728

2829
override val data by schema(AccountData)
2930
}
3031

31-
object AccountInfoSchemaV28 : AccountInfoSchema() {
32+
object AccountInfoSchemaWithTripleRefCount : AccountInfoSchema() {
3233
override val nonce by uint32()
3334

3435
val consumers by uint32()
3536
val providers by uint32()
37+
val selfSufficient by uint32()
3638

3739
override val data by schema(AccountData)
3840
}

feature-wallet-impl/src/main/java/jp/co/soramitsu/feature_wallet_impl/data/network/blockchain/struct/account/AccountInfoFactory.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import jp.co.soramitsu.common.utils.SuspendableProperty
44
import jp.co.soramitsu.fearless_utils.scale.EncodableStruct
55

66
class AccountInfoFactory(
7-
val isUpgradedToDualRefCount: SuspendableProperty<Boolean>
7+
private val isUpgradedToTripleRefCount: SuspendableProperty<Boolean>
88
) {
99

1010
suspend fun decode(scale: String): EncodableStruct<AccountInfoSchema> {
1111

12-
return if (isUpgradedToDualRefCount.get()) {
13-
AccountInfoSchemaV28.read(scale)
12+
return if (isUpgradedToTripleRefCount.get()) {
13+
AccountInfoSchemaWithTripleRefCount.read(scale)
1414
} else {
15-
AccountInfoSchemaV27.read(scale)
15+
AccountInfoSchemaWithDualRefCount.read(scale)
1616
}
1717
}
1818
}

feature-wallet-impl/src/main/java/jp/co/soramitsu/feature_wallet_impl/data/network/blockchain/struct/extrinsic/TransferExtrinsicFactory.kt

Lines changed: 4 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.extrinsic
22

3-
import jp.co.soramitsu.common.utils.SuspendableProperty
43
import jp.co.soramitsu.common.utils.hash
54
import jp.co.soramitsu.fearless_utils.encrypt.EncryptionType
65
import jp.co.soramitsu.fearless_utils.encrypt.Signer
@@ -32,27 +31,18 @@ class EncodeExtrinsicParams(
3231
)
3332

3433
class TransferExtrinsicFactory(
35-
private val isUpgradedToDualRefCount: SuspendableProperty<Boolean>,
3634
private val signer: Signer
3735
) {
3836

39-
suspend fun decode(scale: String): TransferExtrinsic? {
40-
return if (isUpgradedToDualRefCount.get()) {
41-
decodeV28(scale)
42-
} else {
43-
decodeV27(scale)
44-
}
37+
fun decode(scale: String): TransferExtrinsic? {
38+
return decodeV28(scale)
4539
}
4640

47-
suspend fun createEncodedExtrinsic(
41+
fun createEncodedExtrinsic(
4842
encodeExtrinsicParams: EncodeExtrinsicParams,
4943
keypair: Keypair
5044
): String {
51-
return if (isUpgradedToDualRefCount.get()) {
52-
createExtrinsicV28(encodeExtrinsicParams, keypair)
53-
} else {
54-
createExtrinsicV27(encodeExtrinsicParams, keypair)
55-
}
45+
return createExtrinsicV28(encodeExtrinsicParams, keypair)
5646
}
5747

5848
private fun createExtrinsicV28(
@@ -95,46 +85,6 @@ class TransferExtrinsicFactory(
9585
SubmittableExtrinsicV28.toHexString(submittableExtrinsic)
9686
}
9787

98-
private fun createExtrinsicV27(
99-
encodeExtrinsicParams: EncodeExtrinsicParams,
100-
keypair: Keypair
101-
): String = with(encodeExtrinsicParams) {
102-
val callStruct = TransferCallV27 { call ->
103-
call[TransferCallV27.callIndex] = networkType.runtimeConfiguration.pallets.transfers.transfer.index
104-
105-
call[TransferCallV27.args] = TransferArgsV27 { args ->
106-
args[TransferArgsV27.recipientId] = recipientId
107-
args[TransferArgsV27.amount] = amountInPlanks
108-
}
109-
}
110-
111-
val callBytes = TransferCallV27.toByteArray(callStruct)
112-
113-
val payload = createExtrinsicPayloadValue(callBytes, encodeExtrinsicParams)
114-
115-
val signatureValue = Signature(
116-
encryptionType = encryptionType,
117-
value = signer.signExtrinsic(payload, keypair, encryptionType)
118-
)
119-
120-
val extrinsic = SignedExtrinsicV27 { extrinsic ->
121-
extrinsic[SignedExtrinsicV27.accountId] = senderId
122-
extrinsic[SignedExtrinsicV27.signature] = signatureValue
123-
extrinsic[SignedExtrinsicV27.nonce] = nonce
124-
extrinsic[SignedExtrinsicV27.call] = callStruct
125-
}
126-
127-
val extrinsicBytes = SignedExtrinsicV27.toByteArray(extrinsic)
128-
val byteLengthValue = extrinsicBytes.size.toBigInteger()
129-
130-
val submittableExtrinsic = SubmittableExtrinsicV27 { struct ->
131-
struct[SubmittableExtrinsicV27.byteLength] = byteLengthValue
132-
struct[SubmittableExtrinsicV27.signedExtrinsic] = extrinsic
133-
}
134-
135-
SubmittableExtrinsicV27.toHexString(submittableExtrinsic)
136-
}
137-
13888
private fun createExtrinsicPayloadValue(
13989
callBytes: ByteArray,
14090
encodeExtrinsicParams: EncodeExtrinsicParams
@@ -150,22 +100,6 @@ class TransferExtrinsicFactory(
150100
}
151101
}
152102

153-
private fun decodeV27(scale: String): TransferExtrinsic? {
154-
val struct = SubmittableExtrinsicV27.readOrNull(scale) ?: return null
155-
156-
val signedExtrinsic = struct[SubmittableExtrinsicV27.signedExtrinsic]
157-
val call = signedExtrinsic[SignedExtrinsicV27.call]
158-
val args = call[TransferCallV27.args]
159-
160-
return TransferExtrinsic(
161-
senderId = signedExtrinsic[SignedExtrinsicV27.accountId],
162-
recipientId = args[TransferArgsV27.recipientId],
163-
amountInPlanks = args[TransferArgsV27.amount],
164-
index = call[TransferCallV27.callIndex],
165-
hash = struct.hash()
166-
)
167-
}
168-
169103
private fun decodeV28(scale: String): TransferExtrinsic? {
170104
val struct = SubmittableExtrinsicV28.readOrNull(scale) ?: return null
171105

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.updaters
22

3+
import jp.co.soramitsu.common.utils.SuspendableProperty
34
import jp.co.soramitsu.common.utils.fromHex
45
import jp.co.soramitsu.core_api.data.network.Updater
56
import jp.co.soramitsu.fearless_utils.runtime.Module
@@ -12,40 +13,39 @@ import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.storage.SubscribeSto
1213
import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.storage.storageChange
1314
import jp.co.soramitsu.fearless_utils.wsrpc.subscription.response.SubscriptionChange
1415
import jp.co.soramitsu.fearless_utils.wsrpc.subscriptionFlow
15-
import jp.co.soramitsu.feature_wallet_impl.data.network.blockchain.struct.account.AccountInfoFactory
1616
import kotlinx.coroutines.flow.collect
1717
import kotlinx.coroutines.flow.map
1818
import kotlinx.coroutines.flow.onEach
1919

20-
object DualRefCountService : Service<Unit>(Module.System, "UpgradedToDualRefCount") {
20+
object TripleRefCountService : Service<Unit>(Module.System, "UpgradedToTripleRefCount") {
2121
override fun storageKey(storageArgs: Unit): String {
2222
return StorageUtils.createStorageKey(this, null)
2323
}
2424
}
2525

26-
private const val DEFAULT_DUAL_REF_COUNT = false
26+
private const val DEFAULT_TRIPLE_REF_COUNT = false
2727

28-
private val upgradedToDualRefCountRequest = SubscribeStorageRequest(DualRefCountService.storageKey())
28+
private val upgradedToTripleRefCountRequest = SubscribeStorageRequest(TripleRefCountService.storageKey())
2929

30-
private fun SubscriptionChange.dualRefCountChange(): Boolean {
30+
private fun SubscriptionChange.tripleRefCountChange(): Boolean {
3131
val storageChange = storageChange()
3232

3333
val raw = storageChange.getSingleChange()
3434

35-
return raw?.let(boolean::fromHex) ?: DEFAULT_DUAL_REF_COUNT
35+
return raw?.let(boolean::fromHex) ?: DEFAULT_TRIPLE_REF_COUNT
3636
}
3737

3838
class AccountInfoSchemaUpdater(
39-
private val accountInfoFactory: AccountInfoFactory,
39+
private val tripleRefCountProperty: SuspendableProperty<Boolean>,
4040
private val socketService: SocketService
4141
) : Updater {
4242

4343
override suspend fun listenForUpdates() {
44-
accountInfoFactory.isUpgradedToDualRefCount.invalidate()
44+
tripleRefCountProperty.invalidate()
4545

46-
socketService.subscriptionFlow(upgradedToDualRefCountRequest)
47-
.map { it.dualRefCountChange() }
48-
.onEach(accountInfoFactory.isUpgradedToDualRefCount::set)
46+
socketService.subscriptionFlow(upgradedToTripleRefCountRequest)
47+
.map { it.tripleRefCountChange() }
48+
.onEach(tripleRefCountProperty::set)
4949
.collect()
5050
}
5151
}

feature-wallet-impl/src/main/java/jp/co/soramitsu/feature_wallet_impl/di/WalletFeatureModule.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,19 @@ class WalletFeatureModule {
4444

4545
@Provides
4646
@FeatureScope
47-
fun provideDualRefCountProperty() = SuspendableProperty<Boolean>()
47+
fun provideTripleRefCountProperty() = SuspendableProperty<Boolean>()
4848

4949
@Provides
5050
@FeatureScope
5151
fun provideExtrinsicFactory(
52-
dualRefCountProperty: SuspendableProperty<Boolean>,
5352
signer: Signer
54-
) = TransferExtrinsicFactory(dualRefCountProperty, signer)
53+
) = TransferExtrinsicFactory(signer)
5554

5655
@Provides
5756
@FeatureScope
5857
fun provideAccountInfoFactory(
59-
dualRefCountProperty: SuspendableProperty<Boolean>
60-
) = AccountInfoFactory(dualRefCountProperty)
58+
tripleRefCountProperty: SuspendableProperty<Boolean>
59+
) = AccountInfoFactory(tripleRefCountProperty)
6160

6261
@Provides
6362
@FeatureScope
@@ -125,10 +124,10 @@ class WalletFeatureModule {
125124
@Provides
126125
@FeatureScope
127126
fun provideAccountSchemaUpdater(
128-
accountInfoFactory: AccountInfoFactory,
127+
tripleRefCountProperty: SuspendableProperty<Boolean>,
129128
socketService: SocketService
130129
): AccountInfoSchemaUpdater {
131-
return AccountInfoSchemaUpdater(accountInfoFactory, socketService)
130+
return AccountInfoSchemaUpdater(tripleRefCountProperty, socketService)
132131
}
133132

134133
@Provides

feature-wallet-impl/src/test/java/jp/co/soramitsu/feature_wallet_impl/data/network/blockchain/struct/AccountDataTest.kt

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)