La gran mayoría de las blockchain públicas tienen un mecanismo llamado gas (o “tarifa de gas”) que se utiliza para una variedad de propósitos, como contrarrestar los ataques DoS, evitar el tiempo de inactividad de los smart contracts e incentivar a los mineros. Pero el mecanismo del gas también eleva el listón para que los usuarios interactúen con los smart contracts: tener el mecanismo del gas significa que tener tokens nativos de la blockchain es un requisito previo para interactuar con los smart contracts.
Además de la minería, los usuarios solo pueden obtener los tokens de blockchain fuera de la blockchain de otros usuarios (incluido DEX). Actualmente, tanto las transacciones mineras como las que están fuera de blockchain no son fáciles para los usuarios. Además, interactuar con un smart contract significa que un usuario tiene que gastar gas en todo momento. Hay un costo para cada operación, por lo que los usuarios pueden sopesar si vale la pena pagar tanto gas antes de comerciar.
En Ethereum, donde las operaciones directas en la blockchain principal requieren altos costos de gas, es un ejemplo típico de este fenómeno, aunque el problema puede mitigarse con algunas tecnologías de capa 2.
El Mecanismo de Patrocinio en Conflux, en resumen, permite a los patrocinadores pagar la tarifa del gas para los usuarios que interactuan con el smart contract (las tarifas de participación de almacenamiento también se pueden patrocinar en Conflux, pero aquí no hablaremos de eso). El usuario que está “patrocinado” no tiene que gastar el gas al crear una transacción. Con el patrocinio habilitado, una cuenta con saldo cero también puede interactuar con el smart contract. Esto reduce significativamente el listón para que los usuarios interactúen con el smart contract.
Configurar un patrocinio
Como sugiere el nombre “Patrocinio”, el hecho de que una cuenta con un saldo cero pueda interactuar con un smart contract no se debe a que no se apliquen las tarifas, sino a que otra persona las ha pagado. El smart contract de Conflux, SponsorWhitelistControl, es responsable de administrar el mecanismo de patrocinio. El patrocinador solo necesita pagar CFX a SponsorWhitelistControl y especificar la dirección del smart contract que será patrocinado.
Si no deseas considerar ninguno de los detalles del patrocinio y solo deseas configurar un patrocinio para un smart contract que aún no tiene uno, puedes seguir los pasos a continuación para interactuar con él.
Aquí se omitirán algunos detalles para asegurarse de que esta configuración se aplique a casi todos los smart contract. La captura de pantalla a continuación utiliza la interfaz gráfica de Conflux Studio para interactuar con el smart contract SponsorWhitelistControl (consulta el Tutorial de desarrollo de Conflux | Guía práctica para desarrollar DApps usando el IDE para saber cómo usar Conflux Studio).
Puedes conseguir 1000 CFX de testnet dentro del faucet. El siguiente ejemplo establece un patrocinio de 500 CFX de participación de gas y almacenamiento, respectivamente. Todas las siguientes acciones se pueden realizar accediendo al faucet una vez. La configuración del monto del patrocinio en casos del mundo real depende del escenario real.
En testnet, los tokens CFX se pueden obtener desde el testnet faucet (hay portales en Conflux Studio o prueba de red faucet DApp). En la red principal (en Conflux Tethys), además de configurar tu propio patrocinio, también puedes postularte a la Fundación Conflux en la página Patrocinio de contratos de Conflux Scan y hacer que la Fundación Conflux pague el smart contract.
-
Implementa un smart contract. Puedes crear e implementar un smart contract utilizando la plantilla ERC20 proporcionada en Conflux Studio.
-
El administrador del smart contract (o el smart contract en sí) configura una lista blanca de patrocinadores en SponsorWhitelistControl. El administrador del smart contract es el creador del mismo por defecto. Para obtener una descripción más detallada del administrador, puedes consultar la sección AdminControl en la Introducción a las funciones de contrato interno de Conflux.
- Interactua con el contrato SponsorWhitelistControl (dirección 0x0888000000000000000000000000000000000001). Selecciona el método addPrivilegeByAdmin.
2 . En el parámetro contractAddr, establece la dirección del contrato para el que desea configurar el patrocinio. - Agrega el elemento cfxtest: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6f0vrcsw (la dirección cero en cfxtestnet) en el parámetro de direcciones.
- En firmante, configura el administrador del smart contract.
- Ejecútalo después de estimar las tarifas de gas y almacenamiento.
- Configura el patrocinio de Gas.
- Aún así, interactúa con el contrato SponsorWhitelistControl. Selecciona el método setSponsorForGas.
- Establece el de
CFX to send
en 500. - Establece
contractAddr
en la dirección del smart contract en el que deseas configurar el patrocinio. - El
upperBound
se establece en10000000000
(10G). - El
signer
se puede configurar con cualquier cuenta, siempre que tenga suficiente CFX (más que el parámetro CFX to Send). - Como antes, estima y ejecuta.
- Configura patrocinio colateral
- Interactua con el contrato SponsorWhitelistControl. Selecciona el método setSponsorForCollateral.
- Establece el parámetro de
CFX to Send
en 500. - Establece
contractAddr
en la dirección del smart contract en el que deseas configurar el patrocinio. - El
signer
se puede configurar con cualquier cuenta, siempre que tenga suficiente CFX. - Como antes, estima y ejecuta.
Luego, se completa la configuración del patrocinio del smart contract.
Explicación de detalles en el mecanismo de patrocinio
Esta sección explicará algunos de los parámetros mencionados anteriormente. Para obtener más detalles, puedes consultar Introducción a las características del smart contract interno de Conflux, que proporciona una introducción detallada a todos los aspectos del mecanismo de patrocinio.
La lista blanca en pagos por smart contract
Se utiliza un mecanismo de lista blanca en el patrocinio del smart contract. En el smart contract de SponsorWhitelistControl, se mantiene una lista blanca para cada dirección: solo los usuarios de la lista blanca pueden ser patrocinados. De forma predeterminada, esta lista blanca está vacía, lo que indica que el patrocinio no está habilitado.
La lista se establece llamando a addPrivilegeByAdmin desde el administrador del smart contract, o al método addPrivilege en el smart contract de SponsorWhitelistControl desde el contrato mismo. Si hay una dirección cero en la lista blanca, entonces cualquier usuario que interactúe con el contrato puede ser patrocinado. Además, el contrato puede llamar a la interfaz correspondiente (eliminar) para eliminar usuarios de la lista blanca.
Por lo general, agregar una dirección cero a esta lista es suficiente para nosotros.
El UpperBound en el Patrocinio de Gas
// ------------------------------------------------------------------------
// Someone will sponsor the gas cost for contract `contractAddr` with an
// `upper_bound` for a single transaction.
// ------------------------------------------------------------------------
function setSponsorForGas(address contractAddr, uint upperBound) public payable {}
En setSponsorForGas
, además del número de CFX que debe enviarse (como lo requiere la palabra clave pagable) y la dirección del smart contract, también debe establecerse el parámetro upperBound
.
Este parámetro representa el límite superior de gas (en Drip, es decir, 10e-18 CFX) que se puede gastar por transacción patrocinada. es decir, la transacción patrocinada debe satisfacer el requisito previo de gasUsed
* gasPrice
<= upperBound
. Si la transacción requiere más gas que UpperBound
, la tarifa del gas no la pagará el patrocinador, sino el usuario que crea la transacción. El tps de Conflux es muy alto. En general, establecer el precio de gas de una transacción en 1 es suficiente para satisfacer la demanda. Conflux Foundation establecerá este valor en 10G al realizar un pago. Cubrirá básicamente todas las transacciones.
También debe tenerse en cuenta que existe una restricción entre el parámetro upperBound
y el CFX enviado. Este último debe ser no menos de 1000 veces el primero. Para el CFX enviado en Conflux Studio, ten en cuenta que las unidades no coinciden, la comparación numérica entre ellas debe ser upperBound
≤ CFX_to_send
* 10 ** 15
. En otras palabras, el CFX que enviaste para el patrocinio debe ser suficiente para la tarifa de gas de al menos 1000 transacciones, asumiendo que cada transacción usará gas hasta el límite superior.
Patrocinios colaterales de almacenamiento
En Conflux, cuando un usuario almacena datos de 1 KB en un smart contract, necesita bloquear 1 CFX como depósito. El depósito no se gasta y se reembolsará cuando se cumplan determinadas condiciones. El minero también será compensado por los datos almacenados. Se puede encontrar una descripción detallada de la garantía de almacenamiento en Conflux Storage Deposit Mechanism.
Mientras el espacio de almacenamiento está en uso, el depósito devenga un interés anual de 4.08%, que se distribuye directamente a los mineros para compensar el costo de almacenamiento. El depósito de almacenamiento está bloqueado en 1 CFX / KB, por ejemplo, si actualmente hay 100 GB de datos para almacenar, el depósito de almacenamiento total sería de aproximadamente 100 millones de CFX y el interés promedio generado por bloque sería de aproximadamente 0.06 CFX.
Comprobación del saldo de patrocinio
Después de configurar un patrocinio, el CFX se transferirá del patrocinador al smart contract SponsorWhitelistControl
. Cuando ocurre un patrocinio, se gastará la cantidad correspondiente en el SponsorWhitelistControl
(o se bloqueará si se usa en almacenamiento). Los detalles se pueden consultar a través de los métodos getSponsoredBalanceForCollateral
y getSponsoredBalanceForGas
de SponsorWhitelistControl
.
/**
* @dev get collateral sponsor address
* @param contractAddr The address of the sponsored contract
*/
function getSponsorForCollateral(address contractAddr) public view returns (address) {}
/**
* @dev get current Sponsored Balance for collateral
* @param contractAddr The address of the sponsored contract
*/
function getSponsoredBalanceForCollateral(address contractAddr) public view returns (uint) {}
Sobre del diseño del patrocinio
Ataques DDoS
Naturalmente, el propósito del mecanismo de patrocinio entra en conflicto con el mecanismo del gas. La existencia de gas eleva el umbral para realizar transacciones y también se aplica a los atacantes. Cuando desaparece, se abre la puerta a los atacantes. Por ejemplo, los atacantes pueden construir e iniciar una congestión masiva de la red mediante contratos patrocinados.
Esta también puede ser la razón para tener el mecanismo de lista blanca. Es una confusión común cuando los usuarios están aprendiendo sobre el mecanismo de patrocinio: dado que el patrocinio se crea para reducir el requisito de uso, ¿por qué debería haber un mecanismo de lista blanca para restringirlo? Desde la perspectiva de la prevención de ataques DDoS, quizás la razón sea que actúa como protección potencial para evitar el uso indebido del patrocinio al permitir que solo los usuarios elegibles lo habiliten a través de la lista blanca.
Consumo malicioso de patrocinio
Por otro lado, es posible que un patrocinio sea utilizado de forma maliciosa. Intuitivamente, un atacante puede gastar gas patrocinado rápidamente simplemente construyendo una pequeña cantidad de transacciones con un precio de gas altísimo. Los mineros pueden beneficiarse directamente de un ataque de este tipo. Cuando se agota el monto del patrocinio, el contrato cuyo patrocinio se agotó debe restablecer el patrocinio. Esto puede afectar el uso normal del usuario durante este período. Por lo tanto, este podría ser el propósito del parámetro upperBound: al establecer el límite superior derecho, podemos ralentizar la tasa de consumo de gas patrocinado. El límite superior de 10G establecido por la Fundación Conflux puede parecer alto, pero solo equivale a 10 ** - 8 CFX, que es suficiente para admitir una gran cantidad de transacciones.
Pero, por el contrario, el patrocinio de estaca de almacenamiento se puede ocupar más fácilmente. En comparación con el consumo de gas, el almacenamiento de staking de almacenamiento es mucho más cara. Por cada 1 KB de almacenamiento ocupado, se bloquea 1 CFX. Si hay un atacante real que tiene la intención de realizar un ataque, la cantidad de patrocinio de almacenamiento se puede agotar fácilmente. Si los mineros pueden beneficiarse de esta acción puede necesitar más discusión (los mineros se interesan en el almacenamiento, pero gastaron el espacio de almacenamiento; cada minero paga la misma cantidad de espacio de almacenamiento pero no recibe las mismas recompensas). Dado que los atacantes pagan un costo muy pequeño, estos ataques aún pueden ocurrir.
Ejemplo de agotamiento del almacenamiento malicioso: en los contratos ERC20, un usuario malintencionado puede agotar fácilmente el almacenamiento enviando al azar tokens ERC20 10e-18 a una dirección aleatoria.
Posibles inconvenientes y beneficios
En el contexto de la discusión anterior y el entorno general, las restricciones de patrocinio de Conflux parecen apuntar más a los usuarios honestos que a los usuarios malintencionados. Pero para dar un paso atrás, incluso si ocurre un ataque, el daño no es tan grande como uno predice; esto significa que la fuente del problema no es el patrocinio en sí. En el caso de los ataques DDoS, si un atacante desea realizar un ataque DDoS, el costo de no utilizar un patrocinio sigue siendo muy bajo en la red Conflux actual. No importa si utilizan el patrocinio o no. En términos de consumo malintencionado del monto del patrocinio, la participación de gas y almacenamiento en el smart contract es solo un regreso a la normalidad, es decir, el modelo sin patrocinio. No es peor que la situación que no tiene el patrocinio al principio.
Sin embargo, el umbral para interactuar con el smart contract se reduce significativamente con el patrocinio, lo que sin duda es una gran ayuda para proyectos incipientes (y en algunos sentidos, Conflux en sí). Los posibles inconvenientes del patrocinio pueden no ser tan importantes en esta etapa en comparación con los beneficios que aporta.
Formas de aplicación
Actualmente, hay dos posibles formar para ir a la página de solicitud para enviar una solicitud de patrocinador a la Fundación.
Primera opción
- Ve al sitio web oficial de ConfluxScan (confluxscan.io).
- Haz clic en “Token” - selecciona el smart contract del token que desea verificar e ingresa a la interfaz del contrato.
- Haz clic en “Apply for Sponsorship” en “More”.
- Haz clic en “Apply”.
Segunda opción
- Ve al sitio web oficial de ConfluxScan (confluxscan.io).
- Haz clic en “Blockchain”, selecciona “Sponsorship Contracts” en la columna “Contract” e ingresa a la interfaz del contrato de patrocinio.
- Completa el campo de búsqueda con la dirección del smart contract que desea solicitar para el patrocinio, haz clic en “Search”.
- Haz clic en “Apply”.
Reglas de patrocinio
- Patrocinio colateral de almacenamiento indiferenciado: 1 * 10 cfx.
- Patrocinio de gas indiferenciado: 5 * 1 Gdrip, límite superior de 500,000 Drip (aproximadamente Gas con precio 1 y límite de Gas de no más de 500,000).
- Las solicitudes de patrocinio requieren una negociación individual para cada proyecto específicamente, se solicita a los grupos de proyectos que completen los siguientes dos pasos y esperen la revisión.
- Completar la verificación del smart contract en Confluxscan, corrije los mensajes de advertencia en el proyecto y configura el administrador del smart contract integrado (nota: no el administrador en la gestión de contratos) en la dirección cero.
Después de completar el artículo 1, consulta con [email protected] con los siguientes detalles:
- Nombre del proyecto.
- Objeto (patrocinio de gas / patrocinio de almacenamiento).
- Dirección del smart contract.
- Información del contacto.
Por lo general, la respuesta a la solicitud se enviará en un plazo de 7 días hábiles. Ten en cuenta que la presentación no significa que la solicitud de patrocinio esté aprobada. Por lo tanto, presta atención a la respuesta al correo electrónico y a la información de contacto completada en la solicitud.