# 多签名 (Multisignature)

多签名账户（多签）是Namada上允许多个签名者的账户。拥有多签账户有许多好处，包括但不限于：

* 增加安全性
* 共享钱包的能力
* 更好的恢复选项

因此，默认情况下，Namada上的所有账户都是多签名账户。

***

## 初始化多签名账户（Initialising a multisignature account）

在创建账户之前，用户必须生成至少一个将用于签署交易的加密`key`。<br>

以下方法将生成此类密钥：

```
namadaw key gen \
--alias my-key1
```

也可以生成第二个密钥（对于多签名很有用）：

```
namadaw key gen \
--alias my-key2
```

还可以生成一个隐式地址：

```
namadaw address gen \
--alias my-address
```

通过以下方法在Namada上初始化账户：

单签名账户（单个签名者）

```
namadac init-account \
--alias my-multisig-alias \
--public-keys my-key1 \
--signing-keys my-key1
```

多签名账户（至少2个签名者)

```
namadac init-account \
--alias my-multisig-alias \
--public-keys my-key1,my-key2 \
--signing-keys my-key1,my-key2 \
--threshold 2
```

***

## 提交多签名交易（Submitting a multisignature transaction）

要提交多签名交易，首先必须构建离线交易。<br>

## 构建离线交易

{% hint style="warning" %}
对于v0.23.0，离线交易构建存在某些限制。请注意可能出现的任何错误。

\--dump-tx参数允许用户执行此操作。需要指定一个文件夹，以便在其中转储交易。
{% endhint %}

\
`--dump-tx` 参数允许用户执行此操作。需要指定转储交易的文件夹。

```
mkdir tx_dumps
```

可以通过以下方法完成此操作：

```
namadac transfer \
--source my-multisig-alias \
--target some-established-account-alias \
--token NAM \
--amount 100 \
--signing-keys my-key1 \
--dump-tx \
--output-folder-path tx_dumps
```

这意味着交易已被构建，并准备好进行签名。

在指定的文件夹内，将创建一个`.tx`文件。此文件包含交易字节的十六进制表示。可以使用此文件对交易进行签名。

## 签署交易

下一步是签署交易。可以通过以下方法使用`my-key1`签署交易：

```
namadac sign-tx \
--tx-path "<path-to-file>" \
--signing-keys my-key1 \
--owner my-multisig-alias
```

{% hint style="info" %}
请注意，在此阶段可以有任意数量的`--signing-keys`签署交易。这将产生多个签名，可用于提交交易。
{% endhint %}

这意味着签名已保存到此文件中（位于当前目录中）。

让我们将其保存为别名：

```
export SIGNATURE_ONE="offline_signature_FB7246E3FC43F59D8AEEC234EBFDB9DF1AC9BB7B14E536D05A7E2617CA41D4CD_0.tx"
```

确保使用至少k-of-n个密钥签署交易，其中k是提交交易所需的最少签名数量，n是密钥的总数。在此示例中，k=2且n=2。<br>

然后假设这个签名产生了另一个签名，我们将其保存到别名`SIGNATURE_TWO`。<br>

## 提交交易

最后一步是提交交易。可以通过以下方法完成此操作：

```
namadac tx \
--tx-path "tx_dumps/a45ef98a817290d6fc0efbd480bf66647ea8061aee1628ce09b4af4f4eeed1c2.tx" \
--signatures $SIGNATURE_ONE \
--signatures $SIGNATURE_TWO \
--owner my-multisig-alias \
--gas-payer my-key1
```

{% hint style="info" %}
请注意，`--signatures`参数中没有使用逗号。这是因为该参数是一个文件列表，而不是一个签名列表。还请注意`tx_dumps`文件夹。这是在前一步中通过`--output-folder-path`指定的，交易被转储到该文件夹。
{% endhint %}

***

## 更改多签名阈值（Changing the multisig threshold）

可以更改账户的多签名阈值。可以通过以下方法完成此操作：

```
namadac update-account \
--address my-multisig-address \
--threshold 1 \
--signing-keys my-key1,my-key2
```

可以通过运行以下命令来检查阈值是否已正确更新：

```
namadac query-account \
--owner my-multisig-address
```

这将产生阈值1，连同两个公钥。

***

## 更改多签名账户的公钥（Changing the public keys of a multisig account）

可以更改多签名账户的公钥。通过以下方法完成此操作：

```
namadac update-account \
--address my-multisig-address \
--public-keys my-key3,my-key4,my-key5 \
--signing-keys my-key1,my-key2
```

这将把多签名账户的公钥从`my-key1`和`my-key2`更改为`my-key3`、`my-key4`和`my-key5`（假设它们存在于钱包中）。

提供给`--public-keys`参数的公钥将成为多签名的新签名者。列表必须是由逗号分隔的公钥列表，没有空格。列表中必须至少有1个公钥，列表的长度必须至少为多签名账户的阈值。<br>

***

## 视频教程（A video tutorial）

跳过所有无聊的阅读并观看视频教程：

<https://vimeo.com/873749851>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tantalum666.gitbook.io/namada-docs-chinese/yong-hu-zhi-nan-user-guide/tou-ming-zhang-hu-transparent-accounts/duo-qian-ming-multisignature.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
