Información del Node
Devuelve información básica sobre un node de ULedger, incluyendo su versión de software actual, identificador del node e identificador de par en la red.
Solicitud
GET /
Al usar el node de desarrollo, la URL completa es:https://tn-w-1.uledger.net//
Respuesta
En caso de éxito, el endpoint devuelve un objeto JSON con los siguientes campos:
nodeVersion– Cadena de texto que representa la versión actual del software del node o la compilación.nodeId– El identificador público de este node en la red de ULedger (generalmente una clave pública larga codificada en hexadecimal).peerId– El ID de par libp2p utilizado por este node al conectarse a otros pares.
Ejemplo de respuesta
{
"nodeVersion": "9373386",
"nodeId": "04A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C925D0E4CF825E6A5DCDFA551507A418ABD9ACF489CC4D20644CD4AC19A1779C5",
"peerId": "12D3KooWEPdufv8LnWqkqyRXunYNRDmiZ1cYUTeT6vHiGY8FBugT"
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net// | jq
// Using native fetch (Node 18+)
const res = await fetch("https://tn-w-1.uledger.net//");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const data = await res.json();
console.log(data.nodeVersion);
console.log(data.nodeId);
console.log(data.peerId);
import requests
resp = requests.get("https://tn-w-1.uledger.net//")
resp.raise_for_status()
data = resp.json()
print(data["nodeVersion"])
print(data["nodeId"])
print(data["peerId"])
Estado del Node
Devuelve una instantánea combinada del estado de este node de ULedger, incluyendo su versión de software, identificador del node, conectividad de red y la lista de blockchains que está rastreando actualmente. Este endpoint proporciona una visión general del estado y la conectividad del node.
Solicitud
GET /health
Para el node de desarrollo, la URL completa es:https://tn-w-1.uledger.net/health
Respuesta
En caso de éxito, el endpoint devuelve un objeto JSON con los siguientes campos:
nodeVersion– Cadena de texto que representa la versión actual del software del node o la compilación.nodeId– El identificador público de este node en la red de ULedger (generalmente una clave pública larga codificada en hexadecimal).network– Objeto que describe el estado de la red P2P:networkType– Tipo de red (por ejemplo,p2p).peerCount– Número de pares conectados actualmente.peerId– El ID de par libp2p de este node.networkPeers– Array de IDs de pares a los que este node está conectado.
blockchains– Array de identificadores de blockchain que este node está rastreando.
Ejemplo de respuesta
{
"nodeVersion": "9373386",
"nodeId": "04A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C925D0E4CF825E6A5DCDFA551507A418ABD9ACF489CC4D20644CD4AC19A1779C5",
"network": {
"networkType": "p2p",
"peerCount": 9,
"peerId": "12D3KooWEPdufv8LnWqkqyRXunYNRDmiZ1cYUTeT6vHiGY8FBugT",
"networkPeers": [
"12D3KooWRsMAxQbBypJaDD4VrqxCEiNR1W9Ayj6vDAF8pQ2qwCdX",
"12D3KooWDbHuY1gn4fWkhbyKVRyFU1t1678rzdNUEbfdVbPaADYW",
"12D3KooWPxsRpT133cgBire1NHvaXnqLuvYtdySGPkRfNgYwkK21",
"12D3KooWNxwUTaerJJcUPNjS3xrwTTZNsfZVi9nZ6eSYXCvBZcfi",
"12D3KooWBoU3AJFfp6UEUn7gcNfKYwW1Le7iZgT1Hb8dh5J1gB4c",
"12D3KooWLq1ZSwz1KABjGY4ZBT8Z25MkGfz79X6xkGJs11Mc11PV",
"12D3KooWRL7UbgUUEg3N2jePTEc1ZAG2a7gqyrSiTz7YnVfuKuRi",
"12D3KooWLJzDBqzPrMnYkahBX4ptLoKd4eWJxZeDpFhg328JkBgX",
"12D3KooWNYcV3Z6gFjGcmFGEPWr7wLVW28bHDEyHZChB1UC9WrBB"
]
},
"blockchains": [
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
]
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net/health | jq
// Using native fetch (Node 18+)
const res = await fetch("https://azure.dev.node1.uledger.net/health");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const data = await res.json();
console.log(data.nodeVersion);
console.log(data.nodeId);
console.log(data.network.peerCount);
console.log(data.blockchains);
import requests
resp = requests.get("https://azure.dev.node1.uledger.net/health")
resp.raise_for_status()
data = resp.json()
print(data["nodeVersion"])
print(data["nodeId"])
print(data["network"]["peerCount"])
print(data["blockchains"])
Listar Blockchains
Devuelve la lista de identificadores de blockchain que este node conoce o gestiona actualmente.
Solicitud
GET /blockchains
Para el node de desarrollo, la URL completa es:https://tn-w-1.uledger.net//blockchains
Respuesta
En caso de éxito, el endpoint devuelve un array JSON de cadenas de texto. Cada entrada es un identificador de blockchain único (por ejemplo, un hash o ID lógico).
Ejemplo de respuesta
[
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
]
En este ejemplo, el node está rastreando dos blockchains, identificadas por los dos hashes en el array.
- cURL
curl -X GET -L https://tn-w-1.uledger.net//blockchains | jq
// Using native fetch (Node 18+)
const res = await fetch("https://tn-w-1.uledger.net//blockchains");
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const blockchains = await res.json();
for (const id of blockchains) {
console.log("Blockchain ID:", id);
}
import requests
resp = requests.get("https://tn-w-1.uledger.net//blockchains")
resp.raise_for_status()
blockchains = resp.json()
for chain_id in blockchains:
print("Blockchain ID:", chain_id)
Información de Blockchain
Devuelve información detallada sobre una blockchain específica gestionada por este node, incluyendo la altura, el estado del consejo, la configuración de consensus y los pares conectados.
Solicitud
GET /blockchains/{blockchainId}
Para la blockchain de ejemplo, la URL completa es:https://tn-w-1.uledger.net//blockchains/08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2
Parámetros de ruta
blockchainId– El identificador de blockchain devuelto porGET /blockchains.
Respuesta
La respuesta contiene información estructural y de estado:
blockHeight– Altura actual (índice del último bloque) de esta blockchain.lastMessageTime– Marca de tiempo del último mensaje o bloque procesado.keyType– Tipo de claves de consensus/públicas utilizadas (por ejemplo,secp256k1).isInCouncil– Indica si este node es miembro del consejo.isVoting,isTimeToVote– Indicadores del estado de votación para la ronda actual.syncing– Indica si el node está sincronizando esta cadena actualmente.pendingMessagesCount,delayedMessagesCount,pendingTransactions– Elementos en cola pendientes de procesamiento.councilMembers– Array de claves públicas de los miembros del consejo.voteSessions– Sesiones de votación activas identificadas por ID de sesión (altura, ronda, líder y votos requeridos).consensus– Configuración de consensus (tipo, umbrales, tiempos de espera).features– Indicadores de características habilitadas para esta blockchain.blockchainPeers– Lista de IDs de pares que participan en esta blockchain.
Ejemplo de respuesta
{
"blockHeight": 2275,
"lastMessageTime": "2025-11-25T16:20:53Z",
"keyType": "secp256k1",
"isInCouncil": true,
"isVoting": false,
"isTimeToVote": false,
"syncing": false,
"pendingMessagesCount": 0,
"delayedMessagesCount": 0,
"pendingTransactions": 0,
"councilMembers": [
"02F94D90705053FFFCBC79AFB6A058E2F66FAE707FE86E1381779F085A59524F46",
"0306CE9B36888DEB9593FE021182C1CCCCCE6BB1277BD311D868F113685BB4EF0A",
"035229CC755EFEAD01FA0E9D4EA22CD356D0A6E385B10B82859083924356C9D555",
"03A78BDDB8EF9D9048F7A6D9F9D4DF53839D28554C9ABB1E4B4A27BF25CA23F80C"
],
"voteSessions": {
"f0c3d1eddf9a480c6cbedb864629cde761342a6407d028ebefc38d45c498ef7d": {
"sessionId": "f0c3d1eddf9a480c6cbedb864629cde761342a6407d028ebefc38d45c498ef7d",
"blockHash": "",
"blockHeight": 2276,
"round": 418,
"currentStage": 0,
"currentLeader": "02F94D90705053FFFCBC79AFB6A058E2F66FAE707FE86E1381779F085A59524F46",
"consensusRequired": 2
}
},
"consensus": {
"consensusType": "council_leader_proposal",
"txKarmaThreshold": 5,
"txMintThreshold": 1,
"txMaxTimeTrigger": "1h0m0s",
"minMembers": 4,
"consensusTimeout": "30m0s"
},
"features": {
"enableJoinCouncilOnStartup": false,
"enableXMOnBlockMint": false,
"enableTxProof": false
},
"blockchainPeers": [
"12D3KooWLq1ZSwz1KABjGY4ZBT8Z25MkGfz79X6xkGJs11Mc11PV",
"12D3KooWRsMAxQbBypJaDD4VrqxCEiNR1W9Ayj6vDAF8pQ2qwCdX",
"12D3KooWPxsRpT133cgBire1NHvaXnqLuvYtdySGPkRfNgYwkK21",
"12D3KooWNxwUTaerJJcUPNjS3xrwTTZNsfZVi9nZ6eSYXCvBZcfi",
"12D3KooWNYcV3Z6gFjGcmFGEPWr7wLVW28bHDEyHZChB1UC9WrBB",
"12D3KooWRL7UbgUUEg3N2jePTEc1ZAG2a7gqyrSiTz7YnVfuKuRi",
"12D3KooWDbHuY1gn4fWkhbyKVRyFU1t1678rzdNUEbfdVbPaADYW",
"12D3KooWLJzDBqzPrMnYkahBX4ptLoKd4eWJxZeDpFhg328JkBgX"
]
}
- cURL
curl -X GET -L https://tn-w-1.uledger.net//blockchains/{blockchainId} | jq
// Using native fetch (Node 18+)
const blockchainId =
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2";
const res = await fetch(
`https://tn-w-1.uledger.net//blockchains/${blockchainId}`
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const info = await res.json();
console.log("Height:", info.blockHeight);
console.log("In council:", info.isInCouncil);
console.log("Council members:", info.councilMembers.length);
import requests
blockchain_id = "08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
resp = requests.get(f"https://tn-w-1.uledger.net//blockchains/{blockchain_id}")
resp.raise_for_status()
info = resp.json()
print("Height:", info["blockHeight"])
print("In council:", info["isInCouncil"])
print("Council members:", len(info["councilMembers"]))
Obtener Bloque por Altura (consulta)
Algunos despliegues de ULedger también exponen una variante con parámetro de consulta para obtener un bloque por altura. Esto es funcionalmente equivalente a GET /blockchains/{blockchainId}/blocks{height}, pero utiliza un parámetro de consulta height en lugar de un segmento de ruta.
Solicitud
GET /blockchains/{blockchainId}/blocks?height={height}
Para un node de desarrollo local, la URL completa podría verse así:http://my.node1.uledger.io/blockchains/08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2/blocks?height=4
Parámetros de ruta
blockchainId– El identificador de blockchain (uno de los valores devueltos porGET /blockchains).
Parámetros de consulta
height– La altura numérica (índice) del bloque a obtener.
Respuesta
El cuerpo de la respuesta es el mismo objeto de bloque descrito en Obtener Bloque anteriormente (mismos campos y estructura). Consulte esa sección para ver un ejemplo completo y el desglose de campos.
- cURL
curl -X GET -L http://my.node1.uledger.io/blockchains/{blockchainId}/blocks\?height\=4 | jq
// Using native fetch (Node 18+)
const blockchainId =
"08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2";
const height = 4;
const res = await fetch(
`http://my.node1.uledger.io/blockchains/${blockchainId}/blocks?height=${height}`,
{
headers: { Accept: "application/json" },
}
);
if (!res.ok) {
throw new Error(`Request failed with status ${res.status}`);
}
const block = await res.json();
console.log("Height:", block.height);
console.log("Hash:", block.blockHash);
console.log("Tx count:", block.transactions.length);
import requests
blockchain_id = "08c28f29a62819120958984b761ddf8ccb45951612731409873994958fd150a2"
height = 4
resp = requests.get(
f"http://my.node1.uledger.io/blockchains/{blockchain_id}/blocks",
params={"height": height},
headers={"Accept": "application/json"},
)
resp.raise_for_status()
block = resp.json()
print("Height:", block["height"])
print("Hash:", block["blockHash"])
print("Tx count:", len(block["transactions"]))