J'essaie de déployer un contrat sur le testnet ROPSTEN à l'aide de la truffe, mais j'obtiens l'erreur suivante:
Deploying 'Migrations'
----------------------
Error: *** Deployment Failed ***
"Migrations" -- invalid sender.
at /home/usr/.npm/lib/node_modules/truffle/build/webpack:/packages/deployer/src/deployment.js:365:1
at process._tickCallback (internal/process/next_tick.js:68:7)
Truffle v5.2.5 (core: 5.2.5)
Node v10.19.0
Lors du déploiement de Ganache localement, cela fonctionne bien. Aussi je suis sûr que ma truffe config.js est correcte, c'est la même chose que tous les tutoriels en ligne, mais comme je suis ici, je suppose que je ne suis pas complètement sûr :). L'adresse indiquée par HD-Wallet est également correcte (vérifiée avec la relève de la console.log dans Truffe-config.js) et il dispose de 5 soldes d'ETH, donc plus que suffisant. J'ai 2 scripts de migration, il donne exactement la même erreur avec chaque script.
truffe-config.js:
require("dotenv").config();
const HDWalletProvider = require("@truffle/hdwallet-provider");
module.exports = {
networks: {
ropsten: {
provider: () => {
var provider = new HDWalletProvider({
mnemonic: process.env.MNEMONIC,
providerOrUrl: `https://ropsten.infura.io/v3/${process.env.INFURA_KEY}`,
derivationPath: "m/44'/60'/0'/0/",
addressIndex: 0,
});
console.log(provider.getAddress());
return provider;
},
network_id: 3,
gas: 5500000,
confirmations: 2,
timeoutBlocks: 200,
skipDryRun: true,
},
development: {
Host: "127.0.0.1",
port: 7545,
network_id: "*",
},
},
compilers: {
solc: {
version: "0.6.0",
optimizer: {
enabled: true,
runs: 200,
},
},
},
};
1_Initial_migration.js:
const Migrations = artifacts.require("Migrations");
module.exports = function (deployer) {
deployer.deploy(Migrations);
};
2_deploy.js:
const Token = artifacts.require("Token");
module.exports = (deployer) => {
deployer.deploy(Token);
};
Token.sol:
//SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract Token is ERC20 {
address minter;
// minterChanged event
event minterChanged(address indexed from, address to);
constructor() public payable ERC20("Decentralized Bank Currency", "DCB") {
minter = msg.sender;
}
function transferMinterRole(address bank) public returns(bool) {
require(msg.sender == minter);
minter = bank;
emit minterChanged(msg.sender, minter);
return true;
}
function mint(address account, uint256 amount) public {
require(msg.sender == minter);
_mint(account, amount);
}
}
Escrow.sol:
//SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0 ;
contract Escrow {
address agent;
mapping(address => uint256) public deposits;
modifier onlyAgent() {
require(msg.sender == agent);
_; // return void
}
constructor() public {
// solidity heeft globale var msg
agent = msg.sender;
}
function deposit(address payee) payable public onlyAgent {
uint256 amount = msg.value;
deposits[payee] = deposits[payee] + amount;
}
function withdras(address payable payee) public onlyAgent {
uint256 payment = deposits[payee];
deposits[payee] = 0;
payee.transfer(payment);
}
}
Consultez ceci: https://github.com/trufflesuite/truff_issues/3935
On dirait que la truffe peut ne pas être correctement conforme à EIP 155. Un PR a été fusionné pour aider, mais je ne pense pas que cette question soit encore résolue à partir de l'extrémité HDWallet.
https://github.com/trufflesuite/truff_issues/391https://github.com/trufflesuite/truff/truff/pull/392
En tant que solution alternative, à l'intérieur truffle-config.js
Utilisez:
const HDWalletProvider = require('truffle-hdwallet-provider');
à la place de
const HDWalletProvider = require('@truffle/hdwallet-provider');
C'est juste une autre façon d'abattre le @truffle/hdwallet-provider
Pendant que votre package.json
Peut toujours avoir:
"dependencies": {
"@truffle/hdwallet-provider": "^1.3.1"
}