Comments (5)
你好,以下是您上述问题的回复,如果有疑问可以继续在下面交流
第一个问题,使用uint64_t primary_key() const { return pool.asset_id; }
是可以的,主键只支持uint64_t类型,请问是遇到什么错误了吗?编译错误还是使用multi_index::find
错误?
第二个问题,使用withdraw_asset
转账是不消耗手续费的,从合约账户提现资产到指定账户。
第三个问题,合约的 action 一次执行的时间限制是10ms
from gxb-core.
@RootkitKiller 谢谢!
我又研究了一下, 第一个错误我知道了,是我//@abi table name i64
的注释写错了。
原因是我之前写的注释忘记加 i64
了, 所以如果写成return pool.asset_id;
会导致编译时出现Unable to guess index type
错误。 但是,如果只是return asset_id;
即使不加i64
也不会出问题。
麻烦您了!
非常感谢!
from gxb-core.
@RootkitKiller 不好意思又要麻烦您了
1、遇到一个特别奇怪的问题。 在官方测试网上,我部署了一个合约,合约中有个表,大概是:
// @abi table prizepool i64
struct prizepool {
uint64_t asset_id;
int64_t prize_pool;
int64_t unissued_prize;
// .......
uint64_t primary_key() const { return asset_id; }
// ... GRAPHENE_SERIALIZE
};
typedef graphene::multi_index<N(prizepool), prizepool> prizepool_index;
prizepool_index prizepool_idx;
用{_self,_self}
初始化, 然后合约里有一个action
:
// @abi action
void withdraw(contract_asset amount)
{
/* 这一部分即使注释掉也会出错
auto it = prizepool_idx.find(asset_id);
if(it != prizepool_idx.end()) {
// .....
}
*/
withdraw_asset(_self, OWNER_ID, amount.asset_id, amount.amount);
}
合约的表本身没有问题,问题是如果一个资产的asset_id
出现在表中,那么,调用该action
中的withdraw_asset
转出该资产会大概率的出错,错误提示是:{type: "un_def_error", message: "graphene_assert_message assertion failure: assertion failure with message: different asset_id", code: 433}
如果您需要我可以提供更详细的错误信息。 如果把该资产的对应的asset_id
从这个表中删掉,则一切正常了。另外在合约其他action
中的withdraw_asset
时正常的。
- 几个简单的关于API的问题, 因为我不太确定GXC,对 boost::multi_index的接口进行了多大的修改
1) 次级索引(正常迭代器)是按照所以升序排列,重复值再按主键升序排序?
2)low_bound
返回: 不小于查询值,并且主键索引最小的迭代器?
3)upper_bound
返回: 不大于查询值,并且主键最大的迭代器?
(JSON_RPC里get_table_row_ex
中返回的是不包括上界的,所以这个很不确定)
from gxb-core.
你好,以上问题回复如下:
1 可以把详细的合约代码发来看看。
2.1 是的
2.2 和2.3关于lower_bound 和 upper_bound,这两个接口与multi_index接口是一致的
假设存在元素 [2,3,4,5,6,7]
使用lower_bound(2),返回的迭代器为元素2.
使用upper_bound(2),返回的迭代器元素为3.
2.3 get_table_row_ex 返回的结果为左闭右开区间,包含下界,不包含上界
from gxb-core.
关于第一个问题,我又试了一下
当一个合约直接部署,从来都没有更新的时候就不会出现问题,如果更新过就有可能出问题。
另外一个现象是, 为了确定问题, 我一点一点的删除代码,然后重新部署,发现有时会出现以前版本中已经删掉的graphene_assert
失败出现的信息。 这个可能是同步问题,也有可能是:
现在在测试网上合约更新的逻辑是不是有变动,我看合约更新不是按合约大小定价的,而是看合约增大了多少,如果没有增大则收 1 GXC。 (我只是猜测, 可能性比较小,这句几乎可以忽略) 如果合约变小了,合约更新之后会残留部分之前的代码,当程序不小心跑飞,就会执行到残留的代码。
其他的我再试试看。
from gxb-core.
Related Issues (20)
- 统计智能合约占用的RAM情况
- 智能合约编译的一个问题 HOT 5
- abi generation of set and map
- 对节点支持txid查transaction功能进行详细测试 HOT 1
- 对replay逻辑优化测试 HOT 1
- RPC接口怎么通过txid获取交易信息 HOT 3
- broadcast_transaction API returns txid
- Mac系统测试网环境,同步出错
- testnet 合约更新有问题 HOT 3
- Testnet 调用合约 HOT 2
- ES插件在Ubuntu18.04 系统下,存在某些交易类型无法写入到数据库的情况
- 每次重启都会重新Replaying blocks HOT 2
- 当前版本智能合约class name不支持下划线和大写字母
- gxb-core更新boost库版本到1.69及以上 HOT 1
- witness_node启动时,插件名称不存在时,未抛出错误日志,进程直接退出
- 默认添加txid反查插件,不再使用可选插件配置的方式[WIP] HOT 1
- Cannot get account history HOT 6
- GXB-Core Release v1.0.200327 HOT 2
- how to enable bitasset feature ?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gxb-core.