BCSkill (Block chain skill )
区块链中文技术社区

只讨论区块链底层技术
遵守一切相关法律政策!

eosio::token.get_balance 合约内获取帐户代币余额

开发的DAPP需要获取另一个帐户的EOS余额,看遍了EOS源码eosiolib下的头文件,觉得只有currency.hpp最靠谱,尝试使用该头文件下的get_balance方法,但是一直没能成功,官方又没有文档,最终放弃。后来又尝试了eosio.token/eosio.token.hpp竟然让我成功了,这里介绍一下用法:
安装eos的时候并不会把eosio.token放到你的依赖库路径下,所以需要我们自己手动链接一下依赖库

ln -s /your-eos-path/contracts/eosio.token /usr/local/include/

用的时候需要额外带上一个头文件

#include <eosio.token/eosio.token.hpp>

用起来还是很简单的

auto eos_token = eosio::token(N(eosio.token)/* 合约账户名 */);
auto balance = eos_token.get_balance(owner/* 要查的账户名 */, symbol_type(S(4, EOS)).name());
print("eos balance: ", balance.amount);

需要注意的是get_balance的第二个参数为symbol_name,而不是symbol,所以需要先symbol_type(S(4, EOS))构造出symbol后调用name()方法获取。否则会一直提示你找不到对应的余额,主要原因是在于S(4, EOS)构造出的64位无符号数中最后八位代表的是精度,而余额表中的键值不需要用到精度,所以存的时候去掉了最后8位,所以如果直接传入S(4, EOS)会查不出来。

转载自:github

ubuntu搭建个人WDCP

1. 下载wdcP

wget http://dl.wdlinux.cn/files/lanmp_v3.tar.gz

2. 解压

tar -xzvf lanmp_v3.tar.gz

3. 编译

sudo sh lanmp.sh

如果出现以下错误

编译中,开始报错:81: [: !=: unexpected operator 类似这样的编译错误,各种操作符不允许,不识别!

解决此问题的方法

sudo dpkg-reconfigure dash


选择 <NO>
然后再次编译,这个过程会很长,大概15分钟的样子~

OK,这个时候测试一下:
浏览器输入http://本地ip:8080
访问后台

默认用户名: admin
默认密码: wdlinux.cn

创建默认的genesis.json

创建genesis.json文件

 nodeos --extract-genesis-json genesis.json

打印genesis-json

--print-genesis-json

response_content_length >= 0: Invalid content-length response

EOS版本更新到 1.0.9+

root@iZ2zea5mjpcmz9m17k56daZ:~# cleos create account eosio eosio.token EOS5M2sNqDPZtQoBcRMnPQEnY1MJaVtdWWPx7A3UpcLgtzdLusFVW
420867ms thread-0   main.cpp:2756                 main                 ] Failed with error: Assert Exception (10)
response_content_length >= 0: Invalid content-length response

打开 keosd 的config.ini ubuntu的位置在 ~/eosio-wallet
修改(旧版添加) http-validate-host = false

如果此处无创建config.ini,则keosd可能加载的 ~/.local/share/eosio/nodeos/config/config.ini种的配置,修改此文件种的 http-validate-host = false
修改文件后pkill keosd 重启nodeos
github issues

EOS memo 最大字节数

不能超过256字节

Error 3050003: eosio_assert_message assertion failure
Error Details:
assertion failure with message: memo has more than 256 bytes