在一个函数中传输两个事务

Transfer two transaction in one function

我想在一个函数中支付两笔交易。 msg.sender 应该先向合约支付费用。剩下的还在msg.value的应该转给卖家。我总是得到一个错误。为了澄清,我自己测试了这两个交易并且它有效并且我已经实现了一个 receive() 函数,合同可以接收资金。这是代码:

function sendMoney() public payable {

address payable seller = payable(address(this));
address payable sellerino = payable(0x910DCE3971F71Ee82785FF86B47CaB938eBB9E68);

sellerino.transfer(10);
seller.transfer(msg.value);
}

这里是错误: https://blockscout.mantis.hexapod.network/tx/0x343817da970dce47c74094f4766f9c7f21ee258ea848e117893afa53c4768dac/internal-transactions

附加代码:

function buyTicketFromAttendee(uint256 _ticketId) 
    external
    payable
    {
        require(eventticket[_ticketId - 1].availableForResell = true,"ticket not for sale");
        uint256 _priceToPay = eventticket[_ticketId - 1].ticketPrice;
        //address owner = ownerOf(_ticketId);
        require((msg.value >= _priceToPay + transferFee),"not enough money");

        address seller = eventticket[_ticketId - 1].seller;
        address owner = eventticket[_ticketId - 1].owner;
        
        payable(owner).transfer(transferFee);
        payable(seller).transfer(msg.value - transferFee);
        _transfer(address(this), msg.sender, _ticketId);
        //payable(seller).transfer(_priceToPay);
        
        eventticket[_ticketId - 1].availableForResell = false;
         
    }

您的代码段试图发送比合约更多的资金 - 这会导致整个交易恢复。

交易调用sendMoney()前的合约has 0 MANTIS

交易沿 0.1 MANTIS (== 100000000000000000 wei) 发送,反映在 msg.value 全局变量中。

第一个transfer()发送10 wei,所以剩余可用余额现在为99999999999999990 wei(10小于0.1 MANTIS)。但是第二个 transfer() 正在尝试发送 100000000000000000(msg.value),这比目前可用的合约多 10 wei。

解决方案:将第二次转账的金额降低已发送的金额。

sellerino.transfer(10);
seller.transfer(msg.value - 10);