> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequence.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# ウォレット

SequenceEthereumにおける`Wallet`は、`IWallet`インターフェースで定義されます。このSDKには現在、2つの`IWallet`インターフェース実装があります。

## 1. EOAWallet

`EOAWallet`は、EVMチェーン向けの標準的な[EOAウォレット](https://ethereum.stackexchange.com/questions/5828/what-is-an-eoa-account)です。

EOAWalletは簡単に作成できます。

```csharp theme={null}
IWallet eoaWallet = new EOAWallet(); // This will generate a cryptographically random private key
IWallet eoaWallet = new EOAWallet(privateKeyString); // Create a wallet using a previously generated private key
```

## 2. SequenceWalletToEOAWalletAdapter

`SequenceWalletToEOAWalletAdapter`は、`SequenceWallet`を`EOAWallet`と同じ`IWallet`インターフェースで利用できるようにするアダプターで、SequenceEthereumライブラリ全体でEOAウォレットと同様に扱えます。

SequenceWalletToEOAWalletAdapterは、SequenceWalletがあれば簡単に作成できます。

```csharp theme={null}
IWallet sequenceAdapter = new SequenceWalletToEOAWalletAdapter(sequenceWallet);
```

## メソッド一覧

`IWallet`インターフェースでは、いくつかのメソッドが利用できます。特に重要なのは以下の通りです。

### GetAddress

ウォレットの`Address`を返します。

```csharp theme={null}
Address address = wallet.GetAddress();
```

### SendTransaction

指定した`EthTransaction`に署名し、指定したクライアント経由で送信します。

```csharp theme={null}
string transactionHash = await wallet.SendTransaction(client, transaction);
```

### SendTransactionAndWaitForReceipt

指定した`EthTransaction`に署名し、指定したクライアント経由で送信した後、`TransactionReceipt`を待ちます。

```csharp theme={null}
TransactionReceipt receipt = await wallet.SendTransactionAndWaitForReceipt(client, transaction);
```

### SendTransactionBatch

指定した`EthTransaction[]`に署名し、指定したクライアント経由でまとめて送信します。
ウォレットが`EOAWallet`の場合、各トランザクションは順番に送信され、それぞれ成功または失敗します。ウォレットが`SequenceWalletToEOAWalletAdapter`の場合、すべてのトランザクションが1つにまとめられ、一括で送信され、全体として成功または失敗します。
また、`EOAWallet`の場合は受け取る`string[]`（トランザクションハッシュ）の長さは送信した`EthTransaction[]`と同じですが、`SequenceWalletToEOAWalletAdapter`の場合は1つのトランザクションハッシュ（長さ1の`string[]`）のみが返されます。

```csharp theme={null}
string[] transactionHashes = await wallet.SendTransactionBatch(client, transactions);
```

### SendTransactionBatchAndWaitForReceipts

指定された `EthTransaction[]` を署名し、指定されたクライアント経由で送信した後、`TransactionReceipt[]` を待機します。
ウォレットが `EOAWallet` の場合、トランザクションは順番に送信され、それぞれ成功または失敗する可能性があります。ウォレットが `SequenceWalletToEOAWalletAdapter` の場合、トランザクションはまとめて一つのトランザクションとして送信され、全体が一度に成功または失敗します。
同様に、ウォレットが `EOAWallet` の場合、受け取る `TransactionReceipt[]` の長さは送信した `EthTransaction[]` と同じになります。一方、ウォレットが `SequenceWalletToEOAWalletAdapter` の場合、トランザクションレシートは1件のみ（`TransactionReceipt[]` の長さが1）受け取ります。

```csharp theme={null}
TransactionReceipt[] receipts = await wallet.SendTransactionAndWaitForReceipt(client, transactions);
```

### SignMessage

メッセージとオプションのチェーンIDを指定して、ウォレットでメッセージに署名します。チェーンIDが指定されていない場合は、署名からチェーンIDを省略します。

```csharp theme={null}
string signedMessage = await wallet.SignMessage(message, chainId)
```

注意: chainId は16進数形式で指定する必要があります。`Chain` オブジェクト（推奨）を使っている場合は、`AsString` メソッドでチェーンIDの16進数表記を取得できます。

```csharp theme={null}
string signedMessage = await wallet.SignMessage(message, Chain.Polygon.AsString());
```
