36
Компоненты идентификатора:
Приватный ключ (privateKey), который никогда не должен
раскрываться никому. Его можно использовать для подписания и расшифровки
сообщений и для создания его открытого ключа (publicKey).
Открытый ключ раскрывается всякий раз,
когда что-то
подписывается с помощью privateKey. Также принято отправлять publicKey
другим людям, чтобы они могли зашифровать данные с ним,
которые затем
могут быть расшифрованы только с
помощью правильного privateKey.
Существует два способа представления publicKey сжатым и несжатым.
EthCrypto всегда создает несжатый ключ, который начинается с 0x04. Сжатые
ключи начинаются с 0x03 или 0x02. Чтобы представить ключ, мы отделяем
начало 04 от него и внутренне добавляем
его при выполнении
криптографических вызовов.
Адрес вычисляется из последних 20 байтов keccak-256 хэширования
publicKey. Он используется для представления идентификатора. Не существует
способа вычислить publicKey с адреса. Это
означает, что всякий раз,
когда
нужно зашифровать данные для кого-то, мы сначала должны получить
publicKey. Существует два способа представления адреса.
Обычный адрес
имеет строчный регистр и представляет собой только 20 байтов хэша. Формат
контрольной суммы содержит прописные буквы, которые предназначены для
обнаружения ошибок, когда адрес вводится вручную[9].
Транзакция Ethereum в основном представляет собой json-объект с
определенными значениями.
const
rawTransaction
=
{
from
:
identity.address,
// адрес отправителя
to
:
'0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0'
,
// адрес получателя
value
:
1000000000000000000
,
// количество wei, которое мы хотим отправить
(=1 эфир)
nonce
:
0
,
// инкрементное tx-число. добавляет +1 для каждой транзакции
gasPrice
:
5000000000
,
gasLimit
:
21000
// нормальный gasLimit для транзакций без кода
};
Рисунок 3.2 – Создание транзакции
37
Прежде чем транзакция может быть отправлена на узел, она должна быть
подписана с помощью privateKey и переведена в шестнадцатеричную строку.
const
serializedTx
=
EthCrypto.signTransaction(
rawTransaction,
identity.privateKey
);
console.log(serializedTx);
// > 'f86c808504a817c80082ea609463dcee1fd1d814858acd4172bb20e1...'
Рисунок 3.3 – Подпись с privateKey
Теперь строка транзакции может быть отправлена в блокчейн. Для целей
тестирования создается локальная тестовая цепочка и проверяется там. Чтобы
создать локальную тестовую сеть, используется ganache-cli и подключается к
экземпляру web3, чтобы взаимодействовать с ним.
Достарыңызбен бөлісу: