[TIL] Part2 - DAY56 Solidity - ethers, doubleArray

박동우·2023년 6월 13일

블록체인 스쿨 3기

목록 보기
52/72

[TIL] 2023-06-13 DAY56


Solidity

GIT 주소 : https://github.com/dowoo303/SOLIDITY


오늘 배운것들

  1. ethers로 컨트랙트 동작시켜보기
  2. doubleArray

각종 팁

  1. tx.origin : 무조건 처음에 동작시킨 사람 반환 -> 이를 활용하면 msg.sender == tx.origin으로 사람만 구별해낼 수 있다.

회고



💻 Solidity 코딩

✅ migrate시에 생성자 입력법

deployer.deploy(A, 123) : 원하는 생성자 입력값을 디플로이 할 때 뒤에 입력

truffle create contract A: A라는 이름의 soildity 파일 만들기

  • 확인하는법
    truffle console로 진입
    var a = await A.deployed()
    a.abi
    a.a()

✅ ethers로 동작시켜보기

npm init
npm install --save ethers

node 진입
var {ethers} = require('ethers')
var provider_main = new ethers.InfuraProvider()
var provider_goerli = new ethers.InfuraProvider(network="goerli")

await provider_main.getBlockNumber()
await provider_goerli.getBlockNumber()

var privateKey = '개인키'
var signer = new ethers.Wallet(privateKey, provider_goerli)

var account2 = '0x8f709f555c685da4D04703D66F0a986fcbA9a373'
var tx = {to : account2, value : 100000000000000}
signer.sendTransaction(tx).then(console.log)

var abi =
var c_addr = ''
var contract = new ethers.Contract(c_addr, abi, signer)

await contract.setA(123)

web3와 ethers의 차이점

  1. 환경설정
    web3 : Web3
    ethers : ethers
  1. 프로바이더
    web3 : api키
    ethers : 프로바이더(제공자) -> api키 없이도 자기가 알아서 함

  2. 지갑설정
    web3 : account
    ethers : 사이너

  1. 컨트랙트
    web3 : var contract = new web3.eth.Contract(abi, c_addr) -> 얘는 default 설정이 되어 있어서 지갑주소를 뒤에 따로 넣을 필요가 없음
    ethers : var contract = new ethers.Contract(c_addr, abi, signer)
  1. 트랜잭션
    web3 : web3.eth.sendTransaction(tx).then(console.log)
    ethers : signer.sendTransaction(tx).then(console.log)

✅ doubleArray

기본적으로 앞 배열이 1씩 증가하지만 위로도 계속 배열을 더 쌓을 수 있다고 이해하면 된다
[들어온 순서의 번째][들어온 순서] -> 코드 배열 순서 기준(리믹스에서는 반대로 보임)


🟥 코드

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

contract multiArray {
    // 기본적으로 앞 배열이 1씩 증가하지만 위로도 계속 배열을 더 쌓을 수 있다고 이해하면 된다
    uint[][] public double_A;

    function setNumber(uint _a) public {
        double_A.push([_a]);
    }

    function setNumber2(uint _a, uint _b) public {
        double_A.push([_a, _b]);
    }

    function setNumber3(uint[] memory _a) public {
        double_A.push(_a);
    }

    function setNumber4(uint _a, uint _b, uint _c) public {
        double_A[_a][_b] = _c;
    }

    function getLength() public view returns(uint) {
        return double_A.length;     // 첫번째 배열의 길이를 봄
    }

    function getLength2(uint _a) public view returns(uint) {
        return double_A[_a].length;     // 입력한 _a번째의 배열의 길이를 봄
    }
}

profile
HELLO!

0개의 댓글