Xử lý sự cố

Lỗi plugin

Các lỗi bắt đầu với `` GHC Core to PLC plugin ‘’ là lỗi từ `` plutus-tx-plugin ‘’.

Haddock

Plugin thường sẽ bị lỗi khi tạo tài liệu Haddock. Tuy nhiên, trong trường hợp này, bạn có thể chỉ cần yêu cầu nó trì hoãn bất kỳ lỗi nào đối với thời gian chạy (điều này sẽ không bao giờ xảy ra vì bạn đang xây dựng tài liệu).

Một cách dễ dàng để làm điều này là thêm các dòng sau cho package-name thành cabal.project:

package package-name
  haddock-options: "--optghc=-fplugin-opt PlutusTx.Plugin:defer-errors"

Các hàm không phải ``INLINABLE ‘’

Một lỗi phổ biến là:

Error: Reference to a name which is not a local, a builtin, or an external INLINABLE function

Điều này có nghĩa là plugin không có quyền truy cập vào việc triển khai chức năng, mà nó cần để có thể biên dịch chức năng thành Plutus Core. Một số điều bạn có thể làm để khắc phục:

  • Đảm bảo thêm {-# INLINABLE functionname #-} vào hàm của bạn.

  • Nếu có thểm $c``phía trước tên hàm bị lỗi, GHC đã tạo một phiên bản chuyên biệt cho hàm của bạn, điều này ngăn không cho plugin truy cập vào . Bạn thể tắt  với ``{-# OPTIONS_GHC -fno-specialise #-}

  • Các tùy chọn trình biên dịch khác có thể giúp:

    • {-# OPTIONS_GHC -fno-strictness #-}

    • {-# OPTIONS_GHC -fno-ignore-interface-pragmas #-}

    • {-# OPTIONS_GHC -fno-omit-interface-pragmas #-}

    • {-# OPTIONS_GHC -fobject-code #-}

    Một số chi tiết khác có trong the plutus-tx readme.

Sự cố máy chủ ngôn ngữ Haskell

Để được tư vấn thêm về cách sử dụng Máy chủ ngôn ngữ Haskell (HLS), hãy tham khảo CONTRIBUTING guide in the plutus repository.

Sai version

ghcide compiled against GHC 8.10.3 but currently using 8.10.2.20201118

Trình chỉnh sửa của bạn không chọn đúng phiên bản của Máy chủ Ngôn ngữ Haskell (HLS). Plutus cần một phiên bản tùy chỉnh của HLS do Nix cung cấp. Vì vậy, làm cho điều này hoạt động trong trình chỉnh sửa của bạn, hãy đảm bảo thực hiện hai điều sau:

  • Khởi động trình soạn thảo của bạn từ `` nix-shell ‘’ (hoặc sử dụng `` direnv ‘’)

  • Hầu hết các trình soạn thảo được định cấu hình để sử dụng `` haskell-language-server-wrapper ‘’, là một trình bao bọc chọn phiên bản HLS phù hợp.

    Thay đổi điều này thành chỉ `` haskell-language-server ‘’.

Nếu cách này không hiệu quả, hãy chạy `` haskell-language-server ‘’ trong nix-shell và sử dụng đường dẫn tuyệt đối này trong cấu hình trình soạn thảo của bạn.

Mã lỗi

Để giảm kích thước mã, lỗi trên chuỗi chỉ xuất mã. Đây là ý nghĩa của chúng:

  • Ledger errors

    • L0: Input constraint

    • L1: Output constraint

    • L2: Missing datum

    • L3: Wrong validation interval

    • L4: Missing signature

    • L5: Spent value not OK

    • L6: Produced value not OK

    • L7: Public key output not spent

    • L8: Script output not spent

    • L9: Value minted not OK

    • La: MustPayToPubKey

    • Lb: MustPayToOtherScript

    • Lc: MustHashDatum

    • Ld: checkScriptContext failed

    • Le: Can't find any continuing outputs

    • Lf: Can't get any continuing outputs

    • Lg: Can't get validator and datum hashes

    • Lh: Can't get currency symbol of the current validator script

    • Li: DecodingError

  • Prelude errors

    • PT1: TH Generation of Indexed Data Error

    • PT2: Void is not supported

    • PT3: Ratio number can't have a zero denominator

    • PT4: 'round' got an incorrect input

    • PT5: 'check' input is 'False'

    • PT6: PlutusTx.List.!!: negative index

    • PT7: PlutusTx.List.!!: index too large

    • PT8: PlutusTx.List.head: empty list

    • PT9: PlutusTx.List.tail: empty list

    • PT10: PlutusTx.Enum.().succ: bad argument

    • PT11: PlutusTx.Enum.().pred: bad argument

    • PT12: PlutusTx.Enum.().toEnum: bad argument

    • PT13: PlutusTx.Enum.Bool.succ: bad argument

    • PT14: PlutusTx.Enum.Bool.pred: bad argument

    • PT15: PlutusTx.Enum.Bool.toEnum: bad argument

    • PT16: PlutusTx.Enum.Ordering.succ: bad argument

    • PT17: PlutusTx.Enum.Ordering.pred: bad argument

    • PT18: PlutusTx.Enum.Ordering.toEnum: bad argument

  • State machine errors

    • S0: Can't find validation input

    • S1: State transition invalid - checks failed

    • S2: Thread token not found

    • S3: Non-zero value allocated in final state

    • S4: State transition invalid - constraints not satisfied by ScriptContext

    • S5: State transition invalid - constraints not satisfied by ScriptContext

    • S6: State transition invalid - input is not a valid transition at the current state

    • S7: Value minted different from expected

    • S8: Pending transaction does not spend the designated transaction output

  • Currency errors

    • C0: Value minted different from expected

    • C1: Pending transaction does not spend the designated transaction output