Могут ли токены Ethereum, представляющие активы реального мира, нести переменные данные (состояние, единицы, тип и т. д.)?

Я пытаюсь лучше понять, как реализовать смарт-контракты с токенами, построенными поверх Ethereum. Прежде чем слишком углубляться в детали реализации Solidity, я хотел бы понять возможные препятствия.

Я хотел бы лучше понять, как данные передаются в смарт-контрактах, и как может работать что-то вроде «цветных монет» из жаргона биткойнов.

Итак, я придумал пример того, как, по моему мнению, можно использовать смарт-контракты, основываясь на том, что я читал: Beervesting .

Для своего примера я придумал новый токен: BeerCoins.

Допустим, эти BeerCoins созданы путем майнинга, и пивоварни могут захотеть купить или добыть их, чтобы создать фьючерсный рынок пива... может быть, они хотят продать свое пиво со скидкой, прежде чем начнут его варить.

Пивоварня с BeerCoins

Вот несколько типов транзакций, которые, как мне кажется, можно было бы осуществить с этими BeerCoins:

Транзакция 1 - Алиса покупает BeerCoins

Итак, предположим, что Алиса — опытный любитель пива, и она хочет купить свое пиво заранее со скидкой, используя Ethereum. Она может выкупить свое пиво, как только оно будет сварено (через 2 месяца).

Алиса обменивает Ethereum на BeerCoins, и BeerCoins теперь меняют состояние: их можно обменять на 1 пинту пива за каждую .

Транзакция 2 — Алиса продает Бобу некоторое количество BeerCoins.

Теперь, возможно, проходит какое-то время, и Боб хочет принять участие в этой акции BeerCoin. Он не хочет ждать следующей партии; он хотел бы купить некоторые из текущей партии. В ближайшие несколько недель у него вечеринка, а хорошее пиво варится пару месяцев. Алиса решает отдать Бобу несколько (полных) BeerCoins в обмен на биткойны.

Транзакция 3 — Боб обменивает BeerCoins на пиво

Теперь Боб готов устроить вечеринку, поэтому он отправляет часть своих BeerCoins обратно на пивоварню, и они отправляют ему пиво. Пивоварня прикрепляет номер отслеживания к транзакции, и BeerCoins переводятся и опустошаются , как только пиво доставляется (как сообщает оракул , судоходная компания).

Бирвестинг!

Итак, мой вопрос:

Возможна ли реализация этого смарт-контракта? Могут ли токены Ethereum нести состояние таким образом?

Есть ли хорошие примеры такой реализации?

Я думаю, что есть несколько вещей, которые следует учитывать:

  • Как хранить/изменять данные состояния в токене? Существуют ли лучшие практики?
  • Сколько данных практически можно хранить в токене?

Заранее спасибо за помощь.

Ответы (2)

На самом деле невозможно присвоить каждому токену состояние. Стоимость хранения была бы слишком большой -> Вам нужно было бы дать каждому токену владельца. Это может сработать, если у вас не так много токенов. (по 1000 л пива каждый) Но все же возможная реализация будет примерно такой:

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

Лучшей реализацией предложенного вами сценария будет что-то вроде этого:

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;
      }
   }
}

Просто спросите, нужна ли вам дополнительная информация. Я рад помочь.

Спасибо вам за помощь. Изменится ли предлагаемая реализация, если товаром будет, например, драгоценный металл, а не пиво? Или, если была открытая дата доставки (т. е. всякий раз, когда владелец токена хотел обменять его).
У меня сложилось впечатление, что токены живут вечно. Если бы их можно было создавать при инициации контакта и уничтожать при погашении… может быть, хранилище было бы не так уж плохо?

На мой взгляд, это полностью в контексте Эфириума и может быть сделано наверняка.

Вместо того, чтобы иметь «состояние», Боб просто переводил бы, скажем, контракт на последнюю партию пива или адрес x при доставке! Затем эти токены сжигаются/уничтожаются, как только все токены партии возвращаются или время x истекает.

Очень хорошая идея!

Извините за опечатки, я на мобильном и на французском :)

Примечание: насколько я знаю, оракул потребляет метод.