1

I have created library and imported in my contract. I am not able to link the library in deployment file.

solution needed. thanks in adv

pragma solidity ^0.4.2;

library StringUtils {
    /// @dev Does a byte-by-byte lexicographical comparison of two strings.
    /// @return a negative number if `_a` is smaller, zero if they are equal
    /// and a positive numbe if `_b` is smaller.
    function compare(string _a, string _b) returns (int) {
        bytes memory a = bytes(_a);
        bytes memory b = bytes(_b);
        uint minLength = a.length;
        if (b.length < minLength) 
        minLength = b.length;
        //@todo unroll the loop into increments of 32 and do full 32 byte comparisons
        for (uint i = 0; i < minLength; i ++) {
            if (a[i] < b[i])
                return -1;
            else if (a[i] > b[i])
                return 1;
        if (a.length < b.length)
            return -1;
        else if (a.length > b.length)
            return 1;
        else
            return 0;
        }
    }
    /// @dev Compares two strings and returns true iff they are equal.
    function equal(string _a, string _b) returns (bool) {
        return compare(_a, _b) == 0;
    }
    /// @dev Finds the index of the first occurrence of _needle in _haystack
    function indexOf(string _haystack, string _needle) returns (int) {
        bytes memory h = bytes(_haystack);
        bytes memory n = bytes(_needle);
        if (h.length < 1 || n.length < 1 || (n.length > h.length)) 
            return -1;
        else if (h.length > (2**128 - 1)) 
            return -1;                                  
            else {
                uint subindex = 0;
                for (uint i = 0; i < h.length; i ++) {
                    if (h[i] == n[0]) {
                        subindex = 1;
                        while (subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) {
                            subindex++;
                        }   
                        if (subindex == n.length) {
                        return int(i);
                    }
                }
            }
            return -1;
        }   
    }
}

my contract

import "./StringUtils.sol";
contract SaveData is Whitelist {
function verifyHash(address publicAddress, string hashstring) external returns (string) {
        require(StringUtils.equal(data[publicAddress],hashstring));

    }
}

in deployment:-

var WhiteList = artifacts.require("./Whitelist.sol");
var SaveData = artifacts.require("./SaveData.sol");
var StringUtils = artifacts.require("./StringUtils.sol");

module.exports = function(deployer) {
  deployer.deploy(WhiteList);
  deployer.deploy(SaveData);
  deployer.deploy(StringUtils);
};
  • Can you provide some code please? How did you import your library to contract? – Roman Frolov Dec 19 '17 at 10:02
  • @RomanFrolov details added – Sandeep Gupta Dec 19 '17 at 10:13
1

First thing first, you need to deploy your library to the blockchain. After the deployment you will have smart contract address, which you should use later to access your library (how to do this).

You cannot do it when library is stored locally on your computer.

  • i am not getting what you are saying. I am new to solidity. – Sandeep Gupta Dec 19 '17 at 10:19
  • @SandeepGupta 1) select in which blockchain and environment you want to test your code 2) create new account 3) deploy your library smart contract from your account 4) wait while block is mined 5) use your deployed library contract in your other smart contracts – Roman Frolov Dec 19 '17 at 10:22
  • i am doing on testrpc. – Sandeep Gupta Dec 19 '17 at 10:23
  • @SandeepGupta are you using geth? – Roman Frolov Dec 19 '17 at 10:25
  • i have deployed it successfully, can u tell me how can i deploy it with C# – Sandeep Gupta Dec 19 '17 at 10:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.