Solidity и смарт-контракты Ethereum, урок #28 | Паттерн Proxy/Upgradeable: Transparent, UUPS

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 56

  • @laslomagnusen5399
    @laslomagnusen5399 2 роки тому +11

    Одна из самых необходимых функций! Спасибо за ваш труд

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

    • @Unknown-pg4ss
      @Unknown-pg4ss Рік тому

      @@IlyaBodrovKrukowski А если реализуется наследование между кастомными контрактами? например есть контракты X и Y. X is Y. Нужно же прописать везде инициализатор (наследование от Initializer)?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@Unknown-pg4ss Не пробовал, но думаю, что так сделать можно, просто в дочернем сделать super? Но надо проверять, конечно

  • @blackgolddev4023
    @blackgolddev4023 2 роки тому +5

    Вы просто лучший)

  • @D_smv
    @D_smv Рік тому +1

    Спасибо за урок !

  • @danaalakhali6404
    @danaalakhali6404 2 роки тому +4

    Просто супер. Спасибо вам большое!

  • @mrin0
    @mrin0 19 днів тому +2

    10:20

  • @creestl8638
    @creestl8638 Рік тому +1

    Объяснено просто шикарно! +Подписка

  • @usernamer519
    @usernamer519 2 роки тому +4

    спасибо!!

  • @bohdanprog
    @bohdanprog 2 роки тому +1

    Спасибо Илья за твои уроки :)

  • @bohdanprog
    @bohdanprog 2 роки тому +1

    Илья, а подскажи пожалуйста на 26:07 упоминаешь что token == token2, но при попытке вызвать функцию demo, с token пишет что такой функции не существует, или я не правильно понял ?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Там видимо старая привязка хранится, но адрес там тот же - попробуйте выдать в консоль адреса token и token2

  • @natashkinsasha
    @natashkinsasha 2 роки тому +3

    Крутое видео! Я как понял были примеры как деплоить контракты для тестов, но хотелось увидеть пример как деплоить в тестовую сеть. И вообще будет круто если ты сделаешь видио про деплой. Какие инструменты лучше использовать.

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Про это были видео, да и в целом деплой в любую сеть будет совершенно одинаковый - теми же самыми строками кода, что и в тестах, просто при вызове команды HH будет указываться --network и название сети

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Может быть, ещё будет про hardhat-deploy отдельно

    • @natashkinsasha
      @natashkinsasha 2 роки тому +2

      @@IlyaBodrovKrukowski было бы круто про hardhad-deploy посмотреть. У вас лучшие видеоуроки по солидите. Если они сейчас не набирают много просмотров, то со временем количество просмотров будет расти. Спасибо вам!

  • @ghettoar2529
    @ghettoar2529 2 роки тому +3

    Спасибо за урок! Будет ли когда-нибудь обсуждение темы оракулов?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Будет и эта тема со временем, надеюсь :)

  • @MucTePKoHb
    @MucTePKoHb Рік тому +1

    Такой вопрос: как сделать модульный обновляемый смарт контракт. Нормальной информации нет, но у меня конкретно проблема, что размер превышается и как нормально реализовать не понятно(имею ввиду дробление)

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      Можно поискать про паттерн diamond. Он сложнее, но может помочь в таком случае

    • @MucTePKoHb
      @MucTePKoHb Рік тому

      @@IlyaBodrovKrukowski я почему и интересуюсь. Про даймонд я читал и не особо разобрался. Вроде и не сложно когда читаешь, а на деле шляпа. Ну ладно, вопрос собственно по UUPS. Если открыть документацию unstoppabledomains - то у них огромный Смарт контракт с ролями, контролями версий и всего чего только можно. Но вот сделан он именно на UUPS. Как у них это получается а я даже 10% подобного функционала не могу реализовать так как упираюсь в 24кб?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@MucTePKoHb Ну это сложный паттерн. Впрочем, есть плагины (hardhat-deploy), которые его в какой-то мере реализуют. Как сделано - понятия не имею, вероятно они как раз тоже делают хитрый деплой и дробят контракт

    • @MucTePKoHb
      @MucTePKoHb Рік тому

      @@IlyaBodrovKrukowski понятно) а по Даймонду планируется тутор какой? В сети вообще ничего более-менее подробного не нашел, а в русскоязычном сегменте вообще только одно видео и то, особо без объяснений…человек просто взял с гита готовый паттерн и просто говорит: эта вот функция делает это, это вот другое…а что, почему и откуда - фиг его знает)

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@MucTePKoHb Да хотелось бы сделать по возможности, постараюсь

  • @IlyaBodrovKrukowski
    @IlyaBodrovKrukowski  Рік тому

    Для деплоя прокси теперь, пожалуй, лучше использовать github.com/OpenZeppelin/openzeppelin-upgrades Это простое и удобное решение.
    Кроме того, учтите, что недавно вышли новые версии контрактов OpenZeppelin, где есть некоторые отличия. В частности, теперь пишем
    function initialize(address initialOwner) initializer public {
    // ... остальной код
    __Ownable_init(initialOwner);
    }
    Можно использовать мастер для создания контрактов docs.openzeppelin.com/contracts/5.x/wizard
    Если вы хотите узнать, как прокси устроены, то смотреть следует этот урок ua-cam.com/video/WON6VttFTe0/v-deo.html Там именно техническая информация и принцип их работы

  • @satoshimumoto4665
    @satoshimumoto4665 2 роки тому

    Увидел у вас рубрику по руби, уточните, руби используете для смартконтрактов? Если да, то чем он лучше раста? Кстати не могли бы сделать курс по космос?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Нет, Ruby - это совсем про другое. Терминальные приложения, веб-сервисы - в таком духе

  • @satoshimumoto4665
    @satoshimumoto4665 2 роки тому +1

    Сразу 2 вопроса: 1) Я правильно понимаю, что если я сделал смарт контракт и им пользуются, то мне надо либо постоянно подкидывать эфир на адрес контракта либо брать плату с пользователей за трату газа при прогоне кода? Т.е. задеплоил и забыл - не пройдет, надо постоянно подливать бабло? 2) Если я сделал свой токен и хочу выйти на ICO для этого мне надо иметь много денег или же в отличае от IPO это бесплатно или почти бесплатно? - уточните пжл этот момент, я его не понял.

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Нет, не надо ничего подкидывать - за транзакцию платит тот, кто её вызывает, то есть юзер. Сам контракт не может платить комиссию тк он не может иниицировать транзакцию. По второму вопросу не уверен, но видимо никак особенных денег не нужно

    • @satoshimumoto4665
      @satoshimumoto4665 2 роки тому

      @@IlyaBodrovKrukowski спасибо. А не могли бы вы сделать видео по процедуре ico чтобы более детально объяснить это всем?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      @@satoshimumoto4665 Посмотрим, пока не обещаю

  • @axel-sheen
    @axel-sheen 2 роки тому +1

    Илья, смотрю твои уроки и рассказываю о них своему шефу австралийцу. Он теперь мечтает выучить русский язык, чтобы стать причастным к тайному знанию. Ты добавляешь английские субтитры к своим видео?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Ну, если честно, то нет, это отдельная и не очень простая работа. У меня есть английские курсы и статьи, но не по solidity. Впрочем, насколько мне известно, mcs планирует создавать и англоязычные материалы (хотя это в стадии планирования)

    • @timon59388
      @timon59388 2 роки тому +1

      Patrick Collins с freeCodeCamp сняли отличный курс

    • @axel-sheen
      @axel-sheen 2 роки тому

      @@timon59388 ух ты, спасибо, посмотрю!

    • @axel-sheen
      @axel-sheen 2 роки тому

      @@timon59388 я что-то не могу найти на их канале. Можешь ссылочку прислать?

  • @zxc3387
    @zxc3387 2 роки тому +1

    И сразу в мусорку чуть ли не единственное достоинство смарт-контрактов - гарантии.
    А иначе чем оно лучше условного банка, где можно заключать сделки с гарантиями, но... банку KYC не понравился, государству твоя фотка в ВК не зашла, конкурент заплатил больше или банально санкции и всё, "гарантии" в топку.
    Надеяться что к авторам контракта не придут с предложением от которого нельзя отказаться при популярности и, тем более, если они замахнулись отобрать у государства поводок в виде экономики - глупо, привет от Дурова с SEC.
    Те же USDT или подобный койн имеет функционал заморозить твои ассеты.
    Сегодня придёт запрос забанить педофила, завтра просто неугодного сенатору, послезавтра - всех русских/китайцев/иранцев/вставь_своё, ведь они - зло.
    Да, баги и фичи - крайне важно, но не ценой неизменности, иначе проще пойти в тот же банк или распиской на песке.

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Конечно, раз контракты существуют в реальном мире, а не в каком-то параллельном измерении, и их создают люди, на которые всё ещё распространяются привычные законы. Поэтому я бы не стал надеяться, что крипто-валюта как-то радикально изменит жизнь. У этой реальности много достоинств и недостатков, но никакого другого мира у нас пока нет, увы.

    • @zxc3387
      @zxc3387 2 роки тому

      @@IlyaBodrovKrukowski У них (некоторых) есть то, чего ни у кого никогда не было - невозможность никакому диктатору и/или другому органу и/или другой/зависимой стороне запретить/отобрать/саботировать условия/ассеты.
      Если такой гарантии нет - какой вообще в них смысл?
      Расписка в выполнении условий?
      Тогда цифровой рубль/юань и куча сервисов депонирования на эскроу.
      Раздача токенов и их процессинг а-ля деньги?
      Классические приложения много эффективнее (k8s развернёт тысячи подов без проблем, в блокчейне работаем с... ну, меньшими возможностями), да и при достижении хотя бы небольшого успеха, придут SEC и сказочке конец, мы даже версию компилятора иногда обновить не можем без разрешения, все прелести гос. регулирования туда же.
      Как dApps?
      Классические технологии дают намного больше инструментов для создания таких приложений, некоторые из них мы называем сайтами, sarcasm-off.

    • @timon59388
      @timon59388 2 роки тому

      @@zxc3387 ты возможно не разобрался. Менять реализацию может админ. А админом может быть multisig аккаунт, которым руководит группа людей. И вот уже децентрализованное решениe для апгрейда контрактов

    • @zxc3387
      @zxc3387 2 роки тому

      @@timon59388 Ну а разница в чём; надо надавить не на одного, а на 10, это проблема для... определённых лиц?
      Поставить условия для работы компании в виде раскрытия всех участников с паспортом и регистрацией.
      Отказаться - запрет на работу/обвинения/тюрьма.
      И возвращаемся обратно: "... согласно постановлению NNN, ваша компания обязана изъять USDT у обвиняемого в пользу государственного кошелька XXX, выполнить в течении 2 дней" и в копию всем на почту для подписания.
      Или ещё лучше: по Патриотическому акту, можно требовать встроить бэкдор в продукт без уведомления. И требуют же, черти.

    • @lexnews100
      @lexnews100 2 роки тому

      delegatecall, созданный вообще-то для подключения библиотек, погубит блокчейн, т.к. вы совершенно правы, концепция неизменности кода - архинаиважнейшее преимущество блокчейна, которое идеей прокси просто полностью дискредитировано. На прокси построено огромное количество скам-проектов, где сама схема проксирования максимально обфусцируется. Тот же транспарент-прокси изначально был гораздо проще - обычный ownable-контракт. Но коллизии функций стали использовать для скам-реализаций, что привело к новой версии прокси, где каждый вызов любой функции должен проверяться, не вызов ли это от админа?.. А это удорожание работы любого контракта (т.к. чтение из блокчейна недешевая операция), что породило уже UUPS-модель. Ну и т.д. В общем, обратно к истокам, блокчейн в труху.

  • @sashazar1
    @sashazar1 Рік тому

    у меня проблема в вс коде, import "@openzeppelin/contracts-upgradeable@4.9.2/token/ERC721/ERC721Upgradeable.sol"; все строки с импортом на находят путь и выдаёт ошибку

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      Напишите нам в чат, попробуем разобраться