Vererbung, Importe und Remix

Dies ist der LSP3AccountVertrag: https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol

Ich möchte einen Vertrag für Remix erstellen, der davon erbt. Ich habe das versucht:

pragma solidity ^0.6.0;

import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/Accounts/LSP3Account.sol";

contract MyProfile is LSP3Account(msg.sender) {
    
}

Aber das ergibt: not found @openzeppelin/contracts/introspection/ERC165.sol

Also habe ich den gesamten Vertrag kopiert und LSP3Account.solin Remix eingefügt, um zu versuchen, die Importe manuell zu reparieren.

LSP3AccountIch dachte mir, sobald diese Importe behoben wären, würde ich endlich aus dem Vertrag erben können .

Als ich jedoch den ERC165.solImport korrigierte, wurde ein weiterer Importfehler angezeigt ( UniversalReceiverDelegate.sol).

Nachdem ich das behoben hatte, tauchte ein weiterer Importfehler auf ( UniversalReceiver.sol). Das habe ich auch behoben.

Aber meine Importe begannen außer Kontrolle zu geraten. Hier ist der Anfang meiner Akte. Ich habe OLDund verwendet NEW, um die festen Importe zu markieren:

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

// interfaces
//import "../_LSPs/ILSP1_UniversalReceiver.sol"; OLD 3
import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/_LSPs/ILSP1_UniversalReceiver.sol"; // NEW 3
//import "../_LSPs/ILSP1_UniversalReceiverDelegate.sol"; OLD 2
import "https://github.com/lukso-network/standards-implementations/blob/master/contracts/_LSPs/ILSP1_UniversalReceiverDelegate.sol"; // NEW 2

// modules
import "erc725/contracts/ERC725/ERC725Account.sol";
//import "@openzeppelin/contracts/introspection/ERC165.sol"; OLD 1
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol"; // NEW 1

contract LSP3Account is ERC165, ERC725Account, ILSP1 {

Aber raten Sie mal, jetzt bekomme ich den Fehler: not found @openzeppelin/contracts/cryptography/ECDSA.sol

Dieser neue Importfehler stammt nicht einmal aus dem LSP3AccountVertrag. Es stammt aus einem der Verträge, von denen es erbt.

Die einzige Lösung, die ich sehe, wäre, den gesamten Vererbungsbaum zu kopieren und einzufügen und die Importe von unten nach oben zu korrigieren. Aber das scheint lächerlich kompliziert.

Ich weiß auch, dass ich das Projekt lokal klonen, ausführen npm installund alle Abhängigkeiten installieren kann. Aber:

  1. Ich bin auf Probleme gestoßen, weil die Abhängigkeiten unterschiedliche Compiler-Versionen haben.
  2. Die Bereitstellung aus Remix ist viel einfacher als aus lokalen Dateien.

Also ein paar Fragen:

1. Kann ich Importe aus Verträgen stornieren, von denen mein Vertrag erbt?

2. Was noch wichtiger ist, gibt es keine Möglichkeit, diese Vererbungs- und Importprobleme in der Remix-IDE zu vereinfachen?

Antworten (1)

Nein, Sie können vererbte Importe nicht vermeiden, da der Vertrag, von dem Sie erben, dies erfordert.

Sie müssen jedes einzelne Paket importieren, das benötigt wird, damit jeder einzelne Vertrag funktioniert.

@openzeppelin/contracts/cryptography/ECDSA.solDiese Art von Syntax wird verwendet, um lokale Pakete zu importieren, aber da es in remix keine lokalen Pakete gibt, müssen Sie den vollständigen Pfad zu GitHub verwenden, das haben Sie hier bereits getan:

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/docs-v3.x/contracts/introspection/ERC165.sol"; 

Eine andere Möglichkeit zum Importieren besteht darin, jede Abhängigkeit einfach in Ihren Ordner zu kopieren und einzufügen, sodass sie mit Syntax importiert werden kann, './'aber das wird Ihren Arbeitsplatz etwas chaotisch machen, und ehrlich gesagt ist die Verwendung von GitHub-Pfaden eine viel einfachere und sauberere Möglichkeit, dies zu tun.

Für die Aufzeichnung rate ich dringend, Truffle/Hardhat zu verwenden, das könnte etwas schwieriger sein als Remix, aber für ernsthafte Projekte ist es in vielerlei Hinsicht sehr nützlich, insbesondere für Unit-Tests, und auch die Verwaltung von Abhängigkeiten ist einfacher.