Überweisen Sie den Betrag an eine beliebige Adresse, die immer die Wiedereintritts-Schwachstellenwarnung anzeigt. Wie vermeide ich diese Warnung?
function completeChallenge(address _challengerAddress,address _challengeAddress,uint _index) internal returns(bool) {
_challengerAddress.transfer(safeMul(challengeList[_challengerAddress][_challengeAddress][_index].challengeChargeAmountWei,2));
return true;
}
Sie sollten den Status aktualisieren, bevor Sie die Übertragungsmethode aufrufen. Denn wenn Sie den Status nicht aktualisieren, kann der Empfänger, wenn er ein Smart Contract ist, Ihre Vertragsmethode zurückrufen, um immer wieder zu übertragen, bis Ihr Vertragssaldo Null wird
Die Warnung kann in Solidity nicht reproduziert werden. Welche Version verwenden Sie? pragma solidity ^0.4.17;
ist das neuste.
Vielleicht möchten Sie versuchen, die transferAmount
separat zuzuweisen. Dadurch wird zumindest der Code von SafeMathsafeMul
aus dem .transfer
Methodenaufruf entfernt.
function completeChallenge(address _challengerAddress,address _challengeAddress,uint _index) internal returns(bool) {
uint transferAmount = safeMul(challengeList[_challengerAddress][_challengeAddress][_index].challengeChargeAmountWei, 2);
_challengerAddress.transfer(transferAmount);
return true;
}
Ich hoffe, das hilft.
ferit