Ich habe eine Truffle/Web3-App, die diesen Code in app.js (standardmäßig) enthält, der ausgeführt wird, wenn die Seite geladen wird:
$(document).ready(function () {
if (typeof web3 !== 'undefined') {
console.warn('Using web3 detected from external source like Metamask')
window.web3 = new Web3(web3.currentProvider)
} else {
console.warn("No web3 detected. Falling back to http://localhost:8545. You should remove this fallback when you deploy live, as it's inherently insecure. Consider switching to Metamask for development. More info here: http://truffleframework.com/tutorials/truffle-and-metamask")
window.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'))
}
Meine truffle.js-Datei sieht so aus:
require('babel-register')
module.exports = {
networks: {
"ropsten": {
host: 'localhost',
port: 8545,
network_id: 3, // Ropsten
gas: 500000
}
}
}
Ich habe mich auch bei Infura angemeldet, das mir eine "Anbieter-URL" wie https://ropsten.infura.io/xxxxxxxxxxxxxxxxxxxxx gegeben hat
Wie sollte ich dann meine truffle.js und app.js richtig konfigurieren, damit ich Infura verwende? Ich möchte Infura verwenden, um Benutzer anzuzeigen, die keine MetaMask/Parity/Mist-Daten aus der Blockchain verwenden (damit die App weiterhin Funktionen aus meinem Vertrag aufrufen kann), während Infura ignoriert werden sollte, wenn erkannt wird, dass der Benutzer verwendet MetaMask/Parity/Mist.
Hier ist ein Beispiel für die Einrichtung eines Infura-Anbieters mit truffle-hdwallet-provider mit einer benutzerdefinierten Brieftasche:
const HDWalletProvider = require('truffle-hdwallet-provider')
const fs = require('fs')
const mnemonic = process.env.MNEMONIC
module.exports = {
networks: {
development: {
host: 'localhost',
port: 8545,
gas: 4500000,
gasPrice: 25000000000,
network_id: '*'
},
kovan: {
provider: new HDWalletProvider(mnemonic, 'https://kovan.infura.io'),
network_id: '*',
gas: 4500000,
gasPrice: 25000000000
},
rinkeby: {
provider: new HDWalletProvider(mnemonic, 'https://rinkeby.infura.io'),
network_id: '*',
gas: 4500000,
gasPrice: 25000000000
},
mainnet: {
provider: new HDWalletProvider(mnemonic, 'https://mainnet.infura.io'),
network_id: '*',
gas: 4500000,
gasPrice: 25000000000
}
}
}
Stellen Sie dann beim Deployment einfach die Netzwerkoption ein:
truffle migrate --reset --network=rinkeby
So stellen Sie in der Benutzeroberfläche den Web3-HTTP-Anbieter auf infura ein:
if (typeof web3 !== 'undefined') {
window.web3 = new Web3(web3.currentProvider)
} else {
window.web3 = new Web3(new Web3.providers.HttpProvider('https://rinkeby.infura.io:443'))
}
Hier ist ein Tutorial von truffle dazu: https://truffleframework.com/tutorials/using-infura-custom-provider
Ich denke, das Speichern und Handhaben der Mnemonik ist jedoch ziemlich riskant (da sie die volle Kontrolle über die gesamte Brieftasche gibt).
Für mich hat die Verwendung von Infura als HTTPProvider, wie in der obigen Antwort vorgeschlagen, nicht funktioniert, also musste ich auch:
var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = 'xxx xxx xxx... ';
var hd = new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/xxxxyyyzzz");
window.web3 = new Web3(hd);
ZhouW