# Namada 上的费用 (Fees on Namada)

为了解决Namada区块空间需求的市场，费用与交易相结合。为了使任何Namada交易被视为有效，必须支付正确的相应费用。确切的费用由用户设置，并且必须大于或等于由治理设置的最低 `gas-price` ，该价格包含在创世纪文件的`gas_cost`下。<br>

***

## 如何支付费用(How fees are paid)&#x20;

当明确声明时，通过`--gas-payer`标志支付燃气费。如果没有指定`--gas-payer`标志，则通过`--signing-keys`标志中的第一个键支付燃气费。

这意味着在交易中

```
namada client transfer \
  --source my-new-acc \
  --target validator-1 \
  --token NAM \
  --amount 10 \
  --signing-keys keysha
```

与`key keysha`关联的账户将被要求支付费用。这意味着尽管账户`accountant`可能有正的NAM余额，但`keysha`需要有关联的NAM以支付交易费用。

用户还可以指定一个`--gas-payer`标志以指定不同的账户来支付费用。这在签署交易的账户没有足够的NAM支付费用的情况下很有用。例如，如果`keysha`的余额为5 NAM，但`accountant`的余额为100 NAM，则以下交易将是有效的：

```
namada client transfer \
  --source my-new-acc \
  --target validator-1 \
  --token NAM \
  --amount 10 \
  --signing-keys keysha \
  --gas-payer keysha2
```

（假设keysha2存在并且在用户的钱包中）

为了测试网目的，我们建议使用[水龙头](https://tantalum666.gitbook.io/namada-docs-chinese/ji-cheng-zhi-nan-integration-guide/wang-luo-networks/ce-shi-wang-testnets/shi-yong-ce-shi-wang-shui-long-tou-using-the-testnet-faucet)来为交易费用提供NAM。

***

## 如何计算费用(How fees are calculated)&#x20;

交易的费用是通过将`gas-limit`乘以gas price来计算的。用户可以指定`--gas-limit`和`--gas-price`。如果两者都没有指定，将使用默认的gas limit和最低gas price。任何交易的默认gas limit当前设置为`20,000`。

最低气体价格设置在创世纪文件的`gas_cost`下。

***

## 如何设置燃气价格和燃气限制 (How to set the gas price and gas limit)

建议根据正在进行的交易来设置`gas-limit`。为了估算特定交易的`gas-limit`，应提供`--dry-run-wrapper`参数。这意味着该交易已经被模拟，但尚未发送到分类账。

例如，以下命令将模拟转账交易，并返回所用的燃气：

```
namadac transfer \
  --source my-new-acc \
  --target validator-1 \
  --token NAM \
  --amount 10 \
  --signing-keys keysha \
  --gas-payer keysha2 \
  --dry-run-wrapper
```

将输出类似于以下内容的结果：

```
Dry-run result: Transaction is valid. Gas used: 1785;
```

这意味着我们可以合理地用2000的`gas-limit`进行此转账交易。

因此，在进行转账时，我们可以如下所示指定`gas-limit`：

```
namadac transfer \
  --source my-new-acc \
  --target validator-1 \
  --token NAM \
  --amount 10 \
  --signing-keys keysha \
  --gas-payer keysha2 \
  --gas-limit 2000
```

如果由于某种原因，我们想支付更高的燃气费，我们也可以如下所示指定：

```
namadac transfer \
  --source my-new-acc \
  --target validator-1 \
  --token NAM \
  --amount 10 \
  --signing-keys keysha \
  --gas-payer keysha2 \
  --gas-limit 2000 \
  --gas-price 0.01
```

这将激励验证者优先考虑那些具有较低燃气价格的交易。

***

## 使用MASP中的令牌支付费用 (Paying fees with tokens in the MASP)

还可以使用MASP支付费用。这样做的目的是确保即使用户在其透明余额中没有NAM，他们仍然可以在链上进行透明交易。这对于用户来说是将资产最大化保留在MASP中的另一个激励。<br>

为了使用MASP支付费用，用户必须指定`--gas-spending-key`标志，并将其设置为钱包中的spending key的别名。这意味着费用将从spending key的隐蔽余额中扣除，并在通过`--gas-payer`支付之前解除到`--gas-payer`（或`--signing-keys`中的第一个key对应的地址）的透明余额。

例如，如果用户在他们的钱包中有一个spending key名为`spending-key-1`，并且他们想使用MASP支付交易费用，他们会运行以下命令：

```
namadac transfer \
  --source keysha \
  --target address-b \
  --token OSMO \
  --amount 10 \
  --gas-payer keysha \
  --gas-spending-key spending-key-1
```

在此示例中，keysha可能只在他们的透明余额中有OSMO余额，但spending-key-1可能在他们的隐蔽余额中有正的NAM余额。在这种情况下，NAM将被解除到keysha的透明余额中，然后用于支付交易费用。<br>

***

## 使用一次性燃气付款人 (Using a disposable gas payer)

还可以使用一次性燃气付款人支付交易费用。这在用户不想透露`--gas-payer`身份的情况下很有用。为了使用一次性燃气付款人，用户必须包括`--disposable-gas-payer`标志，并且还必须指定一个`--gas-spending-key`。这意味着费用将从`--gas-spending-key`的隐蔽余额中扣除，并在由临时地址支付之前解除到临时透明地址的透明余额。

例如，如果用户在他们的钱包中有一个spending key名为`spending-key-1`，并且他们想使用一次性地址支付交易费用，他们会运行以下命令：

```
namadac transfer \
  --source keysha \
  --target address-b \
  --token OSMO \
  --amount 10 \
  --gas-spending-key spending-key-1 \
  --disposable-gas-payer
```
