mirror of
https://github.com/ACINQ/eclair.git
synced 2025-03-13 11:35:47 +01:00
provide cleaner json serializer for ShaChain objects
This commit is contained in:
parent
86c1c8dc8f
commit
f6c35211d0
3 changed files with 29 additions and 15 deletions
|
@ -145,7 +145,7 @@
|
|||
<dependency>
|
||||
<groupId>com.lihaoyi</groupId>
|
||||
<artifactId>upickle_2.11</artifactId>
|
||||
<version>0.6.5</version>
|
||||
<version>0.6.6</version>
|
||||
</dependency>
|
||||
<!-- BITCOIN -->
|
||||
<dependency>
|
||||
|
|
|
@ -24,15 +24,7 @@ object JsonSerializers {
|
|||
implicit val uint64ReadWriter: ReadWriter[UInt64] = readwriter[String].bimap[UInt64](_.toString, s => UInt64(s.toLong))
|
||||
implicit val localParamsReadWriter: ReadWriter[LocalParams] = macroRW
|
||||
implicit val remoteParamsReadWriter: ReadWriter[RemoteParams] = macroRW
|
||||
implicit val directionReadWriter: ReadWriter[Direction] = readwriter[String].bimap[Direction](f => f match {
|
||||
case IN =>
|
||||
"IN"
|
||||
case OUT =>
|
||||
"OUT"
|
||||
}, _ match {
|
||||
case "IN" => IN
|
||||
case "OUT" => OUT
|
||||
})
|
||||
implicit val directionReadWriter: ReadWriter[Direction] = macroRW
|
||||
implicit val updateAddHtlcReadWriter: ReadWriter[UpdateAddHtlc] = macroRW
|
||||
implicit val updateFailHtlcReadWriter: ReadWriter[UpdateFailHtlc] = macroRW
|
||||
implicit val updateMessageReadWriter: ReadWriter[UpdateMessage] = ReadWriter.merge(macroRW[UpdateAddHtlc], macroRW[UpdateFailHtlc])
|
||||
|
@ -54,7 +46,16 @@ object JsonSerializers {
|
|||
implicit val waitingForRevocationReadWriter: ReadWriter[WaitingForRevocation] = macroRW
|
||||
implicit val paymentOriginReadWriter: ReadWriter[Origin] = readwriter[String].bimap[Origin](_.toString, _ => fr.acinq.eclair.payment.Local(None))
|
||||
implicit val remoteChangesReadWriter: ReadWriter[RemoteChanges] = macroRW
|
||||
implicit val shaChainReadWriter: ReadWriter[ShaChain] = macroRW
|
||||
|
||||
case class ShaChain2(knownHashes: Map[Long, BinaryData], lastIndex: Option[Long] = None) {
|
||||
def toShaChain = ShaChain(knownHashes.map { case (k, v) => ShaChain.moves(k) -> v }, lastIndex)
|
||||
}
|
||||
object ShaChain2 {
|
||||
def toLong(input: Vector[Boolean]) : Long = input.foldLeft(0) { case (acc, flag) => if (flag) 2 * acc + 1 else 2 * acc }
|
||||
def apply(shaChain: ShaChain): ShaChain2 = new ShaChain2(shaChain.knownHashes.map { case (k,v) => toLong(k) -> v }, shaChain.lastIndex)
|
||||
}
|
||||
implicit val shaChain2ReadWriter: ReadWriter[ShaChain2] = macroRW
|
||||
implicit val shaChainReadWriter: ReadWriter[ShaChain] = readwriter[ShaChain2].bimap[ShaChain](s => ShaChain2(s), s2 => s2.toShaChain)
|
||||
implicit val commitmentsReadWriter: ReadWriter[Commitments] = macroRW
|
||||
implicit val actorRefReadWriter: ReadWriter[ActorRef] = readwriter[String].bimap[ActorRef](_.toString, _ => ActorRef.noSender)
|
||||
implicit val shortChannelIdReadWriter: ReadWriter[ShortChannelId] = readwriter[String].bimap[ShortChannelId](_.toString, s => ShortChannelId(s))
|
||||
|
|
|
@ -2,16 +2,20 @@ package fr.acinq.eclair
|
|||
|
||||
import java.net.{InetAddress, InetSocketAddress}
|
||||
|
||||
import fr.acinq.bitcoin.{BinaryData, DeterministicWallet, OutPoint}
|
||||
import fr.acinq.bitcoin.{BinaryData, DeterministicWallet, Hash, OutPoint}
|
||||
import fr.acinq.eclair.channel.{LocalChanges, LocalParams, RemoteParams}
|
||||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.db.ChannelStateSpec
|
||||
import fr.acinq.eclair.transactions._
|
||||
import fr.acinq.eclair.wire.{NodeAddress, UpdateAddHtlc, UpdateFailHtlc}
|
||||
import org.junit.runner.RunWith
|
||||
import org.scalatest.FunSuite
|
||||
import org.scalatest.junit.JUnitRunner
|
||||
import upickle.default.write
|
||||
|
||||
import scala.util.Random
|
||||
|
||||
@RunWith(classOf[JUnitRunner])
|
||||
class JsonSerializersSpec extends FunSuite {
|
||||
import JsonSerializers._
|
||||
|
||||
|
@ -25,7 +29,7 @@ class JsonSerializersSpec extends FunSuite {
|
|||
output2 -> BinaryData("beef")
|
||||
)
|
||||
val json = write(map)
|
||||
assert(json === s"""{"${output1.txid}:0":"dead","${output2.txid}:1":"beef"}""")
|
||||
assert(json === s"""[["${output1.hash}:0","dead"],["${output2.hash}:1","beef"]]""")
|
||||
}
|
||||
|
||||
test("NodeAddress serialization") {
|
||||
|
@ -37,8 +41,8 @@ class JsonSerializersSpec extends FunSuite {
|
|||
}
|
||||
|
||||
test("Direction serialization") {
|
||||
assert(write(IN) === s""""IN"""")
|
||||
assert(write(OUT) === s""""OUT"""")
|
||||
assert(write(IN) === """{"$type":"fr.acinq.eclair.transactions.IN"}""")
|
||||
assert(write(OUT) === """{"$type":"fr.acinq.eclair.transactions.OUT"}""")
|
||||
}
|
||||
|
||||
test("serialize LocalParams") {
|
||||
|
@ -93,6 +97,15 @@ class JsonSerializersSpec extends FunSuite {
|
|||
println(write(localChanges))
|
||||
}
|
||||
|
||||
test("serialize shaChain") {
|
||||
val seed = Hash.Zeroes
|
||||
var receiver = ShaChain.empty
|
||||
for (i <- 0 until 7) {
|
||||
receiver = receiver.addHash(ShaChain.shaChainFromSeed(seed, 0xFFFFFFFFFFFFL - i), 0xFFFFFFFFFFFFL - i)
|
||||
}
|
||||
println(write(receiver))
|
||||
}
|
||||
|
||||
test("serialize Commitments") {
|
||||
val commitments = ChannelStateSpec.commitments
|
||||
println(write(commitments))
|
||||
|
|
Loading…
Add table
Reference in a new issue