Баланс аккаунта не уменьшается после отправки эфира

Например, вот мой пример функции в смарт-контракте:

function adoptCreeptomas(uint256 beastQuantity, address referrer
) public payable whenNotPaused {
    msg.sender.transfer(50);
}

И затем я пытаюсь проверить этот контракт:

describe("adopted creeptoma", async function() {
    it('adopted', async function() {
        let instance = await CreeptomaPresale.deployed();

        let pre = convertEther(getBalance(investor));
        await instance.adoptCreeptomas.call(beastQuantity, 0 {from: investor, value: ether(100)});
        let after = convertEther(getBalance(investor));
        console.log("before: " + pre + "--after: " + after);
    });
});

Журнал печати:before: 100--after: 100

Вот мой getBalanceметод:

export function getBalance(address) {
    return web3.eth.getBalance(address)
}

Я не знаю, почему баланс счета не уменьшается. Пожалуйста, помогите мне.

Спасибо

Ответы (1)

Вы говорите, call()когда вы adoptCreeptomas. call()делает его явно доступным только для чтения, без изменения состояния, пробной операцией. Он не подписан и не отправлен в сеть для майнинга, так что при следующем просмотре ничего не изменилось.

Посмотрите здесь для подробного объяснения. В чем разница между транзакцией и звонком?

Надеюсь, поможет.

Спасибо. Есть момент, которого я не понимаю. Я вижу, что мой баланс уменьшился на число, указанное в контракте. например: {from: investor, value: ether(15)}а не мой номер в методе передачи. например: msg.sender.transfer(10);Значит ли это, что весь эфир будет потребляться функцией в контракте? Спасибо.
Я думаю, потому что мой метод всегда будет потреблять весь эфир со входа. Но я не уверен. Если в этом случае, как я могу избежать этого, чтобы я не использовал весь эфир пользователя.
Перво-наперво. Вы должны использовать ganache-cli или свою собственную частную цепочку, чтобы эксперименты ничего не стоили. Эфир пойдет с fromадреса на toадрес, если транзакция прошла успешно.