From b4305b83f3fed7f71b2535c712c33b15164f9b4a Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Wed, 14 Aug 2024 07:13:14 +0900 Subject: [PATCH 1/8] batcher contract --- .../contracts/BatcherPayment.sol | 33 +++++++++++++++++++ .../evm-contracts/contracts/README.md | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 packages/contracts/evm-contracts/contracts/BatcherPayment.sol diff --git a/packages/contracts/evm-contracts/contracts/BatcherPayment.sol b/packages/contracts/evm-contracts/contracts/BatcherPayment.sol new file mode 100644 index 000000000..b96463c22 --- /dev/null +++ b/packages/contracts/evm-contracts/contracts/BatcherPayment.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/utils/Address.sol"; + +/// @dev A super simple contract to keep track of user payments to batchers. +contract BatcherPayment { + using Address for address payable; + + /// @dev Emitted to keep track of user payments of native tokens to any given batcher + event Payment(address indexed userAddress, address indexed batcherAddress, uint256 value); + + /// @dev Emitted when a batcher withdraws funds accumulated to them + event FundsWithdrawn(address indexed batcherAddress, uint256 amount); + + mapping(address => uint256) public balance; + + /// @dev Emits the `Payment` event, logging the `msg.sender`, `batcherAddress`, and `msg.value`. + function payBatcher(address batcherAddress) public payable { + balance[batcherAddress] += msg.value; + emit Payment(msg.sender, batcherAddress, msg.value); + } + + /// @dev Withdraws the accumulated funds to the batcher. + /// Callable by only batcher + function withdrawFunds() public { + uint256 amount = balance[msg.sender]; + require(amount > 0, "No funds to withdraw"); + balance[msg.sender] = 0; + payable(msg.sender).sendValue(amount); + emit FundsWithdrawn(msg.sender, amount); + } +} diff --git a/packages/contracts/evm-contracts/contracts/README.md b/packages/contracts/evm-contracts/contracts/README.md index f08e9df3a..3f4978336 100644 --- a/packages/contracts/evm-contracts/contracts/README.md +++ b/packages/contracts/evm-contracts/contracts/README.md @@ -17,6 +17,7 @@ State-annotated contracts Facilitating monetization