您正在查看: EOS-新手问答 分类下的文章

为什么EOS Dapp开发这么少?恨铁不成钢吐槽版

对于目前EOS 开发现状,想要做一款基本的Dapp,需要以下人员和配备

  • 所需人员
    1.前端开发(初级)
    2.EOS区块链运维(高级)
    3.EOS合约开发(高级)
  • 硬件配备
    至少一台配置较高的服务器,提供全节点rpc服务(正式环境,一般不会用其他节点的api,难以把控)。
    如果Dapp需要大量自定义查询,以及分析,还要做入库(mongodb或者mysql),并提供对应的api。
    对于常规的EOS全节点维护,已经很费时费力,如果在做入库查询,难度更是上升很多。
  • 软件配备
    1.浏览器运行
    目前EOS扩展只有个Scatter,不说其他的数据设计,只说对于交互逻辑,个人和身边人了解,都是基本反人类。无论一个Dapp多么的小巧,简洁,只要支持Scatter,都要单独写一个文章,教给用户如果使用Scatter才能进入Dapp。先添加网络,再导入私钥,在生成身份...毫无引导,一脸懵逼。90%用户,基本在Scatter就放弃了。。。
    2.App运行
    目前有几款App支持Scatter或者其他私有协议的Dapp运行,只能说部分可用,并且只是移动端的适配,很多Dapp还是适合PC页面展示。
  • 运行成本
    1.获客成本
    EOS注册账户,支持基本的转账等操作的话,基本需要4kb RAM+ 0.1EOS + 0.1NET。当前RAM价格1kb/0.0994EOS,EOS单价按40rmb,总价格为9.6RMB。
    2.数据存储
    数据上链,存储的成本可直接按RAM价格乘以数据量计算。

先说这么多,普通的互联网公司,已经懵了。。。太多的区块链知识,以及EOS相关的,很多公司很难招到相关人员,或者目前公司的规划不了解区块链,很难明确是不是需要做Dapp。

要说做一个传统的web,每个互联网公司都能分分钟做出来,那如何让这些人也能尽量顺畅的做Dapp呢?
下面我们针对上面的吐槽,挨个试着简化。

  • 所需人员
    1.前端开发(初级)- 这个传统互联网都有,开发技术完全一致。
    2.EOS区块链运维(高级)- 交给三方的公司提供支持
    3.EOS合约开发(高级)- 招中级c++开发,只学习合约相关,或者找合约提供开发的三方外包公司。

所以,人员配备可以精简到 一个前端,一个中级的c++开发。

  • 硬件配备
    三方提供数据查询支持

  • 软件配备
    1.浏览器运行
    提供一款基于Scatter的优化版本
    2.App运行
    合作接入三方的App

综上来看,大部分的难度,还是在全节点维护,以及链上数据查询方面,投入较大。

期望的EOS Dapp开发环境

  1. 提供一个 eosservice.js的开发库,对于前端来说,只关心此库的使用,不用关心什么其他的区块链相关的知识(基于eosjs再简化下)。
  2. 三方提供数据查询服务的公司,封装相关的接口,提供查询的js sdk。
  3. 一个类似优化版本的Scatter扩展。
  4. 合约开发文档,案例以及部署调试工具。

最后想说EOS加油,社区加油。

如何计算一个EOS合约部署的成本,以及消耗

本文由来

最近在做一个Dapp,里面有部分功能涉及帮助用户存储一定量的数据,所以需要有个计算用户成本的逻辑,由用户持续为自己消耗的存储付费。

开始计算合约成本

合约的部署成本

等于合约源码编译后WASM文件大小的10倍(mainnet)。相关源码在(GitHub code)查找setcode_ram_bytes_multiplier。这涵盖了VM和其他内存的开销,这是发布合约的最基本消耗。

合约的数据成本

对于系统账户的RAM消耗计算是在eosio代码(GitHub code)中,通过_db检索资源消耗,这需要访问运行的chainbase数据库。据我目前了解,还不能从合约直接这样获取。
那目前预计方案为,跟踪合约执行,并根据每行中存储的数据估算成本。

初步方案实现

用户发起转账到合约账户,内联购买RAM到合约账户,并记录增加的RAM到合约内对应账户下。
新增加数据时,计算本次的使用量,如果合约内账户剩余RAM足够的话,减去对应的数量,不够的话,提示用户充值。
删除数据时,计算本次数据的删除量,增加的内存量到合约内对应账户下。
如果做公益性质,由于数据估算可能有一定量的偏差,可以引入一定量的手续费,避免损失。

TODO

等方案实现完,再来继续完善本文。

参考:

faucet.cryptokylin reach 24 hours max token amount

麒麟网获取测试代币时
http://faucet.cryptokylin.io/get_token?bcskillsurou
返回

{
    msg: "reach 24 hours max token amount"
}

可尝试使用直接ip 访问获取
http://13.230.87.138/get_token?bcskillsurou

get_actions error in version v1.3.+

目前了解到的方案是,nodeos 重新启动,添加以下参数,重建数据,也许之后版本会有新的修复方案

--hard-replay-blockchain

github

How to pass struct to action

I have a simple struct with one member and want to pass this to an action.

struct field {
    bool is_private;
  };

  // @abi action
  // Create a new profile
  void create(const account_name& account, const field& first_name);

The .abi looks like this:

  "structs": [{
      "name": "field",
      "base": "",
      "fields": [{
          "name": "is_private",
          "type": "bool"
        }
      ]
    },{
      "name": "create",
      "base": "",
      "fields": [{
          "name": "account",
          "type": "name"
        },{
          "name": "first_name",
          "type": "field"
        }
      ]
    }
...

I tried a lot of different variations along the lines of cleos push action "contract" "create" '[acc_name, {"is_private": "true"}]' -p acc_name@active. But none of them seem to work. Are structs supported and if yes how do you pass the argument?

Thanks a lot!


Found the solution myself. You have to recreate the .abi structure in json:
cleos push action contract create '{"account":"acc_name","first_name":{"is_private":true"}}' -p acc_name@active

https://github.com/EOSIO/eos/issues/4914