BlockChain

(BlockChain) Solidity 문법(1)

JJeongHyun 2023. 3. 6. 16:09
반응형

https://developerjjh.tistory.com/169

 

(BlockChain) Solidity 문법(2)

메서드 옵션 접근제어 지정자 (가시성으로 분류) external : 외부 컨트랙트만 접근 가능 해당 스마트 컨트랙트 내부에서 호출하지 못하고 외부에서만 호출이 가능하도록 설정 상태변수는 external 옵

developerjjh.tistory.com

Solidity

자료형 (타입)

  • int : 부호가 있는 정수
    • uint : 부호가 없다 (양수)
  • string : 문자열
  • ***[] : 배열
  • address : 주소 관련 정보를 제공 
    • 20 크기의 이더리움 어드레스
    • 지갑 계정 주소 | CA
    • 종류
      • address.balance : 잔액을 보여준다
      • address.transfer(amount) : gas를 소비해서 해당 주소로 amount만큼 ether를 보낸다, 실패 시 에러를 반환한다
      • address.send(amount) : transfer처럼 ether를 보내는데 성공여부가 boolean값을 반환한다
      • address.call()
      • address.callcode()
      • address.delegatecall()
  • tx : 트랜잭션 관련 정보를 제공
    • tx.price : 현재 트랜잭션의 gas 비용을 알려준다
    • tx.origin : 트랜잭션의 시작하는 외부(external) 계정 주소를 알려준다
  • msg : 컨트랙트는 외부 컨트랙트에서 호출하거나 다른 컨트랙트에서 message call을 하면 실행하는데,  이때 컨트랙트에게 전달된 메시지 정보를 msg object를 통해서 읽을 수 있다.
    • msg.sender : contract를 호출한 계정의 주소가 들어있다
    • msg.value : 메세지를 통해 전달된 ether가 wei uint로 담겨 있다
    • msg.data : contract로 넘겨진 data가 담겨 있다
    • msg.sig : data의 첫 4바이트가 담겨 있다. 우리는 그걸로 어떤 메서드가 불리는지 알 수 있다

 

배포한 지갑 주소 확인하는 간단한 예제 구현

// Test.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Test {
  int public num;
  string public text;
  int[] public numArr;
  string[] public textArr;
  address public owner;

  mapping(string => uint) public balance;

  constructor(string memory _text) {
    num = 1;
    text = "testing";
    owner = msg.sender;
    text = _text;
  }
}

npx truffle console에서의 owner메서드로 ganache 계정 주소 확인
위 캡처 화면에서의 계정 주소가 ganache 첫 계정 주소와 같은지 확인

  • Truffle을 ganache에 배포하여 instance의 owner메서드를 실행해서 나오는 계정 주소는 따로 설정하지 않았다면 ganache의 첫 번째 계정으로 기본으로 잡혀 있다
  • 따라서 그 계정 주소가 맞는지 확인하기 위해 getTransactionReceipt 메서드를 통해 나온 결과에서의 from값을 확인하여 같은지 알 수 있다