Saltar al contenido principal

Publicar información sobre un activo

Los activos Stellar se definen por quién los emitió, qué representan y los términos y condiciones de su uso. Todos estos deben ser definidos y hechos públicos por el emisor en un archivo de información Stellar. Es crucial proporcionar información clara sobre lo que representa. En Stellar, haces eso vinculando tu cuenta emisora a un dominio principal, publicando un archivo de información Stellar en ese dominio y asegurándote de que ese archivo esté completo y sea preciso.

Los emisores de activos más exitosos proporcionan a los exchanges, billeteras y posibles compradores mucha información sobre sí mismos para establecer confianza.

Completar tu archivo de información Stellar no es un paso que puedas omitir.

¿Qué es un archivo de información Stellar?

Un archivo de información Stellar es un lugar común donde Internet puede encontrar información sobre la integración Stellar de tu organización. Lo escribes en TOML, un formato de archivo de configuración simple y ampliamente utilizado, diseñado para ser legible tanto por humanos como por máquinas, y lo publicas en https://YOUR_DOMAIN/.well-known/stellar.toml.

De esta manera, todos saben dónde encontrarlo, cualquiera puede buscarlo y demuestra que el propietario del dominio HTTPS que aloja el stellar.toml asume la responsabilidad de las cuentas y activos listados en él.

Usando una operación set_options, puedes vincular tu cuenta Stellar al dominio que aloja tu archivo de información Stellar, creando así una conexión definitiva on-chain entre esta información y esa cuenta.

Completar tu stellar.toml

La primera Propuesta del Ecosistema Stellar (SEP) es SEP-0001: Archivo de Información Stellar y especifica todo lo que alguna vez necesitarías incluir en tu archivo de información Stellar. Esta sección recorrerá las secciones de SEP-0001 que se relacionan con los emisores de activos. Utiliza esta sección junto con el SEP para asegurarte de completar correctamente tu stellar.toml.

Las cuatro secciones que cubriremos son:

  1. Información General
  2. Documentación de la Organización
  3. Documentación del Punto de Contacto
  4. Documentación de la Moneda

Para cada una de esas secciones, te haremos saber qué campos son obligatorios, lo que significa que todos los emisores de activos deben incluirlos para ser listados por exchanges y billeteras, y cuáles campos son sugeridos. Completar los campos sugeridos es una buena manera de hacer que tu activo destaque.

Nota: es una buena idea mantener las secciones en el orden presentado en SEP-0001: Archivo de Información Stellar, que también es el orden en que se presentan aquí. TOML requiere que las matrices estén al final, por lo que si revuelves el orden, puedes causar errores para los analizadores de TOML.

1. Información General

Campo obligatorio para todos los emisores de activos:

  • ACCOUNTS: Una lista de claves públicas para todas las cuentas Stellar asociadas con tu activo.

Listar tus claves públicas permite a los usuarios confirmar que las posees. Por ejemplo, cuando google.com aloja un archivo stellar.toml, los usuarios pueden estar seguros de que solo las cuentas que se enumeran pertenecen a Google. Si alguien dice: "Necesitas pagar tu factura de Google este mes, envía el pago a la dirección GIAMGOOGLEIPROMISE", pero esa clave no está listada en el stellar.toml de Google, entonces los usuarios saben que no deben confiar en ella.

Hay varios campos donde enumeras información sobre tu integración Stellar para facilitar su descubrimiento. Si eres un servicio ancla, y has establecido infraestructura para interoperar con billeteras y permitir el depósito y la retirada de activos dentro de la aplicación, asegúrate de incluir las ubicaciones de tus servidores en tu archivo stellar.toml para que esas billeteras sepan dónde encontrar los endpoints relevantes a consultar. En particular, enumera estos:

Campos sugeridos para emisores de activos:

Si admites otras Propuestas del Ecosistema Stellar — como federación o firma delegada — o aloja una instancia pública de Horizon que otras personas puedan usar para consultar el ledger, también deberías agregar la ubicación de esos recursos a Información General para que sean descubribles.

2. Documentación de la Organización

La información básica sobre tu organización se incluye en una tabla TOML llamada [DOCUMENTATION]. La documentación de la organización es tu oportunidad para informar a los exchanges y compradores sobre tu negocio y demostrar que tu negocio es legítimo y de confianza.

Campo obligatorio para todos los emisores de activos:

  • ORG_NAME El nombre legal de tu organización, y si tu negocio tiene uno, su ORG_DBA oficial.
  • ORG_URL La URL HTTPS del sitio web oficial de tu organización. Para demostrar que el sitio web es tuyo, debes hospedarlo en el mismo dominio que enumeras aquí. De esta manera, los exchanges y compradores pueden ver el certificado SSL en tu sitio web y sentirse razonablemente seguros de que eres quien dices ser.
  • ORG_LOGO Una URL a un logotipo de la empresa, que aparecerá junto a tu organización en los exchanges. Esta imagen debe tener una relación de aspecto cuadrada como PNG transparente, preferiblemente de tamaño 128x128. Si no proporcionas un logotipo, el ícono junto a tu organización aparecerá en blanco en muchos exchanges.
  • ORG_PHYSICAL_ADDRESS La dirección física de tu organización. Entendemos que puedes querer mantener privada tu dirección laboral. Al menos, deberías poner la ciudad y el país en el que operas. Una dirección de calle es ideal y proporciona un mayor nivel de confianza y transparencia a tus posibles tenedores de activos.
  • ORG_OFFICIAL_EMAIL La mejor dirección de correo electrónico comercial para tu organización. Este debería estar hospedado en el mismo dominio que tu sitio web oficial.
  • ORG_SUPPORT_EMAIL El mejor correo para solicitudes de soporte.

Campos sugeridos para emisores de activos:

  • ORG_GITHUB La cuenta oficial de Github de tu organización.
  • ORG_KEYBASE La cuenta oficial de Keybase de tu organización. Tu cuenta de Keybase debería contener prueba de propiedad de cualquier cuenta pública en línea que enumeres aquí, incluyendo el dominio de tu organización.
  • ORG_TWITTER El identificador oficial de Twitter de tu organización.
  • ORG_DESCRIPTION Una descripción de tu organización. Esto es bastante abierto, y puedes escribir tanto como desees. Es un lugar ideal para distinguirte describiendo lo que haces.

Los emisores que enumeran información verificada, incluidos los documentos de verificación de teléfono/dirección y las verificaciones de Keybase, son priorizados por los clientes de Stellar.

3. Documentación del Punto de Contacto

La información sobre el/los principales punto(s) de contacto de tu organización va en un array de tablas TOML llamado [[PRINCIPALS]]. Necesitas proporcionar información de contacto para al menos una persona en tu organización. Si no lo haces, los exchanges no pueden verificar tu oferta, y es poco probable que los compradores estén interesados. Se pueden agregar múltiples principales con entradas adicionales de [[PRINCIPALS]].

Campo obligatorio para todos los emisores de activos:

  • name El nombre del contacto principal.
  • email La dirección de correo electrónico oficial del contacto principal. Este debería estar hospedado en el mismo dominio que el sitio web oficial de tu organización.

Campos sugeridos para emisores de activos:

  • github La cuenta personal de Github del punto de contacto.
  • twitter El identificador personal de Twitter del punto de contacto.
  • keybase La cuenta personal de Keybase del punto de contacto. Esta cuenta debería contener prueba de propiedad de cualquier cuenta pública en línea listada aquí y puede contener prueba de propiedad del dominio de tu organización.

4. Documentación de la Moneda

La información sobre el/los activo(s) que emites va en un array de tablas TOML llamado [[CURRENCIES]]. Si emites múltiples activos, puedes incluirlos todos en un solo stellar.toml. Cada activo debe tener su propia entrada [[CURRENCIES]].

(Estas entradas también se utilizan para los activos que apoyas pero no emites, pero como esta sección se centra en la emisión de activos, el lenguaje reflejará eso.)

Campo obligatorio para todos los emisores de activos:

  • code El código del activo. Esta es una de las dos piezas clave de información que identifican tu token. Sin ella, tu token no puede ser listado en ninguna parte.
  • issuer La clave pública Stellar de la cuenta emisora. Esta es la segunda pieza clave de información que identifica tu token. Sin ella, tu token no puede ser listado en ninguna parte.
  • is_asset_anchored Una indicación de si tu token está anclado o es nativo: verdadero si tu token puede ser redimido por un activo fuera de la red Stellar, falso si no puede. Los exchanges utilizan esta información para clasificar los tokens por tipo en las listas. Si no proporcionas esto, es poco probable que tu token aparezca en vistas de mercado filtradas.

Si estás emitiendo tokens anclados (ligados, stablecoin, respaldados por activos), hay varios campos adicionales requeridos:

  • anchor_asset_type El tipo de activo que representa tu token. Las categorías posibles son fiat, cripto, acciones, bonos, productos básicos, bienes raíces y otros.
  • anchor_asset El nombre del activo que sirve de ancla para tu token.
  • redemption_instructions Instrucciones para redimir tu token por el activo subyacente.
  • attestation_of_reserve Una URL para la atestación u otra prueba, evidencia o verificación de reservas, como auditorías de terceros, que todos los emisores de stablecoins deberían ofrecer para cumplir con las prácticas recomendadas.

Campos sugeridos para emisores de activos:

  • desc Una descripción de tu token y de lo que representa. Este es un buen lugar para aclarar qué hace tu token y por qué alguien podría querer poseerlo.
  • conditions Cualquier condición que impongas a la redención de tu token.
  • image Una URL a una imagen PNG o GIF con un fondo transparente que represente tu token. Sin ella, tu token aparecerá en blanco en muchos exchanges.

Cómo publicar tu archivo de información Stellar

Después de seguir los pasos anteriores para completar tu archivo de información Stellar, publícalo en la siguiente ubicación: https://YOUR_DOMAIN/.well-known/stellar.toml

Habilita CORS para que las personas puedan acceder a este archivo desde otros sitios, y establece el siguiente encabezado para una respuesta HTTP para una solicitud de archivo /.well-known/stellar.toml.

Access-Control-Allow-Origin: *

Establece un tipo de contenido text/plain para que los navegadores rendericen el contenido en lugar de solicitar una descarga.

content-type: text/plain

También deberías usar la operación set_options para establecer el dominio principal en tu cuenta emisora.

Configure stellar.toml for nginx
server {

server_name my.example.com;
root /var/www/my.example.com;

location = /.well-known/stellar.toml {
types { } default_type "text/plain; charset=utf-8";
allow all;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
add_header 'Content-Length' 0;
return 204;
}
if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
}
}

// CertBot SSL configuration
// ...
}

Código de ejemplo para establecer el dominio principal de tu cuenta emisora

var StellarSdk = require("stellar-sdk");
var server = new StellarSdk.Horizon.Server(
"https://horizon-testnet.stellar.org",
);

// Keys for issuing account
var issuingKeys = StellarSdk.Keypair.fromSecret(
"SCZANGBA5YHTNYVVV4C3U252E2B6P6F5T3U6MM63WBSBZATAQI3EBTQ4",
);

server
.loadAccount(issuingKeys.publicKey())
.then(function (issuer) {
var transaction = new StellarSdk.TransactionBuilder(issuer, {
fee: 100,
networkPassphrase: StellarSdk.Networks.TESTNET,
})
.addOperation(
StellarSdk.Operation.setOptions({
homeDomain: "yourdomain.com",
}),
)
// setTimeout is required for a transaction
.setTimeout(100)
.build();
transaction.sign(issuingKeys);
return server.submitTransaction(transaction);
})
.then(console.log)
.catch(function (error) {
console.error("Error!", error);
});

Ejemplo de stellar.toml

NETWORK_PASSPHRASE="Public Global Stellar Network ; September 2015"
FEDERATION_SERVER="https://api.domain.com/federation"
AUTH_SERVER="https://api.domain.com/auth"
TRANSFER_SERVER="https://api.domain.com"
SIGNING_KEY="GBBHQ7H4V6RRORKYLHTCAWP6MOHNORRFJSDPXDFYDGJB2LPZUFPXUEW3"
HORIZON_URL="https://horizon.domain.com"
ACCOUNTS=[
"GD5DJQDDBKGAYNEAXU562HYGOOSYAEOO6AS53PZXBOZGCP5M2OPGMZV3",
"GAENZLGHJGJRCMX5VCHOLHQXU3EMCU5XWDNU4BGGJFNLI2EL354IVBK7",
"GAOO3LWBC4XF6VWRP5ESJ6IBHAISVJMSBTALHOQM2EZG7Q477UWA6L7U"
]
VERSION="2.0.0"

[DOCUMENTATION]
ORG_NAME="Organization Name"
ORG_DBA="Organization DBA"
ORG_URL="https://www.domain.com"
ORG_LOGO="https://www.domain.com/awesomelogo.png"
ORG_DESCRIPTION="Description of issuer"
ORG_PHYSICAL_ADDRESS="123 Sesame Street, New York, NY 12345, United States"
ORG_PHYSICAL_ADDRESS_ATTESTATION="https://www.domain.com/address_attestation.jpg"
ORG_PHONE_NUMBER="1 (123)-456-7890"
ORG_PHONE_NUMBER_ATTESTATION="https://www.domain.com/phone_attestation.jpg"
ORG_KEYBASE="accountname"
ORG_TWITTER="orgtweet"
ORG_GITHUB="orgcode"
ORG_OFFICIAL_EMAIL="[email protected]"

[[PRINCIPALS]]
name="Jane Jedidiah Johnson"
email="[email protected]"
keybase="crypto_jane"
twitter="crypto_jane"
github="crypto_jane"
id_photo_hash="be688838ca8686e5c90689bf2ab585cef1137c999b48c70b92f67a5c34dc15697b5d11c982ed6d71be1e1e7f7b4e0733884aa97c3f7a339a8ed03577cf74be09"
verification_photo_hash="016ba8c4cfde65af99cb5fa8b8a37e2eb73f481b3ae34991666df2e04feb6c038666ebd1ec2b6f623967756033c702dde5f423f7d47ab6ed1827ff53783731f7"

[[CURRENCIES]]
code="USD"
issuer="GCZJM35NKGVK47BB4SPBDV25477PZYIYPVVG453LPYFNXLS3FGHDXOCM"
display_decimals=2

[[CURRENCIES]]
code="BTC"
issuer="GAOO3LWBC4XF6VWRP5ESJ6IBHAISVJMSBTALHOQM2EZG7Q477UWA6L7U"
display_decimals=7
anchor_asset_type="crypto"
anchor_asset="BTC"
redemption_instructions="Use SEP6 with our federation server"
collateral_addresses=["2C1mCx3ukix1KfegAY5zgQJV7sanAciZpv"]
collateral_address_signatures=["304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10"]

# asset with meta info
[[CURRENCIES]]
code="GOAT"
issuer="GD5T6IPRNCKFOHQWT264YPKOZAWUMMZOLZBJ6BNQMUGPWGRLBK3U7ZNP"
display_decimals=2
name="goat share"
desc="1 GOAT token entitles you to a share of revenue from Elkins Goat Farm."
conditions="There will only ever be 10,000 GOAT tokens in existence. We will distribute the revenue share annually on Jan. 15th"
image="https://static.thenounproject.com/png/2292360-200.png"
fixed_number=10000