diff --git a/contracts/NFTSingleStaking.sol b/contracts/NFTSingleStaking.sol index bb79d8d..5e4c6a6 100644 --- a/contracts/NFTSingleStaking.sol +++ b/contracts/NFTSingleStaking.sol @@ -4,11 +4,10 @@ pragma solidity 0.8.13; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // Basic NFT staking contract // Each account can only stake one NFT at a time -contract NFTSingleStaking is Ownable, IERC721Receiver { +contract NFTSingleStaking is IERC721Receiver { // NFT used for staking IERC721 public nft; @@ -27,7 +26,6 @@ contract NFTSingleStaking is Ownable, IERC721Receiver { constructor(IERC721 _nft) { nft = _nft; - Ownable(msg.sender); } /// Emitted when an account stakes @@ -39,6 +37,11 @@ contract NFTSingleStaking is Ownable, IERC721Receiver { /// Stake NFT with `tokenId` and tranfer to this contract /// Sender must approve transfer before calling this function function stake(uint256 tokenId) external { + _stake(tokenId); + } + + /// Internal staking logic + function _stake(uint256 tokenId) internal { require(!isStaked[msg.sender], "Sender is already staked."); require(nft.ownerOf(tokenId) == msg.sender, "Sender is not owner of token."); @@ -54,6 +57,11 @@ contract NFTSingleStaking is Ownable, IERC721Receiver { /// Unstake NFT and transfer back to sender function unstake() external { + _unstake(); + } + + /// Unstake logic + function _unstake() internal { require(isStaked[msg.sender], "Sender is not staked"); // get token ID diff --git a/test/NFTPair.sol b/test/NFTPair.sol new file mode 100644 index 0000000..6edae58 --- /dev/null +++ b/test/NFTPair.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.13; + +import {Pair, NFTSingleStaking} from "./"; + +// TODO: make contracts abstract +// TODO: add mocks +contract NFTPair is NFTSingleStaking, Pair { + + constructor() { + } +} \ No newline at end of file diff --git a/test/NFTSingleStaking.test.ts b/test/NFTSingleStaking.test.ts index 9280fd1..aee566d 100644 --- a/test/NFTSingleStaking.test.ts +++ b/test/NFTSingleStaking.test.ts @@ -17,10 +17,6 @@ describe('NFTSingleStaking', () => { }) describe('setup', () => { - it('owner is deployer', async () => { - expect(await staking.owner()).to.equal(owner.address) - }) - it('nft address is set correctly', async () => { expect(await staking.nft()).to.equal(nft.address) })