Economic合约

circle-info

Economic合约一共只有两个方法,且这两个方法都会在Genesis Block中完成调用,以后这个合约就再无存在感了。

可以认为Economic合约就是aelf主网的经济系统初始化配置中心。这篇文当简述一下配置过程。

这两个方法调用的初始化逻辑位于AElf.EconomicSystem工程下的EconomicContractInitializationProvider.cs,GetInitializeMethodList方法。

初始化aelf经济系统 - InitialEconomicSystem

参数全部来自appsettings.MainChain.MainNet.json中的Economic区域中,主网的相关配置为:

"Economic": {
  "Symbol": "ELF",
  "TokenName": "elf token",
  "TotalSupply": 100000000000000000,
  "Decimals": 8,
  "IsBurnable": true,
  "DividendPoolRatio": 0.12,
  "MinimumLockTime": 7776000,
  "MaximumLockTime": 93312000,
  "SymbolListToPayTxFee": "WRITE,READ,STORAGE,TRAFFIC",
  "SymbolListToPayRental": "CPU,RAM,DISK,NET"
}

InitialEconomicSystem的步骤可以简述为:

  1. 初始化MultiToken合约的Reference Stub(就可以对MultiToken合约进行inline交易方式的跨合约调用了);

  2. CreateNativeToken - 跨合约调用MultiToken合约,创建本地代币(Native Token)ELF;

    1. ELF代币的锁仓白名单列表就是在这里设置的(就是Lock White List,详见MultiToken合约文档的名词表);

    2. 创建完成后会通过MultiToken合约的SetPrimaryTokenSymbol方法把ELF设置为aelf主链的基础代币(侧链可以是其他代币)。

  3. CreateResourceTokens - 跨合约调用MultiToken合约,创建资源币:WRITE、READ、STORAGE、TRAFFIC、CPU、RAM、DISK、NET(一共八种,前四种收acs8交易费,后四种收侧链租金,详见aelf经济与治理白皮书);

  4. CreateElectionTokens - 跨合约调用MultiToken合约,创建选举代币VOTE和侧链分红代币SHARE(这两种代币会通过用户参加节点选举,锁仓ELF的时候一比一兑换出来);

  5. InitialMiningReward - 把1.2亿个ELF打给AEDPoS合约,作为未来Treasury分红方案的资金来源;

  6. RegisterElectionVotingEvent - 跨链调用Vote合约,创建选举的投票项目(详见aelf系统概述arrow-up-right 的选举模块);

  7. SetTreasurySchemeIdsToElectionContract - 把Treasury和其子分红方案的Id写进Election合约;

  8. InitializeTokenConverterContract - 初始化TokenConverter合约;

  9. 初始化ACS1和ACS8手续费计算公式的参数;

  10. 初始化MultiToken合约的管理员。

ELF初始化分发 - IssueNativeToken

在InitialEconomicSystem完成调用以后,ELF的Issuer会是Economic合约。

IssueNativeToken方法是Genesis合约在Genesis区块中,间接调用Economic合约,让Economic合约以ELF的Issuer的身份,完成对ELF代币的初始化分发。方法内只完成了对MultiToken合约的跨合约调用,调用逻辑写在EconomicContractInitializationProvider。

当前主网的逻辑是,在主链启动以后,把8.8亿个ELF都打进InitialMinerList里配置的第一个节点。

Last updated