Перейти до основного вмісту
Change page

Акаунти в Етеріумі

Акаунт в Етеріумі — це сутність із балансом етеру (ETH), яка може надсилати повідомлення в Етеріумі. Акаунти можуть контролюватися користувачами або розгортатися як смарт-контракти.

Передумови

Щоб краще зрозуміти цю сторінку, ми рекомендуємо спочатку прочитати наш вступ до Етеріуму.

Типи акаунтів

Етеріум має два типи акаунтів:

  • Зовнішній акаунт (EOA) — контролюється будь-ким, хто має приватні ключі
  • Акаунт контракту — смарт-контракт, розгорнутий у мережі, який контролюється кодом. Дізнайтеся більше про смарт-контракти

Обидва типи акаунтів мають можливість:

  • Отримувати, зберігати та надсилати ETH і токени
  • Взаємодіяти з розгорнутими смарт-контрактами

Ключові відмінності

Зовнішні акаунти

  • Створення акаунта нічого не коштує
  • Можуть ініціювати транзакції
  • Транзакції між зовнішніми акаунтами можуть бути лише переказами ETH або токенів
  • Складаються з криптографічної пари ключів: відкритого та приватного ключів, які контролюють дії акаунта

Акаунти контрактів

  • Створення контракту має свою ціну, оскільки ви використовуєте сховище мережі
  • Можуть надсилати повідомлення лише у відповідь на отримання транзакції
  • Транзакції із зовнішнього акаунта на акаунт контракту можуть запускати код, який може виконувати багато різних дій, наприклад, переказ токенів або навіть створення нового контракту
  • Акаунти контрактів не мають приватних ключів. Натомість вони контролюються логікою коду смарт-контракту

Детальний огляд акаунта

Акаунти в Етеріумі мають чотири поля:

  • nonce — лічильник, який вказує на кількість транзакцій, надісланих із зовнішнього акаунта, або кількість контрактів, створених акаунтом контракту. Для кожного акаунта може бути виконана лише одна транзакція із заданим нонсом, що захищає від атак повторного відтворення, коли підписані транзакції багаторазово транслюються та виконуються повторно.
  • balance — кількість Wei, що належить цій адресі. Wei — це найменша частка ETH, і в 1 ETH міститься 1e+18 Wei.
  • codeHash — цей хеш посилається на код акаунта у віртуальній машині Етеріуму (EVM). Акаунти контрактів мають запрограмовані фрагменти коду, які можуть виконувати різні операції. Цей код EVM виконується, якщо акаунт отримує виклик повідомлення. Його неможливо змінити, на відміну від інших полів акаунта. Усі такі фрагменти коду містяться в базі даних стану під відповідними хешами для подальшого отримання. Це значення хешу відоме як codeHash. Для зовнішніх акаунтів поле codeHash є хешем порожнього рядка.
  • storageRoot — іноді відомий як хеш сховища. 256-бітний хеш кореневого вузла дерева Меркла-Патрісії, який кодує вміст сховища акаунта (відображення між 256-бітними цілими значеннями), закодований у дерево як відображення з 256-бітного хешу Keccak 256-бітних цілих ключів у RLP-закодовані 256-бітні цілі значення. Це дерево кодує хеш вмісту сховища цього акаунта і за замовчуванням є порожнім.

A diagram showing the make up of an account Діаграму адаптовано з Ethereum EVM illustrated (opens in a new tab)

Зовнішні акаунти та пари ключів

Акаунт складається з пари криптографічних ключів: відкритого та приватного. Вони допомагають довести, що транзакція дійсно була підписана відправником, і запобігають підробкам. Ваш приватний ключ — це те, що ви використовуєте для підписання транзакцій, тому він надає вам контроль над коштами, пов'язаними з вашим акаунтом. Насправді ви ніколи не володієте криптовалютою, ви володієте приватними ключами — кошти завжди знаходяться в реєстрі Етеріуму.

Це запобігає трансляції підроблених транзакцій зловмисниками, оскільки ви завжди можете перевірити відправника транзакції.

Якщо Аліса хоче надіслати етер зі свого акаунта на акаунт Боба, їй потрібно створити запит на транзакцію та надіслати його в мережу для перевірки. Використання криптографії з відкритим ключем в Етеріумі гарантує, що Аліса може довести, що саме вона ініціювала запит на транзакцію. Без криптографічних механізмів зловмисниця Єва могла б просто публічно транслювати запит на кшталт «надіслати 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 — це інструмент для керування акаунтами та підписання, який постачається в комплекті з клієнтом Етеріуму Geth (opens in a new tab). Команда clef newaccount створює нову пару ключів і зберігає їх у зашифрованому сховищі ключів.

Документація Geth (opens in a new tab)

Можна отримати нові відкриті ключі з вашого приватного ключа, але ви не можете отримати приватний ключ із відкритих ключів. Життєво важливо зберігати ваші приватні ключі в безпеці та, як випливає з назви, ПРИВАТНИМИ.

Вам потрібен приватний ключ для підписання повідомлень і транзакцій, які генерують підпис. Інші потім можуть взяти підпис, щоб отримати ваш відкритий ключ, доводячи авторство повідомлення. У своєму застосунку ви можете використовувати бібліотеку JavaScript для надсилання транзакцій у мережу.

Акаунти контрактів

Акаунти контрактів також мають 42-символьну шістнадцяткову адресу:

Приклад:

0x06012c8cf97bead5deae237070f9587f8e7a266d

Адреса контракту зазвичай надається під час розгортання контракту в блокчейні Етеріуму. Адреса походить від адреси творця та кількості транзакцій, надісланих із цієї адреси («нонс»).

Ключі валідатора

В Етеріумі також існує інший тип ключів, запроваджений під час переходу Етеріуму від консенсусу на основі доказу виконання роботи (PoW) до доказу частки (PoS). Це ключі BLS, і вони використовуються для ідентифікації валідаторів. Ці ключі можна ефективно агрегувати, щоб зменшити пропускну здатність, необхідну мережі для досягнення консенсусу. Без цієї агрегації ключів мінімальний стейк для валідатора був би набагато вищим.

Більше про ключі валідатора.

Примітка про гаманці

Акаунт — це не гаманець. Гаманець — це інтерфейс або застосунок, який дозволяє вам взаємодіяти з вашим акаунтом в Етеріумі, будь то зовнішній акаунт або акаунт контракту.

Візуальна демонстрація

Подивіться, як Остін розповідає про хеш-функції та пари ключів.

Hash function — ETH.BUILD

A demonstration of cryptographic hash functions using the ETH.BUILD educational tool.

Дивитися з транскриптом 

Key pair — ETH.BUILD

A demonstration of public-private key pairs using the ETH.BUILD educational tool.

Дивитися з транскриптом 

Додаткові матеріали

Знаєте ресурс спільноти, який вам допоміг? Відредагуйте цю сторінку та додайте його!