Ich bin neu in Solidity und hätte gerne ein bisschen Debugging.
Dies ist mein einfaches Beispiel (ich verwende web3 1.0)
Ich habe eine einfache Funktion in meinem Vertrag
function bar(address _address_usr) public {
uint res = 5;
emit foo('test',res);
}
Und ich habe einen Test darüber
.....
it("...", async () => {
let livello = await instance.methods.bar(accounts[0]).call();
instance.events.foo(function (error, event) {
console.log(event);
})
.on('data', function (event) {
console.log("OK");
console.log(event);
})
.on('changed', function (event) {
console.log("OK");
})
.on('error', console.error);
});
....
Ich würde gerne das Ergebnis von res wissen. Ich habe es mit event versucht, aber ich habe diesen Fehler
err Error: The current provider doesn't support subscriptions: HttpProvider
Kann ich ein Ergebnis/eine Var in meiner Konsole wie console.log oder so etwas drucken?
Danke
AKTUALISIEREN
Meine web3-Instanz
Helfer.js
const Web3 = require("web3") // import web3 v1.0 constructor
// use globally injected web3 to find the currentProvider and wrap with web3 v1.0
const getWeb3 = () => {
const myWeb3 = new Web3(web3.currentProvider)
return myWeb3
}
// assumes passed-in web3 is v1.0 and creates a function to receive contract name
const getContractInstance = (web3) => (contractName) => {
const artifact = artifacts.require(contractName) // globally injected artifacts helper
const deployedAddress = artifact.networks[artifact.network_id].address
const instance = new web3.eth.Contract(artifact.abi, deployedAddress)
return instance
}
module.exports = { getWeb3, getContractInstance }
meine test.js
const {getWeb3, getContractInstance} = require("./helpers")
const web3 = getWeb3()
const getInstance = getContractInstance(web3)
Ihr Fehler besagt, dass Sie HttpProvider
für web3 verwenden, und gemäß der web3-Dokumentation hier heißt es:
Objekt – HttpProvider: Der HTTP-Anbieter ist veraltet, da er für Abonnements nicht funktioniert.
und dieser Fehler wird von diesem Code angezeigt :
// throw error, if provider doesnt support subscriptions
if(!this.options.requestManager.provider.on) {
var err2 = new Error('The current provider doesn\'t support subscriptions: '+ this.options.requestManager.provider.constructor.name);
this.callback(err2, null, this);
this.emit('error', err2);
return this;
}
Ich denke, für das Abonnement von Veranstaltungen sollten Sie versuchen, andere Anbieteralternativen zu verwenden.
UPDATE: Um den Wert von Ereignisparametern zu erhalten, können Sie den Code wie folgt ändern:
it("...", async () => {
let livello = await instance.methods.bar(accounts[0]).send();
console.log(livello.events.foo.returnValues);
}
Dadurch werden die Ereignisparameterwerte gedruckt. Weitere Informationen finden Sie unter: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send
Wenn Sie außerdem nur den Variablenwert drucken möchten, sollten Sie lieber die Funktion view/pure ohne Ereignisse verwenden. Weitere Informationen finden Sie unter: https://solidity.readthedocs.io/en/v0.5.0/contracts.html#functions
.call()
Sie es aus Ihrem Funktionsaufruf und Sie erhalten es in den Ereignisparametern.The current provider doesn't support subscriptions: HttpProvider
console.log(livello.logs.foo.args)
GrandFleet
Enrique Alcázar
AffeBenutzer
Enrique Alcázar
Enrique Alcázar