![](/img/trans.png)
[英]Call function of smart contract after deploying smart contract in Solidity
[英]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.