【Blockchain】Smart Contract가 유지하는 가상 통화를 조작한다

한정자 payable의 샘플에서 가상 통화를 Smart Contract의 함수에 보내는 설명을 했습니다만, 그 가상 통화는 어디에 갔습니까? Ethereum(이더리움) 계정이 가상 통화를 보유할 수 있는 것처럼 Smart Contract도 가상 통화를 유지할 수 있습니다.

Smart Contract가 보유한 가상 화폐 취득



스마트 계약이 보유한 가상 통화를 얻는 것은 매우 간단합니다.
우선, 아래와 같이 getBalance 라고 하는 함수를 구현합시다.
이 함수는 정보 get를 얻고 싶으므로 수수료가 부과되지 않도록 한정자 view를 추가합시다.
function getBalance() public view returns (uint) {
    return address(this).balance;
}

다음 코드에서 address(this).balance Smart Contract가 보유한 가상 통화를 얻을 수 있습니다.
취득하는 통과 단위는 wei이므로, ether 로 변환해 취득하고 싶은 경우는, 다음의 함수도 만들어 둡시다.
function getBalanceAsEther() public view returns (uint) {
    return getBalance() / 1e18;
}

자, 실행하고 확인합시다.

다음과 같이 Value3 ether를 설정하고 setMessage에 "Hello World"를 넣어 실행합니다.
이제 Smart Contract에 3 ether를 보냈습니다.



그런 다음 getBalance 또는 getBalanceAsEther를 실행하면 다음과 같이 Smart Contract가 보유한 가상 통화를 확인할 수 있습니다.



스마트 계약에서 소유자로 가상 화폐 이동



다음은 Smart Contract가 보유한 가상 통화를 소유자로 이동하는 방법을 설명합니다.
그 전에, 상속 을 설명했을 때, 소유자의 주소를 보관 유지하는 속성을 private 로 하고 있던 곳을 internal 로 변경할 필요가 있습니다. 그렇지 않으면 상속 대상에서 owner를 사용할 수 없기 때문입니다.

※ 덧붙여서, internal 는, 다른 오브젝트 사고 언어에서는 protected 라고 알려져 있습니다.

이제 실제로 가상 통화를 이동하는 함수를 다음과 같이 구현합니다.
function transfer(uint amount) public isOwner {  // (1)
    require(address(this).balance >= amount);    // (2)
    owner.transfer(amount);                      // (3)
}

(1) 우선, 함수는, 오너 이외 실행할 수 있어 버리면(자) 곤란하므로, isOwner 한정자modifier (을)를 붙입니다.
(2) 그런 다음 인수 amount가 실제로 Smart Contract가 보유한 암호화폐를 초과하지 않는지 확인합니다.
(3) 마지막으로 소유자로 가상 통화 amount 분만큼 이동합니다.

※ 특히 변환 계산을 하지 않으므로 amountwei 로 지정해야 한다.

스마트 계약에서 다른 계정으로 가상 화폐 이동



Smart Contract가 유지하는 가상 통화를 다른 계정으로 이동하는 방법은 다음 함수transerTo 구현에서 설명합니다.
function transferTo(uint amount, address to) public isOwner {  // (1)
    require(address(this).balance >= amount);                  // (2)
    require(to != address(0));                                 // (3)
    to.transfer(amount);                                       // (4)
}

(1) 인수로 가상 통화를 이동하려는 계정to을 정의합니다.
(2) 인수 amount가 실제로 Smart Contract가 보유하는 가상 통화를 초과하지 않는지 확인합니다.
(3) 인수 to가 잘못된 계정이 아닌지 확인합니다.
(4) 마지막으로 to로 가상 통화 amount 분만큼 이동합니다.

좋은 웹페이지 즐겨찾기