您正在查看: 2019年4月

Error compiling LLVM and clang with EXPERIMENTAL WASM support

解决方案:

cd /tmp/llvm-compiler/llvm/build
make -j4 install
rm -rf /tmp/llvm-compiler

最终一般会安装在$HOME/opt/wasm
参考地址:https://github.com/EOSIO/eos/issues/1694

更换Ubuntu镜像,解决EOS编译时,相关依赖下载失败

最近更新EOS代码,由于历史上最伟大的发明qiang,导致编译过程中某些依赖下载失败,so..

ubuntu 18.04

Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像。

#备份
sudo cp -i /etc/apt/sources.list /etc/apt/sources.list.bak
#编辑
sudo vi /etc/apt/sources.list

将文件内容修改为如下

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

保存后,重新sudo apt-get update后,重新编译

数据来源

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
http://mirrors.ustc.edu.cn/help/ubuntu.html

EOS Encrypt

EOS Encrypt

github: https://github.com/EOS-Nation/eos-encrypt

Allows to encrypt & decypt a message with an EOS key pair using AES shared key encryption mechanism.

Decryption is achieved by combining the receiver's private key and the sender's public key to create the private key necessary to decrypt the message.

This module uses eosjs-ecc to perform the required cryptographic operations.

Install

npm

$ npm install --save eos-encrypt

Usage

import { encrypt, decrypt } from 'eos-encrypt';

const public_key = "EOS6M...DW5CV";
const private_key = "5KQwr...zkvFD3";

const message = "Private Message, shhhh!";
const encrypted = encrypt(private_key, public_key, message);
// => TO DECRYPT: eos-encrypt
// .1167451677...23460624..862584768Q+h1AeLQbjfzZJD1Nsx6kk3U/jSNStwoWstz9uNCadw=

const decrypted = decrypt(private_key, public_key, encrypted);
// => Private Message, shhhh!

API

Table of Contents

encrypt

Encrypt Message

Parameters

  • private_key string EOSIO Private Key
  • public_key string EOSIO Public Key
  • message string Message to Encrypt
  • options object Optional parameters (optional, default {})
    • options.memo string Serialized Memo (optional, default "TO DECRYPT: eos-encrypt\n")
    • options.maxsize number Maximum character message size (optional, default 256)

Examples

const encrypted = encrypt(private_key, public_key, message);

Returns string Encrypted Message

decrypt

Decrypt Message

Parameters

  • private_key string EOSIO Private Key
  • public_key string EOSIO Public Key
  • message string Encrypted Message
  • options object Optional parameters (optional, default {})
    • options.memo string Serialized Memo (optional, default "TO DECRYPT: eos-encrypt\n")

Examples

const decrypted = decrypt(private_key, public_key, message);

Returns string Decrypted Message

setMemo

Set Default Memo

Parameters

Examples

setMemo("TO DECRYPT: my-dapp\n");

Returns void

EosProxyServer 实时汇率,错误代码规范,运营账号

直接黏贴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投上一票,谢谢。

EOS的增发机制设定

今天去重新整理了下关于EOS的资料,特别了解了下EOS的增发机制,希望有助于大家更深入的了解EOS

1.EOS介绍

EOS的全称为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统。EOS的设计目的在于解决现有的区块链应用性能低、安全性差、开发难度高以及交易手续费高的问题。EOS交易无需手续费。任何团队都可以在EOS上以比较快的速度开发出所需要的Dapp(基于区块链的分布式应用),EOS框架内发生的经济活动用EOS代币完成交易。EOS是区块链3.0的代表。

2.EOS代币发行

EOS代币的初始发行总量共10亿枚,它的发行机制很有趣,1亿留给创始团队,作为开发者的回报。其余9亿对外公募开放,公募阶段分为两个阶段,第一阶段向市场投放2亿枚EOS代币,这个在2017年7月1日完成。前期的2亿枚EOS代币投放,用于激活市场,向投资者介绍EOS的功能和它所具备的价值。第二阶段,2017年7月2日开始每天200万个公开众筹,持续336天,一共7亿个,后期以稳定的增发量逐步释放剩余的7亿枚EOS代币。这个设计很有趣,在这个时间的段,每天都可以参与众筹,同时二级市场也可以买入EOS,这边每天有200万产出,市场还可以消化,也可以搬砖套利,最主要的是,这个价格就完全由市场价格决定了这些新出来的价格。

3.EOS的增发体系及节点奖励分配

针对记账节点所设计的经济激励机制是区块链项目不可缺少的重要组成部分,EOS则是通过增发的方式来给予节点奖励,支付其工资。讲解EOS的增发体系,以及节点奖励分配规则。
主要结论:
1.EOS采用领取时触发的连续增发方式,最高年通胀率近似为5%。
2.增发的EOS主要用于节点奖励和提案基金两方面,其中节点奖励占五分之一,即1%的年通胀率,剩下的即提案基金,约4%。
3.节点(包括超级节点和备用节点)奖励的四分之一,即0.25%的年通胀率为超级节点的出块奖励,剩下的0.75%为所有节点的得票率奖励。
4.备用节点无出块奖励,只有得票率奖励且要求在100个EOS以上,否则便不算备用节点,无法领取奖励。接下来进行详细说明,可以分为增发方式和节点奖励计算及领取(claim)规则两部分进行:

3.1增发方式

1.增发频率

EOSIO并非每年只增发一次,一次性增发完全年所有的EOS,而是采用连续增发方式,即任何节点领取(claim)时都会触发系统的增发动作,这也就意味着,增发是根据流动时间长度不定期发生的。

2.增发数量

每次触发增发时,系统增发的数量按如下公式计算:每次增发数量=年通胀系数(4.879%) 当前EOS总量 上一次增发到本次增发的时间间隔(微秒)/ 每年总时间(5272436001000000微秒)·年通胀系数为什么不是5%?简单来说,5%是每年只增发一次的年通胀率,但EOS采用的是无限次数增发的方式,因此,在这种增发方式下求出来的年通胀系数为4.879%,可使得EOS的年通胀率近似为5%。·设所有BP全年领取的总次数(即增发次数)n为无穷大,单次通胀率为x。那么在EOS初始总量为10亿,一年增发后数量为10.5亿的情况下,可得等式10乘以(1+x)的n次方等于10.5,求极限可得年通胀系数x乘以n等于ln1.05,即4.879%。

3.增发用途

EOS每年增发将近5%,主要用于节点奖励和提案基金两方面:

  • BP奖励:增发数量的五分之一,即1%的年通胀率,又分为两部分
  • 出块奖励:BP奖励的四分之一,即0.25%的年通胀率
  • 得票率奖励:BP奖励减去出块奖励,即0.75%的年通胀率
  • 提案基金:增发数量减去BP奖励,即4%的年通胀率

3.2节点奖励计算及领取规则

  1. 出块奖励出块奖励只向21个超级节点发放,其中涉及到一个出块奖励池的概念,由于每个节点领取时都会增发部分EOS,所以所有未领取的出块奖励都会放在出块奖励池中等待节点领取。每次单个节点领取(claim)时,能领取到的出块奖励数量计算公式如下:单个节点可领取的数量=出块奖励池里的EOS数量 * 该BP未领取奖励的出块数量 / 所有未领取奖励的区块数量
  2. 得票率奖励得票率奖励向超级节点和备用节点发放,其中涉及到一个得票奖励池的概念,由于每个节点领取时都会增发部分EOS,所以所有未领取的得票率奖励都会放在得票奖励池中等待节点领取。每次单个节点领取(claim)时,能领取到的得票率奖励数量计算公式如下:单个节点可领取的数量=得票率奖励池里的EOS数量 * 该BP的得票权重 / 所有BP的总得票权重
  3. 领取(claim)条件节点领取奖励需满足以下条件:
  • 只有超级节点和备用节点才能领取奖励
  • 同一个节点两次claim间隔时间不能少于24小时
  • 备用节点无出块奖励,只有得票率奖励且需要在100个EOS以上,否则便不算备用节点,无法领取奖励

转载自:https://www.jianshu.com/p/14e78b0f5a71