Я пытаюсь лучше понять, как реализовать смарт-контракты с токенами, построенными поверх Ethereum. Прежде чем слишком углубляться в детали реализации Solidity, я хотел бы понять возможные препятствия.
Я хотел бы лучше понять, как данные передаются в смарт-контрактах, и как может работать что-то вроде «цветных монет» из жаргона биткойнов.
Итак, я придумал пример того, как, по моему мнению, можно использовать смарт-контракты, основываясь на том, что я читал: Beervesting .
Для своего примера я придумал новый токен: BeerCoins.
Допустим, эти BeerCoins созданы путем майнинга, и пивоварни могут захотеть купить или добыть их, чтобы создать фьючерсный рынок пива... может быть, они хотят продать свое пиво со скидкой, прежде чем начнут его варить.
Вот несколько типов транзакций, которые, как мне кажется, можно было бы осуществить с этими BeerCoins:
Итак, предположим, что Алиса — опытный любитель пива, и она хочет купить свое пиво заранее со скидкой, используя Ethereum. Она может выкупить свое пиво, как только оно будет сварено (через 2 месяца).
Алиса обменивает Ethereum на BeerCoins, и BeerCoins теперь меняют состояние: их можно обменять на 1 пинту пива за каждую .
Теперь, возможно, проходит какое-то время, и Боб хочет принять участие в этой акции BeerCoin. Он не хочет ждать следующей партии; он хотел бы купить некоторые из текущей партии. В ближайшие несколько недель у него вечеринка, а хорошее пиво варится пару месяцев. Алиса решает отдать Бобу несколько (полных) BeerCoins в обмен на биткойны.
Теперь Боб готов устроить вечеринку, поэтому он отправляет часть своих BeerCoins обратно на пивоварню, и они отправляют ему пиво. Пивоварня прикрепляет номер отслеживания к транзакции, и BeerCoins переводятся и опустошаются , как только пиво доставляется (как сообщает оракул , судоходная компания).
Возможна ли реализация этого смарт-контракта? Могут ли токены Ethereum нести состояние таким образом?
Есть ли хорошие примеры такой реализации?
Я думаю, что есть несколько вещей, которые следует учитывать:
Заранее спасибо за помощь.
На самом деле невозможно присвоить каждому токену состояние. Стоимость хранения была бы слишком большой -> Вам нужно было бы дать каждому токену владельца. Это может сработать, если у вас не так много токенов. (по 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 истекает.
Очень хорошая идея!
Извините за опечатки, я на мобильном и на французском :)
Примечание: насколько я знаю, оракул потребляет метод.
Крис Хабли
Крис Хабли