[Solidity] Truffle 공부 Console 기능들

in mini.topia4 months ago

Solidity 메모2!

유튜브 영상 자료(Dapp Campus)를 따라해보면서 배우고 있는 중입니다. 한번 따라해보면 처음에 익숙해지는데 꽤나 좋을 것 같습니다.

여기서는 로또비스무리한 컨트랙트를 만들고 있군요. 그래서 Lottery Contract로 만들어 보고 있습니다.


Truffle에는 블록체인 Console로 접근하는 기능을 제공하고 있습니다.

truffle console

console에 진입하면 각종 기능들을 사용 할 수 있는데 가장 대표적인 것이 web3.js 사용이 가능해집니다.
console에서는 기본적으로 "javascript" 기능은 먹는 것 같습니다.

// console 에서 web3 을 입력하면 web3 항목들이 표시됩니다.
web3

// 가장 많이 사용되는 것은 web3.eth 이므로 eth라는 변수로 설정도 가능합니다.
eth = web3.eth

// eth 함수 예시들
eth.getAccounts()
eth.getBalance('0x105Dd1dB1EE66aeC9D7259a45544081Dd93F04FF')

결과 화면

console 에 배포된 contract가 있는 경우에도 바로 접근이 가능합니다.

컨트랙트 소스

// Lottery.sol source
pragma solidity >=0.4.21 < 0.6.0;

contract Lottery{
  address public owner;

  constructor() public {
    owner = msg.sender;
  }

  function getSomeValue() public pure returns(uint256 value) {
    return 6 * 6;
  }
}

기능 호출

// 비동기 함수로, lt라는 변수에 instance 값을 할당해줍니다.
// deployed 함수는 배포된 컨트랙트의 정보들을 가져옵니다.
Lottery
   .deployed()
   .then(function(instance){
      lt=instance
   })

// owner 주소 확인
lt.owner();

// 컨트랙트에 선언한 컨트랙트 호출
lt.getSomeValue();
// 결과화면
// 제일 앞의 BN은 BigNumber 라는 것을 의미
// 이더리움에서는 다루는 숫자가 크기 때문에(2의 31승 - 1의 범위) Bignumber을 많이 사용함
BN { negative: 0, words: [ 36, <1 empty item> ], length: 1, red: null }

contract abi

  • 인터페이스로 외부에서 어떤 함수에 접근 가능한지, 파라미터가 무엇인지, 리턴값이 무엇인지 확인 가능합니다.
[
  {
    inputs: [],
    payable: false,
    stateMutability: 'nonpayable',
    type: 'constructor',
    constant: undefined
  },
  {
    constant: true,
    inputs: [],
    name: 'owner',
    outputs: [ [Object] ],
    payable: false,
    stateMutability: 'view',
    type: 'function',
    signature: '0x8da5cb5b'
  },
  {
    constant: true,
    inputs: [],
    name: 'getSomeValue',
    outputs: [ [Object] ],
    payable: false,
    stateMutability: 'pure',
    type: 'function',
    signature: '0xa40674b7'
  }
]