Was macht dieser Importcode in solidity eigentlich? Wo befinden sich die Dateien?

Wie wird die Datei ausgelöst, wenn der MyCo.sol-Vertrag auf den Owned.sol-Vertrag zugreifen muss? Muss die Owned.sol-Datei der Blockchain hinzugefügt werden, bevor MyCo.sol ausgelöst wird; Wenn ja, muss es vor der Ausführung nur unter dem Vertrag/der Adresse des Eigentümers festgelegt werden?
Verweist der ./or ../-Speicherort auf einen Speicherort in der Kette oder wird er nur verwendet, um die Datei zu lokalisieren, bevor sie mit einem tx festgelegt wird?

MyCo.sol    

import "../lib/Owned.sol"; 

Woher weiß MyCo.sol, wo die importierten Dateien zu finden sind? Sind sie irgendwie in die anfängliche Migration eingebettet worden?
Ich glaube, ich bin nur verwirrt über die Blockchain-Dateistruktur und wie sie auf diese importierten Dateien zugreifen würde. Ist alles in der Kette resident oder eine Mischung aus MyCo.sol, der nativen Go-Ethereum-Sprache, und wbd3.js-Protokollen?

Antworten (1)

Es ist eine Compiler-Direktive, die ihn anweist, die Datei aus dem lokalen Dateisystem zur Kompilierzeit zu laden . Es ist für niemanden relevant, der den kompilierten Vertrag verwendet, außer den Bytecode mit der Quelle zu verifizieren; sie müssen es sehen.

Obwohl es neue De-facto-Standards für solche Dinge gibt, gibt es keine Garantie dafür, dass Ihre Person Owned.solgenau mit der anderer übereinstimmt. Folglich ist der eigentliche Quellcode, den Sie verwenden, Owned.solTeil Ihres Projekts und sollte mit dem Rest Ihres Codes veröffentlicht werden, falls Sie Ihren Quellcode veröffentlichen möchten.

importist ungefähr gleichbedeutend mit dem Einfügen in dieselbe Quelldatei, mit dem offensichtlichen Vorteil, Codeduplizierung zu vermeiden:

contract Owned {
  // do something
}

contract Mine is Owned {
  // do something
}

Ich hoffe es hilft.

Das hat sehr geholfen, danke. Wenn ich keinen Code in meinem Vertrag duplizieren wollte, könnte ich den Importbefehl auf einen Vertragshash anstelle eines Defacto-Standards verweisen? zum Beispiel: Der Import wäre: import "../txid" , oder könnte ich ihn auf einen aufgelösten myname.eth-Namen verweisen und ihn auf einen Vertrag in der Kette verweisen; die wiederum würde den Vertrag aus der Kette aufrufen und in mMyCo.sol importieren? oder ist mein Denken verzerrt?
Sie können nur auf die Quelle verweisen, die Sie haben, nicht auf einen bereitgestellten Vertrag. Aber Solidity hat eine andere Einrichtung namens Bibliotheken, die auf veröffentlichte Verträge verweisen, die Sie verwenden können, um Wiederholungen zu vermeiden.