Saltar al contenido principal

Contratos e IDs de testnet

La red funciona con dos paquetes Move en IOTA:

PaqueteQué contiene
almacenEl sistema (System: comité BLS, precios, capacidad, contabilidad por época), Blob y Storage, el staking (Staking, pools, comité por stake, épocas), la tesorería del proyecto (treasury), eventos y Display. Los pagos y el stake son en iota::iota::IOTA.
sitiosSitios: Site (con Display), un Resource por ruta, rutas, redirecciones, metadatos y eventos.

Testnet de IOTA​

ObjetoID
Paquete almacen0x6c5fef208f3d3de114b9debdfeeed88762bff823486135c82b0447b5541ac142
System0xedc9b3efa90d0bba4da9819e2c08becc0d230de36b7921040c1f53c0c6ee90cc
Staking0x44d4a6a113cd7530cab0a6a8dd40717534cd5a89be78e130c72504c08f92b5a2
Treasury0x8e28d541b98302744afc9b0dbbd9a7680200c7a63d70839057429ca7ea1fa64c
Paquete sitios0xfffd81708ef3474d7cbd5a496246b03603a27c8a747415ea1d1e2632019a3c30
  • Cadena: testnet de IOTA. RPC público: https://api.testnet.iota.cafe.
  • Configuración: 4 nodos de almacenamiento con 25 shards cada uno (100 shards), 1 IOTA de stake en cada uno, épocas de 1 día y como mucho 53 épocas por compra.
  • Tipos: un blob guardado es un <almacen>::blob::Blob y un sitio, un <sitios>::site::Site, donde <almacen> y <sitios> son los IDs de los paquetes de arriba.

Funciones principales​

Guardar y gestionar blobs (paquete almacen):

FunciónQué hace
system::reserve_spaceCompra un Storage de un tamaño codificado durante unas épocas, pagando en IOTA.
system::register_blobRegistra un blob ID sobre un Storage y crea el Blob, pagando la tarifa de escritura. El contrato vuelve a calcular el blob ID a partir de la raíz Merkle y el tamaño.
system::certify_blobCertifica el blob con la firma BLS agregada de un quórum de shards y el bitmap de los firmantes.
system::extend_blobRenueva un Blob certificado y vigente más épocas, pagando en IOTA.
system::delete_blobBorra un Blob borrable y devuelve su Storage.
blob::burnDestruye un objeto Blob.

reserve_space, register_blob y extend_blob reciben el pago como &mut Coin<IOTA> y cobran lo justo, así que el cliente puede pagar el almacenamiento con la moneda de gas en la misma transacción.

Sitios (paquete sitios, módulo site): new_site, new_resource, add_header, add_resource, remove_resource_if_exists, create_routes, insert_route, remove_all_routes_if_exist, create_redirects, insert_redirect, take_redirects_if_exist, update_name, update_metadata y burn.

Tesorería (módulo treasury): cualquiera puede ingresar (deposit); solo quien tiene el TreasuryAdminCap puede retirar (withdraw).

Eventos​

Los nodos de almacenamiento siguen los eventos del módulo events: BlobRegistered, BlobCertified (que también emite una renovación, con is_extension), BlobDeleted e InvalidBlobID, entre otros. La tesorería emite TreasuryDeposit y TreasuryWithdrawal.

Notas​

  • Claves BLS. La testnet y la mainnet de IOTA desactivan las funciones de G1 sin comprimir, así que las claves públicas de los nodos se guardan como Element<G1> y se suman con g1_add. Un certificado es la firma agregada de los firmantes, verificada con bls12381_min_pk_verify frente a la suma de sus claves.
  • Tesorería. El módulo treasury recibe el 3 % de las recompensas de cada época y la comisión de los nodos penalizados.
  • IOTA Names. El paquete sitios no depende de IOTA Names: los nombres los resuelve el portal.

Tests​

  • almacen: 268/268 tests de Move, 5 de ellos de la tesorería.
  • sitios: 39/39 tests de Move.
  • Pruebas de extremo a extremo en la testnet de IOTA: guardar con el publisher; pagar desde una wallet, renovar, transferir y borrar; y publicar, servir, actualizar y destruir sitios.