Vertrag aus einem anderen Vertrag verwenden

Ich habe einen Vertrag bereitgestellt, der Storagemithilfe des Truffle-Konsolencodes für benannt wurdeStorage.sol

pragma solidity ^0.4.8;
contract Storage {

  struct EntityStruct {
    string str_address;
    uint entityData;
    //more fields
  }

  EntityStruct[] public entityStructs;

  function newEntity(string entityAddress, uint entityData) public returns(uint rowNumber) {
    EntityStruct memory newEntity;
    newEntity.str_address = entityAddress;
    newEntity.entityData    = entityData;
    return entityStructs.push(newEntity)-1;
  }

  function getEntityCount() public constant returns(uint entityCount) {
    return entityStructs.length;
  }

  function getEntityByRowNumber(uint rowNumber) public constant returns(string entity, uint data) {
    string a = entityStructs[rowNumber].str_address;
    uint b =  entityStructs[rowNumber].entityData;
    return (a,b);
  }
}

Jetzt möchte ich auf die Funktionen dieses Vertrags von einem anderen Vertrag mit dem Namen zugreifenAccess1

Code fürAccess1.sol

pragma solidity ^0.4.8;
import 'storage.sol';
contract Access1{
address storgeContractAddress = "0xcd53170a761f024a0441eb15e2f995ae94634c06";

 function createEntity(address entityAddress,uint entityData){
        //Storage s = Storage(storgeContractAddress);
        storgeContractAddress.newEntity.call(entityAddress,entityData);
    }

    function getEntityCount()public constant returns(uint entityCount){
        //Storage s = Storage(storgeContractAddress);
        uint count=storgeContractAddress.getEntityCount.call();
        return count;
    }
}

Das Problem, mit dem ich konfrontiert bin, ist beim Kompilieren Access1.solaus der Truffle-Verwendung

Trüffel kompilieren

Ich bekomme die Fehlermeldung

Error: Source "storage.sol" not found: File not supplied initially.
import 'storage.sol';
^-------------------^

Ich kann nicht verstehen, warum dies passiert, ich habe überprüft, ob der Vertragsspeicher erfolgreich bereitgestellt wurde und funktioniert, ich habe online viele Beispiele überprüft, die Verträge auf die gleiche Weise importieren.

Jede Hilfe wird sehr geschätzt, vielen Dank im Voraus

Antworten (2)

Befindet Storage.solsich im Standardvertragsordner für Trüffel? Wenn ja, musst du schreiben import "./Storage.sol". Achten Sie auch auf die korrekte Groß- und Kleinschreibung.

Sie müssen bereitgestellte StorageVertragsfunktionen verbinden.

pragma solidity ^0.4.8;

contract Storage {
    function getEntityCount() public constant returns(uint entityCount);
}

contract Access1{
    address storgeContractAddress = "0xcd53170a761f024a0441eb15e2f995ae94634c06";
    Storage storage;    
    function Access1(){
     storage =  Storage(storgeContractAddress);
    }
    function getEntityCount()public constant returns(uint entityCount){
        uint count=storage.getEntityCount.call();
        return count;
    }
}
Ist es nicht möglich, einen Vertrag in einen anderen zu importieren?? wie ich es im obigen Code getan habe
Ich glaube nicht, dass Sie einen bereitgestellten Vertrag so importieren können.
Ja, es ist möglich, Verträge zu importieren, wie sie von OP benötigt werden, indem import "Storage.sol" verwendet wird (wie jedoch von @Michael O'Rourke betont, ist ein Import mit Berücksichtigung der Groß- und Kleinschreibung erforderlich, da auch der Pfad korrekt sein muss. Beachten Sie dies bei der Verwendung des importierten Vertrags, muss man sich auf eine Instanz des Vertrags beziehen. Siehe ethereum.stackexchange.com/a/20751/20155 , um dies besser zu verstehen.