Saltearse al contenido

OracleSet

[Source]

(Añadido por la enmienda PriceOracle.)

{
"TransactionType": "OracleSet",
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"OracleDocumentID": 1,
"Provider": "70726F7669646572",
"AssetClass": "63757272656E6379",
"LastUpdateTime": 1763033559,
"PriceDataSeries": [
{
"PriceData": {
"BaseAsset": "XAH",
"QuoteAsset": "USD",
"AssetPrice": 74560,
"Scale": 4
}
}
]
}
{
"TransactionType": "OracleSet",
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"OracleDocumentID": 1,
"LastUpdateTime": 1763033700,
"PriceDataSeries": [
{
"PriceData": {
"BaseAsset": "XAH",
"QuoteAsset": "USD",
"AssetPrice": 74800,
"Scale": 4
}
}
]
}
CampoTipo JSONInternal TypeDescripción
AccountStringAccountIDLa dirección de la cuenta que crea o actualiza el Oracle. Solo esta cuenta puede actualizarlo o eliminarlo posteriormente.
OracleDocumentIDNumberUInt32Un identificador único para este Oracle dentro de la cuenta propietaria. Pueden existir múltiples Oracles por cuenta usando diferentes IDs.
ProviderStringBlob(Opcional en actualización; requerido en creación) Identificador codificado en hexadecimal del proveedor de Oracle (p. ej. Chainlink, Band). Máximo 256 bytes.
URIStringBlob(Opcional) URI codificado en hexadecimal que hace referencia a datos complementarios fuera de la cadena para este Oracle (p. ej. CID de IPFS). Máximo 256 bytes.
AssetClassStringBlob(Opcional en actualización; requerido en creación) Categoría codificada en hexadecimal que describe el tipo de activos (p. ej. 63757272656E6379 = “currency”). Máximo 16 bytes.
LastUpdateTimeNumberUInt32Marca de tiempo Unix (segundos desde el 1 de enero de 1970) de la última actualización de precio. Debe estar dentro de ±300 segundos del tiempo de cierre del ledger y debe ser estrictamente mayor que el valor almacenado actualmente en actualizaciones.
PriceDataSeriesArrayArrayArray de objetos PriceData. Debe contener entre 1 y 10 entradas. En una actualización, los pares sin AssetPrice se eliminan del objeto.

Cada entrada en PriceDataSeries es un objeto PriceData:

CampoTipo JSONInternal TypeDescripción
BaseAssetStringCurrencyEl activo cuyo precio se publica (p. ej. "XAH", "BTC").
QuoteAssetStringCurrencyLa moneda de denominación (p. ej. "USD", "EUR"). Debe diferir de BaseAsset.
AssetPriceNumberUInt64(Opcional) El precio como número entero escalado. El precio efectivo es AssetPrice × 10^(-Scale). Omitir este campo elimina un par existente durante una actualización.
ScaleNumberUInt8(Opcional) Exponente decimal usado para derivar el precio efectivo. Valores válidos: 0–10. Por defecto: 0. Ejemplo: AssetPrice = 74560, Scale = 4 → precio efectivo = 7,456.

Las transacciones OracleSet consumen reservas del propietario según el número de pares PriceData almacenados:

ParesReservas del propietario consumidas
1–51
6–102

Si una actualización cambia el número de pares por encima o por debajo del umbral de 5 pares, el recuento del propietario se ajusta automáticamente (±1).

Las transacciones OracleSet tienen el coste de transacción estándar.

Código de errorDescripción
temDISABLEDLa enmienda PriceOracle no está habilitada.
temINVALID_FLAGSe especificaron flags inválidos.
temMALFORMEDProvider, URI o AssetClass está vacío o supera la longitud máxima; pares base/quote duplicados en la misma transacción; BaseAsset igual a QuoteAsset; Scale > 10; Provider o AssetClass no coinciden con los valores almacenados en una actualización; Provider o AssetClass ausentes en una creación.
temARRAY_EMPTYPriceDataSeries está vacío.
temARRAY_TOO_LARGEPriceDataSeries contiene más de 10 entradas en la transacción.
terNO_ACCOUNTLa cuenta emisora no existe.
tecINVALID_UPDATE_TIMELastUpdateTime está fuera de la ventana de ±300 segundos desde el tiempo de cierre del ledger, es anterior a la marca de tiempo UNIX (segundos desde el 1 de enero de 1970), o no es estrictamente mayor que el valor almacenado en una actualización.
tecTOKEN_PAIR_NOT_FOUNDUn par especificado para eliminación (sin AssetPrice) no existe en el objeto Oracle actual.
tecARRAY_EMPTYEl resultado tras aplicar todas las actualizaciones y eliminaciones dejaría PriceDataSeries vacío.
tecARRAY_TOO_LARGEEl resultado tras aplicar todas las actualizaciones y adiciones superaría las 10 entradas.
tecINSUFFICIENT_RESERVELa cuenta no tiene suficiente XAH para cumplir el requisito de reserva para crear el objeto Oracle.