Я не смог найти ни одной библиотеки, которая, учитывая шестнадцатеричное значение, возвращает true, если данная строка является действительным закрытым ключом эфира.
Любые подсказки?
Как упоминал Питер, закрытый ключ представляет собой случайный 256-битный блок. Это распространенное упущение, что нет никаких ограничений.
Он должен быть действителен для кривой secp256k1, что означает два условия:
n
и имеет значение ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141
)В Javascript вы можете использовать ethereumjs-wallet для этой проверки: Wallet.fromPrivateKey(<yourkey>)
будет выдано исключение при недопустимом вводе.
В качестве альтернативы вы также можете использовать privateKeyVerify()
метод из базовой библиотеки secp256k1
или сделать это вручную с помощью библиотеки больших чисел по вашему выбору.
важно : этот ответ относится к общедоступному адресу, а не к закрытому ключу, см. комментарии.
Каждая шестнадцатеричная строка является действительным адресом Ethereum.
В настоящее время контрольные суммы адресов не реализованы, поэтому все 0x<40 hex digits here>
они действительны. Мы рассматриваем возможность добавления базового ICAP в Geth 1.4.1 или Geth 1.5, чтобы разрешить вставку дополнительной информации в адрес, который предотвратит их опечатку, но до тех пор, пока он состоит из 40 шестнадцатеричных символов, он действителен.
Вы также можете использовать эфиры для проверки. Как это:
const ethers = require('ethers')
var pk = '0xcaed41dd92c1548cf7536c290e6a1871757fb5fea5721dea3a08c6d4abcd16cf'
let w = new ethers.Wallet(pk)
// Shorter than 32 bytes
pk = '0xcaed41dd92c1548cf7536c290e6a1871757fb5fea5721dea3a08c6d4abcd16'
w = new ethers.Wallet(pk)
// Incorrect hexidecimal string. Change last f to g. G is not hex
pk = '0xcaed41dd92c1548cf7536c290e6a1871757fb5fea5721dea3a08c6d4abcd16cg'
w = new ethers.Wallet(pk)
Первый случай в порядке и будет успешным.
Второй выдаст ошибку
reason: 'exactly 32 bytes required',
code: 'INVALID_ARGUMENT',
Третий тоже выдаст ошибку:
reason: 'invalid hexidecimal string',
code: 'INVALID_ARGUMENT',
Вы можете поймать эту ошибку, чтобы проверить свой privateKey
pk = '0xcaed41dd92c1548cf7536c290e6a1871757fb5fea5721dea3a08c6d4abcd16cg'
try {
w = new ethers.Wallet(pk)
}
catch (e) {
console.log('Invalid private key.')
}
Передовой
Питер Силаджи
Передовой