aelf系统交易机制

概述

不同于大多数其他公链,aelf提供(发明)了系统交易的机制,用于保证:

  1. 可以在代码中定制交易的生成的逻辑;

  2. 且这些交易必然能够被打包进区块中(阻断性的:如果这些交易没能打包,那就不要出块了)。

该机制为其他模块提供了很大的便利:

  • 共识模块:我们通过在每个区块中打包一个Consensus Transaction来推进AEDPoS共识。

  • 手续费模块:如果上一个区块有手续费产生,我们就会在下一个区块中产生一个Claim Fee Transaction来收取手续费。Donate Resource Transaction同理。

  • 跨链模块:当有新的待(同构)跨链的数据的时候,会在当前区块中添加ProposeCrossChainIndexing、ApproveMultiProposals、ReleaseCrossChainIndexingProposal等交易,这些交易体现了BP协商跨链数据的过程。

可以看到,上述模块都是保证aelf正常运行必须完成的机制。只不过与别的区块链不同,aelf选择把这些模块的逻辑放进智能合约里。为了保证这些关键的智能合约方法能够及时执行,aelf System Transaction机制成为必然。

实现

只要实现并注册了ISystemTransactionGenerator接口,就可以让BP在每一次试图产生区块的时候,按需生成一组系统交易。

public interface ISystemTransactionGenerator
{
    Task<List<Transaction>> GenerateTransactionsAsync(Address from, long preBlockHeight, Hash preBlockHash);
}

列一下当前aelf系统中的所有系统交易的信息:

实现
所属模块
生成的交易
作用
备注

ConsensusTransactionGenerator

共识模块

以下之一:UpdateValueTinyBlockNextRoundNextTerm

生成每个区块中的共识系统交易

ClaimFeeTransactionGenerator

经济模块

ClaimTransactionFees

收取上一个区块中通过ACS1收取的手续费

CrossChainTransactionGenerator

跨链模块

以下之一:ProposeCrossChainIndexingReleaseCrossChainIndexingProposal

DonateResourceTransactionGenerator

经济模块

DonateResourceToken

收取上一个区块中通过ACS8收取的资源币

ProposalApprovalTransactionGenerator

治理模块

ApproveMultiProposals

同意跨链索引的提案

aelf合约脚手架arrow-up-right中,也通过系统合约,在高度为2的区块中,部署用户自己写的DApp合约。

注意看上面代码的逻辑,前置区块高度为1的时候,会生成一个DeploySmartContract交易,取用户自己写的合约的代码作为参数(GetContractCodes方法中硬编码的合约名会随着代码生成器的参数调整)。

Last updated