Skip to content

Commit 80861a8

Browse files
author
Ebenezer Ackon
committed
Support Handling contract Transactions #15
1 parent 5dd26d6 commit 80861a8

File tree

11 files changed

+149
-5
lines changed

11 files changed

+149
-5
lines changed

app/src/main/java/jfyg/etherscan/helloetherescan/MainActivity.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import io.reactivex.rxkotlin.subscribeBy
88
import jfyg.account.Account
99
import jfyg.contract.SmartContract
1010
import jfyg.stat.Stat
11+
import jfyg.transaction.TransactionContractStatus
1112
import kotlinx.android.synthetic.main.activity_main.*
1213

1314

@@ -23,6 +24,7 @@ class MainActivity : AppCompatActivity() {
2324
val stat = Stat()
2425
val account = Account()
2526
val contract = SmartContract()
27+
val transaction = TransactionContractStatus()
2628

2729

2830
fab.setOnClickListener {
@@ -34,18 +36,26 @@ class MainActivity : AppCompatActivity() {
3436
}
3537

3638
//account test
37-
account.getTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3").observeOn(AndroidSchedulers.mainThread())
39+
account.getTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3")
40+
.observeOn(AndroidSchedulers.mainThread())
3841
?.subscribeBy {
3942
Log.d(TAG, "The Account Size of Transactions is: ${it.size}")
4043
}
4144

4245
//contracts test
43-
contract.getContractABI("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413").observeOn(AndroidSchedulers.mainThread())
46+
contract.getContractABI("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413")
47+
.observeOn(AndroidSchedulers.mainThread())
4448
?.subscribeBy {
4549
Log.d(TAG, "The ABI has returned: $it")
4650
}
4751

4852
//transaction test
53+
transaction.getTransactionExecutionStatus("0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a")
54+
.observeOn(AndroidSchedulers.mainThread())
55+
?.subscribeBy {
56+
Log.d(TAG, "The transaction's Error Status is: ${it.isError} and " +
57+
"transactions's error description is: ${it.errDescription}")
58+
}
4959
}
5060
}
5161

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package jfyg.model
2+
3+
data class TxExecutionStatus(var isError: String? = null,
4+
5+
var errDescription: String? = null)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package jfyg.model
2+
3+
data class TxReceiptStatus(var status: String? = null)

etherscanapi/src/main/java/jfyg/network/NetworkService.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import jfyg.response.account.AccountTransactionResponse
99
import jfyg.response.contract.SmartContractResponse
1010
import jfyg.response.stat.StatPriceResponse
1111
import jfyg.response.stat.StatSupplyResponse
12+
import jfyg.response.transaction.TransactionContractExecutionResponse
13+
import jfyg.response.transaction.TransactionContractReceiptResponse
1214
import retrofit2.http.GET
1315
import retrofit2.http.Query
1416

@@ -72,4 +74,16 @@ internal interface NetworkService {
7274
@Query("address") address: String?,
7375
@Query("apikey") apikey: String?): Single<SmartContractResponse>
7476

77+
@GET("api")
78+
fun getContractTransactionExecution(@Query("module") module: String?,
79+
@Query("action") action: String?,
80+
@Query("txhash") address: String?,
81+
@Query("apikey") apikey: String?): Single<TransactionContractExecutionResponse>
82+
83+
@GET("api")
84+
fun getContractTransactionReceipt(@Query("module") module: String?,
85+
@Query("action") action: String?,
86+
@Query("txhash") address: String?,
87+
@Query("apikey") apikey: String?): Single<TransactionContractReceiptResponse>
88+
7589
}

etherscanapi/src/main/java/jfyg/queries/QueryMediator.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ import jfyg.response.account.AccountTransactionResponse
1111
import jfyg.response.contract.SmartContractResponse
1212
import jfyg.response.stat.StatPriceResponse
1313
import jfyg.response.stat.StatSupplyResponse
14+
import jfyg.response.transaction.TransactionContractExecutionResponse
15+
import jfyg.response.transaction.TransactionContractReceiptResponse
1416

1517
/**
1618
* A mediator between the responses and errors that come from every query
1719
*/
18-
internal class QueryMediator : AccountQueries, StatQueries, SmartContractQueries {
20+
internal class QueryMediator : AccountQueries, StatQueries, SmartContractQueries, TransactionQueries {
21+
1922

2023
override fun accountBalance(module: String?,
2124
action: String?,
@@ -63,4 +66,14 @@ internal class QueryMediator : AccountQueries, StatQueries, SmartContractQueries
6366
action: String): Single<StatSupplyResponse> =
6467
RestClient().getQuery().getStatSupply(module, action, ApiKey.takeOff.callApiKey())
6568

69+
override fun transactionContractExecutionStatus(module: String?,
70+
action: String?,
71+
txHash: String?): Single<TransactionContractExecutionResponse> =
72+
RestClient().getQuery().getContractTransactionExecution(module, action, txHash, ApiKey.takeOff.callApiKey())
73+
74+
override fun transactionContractReceiptStatus(module: String?,
75+
action: String?,
76+
txHash: String?): Single<TransactionContractReceiptResponse> =
77+
RestClient().getQuery().getContractTransactionReceipt(module, action, txHash, ApiKey.takeOff.callApiKey())
78+
6679
}

etherscanapi/src/main/java/jfyg/queries/SmartContractQueries.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package jfyg.queries
22

33
import io.reactivex.Single
4-
import jfyg.response.account.AccountBalanceResponse
54
import jfyg.response.contract.SmartContractResponse
65

76
internal interface SmartContractQueries {
87

98
/**
10-
* Get EBI for a contracts from a given address
9+
* Get ABI for a contracts from a given address
1110
*/
1211
fun abiContract(module: String?,
1312
action: String?,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package jfyg.queries
2+
3+
import io.reactivex.Single
4+
import jfyg.response.transaction.TransactionContractExecutionResponse
5+
import jfyg.response.transaction.TransactionContractReceiptResponse
6+
7+
internal interface TransactionQueries {
8+
9+
/**
10+
* Check Contract Execution Status
11+
*/
12+
fun transactionContractExecutionStatus(module: String?,
13+
action: String?,
14+
txHash: String?): Single<TransactionContractExecutionResponse>
15+
/**
16+
* Check Contract Receipt Status
17+
*/
18+
fun transactionContractReceiptStatus(module: String?,
19+
action: String?,
20+
txHash: String?): Single<TransactionContractReceiptResponse>
21+
22+
23+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package jfyg.response.transaction
2+
3+
import jfyg.model.TxExecutionStatus
4+
import jfyg.response.BaseResponse
5+
6+
/**
7+
* Check Contract Execution Status
8+
*/
9+
internal data class TransactionContractExecutionResponse(var result: TxExecutionStatus) : BaseResponse()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package jfyg.response.transaction
2+
3+
import jfyg.model.TxReceiptStatus
4+
import jfyg.response.BaseResponse
5+
6+
/**
7+
* Check Contract Receipt Status
8+
*/
9+
internal data class TransactionContractReceiptResponse(var result: TxReceiptStatus) : BaseResponse()
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package jfyg.transaction
2+
3+
import io.reactivex.Single
4+
import jfyg.model.TxExecutionStatus
5+
import jfyg.model.TxReceiptStatus
6+
7+
interface TransactionContract {
8+
9+
/**
10+
* Return transaction Execution Status
11+
*/
12+
fun getTransactionExecutionStatus(txHash: String): Single<TxExecutionStatus>
13+
14+
/**
15+
* Return transaction Receipt Status
16+
*/
17+
fun getTransactionReceiptStatus(txHash: String): Single<TxReceiptStatus>
18+
19+
/**
20+
* Return network status
21+
*/
22+
fun getNetworkStatus(): Single<String>
23+
24+
/**
25+
* Return network message
26+
*/
27+
fun getNetworkMessage(): Single<String>
28+
}

0 commit comments

Comments
 (0)