新手问答 求问:EOS 智能合约中不能使用 for 循环吗

eoshily · 2018年07月22日 · 最后由 dnbstarz 回复于 2018年08月22日 · 4279 次阅读

求问:EOS智能合约中不能使用for循环吗?我在合约中使用了for循环,但是从for循环开始后面的语句都没有执行

共收到 54 条回复

for? 问问题基本的是不是 写个demo? 发下错误?

eos\contracts\eosio.system\eosio.system.cpp

void native::newaccount( account_name     creator,
                            account_name     newact
                            /*  no need to parse authorities
                            const authority& owner,
                            const authority& active*/ ) {

      if( creator != _self ) {
         auto tmp = newact >> 4;
         bool has_dot = false;

         for( uint32_t i = 0; i < 12; ++i ) {
           has_dot |= !(tmp & 0x1f);
           tmp >>= 5;
         }

for????

Surou 回复

嗯,多谢。
是的我看到系统合约有for循环,但是我昨天写了一个,for里面的print一直不执行,而且for循环结束后的循环体外的print也不执行。

代码是这样的:

print("111\n");
for (uint32_t i = 0; i < 2; i++) {
    print("222\n");
}
print("333\n") ;

上面的代码只打印111222333没打印出来,但是执行合约的时候并没有提示什么错误,后来把print函数里的\n去掉222333都出来了。大神这是什么原因呢?

Surou 回复

另外想问下大神,在合约中实现一个到指定的时间点触发某个事件,怎么确定到没到指定的时间点呢?

eoshily 回复
eos\contracts\eosiolib\currency.hpp
bool apply( account_name contract, action_name act ) {
           if( contract != _contract )
              return false;

           switch( act ) {
              case N(issue):
                 print( "issue\n");
                on( unpack_action_data<issue>() );
                return true;
              case N(transfer):
                 print( "transfer\n");
                on( unpack_action_data<transfer>() );
                return true;
              case N(create):
                 print( "create\n");
                on( unpack_action_data<create>() );
                return true;
           }
           return false;
        }

没测出问题,看上面 currency 中的

print( "create\n");

问题点应该不在 " \n"

eoshily 回复
os\contracts\dice\dice.cpp
game.deadline = eosio::time_point_sec(now() + FIVE_MINUTES);
.....
eosio_assert(game_itr->deadline != eosio::time_point_sec(0) && eosio::time_point_sec(now()) > game_itr->deadline, "game not expired");
Surou 回复

大神再问一下,可以让它到时间后自动执行一些程序么

目前已有的插件应该不支持,一般是 外部程序 执行合约 获取结果,根据结果 外部程序再自己去处理

Surou 回复

了解,THX👍

Surou 回复

一个没有参数的合约要怎么调用呢

OuterST 回复

你是说合约的action没有参数?

eoshily 回复

我解决了。可能是我wasm没更新。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册