eosio contract由3個部分構成
nativeaction
nativeactions是setcode, setabi, newaccount功能的函式集,這部分代碼是hardcode在EOS系統代碼里的,也就說不需要部署這一步驟,所以就解決了蛋生雞,雞生蛋問題,
nativeaction是通過SET_APP_HANDLER注冊的
對應的函式名是apply_eosio_xxx,比如apply_eosio_setcode,apply_eosio_newaccount
eosio.bios, eosio.system
eosio.bios是一個智能合約的代碼,是通過智能合約部署方式系結到eosio contract上的,那eosio.bios部署后,nativeactions部分是不是就失效了啊,確實可以這樣實作,由于setcode這些action需要永久生效,這就需要eosio.bios包含nativeactions這些函式,這樣就出現了相同一份代碼分散在兩個模塊,獨立性和維護不夠好,所以,目前的實作是通過特殊處理讓nativeactions的函式有最高優先級,永不覆寫,哪怕eosio.bios實作了同樣的函式(比如set_code, set_abi),
但是eosio.system和eosio.bios是一個級別的,都是contract, 是水火不相容的,一旦將eosio.system系結到eosio這個賬號,eosio.bios就失效了,所以eosio.bios的函式要么是臨時用途的,要么就需要bios.system重新實作,比如setalimits會失效,而setpriv會在eosio.system重新實作,
這個和作業系統啟動一樣,一開始bios(bootloader)代碼運行,然后引導system代碼,當system加載后,bios(bootloader)代碼失效,所以從這個設計和名字可以看出,EOS確實是在按照作業系統的邏輯設計,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/145536.html
標籤:其他
上一篇:重新學防抖debounce和節流throttle,及react hook模式中防抖節流的實作方式和注意事項
下一篇:6.Fabric區塊瀏覽器的部署
