EOS的RAM购买逻辑解析
【摘要】 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 (储备金)
公式:
根据公式知道:
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
公式:
根据公式知道:
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 (发行货币)
纵坐标 连接器代币 (储备金)
公式:
根据公式知道:
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
公式:
根据公式知道:
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)