Skip to content

Commit 480791e

Browse files
jakubuidarein
andauthored
BOM_1.2.2 (#70)
* fix: package_name as bundleId (#57) * fix: handle get network capabilities exception (#56) * Merge pull request #60 from reown-com/chore/verification * Feat/in wallet transaction (#61) * fix: solana sign all (#69) --------- Co-authored-by: Derek <[email protected]>
1 parent f79698c commit 480791e

File tree

30 files changed

+843
-106
lines changed

30 files changed

+843
-106
lines changed

.github/actions/ci_relay/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ runs:
1717
architecture: x86_64
1818
cache: 'gradle'
1919
- name: Cache Gradle packages
20-
uses: actions/cache@v2
20+
uses: actions/cache@v4
2121
with:
2222
path: |
2323
~/.gradle/caches

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ const val KEY_PUBLISH_ARTIFACT_ID = "PUBLISH_ARTIFACT_ID"
55
const val KEY_SDK_NAME = "SDK_NAME"
66

77
//Latest versions
8-
const val BOM_VERSION = "1.2.1"
9-
const val FOUNDATION_VERSION = "1.2.1"
10-
const val CORE_VERSION = "1.2.1"
11-
const val SIGN_VERSION = "1.2.1"
12-
const val NOTIFY_VERSION = "1.2.1"
13-
const val WALLETKIT_VERSION = "1.2.1"
14-
const val APPKIT_VERSION = "1.2.1"
15-
const val MODAL_CORE_VERSION = "1.2.1"
8+
const val BOM_VERSION = "1.2.2"
9+
const val FOUNDATION_VERSION = "1.2.2"
10+
const val CORE_VERSION = "1.2.2"
11+
const val SIGN_VERSION = "1.2.2"
12+
const val NOTIFY_VERSION = "1.2.2"
13+
const val WALLETKIT_VERSION = "1.2.2"
14+
const val APPKIT_VERSION = "1.2.2"
15+
const val MODAL_CORE_VERSION = "1.2.2"
1616

1717
//Artifact ids
1818
const val ANDROID_BOM = "android-bom"

funding.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"opRetro": {
3+
"projectId": "0xa9155fd8bb7b8ef244047ad8578cabe91326a31ecb803485cc99147818fc30ca"
4+
}
5+
}

product/walletkit/src/main/kotlin/com/reown/walletkit/client/ClientMapper.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,8 @@ internal fun PreparedSendTransaction.toWallet(moshi: Moshi): Wallet.Params.Prepa
304304
return Wallet.Params.PrepareSendTransactionsResult(hash = hash, doSendTransactionParams = jsonParams, eip712Domain = domain)
305305
}
306306

307-
308307
@JvmSynthetic
309-
internal fun Wallet.Params.Call.toYttrium(): Call = Call(to = to, value = value, input = data)
308+
internal fun Call.toWallet(): Wallet.Model.Call = Wallet.Model.Call(to = to, value = value, input = input)
310309

311310
@JvmSynthetic
312311
internal fun Wallet.Params.OwnerSignature.toYttrium(): OwnerSignature = OwnerSignature(owner = address, signature = signature)

product/walletkit/src/main/kotlin/com/reown/walletkit/client/Wallet.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,13 @@ object Wallet {
6060

6161
data class DecryptMessage(val topic: String, val encryptedMessage: String) : Params()
6262
data class GetSmartAccountAddress(val owner: Account) : Params()
63-
data class PrepareSendTransactions(val calls: List<Call>, val owner: Account) : Params()
63+
data class PrepareSendTransactions(val calls: List<Model.Call>, val owner: Account) : Params()
6464
data class DoSendTransactions(val owner: Account, val signatures: List<OwnerSignature>, val doSendTransactionParams: String) : Params()
6565
data class PrepareSendTransactionsResult(var hash: String, var doSendTransactionParams: String, val eip712Domain: String) : Params()
6666
data class DoSendTransactionsResult(var userOperationHash: String) : Params()
6767
data class WaitForUserOperationReceipt(var owner: Account, var userOperationHash: String) : Params()
6868
data class OwnerSignature(val address: String, val signature: String) : Params()
6969
data class Account(val address: String) : Params()
70-
data class Call(val to: String, val value: String, val data: String) : Params()
7170
}
7271

7372
sealed class Model {
@@ -77,6 +76,8 @@ object Wallet {
7776
data class Error(val error: Throwable) : Ping()
7877
}
7978

79+
data class Call(val to: String, val value: String, val input: String) : Model()
80+
8081
data class Error(val throwable: Throwable) : Model()
8182

8283
data class Transaction(

product/walletkit/src/main/kotlin/com/reown/walletkit/client/WalletKit.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.reown.walletkit.di.walletKitModule
1111
import com.reown.walletkit.use_cases.EstimateGasUseCase
1212
import com.reown.walletkit.use_cases.ExecuteChainAbstractionUseCase
1313
import com.reown.walletkit.use_cases.GetERC20TokenBalanceUseCase
14+
import com.reown.walletkit.use_cases.PrepareCallERC20TransferCallUseCase
1415
import com.reown.walletkit.use_cases.PrepareChainAbstractionUseCase
1516
import kotlinx.coroutines.*
1617
import java.util.*
@@ -21,6 +22,7 @@ object WalletKit {
2122
private val executeChainAbstractionUseCase: ExecuteChainAbstractionUseCase by wcKoinApp.koin.inject()
2223
private val estimateGasUseCase: EstimateGasUseCase by wcKoinApp.koin.inject()
2324
private val getERC20TokenBalanceUseCase: GetERC20TokenBalanceUseCase by wcKoinApp.koin.inject()
25+
private val prepareCallERC20TransferCallUseCase: PrepareCallERC20TransferCallUseCase by wcKoinApp.koin.inject()
2426

2527
interface WalletDelegate {
2628
fun onSessionProposal(sessionProposal: Wallet.Model.SessionProposal, verifyContext: Wallet.Model.VerifyContext)
@@ -388,4 +390,9 @@ object WalletKit {
388390
fun getERC20Balance(chainId: String, tokenAddress: String, ownerAddress: String): String {
389391
return getERC20TokenBalanceUseCase(chainId, tokenAddress, ownerAddress)
390392
}
393+
394+
@Throws(Exception::class)
395+
fun prepareErc20TransferCall(contractAddress: String, to: String, amount: String): Wallet.Model.Call {
396+
return prepareCallERC20TransferCallUseCase(contractAddress, to, amount)
397+
}
391398
}

product/walletkit/src/main/kotlin/com/reown/walletkit/di/WalletModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.reown.walletkit.BuildConfig
66
import com.reown.walletkit.use_cases.EstimateGasUseCase
77
import com.reown.walletkit.use_cases.ExecuteChainAbstractionUseCase
88
import com.reown.walletkit.use_cases.GetERC20TokenBalanceUseCase
9+
import com.reown.walletkit.use_cases.PrepareCallERC20TransferCallUseCase
910
import com.reown.walletkit.use_cases.PrepareChainAbstractionUseCase
1011
import org.koin.core.qualifier.named
1112
import org.koin.dsl.module
@@ -34,4 +35,6 @@ internal fun walletKitModule() = module {
3435
single { GetERC20TokenBalanceUseCase(get()) }
3536

3637
single { ExecuteChainAbstractionUseCase(get()) }
38+
39+
single { PrepareCallERC20TransferCallUseCase(get()) }
3740
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.reown.walletkit.use_cases
2+
3+
import com.reown.walletkit.client.Wallet
4+
import com.reown.walletkit.client.toWallet
5+
import kotlinx.coroutines.runBlocking
6+
import uniffi.uniffi_yttrium.ChainAbstractionClient
7+
8+
class PrepareCallERC20TransferCallUseCase(private val chainAbstractionClient: ChainAbstractionClient) {
9+
operator fun invoke(contractAddress: String, to: String, amount: String): Wallet.Model.Call {
10+
return runBlocking { chainAbstractionClient.prepareErc20TransferCall(contractAddress, to, amount).toWallet() }
11+
}
12+
}

product/walletkit/src/main/kotlin/com/reown/walletkit/use_cases/PrepareChainAbstractionUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class PrepareChainAbstractionUseCase(private val chainAbstractionClient: ChainAb
2222
try {
2323
val result = async {
2424
try {
25-
val call = Call(initialTransaction.to, initialTransaction.value, initialTransaction.input)
25+
val call = Call(to = initialTransaction.to, value = initialTransaction.value, input = initialTransaction.input)
2626
chainAbstractionClient.prepareDetailed(initialTransaction.chainId, initialTransaction.from, call, Currency.USD)
2727
} catch (e: Exception) {
2828
return@async onError(Wallet.Model.PrepareError.Unknown(e.message ?: "Unknown error"))

protocol/sign/src/main/kotlin/com/reown/sign/engine/model/tvf/TVF.kt

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.reown.sign.engine.model.tvf
22

33
import com.squareup.moshi.Moshi
4+
import io.ipfs.multibase.Base58
5+
import org.bouncycastle.util.encoders.Base64
46

57
class TVF(private val moshi: Moshi) {
68
private val evm: List<String>
@@ -47,19 +49,41 @@ class TVF(private val moshi: Moshi) {
4749
?.signature
4850
?.let { listOf(it) }
4951

50-
SOLANA_SIGN_ALL_TRANSACTION ->
52+
SOLANA_SIGN_ALL_TRANSACTION -> {
5153
moshi.adapter(SolanaSignAllTransactionsResult::class.java)
5254
.fromJson(rpcResult)
5355
?.transactions
56+
?.map { transaction -> extractSignature(transaction) }
57+
}
5458

5559
else -> null
5660
}
5761
} catch (e: Exception) {
58-
println("error processing $rpcMethod - $e")
62+
println("Error processing $rpcMethod - $e")
5963
null
6064
}
6165
}
6266

67+
private fun extractSignature(transaction: String): String {
68+
val transactionBuffer = try {
69+
Base64.decode(transaction)
70+
} catch (e: Exception) {
71+
Base58.decode(transaction)
72+
}
73+
74+
if (transactionBuffer.isEmpty()) {
75+
throw IllegalArgumentException("Transaction buffer is empty")
76+
}
77+
78+
val numSignatures = transactionBuffer[0].toInt() and 0xFF
79+
if (numSignatures > 0 && transactionBuffer.size >= 65) {
80+
val signatureBuffer = transactionBuffer.copyOfRange(1, 65)
81+
return Base58.encode(signatureBuffer)
82+
} else {
83+
throw IllegalArgumentException("No signatures found in transaction")
84+
}
85+
}
86+
6387
companion object {
6488
private const val ETH_SEND_TRANSACTION = "eth_sendTransaction"
6589
private const val ETH_SEND_RAW_TRANSACTION = "eth_sendRawTransaction"

0 commit comments

Comments
 (0)