このセクションでは、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**曲線を使用して導出されます。
アドレス bech32 プレフィックス Pubkey bech32 プレフィックス 曲線 アドレスバイト長 Pubkeyバイト長 アカウント injinjpubeth_secp256k12033(圧縮)バリデーターオペレーター injvaloperinjvaloperpubeth_secp256k12033(圧縮)コンセンサスノード injvalconsinjvalconspubed255192032
クライアント向けアドレスフォーマット
EthAccountは、EthereumのWeb3ツールとの互換性のために、Bech32 フォーマットとhexフォーマットの両方で表現できます。
Bech32フォーマットは、CLIおよびRESTクライアントを通じたCosmos-SDKクエリとトランザクションのデフォルトフォーマットです。hexフォーマットは、Cosmos sdk.AccAddressのEthereum common.Address表現です。
アドレス(Bech32):inj14au322k9munkmx5wrchz9q30juf5wjgz2cfqku
アドレス(EIP55 Hex):0xAF79152AC5dF276D9A8e1E2E22822f9713474902
圧縮公開鍵:{"@type":"/injective.crypto.v1beta1.ethsecp256k1.PubKey","key":"ApNNebT58zlZxO2yjHiRTJ7a7ufjIzeq5HhLrbmtg9Y/"}
Cosmos CLIまたはRESTクライアントを使用してアカウントアドレスをクエリできます:
# 注:--output (-o) フラグは出力フォーマットをJSONまたはYAML(テキスト)で定義します
injectived q auth account $( injectived keys show < MYKE Y > -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のサブアカウントにより、1つのメインウォレットアドレスで複数の独立した取引アカウントを管理できます。これは、特にプロフェッショナルトレーダーやマーケットメイカーなどのパワーユーザーにとって有用です。
主な機能と説明
プログラマティックアクセス :この機能は、InjectiveのネイティブAPIを介したプログラマティック取引に対して高いアクセス性を提供するように設計されており、金融アプリケーション開発者に対応しています。
高度なアカウント管理 :サブアカウント機能は、ユーザー(例:機関投資家やアルゴリズムトレーダー)が単一のプライマリInjectiveアドレス内で資金と取引戦略を分離できる高度なアカウント管理機能を提供します。
分離と整理 :あるサブアカウント内の資金と注文は他のサブアカウントから分離されており、リスク管理、異なるトレーディングボットの運用、または異なる戦略の同時適用にとって重要です。
シームレスな転送 :ユーザーは、Injectiveネットワーク上の特定のメッセージを使用して、メインアカウント残高とさまざまなサブアカウント間、および異なるサブアカウント間で資産を簡単に転送できます。
Exchangeモジュールとの統合 :サブアカウント機能はInjectiveのコアexchangeモジュールの一部であり、スポット、パーペチュアル、先物、およびオプション市場向けのオンチェーンオーダーブックとマッチングエンジンを含みます。
サブアカウントは、単一のユーザーアカウントによって制御される、分離されたリンク済みの「ポートフォリオ」のように機能します。これにより、InjectiveのDeFiエコシステムの参加者に柔軟性と運用上の制御が提供されます。