Welcome to YOYOW's documentation!

YOYOW 简介

YOYOW 的名称来自英文 You Own Your Own Words,其目标是建立一个利用区块链技术,使用去中心化的共识方式为内容生产领域进行贡献定价和权益回报的网络,构建一套合理的内容收益分配机制使内容生产者、内容投资者、内容筛选者和生态建设者都能得到合理的激励与回报,同时构建一个基于用户内容评价的价值网络。

与其他区块链系统不同,借助于DPoS的共识机制为了适应内容生产领域的生态,YOYOW设计了更多的用户角色,独特的密钥体系和丰富的资产类型。

YOYOW 角色设计

在系统生态中,为了兼顾效率和公平,YOYOW设计了完善的用户体系,主要包括普通用户,平台,理事会,见证人。

普通用户

普通用户是YOYOW网络的主要参与者,在YOYOW网络中,普通用户在各个平台共享统一的账号体系,拥有转账、选举等权限。

平台

普通用户抵押一定的YOYO代币可称为平台。用户可以 普通用户通过 YOYOW 钱包对平台进行授权,授权平台使用其零钱权限,用于跨站点登陆、对内容评分、发布内容、评论等操作,普通用户也可以随时撤销授权。

理事会

理事会是YOYOW网络中的管理机构,由YOYOW用户投票产生,负责发起议案和对议案进行投票表决。议案的内容主要为调整系统的可调参数,比如各种交易的费率,最高评分权重等,也包括区块生产间隔时间、区块奖励等。

见证人

见证人是区块的生产者,负责收集广播的各种交易并打包到区块中,因此见证人生产区块也可以获得相应的 YOYO 代币回报。

密钥体系

在区块链项目中,私钥是账号的重中之重。然而,当一个用户做任何操作都使用账号私钥签名的话,无疑极大的增加了账号的风险。考虑到不同权限不同的安全级别,YOYOW体系中分别设定了三级密钥体系:主控密钥资金密钥零钱密钥

  • 主控密钥为最高权限密钥,不到万不得已的时候不应该使用主控密钥;
  • 资金密钥可以操作余额;
  • 零钱密钥可以操作零钱,也可以用来发帖,点赞,登陆鉴权等。
  • 除了跟资产相关的三级密钥,还有一个备注密钥用来加密和查看交易的备注信息。

资产类型

YOYOW网络内有三类资产:YOYO代币用户发行资产(IOU),积分

YOYO代币

在YOYOW的账户里,基础资产为YOYO 代币,有两处可进行存放:『余额』和『零钱』。

  • 余额』拥有较高的安全性,建议大额的YOYO在余额中存储。
  • 零钱』进行小额的存储与转账,当用户授予零钱权限给平台时,平台可以拥有操作”零钱” 的权限,可理解为免密支付。

用户发行资产(IOU)

用户可以发行自定义的资产:根据自身业务,创建在自己平台内流通的Token。后续会提供用户发行资产(IOU)与YOYO之间的便捷兑换方式,共享便捷的变现渠道。

积分

积分的作用是抵扣手续费。当账户"余额"拥有一定数量的YOYO时,系统会自动积累积分,在支付手续费时,您可以选择通过积分进行抵扣。 更多信息可以参考:积分

白皮书

白皮书内容请移步白皮书下载

测试网

测试网可执行文件

测试网使用的可执行文件在 yoyow-core-testnet下载。

测试网网页钱包

测试网使用的网页钱包地址:http://demo.yoyow.org:8000/#/

可以在网页钱包注册测试网账户,注册成功后会送12000个TEST YOYO。

测试网浏览器

测试网浏览器地址:https://testnet.explorer.yoyow.org/

运行测试网node节点

搭建测试网全节点,直接运行下载的测试网的yoyow_node即可,以Ubuntu环境为例

./yoyow_node  --rpc-endpoint 127.0.0.1:8090 

测试网公共node节点

如果不想自己搭建测试网node全节点,可以直接使用公共的node全节点:

websocket 接口地址: wss://api.testnet.yoyow.org
jsonrpc 接口地址: https://api.testnet.yoyow.org/rpc

运行测试网钱包

如果使用公共的node节点,yoyow_client 需要添加-s参数来指定链接的node地址:

./yoyow_client -s wss://api.testnet.yoyow.org -r 0.0.0.0:8091 -H 127.0.0.1:8093

其他

如果您在测试中遇到任何问题,比如测试币不够,请加小助手微信:yoyow99,申请进YOYOW开发者群。

_images/yoyow99.pngyoyow99

用户注册

注册账户

YOYOW平台的账号是一串数字(类似QQ号码),注册时由系统分配,未来会开放昵称功能。

目前只能通过网页钱包或者客户端钱包注册账号。 可以参考:网页钱包注册方法

特别需要提醒的是,注册时会生成主控密钥,该私钥仅在注册时候显示一次,网页钱包或者客户端钱包并不会保存,一定要妥善保存。

密钥权限说明

YOYOW的体系中,每个账户有四类密钥 主控密钥:最高权限,能修改本账号的其它权限的密钥。注册成功时显示的密钥即是主控密钥。 资金密钥:拥有动用余额资金的权限,比如控制转账操作。 次级密钥:拥有动用零钱包的权限,其中包括对平台的授权操作,也被称作零钱密钥。 备注密钥:用于查看转账等操作的备注信息。

不同的密钥权限只能做权限内的事情,既不能不能向上越权也不能向下越权。资金密钥没有动用零钱的权限,次级密钥也没有动用余额的权限;主控密钥也没有动用余额和零钱的权限,但主控密钥可以重置其他权限的密钥,在网页钱包中导入账号主控密钥即可重置其他三类密钥。

更多密钥相关的信息可以参考yoyow私钥教程

密钥的保存

主控密钥仅在注册成功时出现一次,浏览器不会保存该私钥,YOYOW也不会保存该私钥。建议将主控密钥妥善,安全的保存,需要保证不会丢失,不会被盗,在网盘、笔记中明文保存都是比较危险的。一般情况下也建议不要轻易动用主控密钥。

在网页钱包中,其他低权限的私钥会使用您的钱包密码进行加密后保存在本地浏览器数据库中,客户端也是同理。某些特殊情况下(如:更换新的计算机、计算机故障或浏览器崩溃)导致您浏览器本地数据丢失,可以再通过导入主控密钥来重建账号。

编译运行yoyow-core

推荐硬件环境

系统配置: 两核,4G内存 推荐系统: Ubuntu 16.04 LTS (64-bit)

安装依赖

sudo apt-get update
sudo apt-get install autoconf cmake make automake libtool git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev

编译脚本

git clone https://github.com/yoyow-org/yoyow-core.git
cd yoyow-core
git checkout yy-mainnet # may substitute "yy-mainnet" with current release tag
git submodule update --init --recursive
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
make yoyow_node
make yoyow_client

运行

编译完成后主要生成两个二进制文件,yoyow_node和yoyow_client。

yoyow_node一般被称为节点程序,主要用来连接区块链网络,作用包括同步链上数据,广播交易,提供基础的API等。

yoyow_client 一般被叫称为客户端程序,对节点程序提供的API进一步封装,为用户提供更友好的API,同时提供了私钥保存管理,加密签名的功能,因此也被称为钱包程序。

节点程序

./programs/yoyow_node/yoyow_node

节点程序运行时会自动创建存放数据和配置文件的目录witness_node_data_dir,会花费几个小时同步完所有的数据。同步完成后,可以通过 Ctrl+C 停止运行。

需要注意的是,输入Ctrl+C后,程序依然会继续运行一会,不要再次键入Ctrl+C,否则会导致数据库不一致,下次启动node可能需要长时间的replay。

收到Ctrl+C后,程序会在日志中打印出

1553960ms asio       main.cpp:238                  operator()           ] Caught SIGINT attempting to exit cleanly
1553960ms th_a       main.cpp:251                  main                 ] Exiting from signal 2

此时耐心等待程序退出即可。

节点程序运行时,默认并不会开放websockt接口,需要在执行时添加参数

./programs/yoyow_node/yoyow_node --rpc-endpoint 127.0.0.1:8090

也可以直接修改配置文件witness_node_data_dir/config.ini中rpc-endpoint的配置。

客户端程序(钱包)

客户端程序在运行时需要连接到节点程序的websocket接口,默认会尝试连接127.0.0.1:8090,也可以使用-s参数指定其他地址。

./programs/yoyow_client/yoyow_client -s wss://api.testnet.yoyow.org

客户端程序提供了一个可以交互的命令行,可以通过命令行键入相关命令执行一些操作。

如前文所言,客户端程序保存有私钥,从安全考虑在使用到私钥的操作中,需要先使用密码解锁客户端,设置密码以及unlock的命令如下:

>>> set_password <PASSWORD>
>>> unlock <PASSWORD>

然后可以导入私钥

unlocked >>>  import_key <account> <private_key>

更多支持的命令,可以通过help命令查看,或者查看wallet api 文档

平台简介

平台是 YOYOW 网络中提供内容存储、用户交互、授权登陆等服务的服务提供商,第三方可通过抵押 YOYO 代币成为平台,同时理事会有权利在平台违反社区共识/条例时吊销平台资格并处以其他处罚。

平台条件

普通账户需要抵押足够的押金才能成为平台账户,目前需要抵押10000 YOYO,创建平台需要消耗 1000 YOYO的手续费。

用户授权平台

普通用户可以通过YOYOW钱包对平台进行授权,可以授权平台代理使用其鉴权权限,该权限可用于进行跨站点登录、单点登录等,共享YOYOW生态中的所有用户。 用户授权本质上是指普通账户将零钱权限授予平台,普通账户可以在平台构建的生态中进行小额的“免密支付”,帮助平台快速拥有流通性较强的Token。平台也可以使用自己发行的Token,参见用户发行资产 更多获取用户授权的信息可以查看平台接入概述

平台相关操作

以下相关操作命令可以在yoyow_client中交互命令行中执行

获取平台数量

get_platform_count

详见:get_platform_count

获取平台信息

# get_platform <owner_account>
get_platform 250926091

详见:get_platform

查询平台清单

# list_platforms <lowerbound> <limit> <order_by>
list_platforms 0 5 1

详见:list_committee_members

创建平台

# create_platform <owner_account> <name> <pledge_amount> <pledge_asset_symbol> <url> <extra_data> <csaf_fee> <broadcast>
create_platform 223331844 yoyow.club 10000 YOYO "http://yoyow.club" null true true

详见:create_platform

更新平台信息

# update_platform <platform_account> <name> <pledge_amount> <pledge_asset_symbol> <url> <extra_data> <csaf_fee> <broadcast>
update_platform 223331844 NUUUU null null "http://www.example.com" "http://www.example.com" true true

详见:update_platform

为平台投票

# update_platform_votes <voting_account> <platforms_to_add> <platforms_to_remove> <csaf_fee> <broadcast>
update_platform_votes 250926091 ["223331844"] [] true true

详见:update_platform_votes

对平台授权

# account_auth_platform <account> <platform_owner> <csaf_fee> <broadcast> 
account_auth_platform 250926091 223331844 true true

详见:account_auth_platform

取消平台授权

# account_cancel_auth_platform <account> <platform_owner> <csaf_fee> <broadcast>
account_cancel_auth_platform 250926091 223331844 true true

详见:account_cancel_auth_platform

见证人简介

见证人职能

YOYOW 采用的是 DPoS + PoS灵活选择的共识机制,见证人充当传统的区块链项目中“矿工”角色。

其核心职责为打包交易(俗称“出块”),维护网络稳定运行; 见证人出块享有系统给予的奖励。

见证人资格(抵押)

任何账户抵押一定数量的YOYO ,即可成为见证人。抵押最小值,当前设置10000 YOYO,见证人可随时调整抵押金额。

注册见证人操作需要消耗1000 YOYO, 抵押最小值10000 YOYO,因此成为见证人也至少需要11000 个 YOYO。

见证人产生方式

YOYOW的见证人产生有两种方式

  1. 投票选举
  2. 抵押YOYOW

通过以上两种方式,共有3种见证人类型:

  1. 主力见证人:由持币人直接投票产生,按“有效得票数”排名,前 11 名
  2. 备选见证人:由持币人直接投票产生,按“有效得票数”排名,前 11 名之外的,其他所有候选人按得票数量加权,轮流上岗。当前为第12~14名,每轮选出3位。
  3. 矿工见证人:按抵押排名产生,按“有效抵押金额”加权,轮流上岗。如:只有ABC三人抵押,其中A有效抵押6个币,B有效抵押3个币,C有效抵押1个币,那么在后续100个块中,应该安排A出块60个,B出块30个,C出块10个。矿工见证人每轮选出7位。

综上: YOYOW的见证人产生机制是根据“得票数”与“抵押数”的情况,预先选出21位见证人(11+3+7)。 选出的见证人轮流出块,一轮时间约为63秒,当21位见证人都出块完毕时,自动进行下一轮的选举。

见证人工资

每出一块,出块见证人获得相应工资/奖励。

按照当前理事会决议:

  • 主力见证人:每块工资0.3 YOYO
  • 备选见证人:每块工资0.3 YOYO
  • 矿工见证人:每块工资 0.5 YOYO

工资计入见证人的“待领取工资”,见证人可随时将“待领取工资”领取到自己的余额内。

见证人选举

  • 主力见证人 与 备选见证人,通过得票排名计算。投票规则详见投票
  • 矿工见证人,通过抵押排名计算。抵押排名规则详见抵押

见证人作恶惩罚机制

  • 双花企图嫌疑:如果一个见证人在同一高度出两个块,则认为有嫌疑企图制造分叉、实施双花攻击。
  • 如果网络检测到这种情况,或者有人举报,记录证据后,见证人强制离线,同时扣除部分押金。
  • 暂无举报奖励

见证人离线

  • 主动离线:需要临时维护时,见证人可以主动设置暂时离线
  • 强制离线:当见证人丢块时,如果上次出块时间在24小时外,该见证人自动设置为暂时离线,不再安排后续出块,位置由排名靠后的补上
  • 见证人手动重新在线后,即可重新参与后续出块安排

见证人抵押挖矿

普通账户可以参与抵押挖矿,账户抵押资产(YOYO)给见证人,有最小抵押限制(理事会参数 min_mining_pledge 控制)。

见证人参与抵押出块,获取的出块奖励,分成两部分,一部分见证人收取,一部分作为抵押分红按抵押量均分给抵押账户,两部分收益比例由抵押分红比例(见证人设定)确定;

只有见证人开启挖矿之后,账户才能抵押给该见证人,见证人不能抵押给自己,账户可以抵押给多个见证人。

见证人可以更新抵押,更新抵押金额也不能少于最小抵押;可以取消抵押,取消抵押时,不立刻返还抵押金额给账户,有一定期限的锁定期,由理事会参数mining_pledge_release_delay控制,当前为7天。到期后自动返还给抵押账户;如果见证人取消了自己的见证人抵押(即删除见证人),那么所有抵押金额也是7天之后返还给抵押账户。

见证人相关 FAQ

【待补充】

见证人相关操作

见证人节点搭建

搭建见证人的完整教程可以参考YOYOW见证人教程(Ubuntu)

查询

获取见证人信息。

# get_witness <owner_account>
get_witness 132826789

详见:get_witness

查询见证人清单

# list_witnesses <lower_bound> <limit> <order_by>
list_witnesses 0 5 1

详见:list_witnesses

创建见证人

# create_witness <owner_account> <block_signing_key> <pledge_amount> <pledge_asset_symbol> <url> <csaf_fee> <broadcast>
create_witness 223331844 YYW1111111111111111111111111111111114T1Anm 1000000 YOYO "http://www.yoyow.org" true true

详见:create_witness

更新见证人信息

# update_witness <witness_account> <block_signing_key> <pledge_amount> <pledge_asset_symbol> <url> <csaf_fee> <broadcast>
update_witness 223331844 null 100345 YOYO null true true

详见:update_witness

见证人投票

# update_witness_votes <voting_account> <witnesses_to_add> <witnesses_to_remove> <csaf_fee> <broadcast>
update_witness_votes 250926091 [abit] [] true true

详见:update_witness_votes

见证人离线

# 先设置离线
update_witness 25638 YYW1111111111111111111111111111111114T1Anm null null null true true
# 然后将押金改为0,押金过7天时间会退回(如果没有因为作恶被扣除的话)
update_witness 25638 null 0 YOYO null true true

领取见证人收益

# collect_witness_pay <witness_account> <pay_amount> <pay_asset_symbol> <csaf_fee> <broadcast>
collect_witness_pay 25638 100 YOYO true true

理事会简介

理事会由一组股东投票通过的理事会成员组成,理事会成员的职责在于设定系统运行参数。

理事会职责

  • 调节系统运行各项参数,包括手续费费率、出块奖励等
  • 理事会同时拥有部分决策权

理事会设定

  • 理事会成员数初始设定为5人,不可修改。
  • 每届理事会成员任期30天,不可修改
  • 初始理事会成员名单由系统指定,后续理事会由持币人投票选举产生
  • 理事会账户没有报酬

候选理事

  • 任何账户抵押一定数量的YOYO ,即可成为候选理事身份。当前最低抵押为 1000 YOYO
  • 只有候选理事,才有资格被投票成为正式理事。

理事会选举

  • 持币人一票一投:即每个账号同时只可支持一位候选人,持票人可随时修改投票
  • 其他规则如投票资格、有效票数、投票有效期、代理等,与见证人投票共用,参考投票
  • 换届时间点,得票最高的 5 个候选理事,成为新的在任理事。暂不设置最低票数

理事会提案

  • 在任理事会成员可以发起提案,由理事会全体成员表决
  • 每个提案包括如下属性:提案内容,表决截止时间,表决通过阈值,提案生效时间。
  • 提案通过的阈值根据提案类型预设,不可指定。暂时只设通过阈值,不设否决阈值。
  • 一个提案可包含多项内容,该情况下,必须全部通过或者全部不通过,通过阈值采用多项内容中最高阈值
  • 提案生效时间不得晚于发起理事的任期结束时间。生效时间可设为过去的时间,效果为通过后“即时生效”。
  • 理事会表决拥有三种状态: 赞成、中立、反对;提案发起人默认赞成;所有理事会成员每人一票,生效前均可改票。
  • 赞成人数达到阈值时,如果生效时间已过,则提案即时生效,否则提案将按计划在生效时间生效
  • 表决截止时间前,且提案生效前,表决人可以修改意见;表决截止时间后,不可修改意见
  • 理事会提案需在发起理事的任期内表决完成,没表决完成的提案,任期结束时自动作废;表决完成通过的提案,按计划生效,任期结束不影响提案效力
  • 提案生效并不等于修改的系统参数马上发挥作用,因为不同系统参数预设有不同启用条件/方式。

理事引退

  • 候选理事/正式理事 均可终止理事身份,系统会延迟返还押金,目前延迟1天。
  • 正式理事选择引退后,并不影响本任期内身份,但下个任期不再有被投票资格
  • 引退后,所有得票清零(换届时生效)
  • 若在延迟释放期间重新申请理事身份,尚未释放的币将重新锁定,但已清零的票将无法恢复。

理事会相关操作

以下相关操作命令可以在yoyow_client中交互命令行中执行

创建理事会账户

# create_committee_member <owner_account> <pledge_amount> <pledge_asset_symbol> <url> <csaf_fee> <broadcast>
create_committee_member 223331844 1000 YOYO "http://www.yoyow.org" true true

详见:create_committee_member

更新理事会账户

# update_committee_member <committee_member_account> <pledge_amount> <pledge_asset_symbol> <url> <csaf_fee> <broadcast>
update_committee_member 223331844 1000 YOYO "http://demo.yoyow.org" true true

详见:update_committee_member

投票给理事会

# update_committee_member_votes <voting_account> <committee_members_to_add> <committee_members_to_remove> <csaf_fee> <broadcast>
update_committee_member_votes 223331844 ["init1"], [],  true true

详见:update_committee_member_votes

获取理事会成员信息

# get_committee_member <owner_account> 
get_committee_member 25997

详见:get_committee_member

查看当前候选历史

# list_committee_members <lower_bound> <limit> <order_by>
list_committee_members 0 5 1

详见:list_committee_members

查看当前还未执行理事会提案

list_committee_proposals 

详见:list_committee_members

投票

YOYOW采用DPoS共识算法,根据这种算法,全网持有代币的人可以通过投票系统来选择见证人、理事会,从而实现对YOYOW系统的决策。

投票资格

  • 持币数量到达一定数量后,即可以获得投票资格,当前为10000 YOYO,参见参数表min_governance_voting_balance字段。
  • 被理事会设置黑名单的账户,丧失投票资格。

投票有效期

  • 拥有投票资格的用户,初次进行投票操作时激活投票意向。有效期为T ,初始默认90天。
  • 在有效期内,如有新的投票操作,则有效期递延时间T。即过期时间变更为:更新投票操作时间 + T
  • 在有效期内,如无新的投票操作,则认为不再有投票意向
  • 用户失去投票资格, 或不再有投票意向,则选票失效

投票方式

  • 理事会选举:一票一投,每个账号同时只可支持一位候选人,持票人可随时修改投票。
  • 见证人选举:一票多投,为了强化共识,每个账户可以给多个见证人投票。

有效得票计算

为增加投票公平性,计票综合考虑了投票者当前持币量、平均持币量、持币时间等因素

  • 账户在激活投票意向时,开始积累币龄。
  • 投票人的有效票数为前60天内的平均余额和账号当前余额,这两个值中的较小值,即:有效票数 = min(60天平均余额,当前余额)。也就是说,在币转入时,币龄慢慢积累增加相应部分;币转出时币龄立即减少相应部分。
  • 被投票人的得票数,等于所有支持者有效票数之和
  • 因为实时更新所有账户币龄计算量太大,故计票采用延迟更新模式,可能与实时数据有少量计票误差。

投票代理

  • 投票可设置代理人,如:账户A设置账户B为投票代理,则B的投票对象得到的票数为A的有效票数 + B的有效票数。 A 称之为委托人,B 称之为代理人
  • 可设置多层代理。如:账户A 设置账户B为投票代理,账户B设置了账户C为投票代理。但代理总层数有上限。
  • 不可代理自己。
  • 代理人进行投票操作时,会刷新委托人的投票意向有效期。
  • 如果代理人失去投票意向或者投票资格,代理关系自动解除,委托人投票状态变为“不投票给任何人”,委托人投票意向有效期不变
  • 代理人重新激活投票意向时,代理关系不恢复

抵押

目前,抵押可以用于升级平台账号,或申请矿工见证人。抵押只能抵押YOYO。

平台抵押

当前平台的最低抵押金额为10000 YOYO,根据当前抵押值判断平台的资格。该值可以由理事会修改,可以参考参数表说明中参数platform_min_pledge

理事会抵押

理事会的最低抵押金额为1000 YOYO

矿工见证人抵押

  • 矿工见证人根据各账号有效抵押数量计算应出块数量。如:只有ABC三人抵押,其中A有效抵押6个币,B有效抵押3个币,C有效抵押1个币,那么在后续100个块中,应该安排A出块60个,B出块30个,C出块10个。
  • 有效抵押数为'7天内平均抵押'与'当前抵押'两者较小值。即:增加抵押时,有效抵押数缓慢增加;降低或解除抵押时,有效抵押立即减少。

抵押金额的返还

降低抵押金额或者解除抵押时,押金延迟一段时间后退还,当前设置为7天。注:

  1. 连续多次降低抵押时,金额累加一起退还,计划退还时间以最后一次降低时间为准进行延迟
  2. 增加抵押时,如果当前账号有延迟退还的押金,优先从里面扣,不足部分从余额扣取

YOYO Token

YOYOW的核心资产是YOYO,YOYO可以存放在账户的余额或者零钱中。

余额

大额的YOYO建议存储在余额中。只有余额中的YOYO可以累积积分,积分可以用来抵扣手续费。

零钱

零钱建议存放小额的YOYO,日常的小额支付建议使用零钱而不是余额。

余额和零钱的设计

余额和零钱的设计主要是为了平衡易用性和安全性。动用余额和零钱是分别需要两个不同的权限,主控密钥控制余额,零钱密钥(次级密钥)控制零钱。

零钱权限可以授权给平台,以方便在平台构建的生态中自动交易,不用每次都动用自己密钥,以便减少风险。

因此,余额的设计是为了存放大额的资产,零钱不建议存放过多的资产。

用户发行资产

YOYOW提供了发行资产的功能,普通账户可以创建和发行各种自定义的资产(UIA)。

用户发行资产可以转账交易,因此,可被作为内容平台的奖励,替代传统的积分机制。

后期会开放YOYO与用户发行资产之间的兑换关系,更多有价值的玩法也会陆续推出。

发行资产

网页钱包中提供了简单的发行资产的操作,可以方便的指定发行Token的代码,总供应量,小数位数。如下图: _images/create_asset.png发行资产

发行资产的手续费包括基础手续费和每千字节的费用,基础手续费按Token代码的长度收费,目前基础手续费如下:

Token代码位数 基础手续费
3位 30000 YOYO
4位 3000 YOYO
5位或更长 300 YOYO

高级选项

除了简单的Token供应量外,用户发行资产可以定义更多功能。

  • 白名单:资产可以选择启用白名单,如果定义了白名单,则只有白名单的账户才可以持有,使用资产。
  • 黑名单:资产默认启用黑名单,在黑名单内的账户不可以持有,使用该资产。
  • 强制转账:资产可以设定允许强制转账,如果启用,该资产发行人可以强制转走或者收回其他人账户里的该类资产
  • 限制转账:资产可以设定允许限制转账,如果启用,则转账的发起者或者接收者必须是该资产发行人
  • 发行资产:资产创建完成后需要发行到账户才能流通,如果启用,则该资产发行人可以增加一定数量的该类资产到某账户,发行意味着增加该资产的当前流通总量
  • 修改流通上限:如果启用,则该资产发行人可以修改该资产的流通量上限

更多相关信息,请参考API文档中创建资产中请求参数的详细描述。

积分

积分是对YOYO持有者的奖励,当您的账号持有YOYO时,积分可随时间累积。积分积累有上限,您需要手动领取积分。

积分用途

积分目前唯一用途是抵扣手续费。在支付手续费时,您可以选择通过积分进行抵扣。100积分等价值于1YOYO

积分获取

  • 当账户'余额'部分拥有一定数量的YOYO时,系统会自动积累积分。
  • 积分需要手动领取。 可手动将待领取积分领取至您的账户
  • 积分领取速率: 当前设定每10000 YOYO 每天可领取 1 YOYO的等价值积分。

积分租借

后续会开通积分租借功能。

积分赠与

目前,可在"领取积分"操作时,选择已有的联系人账号,即可将积分领取至其账号。

资产相关操作

以下相关操作命令可以在yoyow_client中交互命令行中执行

普通转账

# transfer <from> <to> <amount> <asset_symbol> <memo> <broadcast>
transfer 250926091 209414065 100 YOYO "memo" true
# 或者 transfer_new <from> <to> <amount> <asset_symbol> <memo> <csaf_fee> <broadcast>
transfer_new 250926091 209414065 100 YOYO "memo" true true

详见:transfer

查询

查询账户YOYO余额

该函数只返回账户拥有的YOYO数

# list_account_balances <account> 
list_account_balances 250926091

详见:list_account_balances

查询账户所有资产余额

该函数暂时没有钱包的接口,只能调用节点的api,比如使用wscat链接websocket端口

{"id":1, "method":"call", "params":[0,"get_account_balances",["250926091", []]]}

详见:get_account_balances

积分相关

查看积分

get_full_account 可以查看积分,在返回结果中的"statistics"中,返回有csaf,core_balance,prepaid,分别对应积分,余额,零钱

# get_full_account <account_name_or_id>
get_full_account 250926091

领取到当前时间的积分

# collect_csaf <from> <to> <amount> <asset_symbol> <broadcast>
collect_csaf 250926091 209414065 100 YOYO true 
# 或者 collect_csaf <from> <to> <amount> <asset_symbol> <broadcast>
collect_csaf 250926091 209414065 100 YOYO true true

详见:collect_csaf

领取积累到指定时间的积分

# collect_csaf_with_time <from> <to> <amount> <asset_symbol> <time> <csaf_fee> <broadcast>
collect_csaf_with_time 250926091 209414065 100 YOYO "2018-04-16T02:44:00" true true

详见:collect_csaf_with_time

用户发行资产

用户发行资产有两个核心的操作,创建资产(create_asset)和发行资产(issue_asset),刚创建完成的资产并不能使用(没有流通),需要issue给指定的账户才可以使用。

获取资产信息

# get_asset <asset_name_or_id>
get_asset 3

详见:get_asset

查询资产清单

# list_assets <lower_bound_symbol> <limit> 
list_assets YOYO 4

详见:list_assets

创建资产

# create_asset <issuer> <symbol> <precision> <common> <initial_supply> <csaf_fee> <broadcast>
create_asset 250926091 TOTOTO 4 {"max_supply":300000,"market_fee_percent":0,"max_market_fee":0,"issuer_permissions":4} 200000 true true

详见:create_asset

发行资产

# issue_asset <to_account> <amount> <symbol> <memo> <csaf_fee> <broadcast>
issue_asset 250926091 10000 WOWO memo true true

详见:issue_asset

更新资产

# update_asset <symbol> <new_issuer> <new_options> <csaf_fee> <broadcast>
update_asset WOWO null {"max_supply":"2000000000"} true true

详见:update_asset

销毁资产

# reserve_asset <from> <amount> <symbol> <csaf_fee> <broadcast>
reserve_asset 250926091 1000 WOWO true true

详见:reserve_asset

节点API说明

节点连接方式

测试环境:

websocket 接口地址: wss://api.testnet.yoyow.org
jsonrpc 接口地址: https://api.testnet.yoyow.org/rpc

正式环境:

websocket 接口地址:ws://139.198.1.234:9000
jsonrpc 接口地址: http://139.198.1.234:9000/rpc
使用wscat连接, wscat安装方法
wscat -c wss://api.testnet.yoyow.org
使用curl post data 连接
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' https://api.testnet.yoyow.org/rpc

API分类

YOYOW的API分类与BTS类似,以下重点介绍database api和history api。 在通过websocket 请求时,参数为一个json字符串,格式如下:

{"id":1, "method":"call", "params":[API等级,"函数名",[具体参数]]}

在使用时,需要填写API等级,函数名,和具体参数3项,其中API等级可以通过websocket 发送

{"id":2, "method":"call", "params":[1,"history",[]]}

来获取。比如以上请求会返回:

{
  "id": 2,
  "jsonrpc": "2.0",
  "result": 2
}

其中result 为 2,代表着使用history api 时,API等级需要填写2.(注意:不一定每个YOYOW节点都返回同样的配置,这取决于每个节点对暴露API的限制)

database的API默认可以直接通过指定API等级为0来调用,也可以使用通过

{"id":2, "method":"call", "params":[1,"database",[]]}

查询到的result的值来调用。

database API

1.1.1 get_required_signatures

根据给定的交易(可能已包含签名),和给定的备用公钥集合,返回与签署该交易有关的 3 个集合:

备用公钥集合的一个可用子集,可以用来签署该交易
可能还需要的公钥(不在签名中,也不在备用公钥集合中)
交易中已包含的多余签名
支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
trx:交易,可能已包含签名
available_keys:公钥的数组 例如:["YYW5eDSFYeiqyFRajfPP8tTZMm7fUeyc7H65zmnHtDW4SQJdwqTBD"]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_required_signatures",[{"operations":[[0,{"fee":{"total":{"amount":100000,"asset_id":0}},"from":250926091,"to":223331844,"amount":{"amount":100000,"asset_id":0},"extensions":{}}]]}, ["YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD"]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [{"operations":[[0,{"fee":{"total":{"amount":100000,"asset_id":0}},"from":250926091,"to":223331844,"amount":{"amount":100000,"asset_id":0},"extensions":{}}]]}, ["YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD"]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    [
      [
        "YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD"
      ],  //备用公钥集合的一个可用子集,可以用来签署该交易
      [
        "YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71",
        "YYW7UoNSEQAUPvnvoBRVKyPAD9845esnpiK6MgHinsn5yqr5UgT5W"
      ] //还需要的公钥(不在签名中,也不在备用公钥集合中)
    ],
    []  // 交易中已包含的多余签名
  ]
}

1.1.2 get_accounts_by_uid

根据 uid 返回多个账号信息。数量必须 <= 1000。

如果该 uid 不存在,对应位置结果为 null 。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account_uids:uid数组,长度小于1000 例如:["250926091"]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_accounts_by_uid",[["250926091"]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.2.1378",
        "uid": 250926091,
        "name": "yoyo250926091",
        "owner":
        {
            "weight_threshold": 1,
            "account_uid_auths": [],
            "key_auths": [
                ["YYW7UoNSEQAUPvnvoBRVKyPAD9845esnpiK6MgHinsn5yqr5UgT5W", 1]
            ]
        },
        "active":
        {
            "weight_threshold": 1,
            "account_uid_auths": [],
            "key_auths": [
                ["YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71", 1]
            ]
        },
        "secondary":
        {
            "weight_threshold": 1,
            "account_uid_auths": [],
            "key_auths": [
                ["YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD", 1]
            ]
        },
        "memo_key": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
        "reg_info":
        {
            "registrar": 206336051,
            "referrer": 25997,
            "registrar_percent": 0,
            "referrer_percent": 0,
            "allowance_per_article":
            {
                "amount": 0,
                "asset_id": 0
            },
            "max_share_per_article":
            {
                "amount": 0,
                "asset_id": 0
            },
            "max_share_total":
            {
                "amount": 0,
                "asset_id": 0
            },
            "buyout_percent": 10000
        },
        "can_post": true,
        "can_reply": false,
        "can_rate": false,
        "is_full_member": true,
        "is_registrar": false,
        "is_admin": false,
        "create_time": "2018-04-03T08:21:00",
        "last_update_time": "2018-04-03T08:21:00",
        "active_data": "{}",
        "secondary_data": "{}",
        "statistics": "2.5.1378"
    }]
}

1.1.3 get_account_balances

根据 uid和资产类型查询资产余额。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
uid:uid,例如:"250926091"
assets:资产种类id的列表,0代表核心资产。例如:[0,1]。如果该值为空([]) 则返回该账户里的所有资产余额
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_account_balances",["250926091", [0,1]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_account_balances", ["250926091", [0,1]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "amount": 1099970704,
        "asset_id": 0
    },
    {
        "amount": 0,
        "asset_id": 1
    }]
}

1.1.4 get_post

根据平台所有者 uid 、发帖者 uid 、帖子 pid 返回帖子信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
platform_owner:平台owner的id
poster_uid:poster的id
post_pid:post的id 例如:1
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_post",["223331844",223331844,0,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_post", [["250926091"]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.7.14",
    "platform": 223331844,
    "poster": 223331844,
    "post_pid": 1,
    "hash_value": "asdfasdfasdfasdf",
    "extra_data": "{}",
    "title": "post a",
    "body": "post b",
    "create_time": "2018-05-03T12:40:39",
    "last_update_time": "2018-05-03T12:40:39"
  }
}

1.1.5 get_posts_by_platform_poster

根据平台所有者 uid 、 发帖者 uid 、发帖时间段 查询帖子列表。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
platform_owner:平台owner的id
poster_uid:poster的id。poster_uid可以为 null ,此时查询所有用户的帖子。
create_time_range:
 限制时间段,由两个时间点组成,先后不限,查询范围为 最早时间 < 发帖时间 <= 最晚时间
limit:限制条数,不能超过 100
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_posts_by_platform_poster",[223331844, null, ["2018-04-03T12:42:36","2018-05-03T12:42:36"], 100]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [223331844, null, ["2018-04-03T12:42:36","2018-05-03T12:42:36"], 100]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果

结果按时间排序,最新的排最前。时间相同的,按实际入块顺序,后入块的排在前面。

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.7.14",
      "platform": 223331844,
      "poster": 223331844,
      "post_pid": 1,
      "hash_value": "asdfasdfasdfasdf",
      "extra_data": "{}",
      "title": "post a",
      "body": "post b",
      "create_time": "2018-05-03T12:40:39",
      "last_update_time": "2018-05-03T12:40:39"
    }
  ]
}

1.1.6 get_required_fee_data

给定一组操作,返回操作需要的手续费信息。该 API 只支持核心资产。

其中,

required_fee_data
{
   account_uid_type fee_payer_uid; // 付费人 uid
   int64_t          min_fee;       // 最低总费用,单位是核心资产去掉小数点后的值(与 asset 类型用法相同);
   int64_t          min_real_fee;  // 最低真实费用(不能用币天抵扣的部分),单位同上
};
支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
ops:uid数组,长度小于1000 例如:["250926091"]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_required_fee_data", [[[0,{"fee":{"total":{"amount":200000,"asset_id":0},"options":{"from_balance":{"amount":200000,"asset_id":0}}},"from":236542328,"to":228984329,"amount":{"amount":100000,"asset_id":0},"extensions":{"from_balance":{"amount":100000,"asset_id":0},"to_balance":{"amount":100000,"asset_id":0}}}]]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_required_fee_data", [[[0,{"fee":{"total":{"amount":200000,"asset_id":0},"options":{"from_balance":{"amount":200000,"asset_id":0}}},"from":236542328,"to":228984329,"amount":{"amount":100000,"asset_id":0},"extensions":{"from_balance":{"amount":100000,"asset_id":0},"to_balance":{"amount":100000,"asset_id":0}}}]]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "fee_payer_uid": 236542328,
      "min_fee": 20000,
      "min_real_fee": 0
    }
  ]
}

1.1.7 get_full_accounts_by_uid

根据一组账户 uid 获取对应信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
uids:uid数组,长度小于1000 例如:["250926091"]
options:options 数组

Options 数组可以有如下参数

{
optional fetch_account_object;
optional fetch_statistics;
optional fetch_csaf_leases_in;
optional fetch_csaf_leases_out;
optional fetch_voter_object;
optional fetch_witness_object;
optional fetch_witness_votes;
optional fetch_committee_member_object;
optional fetch_committee_member_votes;
optional fetch_platform_object;
optional fetch_platform_votes;
optional fetch_assets;
optional fetch_balances;
}
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_full_accounts_by_uid", [["250926091"],{}]]}

{"id":1, "method":"call", "params":[0, "get_full_accounts_by_uid", [["223331844"],{"fetch_assets": true}]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_full_accounts_by_uid", [["250926091"],{}]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        [250926091,
        {
            "account":
            {
                "id": "0.0.0",
                "uid": 0,
                "name": "",
                "owner":
                {
                    "weight_threshold": 0,
                    "account_uid_auths": [],
                    "key_auths": []
                },
                "active":
                {
                    "weight_threshold": 0,
                    "account_uid_auths": [],
                    "key_auths": []
                },
                "secondary":
                {
                    "weight_threshold": 0,
                    "account_uid_auths": [],
                    "key_auths": []
                },
                "memo_key": "YYW1111111111111111111111111111111114T1Anm",
                "reg_info":
                {
                    "registrar": 1264,
                    "referrer": 1264,
                    "registrar_percent": 0,
                    "referrer_percent": 0,
                    "allowance_per_article":
                    {
                        "amount": 0,
                        "asset_id": 0
                    },
                    "max_share_per_article":
                    {
                        "amount": 0,
                        "asset_id": 0
                    },
                    "max_share_total":
                    {
                        "amount": 0,
                        "asset_id": 0
                    },
                    "buyout_percent": 10000
                },
                "can_post": true,
                "can_reply": false,
                "can_rate": false,
                "is_full_member": false,
                "is_registrar": false,
                "is_admin": false,
                "create_time": "1970-01-01T00:00:00",
                "last_update_time": "1970-01-01T00:00:00",
                "active_data": "{}",
                "secondary_data": "{}",
                "statistics": "2.5.0"
            },
            "statistics":
            {
                "id": "0.0.0",
                "owner": 31120496,
                "total_ops": 0,
                "removed_ops": 0,
                "prepaid": 0,
                "csaf": 0,
                "core_balance": 0,
                "core_leased_in": 0,
                "core_leased_out": 0,
                "average_coins": 0,
                "average_coins_last_update": "1970-01-01T00:00:00",
                "coin_seconds_earned": "0",
                "coin_seconds_earned_last_update": "1970-01-01T00:00:00",
                "total_witness_pledge": 0,
                "releasing_witness_pledge": 0,
                "witness_pledge_release_block_number": 4294967295,
                "last_witness_sequence": 0,
                "uncollected_witness_pay": 0,
                "witness_last_confirmed_block_num": 0,
                "witness_last_aslot": 0,
                "witness_total_produced": 0,
                "witness_total_missed": 0,
                "witness_last_reported_block_num": 0,
                "witness_total_reported": 0,
                "total_committee_member_pledge": 0,
                "releasing_committee_member_pledge": 0,
                "committee_member_pledge_release_block_number": 4294967295,
                "last_committee_member_sequence": 0,
                "can_vote": true,
                "is_voter": false,
                "last_voter_sequence": 0,
                "last_platform_sequence": 0,
                "total_platform_pledge": 0,
                "releasing_platform_pledge": 0,
                "platform_pledge_release_block_number": 4294967295,
                "last_post_sequence": 0
            },
            "csaf_leases_in": [],
            "csaf_leases_out": [],
            "witness_votes": [],
            "committee_member_votes": []
        }]
    ]
}
返回字段说明

返回 map 中 full_account 的结构定义为:

full_account
{
   account;                   // 账户基本信息
   statistics;                // 账户动态信息
   csaf_leases_in;            // 手续费币龄借入明细
   csaf_leases_out;           // 手续费币龄借出明细
   voter;                     // 账户投票信息汇总
   witness;                   // 见证人信息
   witness_votes;             // 见证人投票明细(投出票)
   committee_member;          // 候选理事信息
   committee_member_votes;    // 理事会选举投票明细(投出票)
   platform;                  // 该账户拥有的平台信息
   platform_votes;            // 平台投票明细(投出票)
   assets;                    // 该账户为资产发行人的资产类型 id 清单
   balances;                  // 余额表

};

1.1.8 get_witness_by_account

给定一个账户的 uid ,返回对应的见证人信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account:uid数组,长度小于1000 例如:["250926091"]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0,"get_witness_by_account",["132826789"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_witness_by_account", ["132826789"], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result":
    {
        "id": "1.5.31",
        "account": 132826789,
        "name": "yoyo132826789",
        "sequence": 1,
        "is_valid": true,
        "signing_key": "YYW1111111111111111111111111111111114T1Anm",
        "pledge": "7500000000",
        "pledge_last_update": "2017-09-05T11:39:03",
        "average_pledge": "7500000000",
        "average_pledge_last_update": "2017-09-06T12:05:36",
        "average_pledge_next_update_block": 4294967295,
        "total_votes": 719683655,
        "by_pledge_position": "0",
        "by_pledge_position_last_update": "0",
        "by_pledge_scheduled_time": "45370982250075664161773192435",
        "by_vote_position": "0",
        "by_vote_position_last_update": "0",
        "by_vote_scheduled_time": "472822140789228182032488184547",
        "last_confirmed_block_num": 8168,
        "last_aslot": 8599,
        "total_produced": 25,
        "total_missed": 0,
        "url": ""
    }
}
返回字段说明

只有当 options 中对应选项为 true 时,返回结果中才包含对应字段数据。 其中,币龄借入明细、借出明细只返回前 100 条

如果 uid 不存在,则返回 map 中没有相应 uid 。

1.1.9 get_witnesses

给定一组 uid ,返回对应的见证人信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account_uids:uid数组,例如:[132826789,25997]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_witnesses", [[132826789,25997]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_witnesses", [[132826789,25997]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.5.31",
        "account": 132826789,
        "name": "yoyo132826789",
        "sequence": 1,
        "is_valid": true,
        "signing_key": "YYW1111111111111111111111111111111114T1Anm",
        "pledge": "7500000000",
        "pledge_last_update": "2017-09-05T11:39:03",
        "average_pledge": "7500000000",
        "average_pledge_last_update": "2017-09-06T12:05:36",
        "average_pledge_next_update_block": 4294967295,
        "total_votes": 719683655,
        "by_pledge_position": "0",
        "by_pledge_position_last_update": "0",
        "by_pledge_scheduled_time": "45370982250075664161773192435",
        "by_vote_position": "0",
        "by_vote_position_last_update": "0",
        "by_vote_scheduled_time": "472822140789228182032488184547",
        "last_confirmed_block_num": 8168,
        "last_aslot": 8599,
        "total_produced": 25,
        "total_missed": 0,
        "url": ""
    },
    {
        "id": "1.5.1",
        "account": 25997,
        "name": "init1",
        "sequence": 1,
        "is_valid": true,
        "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
        "pledge": 1000000000,
        "pledge_last_update": "2017-09-12T21:02:45",
        "average_pledge": 1000000000,
        "average_pledge_last_update": "2017-09-13T21:20:30",
        "average_pledge_next_update_block": 4294967295,
        "total_votes": 0,
        "by_pledge_position": "0",
        "by_pledge_position_last_update": "0",
        "by_pledge_scheduled_time": "340282366580656096882718510549",
        "by_vote_position": "0",
        "by_vote_position_last_update": "0",
        "by_vote_scheduled_time": "340282366920938463463374607431768211455",
        "last_confirmed_block_num": 5937330,
        "last_aslot": 6308879,
        "total_produced": 513249,
        "total_missed": 32165,
        "url": ""
    }]
}

1.1.10 lookup_witnesses

列出当前有效的见证人清单。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
lower_bound_uid:
 以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 101
ops:排序类型; 取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "lookup_witnesses", [0,2,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_witnesses", [0,2,1]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.5.31",
        "account": 132826789,
        "name": "yoyo132826789",
        "sequence": 1,
        "is_valid": true,
        "signing_key": "YYW1111111111111111111111111111111114T1Anm",
        "pledge": "7500000000",
        "pledge_last_update": "2017-09-05T11:39:03",
        "average_pledge": "7500000000",
        "average_pledge_last_update": "2017-09-06T12:05:36",
        "average_pledge_next_update_block": 4294967295,
        "total_votes": 701297305,
        "by_pledge_position": "0",
        "by_pledge_position_last_update": "0",
        "by_pledge_scheduled_time": "45370982250075664161773192435",
        "by_vote_position": "0",
        "by_vote_position_last_update": "0",
        "by_vote_scheduled_time": "485218414514968154552378399456",
        "last_confirmed_block_num": 8168,
        "last_aslot": 8599,
        "total_produced": 25,
        "total_missed": 0,
        "url": ""
    },
    {
        "id": "1.5.1",
        "account": 25997,
        "name": "init1",
        "sequence": 1,
        "is_valid": true,
        "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
        "pledge": 1000000000,
        "pledge_last_update": "2017-09-12T21:02:45",
        "average_pledge": 1000000000,
        "average_pledge_last_update": "2017-09-13T21:20:30",
        "average_pledge_next_update_block": 4294967295,
        "total_votes": 0,
        "by_pledge_position": "0",
        "by_pledge_position_last_update": "0",
        "by_pledge_scheduled_time": "340282366580656096882718510549",
        "by_vote_position": "0",
        "by_vote_position_last_update": "0",
        "by_vote_scheduled_time": "340282366920938463463374607431768211455",
        "last_confirmed_block_num": 5935462,
        "last_aslot": 6307011,
        "total_produced": 513079,
        "total_missed": 32165,
        "url": ""
    }]
}

1.1.11 get_committee_member_by_account

给定一个 uid ,返回对应的候选理事信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account:uid 例如:"250926091"
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_committee_member_by_account", [25997]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_committee_member_by_account", [25997], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result":
    {
        "id": "1.4.0",
        "account": 25997,
        "name": "init1",
        "sequence": 1,
        "is_valid": true,
        "pledge": 0,
        "total_votes": 0,
        "url": ""
    }
}

1.1.12 get_committee_members

根据一组账户 uid 获取对应信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
committee_member_uids:
 uid数组 例如:[25997,26264]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_committee_members", [[25997,26264]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_committee_members", [[25997,26264]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.4.0",
        "account": 25997,
        "name": "init1",
        "sequence": 1,
        "is_valid": true,
        "pledge": 0,
        "total_votes": 0,
        "url": ""
    },
    {
        "id": "1.4.1",
        "account": 26264,
        "name": "init2",
        "sequence": 1,
        "is_valid": true,
        "pledge": 0,
        "total_votes": 0,
        "url": ""
    }]
}

1.1.13 lookup_committee_members

列出当前有效的候选理事清单

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
lower_bound_uid:
 以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 101
ops:排序类型取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "lookup_committee_members", [0,2,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_committee_members", [0,2,1]], "id": 1}'
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.4.0",
        "account": 25997,
        "name": "init1",
        "sequence": 1,
        "is_valid": true,
        "pledge": 0,
        "total_votes": 0,
        "url": ""
    },
    {
        "id": "1.4.1",
        "account": 26264,
        "name": "init2",
        "sequence": 1,
        "is_valid": true,
        "pledge": 0,
        "total_votes": 0,
        "url": ""
    }]
}

1.1.14 list_committee_proposals

列出所有尚未成功执行的理事会提案,包含正在投票表决的、已表决通过但还没到执行时间的。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "list_committee_proposals", []]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "list_committee_proposals", []], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": []
}

1.1.15 lookup_accounts_by_name

根据名称查找账号UID。 普通账户名称目前为yoyo+uid

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
lower_bound_name:
 以此作为起始名称开始查询,设为空串则从头开始查
limit:返回数量限制,最多不能超过 1001
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "lookup_accounts_by_name", ["",2]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_accounts_by_name", ["",2]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
        ["abit", 209414065],
        ["agaoye", 209415129]
    ]
}

1.1.16 get_platform_by_account

给定一个 uid ,返回对应的账户拥有的平台信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account:一个账户 uid
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_platform_by_account", [224006453]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_platform_by_account", [224006453]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.6.4",
    "owner": 224006453,
    "name": "dwgMarket",
    "sequence": 1,
    "is_valid": true,
    "total_votes": 0,
    "url": "www.cad1688.com",
    "pledge": 1000000000,
    "pledge_last_update": "2018-04-04T08:38:24",
    "average_pledge": 0,
    "average_pledge_last_update": "2018-04-04T08:38:24",
    "average_pledge_next_update_block": 5712088,
    "extra_data": "{}",
    "create_time": "2018-04-04T08:38:24",
    "last_update_time": "1970-01-01T00:00:00"
  }
}

1.1.17 get_platforms

给定一组 uid ,返回对应的平台信息,uid为平台的所有者id

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account_uids:uid 列表 [224006453,217895094]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_platforms", [[224006453,217895094]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_platforms", [[224006453,217895094]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.6.4",
        "owner": 224006453,
        "name": "dwgMarket",
        "sequence": 1,
        "is_valid": true,
        "total_votes": 0,
        "url": "www.cad1688.com",
        "pledge": 1000000000,
        "pledge_last_update": "2018-04-04T08:38:24",
        "average_pledge": 0,
        "average_pledge_last_update": "2018-04-04T08:38:24",
        "average_pledge_next_update_block": 5712088,
        "extra_data": "{}",
        "create_time": "2018-04-04T08:38:24",
        "last_update_time": "1970-01-01T00:00:00"
    },
    {
        "id": "1.6.0",
        "owner": 217895094,
        "name": "test-yoyow",
        "sequence": 1,
        "is_valid": true,
        "total_votes": 0,
        "url": "http://demo.yoyow.org/",
        "pledge": 1000000000,
        "pledge_last_update": "2018-02-10T01:03:57",
        "average_pledge": 176601774,
        "average_pledge_last_update": "2018-02-11T06:49:12",
        "average_pledge_next_update_block": 4562164,
        "extra_data": "{\"login\":\"http://192.168.1.184:8280/login\"}",
        "create_time": "2018-02-10T01:03:57",
        "last_update_time": "2018-02-11T06:49:12"
    }]
}

1.1.18 lookup_platforms

按平台拥有者进行查询,列出当前有效的平台清单。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
lower_bound_uid:
 以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 101
ops:排序类型取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "lookup_platforms", [0,2,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_platforms", [0,2,1]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": [
    {
        "id": "1.6.0",
        "owner": 217895094,
        "name": "test-yoyow",
        "sequence": 1,
        "is_valid": true,
        "total_votes": 0,
        "url": "http://demo.yoyow.org/",
        "pledge": 1000000000,
        "pledge_last_update": "2018-02-10T01:03:57",
        "average_pledge": 176601774,
        "average_pledge_last_update": "2018-02-11T06:49:12",
        "average_pledge_next_update_block": 4562164,
        "extra_data": "{\"login\":\"http://192.168.1.184:8280/login\"}",
        "create_time": "2018-02-10T01:03:57",
        "last_update_time": "2018-02-11T06:49:12"
    },
    {
        "id": "1.6.4",
        "owner": 224006453,
        "name": "dwgMarket",
        "sequence": 1,
        "is_valid": true,
        "total_votes": 0,
        "url": "www.cad1688.com",
        "pledge": 1000000000,
        "pledge_last_update": "2018-04-04T08:38:24",
        "average_pledge": 0,
        "average_pledge_last_update": "2018-04-04T08:38:24",
        "average_pledge_next_update_block": 5712088,
        "extra_data": "{}",
        "create_time": "2018-04-04T08:38:24",
        "last_update_time": "1970-01-01T00:00:00"
    }]
}

1.1.19 get_platform_count

返回平台总数量

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_platform_count", []]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_platform_count", []], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": 5
}

1.1.20 get_assets

给定一组资产 id ,返回对应的资产的详细信息。

参数: asset_ids 一组资产 id

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
asset_ids:资产id数组,暂时只要核心资产YOYO,例如: [0]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "get_assets", [[0]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_assets", [[0]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.3.0",
      "asset_id": 0,
      "symbol": "YOYO",
      "precision": 5,
      "issuer": 1264,
      "options": {
        "max_supply": "200000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000000",
        "issuer_permissions": 0,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.0",
      "dynamic_asset_data": {
        "id": "2.2.0",
        "asset_id": 0,
        "current_supply": "106899730634997",
        "accumulated_fees": 0
      }
    }
  ]
}

返回结果中的 dynamic_asset_data 字段包括资产动态数据明细。

1.1.21 list_assets

分页查询资产详细信息。返回结果按资产代码的 ASCII 码顺序排序。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
lower_bound_symbol:
 以此作为起始代码开始查询
limit:返回数量限制,最多不能超过 101
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "list_assets", ["YOY",4]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "list_assets", ["YOY",4]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.3.91",
      "asset_id": 91,
      "symbol": "YOYES",
      "precision": 2,
      "issuer": 215074501,
      "options": {
        "max_supply": 1200,
        "market_fee_percent": 0,
        "max_market_fee": 1200,
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.91",
      "dynamic_asset_data": {
        "id": "2.2.91",
        "asset_id": 91,
        "current_supply": 0,
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.130",
      "asset_id": 130,
      "symbol": "YOYIO",
      "precision": 2,
      "issuer": 254208024,
      "options": {
        "max_supply": 1258000000,
        "market_fee_percent": 0,
        "max_market_fee": 1258000000,
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": "环保节能"
      },
      "dynamic_asset_data_id": "2.2.130",
      "dynamic_asset_data": {
        "id": "2.2.130",
        "asset_id": 130,
        "current_supply": 1258000000,
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.0",
      "asset_id": 0,
      "symbol": "YOYO",
      "precision": 5,
      "issuer": 1264,
      "options": {
        "max_supply": "200000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000000",
        "issuer_permissions": 0,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.0",
      "dynamic_asset_data": {
        "id": "2.2.0",
        "asset_id": 0,
        "current_supply": "106899950291573",
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.2",
      "asset_id": 2,
      "symbol": "YOYOW",
      "precision": 5,
      "issuer": 25638,
      "options": {
        "max_supply": "1000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000",
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.2",
      "dynamic_asset_data": {
        "id": "2.2.2",
        "asset_id": 2,
        "current_supply": 0,
        "accumulated_fees": 0
      }
    }
  ]
}

1.1.22 lookup_asset_symbols

给定一组资产代码或 id ,返回对应的资产的详细信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
symbols_or_ids:数组形式,要检索的资产的符号代码或ID,例如:["YOYO"] 或者 [0]
注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":[0, "lookup_asset_symbols", [[0]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_asset_symbols", [[0]]], "id": 1}' https://api.testnet.yoyow.org/rpc
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lookup_asset_symbols", [["YOYO"]]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.3.0",
      "asset_id": 0,
      "symbol": "YOYO",
      "precision": 5,
      "issuer": 1264,
      "options": {
        "max_supply": "200000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000000",
        "issuer_permissions": 0,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.0",
      "dynamic_asset_data": {
        "id": "2.2.0",
        "asset_id": 0,
        "current_supply": "106900048605605",
        "accumulated_fees": 0
      }
    }
  ]
}

History API

1.2.1 get_relative_account_history

获取账户历史。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

访问授权限制

请求参数
account:可以是 uid 或者账户昵称
op_type:限制操作类型,参见操作类型。值为 null 时,则返回所有操作类型;为 0 时可获得所有transfer操作.
start:查询起始编号(sequence number)
limit:返回结果总数
end:值为 0 时,可得到最多的最近操作记录.

返回结果的数量会在end - start 范围之内;如果limit值比end - start 要小,则返回满足limit条件的最新操作记录。 返回结果的排序方式为: 最新的优先

注意事项

调用样例及调试工具

WebSocket:

wscat -c wss://api.testnet.yoyow.org
{"id":1, "method":"call", "params":["history", "get_relative_account_history", [223331844, null, 1,3,10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["history", "get_relative_account_history", [223331844, null, 1,3,10]], "id": 1}' https://api.testnet.yoyow.org/rpc
返回结果

返回列表中每条数据是 pair 类型,pair 中第一个元素为该条记录在该账号历史中的序列号(sequence),第二个元素为具体操作

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    [
      10,
      {
        "id": "1.12.48157",
        "op": [
          0,
          {
            "fee": {
              "total": {
                "amount": 20000,
                "asset_id": 0
              },
              "options": {
                "from_csaf": {
                  "amount": 20000,
                  "asset_id": 0
                }
              }
            },
            "from": 217895094,
            "to": 223331844,
            "amount": {
              "amount": "200000000000",
              "asset_id": 0
            },
            "extensions": {
              "from_balance": {
                "amount": "200000000000",
                "asset_id": 0
              },
              "to_balance": {
                "amount": "200000000000",
                "asset_id": 0
              }
            }
          }
        ],
        "result": [
          0,
          {}
        ],
        "block_timestamp": "2018-05-02T09:24:30",
        "block_num": 6515279,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 2715
      }
    ],
    [
      9,
      {
        "id": "1.12.47189",
        "op": [
          22,
          {
            "fee": {
              "total": {
                "amount": 200000,
                "asset_id": 0
              },
              "options": {
                "from_csaf": {
                  "amount": 200000,
                  "asset_id": 0
                }
              }
            },
            "voter": 236542328,
            "platform_to_add": [
              223331844
            ],
            "platform_to_remove": []
          }
        ],
        "result": [
          0,
          {}
        ],
        "block_timestamp": "2018-04-16T08:14:57",
        "block_num": 6053313,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 1157
      }
    ],
    [
      8,
      {
        "id": "1.12.47149",
        "op": [
          22,
          {
            "fee": {
              "total": {
                "amount": 200000,
                "asset_id": 0
              },
              "options": {
                "from_csaf": {
                  "amount": 200000,
                  "asset_id": 0
                }
              }
            },
            "voter": 250926091,
            "platform_to_add": [
              223331844
            ],
            "platform_to_remove": []
          }
        ],
        "result": [
          0,
          {}
        ],
        "block_timestamp": "2018-04-16T03:19:36",
        "block_num": 6049807,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 1117
      }
    ]
  ]
}

钱包 API说明

Contents

钱包连接方式

启动方式:

wallet的使用:

可以通过交互的命令行,也可以通过websocket和http的接口。 参考 交易指南

./yoyow_client -s ws://127.0.0.1:8090/ -r 0.0.0.0:8091 -H 127.0.0.1:8093

注意:

使用 -s 来指定,连接到的节点程序的IP与端口;
使用 -r 选项来开启一个websocket接口;
使用 -H 选项来开启一个HTTP-RPC服务,方便我们其他程序进行访问。如:单独处理充值/提现的脚本程序。
yoyow_node 只有完成同步后,才会监听RPC端口,所以请耐心等待 yoyow_node 同步完成。
您可以启动多个client 连接同一个yoyow_node。但请注意不要使用相同的-H,会因为端口被占用而监听失败。

在本文档的测试用例中,均使用本机地址。

websocket 接口地址: ws://localhost:8091

http rpc接口地址: http://localhost:8093

连接方法如下:

  1. 使用wscat连接 websocket 接口:
::
wscat -c ws://localhost:8091
  1. 使用curl 连接 websocket 接口:
::
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' http://localhost:8091
  1. 使用curl 连接 http 接口:
::
curl --data '{"method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' http://localhost:8093

备注:websocket和http接口的区别:websocket接口同样可以使用curl获取数据,会遵循jsonrpc格式,请求和返回的json数据均需携带{"jsonrpc": "2.0"}。http 的接口不需携带{"jsonrpc": "2.0"}的标签。

2.1 工具类 API

2.1.1 calculate_account_uid

给定一个数,计算出对应的账户 uid

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
n:数字
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"calculate_account_uid",[12]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"calculate_account_uid",[12]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": 3106
}

2.1.2 suggest_brain_key

随机生成一个脑密钥,根据脑密钥得出一对公私钥

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"suggest_brain_key",[]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"suggest_brain_key",[]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "brain_priv_key": "DERIC GIANTRY ALODY TELAR TIRR BOILER BULLIT REACTOR BANISH FLOCCUS SLIPPER PELANOS WEALTHY SOLE RESCRUB RELIMIT",
    "wif_priv_key": "5JXK8jhtJM8jKXcpBHeWahzkfZ9c7ske31TkMR7eMeq1uWirYVD",
    "pub_key": "YYW7jcmGpu6KEUE352VtGB9PTo38Nut5qxXitfSgG6cDmAvxz2yin"
  }
}

2.1.3 get_transaction_id

返回给定交易的 tx id (交易 ID ,或称交易哈希)

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
trx:JSON格式的完整交易
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_transaction_id",[{"operations":[[0,{"fee":{"total":{"amount":100000,"asset_id":0}},"from":250926091,"to":223331844,"amount":{"amount":100000,"asset_id":0},"extensions":{}}]]}]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"suggest_brain_key",[{"operations":[[0,{"fee":{"total":{"amount":100000,"asset_id":0}},"from":250926091,"to":223331844,"amount":{"amount":100000,"asset_id":0},"extensions":{}}]]}]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "5ea3a6ee9f030472f83fb436836b602a3a5ed6a5"
}

2.2 查询类 API

2.2.1 get_block

根据块高获取某个块的信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
block_id:块高
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_block",[846552]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_block",[846552]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "result": {
    "previous": "000cead7924a4e84b8e6278791bec479ad8ecf29",
    "timestamp": "2019-05-23T02:28:18",
    "witness": 26460,
    "transaction_merkle_root": "0000000000000000000000000000000000000000",
    "witness_signature": "202cb55660544787bbae0dea54bce63f8aafae1766039d59022870117d58c864dc2cde9072eb91744472381d3233a9216839a8d9e4a3c7f4ed250cc619cd2daeed",
    "transactions": [],
    "block_id": "000cead8d55a838ed34c919fd6ff372d169edc6e",
    "signing_key": "YYW5xhgecRawPgbq3ZaHdnxpo6TvySM1cLw2wBH7ZGXePkUcAVNJy",
    "transaction_ids": []
  }
}

2.2.2 get_account

获取账户基本信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
account_name_or_id:
 uid或者账户昵称name,例如:"250926091"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_account",[250926091]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_account",[250926091]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.2.1378",
    "uid": 250926091,
    "name": "yoyo250926091",
    "owner": {
      "weight_threshold": 1,
      "account_uid_auths": [],
      "key_auths": [
        [
          "YYW7UoNSEQAUPvnvoBRVKyPAD9845esnpiK6MgHinsn5yqr5UgT5W",
          1
        ]
      ]
    },
    "active": {
      "weight_threshold": 1,
      "account_uid_auths": [],
      "key_auths": [
        [
          "YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71",
          1
        ]
      ]
    },
    "secondary": {
      "weight_threshold": 1,
      "account_uid_auths": [],
      "key_auths": [
        [
          "YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD",
          1
        ]
      ]
    },
    "memo_key": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
    "reg_info": {
      "registrar": 206336051,
      "referrer": 25997,
      "registrar_percent": 0,
      "referrer_percent": 0,
      "allowance_per_article": {
        "amount": 0,
        "asset_id": 0
      },
      "max_share_per_article": {
        "amount": 0,
        "asset_id": 0
      },
      "max_share_total": {
        "amount": 0,
        "asset_id": 0
      },
      "buyout_percent": 10000
    },
    "can_post": true,
    "can_reply": false,
    "can_rate": false,
    "is_full_member": true,
    "is_registrar": false,
    "is_admin": false,
    "create_time": "2018-04-03T08:21:00",
    "last_update_time": "2018-04-03T08:21:00",
    "active_data": "{}",
    "secondary_data": "{}",
    "statistics": "2.5.1378"
  }
}

2.2.3 get_full_account

获取账户详细信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
account_name_or_id:
 uid或者账户昵称name,例如:"250926091"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_full_account",[["250926091"]]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_full_account", [["250926091"]]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "account": {
      "id": "1.2.1378",
      "uid": 250926091,
      "name": "yoyo250926091",
      "owner": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW7UoNSEQAUPvnvoBRVKyPAD9845esnpiK6MgHinsn5yqr5UgT5W",
            1
          ]
        ]
      },
      "active": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71",
            1
          ]
        ]
      },
      "secondary": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD",
            1
          ]
        ]
      },
      "memo_key": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
      "reg_info": {
        "registrar": 206336051,
        "referrer": 25997,
        "registrar_percent": 0,
        "referrer_percent": 0,
        "allowance_per_article": {
          "amount": 0,
          "asset_id": 0
        },
        "max_share_per_article": {
          "amount": 0,
          "asset_id": 0
        },
        "max_share_total": {
          "amount": 0,
          "asset_id": 0
        },
        "buyout_percent": 10000
      },
      "can_post": true,
      "can_reply": false,
      "can_rate": false,
      "is_full_member": true,
      "is_registrar": false,
      "is_admin": false,
      "create_time": "2018-04-03T08:21:00",
      "last_update_time": "2018-04-03T08:21:00",
      "active_data": "{}",
      "secondary_data": "{}",
      "statistics": "2.5.1378"
    },
    "statistics": {
      "id": "2.5.1378",
      "owner": 250926091,
      "total_ops": 11,
      "removed_ops": 0,
      "prepaid": 0,
      "csaf": 4200683,
      "core_balance": 1098850704,
      "core_leased_in": 0,
      "core_leased_out": 0,
      "average_coins": 1099970604,
      "average_coins_last_update": "2018-04-12T12:56:00",
      "coin_seconds_earned": "136484730731520",
      "coin_seconds_earned_last_update": "2018-04-12T12:56:00",
      "total_witness_pledge": 0,
      "releasing_witness_pledge": 0,
      "witness_pledge_release_block_number": 4294967295,
      "last_witness_sequence": 0,
      "uncollected_witness_pay": 0,
      "witness_last_confirmed_block_num": 0,
      "witness_last_aslot": 0,
      "witness_total_produced": 0,
      "witness_total_missed": 0,
      "witness_last_reported_block_num": 0,
      "witness_total_reported": 0,
      "total_committee_member_pledge": 0,
      "releasing_committee_member_pledge": 0,
      "committee_member_pledge_release_block_number": 4294967295,
      "last_committee_member_sequence": 0,
      "can_vote": true,
      "is_voter": false,
      "last_voter_sequence": 1,
      "last_platform_sequence": 1,
      "total_platform_pledge": 1000000000,
      "releasing_platform_pledge": 0,
      "platform_pledge_release_block_number": 4294967295,
      "last_post_sequence": 0
    },
    "csaf_leases_in": [],
    "csaf_leases_out": [],
    "witness_votes": [],
    "committee_member_votes": []
  }
}

2.2.4 get_relative_account_history

获取账户历史。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
account:可以是 uid 或者账户昵称
op_type:限制操作类型,参见操作类型。值为 null 时,则返回所有操作类型;为 0 时可获得所有transfer操作.
start:查询起始编号(sequence number)
limit:返回结果总数
end:值为 0 时,可得到最多的最近操作记录.

返回结果的数量会在end - start 范围之内;如果limit值比end - start 要小,则返回满足limit条件的最新操作记录。 返回结果的排序方式为: 最新的优先

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_relative_account_history",["250926091",null,10,10,0]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_relative_account_history",["250926091",null,10,10,0]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "memo": "",
      "description": "Transfer 1.20000 YOYO from 250926091 to 209414065   (Fee: 0.20000 YOYO)",
      "sequence": 11,
      "op": {
        "id": "1.12.46722",
        "op": [
          0,
          {
            "fee": {
              "total": {
                "amount": 20000,
                "asset_id": 0
              },
              "options": {
                "from_csaf": {
                  "amount": 20000,
                  "asset_id": 0
                }
              }
            },
            "from": 250926091,
            "to": 209414065,
            "amount": {
              "amount": 120000,
              "asset_id": 0
            }
          }
        ],
        "result": [
          0,
          {}
        ],
        "block_timestamp": "2018-04-12T12:56:21",
        "block_num": 5946192,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 690
      }
    },
    {
      "memo": "",
      "description": "Transfer 10 YOYO from 250926091 to 209414065   (Fee: 0.20000 YOYO)",
      "sequence": 10,
      "op": {
        "id": "1.12.46721",
        "op": [
          0,
          {
            "fee": {
              "total": {
                "amount": 20000,
                "asset_id": 0
              },
              "options": {
                "from_csaf": {
                  "amount": 20000,
                  "asset_id": 0
                }
              }
            },
            "from": 250926091,
            "to": 209414065,
            "amount": {
              "amount": 1000000,
              "asset_id": 0
            }
          }
        ],
        "result": [
          0,
          {}
        ],
        "block_timestamp": "2018-04-12T12:55:57",
        "block_num": 5946184,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 689
      }
    }
  ]
}

2.2.5 list_account_balances

获取账户余额。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
account:uid或者账户昵称name,例如:"250926091"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"list_account_balances",["250926091"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_account_balances",["250926091"]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "amount": 1098850704,
      "asset_id": 0
    }
  ]
}

2.2.6 list_accounts_by_name

根据名称查找账号UID。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
lowerbound:以此作为起始名称开始查询,设为空串则从头开始查
limit:返回数量限制,最多不能超过 1001
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"list_accounts_by_name",["yoyo",10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_accounts_by_name",["yoyo",10]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    [
      "yoyo10007071",
      10007071
    ],
    [
      "yoyo100090928",
      100090928
    ],
    [
      "yoyo100361976",
      100361976
    ],
    [
      "yoyo100459405",
      100459405
    ],
    [
      "yoyo100501159",
      100501159
    ],
    [
      "yoyo100583445",
      100583445
    ],
    [
      "yoyo100603302",
      100603302
    ],
    [
      "yoyo100735531",
      100735531
    ],
    [
      "yoyo10124233",
      10124233
    ],
    [
      "yoyo101530854",
      101530854
    ]
  ]
}

2.2.7 get_witness

获取见证人信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
owner_account:参数可以是 uid 或者账户昵称。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_witness",["132826789"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_witness",["132826789"]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.5.31",
    "account": 132826789,
    "name": "yoyo132826789",
    "sequence": 1,
    "is_valid": true,
    "signing_key": "YYW1111111111111111111111111111111114T1Anm",
    "pledge": "7500000000",
    "pledge_last_update": "2017-09-05T11:39:03",
    "average_pledge": "7500000000",
    "average_pledge_last_update": "2017-09-06T12:05:36",
    "average_pledge_next_update_block": 4294967295,
    "total_votes": 1023267564,
    "by_pledge_position": "0",
    "by_pledge_position_last_update": "0",
    "by_pledge_scheduled_time": "45370982250075664161773192435",
    "by_vote_position": "0",
    "by_vote_position_last_update": "0",
    "by_vote_scheduled_time": "332544857826054970738151567847",
    "last_confirmed_block_num": 8168,
    "last_aslot": 8599,
    "total_produced": 25,
    "total_missed": 0,
    "url": ""
  }
}

2.2.8 list_witnesses

查询指定借出人的币龄租借(借出)清单。

结果按借入人 uid 从小到大排序

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
lower_bound:以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 101
order_by:排序类型。取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

接口采用分页设计,若要获取全部的见证人,可以循环调用,直至返回见证人数小于limit为止。

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"list_witnesses",["132"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_witnesses",["132"]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.5.1",
      "account": 25997,
      "name": "init1",
      "sequence": 1,
      "is_valid": true,
      "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
      "pledge": 1000000000,
      "pledge_last_update": "2017-09-12T21:02:45",
      "average_pledge": 1000000000,
      "average_pledge_last_update": "2017-09-13T21:20:30",
      "average_pledge_next_update_block": 4294967295,
      "total_votes": 0,
      "by_pledge_position": "0",
      "by_pledge_position_last_update": "0",
      "by_pledge_scheduled_time": "340282366580656096882718510549",
      "by_vote_position": "0",
      "by_vote_position_last_update": "0",
      "by_vote_scheduled_time": "340282366920938463463374607431768211455",
      "last_confirmed_block_num": 5994633,
      "last_aslot": 6366418,
      "total_produced": 518458,
      "total_missed": 32186,
      "url": ""
    },
    {
      "id": "1.5.2",
      "account": 26264,
      "name": "init2",
      "sequence": 1,
      "is_valid": true,
      "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
      "pledge": 1000000000,
      "pledge_last_update": "2017-09-12T21:02:51",
      "average_pledge": 1000000000,
      "average_pledge_last_update": "2017-09-13T21:20:36",
      "average_pledge_next_update_block": 4294967295,
      "total_votes": 0,
      "by_pledge_position": "0",
      "by_pledge_position_last_update": "0",
      "by_pledge_scheduled_time": "340282366580656096882718510549",
      "by_vote_position": "0",
      "by_vote_position_last_update": "0",
      "by_vote_scheduled_time": "340282366920938463463374607431768211455",
      "last_confirmed_block_num": 5994632,
      "last_aslot": 6366417,
      "total_produced": 518439,
      "total_missed": 32198,
      "url": ""
    },
    {
      "id": "1.5.3",
      "account": 26460,
      "name": "init3",
      "sequence": 1,
      "is_valid": true,
      "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
      "pledge": 1000000000,
      "pledge_last_update": "2017-09-12T21:02:54",
      "average_pledge": 1000000000,
      "average_pledge_last_update": "2017-09-13T21:20:39",
      "average_pledge_next_update_block": 4294967295,
      "total_votes": 0,
      "by_pledge_position": "0",
      "by_pledge_position_last_update": "0",
      "by_pledge_scheduled_time": "340282366580656096882718510549",
      "by_vote_position": "0",
      "by_vote_position_last_update": "0",
      "by_vote_scheduled_time": "340282366920938463463374607431768211455",
      "last_confirmed_block_num": 5994636,
      "last_aslot": 6366421,
      "total_produced": 518427,
      "total_missed": 32161,
      "url": ""
    },
    {
      "id": "1.5.4",
      "account": 26861,
      "name": "init4",
      "sequence": 1,
      "is_valid": true,
      "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
      "pledge": 1000000000,
      "pledge_last_update": "2017-09-12T21:03:00",
      "average_pledge": 1000000000,
      "average_pledge_last_update": "2017-09-13T21:20:45",
      "average_pledge_next_update_block": 4294967295,
      "total_votes": 0,
      "by_pledge_position": "0",
      "by_pledge_position_last_update": "0",
      "by_pledge_scheduled_time": "340282366580656096882718510549",
      "by_vote_position": "0",
      "by_vote_position_last_update": "0",
      "by_vote_scheduled_time": "340282366920938463463374607431768211455",
      "last_confirmed_block_num": 5994640,
      "last_aslot": 6366425,
      "total_produced": 518441,
      "total_missed": 32137,
      "url": ""
    },
    {
      "id": "1.5.5",
      "account": 27027,
      "name": "init5",
      "sequence": 1,
      "is_valid": true,
      "signing_key": "YYW71suPihtG7jJAGiVBCkd63ECHYebQaPa894oy3r54zk3eM1itt",
      "pledge": 1000000000,
      "pledge_last_update": "2017-09-12T21:05:15",
      "average_pledge": 1000000000,
      "average_pledge_last_update": "2017-09-13T21:23:00",
      "average_pledge_next_update_block": 4294967295,
      "total_votes": 0,
      "by_pledge_position": "0",
      "by_pledge_position_last_update": "0",
      "by_pledge_scheduled_time": "340282366580656096882718510549",
      "by_vote_position": "0",
      "by_vote_position_last_update": "0",
      "by_vote_scheduled_time": "340282366920938463463374607431768211455",
      "last_confirmed_block_num": 5994639,
      "last_aslot": 6366424,
      "total_produced": 518387,
      "total_missed": 32190,
      "url": ""
    }
  ]
}

2.2.9 get_committee_member

获取理事成员信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
owner_account:uid 或者账户昵称。 例如:"25997"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"get_committee_member",["25997"]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_committee_member",["25997"]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.4.0",
    "account": 25997,
    "name": "init1",
    "sequence": 1,
    "is_valid": true,
    "pledge": 0,
    "total_votes": 567814657,
    "url": ""
  }
}

2.2.10 list_committee_members

列出当前有效的候选理事清单。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
lower_bound:以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 101
order_by:排序类型。取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

接口采用分页设计,若要获取全部的理事会,可以循环调用,直至返回理事会人数小于limit为止。

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0,"list_committee_members",[0,5,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_committee_members",[0,5,1]], "id": 1}' http://localhost:8091
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.4.0",
      "account": 25997,
      "name": "init1",
      "sequence": 1,
      "is_valid": true,
      "pledge": 0,
      "total_votes": 567814657,
      "url": ""
    },
    {
      "id": "1.4.1",
      "account": 26264,
      "name": "init2",
      "sequence": 1,
      "is_valid": true,
      "pledge": 0,
      "total_votes": 0,
      "url": ""
    },
    {
      "id": "1.4.2",
      "account": 26460,
      "name": "init3",
      "sequence": 1,
      "is_valid": true,
      "pledge": 0,
      "total_votes": 0,
      "url": ""
    },
    {
      "id": "1.4.3",
      "account": 26861,
      "name": "init4",
      "sequence": 1,
      "is_valid": true,
      "pledge": 0,
      "total_votes": 0,
      "url": ""
    },
    {
      "id": "1.4.4",
      "account": 27027,
      "name": "init5",
      "sequence": 1,
      "is_valid": true,
      "pledge": 0,
      "total_votes": 0,
      "url": ""
    }
  ]
}

2.2.11 list_committee_proposals

列出所有尚未成功执行的理事会提案,包含正在投票表决的、已表决通过但还没到执行时间的。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "list_committee_proposals", []]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "list_committee_proposals", []], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": []
}

2.2.12 get_platform_count

获取网络上平台的总数量

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "get_platform_count", []]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "get_platform_count", []], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": 6
}

2.2.13 get_platform

根据平台所有人(owner)账号,获取平台对象信息

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
owner_account:平台所有人账号
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "get_platform", ["250926091"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_committee_account", [0, "get_platform", ["250926091"]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "id": "1.6.3",
    "owner": 250926091,
    "name": "NoPlatform",
    "sequence": 1,
    "is_valid": true,
    "total_votes": 0,
    "url": "www.example2.com",
    "pledge": 1000000000,
    "pledge_last_update": "2018-04-03T09:30:48",
    "average_pledge": 396825,
    "average_pledge_last_update": "2018-04-03T09:34:48",
    "average_pledge_next_update_block": 5684416,
    "extra_data": "{}",
    "create_time": "2018-04-03T09:30:48",
    "last_update_time": "2018-04-03T09:34:48"
  }
}

2.2.14 list_platforms

按平台拥有者进行查询,列出当前有效的平台清单。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
lower_bound:以此作为起始 uid 开始查询,设为 0 则从头开始查
limit:返回数量限制,最多不能超过 100
order_by:排序类型。取值范围[0,1,2]。 0:按uid由大到小排序;1:按得票数从多到少排序;2:按抵押从多到少排序
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "list_platforms", [0,5,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "list_platforms", [0, "list_platforms", [0,5,1]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.6.0",
      "owner": 217895094,
      "name": "test-yoyow",
      "sequence": 1,
      "is_valid": true,
      "total_votes": 0,
      "url": "http://demo.yoyow.org/",
      "pledge": 1000000000,
      "pledge_last_update": "2018-02-10T01:03:57",
      "average_pledge": 176601774,
      "average_pledge_last_update": "2018-02-11T06:49:12",
      "average_pledge_next_update_block": 4562164,
      "extra_data": "{\"login\":\"http://demo.yoyow.org:3000/authLogin\"}",
      "create_time": "2018-02-10T01:03:57",
      "last_update_time": "2018-02-11T06:49:12"
    },
    {
      "id": "1.6.5",
      "owner": 223331844,
      "name": "baidu",
      "sequence": 1,
      "is_valid": true,
      "total_votes": 0,
      "url": "",
      "pledge": 1000000000,
      "pledge_last_update": "2018-04-16T02:52:36",
      "average_pledge": 0,
      "average_pledge_last_update": "2018-04-16T02:52:36",
      "average_pledge_next_update_block": 6050467,
      "extra_data": "",
      "create_time": "2018-04-16T02:52:36",
      "last_update_time": "1970-01-01T00:00:00"
    },
    {
      "id": "1.6.4",
      "owner": 224006453,
      "name": "dwgMarket",
      "sequence": 1,
      "is_valid": true,
      "total_votes": 0,
      "url": "www.cad1688.com",
      "pledge": 1000000000,
      "pledge_last_update": "2018-04-04T08:38:24",
      "average_pledge": 0,
      "average_pledge_last_update": "2018-04-04T08:38:24",
      "average_pledge_next_update_block": 5712088,
      "extra_data": "{}",
      "create_time": "2018-04-04T08:38:24",
      "last_update_time": "1970-01-01T00:00:00"
    }
  ]
}

2.2.15 get_asset

根据给定的资产代码或者 id ,返回资产详细信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
asset_name_or_id:
 资产符号或者资产id
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "get_asset", [ 3]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "get_asset", [ 3]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": "1.3.3",
  "asset_id": 3,
  "symbol": "WOWO",
  "precision": 4,
  "issuer": 223331844,
  "options": {
    "max_supply": "1000000000000000",
    "market_fee_percent": 0,
    "max_market_fee": "1000000000000000",
    "issuer_permissions": 79,
    "flags": 0,
    "whitelist_authorities": [],
    "blacklist_authorities": [],
    "whitelist_markets": [],
    "blacklist_markets": [],
    "description": ""
  },
  "dynamic_asset_data_id": "2.3.3"
}

2.2.16 list_assets

分页查询资产详细信息。

返回结果按资产代码的 ASCII 码顺序排序

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
lower_bound_symbol:
 以此作为起始代码开始查询,顺序按资产代码的 ASCII 码排序
limit:返回数量限制,最多不能超过 101
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "list_assets", ["YOY", 4]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "list_assets", ["YOY", 4]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.3.91",
      "asset_id": 91,
      "symbol": "YOYES",
      "precision": 2,
      "issuer": 215074501,
      "options": {
        "max_supply": 1200,
        "market_fee_percent": 0,
        "max_market_fee": 1200,
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": "卢俊义"
      },
      "dynamic_asset_data_id": "2.2.91",
      "dynamic_asset_data": {
        "id": "2.2.91",
        "asset_id": 91,
        "current_supply": 0,
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.130",
      "asset_id": 130,
      "symbol": "YOYIO",
      "precision": 2,
      "issuer": 254208024,
      "options": {
        "max_supply": 1258000000,
        "market_fee_percent": 0,
        "max_market_fee": 1258000000,
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": "环保节能"
      },
      "dynamic_asset_data_id": "2.2.130",
      "dynamic_asset_data": {
        "id": "2.2.130",
        "asset_id": 130,
        "current_supply": 1258000000,
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.0",
      "asset_id": 0,
      "symbol": "YOYO",
      "precision": 5,
      "issuer": 1264,
      "options": {
        "max_supply": "200000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000000",
        "issuer_permissions": 0,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.0",
      "dynamic_asset_data": {
        "id": "2.2.0",
        "asset_id": 0,
        "current_supply": "106901076031525",
        "accumulated_fees": 0
      }
    },
    {
      "id": "1.3.2",
      "asset_id": 2,
      "symbol": "YOYOW",
      "precision": 5,
      "issuer": 25638,
      "options": {
        "max_supply": "1000000000000",
        "market_fee_percent": 0,
        "max_market_fee": "1000000000000",
        "issuer_permissions": 79,
        "flags": 0,
        "whitelist_authorities": [],
        "blacklist_authorities": [],
        "whitelist_markets": [],
        "blacklist_markets": [],
        "description": ""
      },
      "dynamic_asset_data_id": "2.2.2",
      "dynamic_asset_data": {
        "id": "2.2.2",
        "asset_id": 2,
        "current_supply": 0,
        "accumulated_fees": 0
      }
    }
  ]
}

2.2.17 compute_available_csaf

计算某个账户待领取的 积分值。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
account_name_or_id:
 uid或者账户昵称name,例如:"250926091"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "compute_available_csaf", [310299086]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "compute_available_csaf", [310299086]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "result": "608.85747"
}

2.3 钱包/私钥管理类 API

2.3.1 save_wallet_file

保存钱包文件,会保存到yoyo_client的执行文件夹下

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlock状态

访问授权限制
访问级别: 普通接口
请求参数
wallet_filename:
 字符串,为备份的文件名。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "save_wallet_file", ["t3.json"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "save_wallet_file", ["t3.json"]], "id": 1}' http://localhost:8091/rpc
返回结果
{
    "id": 1,
    "jsonrpc": "2.0",
    "result":null
}

2.3.2 set_password

设置钱包密码

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于new或者unlocked状态

new状态为wallet第一次运行,未曾设置password的状态。

访问授权限制
访问级别: 普通接口
请求参数
password:密码字符串 例如:"1234"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "set_password", ["1234"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "set_password", ["1234"]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": null
}

2.3.3 unlock

解锁钱包

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet处于locked状态

访问授权限制
访问级别: 普通接口
请求参数
password:密码字符串 例如:"1234"
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "unlock", ["1234"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "unlock", ["1234"]], "id": 1}'
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": null
}

2.3.4 lock

锁定钱包

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "lock", []]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "lock", []], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": null
}

2.3.5 import_key

将一个私钥导入钱包,并指定一个相关账号。私钥和账号并不一定要有关联。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
account_name_or_id:
 账号 uid 或者昵称
wif_key:私钥字符串
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "lock", []]}{"id":1, "method":"call", "params":[0, "import_key", ["250926091","5JLaW7u3EC4vVLbTmLo1XeSBGiTeRtqER1UsoLtYbFNnBafgPKG"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "lock", []]}{"id":1, "method":"call", "params":[0, "import_key", ["250926091","5JLaW7u3EC4vVLbTmLo1XeSBGiTeRtqER1UsoLtYbFNnBafgPKG"]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": true
}

2.3.6 dump_private_keys

列出钱包内所有私钥及对应公钥。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "dump_private_keys",[]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "dump_private_keys",[]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    [
      "YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD",
      "5HvABsnYU1U7misWHq9mc6mE8QovBiy8H5rVZc3zKztgZsPfFMB"
    ],
    [
      "YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71",
      "5JLaW7u3EC4vVLbTmLo1XeSBGiTeRtqER1UsoLtYbFNnBafgPKG"
    ]
  ]
}

2.3.7 list_my_accounts_cached

列出钱包文件中所有缓存的账户(导入私钥时指定的账户)的信息。

注:该缓存信息不一定与链上数据同步。要想进行同步,请重新打开钱包文件。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "list_my_accounts_cached",[]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "list_my_accounts_cached",[]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [
    {
      "id": "1.2.1378",
      "uid": 250926091,
      "name": "yoyo250926091",
      "owner": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW7UoNSEQAUPvnvoBRVKyPAD9845esnpiK6MgHinsn5yqr5UgT5W",
            1
          ]
        ]
      },
      "active": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW6fU7Th8uESW9FZnpkhYaTUwtSvn3f2TQxFVA3ef2SSiwdZES71",
            1
          ]
        ]
      },
      "secondary": {
        "weight_threshold": 1,
        "account_uid_auths": [],
        "key_auths": [
          [
            "YYW5eDSFYeiqyFRajfPP8tTZM7mfUeyc7H65zmnHtDW4SQJdwqTBD",
            1
          ]
        ]
      },
      "memo_key": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
      "reg_info": {
        "registrar": 206336051,
        "referrer": 25997,
        "registrar_percent": 0,
        "referrer_percent": 0,
        "allowance_per_article": {
          "amount": 0,
          "asset_id": 0
        },
        "max_share_per_article": {
          "amount": 0,
          "asset_id": 0
        },
        "max_share_total": {
          "amount": 0,
          "asset_id": 0
        },
        "buyout_percent": 10000
      },
      "can_post": true,
      "can_reply": false,
      "can_rate": false,
      "is_full_member": true,
      "is_registrar": false,
      "is_admin": false,
      "create_time": "2018-04-03T08:21:00",
      "last_update_time": "2018-04-03T08:21:00",
      "active_data": "{}",
      "secondary_data": "{}",
      "statistics": "2.5.1378"
    }
  ]
}

2.4 操作/交易类 API

以下操作涉及密钥权限的,需要导入相关的私钥,同时,保证wallet需处于解锁(unlocked)状态

交易类的操作一般情况下最后两个参数分别是 csaf_fee 和 broadcast, 分别代表 手续费的支付方式 和 是否广播

csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播,true or false

注:transfer 和 collect_csaf 由于历史原因,会没有csaf_fee参数,默认使用积分抵扣手续费,如果需要使用零钱支付手续费,可以使用transfer_new 和 collect_csaf_new 两个接口。

2.4.1 transfer & transfer_new

根据uid列表 查询平台

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要转出人active key

访问授权限制
访问级别: 普通接口
请求参数
from:转出人(UID或昵称)
to:转入人(UID或昵称)
amount:金额,如果金额为小数建议使用字符串传参
asset_symbol:币种, 资产类型,当前只有"YOYO"
memo:备注(不带备注的话用空串"")
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费(transfer 没有该参数,默认使用积分抵扣手续费)
broadcast:是否广播,true or false
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "transfer_new",[250926091, 209414065, "10", "YOYO", "feho", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "transfer_new",[250926091, 209414065, "10", "YOYO", "feho", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 57170,
    "ref_block_prefix": 852086171,
    "expiration": "2018-04-15T03:18:33",
    "operations": [
      [
        0,
        {
          "fee": {
            "total": {
              "amount": 20898,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 20898,
                "asset_id": 0
              }
            }
          },
          "from": 250926091,
          "to": 209414065,
          "amount": {
            "amount": 1000000,
            "asset_id": 0
          },
          "memo": {
            "from": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
            "to": "YYW8PK8NtXW6JjtxqPV8QTgw4ejPEg4FgVeNV1maZDGzzNoEbgmr2",
            "nonce": "7783743918290282490",
            "message": "4468a7f3a5ac7fbf8125856381673030"
          }
        }
      ]
    ],
    "signatures": [
      "1f0a075215760089cf879b67ee6ba0aaaffa9408cd48c9040eee562909a8d67f5f7bbbb6401aabc69c00cd5d212f65b41204651f33442dc5b5b0056ce38f06c10e"
    ]
  }
}

2.4.2 create_witness

创建见证人。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要见证人所有者的active key

访问授权限制
访问级别: 普通接口
请求参数
owner_account:账号(UID或昵称)
block_signing_key:
 出块签名公钥,
pledge_amount:抵押金额
pledge_asset_symbol:
 抵押币种(YOYO)
url:介绍链接
can_pledge:是否允许抵押, true / false 不需修改则输入 null
bonus_rate:抵押挖矿分红比例,出块工资中的该比例部分分给抵押账户 不需修改则输入 null
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

其中:签名公钥为 YYW1111111111111111111111111111111114T1Anm 表示暂时离线

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "create_witness", ["223331844", "YYW1111111111111111111111111111111114T1Anm","1000000", "YOYO", "http://www.yoyow.org", false, 0, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "create_witness", ["223331844", "YYW1111111111111111111111111111111114T1Anm","100", "YOYO", "http://www.yoyow.org", false, 0, true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 58457,
  "ref_block_prefix": 2372452101,
  "expiration": "2018-05-03T11:28:36",
  "operations": [[
      13,{
        "fee": {
          "total": {
            "amount": 100000000,
            "asset_id": 0
          }
        },
        "account": 223331844,
        "block_signing_key": "YYW1111111111111111111111111111111114T1Anm",
        "pledge": {
          "amount": "100000000000",
          "asset_id": 0
        },
        "url": "http://www.yoyow.org"
      }
    ]
  ],
  "signatures": [
    "202857a37e91889a1c6124a2e3405eff00647b315aa55db7989334e187a5a92c1f0cb4bb00531fa525e53f26403e8bd323a9e46f8289b0039ed2caeb951f70eb28"
  ]
}

2.4.3 update_witness

修改见证人信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要见证人所有者的active key

访问授权限制
访问级别: 普通接口
请求参数
witness_account:
 账号(UID或昵称)
block_signing_key:
 新的出块签名公钥,不需修改则输入 null
pledge_amount:新的抵押金额,不需修改则输入 null
pledge_asset_symbol:
 新的抵押币种(YOYO),不需修改则输入 null
url:新的介绍链接,不需修改则输入 null
can_pledge:是否允许抵押, true / false 不需修改则输入 null
bonus_rate:抵押挖矿分红比例,出块工资中的该比例部分分给抵押账户 不需修改则输入 null
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

其中,抵押金额和币种必须同时出现或者同时不出现,目前币种只能是 YOYO

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_witness", ["223331844", null,"100345", "YOYO", null, null, null, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_witness", ["223331844", null,"100345", "YOYO", null, null, null, true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 13103,
    "ref_block_prefix": 3050749194,
    "expiration": "2018-05-04T04:17:42",
    "operations": [
      [
        14,
        {
          "fee": {
            "total": {
              "amount": 1000000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 1000000,
                "asset_id": 0
              }
            }
          },
          "account": 223331844,
          "new_pledge": {
            "amount": "10034500000",
            "asset_id": 0
          }
        }
      ]
    ],
    "signatures": [
      "1f6503a1e7dd15d1d9d5fe9cdaddddea39acf40071bd5621458b9abf3e0c8709f63fedfac89adc571fcc8af20fe6beb9f94d93d47256d3170b314e87153492357e"
    ]
  }
}

2.4.4 create_committee_member

创建候选理事身份。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
owner_account:账号(UID或昵称)
pledge_amount:抵押金额
pledge_asset_symbol:
 抵押币种(YOYO)
url:介绍链接
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

查询到的资产实际只有YOYO可用。

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "create_committee_member", ["223331844","1000", "YOYO", "http://www.yoyow.org", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "create_committee_member", ["223331844","1000", "YOYO", "http://www.yoyow.org", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 13153,
    "ref_block_prefix": 1417310192,
    "expiration": "2018-05-04T04:20:12",
    "operations": [
      [
        8,
        {
          "fee": {
            "total": {
              "amount": 10000000,
              "asset_id": 0
            }
          },
          "account": 223331844,
          "pledge": {
            "amount": 100000000,
            "asset_id": 0
          },
          "url": "http://www.yoyow.org"
        }
      ]
    ],
    "signatures": [
      "1f2b34fe5e2437be46d83ec2f0f4482e1b5df509131131c41eeb16e484df5e4ea96df19f82be294433bc751e84d6dcc28073e758ad7de1ca48c4b36fb2d41b2def"
    ]
  }
}

2.4.5 update_committee_member

修改候选理事信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
committee_member_account:
 账号(UID或昵称)
pledge_amount:新的抵押金额,不需修改则输入 null
pledge_asset_symbol:
 新的抵押币种(YOYO),不需修改则输入 null
url:新的介绍链接,不需修改则输入 null
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_committee_member", ["223331844", "10234", "YOYO", null, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_committee_account", ["250926091","10000", "YOYO", null, true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 13189,
    "ref_block_prefix": 2763581564,
    "expiration": "2018-05-04T04:22:00",
    "operations": [
      [
        9,
        {
          "fee": {
            "total": {
              "amount": 1000000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 1000000,
                "asset_id": 0
              }
            }
          },
          "account": 223331844,
          "new_pledge": {
            "amount": 1023400000,
            "asset_id": 0
          }
        }
      ]
    ],
    "signatures": [
      "20506ea2aadb44a57ae4bb60c71b0c2002f89410d4941ed83d3323c4bed2f883ee4d045c9a326e331b49770db32799c63b854a67dd4ff998b74f6b457cb7d9157e"
    ]
  }
}

2.4.6 set_voting_proxy

设置投票代理。

账户A设置账户B为投票代理,则B的投票对象得到的票数为A的有效票数+B的有效票数。 A 称之为委托人,B 称之为代理人

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要委托人账号的active key

访问授权限制
访问级别: 普通接口
请求参数
account_to_modify:
 委托人账号(UID或昵称)
voting_account:代理人账号(用UID或昵称设置代理,null为取消代理)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "set_voting_proxy", ["250926091", "abit", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "set_voting_proxy", ["250926091", "abit", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 18995,
    "ref_block_prefix": 2835940919,
    "expiration": "2018-04-16T02:06:36",
    "operations": [
      [
        5,
        {
          "fee": {
            "total": {
              "amount": 100000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 100000,
                "asset_id": 0
              }
            }
          },
          "voter": 223331844,
          "proxy": 250926091
        }
      ]
    ],
    "signatures": [
      "1f793459c8c7e06e80b2b34d2d13a0fb46e5d4f839953f6fae96af16acf389b51c534c35d2f85fe5d9f8e7316b1bb66941c2591e31afe7e5bbfee8802877ad7af0"
    ]
  }
}

2.4.7 update_witness_votes

见证人投票。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要投票人的active key

访问授权限制
访问级别: 普通接口
请求参数
voting_account:账号(UID或昵称)
witnesses_to_add:
 增加支持的见证人清单(UID或昵称)
witnesses_to_remove:
 移除支持的见证人清单(UID或昵称)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

witnesses_to_add和witnesses_to_remove两个清单可以都为空"[]",表示刷新投票意向。

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_witness_votes", ["250926091", ["abit"], [], true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_witness_votes", ["250926091", ["abit"], [], true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 18961,
    "ref_block_prefix": 1229162670,
    "expiration": "2018-04-16T02:04:54",
    "operations": [
      [
        15,
        {
          "fee": {
            "total": {
              "amount": 200000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 200000,
                "asset_id": 0
              }
            }
          },
          "voter": 250926091,
          "witnesses_to_add": [
            209414065
          ],
          "witnesses_to_remove": []
        }
      ]
    ],
    "signatures": [
      "206badbed989fcf01c93a2eda807976bae29f2e95ca2dcaa83f645be6c3bffcbc178199f4e4816801643cc9ee158fc4e8f450c2082763ac163e1b875bfb82f3a25"
    ]
  }
}

2.4.8 update_committee_member_votes

理事会选举投票。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要投票人的active key

访问授权限制
访问级别: 普通接口
请求参数
voting_account:投票人账号(UID或昵称)
committee_members_to_add:
 数组,增加支持的候选理事清单(UID或昵称)
committee_members_to_remove:
 数组,移除支持的候选理事清单(UID或昵称)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

committee_members_to_add,committee_members_to_remove两个清单可以都为空"[]",表示刷新投票意向。

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_committee_member_votes", ["250926091", ["init1"], [], true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_committee_member_votes", ["250926091", ["init1"], [], true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 19152,
    "ref_block_prefix": 1139468448,
    "expiration": "2018-04-16T02:14:27",
    "operations": [
      [
        10,
        {
          "fee": {
            "total": {
              "amount": 100000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 100000,
                "asset_id": 0
              }
            }
          },
          "voter": 250926091,
          "committee_members_to_add": [
            25997
          ],
          "committee_members_to_remove": []
        }
      ]
    ],
    "signatures": [
      "1f35562e4301c20f293977ffe27399ccf961fc3d5c0c9d928730ed5af03af24637599e30d070032bae887d9db3201c891b1c362dd0324e8bd9b02064d679a65be3"
    ]
  }
}

2.4.9 collect_csaf_with_time

领取积分,需指定时间参数,领取积累到指定时间的积分。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

如果领给自己,需要领取者的Secondary Key

如果领给其他账户,需要领取者的 Active Key

访问授权限制
访问级别: 普通接口
请求参数
from:领取账号(UID或昵称)
to:接收账号(UID或昵称)
amount:领取金额
asset_symbol:领取币种( 币种只能是 YOYO )
time:指定时间,例如:"2018-04-16T02:44:00" ,该时间为UTC时间,且不得早于当前链上新出块的时间5分钟。
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "collect_csaf_with_time", ["223331844", "223331844", "0.5", "YOYO", "2018-04-16T02:44:00" true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "collect_csaf_with_time", ["223331844", "223331844", "0.5", "YOYO", "2018-04-16T02:44:00" true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 19813,
    "ref_block_prefix": 1809327617,
    "expiration": "2018-04-16T02:47:30",
    "operations": [
      [
        6,
        {
          "fee": {
            "total": {
              "amount": 100000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 100000,
                "asset_id": 0
              }
            }
          },
          "from": 223331844,
          "to": 223331844,
          "amount": {
            "amount": 50000,
            "asset_id": 0
          },
          "time": "2018-04-16T02:44:00"
        }
      ]
    ],
    "signatures": [
      "1f250855fcc4e4ef093c14990411b1cfd41f97de43447e1b6a21cbe26eb95f6c9671b7c0d5ba4365d76018d277086c34c1d73a1f90c817f4d073852c6f041daf72",
      "2061c58d04a7ad9f60af1f145c837f57475d3d1785754527753b1144c1bef445240faa079b5927956be10693711b392b7a52fb55439addacbcee94a40e61f13f84"
    ]
  }
}

2.4.10 collect_csaf & collect_csaf_new

领取积分,领取积累到当前时间(分钟)的积分。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

如果领给自己,需要领取者的Secondary Key

如果领给其他账户,需要领取者的 Active Key

访问授权限制
访问级别: 普通接口
请求参数
from:领取账号(UID或昵称)
to:接收账号(UID或昵称)
amount:领取金额
asset_symbol:领取币种( 币种只能是 YOYO )
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费 (collect_csaf 没有该参数,默认使用积分抵扣手续费)
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "collect_csaf", ["250926091", "250926091", 1, "YOYO", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "collect_csaf", ["250926091", "250926091", 1, "YOYO", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 19646,
    "ref_block_prefix": 555752677,
    "expiration": "2018-04-16T02:39:09",
    "operations": [
      [
        6,
        {
          "fee": {
            "total": {
              "amount": 100000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 100000,
                "asset_id": 0
              }
            }
          },
          "from": 250926091,
          "to": 250926091,
          "amount": {
            "amount": 100000,
            "asset_id": 0
          },
          "time": "2018-04-16T02:37:00"
        }
      ]
    ],
    "signatures": [
      "203a417b25f10110d8143d7476976abbcbb3490f13432630366e5b0d1d8d7580573c8595e93109af4a55282756b8b4916ae055147cceae1bc7b85f2b0a7f2fa042",
      "2054d3b25618ddaeae499297a483d5490bac77f35bac7dd850645400d7f8001a2265cd997ff62db54740e9fcda52b0bbbaf5aa6d12d3fbcd65a71e2ccf6baa1e1a"
    ]
  }
}

2.4.11 create_platform

创建平台

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要申请者的Active key

访问授权限制
访问级别: 普通接口
请求参数
owner_account:创建者账号
name:平台名称
pledge_amount:抵押数量,当前不得少于10000 YOYO
pledge_asset_symbol:
 抵押币种(YOYO)
url:平台链接
extra_data:平台额外数据
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "create_platform", ["223331844", "yoyo.club", "10000", "YOYO", "", "", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "create_platform", ["223331844", "yoyow.club", "10000", "YOYO", "", "", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 19954,
    "ref_block_prefix": 1357577324,
    "expiration": "2018-04-16T02:54:33",
    "operations": [
      [
        20,
        {
          "fee": {
            "total": {
              "amount": 100007811,
              "asset_id": 0
            }
          },
          "account": 223331844,
          "pledge": {
            "amount": 1000000000,
            "asset_id": 0
          },
          "name": "baidu",
          "url": "",
          "extra_data": ""
        }
      ]
    ],
    "signatures": [
      "20534af4af03c6d4001c797dde6ac438a6b3d31c77b94cb8e4b6519e681a289c69370057de58412bb5e3ba8320ab975d33012bb92b20509e3daee6582affce8e80"
    ]
  }
}

2.4.12 update_platform

修改平台信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

访问授权限制
访问级别: 普通接口
请求参数
platform_account:
 账号(UID或昵称)
name:新的平台名称,不需修改则输入 null
pledge_amount:新的抵押金额,不需修改则输入 null
pledge_asset_symbol:
 新的抵押币种(YOYO),不需修改则输入 null
url:新的介绍链接,不需修改则输入 null
extra_data:新的平台额外数据
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

注: 抵押金额和币种必须同时出现或者同时不出现,目前币种只能是 YOYO。 抵押金额为 0 则为关闭平台

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_platform", ["223331844", "NUUUU", null, null, "http://www.example.com", "http://www.example.com", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_platform", ["223331844", "NUUUU", null, null, "http://www.example.com", "http://www.example.com", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 20262,
    "ref_block_prefix": 1534083365,
    "expiration": "2018-04-16T03:09:57",
    "operations": [
      [
        21,
        {
          "fee": {
            "total": {
              "amount": 1053709,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 1053709,
                "asset_id": 0
              }
            }
          },
          "account": 223331844,
          "new_name": "NUUUU",
          "new_url": "http://www.example.com",
          "new_extra_data": "http://www.example.com"
        }
      ]
    ],
    "signatures": [
      "202e8e53a7e58d4b60c7bf7b0d3f8076a6c9b8f7c472c48e61463cff68228e2cf643404bf954f1c7596deb05630942c95057ff397f31753bff069e5754894efcad"
    ]
  }
}

2.4.13 update_platform_votes

为平台投票

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要投票者的Active key

访问授权限制
访问级别: 普通接口
请求参数
voting_account:投票人账号(UID或昵称)
platforms_to_add:
 增加支持的平台清单(UID或昵称)
platforms_to_remove:
 移除支持的平台清单(UID或昵称)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

latforms_to_add,platforms_to_remove 两个清单可以都为空,表示刷新投票意向。

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_platform_votes", ["250926091", ["223331844"], [], true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_platform_votes", ["250926091", ["223331844"], [], true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 20494,
    "ref_block_prefix": 3288350547,
    "expiration": "2018-04-16T03:21:33",
    "operations": [
      [
        22,
        {
          "fee": {
            "total": {
              "amount": 200000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 200000,
                "asset_id": 0
              }
            }
          },
          "voter": 250926091,
          "platform_to_add": [
            223331844
          ],
          "platform_to_remove": []
        }
      ]
    ],
    "signatures": [
      "20274d50cf4905fe072e3257632335546c386721f2d608cf3939316f7167ddbea55a28616cc790b00aea5bc89b6649e56c04c8121f50a97c2ca4b3f587ac5e922e"
    ]
  }
}

2.4.14 account_auth_platform

账户对平台授权。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

主控密钥

访问授权限制
访问级别: 普通接口
请求参数
account:授权账号(UID或昵称)
platform_owner:平台所有者账号(UID或昵称)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "account_auth_platform", ["250926091", "223331844", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "account_auth_platform", ["250926091", "223331844", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 26612,
    "ref_block_prefix": 1858930703,
    "expiration": "2018-07-05T02:34:57",
    "operations": [
      [
        23,
        {
          "fee": {
            "total": {
              "amount": 10000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 10000,
                "asset_id": 0
              }
            }
          },
          "uid": 223331844,
          "platform": 250926091
        }
      ]
    ],
    "signatures": [
      "200ee643c33b074ad002bc6f4b477ff48dbee76bd3aa1c3c5b3a4c064b1f39581e61f93e957128c1c20737eafa2e09c56f6d0f97468676cfa2a15d04f50da0774c"
    ]
  }
}

2.4.15 account_cancel_auth_platform

账户取消对平台授权。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

主控密钥

访问授权限制
访问级别: 普通接口
请求参数
account:授权账号(UID或昵称)
platform_owner:平台所有者账号(UID或昵称)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "account_cancel_auth_platform", ["250926091", "223331844", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "account_cancel_auth_platform", ["250926091", "223331844", true, true], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 26736,
    "ref_block_prefix": 2510951750,
    "expiration": "2018-07-05T02:41:09",
    "operations": [
      [
        24,
        {
          "fee": {
            "total": {
              "amount": 10000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 10000,
                "asset_id": 0
              }
            }
          },
          "uid": 223331844,
          "platform": 250926091
        }
      ]
    ],
    "signatures": [
      "2021240ab7c321fad009693c8a598363aa840fcde0f07cc54d72b8c3b7d6e116d4357127328faea805aff7d632fb0a09e2ce6ac203d4a97b2dd30c139548939d38"
    ]
  }
}

2.4.16 create_asset

创建资产

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要申请者的Active key

访问授权限制
访问级别: 普通接口
请求参数
issuer:创建人UID
symbol:要创建资产的符号
precision:精度(保留几位小数)
common:选项,详见下文选项参数结构
initial_supply:初始流通量为整型表示,即:实际金额 = initial_supply / ( 10 ^ precision )
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播

其中选项参数结构

asset_options {
      // 该资产在任何给定时间可能存在的最大供应量。 这可以和 GRAPHENE_MAX_SHARE_SUPPLY 一样大
      // 特别说明:该最大供应量为最小单位Token的数量,比如发行的最大供应量为30000,精度设为2,则实际的供应量为30000/(10^2)=300个Token,最小的交易单位为0.01。
      max_supply = GRAPHENE_MAX_SHARE_SUPPLY;
      // (预留字段,暂未使用,必须为 0 )
      market_fee_percent = 0;
      // (预留字段,暂未使用,必须为 0 )
      max_market_fee = GRAPHENE_MAX_SHARE_SUPPLY;

      // 发行人有权更新的标志
      issuer_permissions = UIA_ASSET_ISSUER_PERMISSION_MASK;
      // 此权限上的当前活动标志
      flags = 0;

      // 一组白名单的账户可以使用此资产。 如果whitelist_authorities不为空,则只有whitelist_authorities中的帐户才可以持有,使用或转让资产。
      whitelist_authorities;
      // 一组黑名单的帐户,不可以持有,使用此资产。
      blacklist_authorities;

      // 定义该资产可能在市场上交易的资产(预留字段,暂未使用)
      whitelist_markets;
      // 定义该资产不得在市场上交易的资产,不得重叠白名单 (预留字段,暂未使用)
      blacklist_markets;

      // 描述该资产的含义/目的的数据,费用将按照描述的大小进行收费。
      string description;
   };

其中, issuer_permisisons 和 flags 两个字段,是以整数方式表示,该整数转换为二进制后,每一位代表一个权限或者标志。目前定义如下:

enum asset_issuer_permission_flags
   {
      white_list           = 0x02,    // 白名单,如果启用,则该资产发行人可以控制他人是否可以使用该资产(这里的“使用”包含转账等操作)
      override_authority   = 0x04,    // 强制转账,如果启用,则该资产发行人可以强制转走或者收回其他人账户里的该类资产
      transfer_restricted  = 0x08,    // 限制转账,如果启用,则转账的发起者或者接收者必须是该资产发行人
      issue_asset          = 0x200,   // 发行资产,如果启用,则该资产发行人可以增加一定数量的该类资产到某账户,同时增加该资产的当前流通总量
      change_max_supply    = 0x400,   // 修改流通量上限,如果启用,则该资产发行人可以修改该资产的流通量上限
   };

目前尚未使用的位,在 issuer_permissions 和 flags 两个字段中必须为 0 。 在flags 字段里,某一位如果为 1 ,则表示该资产启用了这一位对应的参数;如果为 0 ,则表示没有启用。 在issuer_permissions 字段里,如果某一位如果为 0 ,则表示资产发行人可以修改 flags 字段里对应的参数位;如果为 1 ,则表示不可修改。

注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "create_asset", ["250926091","TOTOTO", 4, {"max_supply":300000,"market_fee_percent":0,"max_market_fee":0,"issuer_permissions":4}, 200000, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "create_asset", ["250926091","TOTOTO", 4, {"max_supply":300000,"market_fee_percent":0,"max_market_fee":0,"issuer_permissions":4}, 200000, true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 57735,
  "ref_block_prefix": 998946957,
  "expiration": "2018-07-06T04:31:06",
  "operations": [[
      25,{
        "fee": {
          "total": {
            "amount": 50000000,
            "asset_id": 0
          }
        },
        "issuer": 250926091,
        "symbol": "TOTOTO",
        "precision": 4,
        "common_options": {
          "max_supply": 300000,
          "market_fee_percent": 0,
          "max_market_fee": 0,
          "issuer_permissions": 4,
          "flags": 0,
          "whitelist_authorities": [],
          "blacklist_authorities": [],
          "whitelist_markets": [],
          "blacklist_markets": [],
          "description": ""
        },
        "extensions": {
          "initial_supply": 200000
        }
      }
    ]
  ],
  "signatures": [
    "1f32dc80319019ff0c5eff27c9d1e15c7371fcc2825969b8e42a6429fb44c2ac3a75344b382e00c9f7f4af06600b0aff93aa380bf81b94f62b1abe0bfc807fcb6f"
  ]
}

2.4.17 update_asset

更新资产信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产所有者的Active key

访问授权限制
访问级别: 普通接口
请求参数
symbol:资产符号
new_issuer:新的资产所有人,不需修改则置为null
new_options:新的资产选项(见create_asset 中的 common参数结构),不需修改则输入 null
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

只有资产发行人才能使用这个功能。

资产的所有人可以转移,修改new_issuer参数即可转移给其他账户。

只有当前流通量为零时,才能修改精度信息。

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "update_asset", ["WOWO", null, {"max_supply":"2000000000"}, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "update_asset", ["WOWO", null, {"max_supply":"2000000000"}, true, true]]}, "id": 1}' http://localhost:8091/rpc
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 12862,
    "ref_block_prefix": 653302827,
    "expiration": "2018-05-04T04:05:39",
    "operations": [
      [
        26,
        {
          "fee": {
            "total": {
              "amount": 50000000,
              "asset_id": 0
            }
          },
          "issuer": 223331844,
          "asset_to_update": 3,
          "new_options": {
            "max_supply": 2000000000,
            "market_fee_percent": 0,
            "max_market_fee": "1000000000000000",
            "issuer_permissions": 79,
            "flags": 0,
            "whitelist_authorities": [],
            "blacklist_authorities": [],
            "whitelist_markets": [],
            "blacklist_markets": [],
            "description": ""
          }
        }
      ]
    ],
    "signatures": [
      "2030b2b084ab8e47bc2da5c863475776eac2cde1feba4cb3575eb7a7e86f96c9594a9778280c740098a5eec26f84b57993d925d2630c1a3dc31395c9938a676089"
    ]
  }
}

2.4.18 enable_allowed_assets

账户主动启用或停用账户端资产白名单。

该白名单默认为停用状态,停用白名单即 账户可以发送和接收任何资产。

白名单处于启用状态时,该账户只能发送和接收名单内的资产,同时可使用 update_allowed_assets 命令更新白名单。

从停用状态变更为启用状态时,白名单中默认只有“核心资产”,即 YOYO 。

从启用状态停用白名单后,数据清除。重新启用时需重新添加需要的资产。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产所有者的Active key

访问授权限制
访问级别: 普通接口
请求参数
account:账号(UID或昵称)
enable:是否启用( true 为启用, false 为停用 )
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "enable_allowed_assets", ["250926091", false, true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "issue_asset", "250926091", false, true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
  {
    "ref_block_num": 56000,
    "ref_block_prefix": 3273656390,
    "expiration": "2018-07-06T03:04:21",
    "operations": [[
        34,{
          "fee": {
            "total": {
              "amount": 100000,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 100000,
                "asset_id": 0
              }
            }
          },
          "account": 250926091,
          "enable": false
        }
      ]
    ],
    "signatures": [




"1f7e06ed28f6017e9a25ee1d165ec1aae330fb87abc9486c264c30f7de2e8d2369077509d61d96df016fbeec55bbd541532b90f35bf2e18278c87369fa87d7158b"
    ]
  }

2.4.19 update_allowed_assets

更新账户端资产白名单。

只有白名单处于开启状态时,才能更新。 不能移除 YOYO 。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产所有者的Active key

访问授权限制
访问级别: 普通接口
请求参数
account:账号(UID或昵称)
assets_to_add:添加到白名单的资产清单(资产代码或 id )
assets_to_remove:
 从白名单移除的资产清单(资产代码或 id )
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "issue_asset", ["250926091", "100000", "WOWO", "memo", ture, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "issue_asset", ["250926091", "100000", "WOWO", "memo", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 56441,
  "ref_block_prefix": 3725987382,
  "expiration": "2018-07-06T03:26:24",
  "operations": [[
      35,{
        "fee": {
          "total": {
            "amount": 200000,
            "asset_id": 0
          },
          "options": {
            "from_csaf": {
              "amount": 200000,
              "asset_id": 0
            }
          }
        },
        "account": 250926091,
        "assets_to_add": [
          3
        ],
        "assets_to_remove": []
      }
    ]
  ],
  "signatures": [
    "200f4362763eef9a5f0de6c461d2dcde77e665ae5ac2d462c89dd1f4ba22b35b7b21662e306d1e52c530815983f284d79b3191ebd4d3fea43f135aff4e21fe39a3",
    "1f199078220bf0d6c2fcf28e0bd4fbf9afc1eb7db241997173a469d88d538d36c03c3299136cf42a030810c5adf250be990029391c0ad7ae8268e5bee4850f07bd"
  ]
}

2.4.20 issue_asset

分配发行的资产给某个账号

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产所有者的Active key

访问授权限制
访问级别: 普通接口
请求参数
to_account:发行到的目标账号
amount:数量
symbol:资产符号
memo:备注
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "issue_asset", ["250926091", "100000", "WOWO", "memo", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "issue_asset", ["250926091", "100000", "WOWO", "memo", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 55598,
  "ref_block_prefix": 1065296620,
  "expiration": "2018-05-03T09:05:39",
  "operations": [[
      27,{
        "fee": {
          "total": {
            "amount": 2008984,
            "asset_id": 0
          }
        },
        "issuer": 223331844,
        "asset_to_issue": {
          "amount": 1000000000,
          "asset_id": 3
        },
        "issue_to_account": 250926091,
        "memo": {
          "from": "YYW8EeMDaSmDg8zLXL272kcm4W7vUF4c4tBkfQpV7N79PBjgGjkDN",
          "to": "YYW7SpC4QLY1LRRxFQ2hbYHdAyQo88L8qnPJcDJkiRMugcnFGUGvo",
          "nonce": "3388232258004121975",
          "message": "fc712e427e57aae3d6819e3427b7f90a"
        }
      }
    ]
  ],
  "signatures": [
    "205e29664c74590e1af73aa645374dc25f2900758e5213a3120fdf285d7940d5e66339311a97513cf78bd794916619f5813c940a9e7bc4b942fbd9fed49a2a7d27"
  ]
}

2.4.21 reserve_asset

销毁自己账户中指定数量的指定资产。 操作完成后,该资产类型的流通总量相应减少。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产所有者的Active key

访问授权限制
访问级别: 普通接口
请求参数
from:账号(UID或昵称)
amount:金额
symbol:币种(资产代码)
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "reserve_asset", ["250926091", "1000", "WOWO", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "reserve_asset", ["250926091", "1000", "WOWO", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 56703,
  "ref_block_prefix": 1905534427,
  "expiration": "2018-07-06T03:39:30",
  "operations": [[
      28,{
        "fee": {
          "total": {
            "amount": 10000,
            "asset_id": 0
          },
          "options": {
            "from_csaf": {
              "amount": 10000,
              "asset_id": 0
            }
          }
        },
        "payer": 250926091,
        "amount_to_reserve": {
          "amount": 10000000,
          "asset_id": 3
        }
      }
    ]
  ],
  "signatures": [
    "1f6a2f416a525ae4754a98388cb4464f60f1b77659c5a742d8b76a80d581484ce5681c24aa51c7379acaa8247df49d962cb28b5910e179a7de9c8a48e49fe7cc5a"
  ]
}

2.4.22 override_transfer

强制转账。资产发行人强制某账户将一定数量资产转到另一账户。

只有资产发行人才能使用这个功能。

备注用发行人备注私钥加密,转入人可解密备注,转出人不可解密。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

需要资产发行人的Active key和memo key

访问授权限制
访问级别: 普通接口
请求参数
from:转出人(UID或昵称)
to:转入人(UID或昵称)
amount:金额
symbol:币种(资产代码)
memo:备注(不带备注的话用空串"")
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{"id":1, "method":"call", "params":[0, "override_transfer", ["216494599", "250926091", 2, "SOSO", "memo", true, true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0, "override_transfer", ["216494599", "250926091", 2, "SOSO", "memo", true, true]], "id": 1}' http://localhost:8091/rpc
返回结果
{
  "ref_block_num": 61983,
  "ref_block_prefix": 2781522721,
  "expiration": "2018-07-06T08:03:30",
  "operations": [[
      30,{
        "fee": {
          "total": {
            "amount": 2008984,
            "asset_id": 0
          },
          "options": {
            "from_csaf": {
              "amount": 2008984,
              "asset_id": 0
            }
          }
        },
        "issuer": 223331844,
        "from": 216494599,
        "to": 250926091,
        "amount": {
          "amount": 20000,
          "asset_id": 283
        },
        "memo": {
          "from": "YYW5jiVsASqAyUibUb8awgDapFqfjQJo3SfvTEPJHxir8r3ggVtZU",
          "to": "YYW8Z8rtp7oEZFJi7Ar9HC4r4d15jXCVTQ2CAosjSnkSFdbc74GJ3",
          "nonce": "9585190871224727019",
          "message": "b0e7b1997c2142125c0369c4304a33c1"
        }
      }
    ]
  ],
  "signatures": [
    "20008db33ea71863fc7f4b97763a34e96e8b9d87714b1445d33c34a6b7bb3015c14d0a130c1ee74946c19b5e992c02249872e1bf601ca24380ebef22e5119a2894"
  ]
}

2.5 广告类 API

2.5.1 creat_advertising

平台账户创建一个新的广告位。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform_account:
 账号 uid 或者昵称;
ad_desc:广告描述;
unit_price:单位时间的价格;
unit_time:单位时间;
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费.
broadcast:是否广播
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"create_advertising",["309037055","test_content",10,100,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"create_advertising",["309037055","test_content",10,100,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 19218,
    "ref_block_prefix": 1481040854,
    "expiration": "2020-08-20T03:07:57",
    "operations": [[
        42,{
          "fee": {
            "total": {
              "amount": 11269,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 11269,
                "asset_id": 0
              }
            }
          },
          "advertising_aid": 4,
          "platform": 309037055,
          "unit_time": 100,
          "unit_price": 1000000,
          "description": "test_content"
        }
      ]
    ],
    "signatures": [
      "200ae5264dc2a7f5ee834eb03b5d96110caa3cd010f8463bb8035553734bbceadc794a4f2c8be36bf27c3324e967e7af95bb2f85b5312db98e276209866a09b57d"
    ]
  }
}

2.5.2 update_advertising

平台账户编辑广告位信息,上架、下架广告位。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform_account:
 账号 uid 或者昵称;
advertising_aid:
 广告的ID;
ad_desc:广告的描述;
unit_price:单位时间的价格;
unit_time:单位时间;
on_sale:是否在售;
csaf_fee:是否使用积分抵扣手续费,true: 积分抵扣手续费,false: 零钱支付手续费;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"update_advertising",["309037055","1","ad_update",100,100,"",true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"update_advertising",["309037055","1","ad_update",100,100,"",true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 20149,
    "ref_block_prefix": 1435609923,
    "expiration": "2020-08-20T03:54:30",
    "operations": [[
        43,{
          "fee": {
            "total": {
              "amount": 10976,
              "asset_id": 0
            },
            "options": {
              "from_csaf": {
                "amount": 10976,
                "asset_id": 0
              }
            }
          },
          "platform": 309037055,
          "advertising_aid": 1,
          "description": "ad_update",
          "unit_price": 10000000,
          "unit_time": 100
        }
      ]
    ],
    "signatures": [
      "205d6deef94b961d74051e872b470b42200013eec055c913dd3949a0a803c8e07247a795fe685c9a54a83e9c834d51907e09026c6bf9971ae6f0b3437aac2a172e"
    ]
  }
}

2.5.3 list_advertisings

列出平台账户所有的广告位。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform_account:
 平台账号的id;
advertising_aid:
 起始广告的ID;
limit:要展示的数量上限;
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"list_advertisings",["309037055",0,10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_advertisings",["309037055",0,10]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [{
      "id": "2.18.0",
      "advertising_aid": 1,
      "platform": 309037055,
      "on_sell": true,
      "unit_time": 100,
      "unit_price": 10000000,
      "description": "ad_update",
      "last_order_sequence": 0,
      "publish_time": "2020-08-20T02:49:27",
      "last_update_time": "2020-08-20T03:52:48"
    },{
      "id": "2.18.1",
      "advertising_aid": 2,
      "platform": 309037055,
      "on_sell": true,
      "unit_time": 100,
      "unit_price": 1000000,
      "description": "test_content1",
      "last_order_sequence": 0,
      "publish_time": "2020-08-20T02:52:18",
      "last_update_time": "2020-08-20T02:52:18"
    }
  ]
}

2.5.4 list_advertising_orders_by_purchaser

列出特定账户发起的购买广告位的列表。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
purchaser:广告购买者账号的id;
advertising_order_id:
 起始广告订单的ID;
limit:要展示的数量上限;
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"list_advertising_orders_by_purchaser",["309037055",0,10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_advertising_orders_by_purchaser",["309037055",0,10]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":
}

2.5.5 list_advertising_orders_by_ads_aid

列出特定广告位收到的购买订单列表。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:广告所在平台账号的id;
ads_id:广告位的ID;
ads_id:起始广告订单的ID;
limit:要展示的数量上限;
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"list_advertising_orders_by_ads_aid",["309037055",0,0,10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_advertising_orders_by_ads_aid",["309037055",0,0,10]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":
}

2.5.6 buy_advertising

购买广告位。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
acount:账户id;
platform:平台账户的id;
ads_id:广告的id;
start_time:广告开始时间;
buy_number:购买数目;
extra_data:额外信息;
memo_data:memo信息;
csaf_fee:是否用积分付手续费:true,用积分付;否,用余额支付;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"buy_advertising",["309037055","309037055",1,155197400,30,extramessage,null,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"buy_advertising",["309037055","309037055",1,155197400,30,extramessage,null,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":
}

2.5.7 confirm_advertising

平台确认是否同意购买订单,或者拒绝购买订单。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:平台账户的id;
ads_id:广告的id;
ads_order_oid:广告订单id;
confirm:是否确认;
csaf_fee:是否用积分付手续费:true,用积分付;否,用余额支付;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"confirm_advertising",["309037055",1,1,true,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"confirm_advertising",["309037055",1,1,true,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":
}

2.5.8 ransom_advertising

在广告订单提交七天内未得到回复后,用户可以赎回所在订单里面的金额。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:平台账户的id;
account:发起订单用户的id
ads_id:广告的id;
ads_order_oid:广告订单id;
csaf_fee:是否用积分付手续费:true,用积分付;否,用余额支付;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"ransom_advertising",["309037055","309037055",1,1,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"ransom_advertising",["309037055","309037055",1,1,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result":
}

2.6 平台管理类 API

2.6.1 create_liscense

平台账户创建一个新的许可。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
license_type:许可类型
hash_value:许可的Hash值
title:许可的标题
body:许可的内容
extra_data:额外内容
csaf_fee:是否使用积分支付手续费。true,积分付手续费;false,余额付手续费。
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"create_license",["309037055",1,123456789,"license_one","licensebody","licenseextra",false,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"create_license",["309037055",1,123456789,"license_one","licensebody","licenseextra",false,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 48964,
    "ref_block_prefix": 953879366,
    "expiration": "2020-08-21T03:55:15",
    "operations": [[
        41,{
          "fee": {
            "total": {
              "amount": 14587,
              "asset_id": 0
            }
          },
          "license_lid": 1,
          "platform": 309037055,
          "type": 1,
          "hash_value": "123456789",
          "extra_data": "licenseextra",
          "title": "license_one",
          "body": "licensebody"
        }
      ]
    ],
    "signatures": [
      "20502916d94e25403f2faca0c93b5040853d9cea4eeb58b12a6bb954bdc3f2e50d4580b818cdcc1b89c6e91382f62af4335dd268ac9b1a6bdc78f2ac03139039c6"
    ]
  }
}

2.7 内容类 API

2.7.1 create_post

平台账户创建一个新的广告位。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:平台账户的id;
poster:文章作者账户的id
hash_value:文章的Hash值;
title:文章标题;
body:文章内容;
extra_data:额外内容
original_platform:
 文章原平台
original_poster:
 文章原作者
original_id:文章原id
post_create_ext:
 文章创建的扩展结构,详见下文文章创建扩展结构。
broadcast:是否广播。

其中文章创建扩展结构

post_create_ext{
  uint8_t                                           post_type = post_operation::Post_Type_Post; //文章类型
          optional<std::string>                             forward_price;                              //转发价格
          optional< map<account_uid_type, receiptor_ext> >  receiptors;                                 //受益人列表
  optional<license_lid_type>                        license_lid;                                //文章许可id
  uint32_t                                          permission_flags =                          //文章开放的权限
                                                          post_object::Post_Permission_Forward |  //文章允许转发
                                                      post_object::Post_Permission_Liked |    //文章允许点赞
                                                          post_object::Post_Permission_Buyout |   //文章允许买断
                                                      post_object::Post_Permission_Comment |  //文章允许评论
                                                          post_object::Post_Permission_Reward;    //文章允许打赏
  optional<string>                                  sign_platform;                                 //扩展:由平台账户代签
};
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"create_post",["309037055","309037055",987456321,"postname","postbody","postextry","","","",{post_type:0,forward_price:null,receiptors:null,license_lid :1,permission_flags:255,sign_platform:null},false,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"create_post",["309037055","309037055",987456321,"postname","postbody","postextry","","","",{post_type:0,forward_price:null,receiptors:null,license_lid :1,permission_flags:255,sign_platform:null},false,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "ref_block_num": 49241,
    "ref_block_prefix": 4121157896,
    "expiration": "2020-08-21T04:09:06",
    "operations": [[
        18,{
          "fee": {
            "total": {
              "amount": 10446,
              "asset_id": 0
            }
          },
          "post_pid": 1,
          "platform": 309037055,
          "poster": 309037055,
          "hash_value": "987456321",
          "extra_data": "postextry",
          "title": "postname",
          "body": "postbody",
          "extensions": {
            "post_type": 0,
            "license_lid": 1,
            "permission_flags": 255
          }
        }
      ]
    ],
    "signatures": [
      "207c8cf46c205005b117a6f0df2ed5624985997db50c0654cd964a423af032b74f0a45ab65fd923d1fb3cb837eaa4dbedbe4fde773dd9b33f1a9a0bee53de83c58",
      "2028adf0a8d80a2767e6d82322a772a2a8bfffcfb9fdc7b2193a675dbed8533d7674ad25f0890daea77b3e0496299e732fc3a65dd9fa964f03dfb02b7a5b7ef2af"
    ]
  }
}

2.7.2 update_post

用于更新文章内容,开发权限,许可id,转发价以及受益人出售收益的挂单.

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章所在平台的账户id;
poster:文章作者账户的id
post_pid:文章的id
hash_value:文章的Hash值;
title:文章标题;
body:文章内容;
extra_data:额外内容;
post_update_ext:
 文章更新的扩展结构,详见下文文章更新扩展结构;
csaf_fee:是否使用积分支付手续费。true,积分付手续费;false,余额付手续费。
broadcast:是否广播。

文章更新的扩展结构

post_update_ext{
    optional<std::string>       forward_price;     //更新转发价,需要作者签名
    optional<std::string>       receiptor;         //更新的目标受益人,收益人相关内容更新,需要该收益人签名
    optional<bool>              to_buyout;         //更新是否出售收益,需要目标收益人签名
    optional<uint16_t>          buyout_ratio;      //更新出售收益比率,需要目标收益人签名
    optional<std::string>       buyout_price;      //更新出售收益价格,需要目标收益人签名
    optional<time_point_sec>    buyout_expiration; //更新出售收益过期时间,需要目标收益人签名
    optional<license_lid_type>  license_lid;       //更新文章许可id ,需要作者签名
    optional<uint32_t>          permission_flags;  //更新文章开放权限 ,需要作者签名
    optional<string>              content_sign_platform;  //由平台代签内容更新
    optional<string>              receiptor_sign_platform;//由平台代签收益人参数更新
};
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"update_post",["309037055","309037055",2,,"","","","",{forward_price : 500, receiptor : 309037055, to_buyout : true, buyout_ratio : 30, buyout_price : 300, buyout_expiration : 1546272000,  license_lid : 1, permission_flags : null, content_sign_platform :null, receiptor_sign_platform :null},true,ture]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"update_post",["309037055","309037055",2,,"","","","",{forward_price : 500, receiptor : 309037055, to_buyout : true, buyout_ratio : 30, buyout_price : 300, buyout_expiration : 1546272000,  license_lid : 1, permission_flags : null, content_sign_platform :null, receiptor_sign_platform :null},true,ture], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "ref_block_num": 52512,
              "ref_block_prefix": 2867670362,
              "expiration": "2020-08-21T06:52:39",
              "operations": [[
                  19,{
                    "fee": {
                      "total": {
                        "amount": 146875,
                        "asset_id": 0
                      },
                      "options": {
                        "from_csaf": {
                          "amount": 146875,
                          "asset_id": 0
                        }
                      }
                    },
                    "platform": 309037055,
                    "poster": 309037055,
                    "post_pid": 2,
                    "extensions": {
                      "forward_price": 50000000,
                      "receiptor": 309037055,
                      "to_buyout": true,
                      "buyout_ratio": 3000,
                      "buyout_price": 30000000,
                      "buyout_expiration": "2018-12-31T16:00:00",
                      "license_lid": 1
                    }
                  }
                ]
              ],
              "signatures": [
                "1f172368eb582b7fcf80ab201bf6d104071bb66d6be61a3b38d72ef25592c890af6e4e41029e9a1f3d383367bfa650d797739baa90b553a3aac0507117e189f1bf",
                "20642a2065e398d90a54c890e9884962f0db70bfe176e8cef15d5381fd5ad61f924b29b013578b7432738c8577b135737cde194e18dd6fb9459a4ee065f2d98c6d"
              ]
            }
}

2.7.3 get_post

用于对文章项目的查询。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章所在平台的账户id;
poster:文章作者账户的id
post_pid:文章的id
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"get_post",["309037055","309037055",1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_post",["309037055","309037055",1]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "id": "1.7.137",
              "platform": 309037055,
              "poster": 309037055,
              "post_pid": 1,
              "post_type": "Post_Type_Post",
              "hash_value": "987456321",
              "extra_data": "postextry",
              "title": "postname",
              "body": "postbody",
              "create_time": "2020-08-21T04:07:09",
              "last_update_time": "2020-08-21T04:07:09",
              "receiptors": [[
                  309037055,{
                    "cur_ratio": 10000,
                    "to_buyout": false,
                    "buyout_ratio": 0,
                    "buyout_price": 0,
                    "buyout_expiration": "1969-12-31T23:59:59"
                  }
                ]
              ],
              "license_lid": 1,
              "permission_flags": 255,
              "score_settlement": false
            }
}

2.7.4 reward_post

用于个人账户对文章的打赏,打赏可以是链上任意资产。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
account:打赏人的账户id;
platform:文章所在平台的账户id;
poster:文章作者账户的id;
post_pid:文章的id;
amount:打赏的数额;
asset_symbol:打赏的资产名字;
sign_platform:可选项,平台代签点赞文章内容;
csaf_fee:是否使用积分支付手续费。true,积分付手续费;false,余额付手续费。
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"reward_post",["309037055","309037055","309037055",2,1000,"YOYO",NULL,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"reward_post",["309037055","309037055","309037055",2,1000,"YOYO",NULL,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "ref_block_num": 55286,
              "ref_block_prefix": 3782910134,
              "expiration": "2020-08-21T09:11:21",
              "operations": [[
                  38,{
                    "fee": {
                      "total": {
                        "amount": 10000,
                        "asset_id": 0
                      }
                    },
                    "from_account_uid": 309037055,
                    "platform": 309037055,
                    "poster": 309037055,
                    "post_pid": 2,
                    "amount": {
                      "amount": 100000000,
                      "asset_id": 0
                    }
                  }
                ]
              ],
              "signatures": [
                "1f599bcdc9a2fd6b19badecd369948c114b295800e60897fdc6f6caf5aea417ff84b37d363636087602852af01b4e550b52c4ca45c53a51ef9b29d4ebe35e62900"
              ]
            }
}

2.7.5 get_license

用于查询平台特定license项目。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
license_lid:许可的id;
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"get_license",["309037055","1"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_license",["309037055","1"]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "id": "2.17.6",
              "license_lid": 1,
              "platform": 309037055,
              "license_type": 1,
              "hash_value": "123456789",
              "extra_data": "licenseextra",
              "title": "license_one",
              "body": "licensebody",
              "create_time": "2020-08-21T03:53:18"
            }
}

2.7.6 list_licenses

用于查询平台license项目。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
license_lid:起始许可的id;
limit:展示的数目
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"list_licenses",["309037055",2.17.6,1]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_licenses",["309037055",2.17.6,1]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [{
                "id": "2.17.6",
                "license_lid": 1,
                "platform": 309037055,
                "license_type": 1,
                "hash_value": "123456789",
                "extra_data": "licenseextra",
                "title": "license_one",
                "body": "licensebody",
                "create_time": "2020-08-21T03:53:18"
              }
            ]
}

2.7.7 get_posts_count

用于查询平台特定账户的文章数量。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
poster:用户的id;
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"get_posts_count",["309037055","309037055"]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_posts_count",["309037055","309037055"]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": 2
}

2.7.8 account_auth_platform

账户授予平台的零钱使用限额,以及授予平台的各类操作权限。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
account:文章平台的账户id;
platform_pid:用户的id;
memo:memo信息;
limit_for_platform:
 授予平台的零钱限额;
permission_flags:
 授予平台的权限,详情见下;
csaf_fee:使用积分付手续费。true,积分付手续费;false,余额付手续费;
broadcast:是否广播。

permission_flags权限详情:

account_auth_platform_object::Platform_Permission_Forward |  //转帖权
account_auth_platform_object::Platform_Permission_Liked |    //点赞权
account_auth_platform_object::Platform_Permission_Buyout |   //买断权
account_auth_platform_object::Platform_Permission_Comment |  //评论权
account_auth_platform_object::Platform_Permission_Reward |   //打赏权
account_auth_platform_object::Platform_Permission_Post,      //发贴权
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"account_auth_platform",["309037055","309037055","MEMO",10000,255,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"account_auth_platform",["309037055","309037055","MEMO",10000,255,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "ref_block_num": 3179,
              "ref_block_prefix": 4066884465,
              "expiration": "2020-08-24T02:59:36",
              "operations": [[
                  23,{
                    "fee": {
                      "total": {
                        "amount": 100000,
                        "asset_id": 0
                      },
                      "options": {
                        "from_csaf": {
                          "amount": 100000,
                          "asset_id": 0
                        }
                      }
                    },
                    "uid": 309037055,
                    "platform": 309037055,
                    "extensions": {
                      "limit_for_platform": 1000000000,
                      "permission_flags": 255,
                      "memo": {
                        "from": "YYW85x3LxSJafzbEMVjtkVy7ZdTTSi7QuY4KseM9PKWTVZK7fJwpa",
                        "to": "YYW85x3LxSJafzbEMVjtkVy7ZdTTSi7QuY4KseM9PKWTVZK7fJwpa",
                        "nonce": "17727766371187465601",
                        "message": "8f6523b9dc991bd7fc842740d68609d6"
                      }
                    }
                  }
                ]
              ],
              "signatures": [
                "1f5cdc640e66b1fc9a6c4869935b1fddb47d320e36737fd44f37b126cb7e04e2be4b69c29b9d037fa25865742e8217f6559d2be8b92dfba0dc5e5f28907b94b875"
              ]
            }
}

2.7.9 score_a_post

用于账户对文章帖子点赞打分,打分范围为-5~5,需要花费账户积分。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
from_account:点赞发起人的id;
platform:文章平台的账户id;
poster:用户的id;
post_pid:文章的id
score:打的分数,范围从-5到5
csaf:支付的积分;
sign_by_platform:
 可选项,由平台代签。默认为null;
csaf_fee:使用积分付手续费。true,积分付手续费;false,余额付手续费;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"score_a_post",["309037055","309037055","500545326",1,5,10,null,true,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"score_a_post",["309037055","309037055","500545326",1,5,10,null,true,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "ref_block_num": 13248,
              "ref_block_prefix": 3577965138,
              "expiration": "2020-08-24T11:23:03",
              "operations": [[
                  37,{
                    "fee": {
                      "total": {
                        "amount": 10000,
                        "asset_id": 0
                      },
                      "options": {
                        "from_csaf": {
                          "amount": 10000,
                          "asset_id": 0
                        }
                      }
                    },
                    "from_account_uid": 309037055,
                    "platform": 309037055,
                    "poster": 500545326,
                    "post_pid": 1,
                    "score": 5,
                    "csaf": 1000000
                  }
                ]
              ],
              "signatures": [
                "1f541290c8a297938ba7258f585d5cff065e738607f854106fdfcc18c49922ddb14e847b69f0740fcbe8590a7ed61aa37095c32577902e4c2ddefddd0ef05c45d4",
                "20017f65f962612d1207d113290a87abe3c33fadf13bdbd2debfd2ed1a0c35d27a36ffd99958ab07a5bccca8453dcc1a8b5a521bba4de5267f9fbeaf35d6fd4959"
              ]
            }
}

2.7.10 buyout_post

用于买断特定文章受益人的收益比。其中买断的受益人receiptor_account,必须先完成出售文章受益的有效挂单,参见update_post操作。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
from_account:买断发起人的id;
platform:文章所发布的平台账户;
poster:用户的id;
post_pid:文章id;
receiptor_account:
 要被买断的文章原有收益人的id
sign_platform:可选项,平台代签,默认填null;
csaf_fee:使用积分付手续费。true,积分付手续费;false,余额付手续费;
broadcast:是否广播。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"buyout_post",["500545326","309037055","309037055",1,"309037055",null,false,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"buyout_post",["500545326","309037055","309037055",1,"309037055",null,false,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "ref_block_num": 36148,
              "ref_block_prefix": 2436977284,
              "expiration": "2020-08-25T06:28:03",
              "operations": [[
                  40,{
                    "fee": {
                      "total": {
                        "amount": 10000,
                        "asset_id": 0
                      }
                    },
                    "from_account_uid": 500545326,
                    "platform": 309037055,
                    "poster": 309037055,
                    "post_pid": 1,
                    "receiptor_account_uid": 309037055
                  }
                ]
              ],
              "signatures": [
                "202f1263f5c3ed62aaeea5ddd59380ec301c88a7350c06df1c1fe67a06779333f32c138ae343cf8260c438caadb04e577a600e9dda818ee7c2c3cf0705859fce32",
                "202d144a7d068c98fc45dbe28fd87e296d2b4c32f36e01cef46932b48847ae867d4b01cc3c0418d31d8cb63aad62867e8e16fed0e9c754c5b76d79a8769179de2f"
              ]
            }
}

2.7.11 get_score

用于查询平台特定账户给特定文章的评分。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
poster:文章作者的id;
post_pid:文章的id;
from_account:打分账户的id。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"get_score",["309037055","500545326",1,309037055]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_score",["309037055","500545326",1,309037055]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
              "id": "2.16.153",
              "from_account_uid": 309037055,
              "platform": 309037055,
              "poster": 500545326,
              "post_pid": 1,
              "score": 5,
              "csaf": 1000000,
              "period_sequence": 0,
              "profits": 0,
              "create_time": "2020-08-24T11:21:06"
            }
}

2.7.12 get_posts_by_platform_poster

用于查询平台特定账户所发布的全部文章信息。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
poster:文章作者的id;
lower_bound_post:
 限定要查询的编号最大的文章的id;
limit:要展示的数目。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"get_posts_by_platform_poster",["309037055","500545326",1.7.155,10]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"get_posts_by_platform_poster",["309037055","500545326",1.7.155,10]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [{
                "id": "1.7.141",
                "platform": 309037055,
                "poster": 500545326,
                "post_pid": 1,
                "post_type": "Post_Type_Post",
                "hash_value": "987456321",
                "extra_data": "postextry",
                "title": "postname",
                "body": "postbody",
                "create_time": "2020-08-24T04:36:21",
                "last_update_time": "2020-08-24T04:36:21",
                "receiptors": [[
                    309037055,{
                      "cur_ratio": 2500,
                      "to_buyout": false,
                      "buyout_ratio": 0,
                      "buyout_price": 0,
                      "buyout_expiration": "1969-12-31T23:59:59"
                    }
                  ],[
                    500545326,{
                      "cur_ratio": 7500,
                      "to_buyout": false,
                      "buyout_ratio": 0,
                      "buyout_price": 0,
                      "buyout_expiration": "1969-12-31T23:59:59"
                    }
                  ]
                ],
                "license_lid": 1,
                "permission_flags": 255,
                "score_settlement": false
              }
            ]
}

2.7.13 list_scores

用于查询平台特定文章的限定数量的评分。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
platform:文章平台的账户id;
poster:文章作者的id;
post_pid:文章的id;
lower_bound_score:
 起始打分行为的id;
limit:展示数目限制;
list_cur_period:
 是否仅展示当前收益分配周期的点赞。true:只展示当前周期点赞;false:展示所有点赞。
注意事项

调用样例及调试工具

WebSocket:

wscat -c ws://localhost:8091
{{"id":1, "method":"call", "params":[0,"list_scores",["309037055","500545326",1,1.7.0,10,true]]}

JSON-RPC:

curl --data '{"jsonrpc": "2.0", "method": "call", "params":[0,"list_scores",["309037055","500545326",1,1.7.0,10,true]], "id": 1}' http://localhost:8093
返回结果
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": [{
                "id": "2.16.153",
                "from_account_uid": 309037055,
                "platform": 309037055,
                "poster": 500545326,
                "post_pid": 1,
                "score": 5,
                "csaf": 1000000,
                "period_sequence": 0,
                "profits": 0,
                "create_time": "2020-08-24T11:21:06"
              }
            ]
}

2.7.14 get_post_profits_detail

用于查询平台特定文章在特定周期内的收益。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
begin_period:开始周期号;
end_period:截止周期号;
platform:平台ID或名字;
poster:作者的账户ID或名字;
post_pid:文章的ID;
注意事项

2.7.15 get_platform_profits_detail

查询从起始周期到截至周期的平台的所有收益详情。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
begin_period:开始周期号;
end_period:截止周期号;
platform:平台ID或名字;
lower_bound_index:
 起始活动序号;
limits:显示的文章数目;
注意事项

2.7.16 get_poster_profits_detail

查询从起始周期到截至周期的作者的所有收益详情。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
begin_period:开始周期号;
end_period:截止周期号;
poster:作者ID或名字;
lower_bound_index:
 起始活动序号;
limits:显示的文章数目;
注意事项

2.7.17 get_score_profit

查询某账户在某收益周期的点赞总收入。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
account:账户的名称或ID;
period:收益分配的周期号。
注意事项

2.7.17 account_manage

用于对平台账户的管理。

支持格式

JSON

请求方式

WebSocket; JSON-RPC

所需密钥权限

wallet需要处于unlocked状态

访问授权限制
访问级别: 普通接口
请求参数
executor:管理员账户的id或名字;
account:所管理的账户;
opt:权限选项,详见下;
csaf_fee:使用积分付手续费。true,积分付手续费;false,余额付手续费;
broadcast:是否广播。

其中权限选项:

struct opt
{
   optional< bool > can_post;  //允许发帖
   optional< bool > can_reply; //允许回复
   optional< bool > can_rate;  //允许点赞
};
注意事项

YOYOW 中间件使用说明(Nodejs)

使用YOYOW 中间件是平台接入最简单的方式。主要提供三方面的接口: 账号授权,平台激励和内容上链。 可以采用 Docker 一键部署,获得相应的 API,方便的与 YOYOW 链进行交互。

YOYOW中间件是通过YOYOW node 的API接口与YOYOW网络通讯,为平台服务商提供方便的访问链上数据的接口,保证传统业务代码能在只做尽量少的改动情况下,也能达到上链的需求。具体示意图如下: _images/architecture.pngYOYOW 中间件作用示意图

平台的创建操作步骤请参考:从0开始创建YOYOW平台账户

部署启动

配置文件说明

配置文件的路径在代码路径下conf/config.js 文件中,如果使用docker的方式启动,可以将配置文件映射到容器中/app/conf路径下

{
    // api服务器地址,测试网公共api地址如下,正式网部署请更改该地址
    apiServer: "wss://api.testnet.yoyow.org",
    
    // 安全请求有效时间,单位s,如果请求的内容超过有效期,会返回 1003 请求已过期
    secure_ageing: 60,
    
    // 平台安全请求验证key 可以自行定义,具体使用见《安全访问》
    secure_key: "",
    
    // 平台所有者资金私钥 
    active_key: "",
    
    // 平台所有者零钱私钥
    secondary_key: "", 
    
    // 平台所有者备注私钥
    memo_key: "",
    
    // 平台id(yoyow id)
    platform_id: "",
    
    // 操作手续费是否使用积分
    use_csaf: true,
    
    // 转账是否转到余额 否则转到零钱
    to_balance: false,
    
    // 钱包授权页URL,测试网地址如下,正式网地址“https://wallet.yoyow.org/#/authorize-service”
    wallet_url: "http://demo.yoyow.org:8000/#/authorize-service",
    
    // 允许接入的IP列表,强制指定明确的来访IP地址,暂不支持"*" 或 "0.0.0.0"
    allow_ip: ["localhost", "127.0.0.1"]
}

需要注意的是:

  1. 在一般使用场景中,中间件值最多需要动用零钱私钥和备注私钥,只配置零钱私钥和备注私钥可以满足大部分需求。除非你确定需要使用资金私钥,否则不要将资金私钥写进配置文件。
  2. 中间件中使用了限制IP(allow_ip)和加密请求(secure_key)两种方式来保证安全性,不过依然强烈建议内网部署,做好隔离,私钥的安全性较为重要。
  3. 操作手续费建议使用积分抵扣,如果抵扣失败,会直接报错,不会自动扣除零钱作为手续费

Docker 一键部署

docker run -itd --name yoyow-middleware -v <本地配置文件路径>:/app/conf -p 3001:3001 yoyoworg/yoyow-middleware

手动部署

  1. clone 源码 git clone git@github.com:yoyow-org/yoyow-node-sdk.git
  2. 修改中间件配置 参照配置文件说明(),修改文件yoyow-node-sdk/middleware/conf/config.js
  3. 安装中间件服务所需node库 进入 ~/yoyow-node-sdk/middleware/ 目录 npm install
  4. 启动中间件服务 npm start

启动正常情况如下图, _images/step4.png启动正常情况如图

接口说明

请求文档及示例

1. 基础查询相关接口
1.1. 获取指定账户信息 getAccount

请求类型:GET

请求参数:

{Number} uid - 账号id

请求示例:

localhost:3000/api/v1/getAccount?uid=25638

返回结果:

{
  code: 作结果,
  message: 返回消息,
  data: { // 用户信息
    uid: 账号uid
    name: 账号名称
    owner: 主控权限
    active: 资金权限
    secondary: 零钱权限
    memo_key: 备注密钥公钥
    reg_info: 注册信息
    can_post: 是否可发帖
    can_reply: 是否可回帖
    can_rate: 是否可评价
    is_full_member: 是否会员
    is_registrar: 是否注册商
    is_admin: 是否管理员
    statistics: { //用户YOYO资产详情
      obj_id: 资产对象id
      core_balance: 余额
      prepaid: 零钱
      csaf: 积分
      total_witness_pledge: 见证人总抵押(用户创建见证人抵押数量)
      total_committee_member_pledge: 理事会总抵押(用户创建理事会成员抵押数量)
      total_platform_pledge: 平台总抵押(用户创建平台抵押数量)
      releasing_witness_pledge: 见证人抵押待退回
      releasing_committee_member_pledge: 理事会抵押待退回
      releasing_platform_pledge: 平台抵押待退回
    }
    assets: [ //用户拥有的所有资产
        {
            amount: 资产数量,
            asset_id: 资产id,
            precision: 资产精度,
            symbol: 资产符号,
            description: 资产描述"
        }
        ...
    ]
  }
}
1.2. 获取指定账户近期活动记录 getHistory

请求类型:GET

请求参数:

{Number} uid - 账号id
{Number} op_type - 查询op类型 '0' 为 转账op,默认为null 即查询所有OP类型
{Number} start 查询开始编号,为0时则从最新记录开始查询,默认为0
{Number} limit - 查询长度,最大不可超过100条,默认为10

请求示例:

localhost:3000/api/v1/getHistory?uid=25638&start=1220&limit=30&op_type=0

返回结果:

    {
      code: 操作结果,
      message: 返回消息,
      data: [] 历史记录对象数组
    }
1.3. 验证块是否不可退回 confirmBlock

请求类型:GET

请求参数:

{Number} block_num - 验证的块号

请求示例:

localhost:3000/api/v1/confirmBlock?block_num=4303231

返回结果:

    {
      code: 操作结果,
      message: 返回消息,
      data: 此块是否不可退回 
    }
1.4. 获取指定资产信息 getAsset

请求类型:GET

请求参数:

{String | Number} search - 资产符号(大写)或 资产id

请求示例:

http://localhost:3001/api/v1/getAsset?search=YOYOW

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    "id":"1.3.0", - 资产object id
    "asset_id":0, - 资产id
    "symbol":"YOYO", - 资产符号
    "precision":5, - 资产精度
    "issuer":1264, - 资产发行者uid
    "options":{
      "max_supply":"200000000000000", - 流通量上限
      "market_fee_percent":0, - 交易手续费百分比
      "max_market_fee":"1000000000000000", - 交易手续费最大值
      "issuer_permissions":0, - 资产可用权限
      "flags":0, - 资产权限
      "whitelist_authorities":[], - 资产白名单管理员清单 
      "blacklist_authorities":[], - 资产黑名单管理员清单
      "whitelist_markets":[], - 交易对白名单
      "blacklist_markets":[], - 交易对黑名单
      "description":"" - 资产描述
    },
    "dynamic_asset_data_id":"2.2.0", - 资产动态object id
    "dynamic_asset_data":{
      "id":"2.2.0", - 资产动态object id
      "asset_id":0,
      "current_supply":"107384564466939", - 资产当前发行量
      "accumulated_fees":0
    },
    "current_supply":"107384564466939",  - 资产当前发行量
    "accumulated_fees":0
  }
}
1.5. 获取指定平台信息 getPlatformById

请求类型:GET

请求参数: ​ {Number} uid - 平台所有者账号uid

请求示例:

http://localhost:3001/api/v1/getPlatformById?uid=217895094

返回结果:

{
  "id": "1.6.0", - 平台 object id
  "owner": 217895094, - 平台所有者账号uid
  "name": "test-yoyow", - 平台名称
  "sequence": 1,
  "is_valid": true, - 是否有效
  "total_votes": 0, - 平台总票数
  "url": "http://demo.yoyow.org/", - 平台url地址
  "pledge": 1000000000, - 平台抵押(YOYO)
  "pledge_last_update": "2018-02-10T01:03:57", - 平台抵押最后更新时间
  "average_pledge": 176601774, - 平台平均抵押
  "average_pledge_last_update": "2018-02-11T06:49:12", - 平台平均抵押最后更新时间
  "average_pledge_next_update_block": 4562164, - 平台平均抵押下次更新块号
  "extra_data": "{}", - 平台拓展信息 
  "create_time": "2018-02-10T01:03:57", - 平台创建日期
  "last_update_time": "2018-02-11T06:49:12" - 平台最后更新日期
}
2. 平台激励相关接口
2.1. 转账到指定用户 transfer (需要安全验证的请求)

请求类型:POST

请求参数:

 {Object} cipher - 请求的密文对象,格式如下
{
  ct, - 密文文本 16进制
  iv, - 向量 16进制
  s   - salt 16进制
}

请求对象结构:

{Number} uid - 指定用户id
{Number} amount - 转出金额
{Number} asset_id - 资产id 
{string} memo - 备注
{Number} time - 操作时间

请求示例:参照 安全请求验证

localhost:3000/api/v1/transfer

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    block_num: 操作所属块号
    txid: 操作id
  }
}
2.2. 获取转账二维码文本 getQRReceive(YOYOW APP 扫码可扫此二维码)

请求类型:GET

请求参数:

{Number} amount - 收款金额 (与收款备注都不填写的情况,用户可在APP中输入)

{String} memo - 收款备注 (与收款金额都不填写的情况,用户可在APP中输入)

{String | Number} asset - 转账资产符号 或 资产ID(默认为YOYO资产)

请求示例:

http://localhost:3001/api/v1/getQRReceive?amount=98&memo=新的转账&asset_id=0

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: 收款二维码字符串
}
2.3. 修改(仅增加白名单)授权用户资产白名单 updateAllowedAssets(需要安全验证的请求)

如果用户启用了资产白名单,则需要将UIA(用户发行资产)添加到用户的资产白名单中,才可以进行转账等交易。

请求类型:POST

请求参数:

{Object} cipher - 请求对象密文对象

{
  ct, - 密文文本 16进制
  iv, - 向量 16进制
  s   - salt 16进制
}

请求对象结构:

{Number} uid - 目标账户id

{Number} asset_id - 资产id

请求示例:参照 安全请求验证

localhost:3000/api/v1/updateAllowedAssets

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    block_num: 操作所属块号
    txid: 操作id
  }
}
3. 内容上链相关接口
3.1. 发送文章 post(需要安全验证的请求)

请求类型:POST

请求参数:

{Object} cipher - 请求对象密文对象

{
  ct, - 密文文本 16进制
  iv, - 向量 16进制
  s   - salt 16进制
}

请求对象结构:

{Number} platform - 平台账号
{Number} poster - 发文人账号
{Number} post_pid - 文章编号
{String} title - 文章标题
{String} body - 文章内容
{String} extra_data - 文章拓展信息
{Number} hash_value - hash值,如果不提供该参数,默认使用body内容的sha256值。
{Number} origin_platform - 原文平台账号(默认 null)
{Number} origin_poster - 原文发文者账号(默认 null)
{Number} origin_post_pid - 原文文章编号(默认 null)
{Number} time - 操作时间

请求示例:参照 安全请求验证

localhost:3000/api/v1/post

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    block_num: 操作所属块号
    txid: 操作id
  }
}
3.2. 更新文章 postUpdate(需要安全验证的请求)

请求类型:POST

请求参数:

{Object} cipher - 请求对象密文对象

{
  ct, - 密文文本 16进制
  iv, - 向量 16进制
  s   - salt 16进制
}

请求对象结构:

{Number} platform - 平台账号

{Number} poster - 发文人账号

{Number} post_pid - 文章编号

{String} title - 文章标题

{String} body - 文章内容

{String} extra_data - 文章拓展信息

{Number} time - 操作时间

备注:修改文章操作时,title,body 和 extra_data 必须出现至少一个,并且与原文相同字段的内容不同

请求示例:参照 安全请求验证

localhost:3000/api/v1/postUpdate

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    block_num: 操作所属块号
    txid: 操作id
  }
}
3.3. 获取文章 getPost

请求类型:GET

请求参数:

{Number} platform - 平台账号
{Number} poster -发文者账号
{Number} post_pid - 文章编号

请求示例:

http://localhost:3001/api/v1/getPost?platform=217895094&poster=210425155&post_pid=3

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    "id":"1.7.12", - 文章ObjectId
    "platform":217895094, - 平台账号
    "poster":210425155, - 发文者账号
    "post_pid":5, - 文章编号
    "hash_value":"bb76a28981710f513479fa0d11fee154795943146f364da699836fb1f375875f", - 文章body hash值
    "extra_data":"{}", - 拓展信息
    "title":"test title in js for update", - 文章title
    "body":"test boyd in js for update", - 文章内容
    "create_time":"2018-03-12T10:22:03", - 文章创建时间
    "last_update_time":"2018-03-12T10:23:24", - 文章最后更新时间
    "origin_platform", - 原文平台账号 (仅对于创建文章时为转发时存在)
    "origin_poster", - 原文发文者账号 (仅对于创建文章时为转发时存在)
    "origin_post_pid" - 原文发文编号 (仅对于创建文章时为转发时存在)
  }
}
3.4. 获取文章列表 getPostList

请求类型:GET

请求参数:

{Number} platform - 平台账号
{Number} poster -发文者账号(默认null,为null时查询该平台所有文章)
{Number} limit - 加载数(默认20)
{String} start - 开始时间 'yyyy-MM-ddThh:mm:ss' ISOString (加载下一页时将当前加载出的数据的最后一条的create_time传入,不传则为从头加载)

请求示例:

http://localhost:3001/api/v1/getPostList?platform=217895094&poster=210425155&limit=2&start=2018-03-12T09:35:36

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: [文章对象(参考获取单个文章返回的数据结构)]
}
4. Auth 相关
4.1. 签名平台 sign

请求类型:GET

请求参数:无

请求示例:

localhost:3000/auth/sign

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    sign: 签名结果,
    time: 操作时间(毫秒值),
    platform: 平台所有人id,
    url: 钱包授权url
  }
}
4.2 签名验证 verify

请求类型:GET

请求参数:

{Number} yoyow - 账号id
{Number} time - 操作时间毫秒值
{String} sign - 签名结果

请求示例:

localhost:3000/auth/verify?sign=20724e65c0d763a0cc99436ab79b95c02fbb3f352e3f9f749716b6dac84c1dc27e5e34ff8f0499ba7d94f1d14098c6a60f21f2a24a1597791d8f7dda47559c39a0&time=1517534429858&yoyow=217895094

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: {
    verify: 签名是否成功,
    name: 签名的yoyow用户名
  }
}
4.3 签名平台 返回二维码 signQR

请求类型:GET

请求参数:

{String} state - 拓展信息,将在调用平台登录接口时与用户签名信息一同发送到平台,用于平台登陆接口需要自定义的参数时使用,若无此需求可不传

请求示例:

localhost:3000/auth/signQR?state=platformCustomParams

返回结果:

{
  code: 操作结果,
  message: 返回消息,
  data: 二维码图片base64 字符串
}
4.4 平台拓展信息协议说明

平台属性 extra_data 拓展信息 JSON对象格式字符串 中

{
    "login":"http://example/login" //平台扫码登录请求接口
    "description":"平台说明"  //平台描述
    "image":"http://example.image.jpg" //平台头像,yoyow app 1.1 中,显示的平台头像
    "h5url":"http://exampleH5.com" //平台h5地址,用于在无app可跳转动情况下,跳转到h5页面
    "packagename":"com.example.app" //平台android 跳转
    "urlscheme":"example://"  //平台ios跳转
}
4.5 平台扫码登录

App扫码授权登录将访问 平台拓展信息的 平台扫码登录请求接口 ,发送回用户签名对象

{
  {Number} yoyow - 当前操作用户账号id
  {String} time - 签名时间戳字符串
  {String} sign - 签名字符串
  {String} state - 平台签名时传入的自定义信息 (参考 Auth 相关 4.3 - signQR)
}

约定 平台提供的接口必须返回以下信息

{
  {Number} code - 操作结果 0 为通过 任何非 0 情况视为错误处理
  {String} message - 操作结果描述
}

请求返回 error code 状态说明

1001 无效的签名类型

1002 无效的签名时间

1003 请求已过期

1004 无效的操作时间

1005 无效的操作签名

1006 账号信息与链上不匹配(常见于私钥恢复之后,使用其他电脑的本地数据或旧的备份文件进行授权操作导致)

1007 未授权该平台

2000 api底层异常

2001 账号不存在

2002 无效的账号

2003 无效的转账金额

2004 零钱和积分不足支付操作手续费

2005 零钱不足

2006 无效的资产符号或id

3001 文章ID必须为该平台该发文人的上一篇文章ID +1(平台管理发文id)

安全请求验证

涉及到资金安全相关的操作,比如转账,发文等各种写操作,会在中间件服务中验证其有效性。这类请求的信息需要先通过加密操作转换成密文,再发送给中间件服务。加密方式采用对称加密AES,密钥为配置文件中的secure_key

加密示例(javascript的 crypto-js 版,其他语言使用类似的AES加密方式)

默认 mode CBC , padding scheme Pkcs7

例如:transfer操作

    let key = 'customkey123456'; // 此key与中间件中的config 里 secure_key相同

    let sendObj = {
      "uid": 220900750,
      "amount": 10,
      "asset_id": 0,
      "memo": "memo",
      "time": Date.now()  //time 字段 操作时间取当前时间毫秒值 加密操作须带有此字段 用于验证操作时效
    }

    let cipher = CryptoJS.AES.encrypt(JSON.stringify(sendObj), key);
    
    $.ajax({
      url: 'localhost:3000/api/v1/transfer',
      type: 'POST',
      data: {
        ct: cipher.ciphertext.toString(CryptoJS.enc.Hex),
        iv: cipher.iv.toString(),
        s: cipher.salt.toString()
      },
      success: function(res){
        // do something ...
      }
    })

PHP加密方式

    function cryptoJsAesEncrypt($passphrase, $value){
      $salt = openssl_random_pseudo_bytes(8);
      $salted = '';
      $dx = '';
      while (strlen($salted) < 48) {
          $dx = md5($dx.$passphrase.$salt, true);
          $salted .= $dx;
      }
      $key = substr($salted, 0, 32);
      $iv  = substr($salted, 32,16);
      $encrypted_data = openssl_encrypt($value, 'aes-256-cbc', $key, true, $iv);
      $data = array("ct" => bin2hex($encrypted_data), "iv" => bin2hex($iv), "s" => bin2hex($salt));
      return json_encode($data);
    }

其他需要安全请求验证的操作根据文档改动sendObj

YOYOW 参数表及手续费说明

请参照YOYOW浏览器:

交易所对接指南

本文主要介绍交易所对接YOYOW主链的细则。

准备工作

硬件设备

推荐的硬件配置:4GB内存,20G硬盘,两核CPU 即可

当前支持的平台:

  • Ubuntu 16.04 LTS 64 bit
  • Windows Servers 64 bit

下文以Ubuntu 16.04 为例进行介绍

服务

禁止掉默认的 time-syncing daemon(已过期) ,安装 NTPD:

sudo timedatectl set-ntp false
sudo apt-get -y install ntp

账号

在https://wallet.yoyow.org 上注册一个YOYOW主网账号。指南请见:这里.

得到账号私钥。指南请见:这里. 我们总共需要3对密钥:

  • 资金密钥: 管理资金进出
  • 零钱密钥:用于收集积分来抵扣手续费
  • 备注密钥:用来加密/解密memos

基本逻辑

交易所可以使用一个或多个账号处理充值/提现。

  • 充值:给每个用户分配一个独立的、唯一的标识,如:用户在交易所平台ID,或对该ID进行hash 等. 任意用户在进行充值时,需在MEMO上填写该唯一标识。交易所因此可以知道此笔充值来自于哪位客户.
  • 提现:从交易所账号中转移资产到用户的账号中,MEMO功能也是必要的,因为用户可能的提现目标为另一家交易所。

安装

请在(此处)下载"最新版"的可执行文件。下载后,解压文件 如:

https://github.com/yoyow-org/yoyow-core/releases/download/v0.2.1-180313/yoyow-node-v0.2.1-ubuntu-20180313.tgz
https://github.com/yoyow-org/yoyow-core/releases/download/v0.2.1-180313/yoyow-client-v0.2.1-ubuntu-20180313.tgz
tar xzf yoyow-node-v0.2.1-ubuntu-20180313.tgz
tar xzf yoyow-client-v0.2.1-ubuntu-20180313.tgz

注: 请注意替换最新版本的node 与 client程序 !

启动YOYOW节点

节点程序yoyow_node需要持续运行,可选方案之一为使用screen,安装如下:

sudo apt-get -y install screen

通过 screen启动yoyow_node:

screen -S yoyow_node
./yoyow_node --rpc-endpoint 127.0.0.1:8090

注:

  1. 启动时使用 --rpc-endpoint ,我们就可以通过RPC对其进行调用. 在本例中yoyow_node将监听127.0.0.18090端口。
  2. 以下参数表示每账号保留多少条历史记录供查询,默认值是 1000 。 对交易所来说,如果充值、提现记录较多,可考虑设置成一个较大的值,比如:
max-ops-per-account = 1000

修改为

max-ops-per-account = 1000000

则会保留一百万条数据。更早的数据会从内存中被删除而无法快速查询(但仍然记录在链上)。

  1. 以下两个参数会大量减少运行需要的内存,原理是不保存与交易所账户无关的历史数据索引。
track-account = [25638]
partial-operations = true

请将 "25638" 替换成你需要的账户数字 ID 。 注: config.ini 里默认 track-account 前面有个“#”符号,需要删除。

如果需要监控多个账户,则使用如下配置:

track-account = [25638,25997]
partial-operations = true

节点程序会从P2P网络中下载数据,当数据下载完成后,console里会每3秒钟打印一则新的消息,示意如下:

789216ms th_a       application.cpp:574           handle_block         ] Got block: #355797 00056dd54878c05849e2dcd731c9ee364398b0d2 time: 2017-09-18T19:13:09 latency: 216 ms from: 27662/init8  irreversible: 355787 (-10)
792527ms th_a       application.cpp:574           handle_block         ] Got block: #355798 00056dd613f39f1ad6c0c3fdb00a56c60f44ab1c time: 2017-09-18T19:13:12 latency: 526 ms from: 499381505/yoyo499381505  irreversible: 355788 (-10)

如果需要终止节点程序,Ctrl + C 即可,或者发送 SIGINT or SIGTERM 信号给进程。执行后需要等待少许时间,节点会自动停止。

启动 YOYOW Client

初次使用

启动另一个screen ,在其中运行yoyow_client程序:

screen -S yoyow_client
./yoyow_client -s ws://127.0.0.1:8090/ -H 127.0.0.1:8091

注意:

  1. 使用 -s 来指定,连接到的节点程序的IP与端口
  2. 使用 -H 选项来开启一个HTTP-RPC服务,方便我们其他程序进行访问。如:单独处理充值/提现的脚本程序。
  3. yoyow_node 只有完成同步后,才会监听RPC端口,所以请耐心等待 yoyow_node 同步完成。
  4. 您可以启动多个client 连接同一个yoyow_node。但请注意不要使用相同的-H,会因为端口被占用而监听失败。

当第一次运行yoyow_client时,当其连接上node程序,会打印:

Please use the set_password method to initialize a new wallet before continuing
new >>>

我们需要按如下所示设置密码,程序会自动创建一个加密的钱包文件:

new >>> set_password my-password
set_password my-password
null
locked >>>

当已经存在钱包文件时,如果我们运行yoyow_client程序,它同样会显示locked >>>

此时我们需要解锁钱包:

locked >>> unlock my-password
unlock my-password
null
unlocked >>>

导入3对密钥至client,他们会被加密存储于钱包文件中,命令如下:

import_key [account_ID] [wif_private_key]

如: 您的账号ID是 123456789,且拥有了资金私钥零钱私钥备注私钥。需要执行import_key三次,每次导入1个私钥:

unlocked >>> import_key 123456789 5Hqwx3xXMYZ55Pko9nzw34234234nXHcGfNQjNEL23424w7Py
import_key 123456789 5Hqwx3xXMYZ55Pko9nzw34234234nXHcGfNQjNEL23424w7Py
2993104ms th_a       wallet.cpp:820                save_wallet_file     ] saving wallet to file wallet.json
true
unlocked >>> import_key 123456789 5JKoYzQ4sYZoDYwreyrsfsd32466MsCFNoxRE23nExaRi6SY3
import_key 123456789 5JKoYzQ4sYZoDYwreyrsfsd32466MsCFNoxRE23nExaRi6SY3
2993104ms th_a       wallet.cpp:820                save_wallet_file     ] saving wallet to file wallet.json
true
unlocked >>> import_key 123456789 5HttjgBSb45368989etfhsserVtt69cWcExteq6RktpAYXNTT
import_key 123456789 5HttjgBSb45368989etfhsserVtt69cWcExteq6RktpAYXNTT
2993104ms th_a       wallet.cpp:820                save_wallet_file     ] saving wallet to file wallet.json
true
unlocked >>>

命令: info

可以通过 info 命令,查看网络状态:

unlocked >>> info
info
{
  "head_block_num": 377867,
  "head_block_id": "0005c40b41f6d79d762b1ff81c7affc7ae82a894",
  "head_block_time": "2017-09-18T19:37:39",
  "head_block_age": "0 second old",
  "last_irreversible_block_num": 377857,
  "chain_id": "3505e367fe6cde243f2a1c39bd8e58557e23271dd6cbf4b29a8dc8c44c9af8fe",
  "participation": "100.00000000000000000",
  "active_witnesses": [[
  ...
}

命令: get_block

可通过 get_block 查看某个具体块号的相信信息. 格式如下:

get_block [block_number]

如:

unlocked >>> get_block 1

命令: get_full_account

可通过 get_full_account 命令查看某账号详细信息:

unlocked >>> get_full_account 123456789
get_full_account 123456789
{
  "account": {
    "uid": 123456789,
    ...
  },
  "statistics": {
    "owner": 123456789,
    "total_ops": 30220,
    "prepaid": 0,
    "csaf": 37424828,
    "core_balance": "44672014515",
    "core_leased_in": 0,
    ...

注: 对于接入来讲,"statistics" 数据部分比较有用

  • "csaf" 是『积分』,通过持有YOYOW产生,可以用来抵扣等额的手续费。YOYOW资产的精度为5,单位为YOYO,所以"csaf": 37424828 意味着可抵扣 374.24828 YOYO等额的手续费.
  • "core_balance" 是账号资产的『余额』. "core_balance": "44672014515" 意为该账号余额有 446,720.14515 YOYO.
  • 请留意:若返回值内的数字大于2^32,将会有引号将其引住。如上例中core_balance的值有引号而csaf的值没有

命令 transfer

transfer 命令可以用来转移资产,格式如下:

transfer [from] [to] [amount] YOYO [memo] [broadcast]

如:

unlocked >>> transfer 123456789 987654321 1.2345 YOYO "thisismemo" true

Note:

  • amount 最多只能有5位精度.
  • 如果设置 broadcasttrue, 则签名过的交易会被广播至P2P网络;若为 false 则用来测试,不广播。

命令: get_transaction_id

可以使用 get_transaction_id 命令得到一笔交易的hash值. 格式如下:

get_transaction_id [transaction_in_json]

这个命令在接入中也是很有用的.

命令: get_relative_account_history

可以使用 get_relative_account_history 命令来查看某账号的操作历史,格式如下:

get_relative_account_history [account] [operation_type] [start] [limit] [end]

如:

unlocked >>> get_relative_account_history 123456789 null 1 10 10
unlocked >>> get_relative_account_history 123456789 0 11 10 20

注:

  • 对于 operation_type, 值为 null 时,则返回所有操作类型;为 0 时可获得所有transfer操作.
  • 对于 end, 值为 0 时,可得到最多的最近操作记录.
  • 返回结果的数量会在end - start 范围之内;如果limit值比end - start 要小,则返回满足的条件的最新操作记录。
  • 返回结果的排序方式为: 最新的优先

命令: collect_csaf

可以使用 collect_csaf 命令来收集积分,可用于抵扣各操作的手续费。格式如下:

collect_csaf [from_account] [to_account] [amount] YOYO [broadcast]

如:

unlocked >>> collect_csaf 123456789 123456789 10 YOYO true

注:

  • 如果该账号内有一定数量的YOYO,它将随着时间自动积累积分。积累的速度与账号余额间呈线性关系。通常对于交易所而言,积累的积分足够支付日常手续费用。
  • 积分需要通过该命令领取后才能使用
  • 尽管在底层实现上,账号里的资产(如余额、零钱)同样可以用来支付手续费,但是当前yoyow_client的实现上会只尝试进行积分抵扣手续费(raw-transaction signing除外).如果账号中没有足够的积分,多数的命令会失败。所以保持账号中一定数量的积分是很有必要的。

如何关闭

在Ubuntu下,可以Ctrl + D 来关闭client

通过 HTTP-RPC 接入Client

当 HTTP-RPC 开启的时候,我们可以通过HTTP-RPC 来连接client。所有的上述命令都是可用的,如:

curl -d '{"jsonrpc": "2.0", "method": "info", "params": [], "id": 1}' http://127.0.0.1:8091/rpc
curl -d '{"jsonrpc": "2.0", "method": "transfer", "params": [123456789,123456789,"1","YOYO",null,true], "id": 1}' http://127.0.0.1:8091/rpc
curl -d '{"jsonrpc": "2.0", "method": "get_relative_account_history", "params": [123456789,0,1,10,10], "id": 1}' http://127.0.0.1:8091/rpc

注:

  • 使用 http 协议
  • 请求 /rpc 路径,而不是 /
  • 与交互式CLI不同,HTTP-RPC调用采用json格式
  • 在所有request中,amount 的精度都是5;在response里,amount没有小数点,其数值被乘以了10^5
  • 金额的传入,金额建议使用字符串。建议使用普通的小数格式,比如"12345.6789",如果使用科学计数法的格式比如1.23456789E4这种可能会有问题

处理充值

检查节点状态

通过info命令,得到last_irreversible_block_num.在这个值之前的区块才是可信区块

检查账号历史

  1. 首先,使用 get_relative_account_history 命令/API 来得到最新的 sequence number:
curl -d '{"jsonrpc": "2.0", "method": "get_relative_account_history", "params": [123456789,0,0,1,0], "id": 1}' http://127.0.0.1:8091/rpc

在返回值中,如果response["result"]为空,则意为该账号下目前没有充值进来;若不为空,则,可以取response["result"][0]["sequence"]作为maximum_sequence

如果maximum_sequence比上次存储的最新sequence值更大,则意为有最新的充值记录需要处理

  1. 使用get_relative_account_history命令/API 来检查最新记录。如: 如自行记录的sequence 值为100,maximum_sequence 为200,则我们可以从101开始,请求100个记录,至200结束,参考命令如下:
curl -d '{"jsonrpc": "2.0", "method": "get_relative_account_history", "params": [123456789,0,101,100,200], "id": 1}' http://127.0.0.1:8091/rpc

返回值中, result=response["result"], 则result为数组. 若数组为空,则意味着没有最新的充值请求。若不为空, 则数组的第N个元素 result[N] 格式应该如下:

    {
      "memo": "a1b2c3d4",
      "description": "Transfer 100 YOYO from 204501630 to 123456789 -- Memo: a1b2c3d4   (Fee: 0.20898 YOYO)",
      "sequence": 101,
      "op": {
        "op": [
          0,
          {
            "fee": {
              "total": {
                "amount": 20898,
                "asset_id": 0
              },
              "options": {
                "from_balance": {
                  "amount": 20898,
                  "asset_id": 0
                }
              }
            },
            "from": 204501630,
            "to": 123456789,
            "amount": {
              "amount": 10000000,
              "asset_id": 0
            },
            "memo": {
              "from": "YYW6U528P71X6V87765245356aPBPpDwwRp7urUiXYtFLHmrXRsN3u",
              "to": "YYW5eA89yqwerhdfghrjtr3452376trtyU6LD7a1kmvwYa5h51rDxr",
              "nonce": "3457645755345345",
              "message": "0938457345937abcdef3098945"
            },
            "extensions": {
              "from_balance": {
                "amount": 10000000,
                "asset_id": 0
              },
              "to_balance": {
                "amount": 10000000,
                "asset_id": 0
              }
            }
          }
        ],
        "result": [
          0,
          {
          }
        ],
        "block_timestamp": "2017-09-08T11:14:15",
        "block_num": 223355,
        "trx_in_block": 0,
        "op_in_trx": 0,
        "virtual_op": 8795
      }
    },
  • result[N]["op"]["block_num"], 若比 last_irreversible_block_num小, 意味着是可信的, 需要被处理.
  • result[N]["op"]["op"][0], 如 == 0, 则是一个transfer请求. (实际上肯定会等于0,因为请求参数里已约定只取transfer记录)
  • result[N]["op"]["op"][1]["to"], 验证是否与自身account ID 相同。若相同,即为一个充值请求。
  • result[N]["op"]["op"][1]["amount"]["asset_id"] 验证其是否 == 0, 若是,即表示该资产为YOYO
  • result[N]["op"]["op"][1]["amount"]["amount"], 该值为充值数量. 切记:该数字精度为5.
  • result[N]["memo"], 为该转账记录的MEMO信息。此处已经被解密过了,它可以用来作为充值客户的识别符。
  • 保存 result[N]["sequence"] 作为最新的sequence序号,下一次循环时需使用。
  • 保存 result[N]["op"]["trx_in_block"] 留作后续使用。
  • 使用 get_block 命令/API 来获取此次转账的txid ,如下:(记得修改params值为 block_num):
curl -d '{"jsonrpc": "2.0", "method": "get_block", "params": [160000], "id": 1}' http://127.0.0.1:8091/rpc

记录返回值为 new_response, 保存 new_response["result"]["transaction_ids"][trx_in_block] 作为本次充值的txid 留作后用.

注:

  • 为了保证可以正确解密MEMO,client 需要出于 unlocked状态。同时,memo private key 需要已导入至钱包中

处理提现请求

检查节点状态

安全起见,我们只在节点状态正常的情况下处理提现。 通过info命令/API来检验。

  • head_block_time 应当在15秒以内
  • participation 应大于 80, 意味着80%的区块生产者在线且状态正常。

检查账号资产与积分

使用 get_full_account 命令/API.

如果积分不足以支付网络手续费,请使用collect_csaf命令/API 领取更多积分。

发送资产

  1. 使用 transfer 命令/API 来发送资产.

注: 请注意资产精度.

保存返回的json值供后续使用.

  1. 获取txid通过 get_transaction_id 命令/API, 保存供后续使用.

Re-check / Follow-up

类似于充值的步骤,当发现一个新的transfer,保存txid,block num等信息供后续使用。

故障排查

每笔交易都有expiration字段。如果某笔交易因为某种原因,没有被打包到任意块中,且不可逆区块(last_irreversible_block_num)的时间戳比交易的expiration字段还要晚。则该笔交易不会打包在当前这条链上,此时尝试重新转账是安全的。

示例代码

  • Ruby: https://github.com/yoyow-org/yoyow-core/blob/master/scripts/exchange.rb

平台接入概述

YOYOW 是基于区块链技术的媒体公链, 其目标是建立一个利用区块链技术,使用去中心化的共识方案为内容生产领域实现贡献定价和权益回报的网络,使内容生产者、内容投资者、内容筛选者和生态建设者都能得到合理的激励与回报。 YOYOW专注于底层技术与大的利益分配设定,把更大的自主权分配给接入平台与开发者,平台与开发者无需太多的区块链专业知识,就可以依托YOYOW,建立自己的区块链内容产品。

媒体平台的接入可以获得以下优势:

  • 实现当前业务+区块链的融合,引入合理的激励机制,有效提升用户积极性
  • 可轻松实现资产Token的发行,获得便利的Token变现渠道
  • 可直接获得YOYOW激励
  • 可共享YOYOW当前所有用户

YOYOW 生态简介

用户角色

在系统生态中,为了兼顾效率和公平,YOYOW设计了完善的用户体系,主要包括普通用户,平台,理事会,见证人。

普通用户

普通用户是YOYOW网络的主要参与者,在YOYOW网络中,普通用户在各个平台共享统一的账号体系,拥有转账、选举等权限。

平台

平台是一类特殊的用户,普通用户抵押一定的YOYO代币可称为平台。普通用户通过 YOYOW 钱包对平台进行授权,授权平台使用其零钱权限,用于跨站点登陆、对内容评分、发布内容、评论等操作,普通用户也可以随时撤销授权。接入后,平台可获得YOYOW网络的Token激励。

理事会

理事会是YOYOW网络中的管理机构,负责发起议案和对议案进行投票表决。议案的内容主要为调整系统数十项可调参数,比如各种交易的费率,最高评分权重等,也包括区块生产间隔时间、区块奖励等。理事会的人选由YOYOW用户投票产生,用户可随时撤票,来保证理事会决议真正体现多数持币人的意愿。

见证人

见证人是区块的生产者,负责收集广播的各种交易并打包到区块中,因此见证人生产区块也可以获得相应的 YOYO 代币回报。见证人包括主力见证人、后备见证人和矿工见证人。

在当前机制下,YOYOW用户可充分行使自己的权利。理事会与见证人均为投票产生,一切以票数说话。用户可通过投票选出愿意参与社区建设、愿意为社区做贡献的账号。同时,每次投票有效期90天,保证了理事会、见证人团队的新鲜活力。

密钥和资产

密钥体系

在区块链项目中,私钥是账号的重中之重。然而,当一个用户做任何操作都使用账号私钥签名的话,无疑极大的增加了账号的风险。对于YOYOW而言,考虑到不同权限不同的安全级别,设定了三级密钥体系:主控密钥资金密钥零钱密钥。主控密钥为最高权限密钥,不到不得已的时候不应该使用主控密钥;资金密钥可以操作余额;零钱密钥可以操作零钱,也可以用来发帖,点赞,登陆鉴权等。通俗来讲:

  1. 主控密钥是核心,若其他低级别密钥丢失,可动用主控密钥重置更新。所以,务必妥善保存,丢失无法找回。
  2. 转账等资金操作,可以动用资金密钥。
  3. 用户授权给平台,只需要授予次级密钥(零钱权限),平台通过这个权限可以代理发帖、点赞及小额转账。

除了跟资产相关的三级密钥,还有一个备注密钥用来加密和查看交易的备注信息。

以上各组密钥,由一对公私钥对组成,公钥为以YYW开头的53个字符,私钥为51个字符。可以通过网页钱包查看各个密钥(详见:yoyow keys tutorial )。比如:

_images/account_keys.png网页钱包密钥截图

资产类型

YOYOW网络内有三类资产:YOYO代币用户发行资产(IOU),积分

YOYO代币

在YOYOW的账户里,基础资产为YOYO 代币,有两处可进行存放:『余额』和『零钱』。

  • 余额』拥有较高的安全性,建议大额的YOYO在余额中存储。
  • 零钱』可理解为免密支付,进行小额的存储与转账,当用户授予零钱权限给平台 时,平台甚至可拥有操作”零钱” 的权限。
用户发行资产(IOU)

用户可以发行自定义的资产:根据自身业务,创建在自己平台内流通的Token。后续会提供用户发行资产(IOU)与YOYO之间的便捷兑换方式,共享便捷的变现渠道。

积分

积分是对YOYO持有者的奖励,当您的账号持有YOYO时,积分可随时间累积。积分积累有上限,您需要手动领取积分。

积分用途

积分目前唯一用途是抵扣手续费。在支付手续费时,您可以选择通过积分进行抵扣。100积分等价于1 YOYO。 当您账户"余额"部分拥有一定数量的YOYO时,系统会自动为您积累积分。有最高积累上限。

积分使用方法

积分需要手动领取,可手动将待领取积分领取至您的账户,也可以领取至其他联系人账户,作为奖励赠予。积分也可以租借给其他人使用。 YOYOW引入积分,可以减少普通用户小额手续费(内容发布,点赞等)的支出,增加用户使用的积极性。在其他区块链项目中,对于链上操作,都需要支付不同程度的手续费。 对于YOYOW来讲,此积分体系使用户免费操作成为了可能。

接入流程

_images/join_up_process.png接入流程图

接入流程

注册账号

申请YOYOW账号需要网页提交注册。网页访问https://wallet.yoyow.org/#/create-account,设置密码,YOYOW会自动返回账户名和账号私钥,账号名为数字UID(yoyo号),私钥为主控密钥。该私钥系统不会保存,且仅在注册成功时出现一次,拥有管理账户的最高权限,请妥善保存,不建议保存到电脑,网盘或云笔记里,可以写到多张纸条上,保存到几个较为稳妥的位置,保证不会丢失,不会泄露。

_images/signup.png注册

_images/signup_success.png注册成功

完成注册后,可以在『设置』 -- 『账号』里查看到自己的主控密钥,资金密钥,零钱密钥以及备注密钥。

升级为平台账号

普通账号需要升级成平台账号才能获得用户的授权,升级平台商目前需要抵押10000 YOYO的押金和1000 YOYO的手续费。该操作暂时通过yoyow的client端,通过接口执行create_platform操作,同时设定平台的名称,Token的符号以及相关的url地址和其他一些扩展信息,比如平台提供的api访问接口等。

具体抵押升级平台账号的操作,详见 从0开始创建YOYOW平台账户

授权认证

YOYOW提供类似于OAuth的授权认证。YOYOW提供了中间件来方便平台进行接入,中间件中提供包括签名平台 (sign),签名验证(verify),以及签名平台返回二维码(signQR)等接口(详见:《yoyow-middleware》#Auth 相关)。平台可以通过SDK中sign或signQR接口生成绑定链接,verify接口验证用户授权。通过授权,平台可以获得用户的零钱管理权限以及登陆授权。授权流程:

_images/oauth_process.pngOAuth 流程

注:

  1. 考虑到安全问题,YOYOW中间件 SDK 强烈建议单独部署于内网机器中,不对外开放IP与端口。
  2. YOYOW中间件 SDK 需要零钱权限,使用时,记得修改配置文件中默认的零钱密钥和备注密钥。

资产发行

媒体可以根据需要发行自己的资产,资产的数量和汇率等可以由自己的需求设定。yoyow平台为设定的资产提供流通和交易的便利。

发行的资产暂时通过钱包客户端的create_asset函数操作,需要指定资产的总量,交易的手续费汇率,以及白名单和黑名单等设置

详见:《YOYOW钱包API》#create_assets

用户激励

平台可根据自身业务需要,指定针对的激励计划。激励的标的,可以为YOYO 或 自己发行的token。

以币问为例,币问已接入YOYOW的网络中,在币问的平台中,系统奖励周期为一周,定期统计一周内用户发表的内容所获得的点赞、点赞能量和评论数等,计算出一个奖励值,根据用户的奖励值的比例,发放YOYO代币。根据用户的活跃度和内容贡献值,用户会有威望的属性,被威望较高的用户点赞,可获得更高的点赞能量,被点赞用户也会获得更高的奖励。 用户可以在网页钱包中将YOYOW提现到其他地方进行交易。

付费阅读/打赏

通过YOYOW网络,平台可方便的接入加密货币的打赏/付费阅读体系。平台可以基于YOYO资产或自己发行的资产,鼓励用户之间转发交易,构建内容付费阅读和打赏的平台。YoYow提供的区块链服务可以保证用户之间的转发交易安全、不可篡改、公开透明,以此激励用户提供更高质量的内容。

更多:

  1. YOYOW 中间件 https://github.com/yoyow-org/yoyow-middleware.

从0开始创建YOYOW平台账户

本文将以测试网环境为例,介绍创建平台所需要的操作,比如在网页钱包中注册账号,在cli中通过命令行创建平台。 所需资源:正式网:网页钱包地址: https://wallet.yoyow.org.正式网CLI下载: https://github.com/yoyow-org/yoyow-core/releases

测试网:网页钱包测试地址: http://demo.yoyow.org:8000.测试网CLI下载: https://github.com/yoyow-org/yoyow-core-testnet/releases/.

1. 创建账号,获取密钥

以测试网为例,访问测试网网页钱包地址 注册或登录账号:

_images/step1.png创建测试网账号

平台所有者的各权限私钥获取方式 登录钱包 --> 左侧菜单设置 --> 账号 --> 查看权限 --> 在对应权限密钥的右侧点击显示私钥 --> 输入密码显示私钥 --> 将看到的私钥拷贝进配置中.

_images/step3.png获取对应私钥

2. 创建平台

创建平台商需要最少 11000 YOYO,其中10000 为最低抵押押金,1000为创建平台手续费(测试网络注册赠送12000 测试币)

2.1 启动cli钱包

以测试网为例,从测试网CLI下载下载相应环境下的yoyow-client。

2.1.1 带参数启动

以Ubuntu为例,连接测试网的node节点(wss://api.testnet.yoyow.org)

./yoyow_client -s wss://api.testnet.yoyow.org 

如若提示权限不足

sudo chmod a+x * 
2.1.2 以配置文件启动

cli 钱包 同路径下创建wallet.json 文件

写入

{
  "chain_id": "3505e367fe6cde243f2a1c39bd8e58557e23271dd6cbf4b29a8dc8c44c9af8fe",
  "pending_account_registrations": [],
  "pending_witness_registrations": [],
  "labeled_keys": [],
  "blind_receipts": [],
  "ws_server": "wss://api.testnet.yoyow.org",
  "ws_user": "",
  "ws_password": ""
}

然后可以直接运行

./yoyow_client

2.2 设置钱包密码

连接成功出现

Please use the set_password method to initialize a new wallet before continuing

new >>>

执行

new >>> set_password 你的密码

返回

set_password 你的密码
null
locked >>> 

执行

locked >>> unlock 你的密码

返回

unlock 123
null
unlocked >>>

表示解锁成功

2.3 导入资金私钥

unlocked >>> import_key yoyow账号uid 资金密钥

例:

unlocked >>> import_key 120252179 5JwREzpwb62iEcD6J6WXs2fbn1aSKWQWvGLNCqAEYwS31EHD7i4

返回

1937037ms th_a       wallet.cpp:820                save_wallet_file     ] saving wallet to file wallet.json
true

如果没返回true,请检查你的uid和私钥是否正确

2.4 创建平台

unlocked >>> create_platform yoyow账号uid "平台名称" 抵押金额 货币符号 "平台url地址" "平台拓展信息json字符串" true

:

unlocked >>> create_platform 235145448 "myPlatform" 10000 YOYO "www.example.com" "{}" true

返回

{
  "ref_block_num": 33094,
  "ref_block_prefix": 2124691028,
  "expiration": "2018-02-07T08:40:30",
  "operations": [[
      20,{
        "fee": {
          "total": {
            "amount": 1029296,
            "asset_id": 0
          },
          "options": {
            "from_csaf": {
              "amount": 1029296,
              "asset_id": 0
            }
          }
        },
        "account": 235145448,
        "pledge": {
          "amount": 1000000000,
          "asset_id": 0
        },
        "name": "myPlatform",
        "url": "www.example.com",
        "extra_data": "{}"
      }
    ]
  ],
  "signatures": [
    "1f08b704dd5ccf7e05e5dec45b06ad41e6382f5dd528e3f644d52ff4fb29c2040507544d5e94b84d77d70edcd68bb35b0cded0db87816ae64979ba98eeb641d5d7"
  ]
}

2.5 更新平台

unlocked >>> update_platform yoyow账号uid "平台名称" 抵押金额 货币符号 "平台url地址" "平台拓展信息json字符串" true

例:

unlocked >>> update_platform 235145448 "newplatformname" 10000 YOYO null null true

返回与创建平台一样

平台名称、平台url地址和平台拓展信息如没有变动则填入null,如示例操作,不会改变平台url地址和拓展信息

2.6 平台拓展信息协议

平台属性中 extra_data 的拓展信息为选填内容,YOYOW登录的相关协议中规定拓展信息为JSON对象格式字符串格式,并遵循如下格式 

{

"login":"http://example/login" 平台扫码登录请求接口

"description":"平台说明"  平台描述

"image":"http://example.image.jpg" 平台头像,yoyow app 1.1 中,显示的平台头像

"h5url":"http://exampleH5.com" 平台h5地址,用于在无app可跳转的情况下,跳转到h5页面

"packagename":"com.example.app" 平台android 跳转

"urlscheme":"example://"  平台ios跳转

}