Loading...
Loading...


0x742d35Cc6634C0532925a3b8D4C9db96590c6C870x1f9840a85d5aF5bf1D1762F925BDADdC4201F984
// Один кошелек может содержать много адресовconst wallet = { name: 'My Wallet', addresses: [ '0x742d35Cc6634C0532925a3b8D4C9db96590c6C87', // Адрес 1 '0x8ba1f109551bD432803012645Hac136c851a7c', // Адрес 2 '0x123456789abcdef123456789abcdef1234567890', // Адрес 3 ],};Приватный ключ (256 бит):7c4a8d09ca3762af61e59520943dc26494f8941b6ce8c5a46a5b2c7b8c3e0f1eПубличный ключ (512 бит):04a4d0c7e7e3b5c6f8a9b2c1d0e3f4g5h6i7j8k9l0m1n2o3p4q5r6s7t8u9v0w1x2y3z4Keccak-256 хеш:742d35Cc6634C0532925a3b8D4C9db96590c6C87123456789abcdef0123456789Адрес:0x742d35Cc6634C0532925a3b8D4C9db96590c6C87Пример приватного ключа:0x7c4a8d09ca3762af61e59520943dc26494f8941b6ce8c5a46a5b2c7b8c3e0f1eПример публичного ключа:04a4d0c7e7e3b5c6f8a9b2c1d0e3f4g5h6i7j8k9l0m1n2o3p4q5r6s7t8u9v0w1x2y3z4Пример seed фразы:abandon ability able about above absent absorb abstract absurd abuse access accident// Создание кошелька из seed фразыimport { ethers } from 'ethers';
const mnemonic = 'abandon ability able about above absent absorb abstract absurd abuse access accident';const wallet = ethers.Wallet.fromMnemonic(mnemonic);
console.log('Приватный ключ:', wallet.privateKey);console.log('Публичный ключ:', wallet.publicKey);console.log('Адрес:', wallet.address);
// Всегда будут одинаковые результаты!// Генерация случайного ключаconst wallet = ethers.Wallet.createRandom();
console.log('=== НОВЫЕ КЛЮЧИ ===');console.log('Приватный ключ:', wallet.privateKey);console.log('Публичный ключ:', wallet.publicKey);console.log('Адрес:', wallet.address);console.log('Seed фраза:', wallet.mnemonic.phrase);// Создание множественных адресов из одной seed фразыimport { ethers } from 'ethers';
const mnemonic = 'abandon ability able about above absent absorb abstract absurd abuse access accident';const hdNode = ethers.utils.HDNode.fromMnemonic(mnemonic);
console.log('=== HD КОШЕЛЕК ===');for (let i = 0; i < 5; i++) { const path = `m/44'/60'/0'/0/${i}`; const child = hdNode.derivePath(path); console.log(`Адрес ${i}:`, child.address); console.log(`Ключ ${i}:`, child.privateKey);}// ❌ ПЛОХО!const config = { privateKey: '0x7c4a8d09ca3762af...', // НЕТ! mnemonic: 'abandon ability able...', // НЕТ!};Правильное хранение seed фразы:📝 Записать на бумаге ручкой🏠 Хранить в сейфе дома📋 Сделать 2-3 копии🔒 Никому не показыватьimport { ethers } from 'ethers';
// Создание кошелькаconst wallet = ethers.Wallet.createRandom();
// Сообщение для подписиconst message = 'Привет, блокчейн!';
// Подписание сообщения приватным ключомasync function signMessage() { const signature = await wallet.signMessage(message);
console.log('=== ЦИФРОВАЯ ПОДПИСЬ ==='); console.log('Сообщение:', message); console.log('Подпись:', signature); console.log('Адрес подписанта:', wallet.address);
// Проверка подписи const recoveredAddress = ethers.verifyMessage(message, signature); console.log('Восстановленный адрес:', recoveredAddress); console.log('Подпись корректна:', recoveredAddress === wallet.address);}
signMessage();// Восстановление из seed фразыfunction recoverWallet(mnemonic) { try { const wallet = ethers.Wallet.fromMnemonic(mnemonic);
console.log('=== ВОССТАНОВЛЕННЫЙ КОШЕЛЕК ==='); console.log('Адрес:', wallet.address); console.log('Приватный ключ:', wallet.privateKey); console.log('Успешно восстановлен!');
return wallet; } catch (error) { console.error('Ошибка восстановления:', error.message); return null; }}
// Попробуй восстановитьconst mnemonic = 'abandon ability able about above absent absorb abstract absurd abuse access accident';recoverWallet(mnemonic);
// Пример создания кошелька в кодеimport { ethers } from 'ethers';
// Создание случайного кошелькаconst wallet = ethers.Wallet.createRandom();
console.log('Адрес:', wallet.address);console.log('Приватный ключ:', wallet.privateKey);console.log('Мнемоническая фраза:', wallet.mnemonic.phrase);
Приватный ключ: 7c4a8d09ca3762af61e59520943dc26494f8941b6ce8c5a46a5b2c7b8c3e0f1eАдрес: 0x742d35Cc6634C0532925a3b8D4C9db96590c6C87// Пример мультиподписного кошелькаcontract MultiSigWallet { address[] public owners; uint public required; // Минимум подписей
// 3 владельца, нужны минимум 2 подписи constructor(address[] memory _owners) { owners = _owners; // [Alice, Bob, Charlie] required = 2; // Нужны любые 2 из 3 }}abandon ability able about above absent absorb abstractabsurd abuse access accident account accuse achieve acidgraph TD A[Seed фраза<br/>12 слов] --> B[Мастер ключ] B --> C[Приватный ключ 1] B --> D[Приватный ключ 2] B --> E[Приватный ключ 3] C --> F[Адрес 1] D --> G[Адрес 2] E --> H[Адрес 3]
style A fill:#ff6b6b style F fill:#96ceb4 style G fill:#96ceb4 style H fill:#96ceb4import { ethers } from 'ethers';
// Seed фразаconst mnemonic = 'abandon ability able about above absent absorb abstract absurd abuse access accident';
// Создание кошелька из seed фразыconst wallet = ethers.Wallet.fromMnemonic(mnemonic);
console.log('Адрес:', wallet.address);// 0x9858EfFD232B4033E47d90003D41EC34EcaEda94
// Можно сгенерировать множество адресовconst hdNode = ethers.utils.HDNode.fromMnemonic(mnemonic);
for (let i = 0; i < 5; i++) { const childWallet = hdNode.derivePath(`m/44'/60'/0'/0/${i}`); console.log(`Адрес ${i + 1}:`, childWallet.address);}// ❌ НИКОГДА НЕ ДЕЛАЙ ТАК!const privateKey = '0x7c4a8d09ca3762af61e59520943dc26494f8941b6ce8c5a46a5b2c7b8c3e0f1e';console.log('Мой приватный ключ:', privateKey); // НЕТ!telegram.send('Мой приватный ключ: ' + privateKey); // НЕТ!✅ Правильно:- Записать на бумаге- Сделать несколько копий- Хранить в разных местах- Проверить правильность записи
❌ Неправильно:- Сохранить в телефоне- Отправить себе на почту- Сфотографировать- Хранить в облаке// Всегда проверяй первые и последние символыconst recipient = '0x742d35Cc6634C0532925a3b8D4C9db96590c6C87';
console.log('Первые 6:', recipient.slice(0, 6)); // 0x742dconsole.log('Последние 4:', recipient.slice(-4)); // 6C87
// Если хоть один символ не совпадает — НЕ ОТПРАВЛЯЙ!✅ Официальные ссылки:- https://metamask.io- https://ethereum.org- https://app.uniswap.org
❌ Поддельные сайты:- metamask-wallet.net- ethereum-wallet.com- uniswap-defi.org// Правильный адресconst correct = '0x742d35Cc6634C0532925a3b8D4C9db96590c6C87';
// Ошибка в одной буквеconst wrong = '0x742d35Cc6634C0532925a3b8D4C9db96590c6C86'; // 86 вместо 87
// Деньги будут потеряны навсегда!Поддельный MetaMask:📱 Скачать с поддельного сайта🔓 Ввести seed фразу💸 Потерять все деньги// ❌ НИКОГДА НЕ ДЕЛАЙ ТАК!const config = { wallet: { privateKey: '0x7c4a8d09ca3762af...', // НЕТ! seedPhrase: 'abandon ability able...', // НЕТ! },};
// Это будет видно всем в интернете!Твой первый адрес:0x742d35Cc6634C0532925a3b8D4C9db96590c6C87
Этот адрес можешь давать другим для получения платежей!import { ethers } from 'ethers';
// Создание случайного кошелькаconst wallet = ethers.Wallet.createRandom();
console.log('=== НОВЫЙ КОШЕЛЕК ===');console.log('Адрес:', wallet.address);console.log('Приватный ключ:', wallet.privateKey);console.log('Мнемоника:', wallet.mnemonic.phrase);
// Сохрани мнемонику на бумаге!// Приватный ключ никому не показывай!// Создание кошелька из существующей seed фразыconst mnemonic = 'abandon ability able about above absent absorb abstract absurd abuse access accident';const wallet = ethers.Wallet.fromMnemonic(mnemonic);
console.log('Восстановленный адрес:', wallet.address);// Всегда будет: 0x9858EfFD232B4033E47d90003D41EC34EcaEda94
// Создание дополнительных адресовconst hdNode = ethers.utils.HDNode.fromMnemonic(mnemonic);
for (let i = 0; i < 3; i++) { const child = hdNode.derivePath(`m/44'/60'/0'/0/${i}`); console.log(`Адрес ${i}:`, child.address);}import { ethers } from 'ethers';
// Подключение к Ethereum сетиconst provider = new ethers.JsonRpcProvider( 'https://mainnet.infura.io/v3/YOUR_KEY',);
async function checkBalance(address) { try { // Получение баланса в wei const balanceWei = await provider.getBalance(address);
// Конвертация в ETH const balanceEth = ethers.formatEther(balanceWei);
console.log(`Адрес: ${address}`); console.log(`Баланс: ${balanceEth} ETH`); console.log(`В wei: ${balanceWei.toString()}`);
return balanceEth; } catch (error) { console.error('Ошибка:', error.message); }}
// Проверка балансаcheckBalance('0x742d35Cc6634C0532925a3b8D4C9db96590c6C87');import { ethers } from 'ethers';
function validateAddress(address) { try { // Проверка формата if (!ethers.isAddress(address)) { return { valid: false, error: 'Неверный формат адреса' }; }
// Нормализация с checksum const normalized = ethers.getAddress(address);
// Проверка на нулевой адрес if (normalized === ethers.ZeroAddress) { return { valid: false, error: 'Нулевой адрес' }; }
return { valid: true, normalized: normalized, checksum: normalized !== address.toLowerCase(), }; } catch (error) { return { valid: false, error: error.message }; }}
// Примеры проверкиconsole.log(validateAddress('0x742d35Cc6634C0532925a3b8D4C9db96590c6C87'));console.log(validateAddress('0x742d35cc6634c0532925a3b8d4c9db96590c6c87')); // lowercaseconsole.log(validateAddress('0x742d35Cc6634C0532925a3b8D4C9db96590c6C8')); // неверная длинаfunction generateAddresses(count = 5) { console.log(`=== Генерация ${count} адресов ===\n`);
for (let i = 0; i < count; i++) { const wallet = ethers.Wallet.createRandom();
console.log(`Кошелек ${i + 1}:`); console.log(` Адрес: ${wallet.address}`); console.log(` Ключ: ${wallet.privateKey}`); console.log(` Seed: ${wallet.mnemonic.phrase}`); console.log(''); }}
generateAddresses(3);Вместо: 0x742d35Cc6634C0532925a3b8D4C9db96590c6C87Можно: alex.eth// Популярные ENS именаconst ensNames = { 'vitalik.eth': '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045', 'ethereum.eth': '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359', 'alex.eth': '0x742d35Cc6634C0532925a3b8D4C9db96590c6C87',};import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider( 'https://mainnet.infura.io/v3/YOUR_KEY',);
async function resolveENS(ensName) { try { // Получение адреса по ENS имени const address = await provider.resolveName(ensName); console.log(`${ensName} → ${address}`);
return address; } catch (error) { console.error(`Ошибка резолва ${ensName}:`, error.message); return null; }}
async function reverseENS(address) { try { // Получение ENS имени по адресу const ensName = await provider.lookupAddress(address); console.log(`${address} → ${ensName}`);
return ensName; } catch (error) { console.error(`Нет ENS для ${address}`); return null; }}
// Примеры использованияresolveENS('vitalik.eth');reverseENS('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045');

