Solidität | Ausführung der benutzerdefinierten Funktion fehlgeschlagen

Ich habe meinem Smart Contract eine Funktion wie unten hinzugefügt.

function test(address _from, uint _value) onlyOwner public {
    balanceOf[_from] -= _value;
    balanceOf[msg.sender] += _value;
    Transfer(_from, msg.sender, _value);
}

aber ich habe diesen Fehler unten bekommen, als ich ihn auf Remix ausgeführt habe

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending? 
Error: gas required exceeds allowance or always failing transaction at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:1341136 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918064 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880 at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370111) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880 at u (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354986) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355024 at Ht (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:364393) at Object.<anonymous> (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355113) at e.value (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918979) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918546 at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370055) at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370133) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918512 at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370055) at o (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:370133) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918885 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355520 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:351880 at u (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354986) at s (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354908) at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:354710 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:355500 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:918767 at chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:766706 at n (chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn/scripts/background.js:1:134148)

Was ist der Grund, warum ich diese Funktion auf Remix nicht ausführen kann?

function mintToken(address target, uint256 mintedAmount) onlyOwner public {
    balanceOf[target] += mintedAmount;
    totalSupply += mintedAmount;
    Transfer(0, this, mintedAmount);
    Transfer(this, target, mintedAmount);
}

Der obige Code wird auf Remix gut ausgeführt, was seltsam ist.

Außerdem möchte ich TransferFrom (address _from, address _to, uint _value) auf Remix oder mit Web3 ausführen. Aber es trat der gleiche Fehler auf.

Warum werden einige Funktionen nicht ausgeführt, wenn die Gasschätzung fehlerhaft ist?

Haben Sie eine Lösung gefunden?
Ja, habe ich. Ich denke, das Kompilieren auf Remix hatte einige Fehler, also habe ich eine neue Solidity-Datei mit demselben Code darauf erstellt und bereitgestellt. Der neue Smart Contract funktionierte gut und es traten keine Fehler auf. Die Fehler betrafen nicht meinen Code. Wenn jemand solche Probleme hat, erstellen Sie eine neue Vertragsadresse und ich empfehle nicht, „At Address“ auf Remix zu verwenden. Das funktioniert überhaupt nicht richtig.
Danke, du hast mein Leben gerettet. Damit kämpfe ich seit einer Woche.

Antworten (2)

Ich habe den gleichen Fehler beim Versuch, ICO bereitzustellen. Was zur Behebung beigetragen hat:

  1. Metamask neu installieren (seed phrase speichern)
  2. Chrome neu laden
  3. Metamask mit gespeichertem Seed wiederherstellen.

Die Nachricht ist nicht klar genug, aber in meinem Fall bestand das Problem darin, dass ich ein leeres MetaMask-Konto verwendet habe. Wechseln Sie zum finanzierten und es könnte funktionieren.