EOS内存RAM买卖详解

对于EOS RAM的来说什么最重要呢?我们经常在每天的数字货币和区块链相关新闻中看到EOS旁边的RAM这个词,但是无论如何我们应该关注它的价格,为什么要关注它的价格,即使是那些只想深入了解智能合约开发的人也需要这样吗?Eos中基本上有三种类型的资源:带宽(Network),计算和计算积压(CPU)和状态存储(RAM)。RAM本质上是为智能合约中调用的每个交易提供资源的gas,不像磁盘和CPU是通过token值按比例获得的资源,RAM是需要从eosio购买的。RAM的价格由Bancor算法预先确定。Bancor算法将动态地促进当前RAM的供应和供应的价格基础并使其达到市场均衡。因此,所有买卖ram的交易都是与eosio.ram的单方面交易。次级市场也激励那些没有使用它的RAM储备将其出售给需要它们的人。因为Eosio支持免费的用户理念,所以运行网络的负担落在开发人员身上。我们需要为智能合约预留足够的RAM才能在Eos网络上正常运行。

购买RAM

在EOS平台上的整个智能合约开发过程中,我们可能会遇到这样一种情况:我们分配的RAM不符合部署合同的要求。在这种情况下,我们需要额外购买的带有EOS令牌的ram才能继续进行合同部署。整个过程可以使用Eos-io提供的CLI工具,即keosd和cleos来完成。在我们之前的文章中,我们已经完成了设置本地开发环境以测试智能合约的过程。如果你已经按照文章中的那些步骤进行操作,我们可以使用相同的工具与主网和测试网进行交互,并进行一些配置更改。

让我们首先将我们的cleos应用程序指向测试网络节点而不是本地运行的nodeosd。我们可以创建一个额外的别名来注册这个配置。

alias cleos-test='docker exec -i keosd /opt/eosio/bin/cleos -u http://jungle.eos9cat.com:8888 --wallet-url http://localhost:8900'

在上面的命令中,我们创建了别名cleos-test,以便与eos9cat提供的eos测试网络节点快速交互。请注意,我们仍然依赖我们的本地钱包应用程序来处理我们的私钥。 只要我们在解锁钱包中导入相应的私钥即可。

提示:如果要持久保存命令,可以将命令放在~/.bashrc文件中(如果你在linux上)和~/.bash_profile(用于mac)。

image

有时,当你部署包含更复杂逻辑的应用程序合约时,可能会收到类似于上述屏幕截图的错误消息,暗示智能合约帐户没有足够的RAM来部署合同。在这种情况下,我们必须从eosio.ram购买更多的ram。

我们可以通过发出以下命令来快速检查我们的ram分配:

cleos-test get account ${accountname}
image

memory部分下的quota属性指示帐户分配的内存量。

现在我们知道我们有权获得多少ram,我们怎么可能知道我们需要多少Ram才能部署我们的智能合约?由于Eosio区块链使用Web Assembly执行用户生成的应用程序和代码,因此我们可以通过将*.wasm*.abi文件的大小相加来粗略估计执行智能合约所需的千字节数。除了计算粗略估计之外,我们还必须确定购买ram所需的Eos代币数量。

Eos区块链平台依靠Bancor算法通过单边交易模型促进二级ram市场,我们可以通过查询系统合约公开的ram市场表并执行一些简单的计算来确定Eos ram价格。

image

要获得EOS/KiB,我们需要将quote.balance(连接器余额)除以base.balanceram(token不足支付的部分),最后将该值乘以1024(即quote.balance/base.balance)*1024。在我想要部署的智能合约的示例中,需要大约100KiB,这将花费大约31.70 EOS token。 然后,我们可以通过Cleos发出以下命令来继续实际的交易。

cleos-test system buyram -k ${payer} ${reciever} amount

k标志将指示金额参数表示要购买的KiB金额,系统合约交易将自动从付款人的账户中扣除适当数量的EOS token。 如果没有kflag,金额将默认为花费的EOS token数量。 同样,根据ram价格,将向账户中添加适当数量的ram。

image

如果我们现在再次部署合约,它应该成功。

image

出售RAM

对于帐户当前占用的不需要的ram,可以通过Banchor算法确定的价格通过系统合约交换某些EOS token的资源。出售ram和在eos区块链上购买ram的过程类似。

cleos-test system sellram ${account} bytes

成功的交易看起来与此类似:

image

持久存储

由于其灵活性,RAM可以说是Eos区块链平台上最受欢迎的资源。RAM不仅可以用于存储中间计算状态,还可以用作持久存储。多索引数据库是Eos中的一种数据结构,它根据范围的定义方式提供存储数据的灵活性。多索引数据库将以表格格式存储持久数据。实际上,与许多其他流行的智能合约平台不同,Eos智能合约中的交易不能返回任何值或变量,这意味着RAM捕获的任何数据都不能通过交易返回给调用者。为了获得对智能合约中的变量值的访问,例如某个计算和交易的结果,数据需要通过带有范围的多索引数据库表进行更新,通常以调用者的帐户名称或智能合约本身的帐户名称的形式存储数据的关联链接,然后可以通过具有相应合同名称,范围和表名称的gettable API检索数据。

例如,每个帐户已存储在eosio.token合约中定义的多索引数据库中的EOS token数,该合约由定义范围的每个帐户的一小块RAM组成。我们可以使用以下命令直接从db检索某个帐户拥有的token数量:

cleos-test get table eosio.token ${account} accounts
image

上述命令中的表名是accounts,范围是个人帐户名。将帐户余额信息与实际拥有它们的帐户分配是合乎逻辑的。另一方面,如果我们希望检索有关EOS token本身的信息,我们将需要查看具有不同表的另一个范围,即使信息是在同一智能合约中已经编码:

cleos-test get table eosio.token EOS stats

确定范围和表名称可能很棘手,特别是对于其他人生成的合约,通常可以通过查看合约的abi来快速检索表名。

image

范围更难,但可以通过查看在代码中对多索引数据库的引用查看参数来确定。

image

第一个带下划线的部分显示对stats表的引用是使用sym参数进行的,该参数表示token的SYMBOL;因此,表的范围是token的SYMBOL。

第e二个带下划线的部分描述了在交易期间减去余额时引用帐户表的行。这行代码暗示表帐户的范围是帐户名称。有关在智能合约中使用多索引数据库的更多教程和信息,请继续关注我们的另外一篇文章

升级合约

由于智能合约本身与存储在本地磁盘上的多索引数据库之间的连接仅仅是一个参考链接,因此该功能与使用同一帐户多次部署合约时一起授予,以便升级eos生态系统中的智能合约。只要定义多索引数据库的关键功能在新旧智能合约中相同,就可以在新的智能合约中对数据进行引用。

在某些情况下,你甚至可能会发现通过部署空合约或大小明显较小的合同来释放RAM以进行销售是有用的,同时仍然将与前合同相关的数据保留在持久存储上。

======================================================================

分享一个交互式的在线编程实战,EOS智能合约与DApp开发入门

EOS教程

本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

另外推荐几个以太坊教程:

  • web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

这里是原文

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • EOS.IO技术白皮书链接:EOSIO/Documentation 摘要 EOS.IO 软件引入一种新的区块链架构...
    yuyangray阅读 1,673评论 0 4
  • eos项目(v1.0.9)主要可以分为以下八个模块:1.编译模块2.主程序模块3.依赖库模块4.插件模块5.智能合...
    vdes阅读 2,786评论 0 1
  • 草案:2017 年 6 月 26 日 (@dayzh (https://steemit.com/@dayzh)) ...
    编程狂魔阅读 272评论 0 1
  • “午饭让她吃些蔬菜,做好的虾在冰箱里,热一热再吃,虾皮扒干净了再给她,千万别让她喝可乐,孩子太小,容易钙质流失。”...
    千葱阅读 443评论 0 0
  • 2017年11月7日 周二 晴 女人最狼狈的日子是在家带孩子的那几年吗?一天到晚围绕孩子转,洗衣做饭,到...
    卖牙膏的秀英阅读 163评论 1 0