- 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 |