Implementar el contrato en rinkbey no hace nada.

He estado tratando de implementar mi contrato en Rinkbey, pero parece que no pasa nada.

Anteriormente implementé contratos localmente en ganache RPC y truffle migratelo usé funcionó bien y pude llamar al método de contrato implementado sin ningún problema.

Después de eso, agregué las siguientes líneas en truffle.js

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 
}

así se convirtió

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
    }
  }
};

Mi migrations/1_initial_migration.jses el siguiente:

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

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

y contracts/Migrations.soles el siguiente:

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);
  }
}

después de eso, detuve la ejecución local gethy ejecuté el siguiente comando para desbloquear la cuenta y prepararme para implementar el contrato en rinkbey

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

luego ejecutó el siguiente comando en una ventana de terminal diferente

truffle compile; truffle migrate --network rinkeby

y obtuve esta salida

Using network 'rinkeby'.

Network up to date.

Mientras esperaba, debería haberme mostrado la migración completa a rinkbey y la dirección del contrato, pero sigue diciendo Network is up to date. Incluso edité mi contrato pensando un poco, eso puede provocar una nueva migración. Pero eso no ayudó. ¿Alguna idea de qué estoy haciendo mal aquí?

ACTUALIZACIÓN: leí en alguna parte, necesito eliminar la buildcarpeta, así que lo hice. Luego corrió truffle compile; truffle migrate --network rinkebyy obtuvo seguidores esta vez:

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

Using network 'rinkeby'.

Network up to date.

¿Todavía no veo la dirección del contrato implementado?

¿ Tienes deployer.deploy(addition)en una migración en cualquier lugar? Parece que solo tiene el contrato de migración en la lista. Debería tener otro archivo de implementación llamado 2_deploy.js (se puede llamar cualquier cosa siempre que comience con 2_). El contenido debe ser casi el mismo que 1_initial_migration.js, pero describe cómo implementar su contrato (argumentos del constructor, dependencias, etc.).
@AdamKipnis Solo puedo ver un archivo en mi migrationscarpeta y es 1_initial_migration.js y he publicado el contenido de ese archivo arriba en mi descripción. Ese es el ÚNICO archivo que tiene deployer.deploy(addition)Mi otro nombre de contrato, addition.solasí que creo que está diciendo que también debería ver 2_addition.jsel archivo en migrationsla carpeta. pero no veo ningún archivo de ese tipo allí.

Respuestas (1)

cree un nuevo archivo llamado 2_deploy_contracts.js que se llamará automáticamente después de la migración inicial

1_initial_migration.js solo actualizará el contrato de migraciones ya implementado

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

module.exports = function(deployer) {
  deployer.deploy(myContract);
};
Gracias Nico Pero, ¿pueden informarme por qué debo crear este segundo archivo? ¿ Debería haber sido generado automáticamente por truflle cuando ejecuto truffle compile; truffle migrate --network rinkeby? ¿no es así? Creo que tienes un error tipográfico... la primera línea de la migración artifact pathdebería serartifacts.require("./MyContract");
Truffle buscará en la carpeta de contratos de forma predeterminada. Esta instrucción require no debe confundirse con la declaración require del nodo. Tal vez no sea una convención de nomenclatura tan clara por parte de trufa. Afaik, este archivo no se genera automáticamente porque aquí es donde también especificaría los parámetros del constructor y truffle no puede generarlos automáticamente. p.ej. deployer.deploy(myContract, param1, param2, ... , options)Cita de los documentos: "Desde aquí, puede crear nuevas migraciones con prefijos numerados en aumento para implementar otros contratos y realizar más pasos de implementación".
Lo tengo.. gracias @nico. Aceptando tu respuesta. Todavía debe corregir la ruta artifacts.require("MyContract");aartifacts.require("./MyContract");