Skip to content

Latest commit

Β 

History

History
310 lines (277 loc) Β· 16.3 KB

using-the-compiler.rst

File metadata and controls

310 lines (277 loc) Β· 16.3 KB

컴파일러 μ‚¬μš©ν•˜κΈ°

.. index:: ! commandline compiler, compiler;commandline, ! solc, ! linker

λͺ…λ Ήν–‰ 컴파일러 μ‚¬μš©ν•˜κΈ°

Note

이 μ„Ήμ…˜μ€ :ref:`solcjs <solcjs>` 에 적용 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Solidity μ €μž₯μ†Œμ˜ λΉŒλ“œ λŒ€μƒ 쀑 ν•˜λ‚˜λŠ” Solidity λͺ…λ Ήν–‰ 컴파일러인 solc μž…λ‹ˆλ‹€, solc --help λ₯Ό μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  μ˜΅μ…˜μ— λŒ€ν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” κ°„λ‹¨ν•œ ꡬ문 트리 (ꡬ문 뢄석 트리)λ₯Ό ν†΅ν•œ κ°„λ‹¨ν•œ λ°”μ΄λ„ˆλ¦¬ 및 μ–΄μ…ˆλΈ”λ¦¬λΆ€ν„° κ°€μŠ€ μ‚¬μš©λŸ‰ 평가에 이λ₯΄κΈ°κΉŒμ§€ λ‹€μ–‘ν•œ 좜λ ₯을 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ 단일 파일만 컴파일 ν•˜κΈ°λ₯Ό μ›ν•œλ‹€λ©΄, solc --bin sourceFile.sol λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”. λ°”μ΄λ„ˆλ¦¬κ°€ 좜λ ₯ 될 κ²ƒμž…λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ μ»¨νŠΈλ ‰νŠΈλ₯Ό 배치(deploy)ν•˜κΈ°μ „μ— solc --optimize --bin sourceFile.sol λ₯Ό μ΄μš©ν•˜μ—¬ μ»΄νŒŒμΌν•˜λŠ” λ™μ•ˆ μ΅œμ ν™”κΈ°(Optimizer)λ₯Ό ν™œμ„±ν™” μ‹œν‚€μ„Έμš”. λ§Œμ•½ μ‘°κΈˆλ” μ§„λ³΄λœ λ‹€λ₯Έ ν˜•νƒœμ˜ solc 의 κ²°κ³Όλ₯Ό μ–»κΈ°λ₯Ό μ›ν•œλ‹€λ©΄, μ•„λ§ˆλ„ solc -o outputDirectory --bin --ast --asm sourceFile.sol λ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ„ν•  νŒŒμΌλ“€μ„ λͺ¨λ‘ 좜λ ₯ν•˜λ„λ‘ λͺ…λ Ήν•˜λŠ” 것이 쒋을 κ²ƒμž…λ‹ˆλ‹€.

λͺ…λ Ήν–‰ μ»΄νŒŒμΌλŸ¬λŠ” μžλ™μ μœΌλ‘œ 파일 μ‹œμŠ€ν…œμœΌλ‘œ λΆ€ν„° μˆ˜μž…λœ(imported) νŒŒμΌλ“€μ„ μ½μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ•„λž˜μ˜ λ°©λ²•μœΌλ‘œ prefix=path λ₯Ό μ‚¬μš©ν•΄ λ¦¬λ‹€μ΄λ ‰νŠΈν•  경둜λ₯Ό μ œκ³΅ν•˜λŠ” 것 λ˜ν•œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

solc github.com/ethereum/dapp-bin/=/usr/local/lib/dapp-bin/ =/usr/local/lib/fallback file.sol

이것은 본질적으둜 /usr/local/lib/dapp-bin μ•„λž˜μ— μžˆλŠ” github.com/ethereum/dapp-bin/ 둜 μ‹œμž‘ν•˜λŠ” 것을 κ²€μƒ‰ν•˜λΌκ³  μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ§€μ‹œν•©λ‹ˆλ‹€. 그리고 λ§Œμ•½ 거기에 μžˆλŠ” νŒŒμΌμ„ 찾지 λͺ»ν•œλ‹€λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” /usr/local/lib/fallback λ₯Ό μ‚΄νŽ΄ λ³Όκ²ƒμž…λ‹ˆλ‹€. (곡백의 μ ‘λ‘μ‚¬λŠ” 항상 μΌμΉ˜ν•œλ‹€.) solc 은 외뢀에 재 맡핑 λŒ€μƒ 외뢀와 λͺ…μ‹œμ μœΌλ‘œ μ†ŒμŠ€νŒŒμΌ μœ„μΉ˜κ°€ λͺ…μ‹œλœ 디렉터리 외뢀에 μžˆλŠ” 파일 μ‹œμŠ€ν…œμœΌλ‘œ λΆ€ν„° 파일 μ‹œμŠ€ν…œλ‘œ λΆ€ν„° νŒŒμΌλ“€μ„ 읽지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ import "/etc/passwd"; 와 같은 것듀은 였직 재맡 ν•‘(remapping)μœΌλ‘œμ„œ =/ μΆ”κ°€ν•˜λŠ” κ²½μš°μ—λ§Œ μž‘λ™ν•©λ‹ˆλ‹€.

λ§Œμ•½ μž¬λ§΅ν•‘μœΌλ‘œ 인해 μ—¬λŸ¬ 일치 ν•­λͺ©μ΄ μžˆλŠ” 경우 κ°€μž₯ κΈ΄ 곡톡 접두사가 μžˆλŠ” ν•­λͺ©μ΄ μ„ νƒλ©λ‹ˆλ‹€.

λ³΄μ•ˆμƒμ˜ μ΄μœ λ“€λ‘œ μ»΄νŒŒμΌλŸ¬λŠ” μ•‘μ„ΈμŠ€ ν•  수 μžˆλŠ” 디렉터리λ₯Ό μ œν•œν•©λ‹ˆλ‹€. λͺ…령행에 λͺ…μ‹œλœ μ†ŒμŠ€νŒŒμΌ 경둜(및 ν•΄λ‹Ή ν•˜μœ„ 디렉터리)와 μž¬λ§΅ν•‘μ— μ˜ν•΄ μ •μ˜ 된 κ²½λ‘œλ“€μ€ import λ¬Έμ—μ„œ ν—ˆμš©λ©λ‹ˆλ‹€, κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ λͺ¨λ“  것듀은 κ±°μ ˆλ©λ‹ˆλ‹€. 좔가적인 경둜(및 κ·Έκ²ƒμ˜ ν•˜μœ„ 디렉터리)λŠ” --allow-paths /sample/path,/another/sample/path μŠ€μœ„μΉ˜λ₯Ό 톡해 ν—ˆμš© 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μ»¨νŠΈλ ‰νŠΈκ°€ :ref:`libraries <libraries>` λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄, λ°”μ΄νŠΈμ½”λ“œκ°€ __LibraryName______ 의 ν•˜μœ„ λ¬Έμžμ—΄(substrings)λ₯Ό ν¬ν•¨ν•œλ‹€λŠ” 것을 μ•Œμ•„μ•Όν•©λ‹ˆλ‹€. κ·Έ 지점에 λ‹Ήμ‹ μ˜ 라이브러리 μ£Όμ†Œκ°€ μ‚½μž…λ κ²ƒμ„ μ˜λ―Έν•˜λŠ” 링컀둜써 solc 을 μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

각각의 라이브러리 μ£Όμ†Œλ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œ μ»€λ§¨λ“œμ— --libraries "Math:0x12345678901234567890 Heap:0xabcdef0123456" λ₯Ό μΆ”κ°€ν•˜λ˜μ§€ 파일(ν•œμ€„μ— ν•˜λ‚˜μ˜ 라이브러리)에 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κ³  --libraries fileName λ₯Ό μ‚¬μš©ν•˜μ—¬ solc λ₯Ό μ‹€ν–‰ν•˜μ„Έμš”

λ§Œμ•½ solc κ°€ --link μ˜΅μ…˜κ³Ό ν•¨κ»˜ 호좜 λœλ‹€λ©΄, λͺ¨λ“  μž…λ ₯ 파일 듀은 주어진 __LibraryName____ ν˜•μ‹μ˜ μ—°κ²°(link)λ˜μ§€ μ•Šμ€ (16μ§„μˆ˜λ‘œ μΈμ½”λ“œ 된)λ°”μ΄λ”λ¦¬λ“€λ‘œ ν•΄μ„λ˜μ–΄ ν˜„μž¬ μœ„μΉ˜μ— μ—°κ²° λ©λ‹ˆλ‹€(λ§Œμ•½ μž…λ ₯이 stdin으둜 λΆ€ν„° μ½μ–΄μ˜¨κ²ƒμ΄λΌλ©΄, 그것은 stdout으둜 μ“°μ—¬μ§‘λ‹ˆλ‹€). --libraries λ₯Ό μ œμ™Έν•œ λͺ¨λ“  μ˜΅μ…˜ 은 이 κ²½μš°μ— λ¬΄μ‹œλ©λ‹ˆλ‹€(-o 포함)

λ§Œμ•½ solc κ°€ μ˜΅μ…˜ --standard-json κ³Ό ν•¨κ»˜ 호좜 λ˜μ—ˆλ‹€λ©΄, 그것은 ν‘œμ€€ μž…λ ₯μ—μ„œ JSON μž…λ ₯(μ•„λž˜μ— μ„€λͺ…)을 κΈ°λŒ€ν•©λ‹ˆλ‹€ 그리고 ν‘œμ€€μΆœλ ₯의 JSON좜λ ₯을 λ°˜ν™˜ν•©λ‹ˆλ‹€..

컴파일러 μž…λ ₯κ³Ό 좜λ ₯ JSON μ„€λͺ…

μ΄λŸ¬ν•œ JSON ν˜•μ‹μ€ solc λ₯Ό 톡해 κ°€λŠ₯ν•œκ²ƒκ³Ό 같이 컴파일러 API에 μ˜ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 것듀은 변화될 수 있고, λͺ‡λͺ‡ ν•„λ“œλŠ” μ„ νƒμ μ΄μ§€λ§Œ(μ•žμ—μ„œ λ§ν•œλŒ€λ‘œ), 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄μ„œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€.

컴파일러 APIλŠ” JSON ν˜•μ‹μœΌλ‘œ μž…λ ₯을 κΈ°λŒ€ν•˜κ³  JSON ν˜•μ‹μœΌλ‘œ 컴파일의 κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

주석은 λ‹Ήμ—°νžˆ μ„€λͺ…λͺ©μ μœΌλ‘œλ§Œ ν—ˆμš©λ˜κ³  여기에 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž…λ ₯ μ„€λͺ…

{
  // Required: Source code language, such as "Solidity", "serpent", "lll", "assembly", etc.
  language: "Solidity",
  // Required
  sources:
  {
            // 여기에 이 ν‚€λŠ” μ†ŒμŠ€μ½”λ“œ νŒŒμΌλ“€μ˜ "μ „μ—­(global)" μ΄λ¦„λ“€μž…λ‹ˆλ‹€.
    // μž„ν¬νŠΈλŠ” μž¬λ§΅ν•‘μ„ 톡해 λ‹€λ₯Έ νŒŒμΌμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    "myFile.sol":
    {
      // 선택적 : μ†ŒμŠ€ 파일의 keccak256 ν•΄μ‹œ
      // 이것은 URL을 톡해 μž„ν¬νŠΈλœ 경우 λ‚΄μš©μ„ κ²€μ¦ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
      "keccak256": "0x123...",
      // Required (λ§Œμ•½ "content"κ°€ μ‚¬μš©λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ μ•„λž˜λ₯Ό λ³΄μ„Έμš”): μ†ŒμŠ€νŒŒμΌμ˜ URL
      // URL(s) should be imported in this order and the result checked against the
      // keccak256 hash (if available). If the hash doesn't match or none of the
      // URL은 μ—¬κΈ° μ•ˆμ— μž„ν¬νŠΈ λ˜μ–΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. 그리고 κ²°κ³ΌλŠ” keccak256 ν•΄μ‹œμ— λŒ€ν•΄
      // 확인해야 ν•©λ‹ˆλ‹€. (κ°€λŠ₯ν•œ κ²½μš°μ—). λ§Œμ•½ ν•΄μ‹œκ°€ λ§žμ§€ μ•Šκ±°λ‚˜ μ„±κ³΅ν•œ URL이 μ—†λ‹€λ©΄
      // μ—λŸ¬κ°€ λ°œμƒν•΄μ•Ό ν•©λ‹ˆλ‹€.
      "urls":
      [
        "bzzr://56ab...",
        "ipfs://Qma...",
        "file:///tmp/path/to/file.sol"
      ]
    },
    "mortal":
    {
      // Optional: μ†ŒμŠ€νŒŒμΌμ˜ keccak256 ν•΄μ‹œ
      "keccak256": "0x234...",
      // Required (λ§Œμ•½ "urls"κ°€ μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©΄): μ†ŒμŠ€ 파일의 λ¦¬ν„°λŸ΄ λ‚΄μš©
      "content": "contract mortal is owned { function kill() { if (msg.sender == owner) selfdestruct(owner); } }"
    }
  },
  // Optional
  settings:
  {
    // Optional: μž¬λ§΅ν•‘μ˜ μ •λ ¬λœ 리슀트
    remappings: [ ":g/dir" ],
    // Optional: μ΅œμ ν™”κΈ° (enabled defaults to false)
    optimizer: {
      enabled: true,
      runs: 500
    },
    evmVersion: "byzantium", // Version of the EVM to compile for. Affects type checking and code generation. Can be homestead, tangerineWhistle, spuriousDragon, byzantium or constantinople
    // Metadata settings (optional)
    metadata: {
      // URL이 μ•„λ‹Œ λ¦¬ν„°λŸ΄ λ‚΄μš©λ§Œ μ‚¬μš©ν•˜μ„Έμš”. (κΈ°λ³Έκ°’ : false)
      useLiteralContent: true
    },
    // λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ˜ μ£Όμ†Œ. λ§Œμ•½ λͺ¨λ“  λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 여기에 주어지지 μ•ŠλŠ”λ‹€λ©΄, 그것은 좜λ ₯ 데이터가 λ‹€λ₯Έ μ—°κ²°λ˜μ§€ μ•Šμ€ 객체λ₯Ό μ΄ˆλ‘€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    libraries: {
      // μ΅œμƒμœ„ 레벨 ν‚€λŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‚¬μš©λœ μ†ŒμŠ€νŒŒμΌμ˜ μ΄λ¦„μž…λ‹ˆλ‹€.
      // λ§Œμ•½ μž¬λ§΅ν•‘μ΄ μ‚¬μš©λ˜μ—ˆλ‹€λ©΄, 재 맡핑이 적용된 후에, 이 μ†ŒμŠ€ νŒŒμΌμ€ μ „μ—­ κ²½λ‘œκ°€ μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
      // λ§Œμ•½ 이 ν‚€κ°€ 빈 λ¬Έμžμ—΄μ΄λΌλ©΄, 그것은 μ „μ—­ μˆ˜μ€€μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€.
      "myFile.sol": {
        "MyLib": "0x123123..."
      }
    }
    // The following can be used to select desired outputs.
    // μ•„λž˜μ˜ μ½”λ“œλŠ” μ›ν•˜λŠ” 좜λ ₯을 μ„ νƒν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    // λ§Œμ•½ 이 ν•„λ“œκ°€ λˆ„λ½ λœλ‹€λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” 뢈러였고 νƒ€μž…μ„ 체크 ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—λŸ¬λŸ¬λΆ€ν„° μ–΄λ– ν•œ μ—λŸ¬λ„ μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    // 첫번째 레벨의 ν‚€λŠ” 파일 이름이고 λ‘λ²ˆμž¬λŠ” μ»¨νŠΈλ ‰νŠΈ μ΄λ¦„μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ 빈 계약이름은 파일 자체λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€,
    // starκ°€ μ»¨νŠΈλ ‰νŠΈμ˜ λͺ¨λ“  λ‚΄μš©μ„ μ°Έμ‘°ν•˜λŠ” λ™μ•ˆ.
    //
    // μ•„λž˜λŠ” κ°€λŠ₯ν•œ 좜λ ₯ νƒ€μž…μž…λ‹ˆλ‹€.
    //   abi - ABI
    //   ast - λͺ¨λ“  μ†ŒμŠ€νŒŒμΌμ˜ AST
    //   legacyAST - λͺ¨λ“  μ†ŒμŠ€νŒŒμΌμ˜ legacy AST
    //   devdoc - 개발자 λ¬Έμ„œ (natspec)
    //   userdoc - μ‚¬μš©μž λ¬Έμ„œ (natspec)
    //   metadata - 메타데이터
    //   ir - desugaringμ΄μ „μ˜ μƒˆλ‘œμš΄ μ–΄μ…ˆλΈ”λ¦¬ ν˜•μ‹
    //   evm.assembly - desugaringμ΄ν›„μ˜ μƒˆλ‘œμš΄ μ–΄μ…ˆλΈ”λ¦¬ ν˜•μ‹
    //   evm.legacyAssembly - 이전 μŠ€νƒ€μΌμ˜ JSONν˜•μ‹ μ–΄μ…ˆλΈ”λ¦¬
    //   evm.bytecode.object - λ°”μ΄νŠΈ μ½”λ“œ 객체
    //   evm.bytecode.opcodes - Opcodes 리슀트
    //   evm.bytecode.sourceMap - μ†ŒμŠ€ 맡핑 (디버그에 μœ μš©ν•¨)
    //   evm.bytecode.linkReferences - 링크 참쑰 (if unlinked object)
    //   evm.deployedBytecode* - 배포된 λ°”μ΄νŠΈμ½”λ“œ (evm.bytecodeκ³Ό λ™μΌν•œ μ˜΅μ…˜μ„ 가짐)
    //   evm.methodIdentifiers - ν•΄μ‹œν•¨μˆ˜ 리슀트
    //   evm.gasEstimates - κ°€μŠ€ μΈ‘μ •ν•¨μˆ˜
    //   ewasm.wast - eWASM S-expressions format (not supported atm)
    //   ewasm.wasm - eWASM 바이터리 데이터 (not supported atm)
    //
    // Note that using a using `evm`, `evm.bytecode`, `ewasm`, etc. will select every
    // target part of that output. Additionally, `*` can be used as a wildcard to request everything.
    //
    outputSelection: {
      // Enable the metadata and bytecode outputs of every single contract.
      "*": {
        "*": [ "metadata", "evm.bytecode" ]
      },
      // Enable the abi and opcodes output of MyContract defined in file def.
      "def": {
        "MyContract": [ "abi", "evm.bytecode.opcodes" ]
      },
      // Enable the source map output of every single contract.
      "*": {
        "*": [ "evm.bytecode.sourceMap" ]
      },
      // Enable the legacy AST output of every single file.
      "*": {
        "": [ "legacyAST" ]
      }
    }
  }
}

좜λ ₯ μ„€λͺ…

{
  // 선택적 : μ—λŸ¬λ‚˜ κ²½κ³ κ°€ λ°œμƒ ν–ˆλŠ”μ§€ λ‚˜νƒ€λ‚΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  errors: [
    {
      // Optional: μ†ŒμŠ€ νŒŒμΌμ•ˆ μœ„μΉ˜.
      sourceLocation: {
        file: "sourceFile.sol",
        start: 0,
        end: 100
      ],
      // 의무적 : "TypeError", "InternalCompilerError", "Exception"λ“± κ³Ό 같은 μ—λŸ¬ νƒ€μž…
      // μ•„λž˜ νƒ€μž… 리슀트λ₯Ό λ³΄μ„Έμš”.
      type: "TypeError",
      // 의무적 : "general", "ewasm"λ“±κ³Ό 같은 μ—λŸ¬κ°€ λ°œμƒν•œ μ»΄ν¬λ„ŒνŠΈ
      component: "general",
      // 의무적 ("error" or "warning")
      severity: "error",
      // 의무적
      message: "Invalid keyword"
      // 선택적 : μ†ŒμŠ€ μœ„μΉ˜λ₯Ό ν¬ν•¨ν•œ ν˜•μ‹μ„ κ°–μΆ˜ 메세지
      formattedMessage: "sourceFile.sol:100: Invalid keyword"
    }
  ],
  // 이것은 파일 μˆ˜μ€€ 좜λ ₯을 ν¬ν•¨ν•©λ‹ˆλ‹€. 이것은 outputSelection 섀정에 μ˜ν•΄ μ œν•œλ˜κ³  걸러질 수 μžˆμŠ΅λ‹ˆλ‹€.
  sources: {
    "sourceFile.sol": {
      // Identifier (used in source maps)
      id: 1,
      // The AST object
      ast: {},
      // The legacy AST object
      legacyAST: {}
    }
  },
  // 이것은 μ»¨νŠΈλ ‰νŠΈ μˆ˜μ€€ 좜λ ₯을 ν¬ν•¨ν•©λ‹ˆλ‹€. 이것은 outputSelection섀정에 μ˜ν•΄ μ œν•œλ˜κ³  걸러질 수 μžˆμŠ΅λ‹ˆλ‹€.
  contracts: {
    "sourceFile.sol": {
      // 만갹 μ‚¬μš©λœ μ–Έμ–΄κ°€ μ»¨νŠΈλ ‰νŠΈ 이름을 가지고 μžˆμ§€ μ•Šλ‹€λ©΄, 이 ν•„λ“œλŠ” 빈 λ¬Έμžμ—΄κ³Ό κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.
      "ContractName": {
        // 이더리움 μ»¨νŠΈλ ‰νŠΈ ABI. λ§Œμ•½ λΉ„μ–΄μžˆλ‹€λ©΄, 이것은 빈 배열을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
        // https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI λ₯Ό 확인해 λ³΄μ„Έμš”.
        abi: [],
        // 메타데이터 좜λ ₯ λ¬Έμ„œλ₯Ό ν™•μΈν•΄λ³΄μ„Έμš”.
        metadata: "{...}",
        // μ‚¬μš©μž λ¬Έμ„œ (natspec)
        userdoc: {},
        // 개발자 λ¬Έμ„œ (natspec)
        devdoc: {},
        // 쀑간 ν‘œν˜„ (string)
        ir: "",
        // EVM-related outputs
        evm: {
          // Assembly (string)
          assembly: "",
          // 이전 μŠ€νƒ€μΌμ˜ μ–΄μ…ˆλΈ”λ¦¬ (object)μž…λ‹ˆλ‹€.
          legacyAssembly: {},
          // λ°”μ΄νŠΈ μ½”λ“œμ™€ μžμ„Έν•œ λ‚΄μš©.
          bytecode: {
            // 16μ§„μˆ˜ 인 λ°”μ΄νŠΈ μ½”λ“œμž…λ‹ˆλ‹€.
            object: "00fe",
            // OPcodes 리슀트 (string)μž…λ‹ˆλ‹€.
            opcodes: "",
            // λ¬Έμžμ—΄λ‘œμ¨ μ†ŒμŠ€ λ§΅ν•‘μž…λ‹ˆλ‹€. μ†ŒμŠ€ 맡핑 μ •μ˜λ₯Ό 확인해 λ³΄μ„Έμš”.
            sourceMap: "",
            // μ£Όμ–΄μ‘Œλ‹€λ©΄, 이것은 μ—°κ²°λ˜μ§€ μ•Šμ€ κ°μ²΄μž…λ‹ˆλ‹€.
            linkReferences: {
              "libraryFile.sol": {
                // Byte offsets into the bytecode. Linking replaces the 20 bytes located there.
                "Library1": [
                  { start: 0, length: 20 },
                  { start: 200, length: 20 }
                ]
              }
            }
          },
          // μœ„μ™€ 같은 λ ˆμ΄μ•„μ›ƒ μž…λ‹ˆλ‹€.
          deployedBytecode: { },
          // ν•΄μ‹œ ν•¨μˆ˜ 리슀트 μž…λ‹ˆλ‹€.
          methodIdentifiers: {
            "delegate(address)": "5c19a95c"
          },
          // Function gas estimates
          // κ°€μŠ€ 예츑 ν•¨μˆ˜ μž…λ‹ˆλ‹€.
          gasEstimates: {
            creation: {
              codeDepositCost: "420000",
              executionCost: "infinite",
              totalCost: "infinite"
            },
            external: {
              "delegate(address)": "25000"
            },
            internal: {
              "heavyLifting()": "infinite"
            }
          }
        },
        // 좜λ ₯κ³Ό μ—°κ΄€λœ eWASMμž…λ‹ˆλ‹€.
        ewasm: {
          // S-expressions ν˜•μ‹μž…λ‹ˆλ‹€.
          wast: "",
          // Binary format (hex string)
          // λ°”μ΄λ„ˆλ¦¬ ν˜•μ‹ (hex string)
          wasm: ""
        }
      }
    }
  }
}

μ—λŸ¬ νƒ€μž…

  1. "JSONError" : JSON μž…λ ₯은 μš”κ΅¬λœ ν˜•μ‹μ— μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ˜ˆμ‹œ) μž…λ ₯이 json μ˜€λΈŒμ νŠΈκ°€ μ•„λ‹™λ‹ˆλ‹€. κ·Έ μ–Έμ–΄λŠ” μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ“±.
  2. "IOError" : IO와 μž„ν¬νŠΈ κ³Όμ •μ—μ„œμ˜ μ—λŸ¬λ“€μž…λ‹ˆλ‹€, 뢄석될 수 μ—†λŠ” URLμ΄λ‚˜ κ³΅κΈ‰λœ μ†ŒμŠ€μ—μ„œμ˜ ν•΄μ‹œ λΆˆμΌμΉ˜μ™€ 같은것듀이 μžˆμŠ΅λ‹ˆλ‹€.
  3. "ParserError" : μ†ŒμŠ€μ½”λ“œλŠ” μ–Έμ–΄ 원칙에 μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  4. "DocstringParsingError" : μ»€λ§¨λ“œ λΈ”λ‘μ—μ„œ NatSpec νƒœκ·ΈλŠ” 뢄석될 수 μ—†μŠ΅λ‹ˆλ‹€.
  5. "SyntaxError" : Syntactical errorλŠ” "continue"κ°€ "for" 반볡 μ™ΈλΆ€μ—μ„œ μ‚¬μš© λ˜λŠ”κ²ƒλ“±μ΄ μžˆμŠ΅λ‹ˆλ‹€.
  6. "DeclarationError" : μœ νš¨ν•˜μ§€ μ•Šκ±°λ‚˜ ν˜Ήμ€ 의결 ν• μˆ˜ μ—†λŠ”(unresolvable), μ‹λ³„μž μ΄λ¦„μΆ©λŒμž…λ‹ˆλ‹€. μ˜ˆμ‹œ "identifier not found" μ‹λ³„μžκ°€ λ°œκ²¬λ˜μ§€ μ•ŠμŒ
  7. "TypeError" : μœ νš¨ν•˜μ§€ μ•Šμ€ νƒ€μž… λ³€κ²½, μœ νš¨ν•˜μ§€ μ•Šμ€ ν• λ‹Ή(assignment) λ“±κ³Ό 같은 type systemλ‚΄μ˜ μ—λŸ¬μž…λ‹ˆλ‹€.
  8. "UnimplementedFeatureError" : κΈ°λŠ₯이 μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 미래 λ²ˆμ „μ—μ„œλŠ” 지원될 κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€.
  9. "internalCompilerError" : μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μ΄‰λ°œλ˜λŠ” λ‚΄λΆ€μ˜ 버그 - 이것은 λ¬Έμ œλ‘œμ„œ λ³΄κ³ λ˜μ–΄μ Έμ•Ό ν•©λ‹ˆλ‹€.
  10. "Exception" : 컴파일러 도쀑에 μ•Œλ €μ§€μ§€ μ•Šμ€ μ‹€νŒ¨ - 이것은 λ¬Έμ œλ‘œμ„œ λ³΄κ³ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  11. "CompilerError" : μœ νš¨ν•˜μ§€ μ•Šμ€ 컴파일러 μŠ€νƒμ˜ μ‚¬μš© - 이것은 λ¬Έμ œλ‘œμ„œ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  12. "FatalError" : 치λͺ…적 였λ₯˜κ°€ λ°”λ₯΄κ²Œ μ²˜λ¦¬λ˜μ§€ μ•ŠμŒ - μ΄λŠ” λ¬Έμ œλ‘œμ„œ κΈ°λ‘λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  13. "Warning" : λ‹¨μˆœ κ²½κ³ , 컴파일러λ₯Ό 쀑단 ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, κ°€λŠ₯ν•˜λ‹€λ©΄ 닀뀄져야 ν•©λ‹ˆλ‹€.