Parceros
  • 👽Recursos
    • 💻Nodos validadores
      • Buenas prácticas y seguridad de un validador
      • Montaje de nodo validador de Stargaze
      • Montaje de nodo validador de Tgrade
      • Montaje de nodo validador de Juno
      • Instalacion del Cosmovisor
      • Instalación de AutoCompound
      • Guía de instalación Prometheus y Grafana para un Validador
    • 🎓Desarrollo
      • Fundamentos en Gnu/Linux
      • Fundamentos en Blockchain
      • Billeteras
      • Introducción a Cosmos Hub
      • Guia de Inicio en Rust
      • Clases de CosmWasm
        • Introducción a CosmWasm
        • Puntos de entrada de un contrato vacio
        • Consultas - Query
      • Clases de Rust
        • Introducción a Rust
        • Ciclos
        • Funciones
        • Manejo de la memoria
        • Tipos de datos avanzados
        • Macros
        • Manejo de paquetes
        • Manejo de errores
      • Guia Archway
        • Instalación de requisitos
        • Configuración del proyecto
        • Solicitud de tokens Testnet
        • Mi primera app
          • Configuracion
          • Produciendo ejecutables wasm
          • Despliegue e instanciación de contratos en la cadena
          • Interactuar con su contrato
          • Construir el frontend de la dApp
        • Proyecto NFT
          • Creando un proyecto NFT
          • Despliegue del contrato de tokens
          • Acuñación y envío de tokens
          • Construye la Dapp NFT
        • Fee Grant
          • Comprendiendo los Fee grant
          • Grant asignación
          • Utilizando asignaciones grant
        • Multifirmas
          • Archway multi firma hub
          • Navegar por la interfaz multi firmas
      • Cosmwasm Documentacion
        • Introducción
        • Primeros pasos
          • Introducción
          • Configuración del entorno
          • Elaborar un contrato
          • Test Unitarios
          • Despliegue e interacción
          • Integración con contratos inteligentes
          • Próximos pasos
        • Arquitectura
          • ¿Qué son los contratos multicadena?
          • Modelo de actor para las convocatorias de contratos
          • Nombres y direcciones
          • Consulta del estado del contrato
          • Formatos de serialización
          • Composición del contrato
          • Comparación con los contratos de solidity
        • Contratos inteligentes
          • Semántica contractual
          • Message
            • Messages
            • Submensajes
          • State
            • Simple state
            • Complex state y maps
          • Result y option
          • Entry points
          • Query
          • Events
          • Math
          • Verificación de contratos inteligentes
          • Migration
          • Migrar una dapp a una red diferente
          • Testing
          • Ejecución Sudo
          • CosmWasm y CIB
        • Tutoriales
          • Opcion simple
            • Testing
          • Storage
            • ¿Cómo funciona el almacenamiento de valores clave?
            • Índices
            • Modelización avanzada de estados
          • Cosmwasm con ejemplos
            • Operaciones matemáticas de Cosmowasm
            • Crear una instancia de un contrato CosmWasm
            • Timelock
            • Contrato Crowdfunding
            • Respuestas y atributos en Cosmwasm
            • Lee y escribe
            • Envío de tokens
            • Token Vaults
            • Creador de mercado automático de productos constantes (AMM)
      • Guia Celestia
        • Descripcion general de celestia
          • Introduccion
          • Blockchains monolíticos vs modulares
          • Capa de disponibilidad de datos
            • La capa de disponibilidad de datos de Celestia
            • El ciclo de vida de una transacción celestia-app
            • Recuperabilidad de datos y poda
            • Disponibilidad de datos FAQ
          • Recursos adicionales
            • Aprende modular
            • Glosario de Celestia
            • Especificaciones de aplicación de celestes
            • Documentación API de nodo celestial
        • Ejecutar un nodo
          • Descripción general de los nodos en ejecución en Celestia
          • Guía de inicio rápido
            • Decidir qué nodo ejecutar
            • Entorno de desarrollo
            • Instalar celestia-node
            • Instalar celestia-app
            • 🐳 Configuración de Docker
          • Redes
            • Resumen de redes
            • Mainnet Beta
            • Mocha testnet
            • Arábica devnet
          • Tipos de nodos
            • Disponibilidad de datos
              • Nodo ligero
              • Nodo completo
              • Nodo puente
            • Consenso
            • Relay de IBC
              • Guía de retransmisión IBC
              • Relays de IBC
          • Recursos
            • nodo-celestia
              • Metricas
              • guía config.toml
              • Redes y valores personalizados
              • Solución de problemas
            • celestia-app
              • Especificaciones
              • Métricas, visualización y alertas
              • Mecánica de corte
              • Crear un testnet Celestia
              • Comandos CLI útiles
              • Monitor de Actualización
              • Carteras en celestia-app
              • Multisig
              • Crea una cuenta de adquisición
            • SystemD
            • Proceso de hardfork
        • Desarrolladores
          • Construir modular
          • Envío de blobs de datos a Celestia
          • Directrices de reenvío de transacciones
          • API de nodo
            • Celestia-node RPC CLI tutorial
            • Documentación de la API RPC de Celestia-Node
            • Rápido Scavenger
            • Page
          • Integrar con Blobstream
            • Descripción general de Blobstream
            • Integrarse con contratos de Blobstream
            • Integrar con el cliente Blobstream
            • Consultando las pruebas de Blobstream
            • Operadores locales de Blobstream X
              • Solicitar rangos de compromiso de datos
              • Nuevas implementaciones de Blobstream X
          • Implementar un rollup
            • L2s Ethereum
              • Ethereum fallback
              • Arbitro
                • Introducción a los rollups de Arbitrum con Celestia como DA
                • Implementar un arbitrum rollup devnet
                • Testnet de nitrógeno
                • Implementar un contrato inteligente sobre la implementación de Arbitrum
                • Implemente un dapp en su devnet Arbitrum rollup
                • Optimismo
                  • Introducción a la integración de OP Stack
                  • Bubs testnet
                  • Implemente un contrato inteligente en Bubs testnet
                  • Implemente un dapp en Bubs testnet
                  • Implemente un devnet OP Stack
                  • Implemente un devnet OP Stack en Celestia
                  • Auditoría
                  • Implemente un dapp con thirdweb
                  • Rollups-as-a-Servicio
                    • Caldera
            • Rollkit
            • Astria
              • Documentación
              • Implementar a Dusknet
            • SDK Soberano
            • Vistara
            • Dimensión
          • Carteras
            • Crea una billetera con celestia-node
            • Integraciones de billeteras con Celestia
          • Integre Celestia para proveedores de servicios
      • Unión
        • Arquitectura
          • CometBLS
          • Galois
          • Voyager
        • Conceptos
          • BLS Firmas
          • Clientes de Luz Condicional
          • Verificación de Consenso
          • Tecnología de validador distribuido
          • IBC
          • Sin permiso versus sin confianza
        • Infraestructura
          • Operador de nodo
            • Empezando
            • Docker Compose
            • Kubernetes
            • NixOS
            • Configuración del Nodo
        • Integracion
          • IBC Enabled Solidity
        • Demostrar
          • Dirigiendo el Union Devnet
          • PingPong
        • Unirse al testnet
          • Empezando
          • Ejecutar el binario cliente
          • Ejecución de Unionvisor
          • Obteniendo Tokens Testnet
          • Crear un Validador
          • Endpoints publicos
          • Sincronización de estado
          • Liberar un validador
          • Preguntas frecuentes
          • Historial de actualizaciones
        • Guia de estilo
          • Lista de palabras
      • Avail
        • Introducción a Avail
          • Aprovechar DA
          • Aprovechar Nexus
          • Aprovechar la fusión
        • Informacion de red
        • Más información sobre disponibilidad
          • El conseso
            • BABE
            • GRANDPA
            • NPoS
          • EIP-4844 y disponible
        • Guia de nuevo usuario
          • Cómo crear y administrar una cuenta disponible
          • Cómo utilizar el Explorador Goldberg Testnet
          • Cómo utilizar el faucet Testnet
          • Cómo establecer una identidad en cadena
          • Cómo generar una identificación de aplicación disponible
          • Cómo realizar transferencias de saldo disponibles
          • Cómo crear grupos de nominaciones disponibles
        • Construir con disponibilidad
          • Cree un paquete acumulativo con Avail
          • Comience con Avail
          • Optimium
            • OP Stack
            • Aprovechando la pila OP con Avail
            • Cómo utilizar la pila OP con Avail
            • Adaptador de pila OP 🔗
          • Validium
            • Polygon zkEVM
              • Construyendo sobre Polygon zkEVM con Avail
              • Cómo utilizar Polygon zkEVM con Avail
              • Nodo Validium 🔗
              • Contratos de Validium 🔗
              • Puente Validium 🔗
            • Madara Starknet
              • Construyendo sobre Madara Stack con Avail
              • Cómo utilizar Madara con Avail
              • Madara Starknet🔗
            • Referencia
          • Sovereign Rollups
            • Sovereign SDK 🔗
            • Rollkit 🔗
            • OpEVM 🔗
        • Glosario
        • Preguntas generales frecuentes
      • Dymension
        • Aprender
          • ELI5
          • RollApps
            • RollApps
            • Tokens
            • Gobernancia
            • Puente
            • En profundidad
              • Dymension RDK
                • Dymint
              • Gobernanza
                • Gobernador
                  • Descripción general
                  • Crear gobernador
                  • Otros comandos
                • Votación
                  • Parámetros ajustables
                  • Gasto comunitario
                  • Registro de tokens ERC-20
              • IBC Puente
                • Visión general
                • Seguridad
                • Retransmisores
          • Dymension
            • Visión general
            • DYM
              • Supply
              • Demanda
              • Crecimiento
              • Distribución
            • Seguridad
              • Estándares
              • Actualizable
              • Disponibilidad de datos
              • Pruebas de fraude
              • Resistencia a la censura
              • Page 1
            • Puentes
              • IBC
              • eIBC
            • Liquidez
              • Descripción general
              • Depositar tokens
              • Vinculación de tokens LP
              • Incentivos
              • Comisiones
            • Gobernanza
              • Descripción general
              • Preparando una propuesta
              • Proponiendo a la dimocracia
        • Construir
          • Descripción general
          • Testnet
            • EVM
              • Descripción general
            • CosmWasm
              • Descripción general
              • Información
              • Ejemplo de cosmoWasm
          • Roller CLI
            • Descripción general
            • Comenzar
              • Instalar
              • Inicializar RollApp
              • Registro
              • Correr
                • Simple
                • Avanzado
                  • Cliente ligero DA
                  • Secuenciador
                  • Retransmisor
            • Nodo en ejecución
              • Ejecutando en producción
              • Supervisión
              • Información de RollApp
              • Exportar claves
              • Mejora
              • Editar la configuración de RollApp
              • Sincronización de estado
            • Solución de problemas
              • Descripción general
              • Saldos
              • Hardware
              • Rollapp de importación/exportación
              • Acceso externo
              • Estado
              • Archivos de registro
            • RollApp local
              • Ejecute la aplicación EVM RollApp
              • Ejecute la aplicación CosmWasm RollApp
        • Validar
          • Preguntas frecuentes sobre nodos
          • Construir dimensión
          • Configuración de nodo
          • Únase a una red
          • Nodo de sincronización
          • Validador
          • Actualizaciones
          • Solución de problemas
          • Programa de delegación
            • objetivos del programa
            • Parámetros de evaluación
            • Solicitud
      • Movement
        • Desarrolladores
          • Inicio rápido
          • Configuración
            • Usando contenedores
            • Usando el instalador
          • Tutoriales
            • Desplegar
              • Módulo Aptos
              • Módulo Sui
              • Contratos EVM
                • Implementación de contratos de solidez en movimiento utilizando Foundry y Fractal
                • Implementación de contratos de solidez en M1 usando Hardhat y Fractal
                • Implementación de contratos inteligentes de Solidity en M1 utilizando el tiempo de ejecución Fractal
            • Ejecute MoveVM
              • Ejecutando M1 usted mismo
            • Construir dApp
              • Aptos Move dApp
              • Aplicación Sui Move
              • DApp de solidity
            • Interoperar
              • AptosVM<>MEVM
          • Herramientas de desarrollo
            • Movement CLI
              • Movement aptos
                • cuenta
                  • crear
                  • crear-cuenta-de-recursos
                    • derivar-dirección-de-cuenta-de-recursos
                  • fondo-con-grifo
                  • lista
                  • dirección de búsqueda
                  • rotar llave
                  • transferir
                • configuración
                  • generar-compleciones-de-shell
                  • configurar-global-config
                  • show-global-config
                  • mostrar-perfiles
                • génesis
                  • generar-admin-escritura-conjunto
                  • generar-génesis
                  • obtener direcciones de grupo
                  • generar-claves
                  • generar-plantilla-de-diseño
                  • configuración-git
                  • configuración-del-validador-de-conjuntos
                • gobernancia
                  • proponer
                  • votar
                  • propuesta de show
                  • lista-propuestas
                  • verificar-propuesta
                  • ejecutar propuesta
                  • generar-propuesta-de-actualización
                  • aprobar-ejecución-hash
                • información
                • init
                • llave
                  • generar
                  • extraer-peer
                • mover
                  • construir-publicar-carga útil
                  • limpio
                  • compilar
                  • script de compilación
                  • cobertura
                    • resumen
                    • fuente
                    • código de bytes
                  • crear-cuenta-de-recursos-y-publicar-paquete
                  • desmontar
                  • documento
                  • descargar
                  • init
                  • list
                  • probar
                  • publicar
                  • correr
                  • ejecutar guión
                  • prueba
                  • prueba transaccional
                  • verificar-paquete
                  • vista
                • multifirma
                  • aprobar
                  • crear
                  • crear-transacción
                  • ejecutar
                  • ejecutar-rechazar
                  • ejecutar con carga útil
                  • rechazar
                  • verificar-propuesta
                • nodo
                  • analizar-validador-rendimiento
                  • arranque-db
                  • verificar-conectividad-de-red
                  • conseguir-participación-pool
                  • inicializar-validador
                  • conjunto de validadores de unión
                  • conjunto de validadores de licencia
                  • mostrar-información-de-época
                  • mostrar-validador-config
                  • mostrar-conjunto-validador
                  • mostrar-validador-participación
                  • ejecutar-testnet-local
                  • actualización-clave-de-consenso
                  • actualizar-validador-direcciones-de-red
                • apostar
                  • agregar apuesta
                  • crear-contrato-de-participación
                  • distribuir-monedas-adquiridas
                  • aumentar-bloqueo
                  • inicializar-propietario de la participación
                  • solicitud-comisión
                  • establecer-votante-delegado
                  • operador de conjunto
                  • desbloquear-apuesta
                  • desbloquear-monedas-adquiridas
                  • retirar-apuesta
                • actualizar
              • movement sui
                • comenzar
                • génesis
                • ceremonia-genesis
                  • init
                  • estado de validación
                  • agregar-validador
                  • validadores de lista
                  • punto de control de compilación sin firmar
                  • examinar-punto-de-control-génesis
                  • verificar y firmar
                  • finalizar
                • herramienta clave
                  • convertir
                  • decodificar-tx-bytes
                  • decodificar-multi-sig
                  • generar
                  • importar
                  • lista
                  • par de claves de carga
                  • dirección multifirma
                  • multi-sig-combinar-sig-parcial
                  • herencia-sig-parcial-combinada-multi-sig
                  • espectáculo
                  • firmar
                  • señal-kms
                  • deshacer
                  • zk-login-firmar-y-ejecutar-tx
                  • zk-login-ingresar-token
                  • zk-login-sig-verificar
                  • zk-login-signo-inseguro-mensaje-personal
                • consola
                • cliente
                  • dirección activa
                  • entorno-activo
                  • direcciones
                  • llamar
                  • identificador de cadena
                  • campo dinámico
                  • env
                  • ejecutar-tx firmado
                  • gas
                  • fusionar moneda
                  • nueva direccion
                  • nuevo-ambiente
                  • objeto
                  • objetos
                  • pagar
                  • pago todo-sui
                  • pay-sui
                  • publicar
                  • moneda dividida
                  • cambiar
                  • bloque tx
                  • transferir
                  • transferencia-sui
                  • mejora
                  • verificar-bytecode-metro
                  • verificar-fuente
                  • transacción-repetición
                  • lote de repetición
                  • punto de control de repetición
                • validador
                  • hacer-información-validador
                  • convertirse en candidato
                  • comité conjunto
                  • comité de licencia
                  • metadatos de visualización
                  • actualizar-metadatos
                    • nombre
                    • descripción
                    • URL de la imagen
                    • URL del proyecto
                    • dirección de red
                    • dirección primaria
                    • dirección-trabajador
                    • dirección-p2p
                    • clave-pub-de-red
                    • clave-pub-trabajador
                    • protocolo-pub-clave
                  • actualizar-precio-de-gas
                  • validador de informes
                  • serializar-carga útil-pop
                  • mostrar-actualización-del-precio-del-gas-raw-txn
                • move
                  • construir
                  • cobertura
                    • resumen
                    • fuente
                    • código de bytes
                  • desmontar
                  • nuevo
                  • probar
                  • prueba
                • simulacro de incendio
                  • rotación de metadatos
              • movement ctl
              • movement manage
            • fractales
              • marco evm
          • Desarrolladores Aptos
            • Configurar la CLI de Aptos
            • Usando la CLI de Aptos
          • Desarrolladores Sui
            • Configurar Sui CLI
            • Usando Sui CLI
          • Preguntas más frecuentes
        • Ecosistema
          • Wallets
          • Tokens
          • Faucet
          • Move idioma
            • Módulos y scripts
            • Tipos primitivos
              • Enteros
              • booleano
              • DIRECCIÓN
              • Vector
              • Firmante
              • Referencias
              • Tuplas y unidad
          • Recursos de aprendizaje
          • Techpedia
            • Paralelización
            • Mover recursos
            • SDK de movement
      • Initia
        • ACERCA DE
          • Bienvenido a Inicia
          • Arquitectura Omnitia
            • Inicia (Capa 1)
            • Minitia (Capa 2)
          • Ciclo de vida de la transacción
          • Liquidez y apuestas consagradas
            • IniciaDEX
          • Programa de intereses adquiridos
        • CONSTRUIR SOBRE LA INICIATIVA
          • iniciado
          • inicia.js
          • Creando cuenta
          • Tutoriales específicos de VM
            • MoverVM
              • Implementación de módulos de movimiento
              • Creando moneda de movimiento
              • Envío de moneda de movimiento
              • Creando movimiento NFT
              • Módulos relacionados con el replanteo
              • Interactuar con Oracle en MoveVM
              • Mover ganchos IBC
            • WASMVM
              • Implementación del contrato CosmWasm
              • Interactuando con Oracle en WasmVM
              • Ganchos Wasm IBC
              • Fábrica de fichas
            • EVM
              • Implementación del contrato de solidez
              • Crear un token ERC-20 personalizado
              • Consultar estados del cosmos
              • Ejecutando mensajes de Cosmos
              • Conversión de direcciones entre EVM y Cosmos
              • Conversión entre direcciones Denom y ERC-20
              • Interactuar con Oracle en EVM
              • Ganchos EVM IBC
              • Ethereum JSON-RPC
          • Tutoriales generales
            • Oráculo: Furtivo
            • Mensajes entre cadenas
            • Saltar API
            • Miniswap
              • Interactuando con Minitswap
            • Conversión entre nombres de usuario y direcciones
            • Usando el Explorador local de Initia
            • Interactuando con InitiaDEX
            • Usando el widget de billetera Initia
        • IMPLEMENTAR MINITIA
          • Empezando
            • Implementación de su propia Minitia (Capa 2)
          • Configuración
          • Implementación de una Minitia independiente
          • Implementación completa de Minitia
            • Dirigiendo la Minitia
            • Pila de OPinit
              • Módulo OPinit: OPhost y OPchild
              • Configurar robots OPinit
                • Ejecutor del puente
                • Remitente de salida
                • Desafiador
                • Envío por lotes
                  • Envío de lotes a Inicia L1
                  • Envío de lotes a Celestia
            • Relé Hermes (IBC)
            • Habilitando oráculos
          • Retroceder
          • Agregar tokens a Initia Wallet
          • Personalizando Minitia
        • EJECUTAR EL NODO DE INICIO
          • Ejecutando el nodo de inicio
          • Arrancar un nodo de inicio
          • Conéctese a la red Inicial
          • Oráculo
          • Automatización de actualizaciones de software con Cosmovisor
          • Convertirse en un validador
        • RECURSOS
          • Registro de Iniciación
          • Información de la cadena Testnet
          • Parámetros de cadena
          • Documentación de la API
          • Documentos API (MiniMove)
          • Documentos API (MiniWasm)
          • Documentos API (MiniEVM)
      • Internet Computer
        • ¡Hola, mundo!
        • Descripción general del ICP
Powered by GitBook
On this page
  • Subredes
  • Firmas de umbral
  • Contratos inteligentes
  • Cuentas y claves
  • Fichas
  • Mensajes
  • Ciclos
  • Gobernanza
  • Nodos
  • Comparación rápida con Ethereum
  1. Recursos
  2. Desarrollo
  3. Internet Computer

Descripción general del ICP

Previous¡Hola, mundo!

Last updated 10 months ago

El Protocolo Informático de Internet (ICP) es una cadena de bloques basada en , y .

Fue diseñado cuidadosamente para brindar a los contratos inteligentes un rendimiento y una escalabilidad casi nativos, manteniendo al mismo tiempo la seguridad de la ejecución descentralizada. Además de los contratos inteligentes DeFi clásicos, como los registros y los intercambios, ICP puede ejecutar aplicaciones que consumen mucho procesamiento y almacenamiento, como completamente en cadena.

Otro aspecto importante del diseño de ICP es su integración segura y sin fisuras con los ecosistemas existentes. Los contratos inteligentes en ICP pueden alojar activos web y atender solicitudes HTTP de los usuarios, cumpliendo así la promesa de Web3. También pueden interactuar con nodos RPC de otras cadenas de bloques y servidores Web2 a través de solicitudes HTTP seguras. Estas características, combinadas con firmas de umbral, otorgan a los contratos inteligentes la capacidad de albergar activos y realizar transacciones en otras cadenas de bloques como Bitcoin y Ethereum.

Continúe leyendo para obtener más información sobre cómo se hacen posibles estas funciones.

Una cadena de bloques solo puede funcionar tan rápido y ofrecer tantos recursos como un solo nodo. Una de las claves para superar este límite es la fragmentación. ICP fragmenta los contratos inteligentes en varias instancias de la cadena de bloques. Cada instancia se denomina subred y tiene su propio conjunto de nodos descentralizados que ejecutan el algoritmo de consenso entre ellos, construyen su propia cadena de bloques y ejecutan contratos inteligentes. Cada subred se ejecuta en paralelo con otras subredes. Un contrato inteligente en una subred puede comunicarse con otro contrato inteligente en una subred diferente mediante el envío de mensajes. Los usuarios también pueden enviar mensajes a los contratos inteligentes. El siguiente diagrama muestra el flujo de un mensaje en ICP:

  1. El mensaje va a uno de los nodos límite (nodos RPC).

  2. El nodo límite enruta el mensaje a la subred que aloja el contrato inteligente de destino.

  3. El algoritmo de consenso de esa subred agrega el mensaje a un nuevo bloque en la cadena de bloques de la subred.

  4. El mensaje se agrega a la cola de entrada del contrato inteligente de destino.

  5. El contrato inteligente ejecuta el mensaje.

Tenga en cuenta que los pasos 3 a 5 son asincrónicos y están desacoplados entre sí, lo que puede resultar inusual para los desarrolladores que están acostumbrados a las transacciones atómicas al estilo Ethereum que se ejecutan cuando se agregan a un bloque. La motivación de este diseño es la escalabilidad.

Las subredes pueden tener distintos tamaños, es decir, factores de replicación, lo que determina el costo de ejecutar contratos inteligentes en esa subred. También afecta el tiempo de finalización y la seguridad.

Cada subred ICP tiene una clave pública fija. La clave privada correspondiente no se almacena en un solo nodo ni está disponible en ningún nodo. En cambio, se divide en múltiples recursos secretos y se distribuye entre todos los nodos mediante criptografía de umbral. Los nodos pueden firmar mensajes de forma colectiva para los usuarios y otras subredes mediante estos recursos secretos. Esto hace que la validación del estado y los resultados sea trivial para los usuarios, ya que todo lo que necesitan hacer es verificar la firma digital con la clave pública fija sin descargar y validar bloques en la cadena de bloques.

Esta característica tiene profundas implicaciones y casos de uso:

  • No es necesario mantener los bloques de la cadena de bloques disponibles para siempre, lo que sería un cuello de botella para la escalabilidad. De hecho, ICP recolecta activamente los bloques antiguos para mantener limitado el uso del almacenamiento.

Esta característica se llama criptografía de clave de cadena en ICP.

Además, un solo contrato inteligente en ICP es lo suficientemente potente como para albergar una máquina virtual Ethereum (EVM) completa. Esto permite la implementación de contratos inteligentes EVM escritos en Solidity.

Una característica única de ICP es que los contratos inteligentes pueden manejar solicitudes HTTP y ofrecer recursos web como HTML, JS y CSS. En otras palabras, es posible escribir una aplicación Web3 con el backend y el frontend alojados completamente en la cadena. Los contratos inteligentes también pueden realizar solicitudes a otros servicios Web2 fuera de ICP.

Los desarrolladores de Ethereum pueden estar acostumbrados a la idea de que los contratos inteligentes se ejecutan de forma secuencial dentro de una transacción atómica. ICP adopta la escalabilidad y ejecuta contratos inteligentes en paralelo. En ese sentido, los contratos inteligentes son similares a los procesos o microservicios de la programación tradicional. Los contratos inteligentes pueden ser completamente autónomos y pueden programar la ejecución mediante temporizadores sin depender de que los usuarios envíen mensajes.

En términos de almacenamiento, un contrato inteligente puede almacenar datos arbitrarios en su memoria WebAssembly. Además, un contrato inteligente puede utilizar una memoria estable más grande . La diferencia entre las dos memorias es importante para los contratos inteligentes actualizables: la memoria WebAssembly se borra en una actualización, mientras que la memoria estable se conserva (de ahí el nombre "estable"). Para los contratos inteligentes inmutables, no hay una diferencia observable entre las dos memorias, excepto por el tamaño y las funciones para acceder a ella.

En el contexto de ICP, los contratos inteligentes se denominan contenedores .

ICP deriva la dirección de una cuenta de usuario a partir de la clave pública del usuario mediante el algoritmo hash.

La codificación textual de una dirección incluye una suma de comprobación que se parece a esto:

mh4eq-xsi7l-lgz7s-gmxoh-stiey-277n4-lev4o-q6hah-22sk6-ahlhm-qae

ICP admite varios tipos de claves (ECDSA, Ed25519, BLS). Las herramientas para desarrolladores suelen generar y aceptar claves en formato PEM.

Los contratos inteligentes pueden proporcionar cuentas de usuario como servicio. Internet Identity es un ejemplo de contrato inteligente que permite a los usuarios de Web2 tener cuentas de blockchain que aprovechan la autenticación de usuario para asignar al usuario una identidad y proporciona delegación a la parte que confía.

También puedes utilizar carteras de hardware y extensiones de navegador.

En el contexto del ICP, las direcciones se denominan principales .

En otras cadenas de bloques como Ethereum, los usuarios pagan una tarifa variable por enviar y ejecutar transacciones en función del precio actual del gas. Para simplificar la experiencia de los usuarios que navegan por las aplicaciones Web3, ICP emplea un “modelo de gas inverso”, en el que los botes pagan por los recursos consumidos mediante la quema de ciclos . Esto es similar al gas en Ethereum, pero tiene un precio fijo que se correlaciona con un grupo de monedas fiduciarias.

ICP está gobernado por una comunidad de organización autónoma descentralizada (DAO) llamada Network Nervous System (NNS). Se implementa como un conjunto de contratos inteligentes que se ejecutan en el propio ICP. Los miembros de la comunidad pueden participar en la gobernanza apostando tokens ICP y votando propuestas. Todos los cambios operativos en ICP, como la actualización de nodos, pasan por votación. NNS ejecuta automáticamente las propuestas que han pasado la votación, lo que garantiza que los nodos ejecuten la misma versión del protocolo y, por lo tanto, evita las bifurcaciones duras.

La gobernanza y la propiedad de los nodos están desvinculadas. Es posible participar en la gobernanza sin tener un nodo y viceversa.

Para convertirse en proveedor de nodos en ICP es necesario que la comunidad DAO vote. Existen dos razones para ello:

  1. Garantiza que el hardware cumpla con los altos estándares de ICP: 64 núcleos de CPU, 512 GiB de RAM, 30 TB de SSD NVMe. Estos nodos pueden mantener un alto rendimiento y habilitar potentes aplicaciones Web3.

  2. Esto garantiza que la identidad del proveedor del nodo sea conocida por la comunidad. El proveedor del nodo ha firmado una declaración de buenas intenciones y puede ser responsable si el nodo se comporta mal. Esto hace que los ataques Sybil sean más difíciles de llevar a cabo y permite la capacidad de reducir la cantidad de nodos mientras se mantiene alto el coeficiente de Nakamoto. Los nodos se asignan a subredes de manera que maximicen la descentralización, en términos de operadores, geografía y jurisdicción. Esto se llama descentralización determinista .

En la actualidad, las subredes contienen entre 13 y 40 nodos, y la mayoría de ellos están distribuidos geográficamente. Sin embargo, también pueden existir subredes localizadas para dar soporte a aplicaciones que necesiten cumplir con las normativas locales.

Ethereum

PCI

Máquina virtual

EVM

WebAsamblea

Web3 en cadena

-

Sí

Bitcoin sin puente

-

Sí

Los contratos inteligentes pueden firmar mensajes

-

Sí

Llamadas HTTP a Web2 desde contratos inteligentes

-

Sí

Idiomas

Solidez, Vyper, Yul

JS, Python, Rust, Solidity, Motoko y más

Modelo de programación

Transacciones atómicas

Paso de mensajes asincrónico

Capacidad de actualización

Inmutable

Actualizable o inmutable

Modelo de gas

El usuario paga

El contrato inteligente paga

Precio del gas

Variable

Fijado

Calcular

Unos pocos millones de instrucciones por bloque (según el límite de gas de 30 millones)

2 mil millones de instrucciones por bloque (por subred)

Finalidad

~15 minutos

~1,4 s

Tarifa promedio de tx/msg

~$1

~$0,000001

Tamaño de la pila

32 KB (1024 valores de 256 bits)

5 MB

Tamaño del código

24 KB (más si se comparte código)

10 MB

Tamaño de la memoria

Pocos KB

404 GiB (4 GiB de memoria Wasm + 400 GiB de memoria estable)

Costo de almacenamiento

18 millones de dólares por GiB (basado en 640 000 de gas por KB)

5 dólares por GiB por año

Número de nodos

~7K

~500 en total, 13-40 por subred

de umbral

Los contratos inteligentes y pueden firmar transacciones para otras cadenas de bloques como Bitcoin y Ethereum. Esto permite una interacción sin necesidad de confiar en esas cadenas de bloques.

inteligentes

ICP utiliza como máquina virtual para ejecutar contratos inteligentes. Esto significa que los desarrolladores pueden escribir contratos inteligentes en lenguajes de programación populares como JavaScript, TypeScript, Rust, Python y Motoko, que está diseñado específicamente para ICP.

Cuentas y

Las cuentas en ICP no tienen saldos integrados, lo que supone una gran diferencia de diseño en comparación con otras cadenas como Ethereum. Todos los tokens se implementan mediante contratos inteligentes. ICP tiene un equivalente del estándar ERC-20, llamado . Si un contrato inteligente implementa ICRC-2, entonces implementa un token fungible y tiene un libro de contabilidad para él.

El modelo de programación de ICP es similar al , donde las llamadas se realizan enviando mensajes en lugar de transacciones. La diferencia entre una transacción y un mensaje se hace evidente solo cuando el contrato inteligente llama a otros contratos inteligentes. Una transacción es atómica en el sentido de que revierte todos los cambios de estado si alguna de las llamadas falla. Un mensaje no tiene tales garantías de atomicidad entre llamadas. La programación en ICP es más asincrónica en comparación con Ethereum. Si el contrato inteligente no realiza ninguna llamada, entonces el mensaje se comporta exactamente como una transacción.

Comparación rápida con

👽
🎓
Subredes
Firmas
pueden tener sus propias claves secretas
Contratos
WebAssembly
claves
Fichas
ICRC-2
Mensajes
modelo de actor
Ciclos
Gobernanza
Nodos
Ethereum
criptografía de umbral
replicación de máquinas de estados
un novedoso algoritmo de consenso
la clasificación de imágenes,