Utxorpc.Spec 0.12.0-alpha

This is a prerelease version of Utxorpc.Spec.
dotnet add package Utxorpc.Spec --version 0.12.0-alpha                
NuGet\Install-Package Utxorpc.Spec -Version 0.12.0-alpha                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Utxorpc.Spec" Version="0.12.0-alpha" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Utxorpc.Spec --version 0.12.0-alpha                
#r "nuget: Utxorpc.Spec, 0.12.0-alpha"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Utxorpc.Spec as a Cake Addin
#addin nuget:?package=Utxorpc.Spec&version=0.12.0-alpha&prerelease

// Install Utxorpc.Spec as a Cake Tool
#tool nuget:?package=Utxorpc.Spec&version=0.12.0-alpha&prerelease                

UTxO RPC Specs

This repository holds the source of truth for the UTxO RPC interface definition. The interface is defined as a set of proto files using proto3 syntax. These files are then used to auto generate code for each of the supported languages.

[!TIP] This repo is aimed for maintainers working on the interface definition. If you're developer looking to interact with UTxO RPC, you should start in the documentation site.

Interface versioning

The interface itself will be organized into different proto packages that follow a particular naming convention:

utxorpc.{version}.{module}

The {version} component will contain a sequence number and an optional pre-release flag. For example:

  • v1alpha: version 1 with alpha stability
  • v1beta: version 1 with beta stability
  • v1: stable version 1

The {module} component represents a division of the interface into particular use-cases to facilitate access and avoid naming collisions. For example:

  • sync: interface for chain synchronization
  • watch: interface for reactive transaction notifications
  • cardano: interface for a particular blockchain

This repository will hold side-by-side versions. This means that instead of replacing existing definitions, new ones will be added to the repository while maintaining the previous ones.

Stability guarantees

The pre-release flag in the version name describes the stability guarantee for that particular version. In the context of UTxO RPC, we'll use the following semantic:

  • alpha: an exploration phase with no stability guarantees. Breaking changes will be common.
  • beta: an stabilization phase with no stability guarantees. Breaking changes are allowed but uncommon.
  • [no flag]: released version with strong stability guarantees. No breaking changes will occur. Non-breaking changes are allowed.

File structure

The repository is organized by the following general structure:

  • proto: interface definition files
    • **: folder structure that matches the proto package hierarchy
  • gen: code-generation scaffold files
    • {lang}: scaffold for a particular language
  • buf.gen.yaml: config file for code-generation

Code generation

The serialization structures, client and server stubs for all supported languages are code-generated from this interface definition.

We use the buf toolchain to simplify the process of working with proto files for multiple languages. The main configuration file is buf.gen.yaml.

The /gen folder contains the project scaffold for each supported language. These are a bunch of static files or templates to complement the auto-generated code from buf.

The generated code isn't committed to the git repo. A github workflow is used to generate, package and publish each of the language-specific libraries of the spec.

Spec-wide versioning

The complete UTxO RPC spec holds different versions of the interface packages simultaneously. Since the auto-generated code follows the spec, language-specific packages will also hold different versions simultaneously.

This means that we need an independent versioning mechanism for the spec as a whole and for the language-specific packages that we publish.

The spec-wide version will follow semantic-versioning. It starts from version 1.0.0. We'll increase each version component following this convention:

  • major: upon a breaking change in any of the interface definitions or upon a breaking change in the api surface of the auto-generated code.
  • minor: upon a non-breaking change in any of the interface definitions or upon a non-breaking change in the api surface of the auto-generated code.
  • patch upon changes on the auto-generated code that have no impact whatsoever on the api surface.

[!WARNING] Any package versions below 1.0.0 should be discarded since they are reserved for internal CI and testing procedures.

Release process

The release cadence is not strict. Many independent changes can be stacked together before cutting a new release.

The maintainer in charge of the release will start the process locally by bumping the version in all required files and tagging the commit with the version label. This is automated via a tool called bump-my-version. To execute this step run the following command:

bump-my-version bump {component} --commit --tag

Where {component} needs to be replace by the semantic-versioning component that needs to be bumped. Allowed values are: major, minor, patch.

If successful, the local repo should hold a new commit tagged with the corresponding version. File inside the /gen folder that required a change should show the new version value.

The next step is to push the commit directly into the main branch including the new tag.

git push origin main --tags

The main branch is protected, only repo admins are allowed to execute this push.

The push will trigger the Github workflow named release. This workflow is in charge of code generation, packaging and publishing of each of the language-specific libraries.

The maintainer in charge of the release should monitor the workflow run and make sure that it reaches the end successfully.

Language-specific packages

This is the list of language-specific packages generated by this spec along with the package registry where they are published.

Lang Package name Registry
Rust utxorpc-spec https://crates.io
Node @utxorpc/spec https://npmjs.org
Go github.com/utxorpc/go-sdk/spec git
.NET Utxorpc.Spec https://www.nuget.org
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Utxorpc.Spec:

Package Downloads
Utxorpc.Sdk

A gRPC interface for UTxO Blockchains

UtxorpcTestera.Sdk

A gRPC interface for UTxO Blockchains

Utxorpc.Tester.Sdk

A gRPC interface for UTxO Blockchains

Utxorpc.Test.Sdk

..

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.12.0-alpha 65 11/11/2024
0.11.0-alpha 53 10/11/2024
0.10.0-alpha 83 9/6/2024
0.9.0-alpha 88 8/15/2024
0.8.0-alpha 55 7/28/2024
0.7.0-alpha 80 7/14/2024
0.6.0-alpha 54 7/8/2024
0.5.1-alpha 60 4/26/2024
0.5.0-alpha 58 4/19/2024
0.4.4-alpha 50 3/17/2024
0.4.3-alpha 55 3/17/2024
0.4.2-alpha 65 3/17/2024
0.4.1-alpha 57 3/16/2024
0.4.0-alpha 57 2/16/2024
0.3.0-alpha 65 2/11/2024