어떻게 제로에서 영웅으로 가는 ERC20 토큰을 만듭니까?


스마트 계약이란 무엇입니까?
스마트 계약은 매매 쌍방 간에 규칙과 조건이 있는 일반적인 계약과 같다.그러나 다른 점은 스마트 계약이다. 이런 협의 조항은 기계의 실행 가능한 코드로 작성된 다음에 분포식 시스템에서 운행된다.
이태방은 가장 인기 있는 스마트 계약 네트워크 중 하나로 프로그래밍 언어는Solidity이다.당신은 이런 강력한 언어로 스마트 계약을 작성하고 이를 기호화폐로 이태방 블록체인 네트워크에 발표할 수 있습니다.
Solidity

무엇이 기호화폐입니까?
기호화폐는 많은 서로 다른 속성과 행위를 가진 교환 가능한 물품이다.기호화폐의 사용 방식은 다음과 같이 다양하다.
  • 온라인 플랫폼의 평판 포인트
  • 온라인 예술품 하나
  • 게임 속 캐릭터의 기술
  • 복권
  • 투표
  • 회사 주식 등 금융자산
  • 달러
  • 와 같은 법정 화폐
  • 황금 1온스
  • 등등...
  • 이태방의 이 강력한 기능은 표준 기능을 갖추어야 한다. 왜냐하면 이 영패들은 API를 통해 서로 대화하고 싶어하기 때문이다.이것이 바로 ERC-20이 역할을 발휘하는 곳이다.

    ERC-20이란?
    우리가 여기서 발견한 바와 같이 ERC-20은 스마트 계약 프로그래밍 언어로 기호화폐를 작성하는 표준이다.지금의 문제는 이 기준이 무엇입니까?
    이 기준에서 우리는 사전에 확정된 사건과 방법을 실현해야 한다.
    function name() public view returns (string)
    function symbol() public view returns (string)
    function decimals() public view returns (uint8)
    function totalSupply() public view returns (uint256)
    function balanceOf(address _owner) public view returns (uint256 balance)
    function transfer(address _to, uint256 _value) public returns (bool success)
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
    function approve(address _spender, uint256 _value) public returns (bool success)
    function allowance(address _owner, address _spender) public view returns (uint256 remaining)
    
    event Transfer(address indexed _from, address indexed _to, uint256 _value)
    event Approval(address indexed _owner, address indexed _spender, uint256 _value)
    

  • 함수 이름: 항목에 정의된 영패 이름을 되돌려줍니다.

  • 함수 기호: 영패의 기호를 되돌려줍니다.

  • 함수 소수: 이 영패가 몇 개의 소수를 가질 수 있는지 표시하기 위해서 정의합니다.

  • 함수 totlaSupply: 네트워크에 있는 영패의 총 공급량.

  • 기능 balance Of: 지정된 지갑 주소의 잔액을 반환합니다.

  • 기능 이동: 주어진 값을 제공하는 지갑 주소로 이동합니다.

  • 함수transferFrom: 주어진 값을 주어진 발송자 지갑 주소에서 수신자 지갑 주소로 전송합니다.

  • 기능 승인: 이 기능은 총 공급량이 사용자에게 분배할 영패량이 있는지 검사합니다.

  • 기능 여분: 발송자가 수신자에게 충분한 공급이 있는지 검사한다.

  • 이벤트 이동: 영패가 발송자에서 수신자로 이동할 때 이 사건을 발표합니다.

  • 이벤트 승인: 지출자 승인이 수신자에게 주어진 값을 보낼 수 있을 때 이 이벤트를 발표합니다.

  • 지갑
    ETH 네트워크와 협력하여 이를 바탕으로 발전시키려면 지갑 주소가 필요합니다.지갑을 설치하고 여행 중에 사용하는 가장 간단한 방법은 사용MetaMask이다.
    metamask
    메타마스크 지갑을 가지고 있는 것은 매우 간단하다. 몇 분 안에 완성할 수 있다.먼저 MetaMask Explorer 확장을 다운로드한 다음 이 절차를 완료해야 합니다.
    조심하다만약 MetaMask의 이 계좌가 당신의 것이라면, 당신은 반드시 증거를 안전한 곳에 보관해야 합니다. 잊지 마세요!

    테스트 환경(Ropsten 테스트 네트워크)
    영패 개발을 시작하기 위해서는 테스트 환경의 위치가 필요합니다.
    Ropsten
    MetaMask 브라우저 확장에서, "이더리움 Mainnet"이라고 쓰일 밑에 있는 목록을 찾을 수 있습니다.이 버튼을 클릭하여 랩스텐 테스트 네트워크로 변경합니다.

    MetaMask 지갑

    메타 마스크 변경 네트워크
    Ropsten faucet를 사용하면 테스트 목적을 위한 테스트 ETH를 얻을 수 있습니다.MetaMask 지갑의 네트워크를 랩스텐 테스트 네트워크로 변경하고 "0x..."로 시작하는 지갑 주소를 복사해서 상기 사이트 텍스트 필드에 붙여넣고 "테스트에 보내기"를 눌러야 합니다.

    개발 IDE(믹스 IDE)

    An integrated development environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE usually consists of a source code editor, build automation tools, and a debugger.

    Wikipedia


    Remix IDE는 ERC-20 영패를 창설, 디버깅, 컴파일하고 배치하는 데 필요한 모든 도구를 갖추고 있다.

    ERC-20 토큰을 만드는 방법
    Remix IDE로 이동하여 mytoken과 같은 새 solidity 파일을 만듭니다.솔
    다음 코드를 새 Solidity 스크립트에 붙여넣습니다.
    pragma solidity ^0.4.24;
    
    //Safe Math Interface
    
    contract SafeMath {
    
        function safeAdd(uint a, uint b) public pure returns (uint c) {
            c = a + b;
            require(c >= a);
        }
    
        function safeSub(uint a, uint b) public pure returns (uint c) {
            require(b <= a);
            c = a - b;
        }
    
        function safeMul(uint a, uint b) public pure returns (uint c) {
            c = a * b;
            require(a == 0 || c / a == b);
        }
    
        function safeDiv(uint a, uint b) public pure returns (uint c) {
            require(b > 0);
            c = a / b;
        }
    }
    
    
    //ERC Token Standard #20 Interface
    
    contract ERC20Interface {
        function totalSupply() public constant returns (uint);
        function balanceOf(address tokenOwner) public constant returns (uint balance);
        function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
        function transfer(address to, uint tokens) public returns (bool success);
        function approve(address spender, uint tokens) public returns (bool success);
        function transferFrom(address from, address to, uint tokens) public returns (bool success);
    
        event Transfer(address indexed from, address indexed to, uint tokens);
        event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
    }
    
    
    //Contract function to receive approval and execute the function in one call
    
    contract ApproveAndCallFallBack {
        function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
    }
    
    //Actual token contract
    
    contract SampleToken is ERC20Interface, SafeMath {
        string public symbol;
        string public name;
        uint8 public decimals;
        uint public _totalSupply;
    
        mapping(address => uint) balances;
        mapping(address => mapping(address => uint)) allowed;
    
        constructor() public {
            symbol = "ST";
            name = "Sample Token Coin";
            decimals = 2;
            _totalSupply = 100000;
            balances[YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply;
            emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply);
        }
    
        function totalSupply() public constant returns (uint) {
            return _totalSupply - balances[address(0)];
        }
    
        function balanceOf(address tokenOwner) public constant returns (uint balance) {
            return balances[tokenOwner];
        }
    
        function transfer(address to, uint tokens) public returns (bool success) {
            balances[msg.sender] = safeSub(balances[msg.sender], tokens);
            balances[to] = safeAdd(balances[to], tokens);
            emit Transfer(msg.sender, to, tokens);
            return true;
        }
    
        function approve(address spender, uint tokens) public returns (bool success) {
            allowed[msg.sender][spender] = tokens;
            emit Approval(msg.sender, spender, tokens);
            return true;
        }
    
        function transferFrom(address from, address to, uint tokens) public returns (bool success) {
            balances[from] = safeSub(balances[from], tokens);
            allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens);
            balances[to] = safeAdd(balances[to], tokens);
            emit Transfer(from, to, tokens);
            return true;
        }
    
        function allowance(address tokenOwner, address spender) public constant returns (uint remaining) {
            return allowed[tokenOwner][spender];
        }
    
        function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) {
            allowed[msg.sender][spender] = tokens;
            emit Approval(msg.sender, spender, tokens);
            ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data);
            return true;
        }
    
        function () public payable {
            revert();
        }
    }
    
    62행과 63행을 변경하여 토큰의 이름과 기호를 변경할 수 있습니다.
    64행과 65행을 변경하여 토큰의 소수점과 총 공급량을 변경할 수 있습니다.
    만약 당신의 지갑 주소 (Ropsten 수도꼭지에 넣은 지갑 주소와 동일) 로 당신의 METAMASK WALLET 주소를 변경한다면 도움이 될 것입니다.

    Note : The total supply value must have additional trailing zeros as specified by the decimals field. For example, the decimal value in this contract is two, and we need a total supply of 1000 tokens, so we’ll have to set the real supply variable to 100000 (simply because it won’t allow a decimal point).


    이 코드의 각 부분을 설명합니다.
    계약 안전 수학: 이 계약은 네 가지 주요 수학 조작을 안전하게 집행하고 일반적인 조작이 아닌 방법을 사용하여 발생할 수 있는 문제를 피하는 데 사용된다.
    safeAdd: 이것은 두 개의 정수만 더하고 결과를 되돌려 주는 방법입니다.
    safeSub: 이것은 두 개의 양수만 빼는 방법으로 두 번째 양수는 첫 번째 양수보다 작아야 하고 결과를 되돌려야 한다.
    safeMul: 양수만 곱하여 결과를 내는 방법입니다.
    safeDiv: 이것은 두 개의 정수만 나누는 방법이고 두 번째 정수는 0이 아니며 결과가 발생한다.
    계약 ERC20 Interface: 이것은 ERC20 표준 영패의 인터페이스입니다. 우리는 그것을 사용하여 우리의 영패를 실현할 것입니다.
    함수 totalSupply: 이 함수는 토큰의 총 금액을 반환하는 데 사용됩니다.
    함수 balance Of: 이 함수는 주소를 가져와 네트워크에 있는 잔액을 되돌려줍니다.
    기능 수당: 낭비자가 사용할 수 있는 기호화폐의 남은 금액을 검사합니다.
    함수 이동: 필요한 수량의 영패를 지정한 주소로 이동합니다.
    기능 승인: 돈을 쓰는 사람이 사용자 영패를 사용하는 것을 허용할 것이다.
    함수 transferFrom: 이것은 발송 방향에서 수신자에게 영패를 발송합니다.
    function Approve and Call: 토큰 거래를 수행합니다.
    이벤트 전송: 일부 영패가 전송될 때 전파됩니다.
    이벤트 승인: 승인이 제출되면 네트워크에 게시됩니다.
    함수 () 공공 지불: 반환 함수는 계약 주소에 직접 기호화폐를 보내는 것을 방지한다.
    contract Approve와 CallFallback: 한 번의 호출에서 권한을 부여받고 함수를 실행하는 계약 함수입니다.

    ERC-20 토큰의 컴파일 및 배포 방법
    컴파일 아이콘 을 클릭하고 왼쪽 창의 컴파일 버튼을 제출할 수 있습니다.당신의 영패는 지금 배치할 수 있습니다!

    ERC-20 토큰 컴파일
    랩스텐 테스트 네트워크에 토큰을 배치하려면 왼쪽 창의 배치 아이콘을 클릭하고 환경 옵션 "Injected Web3"을 선택합니다.계약 선택기에서 주계약 명칭을 선택해야 한다.현재, "배치"단추를 제출하고, 마스크에서 업무를 확인할 수 있습니다.현재, 너는 그것의 밑부분에서 너의 지폐 계약을 볼 수 있다.

    ERC-20 토큰 배포
    위대하다첫 번째 영패가 테스트 네트워크에 발표될 것입니다.

    마스크에 사용자 정의 태그 추가
    마지막 단계에서는 MetaMask 지갑에 사용자 지정 토큰을 추가하고 잔액을 확인합니다.
    IDE에 배치된 deployed contracts 옵션 카드에서 계약 주소를 복사한 다음 원 마스크에서 '영패 가져오기' 단추를 누르고 계약 주소를 '영패 계약 주소' 필드에 붙여넣습니다.MetaMask 는 네트워크에서 추가 세부 정보를 검색합니다.

    메타 마스크에서 토큰 가져오기

    마스크에 사용자 정의 태그 추가

    결론
    축하합니다!이더리움 네트워크에서 ERC-20 토큰을 성공적으로 만들었습니다.
    만약 당신이 이 새로운 문장이 언제 발표될지 알고 싶다면, 나의 사이트에서 나의 시사 통신을 구독해 주십시오.
    Subscribe to Newsletter

    좋은 웹페이지 즐겨찾기