EOS新闻动态

EOS新闻动态

EOS简介,新闻动态更新
EOS技术讨论

EOS技术讨论

EOS, Bitshares, steem, Graphene技术分析
EOS众筹价格

EOS众筹价格

EOS众筹模式,价格讨论
EOS其他相关

EOS其他相关

其他的关于EOS的问题和话题都在这

新手教程:一张图搞清楚 nodeos,keosd,cleos,eosiocpp 之间的关系

回复

EOS代码分析jimi2018 发起了问题 • 2 人关注 • 0 个回复 • 200 次浏览 • 2018-08-25 10:29 • 来自相关话题

EOS智能合约与DApp开发入门教程

回复

EOS其他相关jimi2018 发起了问题 • 1 人关注 • 0 个回复 • 257 次浏览 • 2018-07-21 23:14 • 来自相关话题

【捭阖命物eos】急文。eos熊市如何利用ram自救,逆风翻盘。

EOS其他相关郑浩 发表了文章 • 0 个评论 • 310 次浏览 • 2018-06-28 17:10 • 来自相关话题

作者:animaeos这篇文章写的很赶。可能有很多错别字。但是干货是满满的

简单的来说,就是经过了六天的研究,基本破解了ram的机制。其实这篇研究其实不公开出来,也是可以的。

利用ram机制,在我星球一直参与技术讨论,并且近期参与ram机制讨论的人中很多人在熊市都获得了不输牛市的收益。

但是第一这是一个合作博弈的问题,信的人越多,收益越高。第二我是真心希望,信过我的人能在熊市活下去。

目录:

1.韭菜自救你需要哪些工具和知识

2.技术控需要了解的bancor算法

3.ram的定价公式被我逆推出来了。

 

1. 自救你需要哪些工具和知识 :

首先对ram一窍不通的人,你需要的是阅读我前两篇新手入门攻略。简单来说ram是三种eos资源中最值钱的一种,买ram相当于买地,但是由于手续费极高,除了在大趋势熊市的情况之外,没有炒作价值,高频交易会非常伤。
 
来我的星球领取查看ram走势的网址,我多次推荐的tokenpocket钱包,几天前在我的建议下也开始做这个功能(多跟核心用户沟通交心,合作博弈才是正途。不要老想着给评测者塞红包和威胁这些手段,成熟一点吧。兄弟),马上就可以查看了(我靠,你们程序员效率这么高的吗,我这篇文章写完的时候这个功能已经上线了!)

从时间序列上看,ram的走势十分变态。从最初的0.0170到现在的0.0379只用了四天多(文章写完又涨了百分之十几.。。我怕啊,你们轻点买!)。简单通过eosflare检索,可以找到不少暴赚几十万柚子的账户。

 

ram的熊市对冲逻辑十分简单。币价下跌,开发成本下降,大量合约开始增速部署。首批部署的合约主要是ico和发币合约。eos的用户端没有手续费,但是开发端的成本不低。这些合约部署者都会大量购买ram。币价越是下跌购买ram的量越大。而根据bm的访谈,五月份最终版本的eos定价方法被换成了bencor算法。经过我的公式分析和bm的访谈验证。这个算法的特别之一就是买的人越多,价格越高,并且增速会越来越大。因此ram的价格大幅度跑赢了eos的跌幅,ram在熊市中的作用是十分明显的。当然这是初次博弈!我希望大家都来买ram,我几天前就满仓了,现在也翻了倍。很直白的说,我希望刚从交易所放出来的大家帮我抬轿子,但是我不想坑大家。熊市自救攻略之前,我要提示一下重复博弈后的风险和对策。

风险大家记住两条就好了。

第一:一旦bp投票宣布扩容一倍,ram的价格不出意外会被腰斩一半!理论扩容上限是12T,当前的ram总投放量是64GB.虽然扩容会提前公示,但是不排除大户会提前抛盘再宣布扩容计划

第二:你们买入ram以后第一件事要做的就是登陆eosflare搜索eosio.ram这个用户名,一起监控所有大户在对ram的所有交易。记录大户的买入时间和抛盘时间!只要监督到位ram很难割韭菜。因为所有交易都是透明的。

第三:登陆https://www.eosrp.io/这个网站监控全网ram的占用量。全网ram占用率越高BP扩容的动机越大。你们的成本再低是低不过程序员的,第一批买入ram的开发人员普遍成本都是0.17以下。试想一下如果你是程序员看到手里的ram翻了几倍,还会安心燃烧ram来进行开发工作吗。养着程序员的bp会不割一波韭菜就扩容吗。所以我也提醒大家等熊市过了,雷锋一把,把ram释放回去。给程序员一个低廉的开发环境也防止自己被割。

 

好吧,那让我们来看看韭菜该如何操作自救。(动手能力强的自己去命令行操作。或者用我推荐过很多次的scatter+eostoolkit这对儿绝对安全的黄金搭档)

0.在Tokenpocket开户(部分其他钱包貌似也可以,但是Tp跟我交流多,有我需要的全部功能细节,也在搞贴钱开户的活动,可以帮你省几十元也省不少事儿。tp不是完美的,我催了他们很多次,为了程序正义赶紧上ios商店)

1.在otcbtc开户。

2.把你在黑心交易所买的币卖了。

3.去otcbtc买一样多的币。

4.在otcbtc提币到你的eos钱包。

5.tp钱包的发现功能里面查看ram走势,在资源管理界面购买内存。然后重复上文风险提示里的那些工作,防止自己被割韭菜。度过熊市。

 

二. bancor算法

bm在多个地方提到了他对bancor算法的褒奖。(尽管bancor本身成为了一个比较失败的项目)。貌似现在做翻译的都因为没搞懂这个公式,在翻译ram机制的时候跳过这一部分。他其实是一种侧链发币的算法。通过牟定一定量的主链货币,来发行价格稳定的侧链货币。你以后要是想接活发币,这个公式肯定要懂的

没听错,ram本质其实是eos的一个侧链币。eos抵押了一部分eos来发行ram币。然后ram币和主网内存有一个一对一的对应关系。具有非常强的鲁棒性

目前没有对这个算法太好的中文表述,

直接丢结论:

第一个公式:

 

P是当前ram的单价。S是当前ram的总发行量(既ram的认购量)。S0 是ram的初始发行量。既送给创世用的ram总量。a是一个常数:a=1/F-1,其中F为牟定的eos总量除以ram的总市值

具体参数的推导,今天可能来不及了。可以来我星球等。争取明天发。当前ram总市值可以用eosflare查看eosio.ram账户,该账户的余额就是ram的总市值。

 

另一篇论文里面还提到了计算市值的另一个公式,翻译成我前面的注释就是

P=R/(SF)...自己推导一下这个公式不难理解

R是牟定的eos总量(是总量不是总价)

第二个公式:

 

R0是牟定的eos总量(是总量不是总价)。F和S0的解释见上文。其中E是大家历史数据里面买ram所用的总eos.这个值未必就是ram当前的总市值PS.需要具体计算验证。

这个公式也可以反过来写:

 

用当前的总ram发行量(既大家的总认购量),来推导历史数据里面买ram花费的总eos。

 

第三个公式:多重bancor

 

这个是联盟链用的,和eos没关系我们这里先不谈,只能说也是可以用的。

第四个重要图表:

下表里的CW就是上文提到的F。Eos的F值需要慢慢推算。我的观察来看,目测EOS和RAM用的F小于0.5,所以供给和价格的关系大概会是右下角这个图


 

这意味着什么呢。这意味着全网RAM的总占有量如果从30%涨到40%,ram单价会翻一倍(只是例子,不是真实数据)。那么40%到50%的涨幅对应ram单价涨幅将不止一倍,ram后期的涨幅会越来越大。这样保证了eos主网不会因为内存耗尽而卡死,因为当全网内存占有量到达百分之90以后ram单价会变成谁也买不起的天价。当然这是F<0.5的假设基础之上。

三. ram的定价公式被我逆推出来了

不善于写作,这文章写的我太累了。这一段只能先标题党了。第三部分比较学术。明后两天,来我的星球看更新吧。

我也不是看论文和写论文的机器,做这个也没有经济利益驱动

这篇文章的紧急性,在于给韭菜提供一个熊市存活下来的攻略,以及如何防止自己再次被割。

请活下去吧!

 

这篇文章要感谢一直在关注ram价格的星球兄弟老huang,公司新来的同事,在参与大学里面区块链项目的新同事soc提供了部分论文出处,还有我们少数派报告群里面参与讨论的各位“少数派”,以及开源研发群里的程序员们。
文章来源:币乎
 
  查看全部
作者:animaeos这篇文章写的很赶。可能有很多错别字。但是干货是满满的

简单的来说,就是经过了六天的研究,基本破解了ram的机制。其实这篇研究其实不公开出来,也是可以的。

利用ram机制,在我星球一直参与技术讨论,并且近期参与ram机制讨论的人中很多人在熊市都获得了不输牛市的收益。

但是第一这是一个合作博弈的问题,信的人越多,收益越高。第二我是真心希望,信过我的人能在熊市活下去。

目录:

1.韭菜自救你需要哪些工具和知识

2.技术控需要了解的bancor算法

3.ram的定价公式被我逆推出来了。

 

1. 自救你需要哪些工具和知识 :

首先对ram一窍不通的人,你需要的是阅读我前两篇新手入门攻略。简单来说ram是三种eos资源中最值钱的一种,买ram相当于买地,但是由于手续费极高,除了在大趋势熊市的情况之外,没有炒作价值,高频交易会非常伤。
 
来我的星球领取查看ram走势的网址,我多次推荐的tokenpocket钱包,几天前在我的建议下也开始做这个功能(多跟核心用户沟通交心,合作博弈才是正途。不要老想着给评测者塞红包和威胁这些手段,成熟一点吧。兄弟),马上就可以查看了(我靠,你们程序员效率这么高的吗,我这篇文章写完的时候这个功能已经上线了!)

从时间序列上看,ram的走势十分变态。从最初的0.0170到现在的0.0379只用了四天多(文章写完又涨了百分之十几.。。我怕啊,你们轻点买!)。简单通过eosflare检索,可以找到不少暴赚几十万柚子的账户。

 

ram的熊市对冲逻辑十分简单。币价下跌,开发成本下降,大量合约开始增速部署。首批部署的合约主要是ico和发币合约。eos的用户端没有手续费,但是开发端的成本不低。这些合约部署者都会大量购买ram。币价越是下跌购买ram的量越大。而根据bm的访谈,五月份最终版本的eos定价方法被换成了bencor算法。经过我的公式分析和bm的访谈验证。这个算法的特别之一就是买的人越多,价格越高,并且增速会越来越大。因此ram的价格大幅度跑赢了eos的跌幅,ram在熊市中的作用是十分明显的。当然这是初次博弈!我希望大家都来买ram,我几天前就满仓了,现在也翻了倍。很直白的说,我希望刚从交易所放出来的大家帮我抬轿子,但是我不想坑大家。熊市自救攻略之前,我要提示一下重复博弈后的风险和对策。

风险大家记住两条就好了。

第一:一旦bp投票宣布扩容一倍,ram的价格不出意外会被腰斩一半!理论扩容上限是12T,当前的ram总投放量是64GB.虽然扩容会提前公示,但是不排除大户会提前抛盘再宣布扩容计划

第二:你们买入ram以后第一件事要做的就是登陆eosflare搜索eosio.ram这个用户名,一起监控所有大户在对ram的所有交易。记录大户的买入时间和抛盘时间!只要监督到位ram很难割韭菜。因为所有交易都是透明的。

第三:登陆https://www.eosrp.io/这个网站监控全网ram的占用量。全网ram占用率越高BP扩容的动机越大。你们的成本再低是低不过程序员的,第一批买入ram的开发人员普遍成本都是0.17以下。试想一下如果你是程序员看到手里的ram翻了几倍,还会安心燃烧ram来进行开发工作吗。养着程序员的bp会不割一波韭菜就扩容吗。所以我也提醒大家等熊市过了,雷锋一把,把ram释放回去。给程序员一个低廉的开发环境也防止自己被割。

 

好吧,那让我们来看看韭菜该如何操作自救。(动手能力强的自己去命令行操作。或者用我推荐过很多次的scatter+eostoolkit这对儿绝对安全的黄金搭档)

0.在Tokenpocket开户(部分其他钱包貌似也可以,但是Tp跟我交流多,有我需要的全部功能细节,也在搞贴钱开户的活动,可以帮你省几十元也省不少事儿。tp不是完美的,我催了他们很多次,为了程序正义赶紧上ios商店)

1.在otcbtc开户。

2.把你在黑心交易所买的币卖了。

3.去otcbtc买一样多的币。

4.在otcbtc提币到你的eos钱包。

5.tp钱包的发现功能里面查看ram走势,在资源管理界面购买内存。然后重复上文风险提示里的那些工作,防止自己被割韭菜。度过熊市。

 

二. bancor算法

bm在多个地方提到了他对bancor算法的褒奖。(尽管bancor本身成为了一个比较失败的项目)。貌似现在做翻译的都因为没搞懂这个公式,在翻译ram机制的时候跳过这一部分。他其实是一种侧链发币的算法。通过牟定一定量的主链货币,来发行价格稳定的侧链货币。你以后要是想接活发币,这个公式肯定要懂的

没听错,ram本质其实是eos的一个侧链币。eos抵押了一部分eos来发行ram币。然后ram币和主网内存有一个一对一的对应关系。具有非常强的鲁棒性

目前没有对这个算法太好的中文表述,

直接丢结论:

第一个公式:

 

P是当前ram的单价。S是当前ram的总发行量(既ram的认购量)。S0 是ram的初始发行量。既送给创世用的ram总量。a是一个常数:a=1/F-1,其中F为牟定的eos总量除以ram的总市值

具体参数的推导,今天可能来不及了。可以来我星球等。争取明天发。当前ram总市值可以用eosflare查看eosio.ram账户,该账户的余额就是ram的总市值。

 

另一篇论文里面还提到了计算市值的另一个公式,翻译成我前面的注释就是

P=R/(SF)...自己推导一下这个公式不难理解

R是牟定的eos总量(是总量不是总价)

第二个公式:

 

R0是牟定的eos总量(是总量不是总价)。F和S0的解释见上文。其中E是大家历史数据里面买ram所用的总eos.这个值未必就是ram当前的总市值PS.需要具体计算验证。

这个公式也可以反过来写:

 

用当前的总ram发行量(既大家的总认购量),来推导历史数据里面买ram花费的总eos。

 

第三个公式:多重bancor

 

这个是联盟链用的,和eos没关系我们这里先不谈,只能说也是可以用的。

第四个重要图表:

下表里的CW就是上文提到的F。Eos的F值需要慢慢推算。我的观察来看,目测EOS和RAM用的F小于0.5,所以供给和价格的关系大概会是右下角这个图


 

这意味着什么呢。这意味着全网RAM的总占有量如果从30%涨到40%,ram单价会翻一倍(只是例子,不是真实数据)。那么40%到50%的涨幅对应ram单价涨幅将不止一倍,ram后期的涨幅会越来越大。这样保证了eos主网不会因为内存耗尽而卡死,因为当全网内存占有量到达百分之90以后ram单价会变成谁也买不起的天价。当然这是F<0.5的假设基础之上。

三. ram的定价公式被我逆推出来了

不善于写作,这文章写的我太累了。这一段只能先标题党了。第三部分比较学术。明后两天,来我的星球看更新吧。

我也不是看论文和写论文的机器,做这个也没有经济利益驱动

这篇文章的紧急性,在于给韭菜提供一个熊市存活下来的攻略,以及如何防止自己再次被割。

请活下去吧!

 

这篇文章要感谢一直在关注ram价格的星球兄弟老huang,公司新来的同事,在参与大学里面区块链项目的新同事soc提供了部分论文出处,还有我们少数派报告群里面参与讨论的各位“少数派”,以及开源研发群里的程序员们。
文章来源:币乎
 
 

EOS账户查询

回复

EOS其他相关nidoule 发起了问题 • 1 人关注 • 0 个回复 • 462 次浏览 • 2018-06-26 17:29 • 来自相关话题

「IMEOS 解读」EOS DAWN 4.0 的 RAM 究竟是什么

EOS其他相关郑浩 发表了文章 • 0 个评论 • 1356 次浏览 • 2018-05-10 09:42 • 来自相关话题

本文试图解读以下几个问题:

1.RAM是什么?

2.RAM能否被交易?

3.如何获得RAM资源?

4.释放RAM是什么意思?

5.RAM能否被转让?

6.1%的RAM手续费是什么意思?

7.RAM的价格如何决定?

8.如何遏制RAM市场的投机行为?

9.侧链与主链的RAM价格是否一样?
 
RAM是什么?

RAM一般被称为内存 ,在EOS软件平台上对应于内存数据库资源。作为DAPP开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。

如何获得RAM?

内存资源与带宽资源的使用是完全不一样的。

一个账户可以不需要充足的EOS也能获得相对应的带宽资源,可通过其他账户授权即租赁EOS,且该过程无需手续费。

而如果一个开发者要使用内存资源,该账户必须要有充足的EOS抵押才可以,并且在这个过程需要收取手续费。

在我们EOS21天打卡计划的第四天有简要提及:

RAM一般被称为内存 ,在EOS软件平台上对应于内存数据库资源。作为DAPP开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。

RAM能否被交易?

RAM是不直接参与流通的,这个说法的实质是指因获得RAM抵押的那部分EOS能否被交易。

要使用RAM资源,须抵押一定的EOS,在抵押期间,EOS被锁定,不能再交易或者出租。

如果该DAPP需要一直使用这部分RAM,那对应的EOS也将会被一直锁定住。如果RAM只是使用一段时间,以后不再需要了,则可选择释放这部分RAM,收回EOS,此时可用于交易或者出租。

举个例子,(假设1EOS等于1KB的RAM)DAPP开发者账户抵押100 EOS获得了100KB的RAM,其中有40KB的RAM用来存储DAPP用户的相关数据。假如这些数据无需保存的话,那么可以收回40个EOS,释放40KB的RAM。

在抵押EOS获得RAM或者释放RAM收回EOS时,都要收1%的手续费。(而当使用EOS是为了出租带宽时,则无须手续费)

EOS Token的流通可参考下图:

RAM的价格由什么决定?

基于市场的供需模型决定。如果RAM稀缺,则要买入RAM,就需要锁定更多的EOS;卖出RAM也能获得更多的EOS。

EOS如何实现对内存使用的限制?

合约帐户的当前内存使用量将存储在合同帐户的常规数据库中,而不是像带宽和算力限制那样使用单独的数据库。

EOS.IO数据库管理的代码可以轻易拒绝那些试图用更多的内存,而不是根据通过当前持有EOS代币来获得允许的交易。

“ 这种设计的理由来自以下事实。首先,直到合同完成执行后,才知道其中数据库内存使用量的实际净变化。

其次,拒绝使用过多数据库内存的交易需要至少两条信息:合同执行后合同使用的数据库内存量,以及合同帐户中持有的 EOS代币数量。持有的代币信息存储在合同账户的常规数据库中,符合一定条件下,EOS合同可以取消账户中持有的 EOS代币。

因此,确定是否拒绝使用过多数据库内存的交易,最终会要求锁定交易中使用合约帐户的 EOS代币。所以,将内存使用信息与持有大量 EOS代币放在同一个地址,同时在WebAssembly执行期间要求锁定合同帐户时,可能才会有意义。”

以上是BM的解释,简单的说,数据库会对一个账号的进行追踪,如果它想超过账户中被锁定EOS分配的RAM ,交易就会被拒绝。

DAPP开发者账户要使用内存来运行相关智能合约,必须抵押一定数量的EOS,假如EOS不足,EOS.IO拒绝那些占用内存的交易。

内存投机什么意思?

低价时保留内存,在价格变贵后卖出内存来获利。

如何遏制内存投机?

但大量买入内存时,账户中相应的EOS将会被锁定,不能用于流通也不能用于出租带宽,将会损失EOS升值以及租赁带来的收益。

RAM不可直接转让,只能是以当前价格售出内存,而这个售出是要收取1%的手续费,这意味着RAM价格变贵后,对应的手续费也会上涨。

受供需模型限制,EOS DAWN4.0提到允许超级节点讲内存从4TB升级到16TB,所以抑制了早期大量囤积RAM的获利行为。

EOS DAWN 4.0原文

新的内存分配模型 | RAM Allocation Model

测试中我们发现了EOSIO系统合同分配RAM(数据库空间)的方式会导致未来资源的短缺。我们改用了一种基于市场的分配方法,使用Bancor算法。

我们的计算表明,如果1TB RAM按比例分配给token持有者,那么每字节的成本将是0.018美元(假设每个token20美元)。事实上,大多数token持有者实际上并不需要使用他们可能拥有的RAM;因此,我们最初对RAM的定价是每字节0.000018美元(假设每个token20美元)。创建一个新帐户需要大约4KB的RAM,这意味着将花费约0.10美元。随着RAM被分配,价格会自动增加,这样在系统耗尽RAM之前价格就会接近无穷大。

在Dawn 3.0系统合约中,您只能以您支付的价格出售RAM。 目的是抑制囤积和投机。 这种方法的缺点那些廉价购买RAM的人在RAM变得更紧缺后,没有为其他用户腾出RAM的经济激励。在Dawn 4.0之下,系统合约现在以当前市场价格购买和销售RAM分配。 这可能会导致交易商在预计明天可能出现短缺的情况下购买RAM。 总的来说,这将导致市场随着时间的推移平衡RAM的供需。

随着时间的推移,摩尔定律将允许超级节点升级到4TB甚至16TB的内存,并且这种供应增长将逐渐降低EOSIO RAM市场价格。

“ 供应量的增长,使得囤积RAM的获利可能性大幅降低了,保证了RAM的正常流通。”

对智能合约开发者的影响 | Implications for Smart Contract Developers

作为一名智能合约开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。考虑到RAM的成本,将存储在内存数据库中的数据量减到最小,并且设定你的应用程序在用户使用完后释放RAM将是非常重要的。

例如,Steem仅在RAM中存储了1周的内容,因此总体的量大小不会随着时间增长而增长。

“ 如果DAPP的开发者要长期占用内存资源,那么成本会非常高。通过经济机制,使得开发者尽可能的减少内存资源占用,或者有足够的经济激励来释放内存。”

尽量遏制投机 | Minimizing Speculation

那么现在形成了一个RAM市场,投机者或许想要利用RAM价格的波动性获取盈利。而 EOSIO 系统合约设定RAM不可转让,并收取1%的交易费用。这笔费用的结果是通过将其退出市场来抵消Token 的自然通货膨胀。

如果 RAM 的年度交易量等于 Token 供应量,则所有块生产者奖励的100%将由 RAM 市场费用支付。

“ 1. 这里的RAM不可转让是指RAM资源不可以直接转让,只能通过锁定EOS来获取RAM资源。而这个过程将会收取1%的手续费,这个机制的设定类似于以太坊上gas的限制。

2. 年度交易量如果等于Token供应量,那么对应的手续费将可用于抵消因奖励超级节点所带来的通胀。”

BM 针对 RAM 的回复




 
问:为了得到一些合同的内存,我应该为它付钱,对吧?那么所有这些买卖都在哪里出现?我要如何实现以一个价格买入 RAM,然后以另一个价格卖出呢?

BM回复:“买入RAM”是指“锁定 RAM 的资源”,社区有两个方案可以选择:

“解锁RAM资源”--按此前买入RAM时的价格,退还相关费用;

“售卖RAM”--按当前市场RAM的价格,退还相关费用。

如果是方案一的模型,对于那些早期以便宜价格买入RAM的人来说,没有经济动机释放内存。而人们可能在早期买入超过他们需要的内存。

如果是方案二按市场供需“买入/卖出”RAM的模型,我们支持“RAM的准备金机制”,在100%储备金的机制下,将使价格远低于EOS的1%购买1%RAM的价格。这让市场自然设定价格并管理稀缺性。

主链、侧链的 RAM

主链与侧链的RAM是独立的,每条链上的运行的智能合约只访问自身的RAM。

主链、侧链上的RAM价格不同,因为RAM的价格是由该链上的供需所决定。显然,在主链上的DAPP开发需求将要大的多,因此主链的RAM会更贵;而DAPP的开发者也可以选择在侧链上开发,到时会有许多侧链,选择价格便宜的侧链将会节约成本。

无论是在主链还是在侧链上购买RAM,都是使用相同的EOS Token。

= END =
原文地址
 
  查看全部
本文试图解读以下几个问题:

1.RAM是什么?

2.RAM能否被交易?

3.如何获得RAM资源?

4.释放RAM是什么意思?

5.RAM能否被转让?

6.1%的RAM手续费是什么意思?

7.RAM的价格如何决定?

8.如何遏制RAM市场的投机行为?

9.侧链与主链的RAM价格是否一样?
 
RAM是什么?

RAM一般被称为内存 ,在EOS软件平台上对应于内存数据库资源。作为DAPP开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。

如何获得RAM?

内存资源与带宽资源的使用是完全不一样的。

一个账户可以不需要充足的EOS也能获得相对应的带宽资源,可通过其他账户授权即租赁EOS,且该过程无需手续费。

而如果一个开发者要使用内存资源,该账户必须要有充足的EOS抵押才可以,并且在这个过程需要收取手续费。

在我们EOS21天打卡计划的第四天有简要提及:

RAM一般被称为内存 ,在EOS软件平台上对应于内存数据库资源。作为DAPP开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。

RAM能否被交易?

RAM是不直接参与流通的,这个说法的实质是指因获得RAM抵押的那部分EOS能否被交易。

要使用RAM资源,须抵押一定的EOS,在抵押期间,EOS被锁定,不能再交易或者出租。

如果该DAPP需要一直使用这部分RAM,那对应的EOS也将会被一直锁定住。如果RAM只是使用一段时间,以后不再需要了,则可选择释放这部分RAM,收回EOS,此时可用于交易或者出租。

举个例子,(假设1EOS等于1KB的RAM)DAPP开发者账户抵押100 EOS获得了100KB的RAM,其中有40KB的RAM用来存储DAPP用户的相关数据。假如这些数据无需保存的话,那么可以收回40个EOS,释放40KB的RAM。

在抵押EOS获得RAM或者释放RAM收回EOS时,都要收1%的手续费。(而当使用EOS是为了出租带宽时,则无须手续费)

EOS Token的流通可参考下图:

RAM的价格由什么决定?

基于市场的供需模型决定。如果RAM稀缺,则要买入RAM,就需要锁定更多的EOS;卖出RAM也能获得更多的EOS。

EOS如何实现对内存使用的限制?

合约帐户的当前内存使用量将存储在合同帐户的常规数据库中,而不是像带宽和算力限制那样使用单独的数据库。

EOS.IO数据库管理的代码可以轻易拒绝那些试图用更多的内存,而不是根据通过当前持有EOS代币来获得允许的交易。

“ 这种设计的理由来自以下事实。首先,直到合同完成执行后,才知道其中数据库内存使用量的实际净变化。

其次,拒绝使用过多数据库内存的交易需要至少两条信息:合同执行后合同使用的数据库内存量,以及合同帐户中持有的 EOS代币数量。持有的代币信息存储在合同账户的常规数据库中,符合一定条件下,EOS合同可以取消账户中持有的 EOS代币。

因此,确定是否拒绝使用过多数据库内存的交易,最终会要求锁定交易中使用合约帐户的 EOS代币。所以,将内存使用信息与持有大量 EOS代币放在同一个地址,同时在WebAssembly执行期间要求锁定合同帐户时,可能才会有意义。”

以上是BM的解释,简单的说,数据库会对一个账号的进行追踪,如果它想超过账户中被锁定EOS分配的RAM ,交易就会被拒绝。

DAPP开发者账户要使用内存来运行相关智能合约,必须抵押一定数量的EOS,假如EOS不足,EOS.IO拒绝那些占用内存的交易。

内存投机什么意思?

低价时保留内存,在价格变贵后卖出内存来获利。

如何遏制内存投机?

但大量买入内存时,账户中相应的EOS将会被锁定,不能用于流通也不能用于出租带宽,将会损失EOS升值以及租赁带来的收益。

RAM不可直接转让,只能是以当前价格售出内存,而这个售出是要收取1%的手续费,这意味着RAM价格变贵后,对应的手续费也会上涨。

受供需模型限制,EOS DAWN4.0提到允许超级节点讲内存从4TB升级到16TB,所以抑制了早期大量囤积RAM的获利行为。

EOS DAWN 4.0原文

新的内存分配模型 | RAM Allocation Model

测试中我们发现了EOSIO系统合同分配RAM(数据库空间)的方式会导致未来资源的短缺。我们改用了一种基于市场的分配方法,使用Bancor算法。

我们的计算表明,如果1TB RAM按比例分配给token持有者,那么每字节的成本将是0.018美元(假设每个token20美元)。事实上,大多数token持有者实际上并不需要使用他们可能拥有的RAM;因此,我们最初对RAM的定价是每字节0.000018美元(假设每个token20美元)。创建一个新帐户需要大约4KB的RAM,这意味着将花费约0.10美元。随着RAM被分配,价格会自动增加,这样在系统耗尽RAM之前价格就会接近无穷大。

在Dawn 3.0系统合约中,您只能以您支付的价格出售RAM。 目的是抑制囤积和投机。 这种方法的缺点那些廉价购买RAM的人在RAM变得更紧缺后,没有为其他用户腾出RAM的经济激励。在Dawn 4.0之下,系统合约现在以当前市场价格购买和销售RAM分配。 这可能会导致交易商在预计明天可能出现短缺的情况下购买RAM。 总的来说,这将导致市场随着时间的推移平衡RAM的供需。

随着时间的推移,摩尔定律将允许超级节点升级到4TB甚至16TB的内存,并且这种供应增长将逐渐降低EOSIO RAM市场价格。

“ 供应量的增长,使得囤积RAM的获利可能性大幅降低了,保证了RAM的正常流通。”

对智能合约开发者的影响 | Implications for Smart Contract Developers

作为一名智能合约开发者,RAM是一项宝贵的资源,数据库记录需要消耗RAM。考虑到RAM的成本,将存储在内存数据库中的数据量减到最小,并且设定你的应用程序在用户使用完后释放RAM将是非常重要的。

例如,Steem仅在RAM中存储了1周的内容,因此总体的量大小不会随着时间增长而增长。

“ 如果DAPP的开发者要长期占用内存资源,那么成本会非常高。通过经济机制,使得开发者尽可能的减少内存资源占用,或者有足够的经济激励来释放内存。”

尽量遏制投机 | Minimizing Speculation

那么现在形成了一个RAM市场,投机者或许想要利用RAM价格的波动性获取盈利。而 EOSIO 系统合约设定RAM不可转让,并收取1%的交易费用。这笔费用的结果是通过将其退出市场来抵消Token 的自然通货膨胀。

如果 RAM 的年度交易量等于 Token 供应量,则所有块生产者奖励的100%将由 RAM 市场费用支付。

“ 1. 这里的RAM不可转让是指RAM资源不可以直接转让,只能通过锁定EOS来获取RAM资源。而这个过程将会收取1%的手续费,这个机制的设定类似于以太坊上gas的限制。

2. 年度交易量如果等于Token供应量,那么对应的手续费将可用于抵消因奖励超级节点所带来的通胀。”

BM 针对 RAM 的回复
15259136695193d088124f7.jpg

 
问:为了得到一些合同的内存,我应该为它付钱,对吧?那么所有这些买卖都在哪里出现?我要如何实现以一个价格买入 RAM,然后以另一个价格卖出呢?

BM回复:“买入RAM”是指“锁定 RAM 的资源”,社区有两个方案可以选择:

“解锁RAM资源”--按此前买入RAM时的价格,退还相关费用;

“售卖RAM”--按当前市场RAM的价格,退还相关费用。

如果是方案一的模型,对于那些早期以便宜价格买入RAM的人来说,没有经济动机释放内存。而人们可能在早期买入超过他们需要的内存。

如果是方案二按市场供需“买入/卖出”RAM的模型,我们支持“RAM的准备金机制”,在100%储备金的机制下,将使价格远低于EOS的1%购买1%RAM的价格。这让市场自然设定价格并管理稀缺性。

主链、侧链的 RAM

主链与侧链的RAM是独立的,每条链上的运行的智能合约只访问自身的RAM。

主链、侧链上的RAM价格不同,因为RAM的价格是由该链上的供需所决定。显然,在主链上的DAPP开发需求将要大的多,因此主链的RAM会更贵;而DAPP的开发者也可以选择在侧链上开发,到时会有许多侧链,选择价格便宜的侧链将会节约成本。

无论是在主链还是在侧链上购买RAM,都是使用相同的EOS Token。

= END =
原文地址
 
 

从EOS系统架构看BM的野心

EOS新闻动态郑浩 发表了文章 • 0 个评论 • 770 次浏览 • 2018-04-25 11:43 • 来自相关话题

本期分享嘉宾:
唐煜,北京邮电大学博士;研究方向为区块链技术、网络安全及密码学,2016年研究区块链技术以来参与过多项区块链相关研究课题,发表过多项专利及学术论文,对区块链底层技术有深刻的理解。

My goal in life is to find a free market plan to protect life,freedom and property.                              

----Daniel Larimer
 
区块链技术源于2008年推出的比特币,自那时以来,企业家和开发人员一直在努力地推广该技术,以便在单个区块链平台上支持更广泛的应用。自2009年Daniel Larimer接触比特币后,他一直为其去中心化的理念和设计所着迷。为了解决比特币低吞吐量的问题,他亲自设计开发了Bitshares(去中心化交易所)和Steem(去中心化社交媒体平台),并成功实现了与中央服务器方案相似的用户体验。经过两个区块链项目的创造,他发现现有区块链平台使用费用高昂,性能有限,阻碍了区块链应用的广泛传播,为了让分布式应用程序可以在一个平台上灵活轻松地开发和管理,他率领团队开启了他的第三次区块链创业项目“EOS”。




EOS作为一个区块链应用开发平台,在笔者看来其为整个区块链技术生态提供了完备的发展体系和架构。虽然EOS本身的区块链技术是经过普遍证实、并通过长期实践考验的概念来设计,其代表着区块链技术根本性的进步,但是EOS为整个区块链技术生态提供的基石作用才更具里程碑意义。为阐述EOS的整体设计架构,笔者在此提出了EOS技术体系的七层架构模型,从资源层、协议层、共识层、合约层、工具层、去中心化应用层到生态层完整详细地解释EOS的整个生态布局。





在资源层主要由EOS的普通节点和超级节点的物理资源组成,普通节点通过P2P网络和超级节点连接,超级节点提供生产区块所需的网络资源、计算资源、存储资源以及运营和维护超级节点的运维资源。在这些资源上面实际存储和运行着区块链的基础数据区块,这些区块通过哈希函数、非对称加密、时间戳和Merkle树等技术手段来保证一种不可篡改的链式区块存储结构。在共识层通过BFT-DPoS机制共识出生产区块的顺序,如果区块生产者之间发生分歧则通过宪法来进行约束和调解,从而保证整个区块生产过程的一致性。基于生产的区块,合约层通过部署脚本和虚拟机来对区块数据进行自动化的逻辑运算从而达到确定性的输出结果。利用合约层的基本操作语言EOS模块化开发出账户系统、Token系统、交易系统、数据库系统、计算逻辑系统和日志系统等,这些系统工具为DAPP开发者提供了良好的服务接口,从而使开发人员不用关注区块链的底层技术。在去中心化应用层主要由钱包、区块链浏览器、去中心化交易所等基本的区块链工具应用组成,平台集成商在生态层集成多种DAPP打造适合多种场景的区块链解决方案,从而系统性地解决物流、金融、能源、社交、游戏等场景的信任传递和价值传输。
 
 一、资源层 在资源层主要由超级节点的各种物理资源组成,根据Block Producer的竞选标准,在计算资源方面,每个区块生产者至少需要配备双核Xeon处理器,128Gb的RAM(可升级到2Tb),512Gb的SSD;在存储资源方面,至少需要配备双核Xeon处理器,32Gb的RAM(可升级到1Tb),Raided 500Gb 10k RPM(缓存驱动),10Tb 7.2 RPM;在网络资源方面,每个节点至少需要配备1Gbps的光纤接入。在运维资源方面,节点需要配备负载均衡、电源备份、设备冗余备份、抗DDoS设备、各种网络安全防护设备以及节点运维人员。
 
 二、协议层 在协议层每个超级节点通过特定的哈希算法和Merkle树数据结构,将一段时间内接收到的交易数据和代码封装到一个带有时间戳的数据区块中,并链接到当前的主区块链上,形成最新的区块。该协议过程涉及区块、链式结构、哈希算法、Merkle树和时间戳等技术要素。数据区块一般包含区块头和区块体两部分,区块头主要有当前区块的版本号和序号、上一区块哈希值、Merkle根、时间戳等,区块体主要记录当前时间段内节点打包的交易。链式结构是由各个区块包含上一区块的哈希摘要依次连接,形成从创世区块到当前区块的一条最长主链,从而记录区块链数据的完整历史。哈希函数是一种摘要生成函数,任意长度的字符串作为哈希函数的输入都可得到一个独一无二的等长的字符串输出,通过哈希的输出几乎不能反推输入值,并且输入仅相差一个字节也会产生显著不同的输出值。Merkle树是一种数据结构,其作用是快速归纳和校验数据的存在性和完整性。非对称加密是在加密和解密过程中使用两个不同的密钥,分别称为公钥和私钥,用其中一个密钥加密信息后,只有另一个对应的密钥才能解开,并且公钥可以向其他人公开、私钥则保密,其他人无法通过该公钥推算出相应的私钥。
 
 三、共识层 在共识层EOS主要采用BFT-DPoS共识算法来调度各超级节点的资源和区块生成顺序,采用宪法来协调社区内部的分歧,从而形成社区的高度自治管理。其具体过程为:EOS的持有者通过投票系统对各个超级节点竞选者进行投票,选出21个节点为超级节点。然后这21个超级节点以自身的网络资源状况商议出一个出块权拥有顺序,在每个超级节点拥有出块权时,超级节点A产生第一个新区块后,A将该区块进行签名并广播给其他超级节点,其他超级节点对该区块进行验证后对其进行签名并返回给A节点,当A节点收到来自14个不同节点签名的区块后,该区块就成为不可逆区块串联到之前的区块链中。EOS社区的宪法主要是为了调节社区成员的分歧而设立的基本原则,由于目前许多区块链项目在发展过程中会出现内部分歧从而导致区块链系统不能有效的进化,因此必须在项目之初就设立项目的进化原则,从而使得EOS成为一条可以持续不停进化的链,以满足市场和技术发展的需要。当EOS发展需要分叉和升级合约时,就可以根据宪法的规则来修改和升级EOS代码。 
 
四、合约层 在合约层EOS通过开放RPC(Remote Procedure Call 远程过程调用)接口来使虚拟机与EOS进行集成,并且脚本语言和虚拟机的实现将独立于EOS操作系统技术,任何开发语言或虚拟机只要有适当的、性能足够的沙箱都可以通过RPC与EOS集成在一起。并且EOS目前已经可以支持Wren、WASM、EVM三种虚拟机,因此以太坊上的应用可以通过简单的修改就能直接移植到EOS系统中。由于虚拟机与EOS的分离,使得开发人员可以选择自己熟练的编程语言进行智能合约的开发,这使得EOS上的应用开发更加灵活,从而大大降低了区块链技术的使用门槛。
 
 五、工具层 在工具层EOS已经封装和模块化了诸多调用模型,目前github上已经开源了11种工具的API(Application Programming Interface 应用程序编程接口)。开发人员可以直接调用这些API实现账户管理、数据库操作、逻辑计算、交易构建、进程控制、Token生成等操作,这样的工具组件又极大的降低了开发人员的技术门槛,使得在EOS上开发自己的去中心化应用成为一项简单而愉快的工程。
 
六、去中心化应用层 EOS通过对合约层的优化和工具层的模块化,使得EOS成为真正意义上的区块链技术基础设施。在EOS系统中,我们不仅可以开发自己的公链,还可以锚定某条公链开发相应的去中心化应用。目前市面主流的DAPP类型都可以在EOS系统中复现出来,截止笔者完稿时,在EOSindex(EOS应用检索平台)上已经有114个DAPP开发出来了。 七、生态层 由于在EOS上可以开发自己的公链,因此开发者可以围绕一条公链开发相应的去中心化应用,如钱包、区块浏览器、区块搜索引擎、去中心化交易平台等,形成某种特性场景下的区块链生态系统,从而形成物流、金融、医疗、能源、社交、游戏等一体化的区块链解决方案。 最后,笔者相信通过EOS的不断发展和完善,在EOS的整个系统框架上将应运而生一个去中心化的数字王国,在这个王国中我们可以找到一个自由的市场来保护生命、自由和财产。所以,把握好当下,拥抱区块链,因为未来已来。
作者EOS打赏地址:0x82a358c08575e2e77ee0adefc77ad2c9fc4447cc  
转自币乎 查看全部
本期分享嘉宾:
唐煜,北京邮电大学博士;研究方向为区块链技术、网络安全及密码学,2016年研究区块链技术以来参与过多项区块链相关研究课题,发表过多项专利及学术论文,对区块链底层技术有深刻的理解。

My goal in life is to find a free market plan to protect life,freedom and property.                              

----Daniel Larimer

 
区块链技术源于2008年推出的比特币,自那时以来,企业家和开发人员一直在努力地推广该技术,以便在单个区块链平台上支持更广泛的应用。自2009年Daniel Larimer接触比特币后,他一直为其去中心化的理念和设计所着迷。为了解决比特币低吞吐量的问题,他亲自设计开发了Bitshares(去中心化交易所)和Steem(去中心化社交媒体平台),并成功实现了与中央服务器方案相似的用户体验。经过两个区块链项目的创造,他发现现有区块链平台使用费用高昂,性能有限,阻碍了区块链应用的广泛传播,为了让分布式应用程序可以在一个平台上灵活轻松地开发和管理,他率领团队开启了他的第三次区块链创业项目“EOS”。




EOS作为一个区块链应用开发平台,在笔者看来其为整个区块链技术生态提供了完备的发展体系和架构。虽然EOS本身的区块链技术是经过普遍证实、并通过长期实践考验的概念来设计,其代表着区块链技术根本性的进步,但是EOS为整个区块链技术生态提供的基石作用才更具里程碑意义。为阐述EOS的整体设计架构,笔者在此提出了EOS技术体系的七层架构模型,从资源层、协议层、共识层、合约层、工具层、去中心化应用层到生态层完整详细地解释EOS的整个生态布局。

1884c406b173ab5e3e57d80fa5c36485.png

在资源层主要由EOS的普通节点和超级节点的物理资源组成,普通节点通过P2P网络和超级节点连接,超级节点提供生产区块所需的网络资源、计算资源、存储资源以及运营和维护超级节点的运维资源。在这些资源上面实际存储和运行着区块链的基础数据区块,这些区块通过哈希函数、非对称加密、时间戳和Merkle树等技术手段来保证一种不可篡改的链式区块存储结构。在共识层通过BFT-DPoS机制共识出生产区块的顺序,如果区块生产者之间发生分歧则通过宪法来进行约束和调解,从而保证整个区块生产过程的一致性。基于生产的区块,合约层通过部署脚本和虚拟机来对区块数据进行自动化的逻辑运算从而达到确定性的输出结果。利用合约层的基本操作语言EOS模块化开发出账户系统、Token系统、交易系统、数据库系统、计算逻辑系统和日志系统等,这些系统工具为DAPP开发者提供了良好的服务接口,从而使开发人员不用关注区块链的底层技术。在去中心化应用层主要由钱包、区块链浏览器、去中心化交易所等基本的区块链工具应用组成,平台集成商在生态层集成多种DAPP打造适合多种场景的区块链解决方案,从而系统性地解决物流、金融、能源、社交、游戏等场景的信任传递和价值传输。
 
 一、资源层 在资源层主要由超级节点的各种物理资源组成,根据Block Producer的竞选标准,在计算资源方面,每个区块生产者至少需要配备双核Xeon处理器,128Gb的RAM(可升级到2Tb),512Gb的SSD;在存储资源方面,至少需要配备双核Xeon处理器,32Gb的RAM(可升级到1Tb),Raided 500Gb 10k RPM(缓存驱动),10Tb 7.2 RPM;在网络资源方面,每个节点至少需要配备1Gbps的光纤接入。在运维资源方面,节点需要配备负载均衡、电源备份、设备冗余备份、抗DDoS设备、各种网络安全防护设备以及节点运维人员。
 
 二、协议层 在协议层每个超级节点通过特定的哈希算法和Merkle树数据结构,将一段时间内接收到的交易数据和代码封装到一个带有时间戳的数据区块中,并链接到当前的主区块链上,形成最新的区块。该协议过程涉及区块、链式结构、哈希算法、Merkle树和时间戳等技术要素。数据区块一般包含区块头和区块体两部分,区块头主要有当前区块的版本号和序号、上一区块哈希值、Merkle根、时间戳等,区块体主要记录当前时间段内节点打包的交易。链式结构是由各个区块包含上一区块的哈希摘要依次连接,形成从创世区块到当前区块的一条最长主链,从而记录区块链数据的完整历史。哈希函数是一种摘要生成函数,任意长度的字符串作为哈希函数的输入都可得到一个独一无二的等长的字符串输出,通过哈希的输出几乎不能反推输入值,并且输入仅相差一个字节也会产生显著不同的输出值。Merkle树是一种数据结构,其作用是快速归纳和校验数据的存在性和完整性。非对称加密是在加密和解密过程中使用两个不同的密钥,分别称为公钥和私钥,用其中一个密钥加密信息后,只有另一个对应的密钥才能解开,并且公钥可以向其他人公开、私钥则保密,其他人无法通过该公钥推算出相应的私钥。
 
 三、共识层 在共识层EOS主要采用BFT-DPoS共识算法来调度各超级节点的资源和区块生成顺序,采用宪法来协调社区内部的分歧,从而形成社区的高度自治管理。其具体过程为:EOS的持有者通过投票系统对各个超级节点竞选者进行投票,选出21个节点为超级节点。然后这21个超级节点以自身的网络资源状况商议出一个出块权拥有顺序,在每个超级节点拥有出块权时,超级节点A产生第一个新区块后,A将该区块进行签名并广播给其他超级节点,其他超级节点对该区块进行验证后对其进行签名并返回给A节点,当A节点收到来自14个不同节点签名的区块后,该区块就成为不可逆区块串联到之前的区块链中。EOS社区的宪法主要是为了调节社区成员的分歧而设立的基本原则,由于目前许多区块链项目在发展过程中会出现内部分歧从而导致区块链系统不能有效的进化,因此必须在项目之初就设立项目的进化原则,从而使得EOS成为一条可以持续不停进化的链,以满足市场和技术发展的需要。当EOS发展需要分叉和升级合约时,就可以根据宪法的规则来修改和升级EOS代码。 
 
四、合约层 在合约层EOS通过开放RPC(Remote Procedure Call 远程过程调用)接口来使虚拟机与EOS进行集成,并且脚本语言和虚拟机的实现将独立于EOS操作系统技术,任何开发语言或虚拟机只要有适当的、性能足够的沙箱都可以通过RPC与EOS集成在一起。并且EOS目前已经可以支持Wren、WASM、EVM三种虚拟机,因此以太坊上的应用可以通过简单的修改就能直接移植到EOS系统中。由于虚拟机与EOS的分离,使得开发人员可以选择自己熟练的编程语言进行智能合约的开发,这使得EOS上的应用开发更加灵活,从而大大降低了区块链技术的使用门槛。
 
 五、工具层 在工具层EOS已经封装和模块化了诸多调用模型,目前github上已经开源了11种工具的API(Application Programming Interface 应用程序编程接口)。开发人员可以直接调用这些API实现账户管理、数据库操作、逻辑计算、交易构建、进程控制、Token生成等操作,这样的工具组件又极大的降低了开发人员的技术门槛,使得在EOS上开发自己的去中心化应用成为一项简单而愉快的工程。
 
六、去中心化应用层 EOS通过对合约层的优化和工具层的模块化,使得EOS成为真正意义上的区块链技术基础设施。在EOS系统中,我们不仅可以开发自己的公链,还可以锚定某条公链开发相应的去中心化应用。目前市面主流的DAPP类型都可以在EOS系统中复现出来,截止笔者完稿时,在EOSindex(EOS应用检索平台)上已经有114个DAPP开发出来了。 七、生态层 由于在EOS上可以开发自己的公链,因此开发者可以围绕一条公链开发相应的去中心化应用,如钱包、区块浏览器、区块搜索引擎、去中心化交易平台等,形成某种特性场景下的区块链生态系统,从而形成物流、金融、医疗、能源、社交、游戏等一体化的区块链解决方案。 最后,笔者相信通过EOS的不断发展和完善,在EOS的整个系统框架上将应运而生一个去中心化的数字王国,在这个王国中我们可以找到一个自由的市场来保护生命、自由和财产。所以,把握好当下,拥抱区块链,因为未来已来。
作者EOS打赏地址:0x82a358c08575e2e77ee0adefc77ad2c9fc4447cc  
转自币乎

现在适合买EOS吗?

EOS其他相关forrest 回复了问题 • 2 人关注 • 1 个回复 • 385 次浏览 • 2018-04-03 09:46 • 来自相关话题

EOS学习笔记5---EOS测试网络

EOS代码分析郑浩 发表了文章 • 0 个评论 • 739 次浏览 • 2018-03-31 18:42 • 来自相关话题

迄今为止,所有使用EOS区块链进行实验的工作都是使用eosd托管所有21个区块生产者的单个实例执行的。虽然这是验证区块链功能,开发新合同或其他方面的完美有效解决方案,但它不会扩展。它也没有公开在合同和块数据必须跨多个实例共享时引发的那类问题。提供扩展能力涉及在多个主机上部署多个eosd节点,然后将其排列成一个对等(p2p)网络。组成这个网络涉及剪裁和分发配置文件,协调启动和停止以及其他任务。 手动完成这项任务非常繁琐,容易出错。幸运的是提供了一个解决方案,以下面描述的Launcher应用程序的形式提供。
测试网络的节点,网络和拓扑

在进入EOS测试网的细节之前,让我们澄清一些术语。在这份文件中,我使用“host主机”和“machine机器”这两个术语可以相互交换。主机通常归结为一个IP地址,但实际上它可能有更多。 下一个词是“node节点”。节点是配置为用作0个或更多生产者的eosd可执行文件的实例。节点和主机之间不存在一对一映射,主机可以服务多个节点,但一个节点不能跨越多个主机。 我使用“local network本地网络”来指代任何一组节点,无论是在单个主机上还是在多个节点上,都在关闭,因此访问不必离开安全的网络环境。 最后还有涉及远程主机的分布式网络的想法。这些可能是您可能无法直接访问启动和停止eosd实例的主机,但您可能希望与之建立分布式的测试网络。
 
本地主机网络
 
在单台机器上运行testnet是最快捷的入门方式。正如你将在下面看到的,这是Launcher应用程序的默认模式。您可以立即设置本地主机网络,只需告诉启动程序需要激活多少生产或非生产节点,以及可能使用的网络拓扑类型。 缺点是在单个主机上运行多个节点时需要大量硬件。此外,多个节点将在CPU周期方面相互竞争,限制真正的并发性,并且本地主机网络性能与主机间性能差异很大,即使速度很高也是如此。
 
分布式网络

活网的最具代表性的模型是将eosd节点分布在多个主机上。 Launcher应用程序能够通过使用通过ssh推送的bash脚本启动分布式节点。在这种情况下,需要额外的配置来将配置的引用替换为“localhost”或“127.0.0.1”,并将其与各个对等机器的实际主机名或IP地址相替换。

启动分布式测试网络需要操作员对配置为进行身份验证的所有远程计算机进行ssh访问,而无需用户输入密码。下面详细描述该配置。

在测试网跨越多个远程网络的情况下,可以在分布式运营商之间在外部共享通用启动器定义的配置文件,每个运营商负责启动他或她自己的本地网络。

请注意,启动器不会将eosd的实例推送到远程主机,您必须单独准备各种测试网络主机。
 
网络拓扑

网络拓扑或“形状”描述节点如何连接以共享事务和数据块,并请求相同的数据。改变网络拓扑的想法是,节点必须发送报告新事务或块的消息的次数与必须重复消息以确保所有节点知道它的次数之间存在折衷。

启动器具有基于节点间连接的两种基本不同网络“形状”的定义,这可以通过命令行选项来选择。如果您希望创建自己的自定义网络拓扑,可以通过提供json格式的文件来实现。该文件通常是启动器在“输出”模式下创建的模板的编辑版本。
 
星形网络






一个“星”旨在支持测试网络中更多的节点。在这种情况下,连接到一个节点的对等点的数量和这些节点的分布会根据网络中节点的数量而变化。
 
网状网络






在“网状”网络中,每个节点都连接到尽可能多的对等节点。
 
自定义网络形状
 

这是自定义部署的一个示例,其中节点群集除了通过单个交叉点以外都是隔离的。
 
启动器应用程序
为了解决在局域网或更广泛的网络中分布多个eosd节点所隐含的复杂性,启动器应用程序已创建。

基于少数命令行参数,启动器能够编写每个节点的配置文件,在对等主机之间安全地分发这些文件,然后启动eosd的多个实例。

以这种方式启动的Eosd实例将其输出记录在单个文本文件中。最后,启动器应用程序还能够关闭部分或全部测试网络。
 
运行启动器应用程序

启动程序用于配置和部署使用配置的路由相互通信的生产和非生产eosd节点。假设机器具有足够的内存和磁盘空间用于多个eosd实例,则每个节点的配置都存储在单独的目录中,允许多个节点在同一主机上处于活动状态。启动程序使用多个配置源来部署测试网络。一些命令行参数可以用来设置简单的本地网络。 为了支持部署分布式网络,启动程序将从JSON文件中读取更详细的配置。您可以使用启动程序根据您提供的命令行选项创建默认的JSON文件。编辑该文件以根据需要替换实际主机名和其他详细信息,然后重新运行提供此文件的启动程序。 目前,启动程序仅激活平台本地节点,稍后将添加dockerized节点。应该直接将生成的配置文件用于dockerized节点。
 
启动器命令行参数launcher command line arguments:
-n [ --nodes ] arg (=1) total number of nodes to configure and
launch
-p [ --pnodes ] arg (=1) number of nodes that are producers
-d [ --delay ] arg (=0) number of seconds to wait before starting the next node. Used to simulate a person keying in a series of individual eosd startup command lines.
-s [ --shape ] arg (=star) network topology, use "star"
"mesh" or give a filename for custom
-g [ --genesis ] arg (="./genesis.json")
set the path to genesis.json
-o [ --output ] arg save a copy of the generated topology
in this file
--skip-signature EOSD does not require transaction
signatures.
-i [ --timestamp ] arg set the timestamp for the first block.
Use "now" to indicate the current time
-l [ --launch ] arg select a subset of nodes to launch.
Currently may be "all", "none", or
"local". If not set, the default is to
launch all unless an output file is
named, in which case it starts none.
-k [ --kill ] arg The launcher retrieves the previously
started process ids and signals each with the specified signum. Use 15 for a sigterm and 9 for sigkill.
-h [ --help ] print this list需要注意的是如果testnet.json中是--shape参数,--nodes, --pnodes,和 --genesis 参数将被忽略。
 

生成的多主机测试网络配置文件


这是通过运行以下命令生成的文件:launcher --output <filename> [other options]
在这种模式下,启动程序不会激活任何eosd实例,它会生成给定文件名的文件。这个文件是一个JSON格式的模板,提供了一个简单的方法。

本文档中描述的对象由使用ssl的助手和testnet节点描述符的集合组成。节点描述符被列为名称,值对。请注意,名称的作用既是节点描述符映射中的关键字,也是对等列表中节点的别名。例如:{
"ssh_helper": {
"ssh_cmd": "/usr/bin/ssh",
"scp_cmd": "/usr/bin/scp",
"ssh_identity": "phil",
"ssh_args": "-i ~phil/.ssh/id-sample"
},
ssh helper字段是指向ssh和scp的路径,必要时是身份标识以及任何可选参数。"nodes": [[
"testnet_0",{
"genesis": "./genesis.json",
"remote": true,
"ssh_identity": "",
"ssh_args": "",
"eos_root_dir": "/home/phil/blockchain/eos",
"data_dir": "tn_data_0",
"hostname": "remoteserv",
"public_name": "remoteserv",
"p2p_port": 9876,
"http_port": 8888,
"filesize": 8192,
"keys": [{
"public_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"wif_private_key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
}
],
"peers": [
"testnet_1",
"testnet_2",
"testnet_3",
"testnet_4",
"testnet_5"
],
"producers": [
"inita",
"initg",
"initm",
"inits"
]
}
],[
"testnet_1",{该testnet.json文件的其余部分是节点描述符集合。上面的片段是由命令行programs/launcher/launcher -p6 -s mesh -o testnet.json 创建,之后编辑引用一个名为‘remoteserv’的远程主机。
 
JSON文件的元素
这个表格描述了所有在testnet.json中用到的键/值对。Value Description
ssh_helper a set of values used to facilitate the use of SSH and SCP
nodes a collection of descriptors defining the eosd instances used to assemble this testnet. The names used as keys in this collection are also aliases used within as placeholders for peer nodes.ssh_helper elements Description
ssh_cmd path to the local ssh command
scp_cmd path to the local scp command
ssh_args any additional command line arguments needed to successfully connect to remote peers
ssh_identity The user name to use when accessing the remote hostsnode elements Description
genesis path to the genesis.json file. This should be the same file for all members of the testnet.
remote specifies whether this node is in the local network or not. This flag ties in with the launch mode command line option (-l) to determine if the local launcher instance will attempt to start this node.
ssh_identity a per-node override of the general ssh_identity defined above.
ssh_args a per-node override of the general ssh_args
eos_root_dir specifies the directory into which all eosd artifacts are based. This is required for any hosts that are not the local host.
data_dir the root for the remaining node-specific settings below.
hostname the domain name for the server, or its IP address.
public_name possibly different from the hostname, this name will get substituted for the aliases when creating the per-node config.ini file's peer list.
p2p_port combined with the public name to identify the endpoint listed on for peer connections. When multiple nodes share a host, the p2p_port is automatically incremented for each node.
http_port defines the listen endpoint for the client API services
filesize sets the capacity in megabytes for the size of the blockchain backing store file.
keys specify the authentication tokens for this node.
peers this list indicates the other nodes in the network to which this one actively connects. Since this file may be edited to alter the hostname, public name, or p2p port values, the peers list here holds aliases for the actual endpoints eventually written to the individual config.ini files.
producers this list identifies which of the producers from the genesis.json file are held by this node. Note that the launcher uses a round-robin algorithm to spread the producer instances across the producing nodes.
配置分布式服务器
 
 
该testnet.json文件ssh_helper部分包含必要的连接并发出命令到其他服务器的SSH的元素。除了对ssh_helper部分提供全局配置设置,每个节点的配置可以提供最高权限身份和连接参数。还需要提供服务器至少复制EOSD可执行的,与genesis.json文件到适当的位置,相对于一些命名为EOS的根目录。举例来说如果定义EOS的根目录为/home/phil/blockchain/eos,启动器将贯穿各种shell命令使用SSH,最后运用SCP复制一个config.ini文件到远程的数据目录。
 
运行时构件
 
启动器应用程序为每个节点实例创建一个单独的日期和配置目录。文件以tn_data_<n>命名,Per-Node File Description
config.ini The eosd configuration file.
eosd.pid The process ID of the running eosd instance.
blockchain/* The blockchain backing store
blocks/* The blockchain log store
stderr.txt The cerr output from eosd.
stdout.txt The cout output from eosd.一个名为 "last_run.json"的文件A file called "last_run.json" contains hints for a later instance of the launcher to be able to kill local and remote nodes when run with -k 15.
 
 因为EOS还在不断的开发完善中,所以该文档可能会过时,我创建了一个EOS爱好者社区,www.eos.top ,QQ群:499860264,微信群秘:fly258xx  ,欢迎加入讨论关于EOS的任何问题。
 
 
 
  查看全部
迄今为止,所有使用EOS区块链进行实验的工作都是使用eosd托管所有21个区块生产者的单个实例执行的。虽然这是验证区块链功能,开发新合同或其他方面的完美有效解决方案,但它不会扩展。它也没有公开在合同和块数据必须跨多个实例共享时引发的那类问题。提供扩展能力涉及在多个主机上部署多个eosd节点,然后将其排列成一个对等(p2p)网络。组成这个网络涉及剪裁和分发配置文件,协调启动和停止以及其他任务。 手动完成这项任务非常繁琐,容易出错。幸运的是提供了一个解决方案,以下面描述的Launcher应用程序的形式提供。
测试网络的节点,网络和拓扑

在进入EOS测试网的细节之前,让我们澄清一些术语。在这份文件中,我使用“host主机”和“machine机器”这两个术语可以相互交换。主机通常归结为一个IP地址,但实际上它可能有更多。 下一个词是“node节点”。节点是配置为用作0个或更多生产者的eosd可执行文件的实例。节点和主机之间不存在一对一映射,主机可以服务多个节点,但一个节点不能跨越多个主机。 我使用“local network本地网络”来指代任何一组节点,无论是在单个主机上还是在多个节点上,都在关闭,因此访问不必离开安全的网络环境。 最后还有涉及远程主机的分布式网络的想法。这些可能是您可能无法直接访问启动和停止eosd实例的主机,但您可能希望与之建立分布式的测试网络。
 
本地主机网络
 
在单台机器上运行testnet是最快捷的入门方式。正如你将在下面看到的,这是Launcher应用程序的默认模式。您可以立即设置本地主机网络,只需告诉启动程序需要激活多少生产或非生产节点,以及可能使用的网络拓扑类型。 缺点是在单个主机上运行多个节点时需要大量硬件。此外,多个节点将在CPU周期方面相互竞争,限制真正的并发性,并且本地主机网络性能与主机间性能差异很大,即使速度很高也是如此。
 
分布式网络

活网的最具代表性的模型是将eosd节点分布在多个主机上。 Launcher应用程序能够通过使用通过ssh推送的bash脚本启动分布式节点。在这种情况下,需要额外的配置来将配置的引用替换为“localhost”或“127.0.0.1”,并将其与各个对等机器的实际主机名或IP地址相替换。

启动分布式测试网络需要操作员对配置为进行身份验证的所有远程计算机进行ssh访问,而无需用户输入密码。下面详细描述该配置。

在测试网跨越多个远程网络的情况下,可以在分布式运营商之间在外部共享通用启动器定义的配置文件,每个运营商负责启动他或她自己的本地网络。

请注意,启动器不会将eosd的实例推送到远程主机,您必须单独准备各种测试网络主机。
 
网络拓扑

网络拓扑或“形状”描述节点如何连接以共享事务和数据块,并请求相同的数据。改变网络拓扑的想法是,节点必须发送报告新事务或块的消息的次数与必须重复消息以确保所有节点知道它的次数之间存在折衷。

启动器具有基于节点间连接的两种基本不同网络“形状”的定义,这可以通过命令行选项来选择。如果您希望创建自己的自定义网络拓扑,可以通过提供json格式的文件来实现。该文件通常是启动器在“输出”模式下创建的模板的编辑版本。
 
星形网络

star.png


一个“星”旨在支持测试网络中更多的节点。在这种情况下,连接到一个节点的对等点的数量和这些节点的分布会根据网络中节点的数量而变化。
 
网状网络

mesh.png


在“网状”网络中,每个节点都连接到尽可能多的对等节点。
 
自定义网络形状
 

这是自定义部署的一个示例,其中节点群集除了通过单个交叉点以外都是隔离的。
 
启动器应用程序
为了解决在局域网或更广泛的网络中分布多个eosd节点所隐含的复杂性,启动器应用程序已创建。

基于少数命令行参数,启动器能够编写每个节点的配置文件,在对等主机之间安全地分发这些文件,然后启动eosd的多个实例。

以这种方式启动的Eosd实例将其输出记录在单个文本文件中。最后,启动器应用程序还能够关闭部分或全部测试网络。
 
运行启动器应用程序

启动程序用于配置和部署使用配置的路由相互通信的生产和非生产eosd节点。假设机器具有足够的内存和磁盘空间用于多个eosd实例,则每个节点的配置都存储在单独的目录中,允许多个节点在同一主机上处于活动状态。启动程序使用多个配置源来部署测试网络。一些命令行参数可以用来设置简单的本地网络。 为了支持部署分布式网络,启动程序将从JSON文件中读取更详细的配置。您可以使用启动程序根据您提供的命令行选项创建默认的JSON文件。编辑该文件以根据需要替换实际主机名和其他详细信息,然后重新运行提供此文件的启动程序。 目前,启动程序仅激活平台本地节点,稍后将添加dockerized节点。应该直接将生成的配置文件用于dockerized节点。
 
启动器命令行参数
launcher command line arguments:
-n [ --nodes ] arg (=1) total number of nodes to configure and
launch
-p [ --pnodes ] arg (=1) number of nodes that are producers
-d [ --delay ] arg (=0) number of seconds to wait before starting the next node. Used to simulate a person keying in a series of individual eosd startup command lines.
-s [ --shape ] arg (=star) network topology, use "star"
"mesh" or give a filename for custom
-g [ --genesis ] arg (="./genesis.json")
set the path to genesis.json
-o [ --output ] arg save a copy of the generated topology
in this file
--skip-signature EOSD does not require transaction
signatures.
-i [ --timestamp ] arg set the timestamp for the first block.
Use "now" to indicate the current time
-l [ --launch ] arg select a subset of nodes to launch.
Currently may be "all", "none", or
"local". If not set, the default is to
launch all unless an output file is
named, in which case it starts none.
-k [ --kill ] arg The launcher retrieves the previously
started process ids and signals each with the specified signum. Use 15 for a sigterm and 9 for sigkill.
-h [ --help ] print this list
需要注意的是如果testnet.json中是--shape参数,--nodes, --pnodes,和 --genesis 参数将被忽略。
 

生成的多主机测试网络配置文件


这是通过运行以下命令生成的文件:
launcher --output <filename> [other options]

在这种模式下,启动程序不会激活任何eosd实例,它会生成给定文件名的文件。这个文件是一个JSON格式的模板,提供了一个简单的方法。

本文档中描述的对象由使用ssl的助手和testnet节点描述符的集合组成。节点描述符被列为名称,值对。请注意,名称的作用既是节点描述符映射中的关键字,也是对等列表中节点的别名。例如:
{
"ssh_helper": {
"ssh_cmd": "/usr/bin/ssh",
"scp_cmd": "/usr/bin/scp",
"ssh_identity": "phil",
"ssh_args": "-i ~phil/.ssh/id-sample"
},

ssh helper字段是指向ssh和scp的路径,必要时是身份标识以及任何可选参数。
"nodes": [[
"testnet_0",{
"genesis": "./genesis.json",
"remote": true,
"ssh_identity": "",
"ssh_args": "",
"eos_root_dir": "/home/phil/blockchain/eos",
"data_dir": "tn_data_0",
"hostname": "remoteserv",
"public_name": "remoteserv",
"p2p_port": 9876,
"http_port": 8888,
"filesize": 8192,
"keys": [{
"public_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"wif_private_key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
}
],
"peers": [
"testnet_1",
"testnet_2",
"testnet_3",
"testnet_4",
"testnet_5"
],
"producers": [
"inita",
"initg",
"initm",
"inits"
]
}
],[
"testnet_1",{
该testnet.json文件的其余部分是节点描述符集合。上面的片段是由命令行programs/launcher/launcher -p6 -s mesh -o testnet.json 创建,之后编辑引用一个名为‘remoteserv’的远程主机。
 
JSON文件的元素
这个表格描述了所有在testnet.json中用到的键/值对。
Value	Description
ssh_helper a set of values used to facilitate the use of SSH and SCP
nodes a collection of descriptors defining the eosd instances used to assemble this testnet. The names used as keys in this collection are also aliases used within as placeholders for peer nodes.
ssh_helper elements	Description
ssh_cmd path to the local ssh command
scp_cmd path to the local scp command
ssh_args any additional command line arguments needed to successfully connect to remote peers
ssh_identity The user name to use when accessing the remote hosts
node elements	Description
genesis path to the genesis.json file. This should be the same file for all members of the testnet.
remote specifies whether this node is in the local network or not. This flag ties in with the launch mode command line option (-l) to determine if the local launcher instance will attempt to start this node.
ssh_identity a per-node override of the general ssh_identity defined above.
ssh_args a per-node override of the general ssh_args
eos_root_dir specifies the directory into which all eosd artifacts are based. This is required for any hosts that are not the local host.
data_dir the root for the remaining node-specific settings below.
hostname the domain name for the server, or its IP address.
public_name possibly different from the hostname, this name will get substituted for the aliases when creating the per-node config.ini file's peer list.
p2p_port combined with the public name to identify the endpoint listed on for peer connections. When multiple nodes share a host, the p2p_port is automatically incremented for each node.
http_port defines the listen endpoint for the client API services
filesize sets the capacity in megabytes for the size of the blockchain backing store file.
keys specify the authentication tokens for this node.
peers this list indicates the other nodes in the network to which this one actively connects. Since this file may be edited to alter the hostname, public name, or p2p port values, the peers list here holds aliases for the actual endpoints eventually written to the individual config.ini files.
producers this list identifies which of the producers from the genesis.json file are held by this node. Note that the launcher uses a round-robin algorithm to spread the producer instances across the producing nodes.

配置分布式服务器
 
 
该testnet.json文件ssh_helper部分包含必要的连接并发出命令到其他服务器的SSH的元素。除了对ssh_helper部分提供全局配置设置,每个节点的配置可以提供最高权限身份和连接参数。还需要提供服务器至少复制EOSD可执行的,与genesis.json文件到适当的位置,相对于一些命名为EOS的根目录。举例来说如果定义EOS的根目录为/home/phil/blockchain/eos,启动器将贯穿各种shell命令使用SSH,最后运用SCP复制一个config.ini文件到远程的数据目录。
 
运行时构件
 
启动器应用程序为每个节点实例创建一个单独的日期和配置目录。文件以tn_data_<n>命名,
Per-Node File	Description
config.ini The eosd configuration file.
eosd.pid The process ID of the running eosd instance.
blockchain/* The blockchain backing store
blocks/* The blockchain log store
stderr.txt The cerr output from eosd.
stdout.txt The cout output from eosd.
一个名为 "last_run.json"的文件A file called "last_run.json" contains hints for a later instance of the launcher to be able to kill local and remote nodes when run with -k 15.
 
 因为EOS还在不断的开发完善中,所以该文档可能会过时,我创建了一个EOS爱好者社区,www.eos.top ,QQ群:499860264,微信群秘:fly258xx  ,欢迎加入讨论关于EOS的任何问题。
 
 
 
 

有关EOS的DPOS

回复

EOS其他相关vyssoko 发起了问题 • 1 人关注 • 0 个回复 • 655 次浏览 • 2018-03-14 15:58 • 来自相关话题

EOS源码都是开源的么,我看到有什么SDK提供

EOS其他相关郑浩 回复了问题 • 2 人关注 • 1 个回复 • 660 次浏览 • 2018-03-12 11:45 • 来自相关话题