Das Bereitstellen von Vertrag für rinkbey bewirkt nichts

Ich habe versucht, meinen Vertrag für Rinkbey bereitzustellen, aber es scheint nichts zu passieren.

Ich habe früher Verträge lokal für Ganache RPC bereitgestellt und verwendet, truffle migratees hat gut funktioniert, und ich konnte die Methode des bereitgestellten Vertrags problemlos aufrufen.

Danach habe ich die folgenden Zeilen in truffle.js hinzugefügt

rinkeby: {
  host: "127.0.0.1", // Connect to geth on the specified
  port: 8545,
  from: "xxxxxxxxxxxxxxxx", // find it from geth console by typing `eth.accounts` use the first one
  network_id: 4,
  gas: 5000000 
}

so wurde es

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*"
    },
    rinkeby: {
      host: "127.0.0.1", // Connect to geth on the specified
      port: 8545,
      from: "xxxxxxxxxxxx", // find it from geth console by typing `eth.accounts` use the first one
      network_id: 4,
      gas: 5000000 // Gas limit
    }
  }
};

Meine migrations/1_initial_migration.jsist wie folgt:

var Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
};

und contracts/Migrations.sollautet wie folgt:

pragma solidity ^0.4.17;

contract Migrations {
  address public owner;
  uint public last_completed_migration;

  modifier restricted() {
    if (msg.sender == owner) _;
  }

  function Migrations() public {
    owner = msg.sender;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}

Danach habe ich die lokale Ausführung angehalten gethund den folgenden Befehl ausgeführt, um das Konto zu entsperren und mich auf die Bereitstellung des Vertrags für rinkbey vorzubereiten

geth --rinkeby --rpc --rpcapi db,eth,net,web3,personal --unlock="xxxxxxxxxxxxxxxx"

dann den folgenden Befehl in einem anderen Terminalfenster ausgeführt

truffle compile; truffle migrate --network rinkeby

und bekam diese Ausgabe

Using network 'rinkeby'.

Network up to date.

Während ich erwartet hatte, hätte es mir die abgeschlossene Migration zu rinkbey und der Vertragsadresse zeigen sollen, aber es heißt immer nur Network is up to date. Sogar ich habe meinen Vertrag ein wenig bearbeitet und dachte, das könnte eine neue Migration auslösen. Aber das half nicht. Irgendeine Idee, was ich hier falsch mache?

UPDATE: Ich habe irgendwo gelesen, ich muss den buildOrdner löschen, also habe ich es getan. Dann rannte truffle compile; truffle migrate --network rinkebyund bekam diesmal folgendes:

Compiling ./contracts/Migrations.sol...
Compiling ./contracts/addition.sol...
Writing artifacts to ./build/contracts

Using network 'rinkeby'.

Network up to date.

Ich sehe immer noch keine bereitgestellte Vertragsadresse?

Haben Sie deployer.deploy(addition)irgendwo eine Migration? Es sieht so aus, als hätten Sie nur den Migrationsvertrag aufgelistet. Sie sollten eine weitere Bereitstellungsdatei namens 2_deploy.js haben (sie kann beliebig heißen, solange sie mit 2_ beginnt). Der Inhalt sollte fast identisch mit 1_initial_migration.js sein, beschreibt aber, wie Sie Ihren Vertrag bereitstellen (Konstruktorargumente, Abhängigkeiten usw.).
@AdamKipnis Ich kann nur eine Datei in meinem Ordner sehen migrations, und das ist 1_initial_migration.js, und ich habe den Inhalt dieser Datei oben in meiner Beschreibung gepostet. Das ist die EINZIGE Datei, die deployer.deploy(addition)Mein anderer Vertragsname hat addition.sol, also sagen Sie, ich sollte auch 2_addition.jsdie Datei unter migrationsdem Ordner sehen? aber ich sehe dort keine solche Datei.

Antworten (1)

Erstellen Sie eine neue Datei mit dem Namen 2_deploy_contracts.js, die nach der anfänglichen Migration automatisch aufgerufen wird

1_initial_migration.js aktualisiert nur den bereits bereitgestellten Migrationsvertrag

var myContract = artifacts.require("MyContract");

module.exports = function(deployer) {
  deployer.deploy(myContract);
};
Danke Nico. Aber können Sie mir erklären, warum ich diese zweite Datei erstellen sollte. Es sollte automatisch von truflle generiert werden, wenn ich es ausführe truffle compile; truffle migrate --network rinkeby? nicht wahr? Ich denke, Sie haben einen Tippfehler..erste Zeile der Migration artifact pathsein sollteartifacts.require("./MyContract");
Truffle wird tatsächlich standardmäßig im Vertragsordner angezeigt. Diese require-Anweisung darf nicht mit der require-Anweisung von node verwechselt werden. Vielleicht keine so klare Namenskonvention seitens Truffle. afaik diese Datei wird nicht automatisch generiert, da Sie hier auch Konstruktorparameter angeben würden und Truffle diese nicht automatisch generieren kann. z.B. deployer.deploy(myContract, param1, param2, ... , options)Zitat aus den Dokumenten: "Von hier aus können Sie neue Migrationen mit zunehmend nummerierten Präfixen erstellen, um andere Verträge bereitzustellen und weitere Bereitstellungsschritte durchzuführen."
Verstanden.. danke @nico. Akzeptiere deine Antwort. Sie sollten den Pfad noch artifacts.require("MyContract");korrigierenartifacts.require("./MyContract");