Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
14 changes: 12 additions & 2 deletions app/src/main/java/jfyg/etherscan/helloetherescan/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import io.reactivex.rxkotlin.subscribeBy
import jfyg.account.Account
import jfyg.contract.SmartContract
import jfyg.stat.Stat
import jfyg.transaction.TransactionContractStatus
import kotlinx.android.synthetic.main.activity_main.*


Expand All @@ -23,6 +24,7 @@ class MainActivity : AppCompatActivity() {
val stat = Stat()
val account = Account()
val contract = SmartContract()
val transaction = TransactionContractStatus()


fab.setOnClickListener {
Expand All @@ -34,18 +36,26 @@ class MainActivity : AppCompatActivity() {
}

//account test
account.getTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3").observeOn(AndroidSchedulers.mainThread())
account.getTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3")
.observeOn(AndroidSchedulers.mainThread())
?.subscribeBy {
Log.d(TAG, "The Account Size of Transactions is: ${it.size}")
}

//contracts test
contract.getContractABI("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413").observeOn(AndroidSchedulers.mainThread())
contract.getContractABI("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413")
.observeOn(AndroidSchedulers.mainThread())
?.subscribeBy {
Log.d(TAG, "The ABI has returned: $it")
}

//transaction test
transaction.getTransactionExecutionStatus("0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a")
.observeOn(AndroidSchedulers.mainThread())
?.subscribeBy {
Log.d(TAG, "The transaction's Error Status is: ${it.isError} and " +
"transactions's error description is: ${it.errDescription}")
}
}
}

Expand Down
5 changes: 5 additions & 0 deletions etherscanapi/src/main/java/jfyg/model/TxExecutionStatus.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package jfyg.model

data class TxExecutionStatus(var isError: String? = null,

var errDescription: String? = null)
3 changes: 3 additions & 0 deletions etherscanapi/src/main/java/jfyg/model/TxReceiptStatus.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package jfyg.model

data class TxReceiptStatus(var status: String? = null)
14 changes: 14 additions & 0 deletions etherscanapi/src/main/java/jfyg/network/NetworkService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import jfyg.response.account.AccountTransactionResponse
import jfyg.response.contract.SmartContractResponse
import jfyg.response.stat.StatPriceResponse
import jfyg.response.stat.StatSupplyResponse
import jfyg.response.transaction.TransactionContractExecutionResponse
import jfyg.response.transaction.TransactionContractReceiptResponse
import retrofit2.http.GET
import retrofit2.http.Query

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

@GET("api")
fun getContractTransactionExecution(@Query("module") module: String?,
@Query("action") action: String?,
@Query("txhash") address: String?,
@Query("apikey") apikey: String?): Single<TransactionContractExecutionResponse>

@GET("api")
fun getContractTransactionReceipt(@Query("module") module: String?,
@Query("action") action: String?,
@Query("txhash") address: String?,
@Query("apikey") apikey: String?): Single<TransactionContractReceiptResponse>

}
15 changes: 14 additions & 1 deletion etherscanapi/src/main/java/jfyg/queries/QueryMediator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,14 @@ import jfyg.response.account.AccountTransactionResponse
import jfyg.response.contract.SmartContractResponse
import jfyg.response.stat.StatPriceResponse
import jfyg.response.stat.StatSupplyResponse
import jfyg.response.transaction.TransactionContractExecutionResponse
import jfyg.response.transaction.TransactionContractReceiptResponse

/**
* A mediator between the responses and errors that come from every query
*/
internal class QueryMediator : AccountQueries, StatQueries, SmartContractQueries {
internal class QueryMediator : AccountQueries, StatQueries, SmartContractQueries, TransactionQueries {


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

override fun transactionContractExecutionStatus(module: String?,
action: String?,
txHash: String?): Single<TransactionContractExecutionResponse> =
RestClient().getQuery().getContractTransactionExecution(module, action, txHash, ApiKey.takeOff.callApiKey())

override fun transactionContractReceiptStatus(module: String?,
action: String?,
txHash: String?): Single<TransactionContractReceiptResponse> =
RestClient().getQuery().getContractTransactionReceipt(module, action, txHash, ApiKey.takeOff.callApiKey())

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package jfyg.queries

import io.reactivex.Single
import jfyg.response.account.AccountBalanceResponse
import jfyg.response.contract.SmartContractResponse

internal interface SmartContractQueries {

/**
* Get EBI for a contracts from a given address
* Get ABI for a contracts from a given address
*/
fun abiContract(module: String?,
action: String?,
Expand Down
23 changes: 23 additions & 0 deletions etherscanapi/src/main/java/jfyg/queries/TransactionQueries.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package jfyg.queries

import io.reactivex.Single
import jfyg.response.transaction.TransactionContractExecutionResponse
import jfyg.response.transaction.TransactionContractReceiptResponse

internal interface TransactionQueries {

/**
* Check Contract Execution Status
*/
fun transactionContractExecutionStatus(module: String?,
action: String?,
txHash: String?): Single<TransactionContractExecutionResponse>
/**
* Check Contract Receipt Status
*/
fun transactionContractReceiptStatus(module: String?,
action: String?,
txHash: String?): Single<TransactionContractReceiptResponse>


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package jfyg.response.transaction

import jfyg.model.TxExecutionStatus
import jfyg.response.BaseResponse

/**
* Check Contract Execution Status
*/
internal data class TransactionContractExecutionResponse(var result: TxExecutionStatus) : BaseResponse()
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package jfyg.response.transaction

import jfyg.model.TxReceiptStatus
import jfyg.response.BaseResponse

/**
* Check Contract Receipt Status
*/
internal data class TransactionContractReceiptResponse(var result: TxReceiptStatus) : BaseResponse()
28 changes: 28 additions & 0 deletions etherscanapi/src/main/java/jfyg/transaction/TransactionContract.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package jfyg.transaction

import io.reactivex.Single
import jfyg.model.TxExecutionStatus
import jfyg.model.TxReceiptStatus

interface TransactionContract {

/**
* Return transaction Execution Status
*/
fun getTransactionExecutionStatus(txHash: String): Single<TxExecutionStatus>

/**
* Return transaction Receipt Status
*/
fun getTransactionReceiptStatus(txHash: String): Single<TxReceiptStatus>

/**
* Return network status
*/
fun getNetworkStatus(): Single<String>

/**
* Return network message
*/
fun getNetworkMessage(): Single<String>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package jfyg.transaction

import io.reactivex.Single
import jfyg.model.TxExecutionStatus
import jfyg.model.TxReceiptStatus
import jfyg.queries.QueryMediator


class TransactionContractStatus : TransactionContract {
private val query = QueryMediator()
private val genericNetworkQuery = query.transactionContractReceiptStatus("transaction",
"getstatus",
"0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a")


override fun getTransactionExecutionStatus(txHash: String): Single<TxExecutionStatus> =
query.transactionContractExecutionStatus("transaction",
"getstatus",
txHash).map { it.result }

override fun getTransactionReceiptStatus(txHash: String): Single<TxReceiptStatus> =
query.transactionContractReceiptStatus("transaction",
"gettxreceiptstatus",
txHash).map { it.result }

override fun getNetworkStatus(): Single<String> = genericNetworkQuery.map { it.status }

override fun getNetworkMessage(): Single<String> = genericNetworkQuery.map { it.message }


}