在一个函数中传输两个事务
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);
}
附加代码:
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);
我想在一个函数中支付两笔交易。 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);
}
附加代码:
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);