Makes your EOS contracts action data understandable, by human.
由于 EOS 合约的复杂性,普通用户很难理解链上发生了什么。Dapp 开发者也经常被用户质疑链上数据的含义。
EOS Semantics 的出现,可以让普通用户也可以理解合约数据,降低普通用户的参与门槛,从而提高 Dapp 的活跃度。
EOSPark 是第一个提出并实现合约语义化的区块链浏览器。最初只应用于系统合约,获得了用户的广泛好评。现在将其语义化能力开放出来,进一步服务于广大合约开发者。
EOS Semantics 的基本原理类似于李嘉图合约,即将合约 action 的数据通过一个 template 渲染成人类可读的自然语言。
除此之外,EOS Semantics 提供了更多更为强大的功能,例如账号、合约跳转,代码高亮,多语言等等。
以 EOS 系统合约 eosio.token 的 issue action 为例,其合约数据为:
{
"data": {
"quantity": "1.0000 EOS",
"to": "supereospark",
"memo": "Good job EOS Semantics"
}
}
则对应需要提供的语义化信息结构如下:
{
"issue": {
"actionName": "Issue Token",
"template": "System issued <Token :quantity="quantity" contract="eosio.token"/> to <Account :to="to" /> <Memo>{{memo}}</Memo>"
}
}
最终会渲染出如下结构:
- Clone
git clone https://github.com/BlockABC/eos-semantics
cd eos-semantics
-
增加语义化信息
2.1 在 Playground 测试 template 数据
2.2 在
/semantics
目录下面新建以以合约账号为名的 .js 文件,并增加语义化信息。2.3 编译
npm run build
-
提交 PR
可读的 action 名称
template 是一个 html 模板,采用了类似于 Vue 的模板语法。如果您进行过前端开发,那对您应该是没有压力。 需要注意的是,为了安全性,template 所采用的语法集是 Vue 的子集,并且限制了部分能力。
为了方便您的使用,EOS Semantics 还内置了一些组件,同时可以统一组件风格。
if 组件,根据参数,条件为真/假时会渲染子组件
<If :condition="true">Component on true</If>
渲染一个 a 标签
<Link :to="url">Some Web Page</Link>
传入 accounts 数组,渲染accounts列表
<Accounts :accounts="accounts" />
渲染一个 a 标签,可以跳转到相应的 account 页面
<Account :to="account" />
渲染一个 a 标签,可以跳转到相应的 contract 页面
<Contract :to="account" />
渲染一个转账信息
<Transfer :from="from" :to="to" :quantity="quantity" :contract="action.account" :memo="memo"/>
渲染一个 memo(一般用于transfer)
<Memo>{{memo}}</Memo>
渲染一个 Token,可以带有数量,支持多种 token 格式
<!-- 只渲染 Token 名称(和发币账户) -->
<Token :symbol="symbol" contract="eosio.token"/>
<!-- 带有数量的 token -->
<Token :symbol="symbol" contract="eosio.token" :amount="amount"/>
<!-- 链上数据可能存储的是无小数的数量,此时需要指明该 token 的小数位数 -->
<Token :symbol="symbol" contract="eosio.token" :amount="amount" :decimals="4"/>
<!-- eos 内部表示方式的格式 -->
<Token symbolValue="47575848338" quantity="123.4567 EOS"/>
渲染一个高亮的json
<Highlight :json="auth"/>
渲染一个逗号分隔的数字
<Quantity :num="num"/>
渲染一个 action 名称
<ActionInterface :account="code" :name="type"/>
请加 EOSPark 微信小助手进群联系我们: Asst_BlockAbC。