BlockChain

Solidity #4

부산대보금자리 2022. 1. 7. 20:05
  • SELFDESTRUCT

컨트랙트 생명 주기의 : 컨트랙트

 

selfdestruct(address recipient);// 컨트랙트를 삭제할 수 있는 유일한 방법

삭제 가능한 컨트랙트 생성을 원한다면 컨트랙트에 명시적으로 위의 코드를 추가하면 된다.

어떤 컨트랙트가 영원히 지속되는 것을 보장하기 위해서는 해당 코드를 포함하지 않으면 된다.

 

 

  • 다른 컨트랙트 호출

다른 컨트랙트를 호출하기 위한 가장 안전한 방법은 직접 다른 컨트랙트를 만드는

1) 새로운 인스턴스 만들기

: 다른 컨트랙트를 호출하기 가장 안전한 방법은 직접 다른 컨트랙트를 만드는

 

// SPDX-License-Identifier:GPL-30

pragma solidity >=0.5.0 <0.9.0;

import "Faucet.sol";

contract Token is mortal{

    Faucet _faucet;

    constructor(){

        _faucet = new Faucet();

        // _faucet = (new Faucet).value(0.5 ether)();

        // = 인스턴스 생성시 선택적으로 이더 값을 전송할 수 있다.

    }

   

    function destroy() ownerOnly {

        _faucet.destoy();

    }

}

2) 존재하는 인스턴스에 주소 부여하기

: 다른 컨트랙트를 호출할 있는 다른 방법은 이미 존재하는 해당 컨트랙트의스턴스에 주소를 캐스팅 하는 방법

 

  • 지갑

보관하는 의미의 지갑이 아니라 트랜잭션에 서명 하는 개인키와 공개키의 쌍을 지갑에 넣는것이라고 생각하면 된다.

 

지갑에 있는 키는 트랜잭션을 서명하는데 사용되며, 블록체인에 기록되고 이더의 소유권을 나타낸다.

 

 

  • 사전 정의된 글로벌 변수 함수

 

EOA : 외부 소유 계정

 

  • Msg.sender : 컨트랙트를 호출한 주소(EOA혹 컨트랙트)
  • Msg.value : 호출 전송된 이더의 (wei)
  • Msg.gas : 실행 환경의 가스 공급에 남은 가스의
  • Msg.data : 이 호출의 데이터 페이로드가 컨트랙트에 포함
  • Msg.sig : 함 선택자인 데이터 페이로드의 처음 4바이트

 

  • Tx.gasprice : 트랜잭션을 호출하는데 필요한 가스 가격
  • Tx.origin : 트랜잭션에 대한 원래 EOA의 주소

 

  • Block.blockhash : 솔리디티 v0.4.22 blockhash함수로 대체,지정된 블록번호의 블록 해시
  • Block.coinbase : 현재 블록 수수료 보상의 수취인 주소
  • Block.difficulty : 현 블록의 난이도(pow)
  • Block.gaslimit : 현 블록에 포함된 모든 트랜잭션에 소요될 있는 최대 가스
  • Block.number : 현재 블록 번호
  • Block.timestamp : 채굴자가 현재 블록에 넣은 타임스탬프

 

  • Address.balance : 해당 주소의 잔액 ex> address(this).balance

 

  • 내장 함수
  • addmod, mulmod : addmod(x,y,k) = (x+y) %k
  • Keccak256, sha256, sha3, ripemd160 : 해시함수
  • Ecrecover : 서명에서 메세지 서명에 사용된 주소를 복구
  • Selfdestruct(recipient_address) : 현 컨트랙트를 삭제하고 계정의 나머지 이더를 받는 사람의 주소로 보낸다.
  • This : 현 실행중인 컨트랙트 계정의 주소

 

 

 

  • 토큰

블록체인에서 관리되는 '토큰'은 소유할 수 있고, 자산, 화폐 혹은 접근 권한 등 블록체인 기반의 추상화된 의미로 재정의된다.

물리적인 토큰은 쉽게 교환할 수 없고, 일반적으로 하나의 기능을 가지며 특정 비즈니스 혹은 사용에 제한되는 경우가 많지만, 블록체인 토큰을 사용하면 이러한 제한을 없애거나 새로 재정의할 수 있다

 

  • 토큰은 어떻게 사용되는가?
  • 화폐(currency)
    토큰은 사적인 트레이딩으로 가치가 결정되는 화폐의 한 형태로 작동할 수 있다.
  • 자원(resource)
    토큰은 공유 경제 또는 자원 공유 환경에서 획득되거나 생산된 자원을 나타낼 수 있다.
    ex. 스토리지/CPU 토큰은 네트워크 상에서 공유될 수 있다.
  • 자산(asset)
    토큰은 내재적 또는 외적, 유형 또는 무형 자산의 소유권을 나타낼 수 있다.
    ex. 금, 부동산, 자동차, 기름, 에너지, MMOG(다중 접속 온라인게임) 항목 등
  • 접근(access)
    토큰은 접근 권한을 나타낼 수 있으며, 토론 포럼, 회원전용 웹사이트, 호첼 객실 또는 렌터카 같은 디지털 또는 물리적 속성에 대한 접근 권한을 부여할 수 있다.
  • 지분(equity)
    토큰은 디지털 조직 또는 법인의 주주 지분을 나타낼 수 있다.
  • 투표(voting)
    토큰은 디지털 또는 법률 시스템에서 투표권을 나타낼 수 있다.
  • 수집(collectible)
    토큰은 디지털 수집물 또는 물리적인 수집물(그림)을 나타낼 수 있다.
  • 신원(identify)
    토큰은 디지털 신원 또는 법적 신원을 나타낼 수 있다.
  • 증명(attestation)
    토큰은 일부 기관이나 탈중앙화된 평판 시스템에의한 사실 증명서 또는 인증서를 나타낼 수 있다.
  • 유틸리티(utility)
    토큰은 서비스에 접근하거나 사용료를 지불하는데 사용될 수 있다.

 

 

블록체인 기반 토큰의 가장 중요한 파급 효과 중 하나는 외재적 자산을 내재적 자산으로 변환하여 거래상대방 위험을 제거할 수 있는 능력이다.

 

 

- 이더리움 토큰

비탈릭 부테린은 이더리움 같은 범용적이고 프로그래밍 가능한 블록체인의 가장 명확하고 유요한 애플리케이션의 하나로 토큰을 제안했다.

💡 토큰은 이더와 다르다.

✅ 이더 전송은 이더리움 플랫폼의 본질적인 동작이지만 토큰을 보내거나 소유하는 것은 아니다. 즉, 이더리움 프로토콜은 토큰에 대해 알지 못한다.

✅ 이더리움 계정의 이더 잔액은 프로토콜 수준에서 처리되는 반면, 이더리움 계정의 토큰 잔액은 스마트 컨트랙트 수준에서 처리된다.

✅ 이더리움에서 새 토큰을 만들려면 소유권, 이전 및 접근 권한을 포함한 모든 것을 처리하는 새로운 스마트 컨트랙트를 만들어야한다.

 

ERC20 토큰 표준

첫 번째 표준은 2015년 11월 파비안 보겔스텔러가 ERC(Ethereum Request for Comment)로 발표하고 깃허브 이슈번호 20이 자동으로 할당된 ERC20 토큰이다.

✅ ECR20은 대체 가능한 토큰의 표준이다.

✅ 대다수의 토큰은 ERC20 표준을 기반으로 한다.

✅ ERC20 표준은 토큰을 구현하는 컨트랙트에 대한 공통 인터페이스를 정의하므로 모든 호환 가능한 토큰에 같은 방식으로 접근하고 사용할 수 있다.

'BlockChain' 카테고리의 다른 글

Solidity 취약점 카테고리화  (0) 2022.01.11
Solidity #5  (0) 2022.01.10
Solidity #3  (0) 2022.01.06
Solidity #2  (0) 2022.01.05
Solidity #1  (0) 2022.01.04