Size: a a a

2020 January 14

AT

Andrey Cloud Toukmanov in ББ-чат
Добрый день, я попробовал скрестить каналы и атомарные свопы и написал по этому поводу вводную статью
Буду признателен за хулу и похвалу
https://habr.com/en/post/483828/
источник

DK

Dmitry Khovratovich in ББ-чат
"Теперь мы можем переводить токены на контракты не создавая их заранее и пока мы их не опубликуем в сети никто не догадается, что именно делает контракт."

вообще то это всегда можно было делать
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Каким образом? Адрес нового контракта вычисляется как хэш адреса создателя и постоянно возрастающего nonce, мы можем предугадать адрес следующего контракта, но его код полностью определяется создателем
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Это при старом добром create
источник

DK

Dmitry Khovratovich in ББ-чат
Andrey Cloud Toukmanov
Каким образом? Адрес нового контракта вычисляется как хэш адреса создателя и постоянно возрастающего nonce, мы можем предугадать адрес следующего контракта, но его код полностью определяется создателем
ну да, и в чем проблема?
источник

AT

Andrey Cloud Toukmanov in ББ-чат
C create2:
У нас есть HLTL контракт и есть адрес, на котором можно создать только контракт с указанным хэшом, таймаутом и участниками
Т.е. отправитель точно знает, что если он переведет деньги на этот адрес, после таймаута он может вернуть их обратно
А получатель уверен, что раскрыв хэш он заберет деньги себе
С create:
Нужно сначала деплоить контракт
источник

AT

Andrey Cloud Toukmanov in ББ-чат
И теперь у нас дешевый онбординг и мы можем делать более лучшие каналы
источник

AR

Anatoly Ressin in ББ-чат
Dmitry Khovratovich
ну да, и в чем проблема?
Действительно, предвычислить адреса контрактов можно было и раньше без create2. Но проблема в том, что если раздать эти адреса независимым участникам, с просьбой кидать туда токены, то у нас появится проблема - участники кидают токены независимо друг от друга (неупорядоченно и негарантированно), а забирать мы можем только по порядку, т.е. возникает проблема потянуться за третьим адресом, если на второй выданный еще не бросили токенов. Create2 сделал механику выдачи адресов будущих контрактов независимой от порядка деплоймента. Я так понимаю что именно это имел в виду @ne_medved
источник

AR

Anatoly Ressin in ББ-чат
Плюс еще сам адрес становится гарантией семантики контракта
источник

DK

Dmitry Khovratovich in ББ-чат
Anatoly Ressin
Плюс еще сам адрес становится гарантией семантики контракта
источник

AR

Anatoly Ressin in ББ-чат
Ух ты, как!
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Anatoly Ressin
Плюс еще сам адрес становится гарантией семантики контракта
Да именно так.
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Просто появляются новые юзкейсы, которые надо учитывать
источник

AT

Andrey Cloud Toukmanov in ББ-чат
В первую очередь практики защиты от reentrancy
источник

DK

Dmitry Khovratovich in ББ-чат
Andrey Cloud Toukmanov
В первую очередь практики защиты от reentrancy
там нет никакого reentrancy
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Все становится больше похоже на UTXO, и адреса не переиспользуются
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Dmitry Khovratovich
там нет никакого reentrancy
А защиты?
источник

DK

Dmitry Khovratovich in ББ-чат
Andrey Cloud Toukmanov
А защиты?
защиты от чего?
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Там в статье разбирается кейс: я делаю внутри своего контракта проверку существования контракта по адресу, у меня есть три варианта: не знаю, контракт есть и контракт был удален. Например: если сделка закончилась и контракт сделал selfdestruct отдать страховой депозит
источник

AT

Andrey Cloud Toukmanov in ББ-чат
Теперь я могу удалить контракт потом создать заново и снова удалить и мне вернётся ещё один депозит
источник