2021-10-16 14:45:32 +05:30
|
|
|
import uniffi.bdk.*
|
|
|
|
|
|
|
|
class LogProgress: BdkProgress {
|
|
|
|
override fun update(progress: Float, message: String? ) {
|
2021-10-16 16:42:35 +05:30
|
|
|
println("progress: $progress, message: $message")
|
2021-10-16 14:45:32 +05:30
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-17 02:45:38 +05:30
|
|
|
class NullProgress: BdkProgress {
|
|
|
|
override fun update(progress: Float, message: String? ) {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-17 02:36:58 +05:30
|
|
|
fun getConfirmedTransaction(wallet: OnlineWalletInterface, transactionId: String): ConfirmedTransaction? {
|
2021-10-17 02:45:38 +05:30
|
|
|
wallet.sync(NullProgress(), null)
|
2021-10-17 02:36:58 +05:30
|
|
|
return wallet.getTransactions().stream().filter({ it.id.equals(transactionId) }).findFirst().orElse(null)
|
|
|
|
}
|
|
|
|
|
2021-10-16 14:45:32 +05:30
|
|
|
fun main(args: Array<String>) {
|
2021-10-16 16:42:35 +05:30
|
|
|
println("Configuring an in-memory wallet on electrum..")
|
2021-10-16 14:45:32 +05:30
|
|
|
val descriptor =
|
2021-10-16 20:19:34 +05:30
|
|
|
"pkh(cSQPHDBwXGjVzWRqAHm6zfvQhaTuj1f2bFH58h55ghbjtFwvmeXR)";
|
|
|
|
val amount = 1000uL;
|
2021-10-16 16:42:35 +05:30
|
|
|
val recipient = "tb1ql7w62elx9ucw4pj5lgw4l028hmuw80sndtntxt";
|
2021-10-16 14:45:32 +05:30
|
|
|
val db = DatabaseConfig.Memory("")
|
2021-10-16 20:19:34 +05:30
|
|
|
val client = BlockchainConfig.Electrum(ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5u, null, 10u))
|
2021-10-16 14:45:32 +05:30
|
|
|
val wallet = OnlineWallet(descriptor, Network.TESTNET, db, client)
|
2021-10-17 02:28:26 +05:30
|
|
|
println("Syncing...")
|
|
|
|
wallet.sync(LogProgress(), null)
|
|
|
|
println("Initial wallet balance: ${wallet.getBalance()}")
|
|
|
|
println("Please send $amount satoshis to address: ${wallet.getNewAddress()}")
|
2021-10-16 14:45:32 +05:30
|
|
|
readLine()
|
|
|
|
println("Syncing...")
|
|
|
|
wallet.sync(LogProgress(), null)
|
2021-10-17 02:28:26 +05:30
|
|
|
println("New wallet balance: ${wallet.getBalance()}")
|
2021-10-16 20:19:34 +05:30
|
|
|
println("Press Enter to return funds")
|
|
|
|
readLine()
|
|
|
|
println("Creating a partially signed bitcoin transaction with recipient $recipient and amount $amount satoshis...")
|
|
|
|
val transaction = PartiallySignedBitcoinTransaction(wallet, recipient, amount)
|
|
|
|
println("Signing the transaction...")
|
|
|
|
wallet.sign(transaction)
|
|
|
|
println("Broadcasting the signed transaction...")
|
|
|
|
val transactionId = wallet.broadcast(transaction)
|
|
|
|
println("Refunded $amount satoshis to $recipient via transaction id $transactionId")
|
2021-10-17 02:28:26 +05:30
|
|
|
println("Confirming transaction...")
|
2021-10-17 02:36:58 +05:30
|
|
|
var confirmedTransaction = getConfirmedTransaction(wallet, transactionId)
|
|
|
|
while(confirmedTransaction == null) {
|
|
|
|
confirmedTransaction = getConfirmedTransaction(wallet, transactionId)
|
|
|
|
}
|
2021-10-17 02:28:26 +05:30
|
|
|
println("Confirmed transaction: $confirmedTransaction")
|
|
|
|
println("Final wallet balance: ${wallet.getBalance()}")
|
2021-10-16 14:45:32 +05:30
|
|
|
}
|