From a51382d1dad4003c72de2f4e1ca379716e4e82b3 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi Date: Wed, 19 Apr 2023 20:10:27 +0400 Subject: [PATCH] Added claimAndDelegateArbAirdrop + prettier --- .../arbitrum/connectors/arb-claim/events.sol | 7 ++ .../connectors/arb-claim/interface.sol | 38 +++++++---- .../arbitrum/connectors/arb-claim/main.sol | 66 +++++++++++++------ 3 files changed, 78 insertions(+), 33 deletions(-) diff --git a/contracts/arbitrum/connectors/arb-claim/events.sol b/contracts/arbitrum/connectors/arb-claim/events.sol index 788fad86..8ecdd7b0 100644 --- a/contracts/arbitrum/connectors/arb-claim/events.sol +++ b/contracts/arbitrum/connectors/arb-claim/events.sol @@ -20,4 +20,11 @@ contract Events { uint256 indexed delegatedAmount, uint256 nonce ); + + event LogArbAirdropClaimedAndDelegated( + address indexed account, + address indexed delegatee, + uint256 indexed claimable, + uint256 setId + ); } diff --git a/contracts/arbitrum/connectors/arb-claim/interface.sol b/contracts/arbitrum/connectors/arb-claim/interface.sol index a856d242..3831a6cf 100644 --- a/contracts/arbitrum/connectors/arb-claim/interface.sol +++ b/contracts/arbitrum/connectors/arb-claim/interface.sol @@ -19,21 +19,31 @@ interface IArbTokenContract { function delegate(address delegatee) external; function delegateBySig( - address delegatee, - uint256 nonce, - uint256 expiry, - uint8 v, - bytes32 r, - bytes32 s - ) external; + address delegatee, + uint256 nonce, + uint256 expiry, + uint8 v, + bytes32 r, + bytes32 s + ) external; } interface TokenInterface { - function approve(address, uint256) external; - function transfer(address, uint) external; - function transferFrom(address, address, uint) external; - function deposit() external payable; - function withdraw(uint) external; - function balanceOf(address) external view returns (uint); - function decimals() external view returns (uint); + function approve(address, uint256) external; + + function transfer(address, uint256) external; + + function transferFrom( + address, + address, + uint256 + ) external; + + function deposit() external payable; + + function withdraw(uint256) external; + + function balanceOf(address) external view returns (uint256); + + function decimals() external view returns (uint256); } diff --git a/contracts/arbitrum/connectors/arb-claim/main.sol b/contracts/arbitrum/connectors/arb-claim/main.sol index cda225ff..9ec1b5e4 100644 --- a/contracts/arbitrum/connectors/arb-claim/main.sol +++ b/contracts/arbitrum/connectors/arb-claim/main.sol @@ -7,6 +7,10 @@ import { Events } from "./events.sol"; import { IArbitrumTokenDistributor } from "./interface.sol"; abstract contract ArbitrumAirdrop is Events, Variables { + function claimableArbTokens(address user) public view returns (uint256) { + return ARBITRUM_TOKEN_DISTRIBUTOR.claimableTokens(user); + } + function claimArbAirdrop(uint256 setId) public returns (string memory eventName_, bytes memory eventParam_) @@ -20,12 +24,14 @@ abstract contract ArbitrumAirdrop is Events, Variables { eventParam_ = abi.encode(address(this), claimable, setId); } - function delegateArbTokens(address delegatee) + function delegateArbTokens(address delegatee) public returns (string memory eventName_, bytes memory eventParam_) { - uint256 balance = TokenInterface(address(ARB_TOKEN_CONTRACT)).balanceOf(address(this)); - require(balance > 0, "no-balance-to-delegate"); + uint256 balance = TokenInterface(address(ARB_TOKEN_CONTRACT)).balanceOf( + address(this) + ); + require(balance > 0, "no-balance-to-delegate"); ARB_TOKEN_CONTRACT.delegate(delegatee); @@ -33,25 +39,47 @@ abstract contract ArbitrumAirdrop is Events, Variables { eventParam_ = abi.encode(address(this), delegatee, balance); } - function delegateArbTokensBySig( - address delegatee, - uint256 nonce, - SignedPermits calldata permits - ) - public - returns (string memory eventName_, bytes memory eventParam_) - { - uint256 balance = TokenInterface(address(ARB_TOKEN_CONTRACT)).balanceOf(address(this)); - require(balance > 0, "no-balance-to-delegate"); + function delegateArbTokensBySig( + address delegatee, + uint256 nonce, + SignedPermits calldata permits + ) public returns (string memory eventName_, bytes memory eventParam_) { + uint256 balance = TokenInterface(address(ARB_TOKEN_CONTRACT)).balanceOf( + address(this) + ); + require(balance > 0, "no-balance-to-delegate"); - ARB_TOKEN_CONTRACT.delegateBySig(delegatee, nonce, permits.expiry, permits.v, permits.r, permits.s); + ARB_TOKEN_CONTRACT.delegateBySig( + delegatee, + nonce, + permits.expiry, + permits.v, + permits.r, + permits.s + ); - eventName_ = "LogArbTokensDelegatedBySig(address,address,uint256,uint256)"; - eventParam_ = abi.encode(address(this), delegatee, balance, nonce); - } + eventName_ = "LogArbTokensDelegatedBySig(address,address,uint256,uint256)"; + eventParam_ = abi.encode(address(this), delegatee, balance, nonce); + } - function claimableArbTokens(address user) public view returns (uint256) { - return ARBITRUM_TOKEN_DISTRIBUTOR.claimableTokens(user); + function claimAndDelegateArbAirdrop( + address delegatee, + SignedPermits memory permits, + uint256 setId + ) public returns (string memory eventName_, bytes memory eventParam_) { + uint256 claimable = claimableArbTokens(address(this)); + require(claimable > 0, "0-tokens-claimable"); + ARBITRUM_TOKEN_DISTRIBUTOR.claimAndDelegate( + delegatee, + permits.expiry, + permits.v, + permits.r, + permits.s + ); + setUint(setId, claimable); + + eventName_ = "LogArbAirdropClaimedAndDelegated(address,address,uint256,uint256)"; + eventParam_ = abi.encode(address(this), delegatee, claimable, setId); } }