diff --git a/README.md b/README.md index a84d6e1e..952e9d20 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ class SomeModel(context: Context) { is Result.Error -> { Logger.log("Ethereum connection error: ${result.error.message}") } - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum connection result: ${result.value}") } } @@ -98,7 +98,7 @@ class SomeModel(context: Context) { is Result.Error -> { Logger.log("Ethereum connection error: ${result.error.message}") } - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum connection result: ${result.value}") } } @@ -187,7 +187,7 @@ val balance = ethereum.getEthBalance(ethereum.selectedAddress, "latest") // Make request when (balance) { - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum account balance: ${result.value}") balance = result.value } @@ -210,7 +210,7 @@ when (val result = ethereum.ethSignTypedDataV4(message, address)) { is Result.Error -> { Logger.log("Ethereum sign error: ${result.error.message}") } - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum sign result: ${result.value}") } } @@ -236,7 +236,7 @@ when (val result = ethereum.sendRequestBatch(listOf(ethereumRequest1, ethereumRe is Result.Error -> { Logger.log("Ethereum batch sign error: ${result.error.message}") } - is Result.Success.Items -> { + is Result.Success -> { Logger.log("Ethereum batch sign result: ${result.value}") } } @@ -254,7 +254,7 @@ val to = "0x0000000000000000000000000000000000000000" val value = "0x8ac7230489e80000" when (val result = ethereum.sendTransaction(from, to, value)) { - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum transaction result: ${result.value}") balance = result.value } @@ -301,7 +301,7 @@ when (val result = ethereum.connectWith(sendTransactionRequest)) { is Result.Error -> { // handle error } - is Result.Success.Item -> { + is Result.Success -> { // transaction hash ${result.value} } } @@ -319,7 +319,7 @@ when (val result = ethereum.connectSign(message)) { is Result.Error -> { Logger.log("Ethereum connectSign error: ${result.error.message}") } - is Result.Success.Item -> { + is Result.Success -> { Logger.log("Ethereum connectSign result: ${result.value}") } } diff --git a/app/src/main/java/com/metamask/dapp/BatchSignMessageScreen.kt b/app/src/main/java/com/metamask/dapp/BatchSignMessageScreen.kt index 402d3bd0..076a88f1 100644 --- a/app/src/main/java/com/metamask/dapp/BatchSignMessageScreen.kt +++ b/app/src/main/java/com/metamask/dapp/BatchSignMessageScreen.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.launch fun BatchSignMessageScreen( navController: NavController, ethereumState: EthereumState, - batchSign: suspend (messages: List, address: String) -> Result + batchSign: suspend (messages: List, address: String) -> Result> ) { var signResult by remember { mutableStateOf("") } var errorMessage by remember { mutableStateOf(null) } @@ -57,7 +57,7 @@ fun BatchSignMessageScreen( DappButton(buttonText = stringResource(R.string.batch_sign)) { coroutineScope.launch { when (val result = batchSign(batchSignMessages, ethereumState.selectedAddress)) { - is Result.Success.Items -> { + is Result.Success -> { errorMessage = null signResult = result.value.joinToString("\n=================================\n") } @@ -88,6 +88,6 @@ fun PreviewBatchSignMessage() { BatchSignMessageScreen( rememberNavController(), ethereumState = EthereumState("", "", ""), - batchSign = { _, _ -> Result.Success.Items(listOf()) } + batchSign = { _, _ -> Result.Success(listOf()) } ) } diff --git a/app/src/main/java/com/metamask/dapp/ConnectScreen.kt b/app/src/main/java/com/metamask/dapp/ConnectScreen.kt index 040291fa..434a8b51 100644 --- a/app/src/main/java/com/metamask/dapp/ConnectScreen.kt +++ b/app/src/main/java/com/metamask/dapp/ConnectScreen.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.launch @Composable fun ConnectScreen( ethereumState: EthereumState, - connect: suspend () -> Result, + connect: suspend () -> Result, connectSign: () -> Unit, connectWith: () -> Unit, disconnect: () -> Unit, @@ -101,7 +101,7 @@ fun ConnectScreen( fun PreviewConnectClearButtons() { ConnectScreen( ethereumState = EthereumState("", "", ""), - connect = { -> Result.Success.Item("")}, + connect = { -> Result.Success("")}, connectSign = { }, connectWith = { }, disconnect = { }, diff --git a/app/src/main/java/com/metamask/dapp/EthereumFlowViewModel.kt b/app/src/main/java/com/metamask/dapp/EthereumFlowViewModel.kt index 7ce55c4d..2d14d271 100644 --- a/app/src/main/java/com/metamask/dapp/EthereumFlowViewModel.kt +++ b/app/src/main/java/com/metamask/dapp/EthereumFlowViewModel.kt @@ -12,25 +12,25 @@ class EthereumFlowViewModel @Inject constructor( ): ViewModel() { val ethereumFlow: Flow get() = ethereum.ethereumState - suspend fun connect() : Result { + suspend fun connect() : Result { return ethereum.connect() } - suspend fun connectWith(request: EthereumRequest) : Result { + suspend fun connectWith(request: EthereumRequest) : Result { return ethereum.connectWith(request) } - suspend fun connectSign(message: String) : Result { + suspend fun connectSign(message: String) : Result { return ethereum.connectSign(message) } - suspend fun connectWithSendTransaction(amount: String, + suspend fun connectWithSendTransaction(value: String, from: String, - to: String) : Result { + to: String) : Result { val params: MutableMap = mutableMapOf( "from" to from, "to" to to, - "amount" to amount + "value" to value ) val transactionRequest = EthereumRequest( @@ -41,17 +41,17 @@ class EthereumFlowViewModel @Inject constructor( return connectWith(transactionRequest) } - suspend fun sendRequestBatch(requests: List) : Result { + suspend fun sendRequestBatch(requests: List) : Result> { return ethereum.sendRequestBatch(requests) } - suspend fun sendRequest(request: EthereumRequest) : Result { + suspend fun sendRequest(request: EthereumRequest) : Result { return ethereum.sendRequest(request) } suspend fun sendBatchSigningRequest( messages: List, - address: String) : Result { + address: String) : Result> { val requestBatch: MutableList = mutableListOf() for (message in messages) { @@ -69,28 +69,28 @@ class EthereumFlowViewModel @Inject constructor( suspend fun signMessage( message: String, address: String, - ) : Result { + ) : Result { return ethereum.ethSignTypedDataV4(typedData = message, address) } - suspend fun getBalance(address: String, block: String = "latest") : Result { + suspend fun getBalance(address: String, block: String = "latest") : Result { return ethereum.getEthBalance(address, block) } - suspend fun gasPrice() : Result { + suspend fun gasPrice() : Result { return ethereum.getEthGasPrice() } - suspend fun web3ClientVersion() : Result { + suspend fun web3ClientVersion() : Result { return ethereum.getWeb3ClientVersion() } suspend fun sendTransaction( - amount: String, + value: String, from: String, to: String, - ) : Result { - return ethereum.sendTransaction(from = from, to = to, value = amount) + ) : Result { + return ethereum.sendTransaction(from = from, to = to, value = value) } suspend fun switchChain(chainId: String) : SwitchChainResult { diff --git a/app/src/main/java/com/metamask/dapp/EthereumViewModel.kt b/app/src/main/java/com/metamask/dapp/EthereumViewModel.kt index 0edb346c..a8ae4a19 100644 --- a/app/src/main/java/com/metamask/dapp/EthereumViewModel.kt +++ b/app/src/main/java/com/metamask/dapp/EthereumViewModel.kt @@ -25,7 +25,7 @@ class EthereumViewModel @Inject constructor( logger.log("Ethereum connection error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Items -> { + is Result.Success -> { logger.log("Ethereum connection result: ${result.value.first()}") onSuccess() } @@ -41,7 +41,7 @@ class EthereumViewModel @Inject constructor( logger.log("Connectwith error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Connectwith result: $result") onSuccess(result.value) } @@ -76,7 +76,7 @@ class EthereumViewModel @Inject constructor( logger.log("Connect & sign error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Connect & sign result: $result") onSuccess(result.value) } @@ -114,7 +114,7 @@ class EthereumViewModel @Inject constructor( logger.log("Ethereum batch sign error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Items -> { + is Result.Success -> { logger.log("Ethereum batch sign result: $result") onSuccess(result.value) } @@ -129,20 +129,13 @@ class EthereumViewModel @Inject constructor( onSuccess: (String) -> Unit, onError: (String) -> Unit ) { - val params: List = listOf(address, message) - - val signRequest = EthereumRequest( - method = EthereumMethod.ETH_SIGN_TYPED_DATA_V4.value, - params = params - ) - - ethereum.sendRequest(signRequest) { result -> + ethereum.ethSignTypedDataV4(message, address) { result -> when (result) { is Result.Error -> { logger.log("Ethereum sign error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Ethereum sign result: $result") onSuccess(result.value) } @@ -156,20 +149,13 @@ class EthereumViewModel @Inject constructor( onSuccess: (String) -> Unit, onError: (String) -> Unit ) { - val params: List = listOf(address, "latest") - - val getBalanceRequest = EthereumRequest( - method = EthereumMethod.ETH_GET_BALANCE.value, - params = params - ) - - ethereum.sendRequest(getBalanceRequest) { result -> + ethereum.getEthBalance(address, "latest") { result -> when (result) { is Result.Error -> { logger.log("Ethereum get balance error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Ethereum get balance result: $result") onSuccess(result.value) } @@ -182,20 +168,13 @@ class EthereumViewModel @Inject constructor( onSuccess: (String) -> Unit, onError: (String) -> Unit ) { - val params: List = listOf() - - val gasPriceRequest = EthereumRequest( - method = EthereumMethod.ETH_GAS_PRICE.value, - params = params - ) - - ethereum.sendRequest(gasPriceRequest) { result -> + ethereum.gasPrice { result -> when (result) { is Result.Error -> { logger.log("Ethereum gas price error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Ethereum gas price result: $result") onSuccess(result.value) } @@ -208,20 +187,13 @@ class EthereumViewModel @Inject constructor( onSuccess: (String) -> Unit, onError: (String) -> Unit ) { - val params: List = listOf() - - val web3ClientVersionRequest = EthereumRequest( - method = EthereumMethod.WEB3_CLIENT_VERSION.value, - params = params - ) - - ethereum.sendRequest(web3ClientVersionRequest) { result -> + ethereum.getWeb3ClientVersion { result -> when (result) { is Result.Error -> { logger.log("Ethereum web3 client version error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Ethereum web3 client version result: $result") onSuccess(result.value) } @@ -237,24 +209,13 @@ class EthereumViewModel @Inject constructor( onSuccess: (String) -> Unit, onError: (message: String) -> Unit ) { - val params: MutableMap = mutableMapOf( - "from" to from, - "to" to to, - "value" to value - ) - - val transactionRequest = EthereumRequest( - method = EthereumMethod.ETH_SEND_TRANSACTION.value, - params = listOf(params) - ) - - ethereum.sendRequest(transactionRequest) { result -> + ethereum.sendTransaction(from, to, value) { result -> when (result) { is Result.Error -> { logger.log("Ethereum transaction error: ${result.error.message}") onError(result.error.message) } - is Result.Success.Item -> { + is Result.Success -> { logger.log("Ethereum transaction result: $result") onSuccess(result.value) } @@ -268,13 +229,7 @@ class EthereumViewModel @Inject constructor( onSuccess: (message: String) -> Unit, onError: (message: String, action: (() -> Unit)?) -> Unit ) { - val switchChainParams: Map = mapOf("chainId" to chainId) - val switchChainRequest = EthereumRequest( - method = EthereumMethod.SWITCH_ETHEREUM_CHAIN.value, - params = listOf(switchChainParams) - ) - - ethereum.sendRequest(switchChainRequest) { result -> + ethereum.switchEthereumChain(chainId) { result -> when (result) { is Result.Error -> { if (result.error.code == ErrorType.UNRECOGNIZED_CHAIN_ID.code || result.error.code == ErrorType.SERVER_ERROR.code) { @@ -310,17 +265,7 @@ class EthereumViewModel @Inject constructor( ) { logger.log("Adding chainId: $chainId") - val addChainParams: Map = mapOf( - "chainId" to chainId, - "chainName" to Network.chainNameFor(chainId), - "rpcUrls" to Network.rpcUrls(Network.fromChainId(chainId)) - ) - val addChainRequest = EthereumRequest( - method = EthereumMethod.ADD_ETHEREUM_CHAIN.value, - params = listOf(addChainParams) - ) - - ethereum.sendRequest(addChainRequest) { result -> + ethereum.addEthereumChain(chainId, Network.rpcUrls(Network.fromChainId(chainId))) { result -> when (result) { is Result.Error -> { onError("Add chain error: ${result.error.message}") diff --git a/app/src/main/java/com/metamask/dapp/ReadOnlyCallsScreen.kt b/app/src/main/java/com/metamask/dapp/ReadOnlyCallsScreen.kt index cd7359b1..a4d09759 100644 --- a/app/src/main/java/com/metamask/dapp/ReadOnlyCallsScreen.kt +++ b/app/src/main/java/com/metamask/dapp/ReadOnlyCallsScreen.kt @@ -20,9 +20,9 @@ import kotlinx.coroutines.launch fun ReadOnlyCallsScreen( navController: NavController, ethereumState: EthereumState, - getBalance: suspend (address: String) -> Result, - getGasPrice: suspend () -> Result, - getWeb3ClientVersion: suspend () -> Result + getBalance: suspend (address: String) -> Result, + getGasPrice: suspend () -> Result, + getWeb3ClientVersion: suspend () -> Result ) { var selectedAddress by remember { mutableStateOf("") } var balance by remember { mutableStateOf("") } @@ -54,7 +54,7 @@ fun ReadOnlyCallsScreen( DappButton(buttonText = stringResource(R.string.get_balance)) { coroutineScope.launch { when(val result = getBalance(selectedAddress)) { - is Result.Success.Item -> { + is Result.Success -> { balance = result.value getBalanceErrorMessage = null } @@ -78,7 +78,7 @@ fun ReadOnlyCallsScreen( DappButton(buttonText = stringResource(R.string.get_gas_price)) { coroutineScope.launch { when(val result = getGasPrice()) { - is Result.Success.Item -> { + is Result.Success -> { gasPrice = result.value getGasPriceErrorMessage = null } @@ -102,7 +102,7 @@ fun ReadOnlyCallsScreen( DappButton(buttonText = stringResource(R.string.get_web3_client_version)) { coroutineScope.launch { when(val result = getWeb3ClientVersion()) { - is Result.Success.Item -> { + is Result.Success -> { web3ClientVersion = result.value getWeb3VersionErrorMessage = null } @@ -131,8 +131,8 @@ fun PreviewReadOnlyCallsScreen() { ReadOnlyCallsScreen( rememberNavController(), ethereumState = EthereumState("", "", ""), - getBalance = {_ -> Result.Success.Item("")}, - getGasPrice = { -> Result.Success.Item("")}, - getWeb3ClientVersion = { -> Result.Success.Item("")} + getBalance = {_ -> Result.Success("")}, + getGasPrice = { -> Result.Success("")}, + getWeb3ClientVersion = { -> Result.Success("")} ) } \ No newline at end of file diff --git a/app/src/main/java/com/metamask/dapp/SendTransactionScreen.kt b/app/src/main/java/com/metamask/dapp/SendTransactionScreen.kt index d945df1c..28a2db79 100644 --- a/app/src/main/java/com/metamask/dapp/SendTransactionScreen.kt +++ b/app/src/main/java/com/metamask/dapp/SendTransactionScreen.kt @@ -34,8 +34,8 @@ fun SendTransactionScreen( navController: NavController, ethereumState: EthereumState, isConnectWith: Boolean = false, - sendTransaction: suspend (value: String, from: String, to: String) -> Result, - connectWithSendTransaction: suspend (value: String, from: String, to: String) -> Result + sendTransaction: suspend (value: String, from: String, to: String) -> Result, + connectWithSendTransaction: suspend (value: String, from: String, to: String) -> Result ) { var value by remember { mutableStateOf("0x8ac7230489e80000") } var from by remember { mutableStateOf(ethereumState.selectedAddress) } @@ -185,7 +185,7 @@ fun SendTransactionScreen( DappButton(buttonText = stringResource(R.string.connect_with_send)) { coroutineScope.launch { when (val result = connectWithSendTransaction(value, from, to)) { - is Result.Success.Item -> { + is Result.Success -> { errorMessage = null sendResult = result.value } @@ -200,7 +200,7 @@ fun SendTransactionScreen( DappButton(buttonText = stringResource(R.string.send)) { coroutineScope.launch { when (val result = sendTransaction(value, from, to)) { - is Result.Success.Item -> { + is Result.Success -> { errorMessage = null sendResult = result.value } @@ -230,7 +230,7 @@ fun PreviewSendTransaction() { SendTransactionScreen( rememberNavController(), ethereumState = EthereumState("", "", ""), - sendTransaction = { _, _, _ -> Result.Success.Item("") }, - connectWithSendTransaction = { _, _, _ -> Result.Success.Item("") }, + sendTransaction = { _, _, _ -> Result.Success("") }, + connectWithSendTransaction = { _, _, _ -> Result.Success("") }, ) } \ No newline at end of file diff --git a/app/src/main/java/com/metamask/dapp/Setup.kt b/app/src/main/java/com/metamask/dapp/Setup.kt index 3fc086b7..040788a9 100644 --- a/app/src/main/java/com/metamask/dapp/Setup.kt +++ b/app/src/main/java/com/metamask/dapp/Setup.kt @@ -19,7 +19,7 @@ fun Setup(ethereumViewModel: EthereumFlowViewModel, screenViewModel: ScreenViewM var isConnecting by remember { mutableStateOf(false) } var isConnectSigning by remember { mutableStateOf(false) } - var connectResult by remember { mutableStateOf(Result.Success.Item("")) } + var connectResult by remember { mutableStateOf>(Result.Success("")) } var account by remember { mutableStateOf(ethereumState.selectedAddress) } LaunchedEffect(ethereumState.selectedAddress) { diff --git a/app/src/main/java/com/metamask/dapp/SignMessageScreen.kt b/app/src/main/java/com/metamask/dapp/SignMessageScreen.kt index df385b50..f30135cd 100644 --- a/app/src/main/java/com/metamask/dapp/SignMessageScreen.kt +++ b/app/src/main/java/com/metamask/dapp/SignMessageScreen.kt @@ -24,8 +24,8 @@ fun SignMessageScreen( navController: NavController, ethereumState: EthereumState, isConnectSign: Boolean = false, - connectSignMessage: suspend (message: String) -> Result, - signMessage: suspend (message: String, address: String) -> Result + connectSignMessage: suspend (message: String) -> Result, + signMessage: suspend (message: String, address: String) -> Result ) { fun signMessage(chainId: String): String { return if(isConnectSign) { @@ -84,7 +84,7 @@ fun SignMessageScreen( DappButton(buttonText = stringResource(R.string.sign)) { coroutineScope.launch { when (val result = signMessage(message, ethereumState.selectedAddress)) { - is Result.Success.Item -> { + is Result.Success -> { errorMessage = null signResult = result.value } @@ -117,7 +117,7 @@ fun PreviewSignMessage() { rememberNavController(), ethereumState = EthereumState("", "", ""), false, - signMessage = { _, _ -> Result.Success.Item("") }, - connectSignMessage = { _ -> Result.Success.Item("") } + signMessage = { _, _ -> Result.Success("") }, + connectSignMessage = { _ -> Result.Success("") } ) } \ No newline at end of file diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/CommunicationClient.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/CommunicationClient.kt index 28810d91..21d75410 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/CommunicationClient.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/CommunicationClient.kt @@ -234,34 +234,36 @@ class CommunicationClient( if (!isResultMethod) { val resultJson = data.optString("result") + if (resultJson.isNotEmpty()) { - val resultMap: Map? = try { - Gson().fromJson(resultJson, object : TypeToken>() {}.type) + val accounts: List? = try { + Gson().fromJson(resultJson, object : TypeToken>() {}.type) } catch (e: JsonSyntaxException) { null } - - if (resultMap != null) { - submittedRequests[id]?.callback?.invoke(Result.Success.ItemMap(resultMap)) - completeRequest(id, Result.Success.ItemMap(resultMap)) + val account = accounts?.firstOrNull() + if (account != null) { + submittedRequests[id]?.callback?.invoke(Result.Success(account)) + completeRequest(id, Result.Success(account)) } else { - val accounts: List? = try { - Gson().fromJson(resultJson, object : TypeToken>() {}.type) + val resultMap: Map? = try { + Gson().fromJson(resultJson, object : TypeToken>() {}.type) } catch (e: JsonSyntaxException) { null } - val account = accounts?.firstOrNull() - if (account != null) { - submittedRequests[id]?.callback?.invoke(Result.Success.Item(account)) - completeRequest(id, Result.Success.Item(account)) + + if (resultMap != null) { + submittedRequests[id]?.callback?.invoke(Result.Success(resultMap)) + completeRequest(id, Result.Success(resultMap)) } else { - submittedRequests[id]?.callback?.invoke(Result.Success.Item(resultJson)) - completeRequest(id, Result.Success.Item(resultJson)) + submittedRequests[id]?.callback?.invoke(Result.Success(resultJson)) + completeRequest(id, Result.Success(resultJson)) } } } else { + // Handle empty result case by parsing the entire data object as a Map val result: Map = Gson().fromJson(data.toString(), object : TypeToken>() {}.type) - completeRequest(id, Result.Success.ItemMap(result)) + completeRequest(id, Result.Success(result)) } return } @@ -277,14 +279,14 @@ class CommunicationClient( if (account != null) { updateAccount(account) - completeRequest(id, Result.Success.Item(account)) + completeRequest(id, Result.Success(account)) } val chainId = resultJson.optString("chainId") if (chainId.isNotEmpty()) { updateChainId(chainId) - completeRequest(id, Result.Success.Item(chainId)) + completeRequest(id, Result.Success(chainId)) } } EthereumMethod.ETH_REQUEST_ACCOUNTS.value -> { @@ -296,14 +298,14 @@ class CommunicationClient( updateAccount(selectedAccount) } - completeRequest(id, Result.Success.Items(accounts)) + completeRequest(id, Result.Success(accounts)) } EthereumMethod.ETH_CHAIN_ID.value -> { val chainId = data.optString("result") if (chainId.isNotEmpty()) { updateChainId(chainId) - completeRequest(id, Result.Success.Item(chainId)) + completeRequest(id, Result.Success(chainId)) } } EthereumMethod.ETH_SIGN_TYPED_DATA_V3.value, @@ -312,7 +314,7 @@ class CommunicationClient( val result = data.optString("result") if (result.isNotEmpty()) { - completeRequest(id, Result.Success.Item(result)) + completeRequest(id, Result.Success(result)) } else { logger.error("CommunicationClient:: Unexpected response: $data") } @@ -321,15 +323,24 @@ class CommunicationClient( val result = data.optString("result") val results: List = Gson().fromJson(result, object : TypeToken>() {}.type) val sanitisedResults = results.filterNotNull() - completeRequest(id, Result.Success.Items(sanitisedResults)) + completeRequest(id, Result.Success(sanitisedResults)) } else -> { val result = data.optString("result") - completeRequest(id, Result.Success.Item(result)) + completeRequest(id, Result.Success(result)) } } } + private fun isPlainString(input: String): Boolean { + return try { + Gson().fromJson(input, Any::class.java) + false + } catch (e: JsonSyntaxException) { + true + } + } + fun handleError(error: String, id: String): Boolean { if (error.isEmpty()) { return false @@ -348,7 +359,7 @@ class CommunicationClient( return true } - fun completeRequest(id: String, result: Result) { + fun completeRequest(id: String, result: Result) { if (queuedRequests[id] != null) { queuedRequests[id]?.callback?.invoke(result) queuedRequests.remove(id) @@ -428,7 +439,7 @@ class CommunicationClient( } } - fun sendRequest(request: RpcRequest, callback: (Result) -> Unit) { + fun sendRequest(request: RpcRequest, callback: (Result) -> Unit) { if (request.method == EthereumMethod.GET_METAMASK_PROVIDER_STATE.value) { clearPendingRequests() } @@ -458,7 +469,7 @@ class CommunicationClient( } } - fun processRequest(request: RpcRequest, callback: (Result) -> Unit) { + fun processRequest(request: RpcRequest, callback: (Result) -> Unit) { logger.log("CommunicationClient:: sending request $request") if (queuedRequests[request.id] != null) { queuedRequests.remove(request.id) diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Ethereum.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Ethereum.kt index 4c208710..ce342334 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Ethereum.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Ethereum.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import java.lang.ref.WeakReference +import kotlin.collections.listOf private const val METAMASK_DEEPLINK = "https://metamask.app.link" private const val METAMASK_BIND_DEEPLINK = "$METAMASK_DEEPLINK/bind" @@ -132,7 +133,7 @@ class Ethereum ( storage.clear(SessionManager.SESSION_CONFIG_FILE) } - fun connect(callback: ((Result) -> Unit)? = null) { + fun connect(callback: ((Result) -> Unit)? = null) { connectRequestSent = true val error = dappMetadata.validationError @@ -162,7 +163,7 @@ class Ethereum ( =================== */ - fun connectWith(request: EthereumRequest, callback: ((Result) -> Unit)? = null) { + fun connectWith(request: EthereumRequest, callback: ((Result) -> Unit)? = null) { logger.log("Ethereum:: connecting with ${request.method}...") connectRequestSent = true communicationClient?.dappMetadata = dappMetadata @@ -188,7 +189,7 @@ class Ethereum ( sendConnectRequest(sendRequest, callback) } - fun connectSign(message: String, callback: ((Result) -> Unit)? = null) { + fun connectSign(message: String, callback: ((Result) -> Unit)? = null) { connectRequestSent = true communicationClient?.dappMetadata = dappMetadata communicationClient?.ethereumEventCallbackRef = WeakReference(this) @@ -209,54 +210,68 @@ class Ethereum ( sendConnectRequest(connectSignRequest, callback) } - private fun ethereumRequest(method: EthereumMethod, params: Any?, callback: ((Result) -> Unit)?) { - sendRequest( - EthereumRequest(method = method.value, params = params), - callback - ) + private fun ethereumRequest(method: EthereumMethod, params: Any?, callback: ((Result) -> Unit)?) { + sendRequest(EthereumRequest(method = method.value, params = params)) { result -> + val convertedResult = when (result) { + is Result.Success<*> -> { + try { + @Suppress("UNCHECKED_CAST") + Result.Success(result.value as T) + } catch (e: ClassCastException) { + Result.Error(RequestError(-1, "Type conversion error: ${e.message}")) + } + } + is Result.Error -> result + } + callback?.invoke(convertedResult) + } } - fun getChainId(callback: ((Result) -> Unit)?) { + fun getChainId(callback: ((Result) -> Unit)?) { if(connectRequestSent) { ethereumRequest(method = EthereumMethod.ETH_CHAIN_ID, params = null, callback) } else { - callback?.invoke((Result.Success.Item(cachedChainId))) + callback?.invoke((Result.Success(cachedChainId))) } } - fun getEthAccounts(callback: ((Result) -> Unit)?) { + fun getEthAccounts(callback: ((Result) -> Unit)?) { if (connectRequestSent) { ethereumRequest(method = EthereumMethod.ETH_ACCOUNTS, params = null, callback) } else { - callback?.invoke((Result.Success.Item(cachedAccount))) + callback?.invoke((Result.Success(cachedAccount))) } } - fun getEthBalance(address: String, block: String, callback: ((Result) -> Unit)? = null) { + fun getEthBalance(address: String, block: String, callback: ((Result) -> Unit)? = null) { ethereumRequest(EthereumMethod.ETH_GET_BALANCE, params = listOf(address, block), callback) } - fun getEthBlockNumber(callback: ((Result) -> Unit)?) { + fun getEthBlockNumber(callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_BLOCK_NUMBER, params = null, callback) } - fun getEthEstimateGas(callback: ((Result) -> Unit)?) { + fun getEthEstimateGas(callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_ESTIMATE_GAS, params = null, callback) } - fun getWeb3ClientVersion(callback: ((Result) -> Unit)?) { + fun gasPrice(callback: ((Result) -> Unit)?) { + ethereumRequest(method = EthereumMethod.ETH_GAS_PRICE, params = null, callback) + } + + fun getWeb3ClientVersion(callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.WEB3_CLIENT_VERSION, params = listOf(), callback) } - fun personalSign(message: String, address: String, callback: ((Result) -> Unit)?) { + fun personalSign(message: String, address: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.PERSONAL_SIGN, params = listOf(address, message), callback) } - fun ethSignTypedDataV4(typedData: Any, address: String, callback: ((Result) -> Unit)?) { + fun ethSignTypedDataV4(typedData: Any, address: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_SIGN_TYPED_DATA_V4, params = listOf(address, typedData), callback) } - fun sendTransaction(from: String, to: String, value: String, callback: ((Result) -> Unit)?) { + fun sendTransaction(from: String, to: String, value: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_SEND_TRANSACTION, params = listOf(mutableMapOf( "from" to from, "to" to to, @@ -264,23 +279,15 @@ class Ethereum ( )), callback) } - fun sendRawTransaction(signedTransaction: String, callback: ((Result) -> Unit)?) { + fun sendRawTransaction(signedTransaction: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_SEND_RAW_TRANSACTION, params = listOf(signedTransaction), callback) } - fun getBlockTransactionCountByNumber(blockNumber: String, callback: ((Result) -> Unit)?) { - ethereumRequest(method = EthereumMethod.ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER, params = listOf(blockNumber), callback) - } - - fun getBlockTransactionCountByHash(blockHash: String, callback: ((Result) -> Unit)?) { - ethereumRequest(method = EthereumMethod.ETH_GET_BLOCK_TRANSACTION_COUNT_BY_HASH, params = listOf(blockHash), callback) - } - - fun getTransactionCount(address: String, tagOrblockNumber: String, callback: ((Result) -> Unit)?) { + fun getTransactionCount(address: String, tagOrblockNumber: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ETH_GET_TRANSACTION_COUNT, params = listOf(address, tagOrblockNumber), callback) } - fun addEthereumChain(targetChainId: String, rpcUrls: List?, callback: ((Result) -> Unit)?) { + fun addEthereumChain(targetChainId: String, rpcUrls: List?, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.ADD_ETHEREUM_CHAIN, params = listOf(mapOf( "chainId" to targetChainId, "chainName" to Network.chainNameFor(targetChainId), @@ -288,11 +295,11 @@ class Ethereum ( )), callback) } - fun switchEthereumChain(targetChainId: String, callback: ((Result) -> Unit)?) { + fun switchEthereumChain(targetChainId: String, callback: ((Result) -> Unit)?) { ethereumRequest(method = EthereumMethod.SWITCH_ETHEREUM_CHAIN, params = listOf(mapOf("chainId" to targetChainId)), callback) } - private fun sendConnectRequest(request: EthereumRequest, callback: ((Result) -> Unit)?) { + private fun sendConnectRequest(request: EthereumRequest, callback: ((Result) -> Unit)?) { sendRequest(request) { result -> when (result) { is Result.Error -> { @@ -304,12 +311,26 @@ class Ethereum ( ) { communicationClient?.trackEvent(Event.SDK_CONNECTION_REJECTED) } + + callback?.invoke(result) } is Result.Success -> { communicationClient?.trackEvent(Event.SDK_CONNECTION_AUTHORIZED) + val value = result.value + if(value is List<*>) { + val accounts = value.filterIsInstance() + val account = accounts.firstOrNull() + if (account != null) { + callback?.invoke(Result.Success(account)) + } else { + logger.error("Ethereum:: Expected List, but got $value") + callback?.invoke(Result.Error(RequestError(-1, "Unexpected result"))) + } + } else { + callback?.invoke(Result.Success(value as String)) + } } } - callback?.invoke(result) } } @@ -345,7 +366,7 @@ class Ethereum ( sendRequest(chainIdRequest) } - private fun requestAccounts(callback: ((Result) -> Unit)? = null) { + private fun requestAccounts(callback: ((Result) -> Unit)? = null) { logger.log("Ethereum:: Requesting ethereum accounts") connectRequestSent = true @@ -356,7 +377,7 @@ class Ethereum ( requestChainId() } - fun sendRequest(request: RpcRequest, callback: ((Result) -> Unit)? = null) { + fun sendRequest(request: RpcRequest, callback: ((Result) -> Unit)? = null) { logger.log("Ethereum:: Sending request $request") if (!connectRequestSent && selectedAddress.isEmpty()) { @@ -384,9 +405,29 @@ class Ethereum ( } } - fun sendRequestBatch(requests: List, callback: ((Result) -> Unit)? = null) { + fun sendRequestBatch(requests: List, callback: ((Result>) -> Unit)? = null) { val batchRequest = AnyRequest(method = EthereumMethod.METAMASK_BATCH.value, params = requests) - sendRequest(batchRequest, callback) + sendRequest(batchRequest) { result -> + when (result) { + is Result.Success -> { + val value = result.value + if (value is List<*>) { + val stringList = value.filterIsInstance() + if (stringList.size == value.size) { + callback?.invoke(Result.Success(stringList)) + } else { + // Handle case where not all elements were strings + callback?.invoke(Result.Error(RequestError(-1, "Expected List, but got a list with mixed types."))) + } + } else { + callback?.invoke(Result.Error(RequestError(-1, "Expected List, but got ${value?.javaClass?.name}"))) + } + } + is Result.Error -> { + callback?.invoke(result) + } + } + } } private fun openMetaMask() { diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/EthereumFlow.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/EthereumFlow.kt index b97a943b..77c0d88a 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/EthereumFlow.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/EthereumFlow.kt @@ -9,38 +9,35 @@ interface EthereumFlowWrapper { val chainId: String val selectedAddress: String val ethereumState: Flow - suspend fun connect() : Result + suspend fun connect() : Result fun disconnect(clearSession: Boolean) - suspend fun connectSign(message: String) : Result - suspend fun connectWith(request: EthereumRequest) : Result - suspend fun sendRequest(request: EthereumRequest) : Result - suspend fun sendRequestBatch(requests: List) : Result - - suspend fun getEthBalance(address: String, block: String) : Result - suspend fun getEthAccounts() : Result - - suspend fun getChainId() : Result - suspend fun getEthGasPrice() : Result - suspend fun getEthBlockNumber() : Result - suspend fun getEthEstimateGas() : Result - suspend fun getWeb3ClientVersion() : Result - - suspend fun sendRawTransaction(signedTransaction: String) : Result - suspend fun getBlockTransactionCountByHash(blockHash: String) : Result - suspend fun getBlockTransactionCountByNumber(blockNumber: String) : Result - suspend fun getTransactionCount(address: String, tagOrblockNumber: String) : Result - suspend fun sendTransaction(from: String, to: String, value: String) : Result - - suspend fun switchEthereumChain(targetChainId: String) : Result + suspend fun connectSign(message: String) : Result + suspend fun connectWith(request: EthereumRequest) : Result + suspend fun sendRequest(request: EthereumRequest) : Result + suspend fun sendRequestBatch(requests: List) : Result> + + suspend fun getEthBalance(address: String, block: String) : Result + suspend fun getEthAccounts() : Result> + + suspend fun getChainId() : Result + suspend fun getEthGasPrice() : Result + suspend fun getEthEstimateGas() : Result + suspend fun getWeb3ClientVersion() : Result + + suspend fun sendRawTransaction(signedTransaction: String) : Result + suspend fun getTransactionCount(address: String, tagOrblockNumber: String) : Result + suspend fun sendTransaction(from: String, to: String, value: String) : Result + + suspend fun switchEthereumChain(targetChainId: String) : Result suspend fun addEthereumChain(chainId: String, chainName: String, rpcUrls: List, iconUrls: List?, blockExplorerUrls: List?, - nativeCurrency: NativeCurrency) : Result + nativeCurrency: NativeCurrency) : Result - suspend fun personalSign(message: String, address: String) : Result - suspend fun ethSignTypedDataV4(typedData: Any, address: String) : Result + suspend fun personalSign(message: String, address: String) : Result + suspend fun ethSignTypedDataV4(typedData: Any, address: String) : Result } class EthereumFlow @@ -57,7 +54,7 @@ constructor( override val ethereumState = ethereum.ethereumState.asFlow() @OptIn(ExperimentalCoroutinesApi::class) - override suspend fun connect() : Result = suspendCancellableCoroutine { continuation -> + override suspend fun connect() : Result = suspendCancellableCoroutine { continuation -> ethereum.connect { result -> continuation.resume(result) { continuation.invokeOnCancellation {} @@ -66,7 +63,7 @@ constructor( } @OptIn(ExperimentalCoroutinesApi::class) - override suspend fun connectWith(request: EthereumRequest) : Result = suspendCancellableCoroutine { continuation -> + override suspend fun connectWith(request: EthereumRequest) : Result = suspendCancellableCoroutine { continuation -> ethereum.connectWith(request) { result -> continuation.resume(result) { continuation.invokeOnCancellation {} @@ -75,7 +72,7 @@ constructor( } @OptIn(ExperimentalCoroutinesApi::class) - override suspend fun connectSign(message: String) : Result = suspendCancellableCoroutine { continuation -> + override suspend fun connectSign(message: String) : Result = suspendCancellableCoroutine { continuation -> ethereum.connectSign(message) { result -> continuation.resume(result) { continuation.invokeOnCancellation {} @@ -84,7 +81,7 @@ constructor( } @OptIn(ExperimentalCoroutinesApi::class) - override suspend fun sendRequestBatch(requests: List) : Result = suspendCancellableCoroutine { continuation -> + override suspend fun sendRequestBatch(requests: List) : Result> = suspendCancellableCoroutine { continuation -> ethereum.sendRequestBatch(requests) { result -> continuation.resume(result) { continuation.invokeOnCancellation {} @@ -93,7 +90,7 @@ constructor( } @OptIn(ExperimentalCoroutinesApi::class) - override suspend fun sendRequest(request: EthereumRequest) : Result = suspendCancellableCoroutine { continuation -> + override suspend fun sendRequest(request: EthereumRequest) : Result = suspendCancellableCoroutine { continuation -> ethereum.sendRequest(request) { result -> continuation.resume(result) { continuation.invokeOnCancellation {} @@ -102,62 +99,62 @@ constructor( } @OptIn(ExperimentalCoroutinesApi::class) - private suspend fun ethereumRequest(method: EthereumMethod, params: Any?): Result = suspendCancellableCoroutine { continuation -> + private suspend fun ethereumRequest(method: EthereumMethod, params: Any?): Result = suspendCancellableCoroutine { continuation -> val request = EthereumRequest(method = method.value, params = params) ethereum.sendRequest(request) { result -> - continuation.resume(result) { + val convertedResult = when (result) { + is Result.Success<*> -> { + try { + @Suppress("UNCHECKED_CAST") + Result.Success(result.value as T) + } catch (e: ClassCastException) { + Result.Error(RequestError(-1, "Type conversion error: ${e.message}")) + } + } + is Result.Error -> result + } + continuation.resume(convertedResult) { continuation.invokeOnCancellation {} } } } - override suspend fun getChainId() : Result = + override suspend fun getChainId() : Result = ethereumRequest(method = EthereumMethod.ETH_CHAIN_ID, params = null) - override suspend fun getEthAccounts() : Result = + override suspend fun getEthAccounts() : Result> = ethereumRequest(method = EthereumMethod.ETH_ACCOUNTS, params = null) - override suspend fun getEthGasPrice() : Result = + override suspend fun getEthGasPrice() : Result = ethereumRequest(method = EthereumMethod.ETH_GAS_PRICE, params = listOf()) - override suspend fun getEthBalance(address: String, block: String) : Result = + override suspend fun getEthBalance(address: String, block: String) : Result = ethereumRequest(method = EthereumMethod.ETH_GET_BALANCE, params = listOf(address, block)) - override suspend fun getEthBlockNumber() : Result = - ethereumRequest(method = EthereumMethod.ETH_BLOCK_NUMBER, params = null) - - override suspend fun getEthEstimateGas() : Result = + override suspend fun getEthEstimateGas() : Result = ethereumRequest(method = EthereumMethod.ETH_ESTIMATE_GAS, params = null) - override suspend fun getWeb3ClientVersion() : Result = + override suspend fun getWeb3ClientVersion() : Result = ethereumRequest(method = EthereumMethod.WEB3_CLIENT_VERSION, params = listOf()) - override suspend fun personalSign(message: String, address: String) : Result = + override suspend fun personalSign(message: String, address: String) : Result = ethereumRequest(method = EthereumMethod.PERSONAL_SIGN, params = listOf(address, message)) - override suspend fun ethSignTypedDataV4(typedData: Any, address: String) : Result = + override suspend fun ethSignTypedDataV4(typedData: Any, address: String) : Result = ethereumRequest(method = EthereumMethod.ETH_SIGN_TYPED_DATA_V4, params = listOf(address, typedData)) - override suspend fun sendTransaction(from: String, to: String, value: String) : Result = + override suspend fun sendTransaction(from: String, to: String, value: String) : Result = ethereumRequest(method = EthereumMethod.ETH_SEND_TRANSACTION, params = listOf(mapOf( "from" to from, "to" to to, "value" to value ))) - override suspend fun sendRawTransaction(signedTransaction: String) : Result = + override suspend fun sendRawTransaction(signedTransaction: String) : Result = ethereumRequest(method = EthereumMethod.ETH_SEND_RAW_TRANSACTION, params = listOf(signedTransaction)) - - override suspend fun getBlockTransactionCountByNumber(blockNumber: String): Result = - ethereumRequest(method = EthereumMethod.ETH_GET_BLOCK_TRANSACTION_COUNT_BY_NUMBER, params = listOf(blockNumber)) - - override suspend fun getBlockTransactionCountByHash(blockHash: String): Result = - ethereumRequest(method = EthereumMethod.ETH_GET_BLOCK_TRANSACTION_COUNT_BY_HASH, params = listOf(blockHash)) - - - override suspend fun getTransactionCount(address: String, tagOrblockNumber: String): Result = + override suspend fun getTransactionCount(address: String, tagOrblockNumber: String): Result = ethereumRequest(method = EthereumMethod.ETH_GET_TRANSACTION_COUNT, params = listOf(address, tagOrblockNumber)) @@ -166,7 +163,7 @@ constructor( rpcUrls: List, iconUrls: List?, blockExplorerUrls: List?, - nativeCurrency: NativeCurrency) : Result = + nativeCurrency: NativeCurrency) : Result = ethereumRequest(method = EthereumMethod.ADD_ETHEREUM_CHAIN, params = listOf(mapOf( "chainId" to chainId, "chainName" to chainName, @@ -176,7 +173,7 @@ constructor( "nativeCurrency" to nativeCurrency ))) - override suspend fun switchEthereumChain(targetChainId: String): Result = + override suspend fun switchEthereumChain(targetChainId: String): Result = ethereumRequest(method = EthereumMethod.SWITCH_ETHEREUM_CHAIN, params = listOf(mapOf("chainId" to targetChainId))) override fun disconnect(clearSession: Boolean) { diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/InfuraProvider.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/InfuraProvider.kt index 03956de1..85fa2f44 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/InfuraProvider.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/InfuraProvider.kt @@ -70,7 +70,7 @@ open class InfuraProvider(private val infuraAPIKey: String, private val logger: return !rpcUrls[chainId].isNullOrEmpty() } - open fun makeRequest(request: RpcRequest, chainId: String, dappMetadata: DappMetadata, callback: ((Result) -> Unit)?) { + open fun makeRequest(request: RpcRequest, chainId: String, dappMetadata: DappMetadata, callback: ((Result) -> Unit)?) { val httpClient = HttpClient() val devicePlatformInfo = DeviceInfo.platformDescription @@ -90,13 +90,13 @@ open class InfuraProvider(private val infuraAPIKey: String, private val logger: logger.log("InfuraProvider:: response $response") try { val result = JSONObject(response).optString("result") ?: "" - callback?.invoke(Result.Success.Item(result)) + callback?.invoke(Result.Success(result)) } catch (e: Exception) { logger.error("InfuraProvider:: error: ${e.message}") callback?.invoke(Result.Error(RequestError(-1, response))) } } else if (ioException != null) { - callback?.invoke(Result.Success.Item(ioException.message ?: "")) + callback?.invoke(Result.Success(ioException.message ?: "")) } } } diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Result.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Result.kt index 1ded3c06..ea169d90 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Result.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/Result.kt @@ -1,11 +1,16 @@ package io.metamask.androidsdk -sealed class Result { - sealed class Success: Result() { - data class Item(val value: String): Success() - data class Items(val value: List): Success() - data class ItemMap(val value: Map): Success() - } +// sealed class Result { +// sealed class Success: Result() { +// data class Item(val value: String): Success() +// data class Items(val value: List): Success() +// data class ItemMap(val value: Map): Success() +// } - data class Error(val error: RequestError): Result() +// data class Error(val error: RequestError): Result() +// } + +sealed class Result { + data class Success(val value: T) : Result() + data class Error(val error: RequestError) : Result() } diff --git a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/SubmittedRequest.kt b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/SubmittedRequest.kt index c5bfdfd0..8f3f67b0 100644 --- a/metamask-android-sdk/src/main/java/io/metamask/androidsdk/SubmittedRequest.kt +++ b/metamask-android-sdk/src/main/java/io/metamask/androidsdk/SubmittedRequest.kt @@ -4,5 +4,5 @@ data class SubmittedRequest( val request: RpcRequest, - val callback: (Result) -> Unit + val callback: (Result) -> Unit ) diff --git a/metamask-android-sdk/src/test/java/io/metamask/androidsdk/EthereumTests.kt b/metamask-android-sdk/src/test/java/io/metamask/androidsdk/EthereumTests.kt index 09c5be1b..3872eecc 100644 --- a/metamask-android-sdk/src/test/java/io/metamask/androidsdk/EthereumTests.kt +++ b/metamask-android-sdk/src/test/java/io/metamask/androidsdk/EthereumTests.kt @@ -103,7 +103,7 @@ class EthereumTests { @Test fun testEthereumConnect() { - val testResult: Result = Result.Success.Item("0x123456") + val testResult: Result = Result.Success("0x123456") var callbackResult: Result? = null prepareCommunicationClient() @@ -173,7 +173,7 @@ class EthereumTests { } val requestId = findRequestIdForAccountRequest(EthereumMethod.METAMASK_CONNECT_WITH) - val testResult: Result = Result.Success.Item("0x24680") + val testResult: Result = Result.Success("0x24680") communicationClient.completeRequest(requestId, testResult) assertTrue(callbackResult is Result.Success) @@ -197,7 +197,7 @@ class EthereumTests { } val requestId = findRequestIdForAccountRequest(EthereumMethod.METAMASK_CONNECT_SIGN) - val testResult: Result = Result.Success.Item("0xdhjdheeeeeew") + val testResult: Result = Result.Success("0xdhjdheeeeeew") communicationClient.completeRequest(requestId, testResult) // Assertions to verify the correct handling @@ -252,7 +252,7 @@ class EthereumTests { ethereum.sendRequest(request) { result -> assertTrue(result is Result.Success) when (result) { - is Result.Success.Item -> { + is Result.Success -> { assertEquals(mockResponse, result.value) } else -> { diff --git a/metamask-android-sdk/src/test/java/io/metamask/androidsdk/MockInfuraProvider.kt b/metamask-android-sdk/src/test/java/io/metamask/androidsdk/MockInfuraProvider.kt index 13ef5dbb..d52ef3bb 100644 --- a/metamask-android-sdk/src/test/java/io/metamask/androidsdk/MockInfuraProvider.kt +++ b/metamask-android-sdk/src/test/java/io/metamask/androidsdk/MockInfuraProvider.kt @@ -5,7 +5,7 @@ class MockInfuraProvider(private val infuraAPIKey: String, private val logger: L override fun makeRequest(request: RpcRequest, chainId: String, dappMetadata: DappMetadata, callback: ((Result) -> Unit)?) { if (mockResponse != null) { - callback?.invoke(Result.Success.Item(mockResponse!!)) + callback?.invoke(Result.Success(mockResponse!!)) } else { callback?.invoke(Result.Error(RequestError(-1, "No response set in MockInfuraProvider"))) }