А кстати как вообще обновлять контракты? Вот создал я контракт, у меня там теперь лежит тыща эфиров, и я обнаружил маленькую ошибку. Как обновить контракт до новой версии?
Если реализован вызов suicide - то вызвать его, все бабки перейдут к тому, кто его вызвал, а потом запустить новый контракт.
Но в контракт, в котором реализован suicide никто деньги кидать не будет, потому что будет боятся, что владелец контракта их украдет.
Если не реализован вызов suicide - тогда изменить контракт
невозможно сможет только Виталик запилив хардфорк, и то, если не откажутся от алгоритма PoV (Proof of Vitalik)
Хотя есть задумка, как реализовать перегонку денег из main-контракта на backup-контракт, без возможности деньги украсть. но еще не проверена практически. и в виду последних событый с эфиром не очень то есть желание.
Кто хочет заняться даю подсказку - проверка байто-кода контракта, голосование участников контракта.
Кстати, в этой фразе виден фатальный недостаток Эфира, как платформы для смарт-контрактов:
Создать контракт легко.
Изменить контракт очень тяжело: для этого нужно просить Виталика сделать хардфорк.
Это не недостаток, это фича. Контракт перед запуском должен быть отлажен в тестнете. И контракт не должен быть сложным, для сложных контрактов эфир не подходит.
Зато в эфире контракт может запустить любой желающий, а защищать контракт будет вся сеть. Именно это мне в эфире понравилось.
В Lisk,Rise по другому, там контракты работают в side-chain (это блокчейн сбоку основного блокчейна сети), и для защиты каждого side-chain нужно создавать свою сеть, то есть искать форжеров. Там контракт изменить можно, если на это согласится 51% этой side-chain сети, в отличии от эфира, где нужно согласие 51% main-chain сети.
+ Side-chain - можно строить сложные приложения, можно хранить большие обьемы данных на side-chain
- Side-chain - более слабая защита, дорого создавать контракты и их поддерживать, ведь форжерам своего side-chain надо платить, сеть вообще может умереть, если форжеры разбегутся
+ Main-chain - сильная защита, нет риска умирания контракта
- Main-chain - сильно раздутый блокчейн, очень сложно или невозможно править баги, подходит только для несложных контрактов, негде хранить большие блоки данных.
В том же DAO можно было реализовать голосование - если 51% вложенных денег за suicide(доверяют свои бабки создателю DAO) - тогда контракт разрешать вызвать метод suicide создателю. Создатель вызывает метод, получает все деньги и убегает
или получает все деньги, и запускает новую версию контракта с исправленным багом и кидает туда все деньги
Так было бы честно.
А так, как хочет сделать Виталик - это наебка. На сайте, в white-papper-ах и рекламе написано одно, а на самом деле другое.
Зависит от того, что за контракт. Если это мультисиг кошелёк, то там можно сделать функцию migrate(newAddress), которую должны вызвать все владельцы кошелька, чтобы перетащить средства на новый адрес.
В большинстве случаев контракты больших средств хранить не должны. Для миграции пользователей достаточно их оповестить о новом адресе контракта, а старый контракт потихоньку загибается.
Опередили, да через мультисиг норм можно было сделать, была бы башка у создателей DAO