mirror of
https://github.com/autistic-symposium/web3-starter-sol.git
synced 2025-08-02 19:56:12 -04:00
Clean up
This commit is contained in:
parent
c2d0866191
commit
db37d209ab
58 changed files with 4663 additions and 1043 deletions
65
advanced_knowledge/saving_gas/gasless_token_transfer.sol
Normal file
65
advanced_knowledge/saving_gas/gasless_token_transfer.sol
Normal file
|
@ -0,0 +1,65 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.18;
|
||||
|
||||
// gaslless erc20 token transfer with meta transaction
|
||||
|
||||
interface IERC20Permit {
|
||||
function totalSupply() external view returns (uint256);
|
||||
|
||||
function balanceOf(address account) external view returns (uint256);
|
||||
|
||||
function transfer(address recipient, uint256 amount) external returns (bool);
|
||||
|
||||
function allowance(address owner, address spender) external view returns (uint256);
|
||||
|
||||
function approve(address spender, uint256 amount) external returns (bool);
|
||||
|
||||
function transferFrom(
|
||||
address sender,
|
||||
address recipient,
|
||||
uint256 amount
|
||||
) external returns (bool);
|
||||
|
||||
function permit(
|
||||
address owner,
|
||||
address spender,
|
||||
uint256 value,
|
||||
uint256 deadline,
|
||||
uint8 v,
|
||||
bytes32 r,
|
||||
bytes32 s
|
||||
) external;
|
||||
|
||||
event Transfer(address indexed from, address indexed to, uint256 value);
|
||||
event Approval(address indexed owner, address indexed spender, uint256 value);
|
||||
}
|
||||
|
||||
contract GaslessTokenTransfer {
|
||||
function send(
|
||||
address token,
|
||||
address sender,
|
||||
address receiver,
|
||||
uint256 amount,
|
||||
uint256 fee,
|
||||
uint256 deadline,
|
||||
// Permit signature
|
||||
uint8 v,
|
||||
bytes32 r,
|
||||
bytes32 s
|
||||
) external {
|
||||
// Permit
|
||||
IERC20Permit(token).permit(
|
||||
sender,
|
||||
address(this),
|
||||
amount + fee,
|
||||
deadline,
|
||||
v,
|
||||
r,
|
||||
s
|
||||
);
|
||||
// Send amount to receiver
|
||||
IERC20Permit(token).transferFrom(sender, receiver, amount);
|
||||
// Take fee - send fee to msg.sender
|
||||
IERC20Permit(token).transferFrom(sender, msg.sender, fee);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue