Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .gitbook/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -1701,6 +1701,30 @@
"group": "INJECTIVE",
"pages": [
"jp/index",
{
"group": "インフラストラクチャ",
"icon": "network-wired",
"expanded": false,
"pages": [
"jp/infra/index",
{
"group": "ノードとの対話",
"expanded": false,
"pages": [
"jp/infra/interact-node/index",
"jp/infra/interact-node/command-line",
"jp/infra/interact-node/grpc",
"jp/infra/interact-node/go",
"jp/infra/interact-node/rest"
]
},
"jp/infra/run-node",
"jp/infra/set-up-keyring",
"jp/infra/join-a-network",
"jp/infra/cosmovisor",
"jp/infra/upgrade-node"
]
},
"jp/faq",
"jp/glossary",
"jp/references"
Expand Down
171 changes: 171 additions & 0 deletions .gitbook/jp/infra/cosmovisor.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
---
title: Injective NetworkのCosmovisorセットアップガイド
---

Cosmovisorは、Cosmos SDKベースのブロックチェーン向けに設計されたプロセスマネージャーで、バイナリ(チェーン)アップグレードの管理を簡素化します。このガイドでは、Injective NetworkノードにCosmovisorをセットアップする手順を説明します。

> **注意:** これらの手順は、既存のチェーンバイナリ(例:`injectived`)があり、ソースからCosmovisorをインストールする場合にはGo環境が動作していることを前提としています。セットアップに応じて名前とパスを調整してください。

---

## 目次

1. [インストール](#インストール)
- [Goによるインストール](#goによるインストール)
2. [環境変数](#環境変数)
3. [ディレクトリ構造](#ディレクトリ構造)
4. [Cosmovisorの実行](#cosmovisorの実行)
5. [チェーンアップグレードの処理](#チェーンアップグレードの処理)
6. [Cosmovisorをsystemdサービスとして実行](#cosmovisorをsystemdサービスとして実行)

---

## インストール

### Goによるインストール

Goがインストールされている場合、以下のコマンドでCosmovisorをインストールできます:

```bash
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0
```

> **ヒント:** Goバイナリのインストールパス(通常`$GOPATH/bin`または`$HOME/go/bin`)がシステムの`PATH`に追加されていることを確認してください。以下のコマンドでインストールを確認できます:
>
> ```bash
> which cosmovisor
> ```

## 環境変数

Cosmovisorがどのバイナリを実行し、どこにあるかを認識できるように、以下の環境変数をセットアップします:

- **`DAEMON_NAME`**
チェーンのバイナリ名(例:`injectived`)。

- **`DAEMON_HOME`**
ノードのホームディレクトリ(例:`~/.injectived`)。

これらの変数は、シェルのプロファイル(`~/.bashrc`や`~/.profile`など)に設定するか、ターミナルセッションで直接エクスポートできます:

```bash
export DAEMON_NAME=injectived
export DAEMON_HOME=~/.injectived
```

---

## ディレクトリ構造

Cosmovisorは、ノードのホームディレクトリに特定のフォルダ構造を必要とします:

1. **Genesisディレクトリの作成**

このディレクトリには初期(genesis)バイナリが配置されます。

```bash
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
```

2. **現在のバイナリのコピー**

現在のチェーンバイナリ(例:`injectived`)をgenesisフォルダに配置します。ファイル名が`DAEMON_NAME`の値と一致していることを確認してください(次のセクションを参照)。

```bash
cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived
```

---

## Cosmovisorの実行

チェーンのバイナリを直接実行する代わりに、以下のコマンドでCosmovisorを使用してノードを起動します:

```bash
cosmovisor run start
```

Cosmovisorは以下を行います:

- `$DAEMON_HOME/cosmovisor/genesis/bin`(または適切なアップグレードフォルダ)のバイナリを検索します。
- そのバイナリを使用してノードを起動します。
- オンチェーンのアップグレードシグナルを監視し、必要に応じてバイナリを自動的に切り替えます。

---

## チェーンアップグレードの処理

オンチェーンでアップグレードがアナウンスされた場合、Cosmovisorが自動的に切り替えられるように新しいバイナリを準備します:

1. **アップグレードディレクトリの作成**

オンチェーンで提供されるアップグレード名(例:`v1.14.0`)を使用します:

```bash
mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
```

2. **新しいバイナリの配置**

新しいバイナリをコンパイルまたはダウンロードし、アップグレードディレクトリにコピーします。バイナリ名が`DAEMON_NAME`と一致していることを確認してください。

```bash
cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
```

> **ヒント:** GitHubから`injectived`バイナリパッケージをダウンロードした場合、`libwasmvm.x86_64.so`をアップグレードの`bin`ディレクトリにコピーします。後でsystemdサービスにこのディレクトリを`LD_LIBRARY_PATH`に追加する環境変数が設定されます。

3. **アップグレードプロセス**

アップグレード高に達すると、Cosmovisorはスケジュールされたアップグレードを検出し、対応するアップグレードフォルダにあるバイナリに自動的に切り替えます。

---

## Cosmovisorをsystemdサービスとして実行

本番環境では、ノードをsystemdサービスとして実行するのが一般的です。以下はサービスファイルの例です。

1. **サービスファイルの作成**

以下の内容でファイル(例:`/etc/systemd/system/injectived.service`)を作成します。パスと`<your_username>`を適宜調整してください:

```ini
[Unit]
Description=Injective Daemon managed by Cosmovisor
After=network-online.target

[Service]
User=<your_username>
ExecStart=/home/<your_username>/go/bin/cosmovisor run start
Restart=always
RestartSec=3
Environment="DAEMON_NAME=injectived"
Environment="DAEMON_HOME=/home/<your_username>/.injectived"
Environment="PATH=/usr/local/bin:/home/<your_username>/go/bin:$PATH"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="LD_LIBRARY_PATH=/home/<your_username>/.injectived/cosmovisor/current/bin"

[Install]
WantedBy=multi-user.target
```

2. **サービスの有効化と起動**

```bash
sudo systemctl daemon-reload
sudo systemctl enable injectived.service
sudo systemctl start injectived.service
```

3. **ログの確認**

サービスが正常に動作していることを確認します:

```bash
journalctl -u injectived.service -f
```

---
8 changes: 8 additions & 0 deletions .gitbook/jp/infra/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
description: >-
このセクションでは、ノードオペレーターおよびバリデーターがsentry/バリデーターノードの運用、アップグレード、メンテナンスを行う方法について説明します。
title: 概要
---

* [メインネットバリデーター](/jp/infra/validator-mainnet/)
* [テストネットバリデーター](/jp/infra/validator-testnet/)
7 changes: 7 additions & 0 deletions .gitbook/jp/infra/interact-node/command-line.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: CLIを使用したノードとの対話
---

`injectived` CLIを使用してノードと対話できます。ローカルプライベートネットワーク内のノードと対話する場合は、CLIを使用する前にターミナルでノードが実行されていることを確認してください。

`injectived`の使用方法の詳細については、[injectivedの使用](/developers/injectived/use/ "mention")を参照してください。
88 changes: 88 additions & 0 deletions .gitbook/jp/infra/interact-node/go.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
title: Goを使用したノードとのプログラム的な対話
---

<Callout icon="info" color="#07C1FF" iconType="regular">
以下の例はGoで記述されていますが、PythonおよびTS SDKもノード/Injectiveとのプログラム的な対話に使用できます。

* [TypeScript の例](/developers-native/examples/)
* [Python の例](https://github.com/InjectiveLabs/sdk-python/tree/master/examples)
</Callout>

以下のスニペットは、Goプログラム内でgRPCを使用してstateをクエリする方法を示しています。gRPC接続を作成し、Protobufで生成されたクライアントコードを使用してgRPCサーバーにクエリを送信します。

```go
import (
"context"
"fmt"

"google.golang.org/grpc"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
)

func queryState() error {
myAddress, err := sdk.AccAddressFromBech32("inj...")
if err != nil {
return err
}

// gRPCサーバーへの接続を作成します。
grpcConn := grpc.Dial(
"127.0.0.1:9090", // gRPCサーバーのアドレス
grpc.WithInsecure(), // SDKはトランスポートセキュリティメカニズムをサポートしていません。
)
defer grpcConn.Close()

// x/bankサービスをクエリするためのgRPCクライアントを作成します。
bankClient := banktypes.NewQueryClient(grpcConn)
bankRes, err := bankClient.Balance(
context.Background(),
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: "inj"},
)
if err != nil {
return err
}

fmt.Println(bankRes.GetBalance()) // アカウント残高を出力

return nil
}
```

#### **Goを使用した過去のstateのクエリ**

過去のブロックのクエリは、gRPCリクエストにブロック高のメタデータを追加することで行います。

```go
import (
"context"
"fmt"

"google.golang.org/grpc"
"google.golang.org/grpc/metadata"

grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
"github.com/cosmos/cosmos-sdk/types/tx"
)

func queryState() error {
// --省略--

var header metadata.MD
bankRes, err = bankClient.Balance(
metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // リクエストにメタデータを追加
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: denom},
grpc.Header(&header), // レスポンスからヘッダーを取得
)
if err != nil {
return err
}
blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader)

fmt.Println(blockHeight) // ブロック高を出力(12)

return nil
}
```
62 changes: 62 additions & 0 deletions .gitbook/jp/infra/interact-node/grpc.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: gRPCを使用したノードとの対話
---

Protobufエコシステムでは、`*.proto`ファイルからさまざまな言語へのコード生成を含む、さまざまなユースケース向けのツールが開発されています。これらのツールにより、クライアントを簡単に構築できます。多くの場合、クライアント接続(トランスポート)は簡単にプラグインおよび置換できます。ここでは一般的なトランスポート方法であるgRPCについて説明します。

コード生成ライブラリは技術スタックに大きく依存するため、ここでは2つの方法のみを紹介します:

* 汎用的なデバッグおよびテスト用の`grpcurl`
* Go、Python、またはTSによるプログラム的な方法

## grpcurl

[grpcurl](https://github.com/fullstorydev/grpcurl)は、gRPC版の`curl`です。GoライブラリとしてもGoから利用可能ですが、ここではデバッグおよびテスト目的のCLIコマンドとしてのみ使用します。インストール方法については、上記リンクの手順に従ってください。

ローカルノードが稼働している場合(localnetまたはライブネットワークに接続済み)、以下のコマンドを実行して利用可能なProtobufサービスの一覧を取得できます。`localhost:9090`は、`app.toml`の`grpc.address`フィールドで設定された別のノードのgRPCサーバーエンドポイントに置き換えることができます:

```bash
grpcurl -plaintext localhost:9090 list
```

`cosmos.bank.v1beta1.Query`のようなgRPCサービスの一覧が表示されます。これはリフレクションと呼ばれ、利用可能なすべてのエンドポイントの説明を返すProtobufエンドポイントです。これらはそれぞれ異なるProtobufサービスを表し、各サービスはクエリ可能な複数のRPCメソッドを公開しています。

サービスの詳細を取得するには、以下のコマンドを実行します:

```bash
# 確認したいサービス
grpcurl \
localhost:9090 \
describe cosmos.bank.v1beta1.Query
```

RPCコールを実行してノードから情報を取得することも可能です:

```bash
grpcurl \
-plaintext
-d '{"address":"$MY_VALIDATOR"}' \
localhost:9090 \
cosmos.bank.v1beta1.Query/AllBalances
```

## grpcurlを使用した過去のstateのクエリ

gRPCリクエストに[gRPCメタデータ](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md)を渡すことで、過去のデータをクエリすることもできます。`x-cosmos-block-height`メタデータにクエリ対象のブロックを含める必要があります。grpcurlを使用する場合、コマンドは以下のようになります:

```bash
grpcurl \
-plaintext \
-H "x-cosmos-block-height: 279256" \
-d '{"address":"$MY_VALIDATOR"}' \
localhost:9090 \
cosmos.bank.v1beta1.Query/AllBalances
```

そのブロックのstateがノードによってまだプルーニングされていない場合、このクエリは空でないレスポンスを返します。

## トランザクションの送信

gRPCおよびRESTを使用してトランザクションを送信するには、トランザクションの生成、署名、そしてブロードキャストという追加手順が必要です。

詳細については[トランザクション](/defi/transactions/ "mention")を参照してください。
10 changes: 10 additions & 0 deletions .gitbook/jp/infra/interact-node/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
title: ノードとの対話
---

このセクションでは、Injectiveノードと対話するためのさまざまな方法について説明します。

- [コマンドライン](/jp/infra/interact-node/command-line)
- [gRPC](/jp/infra/interact-node/grpc)
- [Go](/jp/infra/interact-node/go)
- [REST](/jp/infra/interact-node/rest)
Loading