Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ Dependencies:
- Postgres (Schema `modules/explorer-core/src/main/resources/db/V9__Schema.sql`)
- Redis

The API documentation is automatically generated using [Tapir](https://tapir.softwaremill.com/) from type-safe endpoint definitions. The OpenAPI specification is generated at runtime and served via Redoc.

**Documentation Access:**
- API v0: `http://localhost:9052/api/v0/docs/` (Interactive) | `http://localhost:9052/api/v0/docs/openapi` (Spec)
- API v1: `http://localhost:9052/api/v1/docs/` (Interactive) | `http://localhost:9052/api/v1/docs/openapi` (Spec)

**Schema Maintenance:** Complex JSON fields use structured schemas for autogenerated client compatibility. Modify endpoint definitions in `v{0,1}/defs/` and schema instances in `v{0,1}/models/`, then restart the service.

### 3. UTX Tracker

`modules/utx-tracker`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.AnyOutput
import org.ergoplatform.explorer.db.models.aggregates.AnyAsset
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

@derive(encoder, decoder)
Expand Down Expand Up @@ -51,7 +52,11 @@ object AnyOutputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@ final case class BlockExtensionInfo(
object BlockExtensionInfo {

implicit private def fieldsSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
)(_ => Map.empty)
)
Schema(SchemaType.SArray(Schema.derived[Any])(_.toIterable))

implicit val codec: Codec[BlockExtensionInfo] = deriveCodec

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.circe.{Codec, Json}
import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedAsset, FullDataInput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

final case class DataInputInfo(
Expand Down Expand Up @@ -41,7 +42,11 @@ object DataInputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import io.circe.Json
import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedAsset, FullInput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

@derive(encoder, decoder)
Expand Down Expand Up @@ -51,7 +52,11 @@ object InputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import derevo.derive
import io.circe.Json
import cats.syntax.option._
import org.ergoplatform.explorer.{Address, BlockId, BoxId, HexString, TxId}
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

/** MOutputInfo is a merge of `UOutputInfo` & `OutputInfo`
Expand Down Expand Up @@ -88,7 +89,11 @@ object MOutputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.Output
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedAsset, ExtendedOutput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

@derive(encoder, decoder)
Expand Down Expand Up @@ -51,7 +52,11 @@ object OutputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.circe.{Codec, Json}
import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedUAsset, ExtendedUDataInput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

final case class UDataInputInfo(
Expand Down Expand Up @@ -41,7 +42,11 @@ object UDataInputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import io.circe.Json
import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedAsset, ExtendedUAsset, ExtendedUInput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

@derive(encoder, decoder)
Expand Down Expand Up @@ -43,7 +44,11 @@ object UInputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import org.ergoplatform.explorer._
import org.ergoplatform.explorer.db.models.{Output, UOutput}
import org.ergoplatform.explorer.db.models.aggregates.{ExtendedAsset, ExtendedOutput, ExtendedUAsset, ExtendedUOutput}
import org.ergoplatform.explorer.http.api.models.AssetInstanceInfo
import org.ergoplatform.explorer.protocol.models.ExpandedRegister
import sttp.tapir.{Schema, SchemaType, Validator}

@derive(encoder, decoder)
Expand Down Expand Up @@ -42,7 +43,11 @@ object UOutputInfo {
implicit private def registersSchema: Schema[Json] =
Schema(
SchemaType.SOpenProduct(
Schema(SchemaType.SString[Json]())
Schema.derived[ExpandedRegister]
.modify(_.serializedValue)(_.description("Hex-encoded serialized register value"))
.modify(_.sigmaType)(_.description("Type of the register value"))
.modify(_.renderedValue)(_.description("Human-readable rendered register value"))
.as[Json]
)(_ => Map.empty)
)

Expand Down