BCSkill (Block chain skill )
区块链中文技术社区
社区QQ群:791420381

EOS ERROR: Failed to find Gettext libintl (missing: Intl_INCLUDE_DIR)

解决方案,终端执行以下命令

brew unlink gettext && brew link --force gettext
find /usr -name libintl* -print 2>/dev/null

参考链接 https://github.com/EOSIO/eos/issues/2028?ref=tokendaily

eosd error: Address already in use

是因为 nodeos 已经在运行了,执行 

pkill nodeos


EOS 在Ubuntu 16.04 编译及安装

  1. 获取EOS代码 `git clone https://github.com/eosio/eos --recursive`

  2. 更新子模块  `git submodule update --init --recursive`

  3. 执行sh 自动安装 `cd eos`  `./eosio_build.sh`

       安装会先自动判断系统硬件是否符合安装条件及系统版本是否支持。

       漫长等待,半小时左右,网络不好的话,40 - 50分钟。

       编译完成后 `cd eos/build`  执行 `sudo make install` 否则会提示各种程序无法找到问题


常见问题

  1. eos fatal: destination path ‘llvm’ already exists and is not an empty directory

eos fatal: destination path ‘llvm’ already exists and is not an empty directory

如果编译EOS出现以下错误

 Checking for LLVM with WASM support.
        Installing LLVM & WASM
fatal: destination path 'llvm' already exists and is not an empty directory.
        Unable to clone llvm repo @ https://github.com/llvm-mirror/llvm.git.
        Exiting now.

解决方案

cd /opt 
rm -rf llvm
cd /tmp
root@DESKTOP-H6EG47U:/tmp# rm -rf llvm-compiler/


EOS智能合约内部调用EOS币转账功能

1、调用currency::inline_transfer静态方法,方法定义如下:
static void inline_transfer( account_name from, account_name to, extended_asset amount, string memo = string(), permission_name perm = N(active) ) {
     action act( permission_level( from, perm ), amount.contract, N(transfer), transfer{from,to,amount,memo} );
     act.send();
}

解释:from,to分别是转账者,接收者。amount是一种扩展资产结构,结构内contract字段为资产属于那个合约。我们要实现内部调用EOS币转账功能,所以contranct应该设置成 N(eosio.token)

调用方式:

extended_asset amount(100,S(4,EOS));
amount.contranct = N(eosio.token);
cuurency::inline_transfer(from,to,amount);
2、定义action,直接发送。其实currency::inline_transfer也是通过定义action实现的。
action(
      permission_level{ _self, N(active) },
      N(eosio.token), N(transfer),  //调用 eosio.token 的 Transfer 合约
      std::make_tuple(_self, to, quantity, std::string(""))).send();