Solana 中的异步程序执行(APE)

时间:2024-09-22 编辑: 浏览:(644)

作者:toly,Solana Labs 联合创 来源:X,@aeyakovenko 翻译:善欧巴,

在Solana中,状态组织为平坦的键值存储,程序在此状态上执行以更新值,包括用于共识的关键投票程序。异步执行的主要目的是允许投票程序独立于其他所有程序运行。为了始终如一地实现这一目标,我们需要确保几个关键原则。

执行域

执行域是一组程序及其操作的键和值,这些程序在执行时彼此独立。执行域可以在不同的线程和核心上运行,并且在各种机器上以不同的时间完成。重要的是,一个执行域(例如,域A)不能读取或写入另一个域(例如,域B)中的任何值。然而,域可以共享在任何一个域执行期间保持一致的状态。需要一个协议来同步域之间的状态,并促进键和值的移动。

交易费用支付者决定交易执行的域。

关键域:VED和UED

在Solana中,我们主要关注两个域:投票执行域(VED)和用户执行域(UED)。目标是使验证者能够在所有用户程序执行完成之前进行投票。

VED的组成部分

系统程序:用于转账

投票程序系统变量:用于投票的投票程序系统变量

投票程序:核心投票程序。该程序是静态且一致的,必须在UED和VED中都有。

投票权限:有权投票的账户

投票费用支付者:支付与投票相关费用的账户

费用支付者基金:可用于将sol移动到VED的可更新账户

所有其他账户放在UED中

计算VED状态

在N-1和N的纪元边界,运行时计算N+1域的VED状态。此计算必须在纪元N结束前完成。UED计算必须在纪元N-1完成后才能开始。

VED状态的标准

投票账户:质押超过5000 sol且处于活跃状态的账户。

费用支付者和投票权限,费用支付者基金:与上述投票账户关联。

新创建的投票账户最初设置为不活跃。用户必须激活这些账户,一旦激活,它们将在下次VED状态计算中包含在内。用户可以停用账户,该账户将在N+1纪元中从VED状态中移除。

在VED中移动资金

投票账户中声明的费用支付者资金账户可用于在VED中移动资金。更新投票账户中的费用支付者资金账户后,当前的费用支付者基金将在下一个纪元结束前保持活跃。一旦重新计算的VED激活,新的费用支付者基金将进入VED状态,并可用于向费用支付者添加额外的sol。旧的费用支付者基金将进入UED状态,因此可以将资金转回UED中的账户。

虽然可以将其与费用支付者合并,但为了最小化每次投票使用的签名数量,费用支付者通常设置为与投票权限相同的值,因此需要一个单独的账户在VED和UED之间转移sol。

通用执行域

上述方法非常针对投票程序。更进一步可以将该方法推广到任意数量的执行域。账户跟踪它们被映射到的执行域,就像操作系统管理程序跟踪物理页面中的VMID一样。对于这个特定项目,有一小部分映射是有用的:

RX-UED:在UED中只读和可执行

RX-UED-VED:在UED和VED中只读和可执行

RW-VED:在VED中读写

RW-UED:在UED中读写

由于账户不能在多个域中同时读写,其他映射是无效的。

程序:只能映射为RX-UED或RX-UED-VED,即在用户或两个域中可读和可执行,但不可写。任何将程序包含为可写的交易必须失败。

账户:只能映射为RW-VED或RW-UED。

系统快照将投票程序和系统程序配置为RX-UED-VED。系统程序提供将系统账户和投票程序账户移动到VED和从VED移动的接口。实际更新仍需一个完整的纪元才能激活。

只有当所有者程序在目标域中时,账户才能在域之间重新映射。因此,只有投票程序和系统程序账户可以在VED和UED之间移动。

采用通用方法后,不再需要显式的费用支付者资金账户。开发人员可以在VED和UED之间重新映射任何系统账户,从而在域之间移动资金。

计算VED哈希

在接收到区块后,节点执行所有交易。过程如下:

执行仅涉及VED账户的交易。

含有VED费用支付者但混合账户的交易失败。

跳过所有其他交易。

生成的VED状态更新用于计算银行哈希,即VED哈希。验证者现在可以使用VED哈希进行投票,而不是旧的银行哈希。如果自上次对该分叉进行投票以来有UED哈希更新,则该哈希和插槽将包含在投票中。

计算UED哈希

在接收到区块后,节点处理所有交易:

不在VED中的账户被视为UED的一部分。

执行仅涉及UED账户的交易。

含有UED费用支付者但混合账户的交易失败。

跳过所有其他交易。

生成的UED状态更新用于计算银行哈希,即UED哈希。

最终性

最终性保持不变。

交易执行状态代码

异步执行的副作用是非确定性可能不会在投票分叉时同步立即检测到。如果1/3或更多验证者提交不同的UED哈希,则所有节点必须停止确认和投票,并警告操作员。

要获得状态代码,RPC API请求必须允许用户指定计算相同UED哈希的观察到的质押。执行状态可以表示为ExecutionStatus(签名,质押=X),其中X可以为0或某个默认值。在具有多个节点和客户端的设置中,X值为0是可以接受的,这给用户带来了非确定性极不可能的信心。

非确定性是唯一需要在向用户返回已确认交易的状态代码之前检测的故障,因此X的默认值通常可以低至乐观确认阈值或约5%。

领导者和区块生成

领导者必须能够在VED完成后立即开始创建区块。这意味着领导者将对任何UED费用支付者的状态有部分和不完整的信息。

领导者仅对其创建的区块执行VED域

UED重放必须跳过无效的费用支付者

投票程序的功能激活

投票程序必须在假设VED投票可能在功能激活时跨越纪元边界的情况下设计,以不同于UED中接触投票程序的其他交易的时间操作。

奖励

只有处于VED状态的投票账户才应获得奖励。

惩罚

所有投票账户无论处于活跃状态还是VED状态,都有被惩罚的风险。

全局时钟更新

时钟系统变量由投票更新。应该使用替代方法。相反,每个区块领导者可以将时钟最多向前移动1秒。至少40%的网络需要恶意,时钟才能比实际时间更快地增长。时钟也可以默认向前移动400毫秒。假设50毫秒的漂移,只有12.5%的领导者需要调整时钟时间以保持同步。

最新 更多 >
  • 1 dot币发行

    dot币是基于波卡区块链的数字货币,旨在提供更高效、更安全的区块链网络。作为波卡生态系统的通用代币,dot币可以用于支付网络费用、投票治理和参与共识机制等活动。dot币的发行是通过经过验证的网络节点进行挖矿和验证新区块来实现的。通过dot币的发行,可以促进波卡生态系统的发展和增加网络安全性。

  • 2 dexe币发行价

    Dexe币发行价是指该数字货币在最初发行时的价格。Dexe币的发行价取决于多种因素,包括市场需求、供应量、发行策略等。通常,数字货币在发行初期会定价较低,随着市场的接受度和投资者信心的提升,价格也会相应上涨。因此,Dexe币的发行价是一个关键指标,可以反映出该数字货币的初始价值和潜在增值空间。

  • 3 kan币发行价多少钱

    kan币的发行价是由市场供求关系决定的,一般来说,发行价会根据项目背景,团队实力,市场需求以及竞争对手等因素进行评估。在确定发行价时,会考虑到短期和长期的价值潜力,以确保投资者的利益和项目的可持续发展。因此,具体的发行价会根据不同的情况而有所不同,需要通过市场分析和专业评估来确定。

  • 4 knc币发行价多少

    KNC币的发行价取决于市场供求以及发行时间点的具体情况。通常而言,发行价会由项目方根据市场行情和筹款需求等因素来确定,同时也受到投资者的关注和接受程度影响。在确定发行价时,项目方会进行市场调研和评估,最终确定一个合理的价格来发行KNC币。因此,KNC币的发行价可能随着时间和市场情况的变化而有所不同。

  • 5 hare币发行量

    Hare币的发行量是指该数字货币在市场上流通的数量。发行量的大小直接影响着Hare币的市场价值和稳定性。通常情况下,发行量越大,市场流通的Hare币数量就越多,价格相对稳定。然而,如果发行量过大,可能会导致通货膨胀和价值贬值,影响Hare币的购买力和使用价值。因此,控制好Hare币的发行量是保持其价值和稳定性的关键之一。

  • 6 lat币发行价

    Lat币的发行价是指Lat币首次发行时的价格。该价格取决于市场需求和供应情况,以及发行机构设定的定价策略。Lat币的发行价通常会受到投资者关注,因为它直接影响着投资者的成本和回报率。一般来说,如果Lat币的发行价低于市场价值,那么会吸引更多的投资者买入;相反,如果发行价高于市场价值,可能会导致投资者不感兴趣或者抛售Lat币。因此,发行价的确定对于Lat币的市场表现具有较大影响。

  • 7 inj币发行价格

    inj币是Injective Protocol网络的原生代币,它的发行价格是根据市场需求和供应来决定的。该价格会在不同交易所进行买卖,随着市场交易活动的波动而波动。作为一种数字资产,inj币的价格受到市场因素和投资者情绪的影响,投资者可以根据自己的风险偏好和市场走势来决定是否购买或持有inj币。

  • 8 dnr币

    DNAR币是一个基于区块链技术的数字货币,旨在提供匿名、快速和安全的交易方式。该货币采用去中心化的设计,不受任何中央机构控制,使得交易过程更加透明和公正。DNAR币拥有隐私保护特性,用户可以选择匿名交易,保护个人信息安全。同时,DNAR币还支持快速的交易确认时间,使交易更加高效和便捷。总的来说,DNAR币是一个全新的数字货币,旨在为用户提供安全、隐私和高效的交易体验。

  • 9 elec什么币

    Elec是一个以太坊区块链上的加密数字货币,它旨在为能源和电力市场提供区块链解决方案。作为一个去中心化的平台,Elec希望通过智能合约和区块链技术来改变能源市场的运作方式,实现能源交易的透明和高效。Elec代币的发行和转移都依赖于区块链技术,使得能源市场的交易更加便捷和安全。通过Elec币,用户可以直接与能源供应商进行跨境交易,降低交易成本,提高效率。总的来说,Elec是一个致力于推动能源市场变革

  • 10 hrc代币发行

    HRC代币的发行是指通过区块链技术发行的一种加密数字货币。该代币的发行旨在为用户提供一种可用于进行支付、投资和交易的数字资产。HRC代币的发行过程通常包括代币的创建、分发和管理等环节,以确保其在市场上的流通和使用。通过HRC代币的发行,用户可以在数字化经济中更方便地进行资金流通和交易,为区块链生态系统的发展提供一定的支持和帮助。