溫馨提示:使用右導航欄的目錄可以快速定位哦,或者CTRL+F進行關鍵詞搜尋哈!
1、Unable to generate abi false: Unable to guess index type
查了很久才發現是索引問題導緻的!!!
解決:檢查合約表的索引類型是否錯誤,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
解決:使用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。