Openzeppelin库第九期:支付模式Push与Pull

本文探讨了Openzeppelin库中两种支付模式——推送(push)和拉取(pull)。推送模式下,合约主动维护支付过程;而拉取模式中,用户需主动调用合约来完成支付。通过一个简单的竞标合约示例,解释了在竞标过程中如何应用这些模式,确保当有更高价格出现时,正确退还之前的竞价。
摘要由CSDN通过智能技术生成

支付的模式

  • 推送(push):合约主动维护
  • 拉取(pull):用户主动调用
  • 实例:简单竞标说明
  • 只有一个功能:在竞标过程中,当有更高的价格产生时,对出价最高竞标者的信息进行更新,合约把之前那一个的竞价退回去。
pragma solidity ^0.4.18;

// 竞标合约实例
// 1. 推送模式的支付
contract PushPayment{
    // 出价最高的人
    address highestBidder;
    // 竞标价格
    uint highestBid;

    // 有出价更高的人出现,竞标者信息需要更新,如果原有的竞标者在合约的回退函数中植入
    // 恶意代码使得send退款一直失败,就会导致始终无法更新竞标成功者的信息,可能就可以
    // 使得自己以低价竞标成功
    function() payable {
        throw;
    }

    // 竞标函数
    function bid() {
        if(msg.value < highestBid) throw; // 如果出的价格小于当前最高价,抛出
        if(highestBidder != 0) {
            if(!highestBidder.send(highestBid)) {
                throw;
            }
        }
        // 更换出价最高的竞标者
        highestBidder = msg.sender;
        // 更换最高价格
        highestBid = msg.value;
    }
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值