Ethereum address with balance

How to Query Balances for all Ethereum Addresses in BigQuery

Recently we announced beta availability of transaction traces (aka internal transactions) in our public Ethereum dataset in BigQuery: https://bigquery.cloud.google.com/table/bigquery-public-data:crypto_ethereum.traces. They allow querying all Ethereum addresses with their balances.

Below is the query that will give you top 10 balances:

The balances table is updated daily. In case you want live balances you can use the below query:

Here is the result, on the day of writing (as csv file):

Here is the high-level overview of the workflow we used to get this result:

  1. Export all traces from Parity node to BigQuery using Ethereum ETL.
  2. Enrich the traces with the status field which accounts for parent trace failures.
  3. Add genesis and daofork traces.
  4. Write an SQL to calculate the balances.

Along the way I had to solve a few interesting challenges, which I will uncover in the following sections.

Calculating Trace Statuses

The traceAddress field of all returned traces, gives the exact location in the call trace [index in root, index in first CALL , index in second CALL , …].

i.e. if the trace is:

then it should look something like:

Parity also provides an error string for each trace in case it failed. Unfortunately it doesn’t account for the top-level trace failures. For example, if the call to C in the example above succeeded, but the top-level call to A failed due to say out-of-gas error, then the trace for the call to C will not return any error with it. This is problematic because any state changes in the call, including Ether transfers, are reverted. We want to filter out such nested calls that look like successes in the traces but actually were reverted due to top-level trace failures.

Your first thought may be to reconstruct the call tree from the flat traces returned by Parity, for each call traverse up the tree and see if any top-level calls failed, set the status for each call accordingly.

Another solution, which I ended up using, is to first query all failed traces, then find all their child traces and mark them as failures. This is easily done in BigQuery with the following SQL: https://github.com/blockchain-etl/ethereum-etl-airflow/blob/master/dags/resources/stages/enrich/sqls/traces.sql

The status field is 0 when the trace succeeded, and 1 when it failed due to any operation that can cause the call itself or any top-level call to revert. This is consistent with the status field in transaction receipts.

Handling Irregular State Changes in DAO Fork

If you simply query balances from the traces returned by Parity, these two addresses will come up at the top:

In reality, the above addresses have only 7 Wei each, on the day of writing. If you google them you will encounter this post about the DAO fork by Vitalik Buterin https://blog.ethereum.org/2016/07/20/hard-fork-completed/. Here is the summary:

Block 1920000 contained the execution of an irregular state change which transferred

12 million ETH from the “Dark DAO” and “Whitehat DAO” contracts into the WithdrawDAO recovery contract.

These irregular state changes don’t appear in Parity traces, so I had to query them with this SQL: https://github.com/blockchain-etl/ethereum-etl-airflow/blob/master/sqls/daofork_traces.sql. The result is then hardcoded in the Ethereum ETL tool and ingested to the BigQuery dataset.

trace_type column for these irregular traces is daofork . Another special type of traces that I had to add to the table is genesis , which are the initial Ether allocations. They are not associated with any transactions and thus not returned in transactions or traces APIs.

Limitations

Johannes Pfeffer from alethio helped identify addresses for which the balances shown in the query results doesn’t match with the balances reported by the Ethereum nodes. Here is the list of the addresses:

The presumable root cause is this issue in Parity https://github.com/paritytech/parity-ethereum/issues/7765, which results in that the calls to precompiled contracts are missing from API results.

We will need to resync our Parity nodes, rerun the ETL, after which this issue will be resolved.

Challenge

It’s possible to query running Ether balances for every address on every date. Try to compose a query that will return the number of addresses with non-zero balance, and plot it over time. Post your SQL in the comments. (Solution)

Источник

Ethereum accounts

An Ethereum account is an entity with an ether (ETH) balance that can send transactions on Ethereum. Accounts can be user-controlled or deployed as smart contracts.

Accounts are a very beginner-friendly topic. But to help you better understand this page, we recommend you first read through our introduction to Ethereum.

Ethereum has two account types:

  • Externally-owned – controlled by anyone with the private keys
  • Contract – a smart contract deployed to the network, controlled by code. Learn about smart contracts

Both account types have the ability to:

  • Receive, hold and send ETH and tokens
  • Interact with deployed smart contracts

Externally-owned

  • Creating an account costs nothing
  • Can initiate transactions
  • Transactions between externally-owned accounts can only be ETH transfers

Contract

  • Creating a contract has a cost because you’re using network storage
  • Can only send transactions in response to receiving a transaction
  • Transactions from an external account to a contract account can trigger code which can execute many different actions, such as transferring tokens or even creating a new contract

An account examined

Ethereum accounts have four fields:

  • nonce – a counter that indicates the number of transactions sent from the account. This ensures transactions are only processed once. In a contract account, this number represents the number of contracts created by the account
  • balance – the number of wei owned by this address. Wei is a denomination of ETH and there are 1e+18 wei per ETH.
  • codeHash – this hash refers to the code of an account on the Ethereum virtual machine (EVM). Contract accounts have code fragments programmed in that can perform different operations. This EVM code gets executed if the account gets a message call. It cannot be changed unlike the other account fields. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash value is known as a codeHash. For externally owned accounts, the codeHash field is the hash of an empty string.
  • storageRoot – Sometimes known as a storage hash. A 256-bit hash of the root node of a Merkle Patricia trie that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. This trie encodes the hash of the storage contents of this account, and is empty by default.
Читайте также:  Свечной график биткоин доллар

Diagram adapted from Ethereum EVM illustrated

Externally-owned accounts and key pairs

An account is made up of a cryptographic pair of keys: public and private. They help prove that a transaction was actually signed by the sender and prevent forgeries. Your private key is what you use to sign transactions, so it grants you custody over the funds associated with your account. You never really hold cryptocurrency, you hold private keys – the funds are always on Ethereum’s ledger.

This prevents malicious actors from broadcasting fake transactions because you can always verify the sender of a transaction.

If Alice wants to send ether from her own account to Bob’s account, Alice needs to create a transaction request and send it out to the network for verification. Ethereum’s usage of public-key cryptography ensures that Alice can prove that she originally initiated the transaction request. Without cryptographic mechanisms, a malicious adversary Eve could simply publicly broadcast a request that looks something like “send 5 ETH from Alice’s account to Eve’s account,” and no one would be able to verify that it didn’t come from Alice.

When you want to create an account most libraries will generate you a random private key.

A private key is made up of 64 hex characters and can be encrypted with a password.

The public key is generated from the private key using the Elliptic Curve Digital Signature Algorithm. You get a public address for your account by taking the last 20 bytes of the Keccak-256 hash of the public key and adding 0x to the beginning.

Here’s an example of creating an account in the console using GETH’s personal_newAccount

It is possible to derive new public keys from your private key but you cannot derive a private key from public keys. This means it’s vital to keep a private key safe and, as the name suggests, PRIVATE.

You need a private key to sign messages and transactions which output a signature. Others can then take the signature to derive your public key, proving the author of the message. In your application, you can use a javascript library to send transactions to the network.

Contract accounts also have a 42 character hexadecimal address:

The contract address is usually given when a contract is deployed to the Ethereum Blockchain. The address comes from the creator’s address and the number of transactions sent from that address (the “nonce”).

A note on wallets

An account is not a wallet. A wallet is the keypair associated with a user-owned account, which allow a user to make transactions from or manage the account.

Watch Austin walk you through hash functions, and key pairs.

Know of a community resource that helped you? Edit this page and add it!

Источник

Гид по владению аккаунтами и контрактами в Ethereum

Материал, который мы решили сегодня опубликовать, родился уже около 6 месяцев назад и до сих пор не потерял своей актуальности (может быть, пришлось его чуть-чуть освежить). Тогда мы еще были способны удивляться, глядя на бизнесменов и стартаперов, намеревающихся проводить ICO, но при этом не способных сделать транзакцию с переводом одной эфирки. Сегодня мы уже перестали удивляться, но таких персонажей не стало сильно меньше.

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

Если для вас эта статья не несет ничего нового — супер, мы очень рады, что вы в нашем «клубе». И, кстати, теперь у вас есть куда отправлять всех криптонеофитов, чтобы они случайно не потеряли по глупости все свои эфирки.

Содержание:

0. Do it yourself!

1. Вводная информация
1.1. Аккаунты
1.2. Кошельки
1.3. Контракты
1.4. Multisig-кошельки

2. Владение
2.1. Довольно безопасное
2.1.1. Ноутбук и операционная система
2.1.2. Ethereum-нода
2.1.2.1 Установка на Linux
2.1.2.2. Установка на macOS
2.1.3. Аккаунт
2.1.4. Собираем подписи в единое целое
2.1.4.1 Стандартный MultiSig wallet
2.1.4.2 MixBytes MultiSig
2.2. Чуть менее безопасное
2.3. Обычное
2.3.1 Ethereum Wallet
2.3.2 MEW

Авторы:
Алексей therealal Макеев
Павел pkruglov Круглов
Сергей BoogerWooger Прилуцкий

0. Do it yourself!

Кому доверить владение и управление своими ценностями в блокчейне? Лучше всего — себе. В крайнем случае — человеку, которому вы можете доверить чемодан с деньгами эквивалентной ценности. Дальнейшее руководство предназначено для вас или ваших доверенных людей. Любой, даже кратковременный доступ к компьютерам/оборудованию, с которых будет происходить управление, возможен только для людей с соответствующим уровнем доверия.

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

Далее будет дана базовая вводная информация для понимания общей картины и, без деталей информационной безопасности, рекомендации по безопасному владению аккаунтами/контрактами в Ethereum.

1. Вводная информация

1.1. Аккаунты

Базовая сущность, которой можно владеть в сети Ethereum, это аккаунт (в эфириум-терминах: external account) — пара из закрытого и открытого ключа. Закрытый ключ должен держаться в секрете, открытый (точнее, адрес, получаемый из него) можно свободно публиковать.

«На» адрес могут перечисляться деньги (в сети Ethereum — ether, эфир). Чтобы обозначить принадлежность любых средств, контрактов, транзакций (отправителя транзакции), используется именно адрес (например, 0x36c9cc925dd58747044f52d0a57917df64555a3d). Однако чтобы выполнить любое действие от имени адреса своего аккаунта, нужен закрытый (секретный) ключ. Именно безопасное хранение секретных ключей и является главной функцией любого криптокошелька. Кошельки дополнительно шифруют закрытый ключ паролем, который нужно вводить в ходе использования ключа для подписи транзакций, именно в этот момент криптокошелек использует секретный ключ для создания подписи к транзакции.

Чтобы владеть аккаунтом необходимо точно понимать где и как хранится секретный ключ, соответствующий конкретному адресу. Если вы входите в личный кабинет биржи, и биржа сама за вас проводит транзакции (т.е. подписывает каждую из них секретным ключом), значит она знает секретный ключ. И этот адрес фактически принадлежит не вам, а бирже. В случае централизованных бирж зачастую у вас вообще нет секретных ключей от адресов, которые вы видите в интерфейсе биржи. В случае децентрализованных бирж вы подписываете транзакцию на своей машине, и секретный ключ никуда не передается. В этом случае вы контролируете свой аккаунт совершенно самостоятельно.

Обычно аккаунты (адреса и управляющие ими секретные ключи) сохраняются в специальном файле, называемом keystore. Секретные ключи в нем зашифрованы при помощи пароля, который вы будете вводить каждый раз, когда вам надо будет подписать отправляемую в сеть транзакцию. Это означает, что даже если ваш файл скопируют, то без знания пароля будет очень трудно достать из него секретный ключ. Практически невозможно, если вы используете длинный и сложный пароль, и гораздо проще, если вы используете пароль типа «lena1984», которые перебирают атакующие. В любом случае, утечка этого файла — это серьезная проблема.

Читайте также:  Международные инвестиции международные долгосрочные

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

Зная seed, можно воссоздать тот самый секретный ключ. Seed — это информация, которая позволяет с нуля сгенерировать новый keystore-файл, и в нём задать пароль, который захочется. Этот keystore-файл будет использован для управления теми же самыми адресами, что и предыдущий. Так что храните seed очень надёжно, возможно даже в виде хорошо спрятанной твёрдой копии. Не используйте для seed осмысленные куски текста из литературы, например «moroz i solntse den chudesniy» — атакующие смогут перебрать эти тексты с большей эффективностью, чем случайный набор слов типа «shop ban trick track chrome bunny york».

  • seed — для полного воссоздания аккаунта с нуля;
  • пароль — для расшифровывания сохраненного в keystore-файле секретного ключа, когда он требуется для подписания отправляемой в сеть транзакции.

Большинство кошельков помогает вам сгенерировать надёжный seed. В случае веб-кошельков обычно генерация производится строго у вас в браузере, при помощи JavaScript (программа выполняется у вас на компьютере, внутри вашего браузера, и только ваш браузер видит сгенерированный seed). Но надо понимать, что, если на вашем компьютере работает программа-троян, или в вашем браузере стоит вредоносное расширение, ваш seed может быть украден. Ситуация, когда seed генерируется на стороне сервиса (т.е. он его может подсмотреть) вообще неприемлема. Даже если сервису можно доверять, сам сервис могут взломать.

Аккаунты можно переносить между компьютерами в виде файлов, однако нужно знать, что «полностью» удалить файл с диска/флешки невозможно. При удалении с диска компьютер не удаляет все байты файла, а лишь помечает файл как удалённый, специальные программы могут такой файл восстановить. Если аккаунт имеет или будет иметь большую ценность, он не должен путешествовать по компьютерам и сетям. Все диски и флешки, которые применялись для его передачи, нужно либо физически уничтожить, либо использовать для резервного копирования аккаунта и хранить так же надежно, как и сам аккаунт.

1.2. Кошельки

Программа, которая оперирует с аккаунтами, контрактами и прочими сущностями блокчейна, называется кошельком (wallet) или криптокошельком. Кошелек может содержать несколько аккаунтов и поддерживать одновременную работу с ними. Кошельки бывают в виде обычных программ, в виде отдельного устройства (аппаратные) или в виде web-сервиса. Программа-кошелёк не «хранит в себе биткоины» в виде каких-то данных, а хранит лишь ключи по управлению адресами и умеет общаться с блокчейном (формировать транзакции или искать информацию в блокчейне).

1.3. Контракты

Контракты содержат логику, которая будет выполнена с математической точностью, причем большим количеством майнеров, большинство из которых заинтересованы в честном исполнении контракта. Результирующие изменения состояния контракта будут заверены криптографически и отправлены в общий блокчейн Ethereum, где их может увидеть любой участник. Владение контрактом прописывается в самом контракте (с использованием адресов владельцев, адресов их аккаунтов), т. е. оно является частью логики или состояния контракта. Если логика контракта требует транзакций от нескольких владельцев — ее называют мультиподписью (multi-signature, multisig). Именно на основе такой логики реализованы контракты multisig-кошельков. Мультиподпись не ограничивается защитой контрактов, хранящих эфир, ей можно защитить доступ к любому контракту.

1.4. Multisig-кошельки

Не нужно путать их с программами-кошельками, описанными выше. Multisig-кошелек состоит из контракта с мультиподписью и графического интерфейса для более удобного взаимодействия с контрактом. В контракте прописаны параметры мультиподписи:

  • владельцы (обычно это аккаунты);
  • количество подписей для выполнения действий.

Иногда снятие малых сумм (порог задается в контракте) требует подписи лишь одного владельца. Например, кошелек Ethereum Wallet (работает на базе графического движка Mist, поэтому иногда ошибочно называется Mist) позволяет и создать multisig-контракт кошелька, и удобно работать с ним. Программа-кошелек может управлять несколькими multisig-кошельками.

Не путайте реализацию мультисиг кошельков в Ethereum и в Bitcoin. В отличие от Ethereum, в Bitcoin, чтобы воспользоваться биткоинами с заранее созданного multisig-адреса, все необходимые подписи нужно «собрать» заранее и упаковать в одну транзакцию, тогда как в Ethereum несколько транзакций от подписантов могут приходить независимо.

2. Владение

Ниже описаны несколько способов с разным балансом безопасности, цены и удобства использования. Все сказанное далее — наша рекомендация.

2.1. Довольно безопасное

Multisig-кошелек с несколькими подписями, аккаунты которых хранятся на разных ноутбуках. Для ценностей более 100 000 долларов нужен именно этот способ. Обязательных подписей — не менее двух. Всего подписей — на одну-две больше, чем обязательных (на случай утери/компрометации одной-двух подписей). Как вариант: всего подписей три, обязательных две (любых).

2.1.1. Ноутбук и операционная система

Покупается у надежной компании, которая понятия не имеет, для чего будет использован ноутбук. Компания должна иметь околонулевой мотив встроить в ноутбук программные/аппаратные «закладки». Все ноутбуки приобрести у разных компаний. Железо должно быть надежное и иметь минимальную вероятность обычной поломки. В случае поломки/проблем — либо решаем сами, либо вынимаем все жесткие диски и отдаем в ремонт, после которого ноутбук НЕ используем для дальнейшего хранения аккаунтов.

Операционная система: Linux либо macOS. Аппаратные требования: SSD (обязательно SSD!), диск 256+ Гб, оперативная память 16+ Гб, процессор уровня Intel Core i5 или лучше. Между ноутбуком и интернетом должен быть firewall, например на маршрутизаторе. Ноутбук должен быть чистым: не устанавливать никаких программ, кроме операционной системы и Ethereum-ноды, не подключать никаких сторонних флешек и дисков. Никаких инструментов удаленного управления!

2.1.2. Ethereum-нода

Кошельки используют Ethereum-ноду для взаимодействия с блокчейном. Нужна так называемая полная Ethereum-нода.

2.1.2.1. Установка на Linux

Будем рассматривать установку на deb-совместимые дистрибутивы (Debian, Ubuntu, CentOS). Заходим на https://github.com/ethereum/mist/releases и скачиваем последний релиз, на момент написания статьи это был 0.9.3:

После скачивания неплохо проверить целостность пакета, чтобы исключить подмену файла. Для этого на странице представлены SHA256-хеши всех файлов, например для Ethereum-Wallet-linux64-0-9-3.deb это 946b4b7dec1b6f2b58b6ef21d06a12dcee691fa2186baad7d99872f94240ced8.

В Linux вычислить хеш можно с помощью стандартной консольной утилиты sha256sum. В окне терминала вводим следующую команду:

    $ — приглашение терминала, означающее, что команда будет выполнена от имени пользователя (вводить не нужно);

— путь до директории текущего пользователя;

/Downloads/Ethereum-Wallet-linux64-0-9-2.deb — полный путь к файлу.

В ответ нам должен отобразиться хеш, который приведен выше (для вашего файла может быть другой). Для установки пакета используем команду:

  • sudo — команда, позволяющая выполнить действие с правами root (администратора);
  • dpkg — стандартная утилита для установки deb-пакета;
  • -i — флаг установки пакета (install).

После запуска команды необходимо ввести пароль пользователя.

Другой способ установки: дважды кликаем на файл в графическом файл-менеджере и следуем указаниям.

2.1.2.2. Установка на macOS

Для установки используем ту же страницу https://github.com/ethereum/mist/releases, только нам потребуется файл с расширением *.dmg, на момент написания статьи это Ethereum-Wallet-macosx-0-9-3.dmg. После скачивания проверим хеш файла через терминал. Для запуска терминала в macOS нужно:

  1. Запустить Finder.
  2. Выбрать в меню Finder пункт «Переход», далее — «Служебные программы».
  3. Найти иконку «Терминал» и запустить.

В терминале ввести команду:

Далее дважды кликаем на dmg-файл и устанавливаем кошелек.

2.1.2.3. Синхронизация ноды

Перед какими-либо действиями в блокчейне следует полностью синхронизировать Ethereum-ноду (дождаться, пока все индикаторы синхронизации, подобные нижеприведенному, закончат работу и исчезнут).

Со временем блокчейн будет «распухать». Чтобы его сжать (либо если с последней синхронизации прошло много времени), можно полностью удалить блокчейн (только блокчейн! Не аккаунт), тогда будет выполнена быстрая синхронизация. Данные блокчейна находятся в директории chaindata, которую можно найти:

Читайте также:  Майнинг какая сейчас эпоха

/.ethereum/geth/ на Linux;
в

Для удаления данных блокчейна, следовательно, можно просто удалить директорию chaindata. Лучше всего закрыть кошелек, переименовать chaindata в chaindata.old, запустить кошелек (должна начаться синхронизация с нуля и основной интерфейс по-умолчанию не появится — поэтому нажимаем Launch Application), убедиться, что аккаунты на месте (если нет — переименовали что-то не то, ищем их в переименованном каталоге), после чего можно удалять chaindata.old.

2.1.3. Аккаунт

При первом старте Ethereum Wallet следуйте указаниям:

На этом шаге придумайте сложный пароль для вашего будущего кошелька. После этого аккаунт будет создан.

Для подстраховки от поломки жесткого диска сделать резервную копию аккаунта на флешку, хранить вместе с ноутбуком. Даже неработающий жесткий диск, на котором был аккаунт, следует физически уничтожить.

Для резервного копирования аккаунта нужно скопировать файл с ключами, расположенный по адресу:

/.ethereum/keystore
в macOS:

Эти же директории можно открыть в Ethereum Wallet через верхнее меню File -> Backup -> Accounts.

2.1.4. Собираем подписи в единое целое

Здесь есть два подварианта. Стандартный MultiSig Wallet подойдет, если актив, которым вы владеете, — это эфир или ERC-20 токены, и он перечисляется вам на адрес (т. е. для получения не требуется дополнительных действий с вашей стороны). Для защиты любого контракта мультиподписью мы разработали свое решение на основе стандартного. Какой из подвариантов выбрать — зависит от того, что нужно защитить.

2.1.4.1. Стандартный MultiSig wallet

Для создания мультисига вам необходимо сделать две вещи:

  • скопировать публичные адреса других созданных аккаунтов на текущий ноутбук;
  • иметь на основном кошельке эфир (порядка 0.2 или более) для отправки транзакций.

Как только условия выполнены, можно приступать к созданию. В разделе Wallet Contracts нажмите на ADD WALLET CONTRACT. Введите имя контракта и выберите опцию Multisignature Wallet Contract. Вы увидите следующее сообщение:

This is a joint account controlled by X owners. You can send up to X ether per day. Any transaction over that daily limit requires the confirmation of X owners.

На этом этапе вам нужно выбрать, сколько владельцев будет у кошелька-контракта и сколько подписей необходимо для совершения транзакции сверх суточного лимита. Далее нужно вставить адреса всех аккаунтов-владельцев (те, что мы создавали ранее на разных ноутбуках) и нажать CREATE.

Для добавления существующего мультисиг-кошелька на другом компьютере (например, если ноутбук понадобилось заменить или переустановить кошелек) вам необходимо сделать импорт уже существующего кошелька. Действия выполняются в главном окне Ethereum Wallet:

  1. На вкладке WALLETS прокрутите вниз до раздела Wallet Contracts и нажмите кнопку ADD WALLET CONTRACT.
  2. Впишите удобное имя кошелька.
  3. Выберите IMPORT WALLET.
  4. Введите адрес кошелька.
  5. Если один из ваших существующих аккаунтов является владельцем кошелька, появится зеленая надпись, подтверждающая это.
  6. Нажмите кнопку CREATE.

Для перевода средств с мультисиг-кошелька вам, как обычно, нужно перейти на вкладку SEND, выбрать адрес мультисиг-кошелька, с которого будете переводить, ввести сумму и пароль для создания транзакции. Однако после ввода пароля вы увидите различия с обычной транзакцией:

Здесь вам нужно одобрить транзакцию кнопкой APPROVE.

Такое же сообщение будет выведено на компьютере другого владельца:

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

2.1.4.2. MixBytes MultiSig

Для посылки транзакции в любой контракт, защищенный MixBytes MultiSig, следует выполнить те же действия по отсылке транзакции, как для обычного контракта, но повторить их с нескольких управляющих ноутбуков. Со стольких, сколько минимально подписей требуется. При этом первые запросы лишь зафиксируют факт подписи, а действие выполнит последняя подпись.

Опишем, как посылать транзакции в контракт. Контрактами можно управлять в Ethereum Wallet, в шапке есть вкладка Contracts, переходим в нее:

Здесь можно добавить существующий контракт — нажимаем WATCH CONTRACT. В появившейся форме нужно ввести адрес контракта, его имя (выберите любое — оно остается только в вашем кошельке), а также так называемый ABI (application binary interface, представленный большим JSON-текстом):

ABI должен предоставить разработчик контракта. Или же можно попробовать найти ABI на сервисе etherscan.io по адресу контракта во вкладке Contract Source (только для верифицированных контрактов):

Если все успешно, контракт появится на странице контрактов в кошельке. Заходим в него:

Слева можно посмотреть данные состояния контракта, а справа — выбрать функцию для посыла транзакции (Select function): нажимаем Pick A Function, выбираем нужную функцию, появляется форма, где нужно заполнить параметры вызова:

Когда нужные параметры заполнены, выбираем, от имени какого аккаунта выполнить транзакцию (Execute from), нажимаем EXECUTE (потребуется ввести пароль от аккаунта). После этого транзакция уйдет в сеть и достигнет контракта. Напоминаем, для работы MixBytes MultiSig потребуется проделать аналогичную процедуру на двух или более ноутбуках (в зависимости от минимально необходимого числа подписей). Отправлять подписи сверх необходимых не нужно.

2.2. Чуть менее безопасное

Это аппаратные кошельки. Представляют собой физическое устройство, из которого невозможно извлечь (а следовательно, и украсть) приватный ключ. А для подтверждения транзакции необходимо нажать на физическую кнопку на устройстве. Таким образом, если хакер получит удаленный доступ к вашему компьютеру, к которому в это время будет подключен аппаратный кошелек, злоумышленник все равно не сможет физически нажать на кнопку и перевести себе деньги.

Рассмотрим на примере Ledger Nano S. При первом подключении устройства к компьютеру вам необходимо инициализировать устройство, в это входит:

  • Установка 8-значного PIN-кода. Код будет спрашиваться при каждом подключении устройства к компьютеру, а также при выходе из спящего режима.
  • Запись фразы восстановления (seed) из 24 слов. Это узкое место, и здесь остановимся подробнее. Если кто-то получит доступ к фразе — можете попрощаться с активами. Поэтому надо обязательно озаботиться ее хранением в безопасном месте. Запишите на бумажку и спрячьте. Плюс к этому рекомендуем хранить ее в двух разных местах — по сути, сделать резервную копию на случай утери. Существует много способов безопасно хранить фразу и в цифровом виде — хранение по частям, стеганография и т. д. Ограничено лишь вашей фантазией.

В этом аппаратном кошельке можно хранить разные валюты, их число уже приближается к двадцати и постоянно обновляется. Для доступа к отдельным кошелькам используются приложения Chrome, таким образом решена проблема доступа на разных ОС.

2.3. Обычное

Здесь есть много подвариантов. Рассмотрим два.

2.3.1. Ethereum Wallet

О том, как работать с отдельными аккаунтами, рассказано в первом решении («Довольно безопасное», не доходя до раздела «Собираем подписи в единое целое») — это отдельный чистый ноутбук и Ethereum Wallet на нем.

2.3.2. MEW

Наверное, самый популярный кошелек для Ethereum на данный момент, потому что простой. Заходим на сайт https://myetherwallet.com/, выбираем файл с ключом, вводим пароль и уже можем осуществлять транзакции. Без поднятия ноды, скачивания блокчейна и т. д. Сами ключи не уходят на сайт, после загрузки в браузере приложение работает автономно.

Но есть риск того, что сайт подменят. Можем подстраховаться от этого: просто скачать сайт себе на компьютер и открывать его локально, исходный код доступен на Гитхабе. Скачиваем архив с последней версией (на момент написания это был архив etherwallet-v3.21.15.zip), разархивируем и просто открываем index.html. Получаем тот же MEW, но локально.

Нужно помнить: несмотря на то что MEW не хранит ваши секретные ключи, взлом вашего компьютера или браузера позволит узнать секретные ключи в тот момент, когда вы их введете.

Источник

Оцените статью