Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Settlements #1

Open
gagarinchain opened this issue Aug 13, 2019 · 1 comment
Open

Settlements #1

gagarinchain opened this issue Aug 13, 2019 · 1 comment
Labels
proposal Good to have

Comments

@gagarinchain
Copy link
Owner

gagarinchain commented Aug 13, 2019

Settlement

Для того, чтобы связать ассеты с внешним миром потребуется изменять балансы счетов извне, предлагаю это делать следующим образом.

Инициатор, который делает токенизацию (выпускает или изымает токены), инициирует транзакцию типа SETTLEMENT, со следующими полями:

type = Type.SETTLEMENT ## запрос на сеттлмент
to = default ## специальный адрес, константа используется чтобы облегчить расчет хэша транзакции
nonce = nonce ## нонс
value = amount ## сумма, на которую изменяется баланс, может быть отрицательной 
fee = fee + default_reward ## суммарная награда, которую получат custodians
signature = sign ## подпись
data = script_to_validate ## сейчас это просто имя grpc сервиса, который генерирует стандартный ответ, в идеале это должен быть некий скрипт, который подтверждает совершение блокировки средств и т д

После включения такой транзакции в блок, создается account с адресом address(settlment_hash), на него зачисляется fee - default_fee
Сustodians(сейчас для простоты это commitee) могут сгенерировать транзакцию типа AGREEMENT, следующего вида:

type = Type. AGREEMENT ## одобрение сеттлмента
to = address(settlment_hash) ## адрес сгенерированный по хешу settlment
nonce = nonce ## нонс
value = amount ## 0
fee = fee ## комиссия
signature = sign ## подпись
data = proof ## sign(settlment_hash, pk)

Инициатор токенизации, должен собрать 2N/3 + 1 proof и выпустить транзакцию proof следующего вида

type = Type. PROOF ## одобрение сеттлмента
to = address(settlment_hash) ## адрес сгенерированный по хешу settlment
nonce = nonce ## нонс
value = amount ## 0
fee = fee ## комиссия
signature = sign ## подпись
data = proof ## aggregate_sign(sign(settlment_hash, pki)…)

После включения PROOF в блок (proof верен) баланс инициатора меняется на value, вознаграждение делится равно на всех участников proof

@gagarinchain gagarinchain added the proposal Good to have label Aug 13, 2019
@gagarinchain
Copy link
Owner Author

похоже, что единственный способ не хранить в аккаунте список приславших Agreement, это делить reward пропорционально на всех custodian. проблема этого подхода в том, что кто-то при этом заплатит комиссию, кто-то нет (так как собираем мы 2N/3 + 1 голосов и часть может просто не голосовать).
не брать комиссию с Agreement тоже плохо, так как либо злоумышленник может заспамить сеть такими транзакциями и остановить прогресс либо они вообще не попадут в блок в зависимости от приоритезации пула

самым правильным на данный момент выглядет вариант с сохранением списка голосовавших в аккаунте и соответственно в стейте, нужно подумать о последствиях такого расширения аккаунта

dabasov added a commit that referenced this issue Sep 4, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
proposal Good to have
Projects
None yet
Development

No branches or pull requests

1 participant