All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.alephium.api.model.UTXO.scala Maven / Gradle / Ivy

There is a newer version: 3.8.8
Show newest version
// Copyright 2018 The Alephium Authors
// This file is part of the alephium project.
//
// The library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the library. If not, see .

package org.alephium.api.model

import akka.util.ByteString

import org.alephium.api.model.Token
import org.alephium.protocol.model.{AssetOutput, ContractOutput, TxOutput, TxOutputRef}
import org.alephium.util.{AVector, TimeStamp}

@SuppressWarnings(Array("org.wartremover.warts.DefaultArguments"))
final case class UTXO(
    ref: OutputRef,
    amount: Amount,
    tokens: Option[AVector[Token]] = None,
    lockTime: Option[TimeStamp] = None,
    additionalData: Option[ByteString] = None
)

object UTXO {
  def from(ref: TxOutputRef, output: TxOutput): UTXO = {
    val tokens = if (output.tokens.isEmpty) None else Some(output.tokens.map(Token.tupled))
    val (lockTime, additionalData) = output match {
      case o: AssetOutput    => Some(o.lockTime) -> Some(o.additionalData)
      case _: ContractOutput => None             -> None
    }

    UTXO(
      OutputRef.from(ref),
      Amount(output.amount),
      tokens,
      lockTime,
      additionalData
    )
  }

  def from(
      ref: OutputRef,
      amount: Amount,
      tokens: AVector[Token],
      lockTime: TimeStamp,
      addtionalData: ByteString
  ): UTXO = {
    UTXO(ref, amount, Some(tokens), Some(lockTime), Some(addtionalData))
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy