MetaProtocols.com是一个记录metaid相关协议的网站。该网站能方便用户搜索,查看现有协议。也可在此网站上发布新协议和编辑自己的协议。
1.MetaProtocols.com
MetaProtocols.com开发目标
-
展示基于MetaID的开发模式是可以很快开发一个应用
-
打造一个MetaID+ShowMeta/MetaSV如何实现Serverless网站(只是第一版,长远来说还是需要简单的后台来进行管理,比如黑名单,敏感词过滤等)
-
开发者能方便地在此网站上浏览发布协议
预期开发时间
在以下条件满足的前提下,开发时间应该可以在48小时内完成
-
中间件能按需求快速返回数据;
-
设计稿完成。
-
showmoney第三方登录/注册相对比较完善
-
相关协议制定好。
2. 登录/注册
登录/注册采用ShowMoney的第三方授权的登录和注册功能;
用户登录完毕后,方可使用以下网站主要功能:
- 发布协议
- 编辑协议
- 为协议点赞
- 评论协议
3. 发表协议
用户进入发布协议页面后,可进行协议发布。协议发布采用9.1 发表meta协议协议。用户界面如下:
用户填完表单后,采用metaProtocols协议来构建这样的一个json对象
metaProtocolData:
{
"protocolTitle":表单上协议名称,
"protocolAuthors":"这是记录协议作者",
"protocolIdentifier":表单上的协议标识,
"protocolHASHID":这是12位哈希值,采用BRFCID生成方式,根据protocolTitle、protocolAuthors、版本号来生成,
"protocolType":从协议类型选择选择,
"protocolEncoding":从协议编码框选择,
"protocolContent":表单上的协议内容,
"protocolDescription":表单上的协议说明,
"protocolImages":暂为空
}
然后构建如下的交易:
OP_0 OP_RETURN meta <address> <MetaProtocols TxID> MetaID <address> <metaProtocolData> 0 <表单上的版本号> applicaiton/json UTF-8
如果用户在 Protocols节点下还没有MetaProtocols节点,则需先新建节点MetaProtocols:
OP_0 OP_RETURN meta <address> <Protocols TxID> MetaID MetaProtocols <protocolHASHID> 0 1 NULL NULL
提交交易后即发表成功。
4. 首页协议列表
向数据服务商进行以下类似的查询
查询
"find":{
"parentNode":"MetaProtocols",
"isValid":true, //是否可用的
"isNew":true //最新版本
}
用户获取全网metaid用户所提交的metaprotocol协议。
然后能从数据服务商获取一组协议数组。数组元素内应该最少包含下信息:
协议的data部分,应为完整json格式数据(参见9.1 发表协议协议)
协议版本号,协议创建时间
metaid,用户名字,用户头像,txid等
如图:
5. 个人中心
点击用户头像或自己头像,均可进入个人中心页面。
个人中心主要时展示用户自己发布的协议和一些简单的信息。最终展示效果如下:
需注意的是,如果进入的是自己的个人中心页面,则协议中的”新增版本“按钮对自己可用,否则不显示该按钮。
获取指定用户发布的协议很简单,向数据服务商请求类似的查询即可:
查询
"find":{
"parentNode":"MetaProtocols",
"metaID":"{用户的metaID}"
"isValid":true, //是否可用的
"isNew":true //最新版本
}
获得数据后如首页那样异步获取点赞数即可处理数据,渲染页面即可。
总收入数的获取
总收入数为用户所有发表协议的总获赞收入,可向数据服务商请求类似的查询:
查询
"find":{
"parentNode":"ShowLike",
"data.payTo":"{用户的metaID}"
"data.payTO":{"$in":[所有的out地址]} //payTo地址和真实打款地址一致
"data.Pay":{"$in":[所有的out地址的输出金额]}//pay金额和打款金额一致
”data.toTx“:{"$in":[所有MetaProtocols下的本人交易]} //只统计协议部分的点赞,不统计其他应用的点赞。
"isValid":true, //是否可用的
"isNew":true //最新版本
}
总协议数
获取自己的总协议数,可向数据服务商请求类似的查询:
查询
"find":{
"parentNode":"MetaProtocols",
"MetaID":"{用户的metaID}"
"isValid":true, //是否可用的
"isNew":true //最新版本
}
获取返回结果的长度即可。
新增版本/编辑界面
当用户进入自己的个人中心页面时,应能在每个协议中看到”新增版本“按钮。用户点击后,即进入编辑协议界面。编辑界面和新增协议一致,只是表单内容将从该协议的最新版本复制过去。并且版本号自动加一。并启动metanet的修改模式新增协议:
- 不检测相同的protocolIndentifier
- 更新相关的version和协议内容
- 构建op_return后的address和上一个最新的协议address相同。
6. 协议详情
用户点击协议,即可根据协议tx进入协议详情页。
获取协议详情很简单,可向服务商直接查询tx,如:
"find":{
"tx":"{需查询协议tx}"
}
然后根据反馈的结果,按指定协议,即9.1 发表协议协议的协议格式解释data内容,即可获得相关数据,渲染成如下页面。
7. 点赞处理
点赞是采用9.2 简单点赞协议,用户点击点赞后,构建一个SimpleLike协议,参考如下:
{
"isLike":"1",
"toTx":协议的txID,
"pay":5000
”payTo":协议创建者rootAddress
}
用户确认后,构建类似如下的交易
OP_0 OP_RETURN meta <address> <parennt TxID> MetaID <address> {"isLike":"1","toTx":协议的txID,"pay":5000”payTo":协议创建者rootAddress} 0 1 application/json UTF-8
其中一个out的地址和金额应该和payTo和pay中的值一致
本应用中,点赞规则为:
- payTo:为协议创建者metaID;
- pay:最少一次点赞不少于5000聪
8. 历史版本查看
每个协议详情页面下均有一个历史版本查看按钮,点击后,用户可以查看该协议的所有历史版本。参考设计图如下:
可向数据服务获取类似如的下查询
查询
"find":{
"parentNode":"MetaProtocols",
"data.protocolIdentifier":"{协议的标识ID}",
"metaID":"{用户的metaID}"
"isValid":true, //是否可用的
}
关键点是将是获取当前版本的过滤条件去掉即可查看所有历史版本。
9. 相关协议
9.1 发表协议协议
协议名称:metaprotocols发布协议
协议作者:MetaID Team
协议标识:MetaProtocols
协议格式和编码:applicaition/json, UTF-8
协议内容
{
"protocolTitle":"{这是协议标题,如一个xx协议}",
"protocolAuthors":"{这是记录协议作者}",
"protocolIdentifier":"{这是协议标识,如xxProtocol}",
"protocolHASHID":"{这是12位哈希值,和protocolIdentifier一起构成唯一协议名}",
"protocolType":"{协议格式,例如applicaiton/json代表json格式}",
"protocolEncoding":"{协议编码,例如UTF-8}",
"protocolContent":"{协议内容实例,一般放示例性例子内容,例如本段文字,}",
"ProtocolContentType":{协议内容的文本格式",如text/plain"},
"protocolDescription":"{协议的详细说明,例如下面这段文字}",
"ProtocolDescriptionType":{协议描述的文本格式,如"text/plain"},
"protocolImages":['采用B协议的图片tx地址','存放和协议相关的说明性图片']
}
协议描述:
protocolEncoding,为协议编码,参考https://www.iana.org/assignments/character-sets/character-sets.xhtml
ProtocolContentType和ProtocolDescriptionType可接受的格式:
text/plain,text/html,text
9.2 支付点赞协议
协议名称:简单点赞协议
协议标识:PayLike
协议格式和编码:applicaition/json, UTF-8
协议内容:
{
"isLike":"{1为点赞,-1为反对,其他不处理}",
"toTx":"{点赞的交易ID}",
"pay":"{向payTo指定用户支付的金额,默认为2000聪}"
”payTo":"{支付对象的地址}"
}
9.3 支付评论协议
**中文协议名称:**支付评论协议
协议标识: PayComment
协议格式: Applicaiton/json
协议实例:
{
"createTime":"{创建时间}",
"content":"{内容}",
"contentType":"内容格式,默认text/plain",
"commentTo":"评论是针对某tx或URL",
"pay":"{向payTo指定用户支付的金额,默认为5000聪}"
"payTo":"{支付对象的metaid}"
}