在Solidity Smart Contract中找不到库功能

时间:2018-11-03 12:46:20

标签: ethereum solidity smartcontracts

我已经使用以下结构为以太坊的Solidity语言为DApp创建了一个项目:

...再保险项目 .....合同 .......再保险 .....图书馆 ....... 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)

Solidity pragma solidity "0.4.25";的编译器版本(我正在使用Visual Studio Code,它具有Solidity的扩展范围)

问题是:如果问题出在导入中,那么使用指定的项目结构导入Strings.sol库的正确方法是什么? 如果不是,我是否以错误的方式命名类,如果是的话,该如何解决? 有没有一种方法可以使路径的配置文件更简单?

非常感谢您的帮助,并在此先感谢您!

1 个答案:

答案 0 :(得分:0)

您正在混合类型。 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();
    }
}