Déployer le contrat sur testnet en direct à l’aide d’une clé privée + truffe

Chirag Maliwal

Déployer le contrat sur testnet en direct à l’aide d’une clé privée + truffe


Je veux déployer mon contrat sur testnet en direct (rinkeby) en utilisant une clé privée au lieu d’un mnémonique de mon compte et de la truffe. J’ai quelques configurations dans truffle.js mais je reçois une erreur lors de la migration:

 require ( 'dotenv' ). config (); 
 const   Web3   =   require ( "web3" ); 
 const  web3 =   new   Web3 (); 
 const   WalletProvider   =   require ( "truffle-wallet-provider" ); 
 const   Wallet   =   require ( 'ethereumjs-wallet' ); 

 var  rinkebyPrivateKey =   new   Buffer ( process . env [ "RINKEBY_PRIVATE_KEY" ],   "hex" ); 
 var  rinkebyWallet =   Wallet . fromPrivateKey ( rinkebyPrivateKey ); 
 var  rinkebyProvider =   new   WalletProvider ( rinkebyWallet ,   "https://rinkeby.infura.io/dLqHiBy4LivAhq6bHTiS" ); 


 module . exports =   { networks :   { development :   { host :   "localhost" , port :   8545 , network_id :   "*"   // Match any network id 
     }, rinkeby :   { provider :  rinkebyProvider , network_id :   4 
     }, 
   }, solc :   { optimizer :   { enabled :   true , runs :   200 
     } 
   } 
 }; 

Je reçois une erreur de suivi:

 /home/ rails / Desktop / DeveloperCrowdsale / node_modules / web3 / lib / web3 / errors . js : 35 
         return   new   Error ( message ); 
                ^ 
 Error :   Invalid  JSON RPC response :   "" at Object . InvalidResponse   ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / web3 / lib / web3 / errors . js : 35 : 16 ) at XMLHttpRequest . request . onreadystatechange ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / web3 / lib / web3 / httpprovider . js : 115 : 32 ) at XMLHttpRequestEventTarget . dispatchEvent ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / xhr2 / lib / xhr2 . js : 64 : 18 ) at XMLHttpRequest . _setReadyState ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / xhr2 / lib / xhr2 . js : 354 : 12 ) at XMLHttpRequest . _onHttpRequestError ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / xhr2 / lib / xhr2 . js : 544 : 12 ) at ClientRequest .< anonymous >   ( /home/ rails / Desktop / DeveloperCrowdsale / node_modules / xhr2 / lib / xhr2 . js : 414 : 24 ) at emitOne ( events . js : 116 : 13 ) at ClientRequest . emit ( events . js : 211 : 7 ) at TLSSocket . socketErrorListener ( _http_client . js : 387 : 9 ) at emitOne ( events . js : 116 : 13 ) at TLSSocket . emit ( events . js : 211 : 7 ) at emitErrorNT ( internal / streams / destroy . js : 64 : 8 ) at _combinedTickCallback ( internal / process / next_tick . js : 138 : 11 ) at process . _tickCallback ( internal / process / next_tick . js : 180 : 9 ) 

Existe-t-il une autre façon de déployer votre contrat en utilisant la clé privée de votre compte? ou toute mise à jour nécessaire dans mon fichier truffle.js .

Réponses


 Liquidation Mike A.

Vous pouvez jeter un œil au script avec lequel je déploie des contrats à Rinkeby. Habituellement, j’utilise un mnémonique, mais je l’ai modifié pour prendre la clé privée à la place, l’ai testé et cela fonctionne.

Vous aurez besoin d’installer « truffle-privatekey-provider » avec npm pour que cela fonctionne.

 const   Web3   =   require ( 'web3' ); 
 //Factory.json file contains my compiled Factory.sol file 
 const  compiledFactory =   require ( './build/Factory.json' ); 
 const   PrivateKeyProvider   =   require ( "truffle-privatekey-provider" ); 

 const  privateKey =   "acb2f16e4******" ; 

 const  provider =    new   PrivateKeyProvider ( privateKey ,   'https://rinkeby.infura.io/******' ); 

 const  web3 =   new   Web3 ( provider ); 

 const  deploy =   async   ()   =>   { 
     const  accounts =   await  web3 . eth . getAccounts (); console . log ( 'Attempting to deploy from account: ' ,  accounts [ 0 ]); 

     const  result =   await   new  web3 . eth . Contract ( JSON . parse ( compiledFactory . interface )) 
     . deploy ({  data :  compiledFactory . bytecode }) 
     . send ({  gas :   '1000000' ,   from :  accounts [ 0 ]}); 

     //This will display the address to which your contract was deployed console . log ( 'Contract deployed to: ' ,  result . options . address ); 
 }; deploy (); 


 dawg

J’ai une structure un peu plus simple (selon votre goût):

Prérequis:

 npm install truffle - privatekey - provider 

ou

 npm install truffle - hdwallet - provider - privkey 

puis

 const  yargs =   require ( 'yargs' ); 
 var  provider ,  address ; 
 //const HDWalletProvider = require("truffle-hdwallet-provider-privkey"); 
 const  privKeyrinkeby =   "xxx" 
 const   PrivateKeyProvider   =   require ( "truffle-privatekey-provider" ); 

 module . exports =   { networks :   { development :   { host :   "localhost" , port :   8545 , gas :   6712388 , 
       // gasPrice: 2000000000, // 1 gwei network_id :   "*" 
     }, rinkeby :   { 
       //provider: () => new HDWalletProvider(privKeyrinkeby, "https://rinkeby.infura.io/" + process.env.INFURA_API_KEY), provider :   ()   =>   new   PrivateKeyProvider ( privKeyrinkeby ,   "https://rinkeby.infura.io/"   +  process . env . INFURA_API_KEY ), gasPrice :   50000000000 ,   // 50 gwei, network_id :   3 , 
     }, mainnet :   { 
       // gas: 5000000, host :   "localhost" , gasPrice :   1000000000 ,   // 1 gwei port :   8545 , 
       // provider:provider, 
       // from: "0x4b3A4F3F42BA61141A4F7101F77dC141AE15c59A", 
       from :   "0x4b3a4f3f42ba61141a4f7101f77dc141ae15c59a" , network_id :   1 
     } 
   }, mocha :   { reporter :   'eth-gas-reporter' , reporterOptions :   { currency :   'USD' , gasPrice :   1 
     } 
   } 
 }; 

 

#à, #en, +, clé, contrat, d’une, déployer, direct, l’aide, Le, privée, sur, testnet, truffe

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *