Ограничение отправителя отозвать больше доступного баланса - PullRequest
0 голосов
/ 04 октября 2019

Я работаю над примером простого банковского смарт-контракта, но у меня возникают проблемы с получением контракта, который ограничивает отправителя в выводе суммы, превышающей остаток. Вот моя функция в контракте:

function withdraw(uint withdrawAmount) public returns (uint) {
            assert(balances[msg.sender] >= withdrawAmount);
            balances[owner] -= withdrawAmount;
            emit LogWithdrawal(msg.sender, withdrawAmount, balances[msg.sender]);
            return balances[msg.sender];
    }

Вот тест .js:

it("should not be able to withdraw more than has been deposited", async() => {
    await instance.enroll({from: alice})
    await instance.deposit({from: alice, value: deposit})
    await catchRevert(instance.withdraw(deposit + 1, {from: alice}))
  })

Я думал, может быть, утверждать (.....), но это не такработать, поэтому любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

Ваш код не соответствует, вы проверяете баланс на msg.sender, но снимаете с owner.

Это должна быть правильная версия:

function withdraw(uint withdrawAmount) public returns (uint) {
    require(balances[msg.sender] >= withdrawAmount);
    balances[msg.sender] -= withdrawAmount;
    emit LogWithdrawal(msg.sender, withdrawAmount, balances[msg.sender]);
    return balances[msg.sender];
}
0 голосов
/ 06 октября 2019

Прежде всего, вы должны использовать require вместо assert в этом случае. При этом ваш код выглядит нормально, поэтому убедитесь, что вы правильно отслеживаете баланс пользователя.

...