Skip to content

Commit

Permalink
Tranfer ownership
Browse files Browse the repository at this point in the history
  • Loading branch information
Kifen committed Nov 25, 2021
1 parent ffdb32b commit d30ffe0
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 12 deletions.
3 changes: 1 addition & 2 deletions contracts/Pools.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ contract Pools is Ownable {
mapping(address => Investor) public Investors;
bool public newPool = true;

constructor(address _projectToken, address _tradeToken, address _admin) {
constructor(address _projectToken, address _tradeToken) {
projectToken = IERC20(_projectToken);
tradeToken = IERC20(_tradeToken);
newPool = true;
transferOwnership(_admin);
}

modifier TestAllownce(
Expand Down
37 changes: 29 additions & 8 deletions contracts/PoolsFactory.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
pragma solidity ^0.8.0;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import './Token.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import "./Pools.sol";

contract PoolsFactory is Ownable {
ERC20 public tradeToken;
Token public tradeToken;
address[] public poolsAddresses;
address private admin;

Expand All @@ -21,7 +21,7 @@ contract PoolsFactory is Ownable {

mapping(address => Pool) public poolsData;

constructor(ERC20 _tradeToken, address _admin) {
constructor(Token _tradeToken, address _admin) {
tradeToken = _tradeToken;
admin = _admin;
}
Expand All @@ -30,17 +30,17 @@ contract PoolsFactory is Ownable {
string memory _name,
string memory _symbol
) public pure returns (bytes memory) {
bytes memory bytecode = type(ERC20).creationCode;
bytes memory bytecode = type(Token).creationCode;

return abi.encodePacked(bytecode, abi.encode(_name, _symbol));
}

function getPoolsBytecode(
ERC20 _projectToken
Token _projectToken
) public view returns (bytes memory) {
bytes memory bytecode = type(Pools).creationCode;

return abi.encodePacked(bytecode, abi.encode(_projectToken, tradeToken, admin));
return abi.encodePacked(bytecode, abi.encode(_projectToken, tradeToken));
}

function getAddress(bytes memory bytecode)
Expand Down Expand Up @@ -71,17 +71,38 @@ contract PoolsFactory is Ownable {
emit Deployed(addr, SALT);
}

function DeployPool(string memory _poolName, string memory _name, string memory _symbol) external onlyOwner {
function deployPool(string memory _poolName, string memory _name, string memory _symbol) external onlyOwner {
bytes memory projectTokenByteCode = getTokenBytecode(_name, _symbol);
address projectTokenAddress = getAddress(projectTokenByteCode);
deploy(projectTokenByteCode);

bytes memory poolsByteCode = getPoolsBytecode(ERC20(projectTokenAddress));
bytes memory poolsByteCode = getPoolsBytecode(Token(projectTokenAddress));
address poolsAddress = getAddress(poolsByteCode);
deploy(poolsByteCode);

poolsAddresses.push(poolsAddress);
poolsData[poolsAddress] = Pool(projectTokenAddress, _poolName);
emit NewPool(poolsAddress);
}

function createPoolAndTransferOwnerships(address _pool, uint256 _totalTokenAmount,
uint256 _startingTime,
uint256 _goal,
uint256 _cap) external onlyOwner {
address projectToken = poolsData[_pool].projectToken;
require(projectToken != address(0), "PoolsFactory: Invalid pool");

require(Token(projectToken).approve(_pool, _totalTokenAmount), "PoolsFactory: FAILED to approve");

Pools(_pool).CreatePool(_totalTokenAmount, _startingTime, _goal, _cap);


uint256 balance = Token(projectToken).balanceOf(address(this));
// send balance from address(this) to admin
Token(projectToken).transfer(admin, balance);

// transfer ownerships of pool and project token to admin
Pools(_pool).transferOwnership(admin);
Token(projectToken).transferOwnership(admin);
}
}
13 changes: 13 additions & 0 deletions contracts/Token.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

contract Token is Ownable, ERC20 {

constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
_mint(_msgSender(), 10000000000000000000000000);
}
}
4 changes: 2 additions & 2 deletions test/PoolsFactory.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ describe("PoolsFactory", () => {

beforeEach(async () => {
[owner, alice, bob] = await ethers.getSigners();
const MockTBUSD = await ethers.getContractFactory("MockToken");
mockTBUSD = await MockTBUSD.deploy(name, symbol);
const MockTBUSD = await ethers.getContractFactory("Token");
mockTBUSD = await MockTBUSD.deploy(name, symbol, owner.address);
await mockTBUSD.deployed();

const PoolsFactory = await ethers.getContractFactory("PoolsFactory");
Expand Down

0 comments on commit d30ffe0

Please sign in to comment.