728x90
1. openzeppelin
오픈제플린은 토큰의 표준 인터페이스를 모아놓은 라이브러리다.
이 라이브러리를 통해 토큰을 편하게 만들수 있다.
npm install openzeppelin-solidity
오픈제플린을 설치하면 node_modules/openzeppelin-solidity/contracts/token 폴더 안에 표준 컨트랙트들이 있다.
2. 초기 설정
트러플 초기설정
npx truffle init
truffle-config.js
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: 7722,
},
},
compilers: {
solc: {
version: "0.8.17",
},
},
};
가나쉬 실행
npx ganache-cli --chainId 7722 --networkId 7722
3. 스마트 컨트랙트
(1) contracts/SeokToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
contract SeokToken is ERC20{
string public _name = "Seok";
string public _symbol = "STK";
uint public _totalSupply = 10000 * (10 ** decimals());
constructor() ERC20(_name,_symbol){
_mint(msg.sender, _totalSupply);
}
}
(2) contracts/EthSwap.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
contract EthSwap{
ERC20 public token;
uint public rate = 100;
constructor(ERC20 _token){
token = _token;
}
function getToken() public view returns(address){
return address(token);
}
function getSwapBalance() public view returns(uint){
return token.balanceOf(msg.sender);
}
function getMsgSender() public view returns(address){
return msg.sender;
}
// 토큰 구매 함수
function buyToken() public payable {
uint256 tokenAmount = msg.value * rate;
require(token.balanceOf(address(this)) >= tokenAmount,"this is error");
token.transfer(msg.sender, tokenAmount);
}
// 토큰 판매 함수
function sellToken(uint256 _amount) public payable{
require(token.balanceOf(msg.sender) >= _amount);
uint256 etherAmount = _amount/rate;
require(address(this).balance >= etherAmount);
token.transferFrom(msg.sender,address(this),_amount);
payable(msg.sender).transfer(etherAmount);
}
}
728x90
'개발 > BlockChain' 카테고리의 다른 글
[BlockChain] NFT 만들기 (goerliETH) (0) | 2022.12.06 |
---|---|
[BlockChain] localhost에서 remix 연동 (0) | 2022.12.06 |
[BlockChain] ERC20 Token 만들기 (0) | 2022.12.06 |
[BlockChain] 사과 판매 앱 만들기 (0) | 2022.12.06 |
[BlockChain] 스마트컨트랙트로 투표 Dapp 만들기 (0) | 2022.12.06 |