Solidity

使用 solc 編譯後未定義的contracts.contractName

  • November 7, 2017

使用 solc 編譯智能合約後。我遇到了一些問題,並且會喜歡一些用於調試/故障排除的指針。

描述

   $ node
   > var solc = require("solc")  
   > var src = `contract yoThere {
       string public msg;
       function yoThere() {
         msg = "Hey lol";
       }

       function greet() constant returns(string) {
         return msg;
       }
    }
    `

    > var comp = solc.compile(src)
  • 檢查契約
> comp.contracts.yoThere  
undefined

不過,如果我嘗試comp.contracts它會返回整個契約。例如,我想做的是comp.contracts.yoThere.bytecode

我不知道名字前的冒號:yoThere是否表明我做錯了什麼:

   > comp.contracts
   { ':yoThere': 
     { assembly: { '.code': [Array], '.data': [Object] },
     // ...

任何正確方向的幫助或指示將不勝感激。

根據 solc-js 的 github issue 83,“如果你從不是文件的東西編譯,編譯器會使用空文件名並添加一個:單獨的文件名和合約名。”

這似乎是從 solc 0.4.9 引入的。

由於添加了冒號(如對原始問題的評論中所述),comp.contracts[":yoThere"].bytecode因此提供了所需的輸出。如果不需要添加冒號,請從文件編譯。

引用自:https://ethereum.stackexchange.com/questions/30036