EOSIO 智能合約


1. 如何處理錯(cuò)誤疚脐?

使用函數(shù) eosio_assert 或者類似的方法用來(lái)返回錯(cuò)誤


2. account_name 如何和字符串相互轉(zhuǎn)換碧囊?

account_name 是 uint64_t 類型蚓土,EOSIO 提供了一套方式可以將字符串轉(zhuǎn)換成 name肖粮, 不過(guò)這種方式是有限制條件的:

字符集:".12345abcdefghijklmnopqrstuvwxyz"
字符串不能超過(guò)13個(gè)字符

涉及相關(guān)函數(shù)是:
::eosio::string_to_name
::eosio::name::to_string


3. asset 是個(gè)什么類革半?


4. asset 如何和字符串相互轉(zhuǎn)換砂蔽?

asset 類有兩個(gè)成員函數(shù) from_string 和 to_string


5. 智能合約是如何實(shí)現(xiàn)外部調(diào)用的時(shí)候?qū)⒆址D(zhuǎn)換成 account_name 和 asset 的洼怔?

針對(duì) asset 類實(shí)現(xiàn)了 from_string 和 to_string 在序列化的時(shí)候可以通過(guò)反射調(diào)用(具體反射流程我還沒(méi)有了解清楚)

針對(duì) account_name 程序中有個(gè) eosio::name 類,還有一個(gè) eosio::chain::name 類左驾,我不了解為什么有兩個(gè)類存在镣隶,但是,后者是通過(guò)實(shí)現(xiàn)fc::to_variant 和 fc::from_variant 達(dá)到序列化和反序列化的目的诡右,前者還不是很清楚轉(zhuǎn)換的邏輯安岂,不過(guò)可 以推測(cè)前者也是實(shí)現(xiàn)了某種轉(zhuǎn)換函數(shù)。


6. 如何編寫一個(gè) Table 稻爬?

Table 的編寫受限目前的代碼形式嗜闻,暫時(shí)給個(gè)模板,然后說(shuō)明一下

   // @abi table holderinfo i64
   struct holderinfo {
      uint64_t contract_id;
      std::string insurance_holder;
      std::string quantity;
      uint64_t insurance_num;
      std::string insurance_company_id;
      std::string insurance_company_name;
      std::string download_url;
      std::string time;
      std::string state;
      uint64_t loan_id;
      
      uint64_t primary_key() const { return loan_id; }
      
      EOSLIB_SERIALIZE(
            holderinfo, (contract_id)
            (insurance_holder)
            (quantity)
            (insurance_num)
            (insurance_company_id)
            (insurance_company_name)
            (download_url)
            (time)
            (state)
            (loan_id))
   };
  1. 注釋行 “ // @abi table holderinfo i64” 不可少桅锄, 其中的 holderinfo 必須是表名稱琉雳,表名稱的命令必須符合 name 的定義样眠,另外 i64 也是不可少的,i64 標(biāo)示主鍵的類型翠肘。
  2. 類的名稱和表名稱保持一致檐束,原則上可以不一致,但是不一致會(huì)有一堆的問(wèn)題束倍。
  3. primary_key 是不可少的部分被丧,return 語(yǔ)句最好是列字段的變量,原則上可以是列字段對(duì)象的某個(gè)成員绪妹。
  4. EOSLIB_SERIALIZE 是個(gè)表的序列化宏甥桂,我不清楚這個(gè)宏是不是必須的,初期當(dāng)成一個(gè)必須的部分邮旷,需要注意的是黄选,序列化宏必須和類中的字段定義的順序保持一直,否則在 get table 的時(shí)候報(bào)錯(cuò)婶肩。
  5. 如果你符合了上述規(guī)則办陷,那么你就可以使用 eosiocpp 工具自動(dòng)生成 abi 文件,否則 abi 文件需要手動(dòng)編寫律歼,具體的就是手動(dòng)編寫表的部分

7. require_auth 是什么民镜?

這個(gè)函數(shù)使用來(lái)和 -p 選項(xiàng)合作使用的,但是我一直找不到源碼险毁,不知道它是如何工作的制圈。
合約里面如果有如下代碼

require_auth( _self );

說(shuō)明 -p 選項(xiàng)需要的是合約的名稱,一個(gè)一般性的例子如下:

cleos push action token create '["bank", "10000000.0000 FS"]' -p token

其中 token 是合約名稱


8. 如何寫一個(gè) action辱揭?

action 是無(wú)返回值的离唐,action 的名字要符合 name 的命名規(guī)則, action 最多接受 64 個(gè)參數(shù)问窃, action 的輸出會(huì)以 JSON 的格式返回給客戶端


9. 為什么 action 需要有個(gè) transaction 亥鬓?

因?yàn)?action 可能會(huì)執(zhí)行失敗,如果 action 執(zhí)行失敗了域庇, transaction 可以保證原有的數(shù)據(jù)不會(huì)受到破壞嵌戈!transaction 有點(diǎn)類似原子的操作!


10. require_recipient 這個(gè)有什么用听皿?

參考What is the purpose of require_recipient?

require_recipient 是一個(gè)類似記錄操作記錄熟呛,方便后面的針對(duì) account 操作日志的查詢


11. SEND_INLINE_ACTION 這個(gè)有什么作用?

這個(gè)可以用來(lái)發(fā)送同一個(gè)合約里面的 action 尉姨,舉個(gè)例子:

SEND_INLINE_ACTION(*this, transfer, { st.issuer, N(active) }, { st.issuer, to, quantity, memo });

*this:本對(duì)象
transfer: inline action
{ st.issuer, N(active) }: 權(quán)限
{ st.issuer, to, quantity, memo }: inline action parameters


12. 一個(gè)賬戶能否同時(shí)發(fā)布多個(gè)合約庵朝?一個(gè)合約能否同時(shí)被多個(gè)賬戶發(fā)布?

一個(gè)賬戶只能發(fā)布一個(gè)合約,一個(gè)合約可以被多個(gè)賬戶發(fā)布九府,他們是各自不同的合約椎瘟。


13. eosio.token 的表是如何設(shè)計(jì)的?

對(duì)于 EOSIO 中的 TABLE 有幾點(diǎn)需要明確:

  1. TABLE 的存儲(chǔ)使用的是 fc::datastream 實(shí)現(xiàn)的侄旬,這個(gè)類的具體實(shí)現(xiàn)我不太清楚肺蔚,可以肯定的是應(yīng)該是流存儲(chǔ)方案。
  2. TABLE 有兩個(gè)非常重要的屬性儡羔,一個(gè)是owner_account_name宣羊,一個(gè)是 scope_name,前者其實(shí)一個(gè)account_name, 我們一般設(shè)計(jì)的時(shí)候使用合約名稱汰蜘。后者是一個(gè)層級(jí)結(jié)構(gòu)仇冯,標(biāo)識(shí)某個(gè)scope_name的范圍,這里有一個(gè)設(shè)計(jì)問(wèn)題族操,為什么是二級(jí)劃分赞枕?

14. 智能合約執(zhí)行時(shí)間有什么要求?

智能合約執(zhí)行時(shí)間不能太長(zhǎng)坪创,具體的沒(méi)有試過(guò),不過(guò)如果太長(zhǎng)會(huì)產(chǎn)生 long transaction 的錯(cuò)誤


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姐赡,一起剝皮案震驚了整個(gè)濱河市莱预,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌项滑,老刑警劉巖依沮,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枪狂,居然都是意外死亡危喉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門州疾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辜限,“玉大人,你說(shuō)我怎么就攤上這事严蓖”〉眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵颗胡,是天一觀的道長(zhǎng)毫深。 經(jīng)常有香客問(wèn)我,道長(zhǎng)毒姨,這世上最難降的妖魔是什么哑蔫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上闸迷,老公的妹妹穿的比我還像新娘嵌纲。我一直安慰自己,他們只是感情好稿黍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疹瘦。 她就那樣靜靜地躺著,像睡著了一般巡球。 火紅的嫁衣襯著肌膚如雪言沐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天酣栈,我揣著相機(jī)與錄音险胰,去河邊找鬼。 笑死矿筝,一個(gè)胖子當(dāng)著我的面吹牛起便,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窖维,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼榆综,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了铸史?” 一聲冷哼從身側(cè)響起鼻疮,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琳轿,沒(méi)想到半個(gè)月后判沟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崭篡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年挪哄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琉闪。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迹炼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颠毙,到底是詐尸還是另有隱情疗涉,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布吟秩,位于F島的核電站咱扣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涵防。R本人自食惡果不足惜闹伪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一沪铭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偏瓤,春花似錦杀怠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至证舟,卻和暖如春硕旗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背女责。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工漆枚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抵知。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓墙基,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刷喜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子残制,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容