Files
solana/docs/i18n/zh/docusaurus-plugin-content-docs/current/implemented-proposals/transaction-fees.md
Justin Starry a1df57a4ea Add chinese translations to docs (#17125)
* import zh translations

* Fix broken links

* fix whitespace
2021-05-09 00:46:24 +08:00

33 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 确定性交易费用
---
目前,交易包括一个费用字段,表示插槽领导者处理交易时允许收取的最大费用字段。 而集群则商定一个最低费用。 如果网络拥挤,插槽领导者可能会优先处理提供较高费用的交易。 这意味着在交易被集群确认并检查剩余余额之前,客户端不会知道获得了多少费用。 这闻起来正是我们不喜欢的以太坊"Gas",非确定性的味道。
## 拥堵引起的费用
验证节点使用_signatures per slot_\(SPS\) 来估计网络拥堵然后通过_SPS target_来估计集群的期望处理能力。 验证节点从genesis config中获得SPS target信息而它从最近处理的事务中计算SPS。 Genesis config还定义了一个目标`lamports_per_signature`这是集群在_SPS target_运行时对每个签名收取的费用。
## 费用计算
客户端使用 JSON RPC API 来查询集群的当前收费参数。 这些参数被标记了一个区块哈希,并保持有效,直到该区块哈希足够老,被插槽领导者拒绝。
在向集群发送交易之前客户端可以将交易和收费账户数据提交给一个名为_收费计算器_的SDK模块。 只要客户端的SDK版本与插槽领导者的版本相匹配客户端就可以保证其账户被更改的lamports数量与费用计算器返回的数量完全相同。
## 费用参数
在该设计的第一个实现中,唯一的收费参数是`lamports_per_signature`。 集群需要验证的签名越多,费用越高。 具体的lamports数量由SPS与SPS目标的比例决定。 在每个时段结束时当SPS低于目标值时集群会降低`lamports_per_signature`,当高于目标值时,集群则会相应提高它的值。 `lamports_per_signature`的最小值是目标`lamports_per_signature`的50%最大值是目标lamports_per_signature的10倍。
未来的参数可能包括:
- `lamports_per_pubkey` - 加载一个账户的费用
- `lamports_per_slot_dimit` - 加载非常老的账户费用较高
- `lamports_per_byte` - 按账户大小加载的费用
- `lamports_per_bpf_instruction` - 运行一个程序的成本
## 攻击
### 劫持SPS目标
一群验证节点如果能说服群组将SPS目标提高到其他验证者能跟上的程度就可以将群组集中起来。 提高目标会导致费用下降大概创造更多的需求从而提高TPS。 如果验证者没有硬件可以那么快地处理那么多交易,它的确认票最终会变得很长,以至于集群将被迫启动它。