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
7 changes: 7 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])


/**
Because RxAndroid releases are few and far between, it is recommended you also
explicitly depend on RxJava's latest version for bug fixes and new features.
*/
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'
// kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

Expand Down
48 changes: 18 additions & 30 deletions app/src/main/java/jfyg/etherscan/helloetherescan/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package jfyg.etherscan.helloetherescan
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.rxkotlin.subscribeBy
import jfyg.account.Account
import jfyg.stat.Stat
import kotlinx.android.synthetic.main.activity_main.*
Expand All @@ -16,41 +18,27 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)

//************************************************ Used To Test Library
//************************************************ Used To Test Singles returned from etherscanapi Module
val stat = Stat()
val account = Account()


fab.setOnClickListener {

//stat
Log.d(TAG, "The Stat Status is ${stat.getNetworkStatus()}")
Log.d(TAG, "The Stat Message is ${stat.getNetworkMessage()}")
Log.d(TAG, "The current price of Ether in Btc: ${stat.getLastPriceInBtc()}")
Log.d(TAG, "Timestamp price in Btc: ${stat.getBtcTimestamp()}")
Log.d(TAG, "Timestamp price in Ether: ${stat.getEthTimestamp()}")
Log.d(TAG, "The current price of Ether in Usd: ${stat.getLastPriceInUsd()}")
Log.d(TAG, "The total supply of Ether: ${stat.getTotalSupply()}")
Log.d(TAG, "The total supply of Ether in Wei: ${stat.getTotalSupplyInWei()}")

//account
Log.d(TAG, "The Account Status is: ${account.getNetworkStatus()}")
Log.d(TAG, "The Account Message is: ${account.getNetworkMessage()}")
Log.d(TAG, "The Account Balance is: ${account.getBalance("0x82e4499D4b2A669831a3881d61BB24f7b620c61a")}")
Log.d(TAG, "The Account(1) Balance is: ${account.getMultiBalance(threeAddresses())?.get(1)?.balance}")
Log.d(TAG, "The Account Size of Blocks is: ${account.getBlocks("0x82e4499D4b2A669831a3881d61BB24f7b620c61a")?.size}")
Log.d(TAG, "The Account Size of Transactions is: ${account.getTransactions("0x82e4499D4b2A669831a3881d61BB24f7b620c61a")?.size}")
Log.d(TAG, "The Account Size of Internal Transactions is: ${account.getInternalTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3")?.size}")

//transactions
}
}
//stat test
stat.getLastPriceInBtc()?.observeOn(AndroidSchedulers.mainThread())
?.subscribeBy {
Log.d(TAG, "The current price of Ether in Btc: $it")
}

fun threeAddresses(): ArrayList<String> {
val address = ArrayList<String>()
address.add("0x82e4499D4b2A669831a3881d61BB24f7b620c61a")
address.add("0x63a9975ba31b0b9626b34300f7f627147df1f526")
address.add("0x198ef1ec325a96cc354c7266a038be8b5c558f67")
return address
//account test
account.getTransactions("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3")?.observeOn(AndroidSchedulers.mainThread())
?.subscribeBy {
Log.d(TAG, "The Account Size of Transactions is: ${it.size}")
}

//transaction test
}
}

}
}
4 changes: 2 additions & 2 deletions etherscanapi/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ dependencies {

/**
Because RxAndroid releases are few and far between, it is recommended you also
explicitly depend on RxJava's latest version for bug fixes and new features.
explicitly depend on RxKotlin's latest version for bug fixes and new features.
*/
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'

// gson
implementation 'com.google.code.gson:gson:2.8.2'
Expand Down
72 changes: 42 additions & 30 deletions etherscanapi/src/main/java/jfyg/account/Account.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package jfyg.account

import io.reactivex.Single
import jfyg.model.Balances
import jfyg.model.Blocks
import jfyg.model.Transactions
Expand All @@ -10,38 +11,49 @@ import jfyg.utils.QueryUtils
class Account : AccountContract {

private val query = QueryMediator()
private val genericNetworkQuery = query.accountBalance("account", "balance",
"0x82e4499D4b2A669831a3881d61BB24f7b620c61a", "latest")
private val genericNetworkQuery = query.accountBalance("account",
"balance",
"0x82e4499D4b2A669831a3881d61BB24f7b620c61a",
"latest")

private val queryUtil = QueryUtils()

override fun getBalance(account: String?): Double? =
query.accountBalance("account", "balance",
account, "latest").let { query.fetchAccountBalance()?.result?.toDouble() }


override fun getMultiBalance(accounts: ArrayList<String>?): ArrayList<Balances>? =
query.accountMultiBalance("account", "balancemulti",
queryUtil.retrieveAccounts(accounts), "latest").let { query.fetchAccountMultiBalance()?.result }

//todo #29
override fun getBlocks(account: String?): ArrayList<Blocks>? =
query.accountBlock("account", "getminedblocks",
account, "blocks").let { query.fetchAccountBlock()?.result }

//todo #29
override fun getTransactions(account: String?): ArrayList<Transactions>? =
query.accountTransactions("account", "txlist",
account, "0", "99999999",
"asc").let { query.fetchAccountTransaction()?.result }

override fun getInternalTransactions(account: String?): ArrayList<TransactionsInternal>? =
query.accountInternalTransactions("account", "txlistinternal",
account, "0", "99999999",
"asc").let { query.fetchAccountInternalTransaction()?.result }

override fun getNetworkStatus(): String? = genericNetworkQuery.let { query.fetchAccountBalance()?.status }

override fun getNetworkMessage(): String? = genericNetworkQuery.let { query.fetchAccountBalance()?.message }
override fun getBalance(account: String?): Single<Double>? =
query.accountBalance("account",
"balance",
account,
"latest")?.map { it.result?.toDouble() }

override fun getMultiBalance(accounts: ArrayList<String>?): Single<ArrayList<Balances>>? =
query.accountMultiBalance("account",
"balancemulti",
queryUtil.retrieveAccounts(accounts),
"latest")?.map { it.result }

override fun getBlocks(account: String?): Single<ArrayList<Blocks>>? =
query.accountBlock("account",
"getminedblocks",
account,
"blocks")?.map { it.result }

override fun getTransactions(account: String?): Single<ArrayList<Transactions>>? =
query.accountTransactions("account",
"txlist",
account,
"0",
"99999999",
"asc")?.map { it.result }

override fun getInternalTransactions(account: String?): Single<ArrayList<TransactionsInternal>>? =
query.accountInternalTransactions("account",
"txlistinternal",
account,
"0",
"99999999",
"asc")?.map { it.result }

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

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

}
15 changes: 8 additions & 7 deletions etherscanapi/src/main/java/jfyg/account/AccountContract.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package jfyg.account

import io.reactivex.Single
import jfyg.model.Balances
import jfyg.model.Blocks
import jfyg.model.Transactions
Expand All @@ -10,36 +11,36 @@ internal interface AccountContract {
/**
* Return network status
*/
fun getNetworkStatus(): String?
fun getNetworkStatus(): Single<String>?

/**
* Return network message
*/
fun getNetworkMessage(): String?
fun getNetworkMessage(): Single<String>?

/**
* Return account balance
*/
fun getBalance(account: String?): Double?
fun getBalance(account: String?): Single<Double>?

/**
* Return balances of multiple accounts separated by commas
*/
fun getMultiBalance(accounts: ArrayList<String>?): ArrayList<Balances>?
fun getMultiBalance(accounts: ArrayList<String>?): Single<ArrayList<Balances>>?

/**
* Get list of blocks mined by address
*/
fun getBlocks(account: String?): ArrayList<Blocks>?
fun getBlocks(account: String?): Single<ArrayList<Blocks>>?

/**
* Get a list of 'Normal' Transactions By Address
*/
fun getTransactions(account: String?): ArrayList<Transactions>?
fun getTransactions(account: String?): Single<ArrayList<Transactions>>?

/**
* Get a list of 'Internal' Transactions by Address
*/
fun getInternalTransactions(account: String?): ArrayList<TransactionsInternal>?
fun getInternalTransactions(account: String?): Single<ArrayList<TransactionsInternal>>?

}
22 changes: 6 additions & 16 deletions etherscanapi/src/main/java/jfyg/queries/AccountQueries.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package jfyg.queries

import io.reactivex.disposables.Disposable
import io.reactivex.Single
import jfyg.response.account.AccountBalanceResponse
import jfyg.response.account.AccountBlockResponse
import jfyg.response.account.AccountInternalTransactionResponse
Expand All @@ -15,23 +15,23 @@ internal interface AccountQueries {
fun accountBalance(module: String?,
action: String?,
address: String?,
tag: String?): Disposable?
tag: String?): Single<AccountBalanceResponse>?

/**
* Get Ether Balance for multiple Addresses in a single call
*/
fun accountMultiBalance(module: String?,
action: String?,
address: String?,
tag: String?): Disposable?
tag: String?): Single<AccountMultiBalanceResponse>?

/**
* Get list of blocks mined by address
*/
fun accountBlock(module: String?,
action: String?,
address: String?,
blocktype: String?): Disposable?
blocktype: String?): Single<AccountBlockResponse>?

/**
* Get a list of 'Normal' transactions by address
Expand All @@ -41,7 +41,7 @@ internal interface AccountQueries {
address: String?,
startblock: String?,
endblock: String?,
sort: String?): Disposable?
sort: String?): Single<AccountTransactionResponse>?

/**
* Get a list of 'Internal' transactions by address
Expand All @@ -51,16 +51,6 @@ internal interface AccountQueries {
address: String?,
startblock: String?,
endblock: String?,
sort: String?): Disposable?

fun handleResponse(response: AccountBalanceResponse)

fun handleResponse(response: AccountMultiBalanceResponse)

fun handleResponse(response: AccountBlockResponse)

fun handleResponse(response: AccountTransactionResponse)

fun handleResponse(response: AccountInternalTransactionResponse)
sort: String?): Single<AccountInternalTransactionResponse>?

}
Loading