直接黏贴Readme了,项目需要参考里面的EOS错误代码规范,转贴推荐下

ENGLISH VERSION

关于

EosProxyServer是PocketEOS的完整的后端服务器,由OracleChain团队研发。


目录


简介

本仓库为PocketEOS的完整后端代码,大家可以自行编译使用。

本项目提供什么:

1.接入实时汇率:这里我们主要参考了coinmarketcap,该网站对接了多个交易所,相对来说比较值得信赖;

2.通用EOS错误代码规范:提供基于错误码的国际化标准,可以较大程度提升用户体验,同时便于教育用户了解EOS底层发生了什么;

3.服务器中配置公司运营账号,通过接口验证后,发出交易,为用户创建账号。

4.服务器可以发起交易:可以实现比如创建用户、运营转账、空投、各种合约调用等。


开发和使用环境

如何从源码编译EosProxyServer服务器:

  1. 准备一个redis服务器用于缓存第三方汇率

  2. 安装IntelliJ IDEA + jdk1.8 + maven 4.0.0

  3. 下载
    git clone https://github.com/OracleChain/EosProxyServer.git

  4. 使用IntelliJ IDEA导入到工程

  5. 编辑服务器配置文件 src/main/resources/application.yml.

host: redis_server_ip

port: 6379

password: redis_passwd

  1. 编辑服务器主动交易相关参数 src/main/java/com/oraclechain/eosio/constants/Variables.java.

public static final String eosAccount = "tx_account_name";

public static final String eosPrivateKey = "tx_private_key";

  1. 编译运行.

  2. 可以使用POSTMAN或浏览器进行测试:


API使用


异常捕获

为了给客户端提供一个稳定使用环境、平滑的版本切换、统一的错误定位和提示,我们全局捕获了EOS RPC接口中的异常,并且针对各种错误接口调用进行了封装。

通过返回完全可靠的错误代码,客户端就可以根据欧链定制的错误代码集,进行国际化,并且和EOS升级前后版本进行兼容。

EOS代码中,异常主要分为三层:

第一层为FC layer,主要处理graphene FC工具类产生的异常。

第二层为CHAIN layer,主要处理EOS逻辑代码中的异常。

第三层为contract layer,可在合约中形成规范,除了给用户提供统一的错误代码外,还可定制一些适用于特定合约的特定错误代码。如果你定制了合约层错误,可以在我们的统一错误错误抓取类中解析合约错误.

另外,我们发起了一个EOS错误码的国际化项目,提供给客户端使用:EOSIO API ERROR CODE SPECIFICATION。如果你对维护这个项目感兴趣,可以通过telegram联系我们.

FC层异常

EOS的底层框架使用的是graphene,而graphene抛出的错误被统一定制到了FC exceptions文件中。

我们这里为了把错误码统一起来,对FC error code进行了统一偏移.

链层异常

EOS中的主要错误都是CHAIN exception,这里我们对错误代码进行了直接引用


对接新币种

对接新币种

下面以oraclechain token为例,合约地址为octtothemoon,货币符号为OCT

1.修改dto/AccountAssetInfo.java实体,用于下面的接口返回:

private String oct_balance;
private String oct_balance_usd;
private String oct_balance_cny;
private String oct_price_usd;
private String oct_price_cny;
private String oct_price_change_in_24h;
private String oct_market_cap_usd;
private String oct_market_cap_cny;

2.修改controller/QueryTabController.java中的接口get_account_asset,以支持返回更多币种和相应市场汇率等参数:

//获取用户余额,此处传入
BigDecimal oct_balance = blockServiceEos.getBalance(
    Variables.eosChainUrl,
    "octtothemoon",
    "OCT",
    "octgenerator");

//获取第三方汇率,并且加入缓存(此处缓存的刷新方式比较简单粗暴,大家可以在流量更大之后修改)
redis_key = Variables.redisKeyPrefixBlockchain+ Variables.redisKeyEosCoinmarketcapMid+ "oct";
CoinMarketTicker coinMarketTicker_oct = redisService.get(redis_key, CoinMarketTicker.class);
if(coinMarketTicker_oct == null){
    try{
        req_url.append(Variables.COINMARKETCAP_TICKER).append("oct").append("?convert=CNY");
        result = HttpClientUtils.get(req_url.toString(), "UTF-8");
        coinMarketTicker_oct  = JSON.parseArray(result, CoinMarketTicker.class).get(0);
        redisService.set(redis_key, coinMarketTicker_oct, Variables.redisCacheTimeout);
    }
    catch (Exception e)
    {
        throw new ExceptionsChain(ErrorCodeEnumChain.unknown_market_id_exception);
    }
}

//接下来设置需要返回的用户余额
BigDecimal oct_usd_price = new BigDecimal(coinMarketTicker.getPrice_usd());
BigDecimal oct_cny_price = new BigDecimal(coinMarketTicker.getPrice_cny());
double oct_price_change_in_24h = Double.valueOf(coinMarketTicker.getPercent_change_24h());//.doubleValue();
asset_info.setOct_balance(oct_balance.setScale(Variables.precision, RoundingMode.DOWN).toPlainString());
asset_info.setOct_balance_usd(oct_balance.multiply(oct_usd_price).setScale(Variables.precision, RoundingMode.DOWN).toPlainString());
asset_info.setOct_balance_cny(oct_balance.multiply(oct_cny_price).setScale(Variables.precision, RoundingMode.DOWN).toPlainString());
asset_info.setOct_price_usd(oct_usd_price.toString());
asset_info.setOct_price_cny(oct_cny_price.toString());
asset_info.setOct_price_change_in_24h(Double.toString(oct_price_change_in_24h));
asset_info.setOct_market_cap_usd(coinMarketTicker.getMarket_cap_usd());
asset_info.setOct_market_cap_cny(coinMarketTicker.getMarket_cap_cny());

创建自发交易

自发交易

我们可以在src/main/java/com/oraclechain/eosio/constants/Variables.java中指定一个服务器自发交易的用户名和对应active私钥。

然后可以使用push_action/create_account/create_vip_account接口发起交易请求。


有关欧链

OracleChain(欧链)作为全球第一个直面区块链生态Oracle(预言机)需求的基础应用,将区块链技术服务和现实生活中的多种需求场景直接高效对接,深耕这个百亿美金估值的巨大市场。

OracleChain是一个多区块链的去中心化Oracle技术平台,采用自主的PoRD机制,将现实世界数据引入区块链,并将此作为基础设施为其他区块链应用提供服务。
OracleChain将在区块链内提供现实世界数据的Oracle服务,同时还可以提供跨链数据的Oracle服务。基于OracleChain除了能实现Augur、Gnosis等预测市场(Prediction Market)应用的功能之外,还能支撑对链外数据有更高频率访问需求的智能合约业务,比如智能投顾等场景。

OracleChain将改变当前区块链应用的开发模式,建立全新的生态圈,服务于真正能改变现实世界的区块链应用。

OracleChain的使命是“让世界与区块链互联”,立志成为链接现实世界与区块链世界的基础设施,通过把外部数据引入区块链来实现链内链外的数据互通,OracleChian将是未来区块链世界中最高效的获取链外数据的服务提供平台。

版权

发布于 GNU/LGPL Version 3 许可证书下

感谢

椭圆曲线算法及签名工具:EOSCommander,感谢PLAYERONE.ID团队的贡献。

如果您觉得我们的开源项目对您有帮助,请为oraclegogogo投上一票,谢谢。