天天看點

【Solidity】使用編譯器使用編譯器

Solidity庫的建構目标之一是solc,即solidity指令行編譯器。 使用<code>solc --help</code>可以為您提供所有選項的解釋。 編譯器可以生成各種輸出,從簡單的二進制檔案和通過抽象文法樹(解析樹)的彙編到氣體使用的估計。 如果你隻想編譯一個檔案,你可以運作它作為<code>solc -bin sourceFile.sol</code>,它将列印二進制檔案。 在部署合同之前,請先使用<code>solc --optimize --bin sourceFile.sol</code>進行編譯時激活優化器。 如果要擷取一些更進階的solc的輸出變量,最好使用<code>solc -o outputDirectory --bin --ast --asm sourceFile.sol</code>将其輸出到單獨的檔案中。

指令行編譯器将自動從檔案系統讀取導入的檔案,但也可以通過以下方式使用<code>prefix = path</code>提供路徑重定向:

這本質上訓示編譯器搜尋任何從<code>/usr/local/lib/dapp-bin</code>下的<code>github.com/ethereum/dapp-bin/</code>開始的任何東西,如果沒有找到該檔案,它将會看<code>/usr/local/lib/fallback</code>(空字首總是比對)。 solc将不會從位于重映射目标之外的檔案系統讀取檔案,而是在顯式指定的源檔案所在目錄之外,是以<code>import "/etc/passwd";</code> 隻有在添加<code>=/</code>作為重映射時才可以工作。

如果重新映射有多個比對項,則選擇具有最長公用字首的比對項。

為了安全起見,編譯器可以限制可以通路哪些目錄。 允許在指令行上指定的源檔案的路徑(及其子目錄)和重新映射定義的路徑用于導入語句,但其他所有内容都被拒絕。 額外的路徑(及其子目錄)可以通<code>--allow-paths /sample/path,/another/sample/path</code>來實作。

添加<code>--libraries "Math:0x12345678901234567890 Heap:0xabcdef0123456"</code>指令為每個庫提供一個位址或将該字元串存儲在一個檔案(每行一個庫)中,并使用<code>--libraries fileName</code>運作<code>solc</code>。

如果使用選項<code>--link</code>調用<code>solc</code>,所有輸入檔案将被解釋為上面給出的<code>__LibraryName ____</code>格式中的未連結二進制檔案(十六進制編碼),并且是原位置的(如果輸入是從stdin讀取的,則寫入 到stdout)。 在這種情況下,除了<code>--libraries</code>之外的所有選項都将被忽略(包括-o)。

如果使用<code>--standard-json</code>選項調用<code>solc</code>,則會在标準輸入上輸入JSON輸入(如下所述),并在标準輸出上傳回一個JSON輸出。

這些JSON格式由編譯器API使用,也可以通過solc獲得。 這些都可以更改,一些字段是可選的(如所指出),但其目的僅在于向後相容的更改。

編譯器API期望使用JSON格式的輸入,并以JSON格式輸出輸出編譯結果。