> For the complete documentation index, see [llms.txt](https://tantalum666.gitbook.io/namada-docs-chinese/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tantalum666.gitbook.io/namada-docs-chinese/yong-hu-zhi-nan-user-guide/tou-ming-zhang-hu-transparent-accounts/duo-qian-ming-multisignature.md).

# 多签名 (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>
