簡體   English   中英

在Solidity Smart Contract中找不到庫功能

[英]Library function not found in Solidity Smart Contract

我使用以下結構為以太坊的Solidity語言為DApp創建了一個項目:

... ReinsuranceProject ..... contract ....... Reinsure.sol ..... library ....... Strings.sol

在合同Reinsure.sol中,我導入了Strings.sol,它是一個庫,如下所示: import "../Strings.sol"; 該庫包含一個將字節轉換為字符串的函數。 在我的主要合同Reinsure.sol中,我添加了以下行: using StringsLib for bytes; (之所以使用StringLib,是因為庫本身不是像文件那樣被調用),在另一種方法中,我想返回varBytes.toString();

但是,在編譯項目時出現此錯誤:

TypeError:在以字節為單位的內存中依賴於參數的查找之后,找不到成員“ toString”或不可見\\ n

方法toString的聲明如下:

function toString(bytes32 x) constant internal returns (string)

pragma solidity "0.4.25";編譯器版本為pragma solidity "0.4.25"; (我正在使用Visual Studio Code,它具有Solidity的擴展性)

問題是:如果問題出在導入中,那么采用指定的項目結構導入Strings.sol庫的正確方法是什么? 如果不是,我是否以錯誤的方式命名類,如果是的話,該如何解決? 有沒有一種方法可以使路徑的配置文件更簡單?

非常感謝您的幫助,並在此先感謝您!

您正在混合類型。 bytes是動態數組,而bytes32是靜態數組。 using StringLib for bytes更改為using StringLib for bytes32

例:

pragma solidity ^0.4.25;

library StringsLib {
    function toString(bytes32 self) constant internal returns (string) {
        // Convert bytes32 to string
    }
}

合同:

pragma solidity ^0.4.25;

import "./StringsLib.sol";

contract LibraryClient {
    using StringsLib for bytes32;

    function doSomething(bytes32 x) public constant returns (string) {
        return x.toString();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM