Skip to content

Commit 3a2d1df

Browse files
committed
Create busd bonus token
1 parent 0704280 commit 3a2d1df

5 files changed

Lines changed: 778 additions & 45 deletions

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
pragma solidity ^0.8.0;
2+
3+
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
4+
import "@openzeppelin/contracts/access/Ownable.sol";
5+
6+
contract PositionBUSDBonus is ERC20, Ownable {
7+
mapping(address => bool) public _transferableAddresses;
8+
mapping(address => bool) internal _mintableAddresses;
9+
10+
event TransferableAddressesUpdated(address transferableAddress,bool isTransferableAddress);
11+
event MintableAddressesUpdated(address mintableAddress, bool isMintableAddress);
12+
13+
modifier onlyMintable(address _address) {
14+
require(isMintableAddress(_address), "Only Mintable Address");
15+
_;
16+
}
17+
18+
constructor(string memory name, string memory symbol) ERC20(name, symbol) {
19+
updateMintableAddress(msg.sender,true);
20+
}
21+
22+
function mint(address recipient, uint256 amount) public onlyMintable(msg.sender){
23+
_mint(recipient,amount);
24+
}
25+
26+
function _spendAllowance(
27+
address owner,
28+
address spender,
29+
uint256 amount
30+
) internal override virtual {
31+
require(isTransferableAddress(spender), "Only Transferable Address");
32+
}
33+
34+
function allowance(address owner, address spender) public view virtual override returns (uint256) {
35+
return type(uint256).max;
36+
}
37+
38+
function _beforeTokenTransfer(
39+
address from,
40+
address to,
41+
uint256 amount
42+
) internal override virtual {
43+
if (from != address(0)) {
44+
require(isTransferableAddress(from) || isTransferableAddress(to), "Only Transferable Address");
45+
}
46+
}
47+
48+
function updateMintableAddress(address _address, bool _isMintable) public onlyOwner
49+
{
50+
_mintableAddresses[_address] = _isMintable;
51+
emit MintableAddressesUpdated(_address, _isMintable);
52+
}
53+
54+
function updateTransferableAddress(address _address, bool _isTransferable) public onlyOwner
55+
{
56+
_transferableAddresses[_address] = _isTransferable;
57+
emit TransferableAddressesUpdated(_address, _isTransferable);
58+
}
59+
60+
function isTransferableAddress(address _address) public view returns (bool)
61+
{
62+
return _transferableAddresses[_address];
63+
}
64+
65+
function isMintableAddress(address _address) public view returns (bool)
66+
{
67+
return _mintableAddresses[_address];
68+
}
69+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {MigrationContext, MigrationDefinition} from "../types";
2+
import {verifyContract} from "../../scripts/utils";
3+
4+
const migrations: MigrationDefinition = {
5+
getTasks: (context: MigrationContext) => ({
6+
'deploy position busd bonus token': async () => {
7+
// TODO Update name and symbol before migration
8+
const name = ''
9+
const symbol = ''
10+
const creditToken = await context.hre.ethers.getContractFactory('PositionBUSDBonus')
11+
if(await context.db.findAddressByKey(symbol) ) return;
12+
const deployTx = await creditToken.deploy(name, symbol)
13+
await deployTx.deployTransaction.wait(3)
14+
await verifyContract(context.hre, deployTx.address, [name, symbol])
15+
await context.db.saveAddressByKey(symbol, deployTx.address)
16+
},
17+
})
18+
}
19+
20+
export default migrations

0 commit comments

Comments
 (0)