solidity0.8.0的应用案例6:分账合约

本文介绍了如何使用Solidity 0.8.0编写一个分账合约,该合约根据预设比例自动进行资金分配。合约特性包括设置受益人及份额、记录支付信息,并通过事件跟踪操作。合约遵循代币持有模式,受益人需调用函数来提取相应金额。在部署过程中可能会遇到问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分账就是按照一定比例分钱财。在现实中,经常会有“分赃不均”的事情发生;而在区块链的世界里,Code is Law,我们可以事先把每个人应分的比例写在智能合约中,获得收入后,再由智能合约来进行分账。

分账合约,该合约允许将ETH按权重转给一组账户中,进行分账。代码部分由oppenzepplin库的PaymentSplitter合约简化而来。

分账合约

分账合约(PaymentSplit)具有以下几个特点:

  1. 在创建合约时定好分账受益人payees和每人的份额shares
  2. 份额可以是相等,也可以是其他任意比例。
  3. 在该合约收到的所有ETH中,每个受益人将能够提取与其分配的份额成比例的金额。
  4. 分账合约遵循Pull Payment模式,付款不会自动转入账户,而是保存在此合约中。受益人通过调用release()函数触发实际转账。

事件

分账合约中共有3个事件:

  • PayeeAdded:增加受益人事件。
  • PaymentReleased:受益人提款事件。
  • PaymentReceived:分账合约收款事件。
    // 事件
    event PayeeAdded(address account, uint256 shares); // 增加受益人事件
    event PaymentReleased(address to, uint256 amount); // 受益人提款事件
    event PaymentReceived(address from, uint256 amount); // 合约收款事件

 状态变量

分账合约中共有5个状态变量,用来记录受益地址、份额、支付出去的ETH等变量:

  • totalShares:总份额,为shares的和。
  • totalReleased:从分账合约向受益人支付出去的ETH,为released的和。
  • payeesaddress数组,记录受益人地址
  • sharesaddressuint256的映射,记录每个受益人的份额。
  • releasedaddressuint256的映射,记录分账合约支付给每个受益人的金额。
    uint256 public totalShares; // 总份额
    uint256 public totalReleased; // 总支付

    mapping(address => uin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值