[BlockChain] ERC20 Token - openzeppelin 사용

2022. 12. 6. 11:11·개발/BlockChain
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
'개발/BlockChain' 카테고리의 다른 글
  • [BlockChain] NFT 만들기 (goerliETH)
  • [BlockChain] localhost에서 remix 연동
  • [BlockChain] ERC20 Token 만들기
  • [BlockChain] 사과 판매 앱 만들기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    go
    mysql
    명령어
    ERC721
    go언어
    CSS
    30일챌린지
    React
    erc20
    도커
    js
    node
    블록체인
    하이퍼레저
    html
    nodejs
    node.js
    컨테이너
    프로그래머스
    30일 챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[BlockChain] ERC20 Token - openzeppelin 사용
상단으로

티스토리툴바