이더리움으로 자신만의 토큰 만들기 #2

in kr •  2 months ago

번역기 매뉴얼 두번째 입니다~
이제 코드 하나 하나에 대한 내용이 나오네요...... 머리가 살짝 아파옵니다ㅠ
(본문에 있는 코드는 혹시 모르니 이더리움 홈페이지에서 복사 하는걸 추천 드려요)

원제 : Create your own CRYPTO-CURRENCY with Ethereum
출처 : https://ethereum.org/token

UNDERSTANDING THE CODE

1.png

기본부터 시작하겠습니다. 월렛 앱을 열고 계약 탭으로 이동 한 다음 새 계약 배포를 선택합니다. Solidity Contract Source code 텍스트 필드에 아래 코드를 입력하십시오.

...................................................................................................

contract MyToken {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;
}

...................................................................................................

매핑이란 주소를 잔액와 연관시키는 연관 배열을 의미합니다.
주소는 기본 16 진수 Ethereum 형식이며, 잔액은 0에서 115 quattuorvigintillion(10^75) 범위의 정수입니다.
당신이 quattuorvigintillion(10^75)이 얼마인지 모른다면, 당신이 사용하려는 당신의 토큰 보다 많은 vigintillions(10^63)이 많은 것이다.
public 키워드는 블록체인에 있는 모든 사람이이 변수에 액세스 할 수 있음을 의미합니다.
즉, 모든 잔액이 공개되어 있어야합니다 (클라이언트가 표시 할 필요가 있음).

2.png

당장 계약서를 발행하면 제대로 작동하지만 아주 유용하지는 않습니다.
어떤 주소에 대해서도 동전의 잔액을 쿼리 할 수 있는 계약이 될 것입니다.

하지만 동전을 하나도 만들지 않았기 때문에 동전 하나 하나가 0을 반환합니다.
그래서 우리는 시작할 때 몇 개의 토큰을 만들 것입니다.
마지막 닫기 괄호 앞에 있는 이 코드를 mapping.. 행 바로 아래에 추가하십시오.

...................................................................................................

functionMyToken() public{
    balanceOf[msg.sender] = 21000000;
}

...................................................................................................

MyToken 함수는 MyToken 계약과 같은 이름을 가지고 있습니다.
이것은 매우 중요하며, 이름을 변경하면 다른 이름도 변경해야합니다.
이것은 계약이 네트워크에 처음 업로드 될 때 한 번만 실행되는 특수 시작 기능입니다.
이 함수는 계약을 전개 한 사용자 인 msg.sender의 잔액을 2100만 잔고로 설정합니다.
2100만 개를 선택하는 것은 다소 임의적 이었으므로 코드에서 원하는 대로 변경할 수 있지만 더 좋은 방법이 있습니다.
대신 다음과 같이 함수의 매개 변수로 제공하십시오.

...................................................................................................

functionMyToken(uint256 initialSupply) public{
    balanceOf[msg.sender] = initialSupply;
}

...................................................................................................

계약서 옆의 오른쪽 열을 살펴보면 계약서를 작성한 드롭다운 목록이 나타납니다. "MyToken"계약을 선택하면 Constructor parameters라는 섹션이 표시됩니다. 이들은 토큰에 대해 변경 가능한 매개 변수이므로 동일한 코드를 재사용하고 향후 이러한 변수 만 변경할 수 있습니다.

3.png

지금은 토큰의 잔액을 만든 기능적 계약이 있지만이를 이동하는 기능이 없기 때문에 동일한 계정에 머물러 있어야합니다.
이제 우리는 그것을 구현할 것입니다.
마지막 괄호 앞에 다음 코드를 씁니다.

...................................................................................................

/* Send coins */
function transfer(address _to, uint256 _value)public{
    /* Add and subtract new balances */
    balanceOf[msg.sender] -= _value;
    balanceOf[_to] += _value;
}

...................................................................................................

이것은 매우 직관적 인 기능입니다.
받는 사람과 값을 매개 변수로 가지며 누군가 호출 할 때마다 _value를 잔액에서 빼고 _to 잔액에 추가합니다.
바로 거기에 명백한 문제가 있습니다.
그 사람이 소유하고 있는 것보다 더 많이 보내고 싶다면 어떻게 됩니까?
이 특정 계약에서 부채를 처리하고 싶지 않으므로 빠른 확인을 하고 송금 자의 자금이 충분하지 않으면 계약 실행이 중지됩니다.
또한 오버플로가 있는지 확인하여 너무 큰 숫자가 없으면 다시 0이 되지 않도록 합니다.
중간 실행 계약 실행을 중지하려면 되돌릴 수도 있고 던지기도 할 수 있습니다. 전자는 비용은 더 적지 만 지금까지 계약서에서 변경 한 모든 내용이 유지되므로 더 많은 골칫거리가 될 수 있습니다.
반면에 '던지다'는 모든 계약 집행을 취소하고 거래가 할 수 있는 모든 변경 사항을 되돌려 보내고 발송인은 그가 가스로 보낸 모든 이더를 잃게 됩니다.
그러나 월렛에서는 계약서가 유출되는 것을 감지 할 수 있으므로 항상 경고 메시지를 표시하므로 이더가 전혀 사용되지 않도록 합니다.

...................................................................................................

function transfer(address _to, uint256 _value)public{
    /* Check if sender has balance and for overflows */
    require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);

    /* Add and subtract new balances */
    balanceOf[msg.sender] -= _value;
    balanceOf[_to] += _value;
}

...................................................................................................

이제 누락 된 모든 것은 계약에 관한 몇 가지 기본 정보를 가지고 있습니다.
가까운 장래에 이것은 토큰 레지스트리에 의해 처리 될 수 있지만 지금은 계약에 직접 추가 할 것입니다.

...................................................................................................

stringpublic name;
stringpublic symbol;
uint8 public decimals;

...................................................................................................

그리고 이제 우리는 생성자 함수를 업데이트하여 모든 변수가 처음부터 설정되도록 합니다.

...................................................................................................

/* Initializes contract with initial supply tokens to the creator of the contract */
function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits)public{
    balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens
    name = tokenName;                                   // Set the name for display purposes
    symbol = tokenSymbol;                               // Set the symbol for display purposes
    decimals = decimalUnits;                            // Amount of decimals for display purposes
}

...................................................................................................

마지막으로 우리는 이제 이벤트라는 것을 필요합니다.
Ethereum Wallet과 같은 클라이언트가 계약에서 발생하는 활동을 추적 할 수 있도록 도와주는 특별하고 비어있는 함수입니다.
이벤트는 대문자로 시작해야합니다.
계약을 시작할 때 다음 줄을 추가하여 이벤트를 선언하십시오.

...................................................................................................

eventTransfer(address indexed from, address indexed to, uint256 value);

...................................................................................................

그리고 다음 두 줄을 "transfer"함수 안에 추가하면 됩니다.

...................................................................................................

    /* Notify anyone listening that this transfer took place */
    emit Transfer(msg.sender, _to, _value);

...................................................................................................

이제 토큰이 준비되었습니다!

NOTICED THE COMMENTS?
"@notice" 및 "@param" 주석은 무엇입니까?
Natspec(https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format)은 자연어 사양의 새로운 표준으로, 지갑이 사용자에게 계약 내용에 대한 자연어 설명을 보여줄 수 있습니다.
현재 많은 지갑에서 지원되지 않지만 향후 변경 될 예정이므로 준비하는 것이 좋습니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

잘 보고 갑니당~^^

·

감사합니다~~~~ :D