Open gagarinchain opened 5 years ago
похоже, что единственный способ не хранить в аккаунте список приславших Agreement, это делить reward пропорционально на всех custodian. проблема этого подхода в том, что кто-то при этом заплатит комиссию, кто-то нет (так как собираем мы 2N/3 + 1 голосов и часть может просто не голосовать). не брать комиссию с Agreement тоже плохо, так как либо злоумышленник может заспамить сеть такими транзакциями и остановить прогресс либо они вообще не попадут в блок в зависимости от приоритезации пула
самым правильным на данный момент выглядет вариант с сохранением списка голосовавших в аккаунте и соответственно в стейте, нужно подумать о последствиях такого расширения аккаунта
Settlement
Для того, чтобы связать ассеты с внешним миром потребуется изменять балансы счетов извне, предлагаю это делать следующим образом.
Инициатор, который делает токенизацию (выпускает или изымает токены), инициирует транзакцию типа SETTLEMENT, со следующими полями:
После включения такой транзакции в блок, создается account с адресом address(settlment_hash), на него зачисляется fee - default_fee Сustodians(сейчас для простоты это commitee) могут сгенерировать транзакцию типа AGREEMENT, следующего вида:
Инициатор токенизации, должен собрать 2N/3 + 1 proof и выпустить транзакцию proof следующего вида
После включения PROOF в блок (proof верен) баланс инициатора меняется на value, вознаграждение делится равно на всех участников proof