天天看點

EOS合約踩坑之旅の持續更新

溫馨提示:使用右導航欄的目錄可以快速定位哦,或者CTRL+F進行關鍵詞搜尋哈!

EOS合約踩坑之旅の持續更新

1、Unable to generate abi false: Unable to guess index type

EOS合約踩坑之旅の持續更新

查了很久才發現是索引問題導緻的!!!

EOS合約踩坑之旅の持續更新

解決:檢查合約表的索引類型是否錯誤,table的索引目前隻支援 uint64_t 類型。

2、通知攔截器不起作用的問題

解決:在合約中加入transfer通知攔截器,不起作用。注意合約底部的EOSIO_ABI,需要使用 EOSIO_ABI_EX,否則攔截器不起作用。

3、unable to find key

在使用内聯函數get_balance時可能會出現的錯誤,是因為去擷取餘額時,如果該代币的餘額為0即在accounts表中不存在該使用者的資料,源碼中會進行中斷而不是傳回0,就有了unable to find key的錯誤。

解決:改用查表的方式擷取餘額

4、error: C++ requires a type specifier for all declarations

     error: expected function body after function declarator

EOS合約踩坑之旅の持續更新

解決:使用EOSIO_ABI_EX必須要有apply引入,否則改用EOSIO_ABI 

5、deadline exceeded錯誤

解決:可能action邏輯中有死循環導緻的,仔細檢查下代碼

6、Replacing a deferred transaction is temporarily disabled.錯誤

解決:執行延時事務時替換id失敗提示的錯誤,可以在替換id前将上一條延時事務删掉。cancel_deferred(id)

7、資料表的available_primary_key自增,清表時會從0開始

注意:available_primary_key()的自增,合約會拿目前表的最大主鍵值去加一,假如最後一條的主鍵為 199,此時available_primary_key()的值為200,如果把 199 的删除掉,那麼available_primary_key()的值會變成199。同時當表資料全部清除了,available_primary_key()的值會變成0。

建議:為了保證唯一性,可以自己在合約建一個表記錄id,如表名為config,有兩個字段 id,next_id。id為此表的主鍵,固定為1,每次需要插入記錄就擷取此表的next_id,然後把next_id加1更新回config表。這樣就可以保證所需要的記錄有唯一id或者key。

繼續閱讀