Clever contract design: see how stETH automatically distributes profits daily? Let your ETH participate in staking to earn stable interest.
Автор конвертировал небольшое количество Эфира (ETH) в стабильный Эфир (stETH) и обнаружил, что количество stETH естественным образом увеличивается каждый день, принося постоянную прибыль. Однако в счете не было видно никаких записей о транзакциях. Почему? В этой статье будет исследована хитрая концепция за этим и раскрыт секрет распределения прибыли.
1 stETH сгенерировал некоторую прибыль после нескольких дней.
Прежде чем погружаться в то, как stETH приносит прибыль, давайте сначала представим логику, лежащую в ее основе, а именно стейкинг Ethereum. Читатели, которые уже знакомы с этим концептом, могут перейти дальше.
Изначально Ethereum, так же как и Bitcoin, использовал Proof of Work (PoW) в качестве механизма консенсуса. Однако из-за опасений по поводу потребления энергии, безопасности и масштабируемости, Ethereum перешел на Proof of Stake (PoS) в сентябре 2022 года.
Ранее для достижения консенсуса Эфириум полагался на майнинговую мощность, теперь он полагается на участников, которые ставят ETH, чтобы получить право голоса и заработать награды через голосование. Это стимулирует консенсус через PoS.
Сделав ставку в 32 ETH, можно присоединиться к сети Ethereum в качестве валидатора, ответственного за хранение данных, обработку транзакций и добавление новых блоков в блокчейн. Валидаторы получают награды в ETH за корректную упаковку транзакций в новые блоки и верификацию работы других валидаторов, что обеспечивает относительно стабильную отдачу от стейкинга.
Однако традиционный стейкинг неудобен для обычных пользователей, так как требует 32 ETH и специального компьютера с беспрерывным доступом к сети Ethereum. Кроме того, стейкинг ETH замораживает ликвидность. Таким образом, появление производных ликвидных стейкингов (LSD), направленных на преодоление барьеров и проблем ликвидности традиционного стейкинга. LSD позволяет пользователям ставить меньше чем 32 ETH и делегировать свои ETH сторонним поставщикам стейкинга, получая соответствующие токены стейкинга (например, stETH от Lido или rETH от Rocket Pool). Эти ликвидные токены можно торговать, занимать в долг или использовать для других финансовых операций на различных платформах, что позволяет пользователям участвовать в стейкинге более удобно, сохраняя ликвидность.
Итак, основная логика стоит за stETH заключается в том, что пользователи предоставляют свои ETH в Lido, который затем использует эти ETH для участия в PoS Ethereum с целью генерации прибыли. В замен пользователи получают stETH в качестве подтверждения их доли. Затем Lido распределяет прибыль по адресам, удерживающим stETH.
Мы можем наблюдать, что прибыль stETH обновляется автоматически каждый день. На следующем графике иллюстрируется ситуация с прибылью, которую мы тестировали, и пользователи могут ежедневно проверять соответствующее содержимое своих зашифрованных кошельков.
На этом этапе те, кто знаком с разработкой умных контрактов, могут задаться вопросом: будет ли этого достаточно для покрытия комиссий за газ при таких маленьких ежедневных прибылях?
Действительно, если Lido будет распределять прибыль, используя самый простой метод, ему, вероятно, будет сложно покрыть стоимость газа. Отправка токенов на такое большое количество адресов потребует значительных комиссий за газ, что может быть невыполнимо.
Однако Lido смогла достичь автоматического роста прибыли в стейблкоине stETH в кошельках без каких-либо явных транзакций. Как это возможно?
Мы нашли контракт Lido на https://etherscan.io/token/0xae7ab96520de3a18e5e111b5eaab095312d7fe84и проследил метод balanceOf в контракте.
Метод balanceOf соответствует стандарту ERC20 и используется кошельками для получения количества токенов, принадлежащих пользователю.
В контракте stETH мы видим, что он вызывает метод getPooledEthByShares. Этот метод принимает в качестве входных данных отображение (адрес => uint256) приватных shares;. Представляет ли это количество stETH, которое есть у пользователя? Очевидно, что нет, так как обновление данных для каждого адреса каждый день было бы нереально. Хотя обновление shares в одной транзакции могло бы это достичь, расход газа все равно был бы значительным.
На данный момент многие из вас могли догадаться, как работает контракт. Давайте продолжим изучать метод getPooledEthByShares.
Можно заметить, что окончательный результат получается путем умножения sharesAmount в адресе на _getTotalPooledEther() и деления на _getTotalShares.
_getTotalPooledEther представляет собой общее количество stETH (которое, если stETH привязан к ETH в соотношении 1:1, также представляет собой общее количество ETH), в то время как _getTotalShares представляет собой общее количество акций. С помощью этого расчета динамически определяется количество stETH, принадлежащее каждому адресу.
Например, если всего 1000 акций, и Адрес А владеет 100 акциями (как показано sharesAmount), и общее количество stETH составляет 1000 (как возвращается _getTotalPooledEther), то согласно этому расчету Адрес А будет владеть 100 stETH.
Теперь, если Lido делает ставку на общую сумму 1000 ETH и зарабатывает 1 ETH в прибыли, обновляя _getTotalPooledEther до 1001, что означает, что общее количество stETH увеличивается с 1000 до 1001. Следовательно, новый расчет для Адреса А будет 100 * 1001 / 1000 = 100,1 stETH.
Другими словами, в то время как акции, удерживаемые каждым адресом, остаются постоянными, соответствующий им stETH увеличивается. Следовательно, при пересчете стоимости, владение stETH естественным образом увеличивается.
Продолжая работу с кодом, логика внутри _getTotalPooledEther подвержена влиянию метода handleOracleReport, который обновляет соответствующие данные внутри контракта. Этот метод периодически вызывается, и конкретное обращение происходит через контракт на https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee, которая периодически вызывает submitReportData для обновления данных (submitReportData внутренне вызывает handleOracleReport в контракте Lido):
Мы видим, что ежедневно происходят вызовы для обновления соответствующего контента, что объясняет, почему, хотя мы не видим никаких транзакций, распределяющих прибыль на наш адрес, баланс меняется каждый день.
Это иллюстрирует характеристику смарт-контрактов Ethereum ERC20: количество токенов, принадлежащих адресам, не зашито жестко, а возвращается методами контракта. Следовательно, баланс токенов адреса может измениться даже без каких-либо транзакций. Хотя эта гибкость делает контракты ERC20 более универсальными, это также может быть запутанным для тех, кто не знаком с контрактами. Я надеюсь, что эту статью читатели лучше поймут смарт-контракты и будут взаимодействовать с ними более безопасно и интеллектуально.
Более того, в то время как стейкинг ETH для получения stETH, кажется, предлагает стабильные награды за стейкинг, здесь все еще могут быть потенциальные риски. Эта статья служит техническим исследованием стейкинг-контрактов и не должна рассматриваться как инвестиционный совет.
Эта статья воспроизведена с [ Команда ZAN] , Оригинальное название «Гениальный дизайн контракта, посмотрите, как stETH автоматически распределяет доход ежедневно? Позвольте вашему ETH участвовать в стейкинге, чтобы получить стабильный процент», Авторские права принадлежат оригинальному автору[Команда ZAN], если у вас есть какие-либо возражения к перепечатке, пожалуйста, свяжитесь с Gate Learn Команда, и команда обработает это как можно скорее в соответствии с соответствующими процедурами.
Отказ от ответственности: Взгляды и мнения, выраженные в этой статье, представляют собой лишь личные взгляды автора и не являются инвестиционными советами.
Другие языковые версии статьи переводятся командой Gate Learn и не упоминаются в Gate.io) переведенную статью нельзя воспроизводить, распространять или плагиатировать.
株式
内容
Clever contract design: see how stETH automatically distributes profits daily? Let your ETH participate in staking to earn stable interest.
Автор конвертировал небольшое количество Эфира (ETH) в стабильный Эфир (stETH) и обнаружил, что количество stETH естественным образом увеличивается каждый день, принося постоянную прибыль. Однако в счете не было видно никаких записей о транзакциях. Почему? В этой статье будет исследована хитрая концепция за этим и раскрыт секрет распределения прибыли.
1 stETH сгенерировал некоторую прибыль после нескольких дней.
Прежде чем погружаться в то, как stETH приносит прибыль, давайте сначала представим логику, лежащую в ее основе, а именно стейкинг Ethereum. Читатели, которые уже знакомы с этим концептом, могут перейти дальше.
Изначально Ethereum, так же как и Bitcoin, использовал Proof of Work (PoW) в качестве механизма консенсуса. Однако из-за опасений по поводу потребления энергии, безопасности и масштабируемости, Ethereum перешел на Proof of Stake (PoS) в сентябре 2022 года.
Ранее для достижения консенсуса Эфириум полагался на майнинговую мощность, теперь он полагается на участников, которые ставят ETH, чтобы получить право голоса и заработать награды через голосование. Это стимулирует консенсус через PoS.
Сделав ставку в 32 ETH, можно присоединиться к сети Ethereum в качестве валидатора, ответственного за хранение данных, обработку транзакций и добавление новых блоков в блокчейн. Валидаторы получают награды в ETH за корректную упаковку транзакций в новые блоки и верификацию работы других валидаторов, что обеспечивает относительно стабильную отдачу от стейкинга.
Однако традиционный стейкинг неудобен для обычных пользователей, так как требует 32 ETH и специального компьютера с беспрерывным доступом к сети Ethereum. Кроме того, стейкинг ETH замораживает ликвидность. Таким образом, появление производных ликвидных стейкингов (LSD), направленных на преодоление барьеров и проблем ликвидности традиционного стейкинга. LSD позволяет пользователям ставить меньше чем 32 ETH и делегировать свои ETH сторонним поставщикам стейкинга, получая соответствующие токены стейкинга (например, stETH от Lido или rETH от Rocket Pool). Эти ликвидные токены можно торговать, занимать в долг или использовать для других финансовых операций на различных платформах, что позволяет пользователям участвовать в стейкинге более удобно, сохраняя ликвидность.
Итак, основная логика стоит за stETH заключается в том, что пользователи предоставляют свои ETH в Lido, который затем использует эти ETH для участия в PoS Ethereum с целью генерации прибыли. В замен пользователи получают stETH в качестве подтверждения их доли. Затем Lido распределяет прибыль по адресам, удерживающим stETH.
Мы можем наблюдать, что прибыль stETH обновляется автоматически каждый день. На следующем графике иллюстрируется ситуация с прибылью, которую мы тестировали, и пользователи могут ежедневно проверять соответствующее содержимое своих зашифрованных кошельков.
На этом этапе те, кто знаком с разработкой умных контрактов, могут задаться вопросом: будет ли этого достаточно для покрытия комиссий за газ при таких маленьких ежедневных прибылях?
Действительно, если Lido будет распределять прибыль, используя самый простой метод, ему, вероятно, будет сложно покрыть стоимость газа. Отправка токенов на такое большое количество адресов потребует значительных комиссий за газ, что может быть невыполнимо.
Однако Lido смогла достичь автоматического роста прибыли в стейблкоине stETH в кошельках без каких-либо явных транзакций. Как это возможно?
Мы нашли контракт Lido на https://etherscan.io/token/0xae7ab96520de3a18e5e111b5eaab095312d7fe84и проследил метод balanceOf в контракте.
Метод balanceOf соответствует стандарту ERC20 и используется кошельками для получения количества токенов, принадлежащих пользователю.
В контракте stETH мы видим, что он вызывает метод getPooledEthByShares. Этот метод принимает в качестве входных данных отображение (адрес => uint256) приватных shares;. Представляет ли это количество stETH, которое есть у пользователя? Очевидно, что нет, так как обновление данных для каждого адреса каждый день было бы нереально. Хотя обновление shares в одной транзакции могло бы это достичь, расход газа все равно был бы значительным.
На данный момент многие из вас могли догадаться, как работает контракт. Давайте продолжим изучать метод getPooledEthByShares.
Можно заметить, что окончательный результат получается путем умножения sharesAmount в адресе на _getTotalPooledEther() и деления на _getTotalShares.
_getTotalPooledEther представляет собой общее количество stETH (которое, если stETH привязан к ETH в соотношении 1:1, также представляет собой общее количество ETH), в то время как _getTotalShares представляет собой общее количество акций. С помощью этого расчета динамически определяется количество stETH, принадлежащее каждому адресу.
Например, если всего 1000 акций, и Адрес А владеет 100 акциями (как показано sharesAmount), и общее количество stETH составляет 1000 (как возвращается _getTotalPooledEther), то согласно этому расчету Адрес А будет владеть 100 stETH.
Теперь, если Lido делает ставку на общую сумму 1000 ETH и зарабатывает 1 ETH в прибыли, обновляя _getTotalPooledEther до 1001, что означает, что общее количество stETH увеличивается с 1000 до 1001. Следовательно, новый расчет для Адреса А будет 100 * 1001 / 1000 = 100,1 stETH.
Другими словами, в то время как акции, удерживаемые каждым адресом, остаются постоянными, соответствующий им stETH увеличивается. Следовательно, при пересчете стоимости, владение stETH естественным образом увеличивается.
Продолжая работу с кодом, логика внутри _getTotalPooledEther подвержена влиянию метода handleOracleReport, который обновляет соответствующие данные внутри контракта. Этот метод периодически вызывается, и конкретное обращение происходит через контракт на https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee, которая периодически вызывает submitReportData для обновления данных (submitReportData внутренне вызывает handleOracleReport в контракте Lido):
Мы видим, что ежедневно происходят вызовы для обновления соответствующего контента, что объясняет, почему, хотя мы не видим никаких транзакций, распределяющих прибыль на наш адрес, баланс меняется каждый день.
Это иллюстрирует характеристику смарт-контрактов Ethereum ERC20: количество токенов, принадлежащих адресам, не зашито жестко, а возвращается методами контракта. Следовательно, баланс токенов адреса может измениться даже без каких-либо транзакций. Хотя эта гибкость делает контракты ERC20 более универсальными, это также может быть запутанным для тех, кто не знаком с контрактами. Я надеюсь, что эту статью читатели лучше поймут смарт-контракты и будут взаимодействовать с ними более безопасно и интеллектуально.
Более того, в то время как стейкинг ETH для получения stETH, кажется, предлагает стабильные награды за стейкинг, здесь все еще могут быть потенциальные риски. Эта статья служит техническим исследованием стейкинг-контрактов и не должна рассматриваться как инвестиционный совет.
Эта статья воспроизведена с [ Команда ZAN] , Оригинальное название «Гениальный дизайн контракта, посмотрите, как stETH автоматически распределяет доход ежедневно? Позвольте вашему ETH участвовать в стейкинге, чтобы получить стабильный процент», Авторские права принадлежат оригинальному автору[Команда ZAN], если у вас есть какие-либо возражения к перепечатке, пожалуйста, свяжитесь с Gate Learn Команда, и команда обработает это как можно скорее в соответствии с соответствующими процедурами.
Отказ от ответственности: Взгляды и мнения, выраженные в этой статье, представляют собой лишь личные взгляды автора и не являются инвестиционными советами.
Другие языковые версии статьи переводятся командой Gate Learn и не упоминаются в Gate.io) переведенную статью нельзя воспроизводить, распространять или плагиатировать.