das ist mein Vertragscode
pragma solidity ^0.4.4;
contract IamHongKongTokenBack_00{
// 現在我錢包的地址+Eth量
function SeeMyAddAndETHVar() public constant returns (address, uint) {
address _myadd = msg.sender;
return ( _myadd, _myadd.balance);
}
// 查看其他地址的Eth量
function SeeSheEthVar(address _InputAdd) public constant returns (address, uint) {
address _SheAc = _InputAdd;
return (_SheAc, _SheAc.balance);
}
}
die SeeMyAddAndETHVar
Verwendung siehe meine Adresse und ETH-Betrag
und SeeSheEthVar
verwendet die Eingabeadresse und sieht diese Adresse und den ETH-Betrag
Wenn ich die Adresse 0X123 ... verwende, gehe jetzt zu diesem Vertrag. Ich verwende die SeeSheEthVar-Eingabeadresse 0X789 ... Ich kann die korrekte Adresse und den korrekten ETH-Betrag sehen
Wenn Sie jedoch SeeMyAddAndETHVar verwenden, wird die korrekte Adresse und der ETH-Fehlerbetrag angezeigt
so seltsam Wenn ich die Verwendung von 0X789 ändere ... Adresse gehe zu diesem Vertrag, kann ich 0X123 sehen ... korrekte Adresse und korrekter ETH-Betrag, aber 0X789 ... Adresse ist beides Fehler ETH-Betrag
Darf ich fragen wo mein Problem liegt Danke für die Antwort~!!
BEARBEITEN: Funktionierender Anwendungsfall des msg.sender.balance auf einem Anrufwert. Der Benutzer zahlt gaz (und sendet damit ein tx), um Daten im Vertragsspeicher zu speichern, und kann dann den zuletzt gespeicherten Wert für sein Konto frei abrufen. Es gibt für mich sogar mit Metamask das richtige Gleichgewicht zurück, was das Problem beweist, das ich Ihnen zu erklären versuche, das Sie benötigen, um ein TX zu senden, um msg.sender.balance zu verwenden (mit Metamask sicher, vielleicht funktioniert es bei anderen Anbietern):
pragma solidity ^0.4.4;
contract IamHongKongTokenBack_00{
//balance stored on call of saveBalance
mapping(address => uint256) lastBalance;
function saveBalance() public {
lastBalance[msg.sender] = msg.sender.balance;
}
function fetchBalance(address _address) constant public returns (uint256) {
return lastBalance[_address];
}
}
Die Verwendung von msg.sender.balance und der Versuch, es in einer konstanten Funktion zurückzugeben, scheint fehlerhaft zu sein.
Ich selbst habe es mit Remix und Metamask versucht und es funktioniert nicht so, wie es sollte.
Aber wenn Sie in einer kostenpflichtigen Funktion (Aufruf) verwenden und sagen wir, Sie speichern die msg.sender.balance in einem Ereignis oder benötigen sie über eine Summe, funktioniert es, weil ein tx-Objekt geliefert wurde.
Prüfe das:
return msg.sender.balance verhält sich nicht wie erwartet
https://github.com/ethereum/solidity/issues/2325
https://github.com/ethereum/go-ethereum/issues/14989
Beispiel für die Verwendung, die für mich in einer "aufrufbaren" Funktion funktioniert (deren Ausführung gaz kostet, die Speicherung meines Vertrags ändern):
require(msg.sender.balance >= 0.01 ether);
Dies funktioniert für mich, was bedeutet, wenn ich >= 0,01 eth in meinem Konto habe, das die Funktion aufruft, die es ausführt, wenn nicht, wird es zurückgesetzt und nicht ausgeführt. Was bedeutet, dass die "msg.sender.balance" wirklich so funktioniert, wie sie sollte und dort das korrekte Guthaben des Absenders enthält.
Ergebnis Ihres Codes mit Metamask als web3-Lieferant:
0: address: 0xc544[...]
1: uint256: 115792089237316195423570985008687907853269984665640564039457434007913129639935
Mein tatsächlicher Kontostand beträgt 4,424 ETH, also sollte es 4424000000000000000 WEI zurückgeben, nicht diese zufällige Zeichenfolge.
Ehrlich gesagt verstehe ich nicht, was die Frage ist, aber ich habe versucht, sie zu entschlüsseln, und es scheint, als hätten Sie Probleme, das Gleichgewicht zu finden, falls Sie die Funktion aufrufen SeeMyAddAndETHVar
. Jedenfalls habe ich Ihren Vertrag auf Remix ausprobiert und das Verhalten ist korrekt
call to IamHongKongTokenBack_00.SeeMyAddAndETHVar
{
"0": "address: 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",
"1": "uint256: 99999999999997000000"
}
call to IamHongKongTokenBack_00.SeeSheEthVar
{
"0": "address: 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",
"1": "uint256: 99999999999997000000"
}
Ich mag es dir nicht sagen, hehe
btc4cash
Ich mag es dir nicht sagen, hehe
btc4cash
btc4cash
Ich mag es dir nicht sagen, hehe
btc4cash
btc4cash
Ich mag es dir nicht sagen, hehe
btc4cash
Ich mag es dir nicht sagen, hehe
btc4cash
Ich mag es dir nicht sagen, hehe
btc4cash
btc4cash
btc4cash
Ich mag es dir nicht sagen, hehe