Облікові записи Ethereum
Останні оновлення сторінки: 23 лютого 2026 р.
Обліковий запис Ethereum – це рахунок з балансом ефіру (ETH), який може надсилати повідомлення в Ethereum. Облікові записи можуть контролюватися користувачем або розгортатися як смарт-контракти.
Передумови
Щоб допомогти вам краще зрозуміти цю сторінку, ми рекомендуємо спочатку прочитати наш вступ до Ethereum.
Типи облікових записів
Ethereum має два типи облікових записів:
- Зовнішній обліковий запис (EOA) - контролюється будь-ким, хто має приватні ключі
- Контрактний рахунок - смарт-контракт, розгорнутий в мережі, керований кодом. Дізнайтеся про смарт-контракти
Обидва типи облікових записів мають можливість:
- Отримувати, володіти та надсилати ETH та токени
- Взаємодіяти із розгорнутими смарт-контрактами
Основні відмінності
Зовнішня власність
- Створення облікового запису нічого не коштує
- Можна ініціювати транзакції
- Транзакції між зовнішніми рахунками можуть бути лише переказами в ETH
- Складається з криптографічної пари ключів: публічного та приватного ключів, які контролюють операції з акаунтом
Контракт
- Створення контракту платне, оскільки ви використовуєте мережеве сховище
- Може надсилати повідомлення лише у відповідь на отримання транзакції.
- Трансакції із зовнішнього облікового запису в обліковий запис контракту можуть генерувати код, який може виконувати багато різних функцій, таких як передача токенів або навіть створення нового контракту
- Контрактні акаунти не мають приватних ключів. Замість цього вони керуються логікою коду смарт-контракту
Розгляд облікового запису
Облікові записи Ethereum мають чотири поля:
nonce– лічильник, який показує кількість транзакцій, надісланих із зовнішнього облікового запису, або кількість контрактів, створених контрактним обліковим записом. Для кожного облікового запису може бути виконана лише одна транзакція з даним нонсером, що захищає від атак повторного відтворення, коли підписані транзакції багаторазово транслюються і повторно виконуються.balance– кількість wei, що належать цій адресі. Wei – це номінал ETH, і є 1e+18 Wei на ETH.codeHash– цей хеш посилається на код облікового запису у віртуальній машині Ethereum (EVM). Контрактні облікові записи мають запрограмовані фрагменти коду, які можуть виконувати різні операції. Цей код EVM виконується, якщо обліковий запис отримує повідомлення. Його не можна змінити, на відміну від інших полів облікового запису. Усі такі фрагменти коду містяться в базі даних стану під відповідними хешами для подальшого пошуку. Це значення хешу відоме як codeHash. Для зовнішніх облікових записів поле codeHash є хешем порожнього рядка.storageRoot– іноді відомий як хеш сховища. 256-бітний хеш кореневого вузла дерева Меркла-Патриції, що кодує вміст сховища облікового запису (відображення між 256-бітними цілими значеннями), закодований у трі як відображення 256-бітного хешу Keccak 256-бітних цілочисельних ключів на RLP-кодовані 256-бітні цілі значення. Це дерево кодує хеш вмісту сховища цього облікового запису та порожнє за замовчуванням.
Схема адаптована з Ethereum EVM illustrated (opens in a new tab)
Зовнішні облікові записи та пари ключів
Обліковий запис складається з пари криптографічних ключів: відкритого та приватного. Вони допомагають довести, що відправник фактично підписав транзакцію, та запобігають підробкам. Ваш приватний ключ – це те, що ви використовуєте для підписання транзакцій, тому він надає вам право зберігання коштів, пов’язаних з вашим рахунком. Ви ніколи не тримаєте криптовалюту, ви володієте приватними ключами – кошти завжди знаходяться в книзі обліку Ethereum.
Це заважає зловмисникам проводити фальшиві транзакції, оскільки ви завжди можете перевірити відправника транзакції.
Якщо Аліса хоче надіслати ефір із власного рахунку на рахунок Боба, Алісі потрібно створити запит на транзакцію та надіслати його в мережу для перевірки. Використання Ethereum криптографії з відкритим ключем гарантує, що Аліса може довести, що саме вона ініціювала запит на транзакцію. Без криптографічних механізмів зловмисник Єва могла б просто публічно транслювати запит, який виглядає приблизно так: «надіслати 5 ETH з рахунку Аліси на рахунок Єви», і ніхто не зміг би підтвердити, що це не від Аліси.
Створення облікового запису
Коли ви хочете створити обліковий запис, більшість бібліотек згенерує для вас випадковий приватний ключ.
Приватний ключ складається з 64 шістнадцяткових символів і може бути зашифрований паролем.
Наприклад:
fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f
Відкритий ключ генерується з приватного ключа за допомогою алгоритму цифрового підпису на еліптичних кривих (opens in a new tab). Ви отримуєте публічну адресу для свого облікового запису, взявши останні 20 байтів хешу Keccak-256 відкритого ключа і додавши на початку 0x.
Це означає, що зовнішній обліковий запис (EOA) має 42-символьну адресу (20-байтовий сегмент, що складається з 40 шістнадцяткових символів плюс префікс 0x).
Наприклад:
0x5e97870f263700f46aa00d967821199b9bc5a120
У наведеному нижче прикладі показано, як використовувати інструмент для підпису під назвою Clef (opens in a new tab) для створення нового облікового запису. Clef — це інструмент для керування обліковими записами та підпису, який постачається в комплекті з клієнтом Ethereum, Geth (opens in a new tab). Команда clef newaccount створює нову пару ключів і зберігає їх у зашифрованому сховищі ключів.
1> clef newaccount --keystore <path>23Please enter a password for the new account to be created:4> <password>56------------7INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a1208WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a1209WARN [10-28|16:19:09.306] Please remember your password!10Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120Показати всеДокументація Geth (opens in a new tab)
Можна отримати нові відкриті ключі з вашого приватного ключа, але не можна отримати приватний ключ з відкритих ключів. Життєво важливо зберігати ваші приватні ключі в безпеці, і, як випливає з назви, ПРИВАТНИМИ.
Приватний ключ потрібен для підпису повідомлень і транзакцій, у результаті чого створюється підпис. Others can then take the signature to derive your public key, proving the author of the message. У вашому додатку ви можете використовувати бібліотеку JavaScript для надсилання транзакцій у мережу.
Облікові записи контрактів
Контрактні облікові записи також мають шістнадцяткову адресу з 42 символів:
Наприклад:
0x06012c8cf97bead5deae237070f9587f8e7a266d
Адреса контракту зазвичай вказується, коли контракт розгортається в блокчейні Ethereum. The address comes from the creator's address and the number of transactions sent from that address (the “nonce”).
Ключі валідаторів
В Ethereum також існує ще один тип ключа, який було введено, коли Ethereum перейшов від консенсусу, заснованого на доказі роботи, до консенсусу, заснованого на доказі частки. Це ключі "BLS", які використовуються для ідентифікації валідаторів. Ці ключі можна ефективно об'єднати, щоб зменшити пропускну здатність, необхідну для досягнення консенсусу в мережі. Без такої агрегації ключів мінімальна ставка для валідатора була б набагато вищою.
Докладніше про ключі валідаторів.
Примітка про гаманці
Обліковий запис не є гаманцем. Гаманець — це інтерфейс або додаток, що дає змогу взаємодіяти з вашим обліковим записом Ethereum, будь то зовнішній обліковий запис або обліковий запис контракту.
Наочна демонстрація
Подивіться, як Остін розповідає про хеш-функції та пари ключів.
Для подальшого читання
Знайшли ресурс, який допоміг з цією темою? Відредагуйте цю сторінку і додайте його!