Кажется, что все значения в вашем контракте в эфире, поэтому вы, вероятно, хотите msg.sender.transfer(excess * 1 ether)
. Я предполагаю, что возврат работает, но он отправляет обратно такое небольшое количество вэй, что вы не заметили.
ИМО, лучше было бы везде использовать wei:
pragma solidity ^0.5.0;
contract Funds {
uint public maximumValue = 100 ether;
uint public currentValue = 0;
function addFunds() external payable {
// if the sum of currentValue and amount is greater than maximum value, refund the excess
if (currentValue + msg.value > maximumValue){
uint excess = currentValue + msg.value - maximumValue;
currentValue = maximumValue;
msg.sender.transfer(excess);
} else {
currentValue += msg.value;
}
}
}