메인 콘텐츠로 건너뛰기
이 섹션에서는 Injective의 내장 계정 시스템에 대해 설명합니다.
이 문서는 Injective의 내장 계정 시스템에 대해 설명합니다.사전 필수 읽기:
Injective는 키에 Ethereum의 ECDSA secp256k1 곡선을 사용하는 커스텀 Account 타입을 정의합니다. 이는 전체 BIP44 경로에 대한 EIP84를 충족합니다. Injective 기반 계정의 루트 HD 경로는 m/44'/60'/0'/0입니다.

주소와 공개 키

Injective에서 기본적으로 사용 가능한 3가지 주요 Addresses/PubKeys 타입이 있습니다:
  • 계정용 주소와 키 - 사용자를 식별합니다(즉, message의 발신자). eth_secp256k1 곡선을 사용하여 파생됩니다.
  • 검증인 운영자용 주소와 키 - 검증인의 운영자를 식별합니다. eth_secp256k1 곡선을 사용하여 파생됩니다.
  • 합의 노드용 주소와 키 - 합의에 참여하는 검증인 노드를 식별합니다. ed25519 곡선을 사용하여 파생됩니다.
Address bech32 PrefixPubkey bech32 PrefixCurveAddress byte lengthPubkey byte length
Accountsinjinjpubeth_secp256k12033 (compressed)
Validator Operatorinjvaloperinjvaloperpubeth_secp256k12033 (compressed)
Consensus Nodesinjvalconsinjvalconspubed255192032

클라이언트용 주소 형식

EthAccount는 Ethereum의 Web3 도구 호환성을 위해 Bech32 및 hex 형식 모두로 표현할 수 있습니다. Bech32 형식은 CLI 및 REST 클라이언트를 통한 Cosmos-SDK 쿼리 및 트랜잭션의 기본 형식입니다. hex 형식은 Cosmos sdk.AccAddress의 Ethereum common.Address 표현입니다.
  • Address (Bech32): inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku
  • Address (EIP55 Hex): 0xAF79152AC5dF276D9A8e1E2E22822f9713474902
  • Compressed Public Key: {"@type":"/injective.crypto.v1beta1.ethsecp256k1.PubKey","key":"ApNNebT58zlZxO2yjHiRTJ7a7ufjIzeq5HhLrbmtg9Y/"}
Cosmos CLI 또는 REST 클라이언트를 사용하여 계정 주소를 쿼리할 수 있습니다:
# NOTE: --output (-o) 플래그는 JSON 또는 YAML(text)로 출력 형식을 정의합니다
injectived q auth account $(injectived keys show <MYKEY> -a) -o text
|
  '@type': /injective.types.v1beta1.EthAccount
  base_account:
    account_number: "3"
    address: inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku
    pub_key: null
    sequence: "0"
  code_hash: xdJGAYb3IzySfn2y3McDwOUAtlPKgic7e/rYBF2FpHA=
# GET /cosmos/auth/v1beta1/accounts/{address}
curl -X GET "http://localhost:10337/cosmos/auth/v1beta1/accounts/inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" -H "accept: application/json"
계정 API에 대한 전체 문서는 Swagger API 레퍼런스를 참조하세요.
Cosmos SDK Keyring 출력(즉, injectived keys)은 Bech32 형식의 주소만 지원합니다.

개인 키/니모닉에서 Injective 계정 파생

다음은 개인 키 및/또는 니모닉 구문에서 Injective 계정을 파생하는 방법의 예입니다:
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 /* 예시용 */

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))
다음은 개인 키에서 공개 키를 파생하는 방법의 예입니다:
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'

서브계정

Injective 서브계정을 사용하면 단일 메인 지갑 주소로 여러 개의 격리된 거래 계정을 관리할 수 있습니다. 이는 파워 유저, 특히 전문 트레이더와 마켓 메이커에게 유용합니다.
서브계정에 대한 기술적 구현 세부 사항은 Trading Account 개발자 문서를 참조하세요.

주요 기능 및 설명

  • 프로그래매틱 액세스: 이 기능은 Injective의 네이티브 API를 통한 프로그래매틱 거래에 높은 접근성을 제공하도록 설계되었으며, 금융 애플리케이션 개발자를 대상으로 합니다.
  • 고급 계정 관리: 서브계정 기능은 정교한 계정 관리 기능을 제공하여 사용자(예: 기관 또는 알고리즘 트레이더)가 단일 기본 Injective 주소 내에서 자금과 거래 전략을 분리할 수 있게 합니다.
  • 격리 및 구성: 한 서브계정 내의 자금과 주문은 다른 서브계정과 격리되어 있어 리스크 관리, 다른 거래 봇 실행 또는 간섭 없이 여러 전략을 동시에 적용하는 데 중요합니다.
  • 원활한 이체: 사용자는 Injective 네트워크의 특정 메시지를 사용하여 메인 계정 잔액과 다양한 서브계정 간, 그리고 서로 다른 서브계정 간에 자산을 쉽게 이체할 수 있습니다.
  • exchange 모듈과의 통합: 서브계정 기능은 현물, 무기한, 선물 및 옵션 시장을 위한 온체인 오더북과 매칭 엔진을 포함하는 Injective의 핵심 exchange 모듈의 일부입니다.
서브계정은 단일 사용자 계정이 제어하는 별도의 연결된 “포트폴리오”처럼 작동합니다. 이는 Injective의 DeFi 생태계 참여자에게 유연성과 운영 제어를 제공합니다.