You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.1 KiB
43 lines
1.1 KiB
package com.xsn.explorer.models
|
|
|
|
import play.api.libs.json.{Json, Writes}
|
|
|
|
case class TransactionDetails(
|
|
id: TransactionId,
|
|
size: Size,
|
|
blockhash: Blockhash,
|
|
time: Long,
|
|
blocktime: Long,
|
|
confirmations: Confirmations,
|
|
input: Option[TransactionValue],
|
|
output: List[TransactionValue]) {
|
|
|
|
lazy val fee: BigDecimal = {
|
|
val vin = input.map(_.value).getOrElse(BigDecimal(0))
|
|
val vout = output.map(_.value).sum
|
|
(vin - vout) max 0
|
|
}
|
|
}
|
|
|
|
object TransactionDetails {
|
|
|
|
def from(tx: Transaction, previous: Transaction): TransactionDetails = {
|
|
val input = tx.vin.flatMap { vin =>
|
|
val voutMaybe = previous.vout.find(_.n == vin.voutIndex)
|
|
|
|
voutMaybe.flatMap(TransactionValue.from)
|
|
}
|
|
|
|
TransactionDetails
|
|
.from(tx)
|
|
.copy(input = input)
|
|
}
|
|
|
|
def from(tx: Transaction): TransactionDetails = {
|
|
val output = tx.vout.flatMap(TransactionValue.from)
|
|
|
|
TransactionDetails(tx.id, tx.size, tx.blockhash, tx.time, tx.blocktime, tx.confirmations, None, output)
|
|
}
|
|
|
|
implicit val writes: Writes[TransactionDetails] = Json.writes[TransactionDetails]
|
|
}
|
|
|