Согласно их документации, Exodus использует следующий путь деривации для Solana:
Код: Выделить всё
m/44'/501'/0'/0/0Код: Выделить всё
/0/0В качестве обходного пути я попробовал следующий подход:
- Определите путь с помощью реализации secp256k1 BIP32 (/ bip32)
Код: Выделить всё
bitcoinjs-lib - Возьмем левые 32 байта () производного закрытого ключа
Код: Выделить всё
IL - Используйте его в качестве начального значения закрытого ключа ed25519
- Вычислите открытый ключ ed25519
Код: Выделить всё
import base58 from "bs58";
import { getPublicKey } from "ed25519-hd-key";
import { mnemonicToSeedSync } from "bip39";
import { BIP32Factory } from "bip32";
import { ECPairFactory } from "ecpair";
import * as ecc from "tiny-secp256k1";
import { initEccLib } from "bitcoinjs-lib";
initEccLib(ecc);
const mnemonic = "deposit potato belt enroll space involve sing angry marine shop ostrich midnight";
const seed = mnemonicToSeedSync(mnemonic);
const bip32Factory = BIP32Factory(ecc)
const bip32RootKey = bip32Factory.fromSeed(Uint8Array.from(seed));
const node = bip32RootKey.derivePath("m/44'/501'/0'/0/0");
const IL = node.privateKey.slice(0, 32);
const publicKeyBuffer = getPublicKey(Buffer.from(IL), false);
const privateKey = base58.encode(Buffer.concat([IL, publicKeyBuffer));
const publicKey = base58.encode(rawPublicKey);
Вопрос:
Является ли этот подход безопасным и действительным или рискованно смешивать производную secp256k1 BIP32 и генерацию ключей ed25519, как это?
Может ли это сломаться в крайних случаях, или это приемлемый способ воспроизвести то, что Как дела у Exodus?
Любая информация о том, как Exodus справляется с этим внутри компании или существует ли стандарт для такого рода «смешивания кривых», была бы очень полезна.
Подробнее здесь: https://stackoverflow.com/questions/797 ... tyle-solan
Мобильная версия