EOS的RAM购买逻辑解析

举报
木子操 发表于 2019/01/03 10:43:36 2019/01/03
【摘要】 eos的ram购买代码流程解析。
整体流程

    1.需要买的内存数量B 转化为需要付的连接器代币数EOS A
    2.扣取手续费。手续费 m = (A+199)/200    .5%
    3.连接器代币(A-m)换取内存 B2(用户实际购买到内存)

说明:
    RAM与连接器代币通过 RAMCORE 进行互转    C: 已有储备金    R: 已有发行量    T: 需要兑换储备金    E: 需要兑换储备金兑换的发行量
    
详细解析
    
    定义:
        RA1 = RAM.balance.amount = 64*1024*1024*1024  //ram剩余量
        RC1= RC.supply.amount = 100000000000000.0000 //写死的 10的14次方
        T1= 1024 //需要购买的内存数
        cw = 0.05%  //参数
        EA = 10000000;   //全网中购买RAM的花掉的连接器代币 ,初始值为EOS发行量除以1000
        
    假设:需要购买 T1 数量 内存
    
RAM转成连接器代币 输出 A    
    1)RAM转成 RAMCORE 
        输入:T1,weight,RA1,RC1
            
        横坐标 RAMCORE (发行货币)
        纵坐标 RAM  (储备金)
        公式:

1_ram.jpg

根据公式知道:        
     R = RC1;        
     C = RA1 + T1;         
     T = T1;         
     F = weight/1000
         
    算出 E (需要发行的RAMCORE) 用 RC2(发行量) 表示 
    
    这时候把 RC3= RC1 + RC2  //这时候RAMCORE的发行量             RA1 = RA1 + T1 
    输出:
        RC3(当前总发行量) 与 RC2 (T1储备后得到的发行量)        
     2)RAMCORE转成连接器代币
        输入: 
            RC2,RC3,EA,weight
        公式:

2_ram.jpg

根据公式知道:
         R = RC3 - RC2 = RC1; //最大发行量
         C = EA;              //当前购买了 EOS总量
         F = 1000/weight
         E = RC2; //当前转换的发行量
         
    算出 T 所需的 连接器代币的数量 A
    
扣除手续费
    A1 = A- (A+199)/200;    剩余 连接器代币A1

剩余连接器代币转成RAM   
    3) 连接器代币转成RAMCORE
     
        输入:A1,EA,weight,RC1
            
        横坐标 RAMCORE (发行货币)
        纵坐标 连接器代币  (储备金)
        公式:

3_ram.jpg


根据公式知道:
         R = RC1;
         C = EA + A1;
         T = A1;  //剩余代币
         F = weight/1000
         
    算出 E (需要发行的RAMCORE) 用 RC4(发行量) 表示 
    
    这时候把 RC5= RC1 + RC4  //这时候RAMCORE的发行量
    
    输出:
        RC5(当前总发行量) 与 RC4 (A1储备后得到的发行量)
        
    4)RAMCORE转成RAM
     输入: 
            RA1,RC5,RC4,weight
        公式:

4_ram.jpg

根据公式知道:
         R = RC5 - RC4 = RC1; //最大发行量
         C = RA1;              //当前内存剩余量
         F = 1000/weight
         E = RC4; //当前转换的发行量
         
    算出 T 所能购买的内存量

综上: 3)为 2)逆向

4)为 1)逆向

但是 由于3)中c 比 4)c大, 所以4)无法算出正确的 RAMCORE的发行量。3)步中能够得到的RAMCORE发行量会变小,导致4)算出内存也会变小。

结论:    1. 不管有没有手续费 实际得到的内存量都小于输入购买的量

测试结论

1. 发现 weight 的修改并不影响 RAM的价格2. RAM单价 = 购买RAM量(初始数量+后期连接器代币兑换量)/ RAM余额  (验证是正确的)

其他

场景
连接器代币最大发行量: 100000000000   1000亿
当前发行量:10000000000  100亿
RAM最大容量: 64*1024*1024*1024   64g
RAM初始连接器被购买量: 当前发行量/1000   10000000  1千万

初始价格: 
    0.1490 FO/KB


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。