Я использую MetaMask для подключения к Rinkeby и развертываю контракты через Remix. Когда я вызываю функцию returnenderbalance, она возвращает
115792089237316195423570985008687907853269984665640564039456084007913129639935
а не мой баланс в Вэй. Код ниже:
pragma solidity ^0.4.11;
contract returnbalance{
function returnsenderbalance() constant returns (uint){
return msg.sender.balance;
}
}
Это связано с:
eth/api_backend.go
func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmCfg vm.Config) (*vm.EVM, func() error, error) {
===> state.SetBalance(msg.From(), math.MaxBig256)
vmError := func() error { return nil }
context := core.NewEVMContext(msg, header, b.eth.BlockChain(), nil)
return vm.NewEVM(context, state, b.eth.chainConfig, vmCfg), vmError, nil
}
math.MaxBig256 == 115792089237316195423570985008687907853269984665640564039455084007913129639935
Является константой в Geth( common/math/big.go)
этот код работает нормально, попробуйте это:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract returnbalance{
function returnsenderbalance() view public returns(uint){
return msg.sender.balance;
}
}
о0рагман0о
о0рагман0о
function eventSenderBalance() {SenderBalance(msg.sender, msg.sender.balance); }
регистрирует правильный баланс.Роб Хитченс