我已经使用以下结构为以太坊的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库的正确方法是什么? 如果不是,我是否以错误的方式命名类,如果是的话,该如何解决? 有没有一种方法可以使路径的配置文件更简单?
非常感谢您的帮助,并在此先感谢您!
答案 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();
}
}