Add get oracle name to explorer client (#2969)

This commit is contained in:
benthecarman 2021-04-26 06:19:14 -05:00 committed by GitHub
parent a194adba98
commit 7b600bb5ba
5 changed files with 47 additions and 13 deletions

View file

@ -302,6 +302,13 @@ object JsonReaders {
SerializerUtil.processJsString[ECPublicKey](ECPublicKey.fromHex)(json) SerializerUtil.processJsString[ECPublicKey](ECPublicKey.fromHex)(json)
} }
implicit object SchnorrPublicKeyReads extends Reads[SchnorrPublicKey] {
override def reads(json: JsValue): JsResult[SchnorrPublicKey] =
SerializerUtil.processJsString[SchnorrPublicKey](
SchnorrPublicKey.fromHex)(json)
}
implicit object P2PKHAddressReads extends Reads[P2PKHAddress] { implicit object P2PKHAddressReads extends Reads[P2PKHAddress] {
override def reads(json: JsValue): JsResult[P2PKHAddress] = override def reads(json: JsValue): JsResult[P2PKHAddress] =

View file

@ -1,21 +1,17 @@
package org.bitcoins.explorer.client package org.bitcoins.explorer.client
import akka.actor.ActorSystem import akka.actor.ActorSystem
import akka.http.scaladsl.model.{ import akka.http.scaladsl.model._
ContentTypes,
HttpEntity,
HttpMethods,
HttpRequest,
Uri
}
import akka.http.scaladsl.{Http, HttpExt} import akka.http.scaladsl.{Http, HttpExt}
import akka.util.ByteString import akka.util.ByteString
import org.bitcoins.core.protocol.tlv.OracleAnnouncementTLV import org.bitcoins.core.protocol.tlv.OracleAnnouncementTLV
import org.bitcoins.crypto.Sha256Digest import org.bitcoins.core.util.FutureUtil
import org.bitcoins.crypto.{SchnorrPublicKey, Sha256Digest}
import org.bitcoins.explorer.env.ExplorerEnv import org.bitcoins.explorer.env.ExplorerEnv
import org.bitcoins.explorer.model.{ import org.bitcoins.explorer.model.{
CreateAnnouncementExplorer, CreateAnnouncementExplorer,
CreateAttestations, CreateAttestations,
Oracle,
SbAnnouncementEvent SbAnnouncementEvent
} }
import org.bitcoins.explorer.picklers.ExplorerPicklers import org.bitcoins.explorer.picklers.ExplorerPicklers
@ -117,6 +113,21 @@ case class SbExplorerClient(env: ExplorerEnv)(implicit system: ActorSystem) {
responseF.map(_ => ()) responseF.map(_ => ())
} }
def getOracleName(pubkey: SchnorrPublicKey): Future[Option[String]] = {
val base = env.baseUri
val uri = Uri(base + s"oracle/${pubkey.hex}")
val httpReq = HttpRequest(uri = uri)
val responseF = sendRequest(httpReq)
responseF.flatMap { response =>
val result = response.validate[Oracle]
result match {
case success: JsSuccess[Oracle] =>
Future.successful(Some(success.value.oracleName))
case _: JsError => FutureUtil.none
}
}
}
private def sendRequest(httpReq: HttpRequest): Future[JsValue] = { private def sendRequest(httpReq: HttpRequest): Future[JsValue] = {
val responsePayloadF: Future[String] = { val responsePayloadF: Future[String] = {

View file

@ -0,0 +1,5 @@
package org.bitcoins.explorer.model
import org.bitcoins.crypto.SchnorrPublicKey
case class Oracle(pubkey: SchnorrPublicKey, oracleName: String)

View file

@ -1,10 +1,12 @@
package org.bitcoins.explorer.picklers package org.bitcoins.explorer.picklers
import org.bitcoins.commons.serializers.JsonReaders import org.bitcoins.explorer.model._
import org.bitcoins.explorer.model.SbAnnouncementEvent import org.bitcoins.commons.serializers.JsonReaders._
import play.api.libs.json.Json import play.api.libs.json.{Json, Reads}
object ExplorerPicklers { object ExplorerPicklers {
import JsonReaders._
implicit val explorerEventRW = Json.reads[SbAnnouncementEvent] implicit val explorerEventRW: Reads[SbAnnouncementEvent] =
Json.reads[SbAnnouncementEvent]
implicit val oracleRW: Reads[Oracle] = Json.reads[Oracle]
} }

View file

@ -48,6 +48,15 @@ class SbExplorerClientTest extends BitcoinSAsyncTest {
} }
} }
it must "get an oracle name" in {
val key = announcement.publicKey
for {
name <- explorerClient.getOracleName(key)
} yield {
assert(name.contains("Chris_Stewart_5"))
}
}
it must "return failure from get an event if the event DNE" in { it must "return failure from get an event if the event DNE" in {
val hash = Sha256Digest.empty val hash = Sha256Digest.empty
recoverToSucceededIf[RuntimeException] { recoverToSucceededIf[RuntimeException] {