
En el artículo, hablaré sobre qué es el Contrato de Garantía, también conocido como un mecanismo para proporcionar beneficios públicos y grupales, y juntos escribiremos nuestra propia implementación de crowdfunding basada en Agentes Autónomos en la plataforma Obyte.
Assurance Contract es un mecanismo organizado de recaudación de fondos para crear un nuevo bien público. Un ejemplo típico del uso de tales contratos puede ser la siguiente situación: los participantes en una cooperativa de verano decidieron construir un camino para un acceso conveniente a sus casas de verano. Para hacer esto, recolecte la cantidad N y transfiérala al contratista para la construcción de la carretera. Surgen muchas preguntas: dónde encontrar a una persona en quien todos confiarían y cobraría la colección, cómo hacer que todos los usuarios potenciales de la carretera inviertan en su construcción, qué sucederá si no se recauda suficiente dinero, etc.
Los contratos de garantía tienen un significado muy similar al crowdfunding, solo los inversores no están expuestos al riesgo, como es el caso de los inversores que invierten en empresas riesgosas. Dichos contratos, así como el crowdfunding, también pueden tener dos resultados: exitoso y no exitoso, dependiendo del logro del objetivo para el monto recaudado. El resultado de una recolección exitosa será la recepción por parte de los inversores, pero a veces no solo de ellos, de un nuevo bien público. En caso de falla, el dinero simplemente se devuelve a los depositantes.
Entonces, para empezar, repetimos las condiciones básicas. La esencia del crowdfunding es recaudar fondos "en una multitud" para un objetivo predeterminado, con una cantidad final determinada (no necesariamente fija, puede ser dinámica) y una fecha de finalización (también no siempre, pero generalmente). Cuando se alcanza este monto, la ronda de financiamiento se considera exitosa y la recolección se detiene, todos los fondos se asignan para alcanzar la meta. En caso de falla, es decir, al llegar a la fecha límite y con fondos insuficientes recaudados, todos los fondos serán devueltos a los donantes.
¿Qué problemas resuelve el crowdfunding de criptomonedas? En primer lugar, evita que los inversores tengan que confiar y verificar a quién envían su dinero. El código del agente autónomo para la recaudación de fondos está abierto y cada inversor puede asegurarse de que puede retirar su contribución en cualquier momento hasta que se alcance el monto final, así como que todos los fondos se enviarán a una dirección preseleccionada para crear el bien. En segundo lugar, la contabilidad transparente de todos los fondos recaudados ayuda a distribuir los beneficios futuros del logro de la meta en proporción a la contribución realizada.
Otro problema que puede resolverse con el Contrato de Garantía es el problema de coordinación. Hoy complementaremos nuestro último artículo sobre el
juego "Attack 51%" , y solo resolveremos este problema. Sin el uso de AA, los participantes en el juego estarán en riesgo de "falta" de la cantidad recaudada debido a la falta de coordinación. Entonces, aquellos que ya han logrado hacer una inversión simplemente perderán su dinero debido a otros participantes que no han mostrado interés, o simplemente no han tenido tiempo para hacerlo (recuerde que los equipos oponentes tienen exactamente 24 horas para desafiar al líder actual). Al recolectar dinero a través de un contrato de garantía, los jugadores podrán retirar su dinero en cualquier momento hasta que se recaude la cantidad necesaria.
No es aplicable en nuestro caso, pero otra característica útil de dichos contratos es reducir el impacto del "efecto del conductor libre" o el "problema del conductor libre". Dado que el bien público, es decir, ya sea inalienable o difícil de controlar el acceso a él, el problema de la libre circulación es el principal en la organización de los bienes públicos. La gente no quiere invertir en algo que otros puedan usar gratis, o el inversionista mismo, adhiriéndose a un comportamiento económico absolutamente racional y eligiendo una estrategia de "no inversión", en caso de una colección exitosa, es probable que pueda usar el bien creado.
También hablaré sobre la opción de contrato de garantía optimizado, que aumenta las posibilidades de éxito en la recaudación de fondos, como El comportamiento racional de los participantes ya será la elección de estrategias de inversión, en lugar de ignorarlas.
Jugamos el juego colectivamente
Para nuestro ejemplo, tomaremos el
juego "Attack 51%" ya conocido en el
último artículo.En su implementación actual, los participantes del juego envían dinero a la dirección AA del juego. Pero el algoritmo puede mejorarse y las posibilidades de perder dinero por parte de los participantes en caso de perder a su equipo pueden reducirse.
Para esto, cualquier miembro del equipo puede organizar crowdfunding con un objetivo dinámico igual al menos al 51% del grupo total del juego. A medida que el grupo crece, el objetivo final de crowdfunding también cambiará. Y solo si tiene éxito, el dinero se enviará a la dirección AA del juego y el equipo se convertirá inmediatamente en el líder actual. Si tal evento nunca ocurre, entonces los participantes no perderán su dinero, desperdiciando el fondo del juego en vano, sino simplemente tomando el dinero del crowdfunding AA.
Los originales de ambos agentes independientes siempre están disponibles en el
editor de código Oscript en
línea en forma de plantillas, solo selecciónelos en el menú desplegable: "Juego de ataque del 51%" y "Proxy de recaudación de fondos".
Antes de comenzar a escribir AA en Oscript, le recomiendo leer la
Guía de inicio (eng) en nuestra documentación para familiarizarse rápidamente con los principios básicos de la escritura de AA.
Escribir un código
Primero, escribimos el algoritmo: el donante envía bytes a la dirección AA, recibiendo a cambio un token de financiación colectiva en la proporción de 1 a 1. En cualquier momento, puede cambiar estos tokens por bytes. Después de recibir los bytes, AA comprueba que hemos alcanzado el objetivo de recaudar fondos y, de ser así, envía todos los bytes a la dirección de AA del juego y recibe a cambio las fichas del juego (fichas del equipo). El donante ahora puede intercambiar sus tokens de crowdfunding por tokens de juego, que, en el futuro, en caso de que el equipo gane, ya pueden cambiarse por bytes a través de juegos AA, recibiendo hasta x2 bytes de los originales.
Entonces comencemos.
La unidad de procesamiento de inicio del nuevo período de recaudación de fondos. Al recibir el campo "inicio" en el mensaje de datos entrantes a la dirección de nuestro AA, emitiremos nuestro token de crowdfunding y lo escribiremos en el estado, también lo devolveremos como respuesta a la persona que llama.
{
Procesamiento de depósitos de donantes. Primero, filtramos las transacciones basura con cantidades muy pequeñas, que no son suficientes incluso para una comisión. A continuación, verifique las condiciones básicas de que el juego no se haya completado y que sea posible recolectar. Listado completo de bloques:
{
Inmediatamente después de las verificaciones iniciales, la lógica principal de nuestro AA es:
$total_raised = var['total_raised'] + $amount;
- aquí resumimos la cantidad recién recibida con la cantidad total de fondos del agente.
$missing_amount = ceil((balance[$destination_aa][base] + $total_raised)*0.51) - var[$destination_aa]['team_' || $team || '_amount'];
- Comprueba que la nueva cantidad de fondos recaudados es suficiente para ganar el juego. Tenga en cuenta la referencia al saldo y el estado de las variables de otro AA:
balance[$destination_aa][base]
y
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
.
Hacemos todo esto en el bloque de
init
, que se llama cada vez antes de procesar los mensajes de transacción. La respuesta a la transacción entrante, obviamente, será el envío de tokens AA en una relación uno a uno en relación con los bytes recibidos (el primer bloque de la matriz de
mensajes ). El segundo y tercer bloque se ejecutarán solo si la variable local
$ bDone se establece en
verdadero (se establece en el bloque de
inicio ). En ellos, enviaremos todos los fondos desde la dirección de este AA a la dirección del juego AA, recibiendo a cambio fichas de juego. En el último bloque de mensajes, simplemente actualizamos el estado, configurando los estados necesarios y la cantidad recaudada.
Al procesar los tokens recibidos del juego de AA, ya están en el saldo de nuestro AA, solo necesitamos cambiar el estado del agente:
{
Refand de inversiones por jugadores. Le permitimos negarse a participar en cualquier momento y recuperar sus bytes. Para hacer esto, el jugador envía las fichas de este AA, y le enviamos los mismos bytes en la transacción de devolución:
{
Intercambio de nuestras fichas AA por fichas de juego. Simplemente enviamos tokens de juego que están en el saldo de nuestro AA (en el caso de pasar el bloque if) en una cantidad igual al número de "nuestros" tokens recibidos.
{
El código del agente está listo, aquí hay una lista completa del mismo:
Código de agente completo { init: `{ $asset = var['asset']; $destination_aa = 'WWHEN5NDHBI2UF4CLJ7LQ7VAW2QELMD7'; $team = 'VF5UVKDSOXPMITMDGYXEIGUJSQBRAMMN'; }`, messages: { cases: [ {
No implementamos el algoritmo más trivial, porque nuestro objetivo es dinámico, lo que no es típico de un contrato de garantía típico. En ellos, la mayoría de las veces se fija la cantidad objetivo, así como el tiempo límite. Esto no requerirá cambios importantes en el código, así que dejemos esto como un ejercicio para el lector.
¡La mejor estrategia es invertir!
Y ahora volviendo al problema del piloto libre. En el caso del juego, no tenemos ese problema, porque solo los poseedores de tokens de crowdfunding pueden ganar. Pero resolver el problema del free-rider ayudará en el caso del juego. Podemos "estimular" a las personas para que inviertan. Para hacer esto, el organizador de recaudación de fondos, que también es el creador de AA, puede establecer una pequeña compensación, que pagará de su bolsillo si no se logra el propósito de la colección. En el caso de una colección exitosa, el organizador tomará un pequeño porcentaje. Es decir, presentamos a un tercero que, para obtener beneficios, cubrirá el riesgo de una recaudación fallida.
Aplicando tal "crowdfunding optimizado", el comportamiento previamente racional de "no invertir" (en general, que cualquier bien público sea libre es siempre la estrategia más rentable económicamente) puede volverse menos racional que invertir. Esto puede ser especialmente relevante en casos de creación de bienes grupales en los que está involucrado cierto círculo de personas. Esto no elimina completamente el problema de polizón, pero hace que la participación sea un comportamiento racional.
El código que implementa el "contrato de garantía optimizado" también se dejará como un ejercicio interesante para quienes lo deseen.