Merge pull request #4 from zcash/feature/update-sdk

Update SDK to latest version and integrate with changes.
This commit is contained in:
Kevin Gorham 2019-05-21 04:48:43 -07:00 committed by GitHub
commit d0bed87640
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 29 additions and 117 deletions

View File

@ -31,6 +31,15 @@ internal object SynchronizerModule {
return PreferenceManager.getDefaultSharedPreferences(ZcashWalletApplication.instance) return PreferenceManager.getDefaultSharedPreferences(ZcashWalletApplication.instance)
} }
@JvmStatic
@Provides
@Singleton
fun provideJniConverter(): JniConverter {
return JniConverter().also {
if (BuildConfig.DEBUG) it.initLogs()
}
}
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
@ -58,11 +67,6 @@ internal object SynchronizerModule {
return server return server
} }
@JvmStatic
@Provides
@Singleton
fun provideTwig(): Twig = TroubleshootingTwig() // troubleshoot on debug, silent on release
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
@ -73,8 +77,8 @@ internal object SynchronizerModule {
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideProcessor(application: ZcashWalletApplication, converter: JniConverter, walletConfig: WalletConfig, twigger: Twig): CompactBlockProcessor { fun provideProcessor(application: ZcashWalletApplication, converter: JniConverter, walletConfig: WalletConfig): CompactBlockProcessor {
return CompactBlockProcessor(application, converter, walletConfig.cacheDbName, walletConfig.dataDbName, logger = twigger) return CompactBlockProcessor(application, converter, walletConfig.cacheDbName, walletConfig.dataDbName)
} }
@JvmStatic @JvmStatic
@ -101,17 +105,8 @@ internal object SynchronizerModule {
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideManager(wallet: Wallet, repository: TransactionRepository, downloader: CompactBlockStream, twigger: Twig): ActiveTransactionManager { fun provideManager(wallet: Wallet, repository: TransactionRepository, downloader: CompactBlockStream): ActiveTransactionManager {
return ActiveTransactionManager(repository, downloader.connection, wallet, twigger) return ActiveTransactionManager(repository, downloader.connection, wallet)
}
@JvmStatic
@Provides
@Singleton
fun provideJniConverter(): JniConverter {
return JniConverter().also {
if (BuildConfig.DEBUG) it.initLogs()
}
} }
@JvmStatic @JvmStatic
@ -124,15 +119,7 @@ internal object SynchronizerModule {
manager: ActiveTransactionManager, manager: ActiveTransactionManager,
wallet: Wallet wallet: Wallet
): Synchronizer { ): Synchronizer {
return SdkSynchronizer( return SdkSynchronizer(downloader, processor, repository, manager, wallet, batchSize = 100, blockPollFrequency = 50_000L)
downloader,
processor,
repository,
manager,
wallet,
batchSize = 100,
blockPollFrequency = 50_000L
)
} }
} }

View File

@ -1,59 +0,0 @@
package cash.z.android.wallet.data
import android.text.format.DateUtils
import cash.z.wallet.sdk.dao.WalletTransaction
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.produce
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import java.math.BigDecimal
import kotlin.math.roundToLong
import kotlin.random.Random
import kotlin.random.nextInt
import kotlin.random.nextLong
class SampleTransactionRepository(val scope: CoroutineScope) : TransactionRepository {
/**
* Just send a sample stream of balances, every so often
*/
override fun balance() = scope.produce {
var currentBalance = 0.0
while (isActive) {
send(BigDecimal(currentBalance))
delay(500)
currentBalance += 0.1
}
}
/**
* Just send a sample stream of transactions, every so often
*/
override fun transactions(): ReceiveChannel<WalletTransaction> = scope.produce {
var oldestTimestamp = System.currentTimeMillis() - (4 * DateUtils.WEEK_IN_MILLIS)
while (isActive) {
delay(1500L)
send(createSampleTransaction(oldestTimestamp).also { oldestTimestamp = it.timeInSeconds * 1000 })
}
}
private fun createSampleTransaction(oldestTimestamp: Long): WalletTransaction {
// up to 20% of the delta
val upperBound = System.currentTimeMillis() + Math.round(0.2 * (System.currentTimeMillis() - oldestTimestamp))
val txId = Random.nextLong(0L..(Long.MAX_VALUE - 1L))
val value = Random.nextLong(1L..1_500_000_000L) - 750_000_000L
val height = Random.nextInt(0..(Int.MAX_VALUE - 1))
val isSend = value > 0L
val time = Random.nextLong(oldestTimestamp..upperBound)
val isMined = Random.nextBoolean()
return WalletTransaction(
txId = txId,
value = value,
height = height,
isSend = isSend,
timeInSeconds = time/1000,
isMined = isMined
)
}
}

View File

@ -1,10 +0,0 @@
package cash.z.android.wallet.data
import cash.z.wallet.sdk.dao.WalletTransaction
import kotlinx.coroutines.channels.ReceiveChannel
import java.math.BigDecimal
interface TransactionRepository {
fun balance(): ReceiveChannel<BigDecimal>
fun transactions(): ReceiveChannel<WalletTransaction>
}

View File

@ -35,7 +35,7 @@ class HomePresenter @Inject constructor(
job = Job() job = Job()
twig("homePresenter starting! from ${this.hashCode()}") twig("homePresenter starting! from ${this.hashCode()}")
with(view) { with(view) {
launchBalanceBinder(synchronizer.balance()) launchBalanceBinder(synchronizer.balances())
launchTransactionBinder(synchronizer.allTransactions()) launchTransactionBinder(synchronizer.allTransactions())
launchActiveTransactionMonitor(synchronizer.activeTransactions()) launchActiveTransactionMonitor(synchronizer.activeTransactions())
} }

View File

@ -67,7 +67,7 @@ class SendPresenter @Inject constructor(
inputToggleCurrency() inputToggleCurrency()
balanceJob?.cancel() balanceJob?.cancel()
balanceJob = Job() balanceJob = Job()
balanceJob = view.launchBalanceBinder(synchronizer.balance()) balanceJob = view.launchBalanceBinder(synchronizer.balances())
} }
override fun stop() { override fun stop() {

View File

@ -22,41 +22,36 @@ internal object SynchronizerModule {
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideTwig(): Twig = if (BuildConfig.DEBUG) TroubleshootingTwig() else SilentTwig() fun provideDownloader(): CompactBlockStream {
return CompactBlockStream(COMPACT_BLOCK_SERVER, COMPACT_BLOCK_PORT)
@JvmStatic
@Provides
@Singleton
fun provideDownloader(twigger: Twig): CompactBlockStream {
return CompactBlockStream(COMPACT_BLOCK_SERVER, COMPACT_BLOCK_PORT, twigger)
} }
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideProcessor(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): CompactBlockProcessor { fun provideProcessor(application: ZcashWalletApplication, converter: JniConverter): CompactBlockProcessor {
return CompactBlockProcessor(application, converter, SampleProperties.wallet.cacheDbName, SampleProperties.wallet.dataDbName, logger = twigger) return CompactBlockProcessor(application, converter, SampleProperties.wallet.cacheDbName, SampleProperties.wallet.dataDbName)
} }
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideRepository(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): TransactionRepository { fun provideRepository(application: ZcashWalletApplication, converter: JniConverter): TransactionRepository {
return PollingTransactionRepository(application, SampleProperties.wallet.dataDbName, 10_000L, converter, twigger) return PollingTransactionRepository(application, SampleProperties.wallet.dataDbName, 10_000L, converter)
} }
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideWallet(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): Wallet { fun provideWallet(application: ZcashWalletApplication, converter: JniConverter): Wallet {
return Wallet(converter, application.getDatabasePath(SampleProperties.wallet.dataDbName).absolutePath, "${application.cacheDir.absolutePath}/params", seedProvider = SampleProperties.wallet.seedProvider, spendingKeyProvider = SampleProperties.wallet.spendingKeyProvider, logger = twigger) return Wallet(converter, application.getDatabasePath(SampleProperties.wallet.dataDbName).absolutePath, "${application.cacheDir.absolutePath}/params", seedProvider = SampleProperties.wallet.seedProvider, spendingKeyProvider = SampleProperties.wallet.spendingKeyProvider)
} }
@JvmStatic @JvmStatic
@Provides @Provides
@Singleton @Singleton
fun provideManager(wallet: Wallet, repository: TransactionRepository, downloader: CompactBlockStream, twigger: Twig): ActiveTransactionManager { fun provideManager(wallet: Wallet, repository: TransactionRepository, downloader: CompactBlockStream): ActiveTransactionManager {
return ActiveTransactionManager(repository, downloader.connection, wallet, twigger) return ActiveTransactionManager(repository, downloader.connection, wallet)
} }
@JvmStatic @JvmStatic
@ -76,10 +71,9 @@ internal object SynchronizerModule {
processor: CompactBlockProcessor, processor: CompactBlockProcessor,
repository: TransactionRepository, repository: TransactionRepository,
manager: ActiveTransactionManager, manager: ActiveTransactionManager,
wallet: Wallet, wallet: Wallet
twigger: Twig
): Synchronizer { ): Synchronizer {
return SdkSynchronizer(downloader, processor, repository, manager, wallet, blockPollFrequency = 500_000L, logger = twigger) return SdkSynchronizer(downloader, processor, repository, manager, wallet, blockPollFrequency = 500_000L)
} }
} }

View File

@ -58,7 +58,7 @@ buildscript {
'speeddial': 'com.leinardi.android:speed-dial:2.0.0', 'speeddial': 'com.leinardi.android:speed-dial:2.0.0',
'stetho': 'com.facebook.stetho:stetho:1.5.1', 'stetho': 'com.facebook.stetho:stetho:1.5.1',
'zcash': [ 'zcash': [
'walletSdk': "cash.z.android.wallet:zcash-android-testnet:1.7.5-alpha@aar" 'walletSdk': "cash.z.android.wallet:zcash-android-testnet:1.7.8-alpha@aar"
] ]
] ]
repositories { repositories {