¿Pueden los tokens de Ethereum que representan activos del mundo real llevar datos variables (estado, unidades, tipo, etc.)?

Estoy tratando de comprender mejor cómo implementar contratos inteligentes con tokens construidos sobre Ethereum. Antes de profundizar demasiado en los detalles de implementación con Solidity, me gustaría comprender los posibles obstáculos.

Me gustaría comprender mejor cómo se transportan los datos en los contratos inteligentes y cómo podría funcionar algo como "monedas de colores" de la jerga de Bitcoin.

Entonces, se me ocurrió un ejemplo de cómo creo que se podrían usar los contratos inteligentes según lo que he leído: Beervesting .

Para mi ejemplo, se me ocurrió un nuevo token: BeerCoins

Digamos que estas BeerCoins se crean mediante la minería, y las cervecerías pueden querer comprarlas o extraerlas para crear un mercado de futuros de cerveza... tal vez quieran vender su cerveza con un descuento antes de comenzar a elaborarla.

Cervecería con BeerCoins

Aquí hay algunos tipos de transacciones que creo que podrían hacerse con estas BeerCoins:

Transacción 1 - Alice compra BeerCoins

Entonces, digamos que Alice es una bebedora inteligente de cerveza y quiere comprar su cerveza por adelantado con un descuento usando Ethereum. Puede canjear su cerveza una vez que se haya elaborado (en 2 meses).

Alice intercambia Ethereum por BeerCoins, y las BeerCoins ahora cambian de estado: se pueden canjear por 1 pinta de cerveza cada una .

Transacción 2 - Alice vende algunas BeerCoins a Bob

Ahora, tal vez pase algún tiempo y Bob quiera participar en esta acción de BeerCoin. No quiere esperar al siguiente lote; le gustaría comprar algo del lote actual. Tiene una fiesta en las próximas semanas, y la buena cerveza tarda un par de meses en prepararse. Alice decide darle algunas BeerCoins (completas) a Bob a cambio de algunas Bitcoins.

Transacción 3: Bob canjea BeerCoins por cerveza

Ahora, Bob está listo para tener su fiesta, por lo que envía algunas de sus BeerCoins a la cervecería y le envían cerveza. La Cervecería adjunta un número de seguimiento a la transacción, y las BeerCoins se transfieren y vacían tan pronto como se entrega la cerveza (según lo informado por un oráculo , la compañía naviera).

Cerveza!

Entonces mi pregunta es:

¿Es posible la implementación de este contrato inteligente? ¿Pueden los tokens de Ethereum llevar un estado de esta manera?

¿Existen buenos ejemplos de este tipo de implementación?

Creo que hay algunas cosas a considerar:

  • ¿Cómo almacenar/modificar datos de estado en un token? ¿Hay mejores prácticas?
  • ¿Cuántos datos se pueden almacenar prácticamente en un token?

Gracias de antemano por la ayuda.

Respuestas (2)

No es realmente factible dar a cada ficha un estado. El costo de almacenamiento sería demasiado grande -> Tendría que darle a cada token un propietario. Podría funcionar si no tienes tantos tokens. (1000l de cerveza cada uno) Pero aún así, una posible implementación sería algo como esto:

contract beer{
   struct beerToken{
      uint deliveryDate;
      uint256 quantity;
      ...
   }
   mapping(address=>beer) beers;
}

Una mejor implementación para el escenario que sugirió sería algo como esto:

contract beer{
   //the first uint could be a timestamp when the beer gets delivered
   //everyone now owns token of a delivery of beer
   //you could also add more variables to this
   mapping(uint=>mapping(address=>uint256)) balances;

   //which = timestamp
   function transfer(uint which,address _to, uint256 _value){
      if(balances[which][msg.sender]-value>0){
         balances[which][msg.sender]-=value;
         balances[which][_to]+=value;
      }
   }
}

Solo pregunta si necesitas más información. Me alegra ayudar.

Gracias por la ayuda. ¿Cambiaría la implementación propuesta si la materia prima fuera, por ejemplo, un metal precioso, en lugar de cerveza? O, si había una fecha de entrega abierta (es decir, cuando el titular del token quisiera intercambiarlo).
Tenía la impresión de que las fichas vivían para siempre. Si pudieran crearse al iniciar el contacto y destruirse cuando se redimieran... ¿quizás el almacenamiento no sería tan malo?

En mi opinión, está totalmente en el contexto de ethereum y se puede hacer con seguridad.

En lugar de tener un "estado", ¡Bob simplemente se transferiría al último contrato de lote de cerveza oa la dirección x en el momento de la entrega! Luego, estos tokens se quemaron/destruyeron una vez que todos los tokens del lote se recuperaron o se alcanzó x tiempo.

¡Muy buena idea!

Lo siento por los errores tipográficos, estoy en el móvil y en francés :)

Nota: por lo que sé, Oracle está consumiendo el método.