July 30, 2023

Injective Typescript Wallet accounts

Аккаунты
Injective определяет свой собственный тип аккаунта, который использует кривую ECDSA secp256k1 от Ethereum для ключей. Это удовлетворяет требованию полного пути. Корневой HD-путь для аккаунтов на базе Injective - m/44'/60'/0'/0.
Конвертация адресов
Вы можете легко конвертировать адрес Injective в адрес Ethereum, используя наши утилиты в пакете @injectivelabs/sdk-ts:

import { getInjectiveAddress, getEthereumAddress } from '@injectivelabs/sdk-ts'

const injectiveAddress = 'inj1...' const ethereumAddress = '0x..'

console.log('Injective address from Ethereum address => ', getInjectiveAddress(ethereumAddress)) console.log('Ethereum address from Injective address => ', getEthereumAddress(injectiveAddress))

Выведение кошельков
Использование утилитарных классов Injective
Пример фрагмента кода о том, как получить Injective Account на основе закрытого ключа и/или мнемонической фразы:

import { PrivateKey } from '@injectivelabs/sdk-ts'

const mnemonic = "indoor dish desk flag debris potato excuse depart ticket judge file exit" const privateKey = "afdfd9c3d2095ef696594f6cedcae59e72dcd697e2a7521b1578140422a4f890" const privateKeyFromMnemonic = PrivateKey.fromMnemonic(mnemonic) const privateKeyFromHex = PrivateKey.fromPrivateKey(privateKey)

const address = privateKeyFromMnemonic.toAddress() /* or privateKeyFromHex.toAddress() */ console.log({ injectiveAddress: address.toBech32(), ethereumAddress: address.toHex() })

Пример фрагмента кода для получения открытого ключа из закрытого:

import { PublicKey } from '@injectivelabs/sdk-ts'

const pubKey = "AuY3ASbyRHfgKNkg7rumWCXzSGCvvgtpR6KKWlpuuQ9Y" const publicKey = PublicKey.fromBase64(pubKey)

console.log(publicKey.toAddress().toBech32())

Пример фрагмента кода для получения адреса из открытого ключа:

import { PublicKey } from '@injectivelabs/sdk-ts'

const privateKey = "afdfd9c3d2095ef696594f6cedcae59e72dcd697e2a7521b1578140422a4f890" const publicKey = PublicKey.fromHex(privateKey) const type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey'

console.log(publicKey.toBase64())

Без использования утилитных классов Injective
Пример фрагмента кода о том, как получить Injective Account из закрытого ключа и/или мнемонической фразы:

import { Wallet } from 'ethers' import { Address as EthereumUtilsAddress } from 'ethereumjs-util'

const mnemonic = "indoor dish desk flag debris potato excuse depart ticket judge file exit" const privateKey = "afdfd9c3d2095ef696594f6cedcae59e72dcd697e2a7521b1578140422a4f890" const defaultDerivationPath = "m/44'/60'/0'/0/0" const defaultBech32Prefix = 'inj' const isPrivateKey: boolean = true /* just for the example */

const wallet = isPrivateKey ? Wallet.fromMnemonic(mnemonic, defaultDerivationPath) : new Wallet(privateKey) const ethereumAddress = wallet.address const addressBuffer = EthereumUtilsAddress.fromString(ethereumAddress.toString()).toBuffer() const injectiveAddress = bech32.encode(defaultBech32Prefix, bech32.toWords(addressBuffer))

Example code snipped on how to derive a public key from a private key:

import secp256k1 from 'secp256k1'

const privateKey = "afdfd9c3d2095ef696594f6cedcae59e72dcd697e2a7521b1578140422a4f890" const privateKeyHex = Buffer.from(privateKey.toString(), 'hex') const publicKeyByte = secp256k1.publicKeyCreate(privateKeyHex)

const buf1 = Buffer.from([10]) const buf2 = Buffer.from([publicKeyByte.length]) const buf3 = Buffer.from(publicKeyByte)

const publicKey = Buffer.concat([buf1, buf2, buf3]).toString('base64') const type = '/injective.crypto.v1beta1.ethsecp256k1.PubKey'