https://velog.io/@dogfootbirdfoot/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EC%8A%A4%ED%84%B0%EB%94%94-12%EC%A3%BC%EC%B0%A8

 

블록체인 스터디 [12주차]

이번주는 cryptozombies lesson5를 학습했다. lesson5의 주제는 ERC721이다.이더리움 상에서의 토큰이란 기본적으로 몇몇 공통 규약을 따르는 스마트 컨트랙트이다. 즉, 다른 모든 토큰 컨트랙트가 사용하

velog.io

이번주는 cryptozombies lesson5를 학습했다. lesson5의 주제는 ERC721이다.

이더리움 상에서의 토큰이란 기본적으로 몇몇 공통 규약을 따르는 스마트 컨트랙트이다. 즉, 다른 모든 토큰 컨트랙트가 사용하는 표준 함수 집합을 구현하는 것이다. 예를 들면, ERC20 토큰을 따라서 애플리케이션을 만든다면면 이 앱이 다른 어떤 ERC20 토큰과도 상호작용이 가능한 것이다.

ERC 스탠다드의 종류는 9가지이며 ERC20은 표준 토큰이다. 여기서는 화폐처럼 사용하기 적절한 ERC20 대신 ERC721 토큰을 사용했다. 좀비는 화폐처럼 분할할 수 없고 각각의 좀비가 서로 다르기 때문이다. ERC721은 대체 불가능하고 각각의 토큰이 유일하고 분할이 불가하기 때문에 이 방법이 좀비를 거래하기에는 가장 적절하다.

토큰 컨트랙트를 구현하기 위해 인터페이스를 솔리디티 파일로 따로 복사하여 저장하고 import했다. ERC721 토큰의 함수들과 이름이 겹치는 함수나 modifer들은 다른 이름으로 바꾸는 리팩토링을 하고 전송 로직을 사용하여 한 사람이 다른 사람에게 소유권을 넘기는 것을 구현했다.

일단은 하라는대로 따라서 구현하긴 했는데 사실 전송 로직을 완전히 이해하지는 못했다. 토큰을 보내는 사람이 함수를 호출하는 transfer방식과 토큰을 받는 사람이 함수를 호출하는 takeOwnership방식을 학습했는데 아마 다시 보면서 복습을 해야할 것 같다.

학습한 내용 :

https://velog.io

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02 cryptozombies  (0) 2022.10.02
solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
블로그 이미지

wtdsoul

,

https://cryptozombies.io/en/lesson/1/chapter/6

 

#1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies

CryptoZombies is The Most Popular, Interactive Solidity Tutorial That Will Help You Learn Blockchain Programming on Ethereum by Building Your Own Fun Game with Zombies — Master Blockchain Development with Web3, Infura, Metamask & Ethereum Smart Contracts

cryptozombies.io

3장: 상태 변수와 정수

컬렉션을 원할 때 배열 을 사용할 수 있습니다 . Solidity에는 고정 배열과 동적 배열의 두 가지 유형의 배열이 있습니다.

// Array with a fixed length of 2 elements:
uint[2] fixedArray;
// another fixed Array, can contain 5 strings:
string[5] stringArray;
// a dynamic Array - has no fixed size, can keep growing:
uint[] dynamicArray;

구조체 의 배열을 만들 수도 있습니다 . 이전 장의 Person구조체 사용:

Person[] people; // dynamic Array, we can keep adding to it

상태 변수가 블록체인에 영구적으로 저장된다는 것을 기억하십니까? 따라서 이와 같은 구조체의 동적 배열을 만드는 것은 일종의 데이터베이스 같은 계약에 구조화된 데이터를 저장하는 데 유용할 수 있습니다.

공개 배열

배열을 으로 선언할 수 있으며 public, Solidity는 자동으로 이에 대한 getter 메서드를 생성합니다. 구문은 다음과 같습니다.

Person[] public people;

그러면 다른 계약이 이 배열에서 읽을 수 있지만 쓸 수는 없습니다. 따라서 이것은 계약에 공개 데이터를 저장하는 데 유용한 패턴입니다.


pragma solidity >=0.5.0 <0.6.0;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

}

 

 

새 구조체 만들기

Person이전 예제의 구조체를 기억 하십니까?

struct Person {
  uint age;
  string name;
}

Person[] public people;

이제 새로운 Persons를 생성하고 people배열에 추가하는 방법을 배울 것입니다.

// create a New Person:
Person satoshi = Person(172, "Satoshi");

// Add that person to the Array:
people.push(satoshi);

이것들을 함께 결합하고 한 줄의 코드로 수행하여 깔끔하게 유지할 수도 있습니다.

people.push(Person(16, "Vitalik"));

배열의 끝에array.push() 무언가를 추가 하므로 요소는 추가한 순서대로 배열됩니다. 다음 예를 참조하십시오.

uint[] numbers;
numbers.push(5);
numbers.push(10);
numbers.push(15);
// numbers is now equal to [5, 10, 15]

pragma solidity >=0.5.0 <0.6.0;

contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function createZombie (string memory _name, uint _dna) public {
        zombies.push(Zombie(_name, _dna));
    }

}

'스터디' 카테고리의 다른 글

solidity 2022/10/02 CryptoZombies - 3  (0) 2022.10.02
solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
블로그 이미지

wtdsoul

,

solidity 2022/10/02

스터디 2022. 10. 2. 14:55

https://velog.io/@dogfootbirdfoot/Cryptozombies-lesson4

 

Cryptozombies로 Solidity 공부하기 4

크립토좀비로 솔리디티 공부하기 링크지금까지 꽤 많은 함수 제어자(function modifier)르 다뤘다. 한번 빠르게 복습해보자.우린 함수가 언제, 어디서 호출될 수 있는지 제어하는 접근 제어자(visibilit

velog.io

1. Payable

지금까지 꽤 많은 함수 제어자(function modifier)를 다뤘다. 한번 빠르게 복습해보자.

  1. 우린 함수가 언제, 어디서 호출될 수 있는지 제어하는 접근 제어자(visibility modifier)를 알게 되었다 :
    private은 컨트랙트 내부의 다른 함수들에서만 호출될 수 있음을 의미한다. internal은 private과 비슷하지만, 해당 컨트랙트를 상속하는 컨트랙트에서도 호출될 수 있다. external은 오직 컨트랙트 외부에서만 호출될 수 있다. 마지막으로 public은 내외부 모두에서, 어디서든 호출될 수 있다.
  2. 상태 제어자(state modifier)는 블록체인과 상호작용하는 방법에 대해 알려준다. view는 해당 함수를 실행해도 어떤 데이터도 저장/변경되지 않음을 알려준다. pure는 해당 함수가 어떤 데이터들도 블록체인에 저장하지 않을 뿐만 아니라, 블록체인으로부터 어떤 데이터도 읽지 않음을 알려준다. 이들 모두 컨트랙트 외부에서 불렸을 때 가스를 전혀 소모하지 않는다. (하지만 다른 함수에 의해 내부적으로 호출됐을 경우에는 가스를 소모한다.)
  3. 사용자 정의 제어자에 대해서도 배웠다. 예를 들면 onlyOwner와 aboveLevel같은 것이다. 이런 제어자를 사용해서 함수에 이 제어자들이 어떻게 영향을 줄지를 결정하는 논리를 구성할 수 있다.

이런 제어자들은 함수 하나에 다음처럼 함께 사용할 수 있다 :

function test() external view onlyOwner anotherModifier { /* ... */}

이번 챕터에서 함수 제어자를 하나 더 배울 것이다.

payable 제어자

payable함수는 솔리디티와 이더리움을 아주 멋지게 만드는 것 중 하나이다. 이는 이더를 받을 수 있는 특별한 함수 유형이다.

예를 들자면, 일반적인 웹 서버에서 API함수를 실행할 때 함수 호출을 통해서 US달러나 비트코인을 보낼 수 없다.

하지만 이더리움에서는 돈(이더), 데이터(transaction payload), 그리고 컨트랙트 코드 자체가 모두 이더리움 위에 존재하기 때문에 함수를 실행하는 동시에 컨트랙트에 돈을 지불하는 것이 가능하다.

이를 통해 함수를 실행하기 위해 컨트랙트에 일정 금액을 지불하게 하는 것과 같은 구성을 만들어 낼 수 있다.

예시 :

contract OnlineStore {
    function buySomething() external payable {
        // 함수 실행에 0.001이더가 보내졌는지 확인 :
        require(msg.value == 0.001 ether);
        // 보내졌다면, 함수를 호출한 자에게 디지털 아이템을 전달하기 위한 내용 구성 :
        transferThing(msg.sender);
    }
}

여기서, msg.value는 컨트랙트로 이더가 얼마나 보내졌느지 확인하는 방법이고, ether는 기본적으로 포함된 단위이다.

여기서 일어난는 일은 누군가 web3.js(DApp의 자바스크립트 프론트앤드)에서 다음과 같이 함수를 실행할 때 발생한다 :

// `OnlineStore`는 나의 이더리움 상의 컨트랙트를 가리킨다고 가정한다 :
OnlineStore.buySomething({from: web3.eth.defaultAccount, value: web3.utils.toWie(0.001)})

value필드를 주목해보자. 자바스크립트 함수 호출에서 이 필드를 통해 ether를 얼마나 보낼지 결정한다. (여기서는 0.001) 트랜잭션을 봉투로 생각하고 함수 호출에 전달하는 매개 변수를 내가 써넣은 편지의 내용이라고 생각한다면, value는 봉투 안에 현금을 넣는 것과 같다. 편지와 돈 모두 수령인에게 전달된다.

참고 : 만약 함수가 payable로 표시되지 않았는데 위에서 본 것처럼 이더를 보내려 한다면, 함수에서 나의 트랜잭션을 거부할 것이다.

2. 출금

컨트랙트로 이더를 보내면, 해당 컨트랙트의 이더리움 계좌에 이더가 저장되고 거기에 갇히게 된다. 컨트랙트로부터 이더를 인출하는 함수를 만들지 않는다면 말이다.

다음과 같이 컨트랙트에서 이더를 인출하는 함수를 작성할 수 있다 :

contract GetPaid is Ownable {
    function withdraw() external onlyOwner {
        owner.transfer(this.balance);
    }
}

우리가 Ownable컨트랙트를 import했다고 가정하고 owner와 onlyOwner를 사용하고 있다는 것을 참고하자.

transfer함수를 사용하면 이더를 특정 주소로 전달할 수 있다. 그리고 this.balance는 컨트랙트에 저장돼있는 전체 잔액을 반환한다. 그러니 100명의 사용자가 우리의 컨트랙트에 1이더를 지불했다면, this.balance는 100이더가 될 것이다.

transfer함수를 쓰면 특정한 이더리움 주소에 돈을 보낼 수 있다. 예를 들어, 만약 누군가 한 아이템에 대해 초과 지불했다면, 이더를 msg.sender로 되돌려주는 함수를 만들 수도 있다 :

uint itemFee = 0.001 ether;
mas.sender.transfer(msg.value - itemFee);

혹은 구매자와 판매자가 존재하는 컨트랙트에서, 판매자의 주소를 storage에 저장하고, 누군가 판매자의 아이템을 구매하면 구매자로부터 받은 요금을 그에게 전달할 수도 있다 : seller.transfer(msg.value).

이런 것들이 이더리움 프로그래밍을 아주 멋지게 만들어주는 예시들이다. 이것처럼 누구에게도 제어되지 않는 분산 장터들을 만들 수도 있다.

3. 난수

keccak256을 통한 난수 생성

솔리디티에서 난수를 만들기에 가장 좋은 방법은 keccak256 해시 함수를 쓰는 것이다.

다음과 같은 방식으로 난수를 만들어낼 수 있다 :

// Generate a random number between 1 and 100 :
uint randNonce = 0;
utin random = uint(keccak256(now, msg.sender, randNonce)) % 100;
randNonce++;
uint random2 = uint(keccack256(now, msg.sender, randNonce)) % 100;

이 예시는 now의 타임스탬프 값, msg.sender, 증가하는 nonce (딱 한 번만 사용되는 숫자, 즉 똑같은 입력으로 두 번 이상 동일한 해시 함수를 실행할 수 없게 함)를 받고 있다.

그리고서 keccak을 사용하여 이 입력들을 임의의 해시 값으로 변환하고, 해시 값을 uint로 바꾼 후, % 100을 써서 마지막 2자리 숫자만 받도록 했다. 이를 통해 0과 99 사이의 완전한 난수를 얻을 수 있다.

이 메소드는 정직하지 않은 노드의 공격에 취약하다

이더리움에서는 컨트랙트의 함수를 실행하면 트랜잭션(transaction)으로서 네트워크의 노드 하나 혹은 여러 노드에 실행을 알리게 된다. 그 후 네트워크의 노드들은 여러 개의 트랜잭션을 모으고, "작업 증명"으로 알려진 계산이 매우 복잡한 수학적 문제를 먼저 풀기 위한 시도를 하게 된다. 그리고서 해당 트랜잭션 그룹을 그들의 작업 증명(PoW)과 함게 블록으로 네트워크에 배포하게 된다.

한 노드가 어떤 PoW를 풀면, 다른 노드들은 그 PoW를 풀려는 시도를 멈추고 해당 노드가 보낸 트랜잭션 목록이 유효한 것인지 검증한다. 유효하다면 해당 블록을 받아들이고 다음 블록을 풀기 시작한다.

이것이 우리의 난수 함수를 취약하게 만든다.

예를 들어 동전 던지기 컨트랙트를 사용한다고 해보자. 앞면이 나오면 돈이 두 배가 되고, 뒷면이 나오면 모두 다 잃는다. 앞뒷면을 결정할 때 위에서 본 난수 함수를 사용한다고 가정해보자. (random >= 50은 앞면, random < 50은 뒷면)

내가 만약 노드를 실행하고 있다면, 나는 오직 나의 노드에만 트랜잭션을 알리고 이것을 공유하지 않을 수 있다. 그 후 내가 이기는지 확인하기 위해 동전 던지기 함수를 실행할 수 있다. 그리고 만약 내가 진다면, 내가 풀고 있는 다음 블록에 해당 트랜잭션을 포함하지 않는 것을 선택한다. 나는 이것을 내가 결국 동전 던지기에서 이기고 다음 블록을 풀 때까지 무한대로 반복할 수 있고, 이득을 볼 수 있다.

그럼 이더리움에서는 어떻게 난수를 안전하게 만들어낼 수 있을까?

블록체인의 전체 내용은 모든 참여자에게 공개되므로, 이건 풀기 어려운 문제이고 그 해답은 이 튜토리얼을 벗어나는 내용이다. 하나의 방법은 이더리움 블록체인 외부의 난수 함수에 접근할 수 있도록 오라클을 사용하는 것이다.

물론, 네트워크 상의 수만 개의 이더리움 노드들이 다음 블록을 풀기 위해 경쟁하고 있으니, 내가 다음 블록을 풀 확률은 매우 낮을 것이다. 위에서 말한 부당한 방법을 쓰는 것은 많은 시간과 연산 자원을 필요로 할 것이다. 하지만 그만큼 보상이 충분히 크다면, 공격할 만한 가치가 있을 것이다.

그러니 이런 난수 생성은 이더리움 상에서 안전하지는 않지만, 실제로는 난수 함수가 즉시 큰 돈이 되지 않는 한, 게임의 사용자들은 게임을 공격할 만한 충분한 자원을 들이지 않을 것이다.

이 튜토리얼에서는 시연 목적으로 간단한 게임을 만들고 있고 바로 돈이 되는 게 없기 때문에, 우린 구현하기 간단한 난수 생성기를 사용하는 것으로 타협할 것이다. 이게 완전히 안전하지는 않다는 걸 알긴 하지만 말이다.

향후 레슨에서는 , oracle(이더리움 외부에서 데이터를 받아오는 안전한 방법 중 하나)을 사용해서 블록체인 밖에서 안전한 난수를 만드는 방법을 다룰 수도 있다.

4. 공통 로직 구조 개선하기(Refactoring)

보안에 문제가 되지 않기 위해서 누구든지 attack함수를 실행하는 사용자는 공격에 사용하는 좀비를 실제로 소유하고 있다는 것을 확실하게 해야할 것이다.

해결하는 방법은 다음과 같다 :

require(msg.sender == zombieToOwner[_zombieId]);

이렇게 동일한 내용을 여러번 사용하고 있으니, 코드를 정리하고 반복을 피할 수 있도록 이 내용을 이것만의 modifier롤 옮기는 것이 좋다.

'스터디' 카테고리의 다른 글

solidity 2022/10/02 CryptoZombies - 3  (0) 2022.10.02
solidity 2022/10/02 cryptozombies  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
블로그 이미지

wtdsoul

,

 

간단히 설명하면,

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

node_modules 폴더에 있는 위 경로의 ERC20.sol 파일을 불러오겠다.

contract MyToken is ERC20

불러온 ERC20.sol 파일에 현재의 TEST 코드를 덮어쓰겠다.

  constructor() public ERC20("My token","MT"){
    _mint(msg.sender, INITIAL_SUPPLY);
  }

consturctor는 스마트컨트랙트가 생성될때 1번만 호출이 됩니다.

그리고 위 코드에서는 ERC20 컨트랙트에 정의된 _mint() 함수를 사용했습니다.

_mint() 함수에 대한 사용법은 아래와 같습니다.

 

 

객체지향언어(C++,JAVA) 등에 대한 배경지식이 있는 분이라면 생성자에 대한 이해가 있을텐데요..(향후에 설명이 가능하면 이부분을 설명하겠습니다.)

아무튼, 겍체지향언어에는 생성자라는 개념이 있는데, 그 생성자의 개념이 솔리디티에도 동일하게 있습니다.(솔리디티도 객체지향언어와 유사하므로..) 그런데 차이가 있습니다. 그 차이를 간략하게 설명합니다. 일단 이런 개념이 있다정도로 알고 넘어가시면 될것 같네요.

 

 1) 솔리디티에서 생성자는 선택사항이며, 명시적으로 선언하지 않는 경우 컴파일러가 기본 생성자를 넣어줌.

 2) 생성자는 계약이 배포될 때만 한 번 실행됨. (이 부분이 일반적인 객체지향프로그래밍 언어랑 차이점)

  - 일반적으로 새로운 객체 인스턴스가 생성될때마다 생성자가 실행됨.

  - 솔리디티에서는 EVM에 배포되는 시점에만 실행됨.

  - 즉, 다른 프로그래밍 언어에서는 여러개의 생성자를 둘 수있지만, 솔리디티에서는 한 계약에 하나의 생성자만 있어야 함.

 3) 생성자는 파라미터를 취할 수 있으며, 계약을 배포할때 인자를 넣어야 함.

 4) 생성자는 계약과 같은 이름을 가짐.

 5) 생성자의 가시성은 Public 또는 Internal이 될 수 있음.

 6) 생성자는 external 이나 Private는 될 수 없음.

 7) 생성자는 데이터를 명시적으로 반환하지 않음.

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02 cryptozombies  (0) 2022.10.02
solidity 2022/10/02  (0) 2022.10.02
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
이더 GAS 개념  (0) 2022.05.13
블로그 이미지

wtdsoul

,

solidity 2022.09.04

스터디 2022. 9. 4. 13:30

 

 

ganache-cli 명령을 통해서 이더리움 노드를 시작할 수 있습니다.

아래와 같이 10개의 계정이 생성이 되며, 각 계정은 100이더의 잔고를 보유하고 있습니다. 

물론 이건 내 PC에만 존재하는 이더리움이므로 실제가치는 없습니다. 내 PC에서 이 이더리움 계정과 잔고를 가지고 스마트계약이나 다양한 것들을 실험해볼 수 있습니다.

 

아래와 같이 ganache-cli --host 0.0.0.0 을 실행합니다.

 

 

 

이후에 진행될 테스트에서는 첫번째 지갑주소 및 PrivateKey를 사용합니다.

Ganache가 설치된 사용자마다 이 지갑주소와 PirvateKey는 다릅니다.

 

5. MyEtherWallet 연결하기

마지막으로 블록체인과 통신을 위해서 MyEtherWallet을 연결하여 사용합니다.

스마트컨트랙트와 통신하는 기능이 있기때문에 유용하게 사용할 수 있습니다.

 

www.myetherwallet.com/

 

MyEtherWallet.com: Your Key to Ethereum

Free, open-source, client-side Ethereum wallet. Enabling you to interact with the blockchain easily & securely.

www.myetherwallet.com

 

npm init

npm init -y

 

 openzeppelin라이브러리는 기본적이고 많이 사용되는 smartcontract코드를 모아놓은 라이브러리입니다.

 이미 잘 짜여진 코드가 있는데 힘겹게 다시 코딩할 필요는 없습니다. 항상 최신의 문제 없는 라이브러리를 잘 찾아서 사용하는 방법을 아는게 중요합니다.

 

간략하게 설명을 하면,

 - contracts : 실제 우리가 solidity언어로 스마트컨트랙트를 작성하는 공간입니다.

 - mgrations : contracts 폴더에서 작업한 코드를 블록체인에 deploy하기 위한 코드

 - node_modules : 스마트컨트랙트 개발에 필요한 라이브러리

 - test : 테스트를 위한 폴더

 - truffle-config.js 통신을 위한 설정부분.

 

통신을 위해서 truffle-config.js 부분의 소스를 아래와 같이 수정해줍니다.

     development: {
      host: "127.0.0.1",     // Localhost (default: none)
      port: 8545,            // Standard Ethereum port (default: none)
      network_id: "*",       // Any network (default: none)
     },

 

 

그리고 아래에 컴파일 버전도 아래와 같이 수정해줍니다.

 

 

 

pragma solidity ^0.5.2; // solidity 0.5.2 버전을 사용

contract TEST {  // contract 이름을 TEST로 지정
  string public constant name = "TEST token"; // 토큰의 이름은 TEST token
  string public constant symbol = "TEST"; // TEST라는 이름을 사용
  uint public constant decimals = 18; // 소수점 18자리까지 사용하겠음
  uint public constant INITIAL_SUPPLY = 1000 * 10 ** decimals; // 초기 발행량은 1000.000000000000000000 (소수점 18자리까지사용)
  string constant test = "You can not see this"; // public 표시가 없는 경우 해당 문구 볼 수 없음.
}

- 변수 선언시 public를 하지 않으면 외부에서 해당 변수를 찾을 수 없음.

- constant : 변하지 않는 변수 선언.

- public : 누구나 확인 할 수 있는 변수 선언.

- string : 문자열

- uint : unsigned integer (부호(+,-) 없는 정수- 양수 범위를 2배로 늘리게 됨, 즉 이진수와 같은 십진수가 됨)

 

그리고 아톰에디터를 보면, build폴더에 TETS.json 파일이 생성된걸 확인할 수 있습니다.

이 코드파일에서 "abi": 라고 되어 있는 부분이 있습니다.

ABI는 애플리케이션 바이너리 인터페이스(Application Binary Interface)라고 부릅니다.

모든 외부, 공개 함수의 선언 및 파라미터, 반환유형으로 구성된 인터페이스인데요.

ABI에서 계약을 정의하고, 계약함수를 호출하고자 하는 호출자는 ABI를 사용할 수 있습니다.

 

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
Solidity 2022.09.03  (0) 2022.09.03
이더 GAS 개념  (0) 2022.05.13
블록체인 공부블록체인 공부하기 : ERC Standards (펌)  (0) 2022.05.13
블로그 이미지

wtdsoul

,

Solidity 2022.09.03

스터디 2022. 9. 3. 02:39

http://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.6.0+commit.26b70077.js 

 

Remix - Ethereum IDE

 

remix.ethereum.org

 
pragma solidity ^0.6.0;

contract Counter {
    // 1,2,3 ..
    uint count;

    constructor() public{
        count = 0;

    }

    function getCount() public view returns(uint) {
        return count;
    }

    function incrementCount() public {
        count = count + 1;
    }
}

https://trufflesuite.com/ganache/

 

Ganache - Truffle Suite

Features VISUAL MNEMONIC & ACCOUNT INFO Quickly see the current status of all accounts, including their addresses, private keys, transactions and balances.

trufflesuite.com

https://libero2m.tistory.com/22

 

이더리움 로컬 개발 플랫폼 Ganache 설치하기

가나슈는 크림을 섞어 만든 초콜릿이란 뜻이며 설치하면 아이콘 모양도 크림 바른 초콜릿입니다. ■ Ganache . 가나슈 로컬 PC내에서 이더리움 블록체인 가상 네트워크를 생성해서 스마트 계약 트

libero2m.tistory.com

https://metamask.io/

 

The crypto wallet for Defi, Web3 Dapps and NFTs | MetaMask

A safe crypto wallet for digital tokens & NFTs. Join the blockchain and DeFi world.

metamask.io

incrementCount를 한번 클릭후 다시 getCount해봅니다. 아래와 같이 1로 증가한걸 확인할 수 있습니다.

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
이더 GAS 개념  (0) 2022.05.13
블록체인 공부블록체인 공부하기 : ERC Standards (펌)  (0) 2022.05.13
블로그 이미지

wtdsoul

,

이더 GAS 개념

스터디 2022. 5. 13. 16:38

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mage7th&logNo=221440430723

 

[ 이더리움 ] GAS의 개념과 이해, 매커니즘 정리

1. GAS의 기본 개념. 1-1. GAS란 무엇일까? GAS는 모든 이더리움 플랫폼에서 Transaction 을 실...

blog.naver.com

 

가스(Gas)는 이더리움에서 송금이나 스마트 계약을 실행할 때 수수료를 책정하기 위해 만든 단위이다. 개스라고도 한다. 가스 가격(Gas price)는 이더의 하위 단위인 기가웨이(Gwei)로 계산된다.

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
블록체인 공부블록체인 공부하기 : ERC Standards (펌)  (0) 2022.05.13
블로그 이미지

wtdsoul

,

ERC Standards 란?

  • Etherium Network를 사용하는 token들 간의 연결을 원활하게 하기 위해 인터페이스를 통합한 것

 

https://chancoding.tistory.com/172

 

블록체인 공부하기 : ERC Standards - (1)

ERC Standards 란? Etherium Network를 사용하는 token들 간의 연결을 원활하게 하기 위해 인터페이스를 통합한 것 ERC Standards 종류 ERC-20 가장 대중적으로 많이 쓰이는 표준 다른 스마트 컨트랙트 또는 디앱

chancoding.tistory.com

ERC Standards 종류

  • ERC-20
    • 가장 대중적으로 많이 쓰이는 표준
    • 다른 스마트 컨트랙트 또는 디앱과 상호 작용하기 위해 토큰 컨트랙트가 꼭 수행해야 하는 기능들을 인터페이스로서 적용하고 있음
    • 어떻게 토큰을 전달하고, 토큰 관련 데이터를 어떻게 접근할 수 있는지 정의함
  • erc-223
    • ERC-223은 ERC-20가 지니는 문제점을 해결하기 위해 등장한 표준
    • ERC-223은 ERC-20 토큰과 호환되어 ERC-20의 모든 기능을 지원함
    • ERC-20 토큰은, 호환되지 않는 주소로 토큰을 보낼 시, 토큰을 잃어버릴 수 있는 문제점이 있음
    • ERC-223은 이를 해결하여 토큰 손실을 방지 기능이 추가됨
  • ERC-621
    • 토큰 공급량을 조절할 수 있는 표준
    • 토큰의 공급량을 증가시키거나 감소시킬 수 있음
    • 공급 유통량을 정할 수 없는 경우 해당 표준을 사용할 수 있음
      • 예를 들어 게임 내의 화폐, 골드, 퀘스트 아이템 등 수요와 공급을 예측할 수 없는 것을 토큰으로 구현할 때 유용하게 활용할 수 있는 표준
  • ERC-721
    • 수집형 토큰으로, 해당 표준으로 만들어진 토큰은 대체할 수 없는 고유성을 지니고 있음
    • ERC-721로 발행되는 토큰은 대체 불가능(Non-Fungible) 하며 모두 제각각의 가치를 가짐
    • 주로 토큰 그 자체보다는 게임에 주로 쓰이는데, 크립토키티가 ERC-721을 활용한 대표적인 사례
  • ERC-777
    • ERC-223처럼, ERC-20 표준을 개선하기 위한 표준
    • 토큰 손실 문제를 해결할 수 있으며 ERC-20 토큰과도 호환됨
    • ERC-777은 모든 사람이 스마트 컨트랙트의 기능을 검증할 수 있도록 하며, ERC-20에서 사용되는 함수와 다른 새로운 함수들을 정의했다는 특징이 있음
  • ERC-1155
    • 앞서 설명한 토큰들의 특성을 모두 지원하는 표준
    • ERC 표준의 경우 토큰의 유형별로 별도의 스마트 컨트랙트가 필요한데, 이를 해결하기 위해 대체 가능한 ERC-20 토큰이나 대체 불가능한 ERC-721 토큰을 혼합 거래할 수 있는 ERC-1155가 등장
    • 하나의 스마트 컨트랙트 내에서 원하는 유형의 토큰을 무한히 발행할 수 있음

 

'스터디' 카테고리의 다른 글

solidity 2022/10/02  (0) 2022.10.02
Smartcontract Openzeppelin 22.09.18  (0) 2022.09.18
solidity 2022.09.04  (0) 2022.09.04
Solidity 2022.09.03  (0) 2022.09.03
이더 GAS 개념  (0) 2022.05.13
블로그 이미지

wtdsoul

,