블록체인 TIL-14Week-93Day

디오·2023년 6월 13일
0

블록체인이론&Solidity

목록 보기
27/29

✅오늘은 뭐했나?

  • event subscribe 복습
  • ethers.js (설정, 기본 기능 및 거래 보내기)
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()

await provider_goerli.getBalance('지갑주소')
await provider.getBlockNumber() // 아니면 provider.getBlockNumber().then(console.log)
npm install --save ethers

node

var { ethers } = require("ethers");
var provider = new ethers.InfuraProvider(network="goerli", "api key")

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

var tx = {to : account2, value : 100000000}
var Txreceipt = signer.sendTransaction(tx).then(console.log)






  • ethers.js (getCode, getStorageAt() // contract의 바이트 코드와 상태변수)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

// a,b,c(변수는 public 하게)를 각각 1,2,3으로 설정하고 이 변수들을 바꿀 수 있는 함수도 같이 구현

contract A {
  uint public a = 1;
  uint public b = 2;
  uint public c = 3;

  function setA(uint _a) public {
    a = _a;
  }

  function setB(uint _b) public {
    b = _b;
  }

  function setC(uint _c) public {
    c = _c;
  }
}
await provider_goerli.getCode('contract 주소')
await provider_goerli.getStorageAt('contract 주소', '번호')

// 위의 경우 
await provider_goerli.getStorage('contract 주소', '0') // a의 값 1 반환
await provider_goerli.getStorage('contract 주소', '1') // b의 값 2 반환
await provider_goerli.getStorage('contract 주소', '2') // c의 값 3 반환






  • ethers.js (contract 사용하기)
var { ethers } = require("ethers");
var provider = new ethers.InfuraProvider(network="goerli", "api key")

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

var abi = abi넣기
var c_address = contract address 넣기

contract.interface.fragments
await contract.a()

var txSigner = contract.connect(signer)






  • tx.origin, msg.sender
contract Origin {
    function A() public view returns(uint, address) {
        return (1, msg.sender);
    }

    function B() public view returns(uint, address) {
        return (2, address(this));
    }

    function C() public view returns(uint, address) {
        return (3, tx.origin);
    }
}

contract Sub {
    Origin a;
    constructor(address _a) {
        a = Origin(_a);
    }
    function A() public view returns(uint, address) {
        return a.A();
    }

    function B() public view returns(uint, address) {
        return a.B();
    }

    function C() public view returns(uint, address) {
        return a.C();
    }
}






  • DoubleArray
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

contract multiArray {
    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;
    }
}
contract multiArray2 {
    uint[3][] public double_A;

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

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

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

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

    function getLengthA() public view returns(uint) {
        return double_A.length;
    }

    function getLengthA2(uint _a) public view returns(uint) {
        return double_A[_a].length;
    }
}  
contract multiArray2_2 {
    uint length;
    uint[][] public double_A = new uint[3][](length);

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

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

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

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

    function getLengthA() public view returns(uint) {
        return double_A.length;
    }

    function getLengthA2(uint _a) public view returns(uint) {
        return double_A[_a].length;
    }
}
contract multiArray3 {
    uint[][3] public double_A;

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

    function setNumberA2(uint _a, uint[] memory _b) public {
        double_A[_a] = _b;
    }

    function getLengthA() public view returns(uint) {
        return double_A.length;
    }

    function getLengthA2(uint _a) public view returns(uint) {
        return double_A[_a].length;
    }
}
contract multiArray3_2 {
    uint[][] public double_A = new uint[][](3);

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

    function setNumberA2(uint _a, uint[] memory _b) public {
        double_A[_a] = _b;
    }

    function getLengthA() public view returns(uint) {
        return double_A.length;
    }

    function getLengthA2(uint _a) public view returns(uint) {
        return double_A[_a].length;
    }
}
contract multiArray4 {
    uint[3][3] public double_A;

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

    function setNumberA2(uint _a, uint[3] memory _b) public {
        double_A[_a] = _b;
    }

    function getLengthA() public view returns(uint) {
        return double_A.length;
    }

    function getLengthA2(uint _a) public view returns(uint) {
        return double_A[_a].length;
    }
}
contract gasFee {
    uint[] a;
    uint[][] a_;
    uint[3][] _a;

    uint[3] b;
    uint[][3] b_;
    uint[3][3] _b;

    function setA(uint _a) public {
        a.push(_a); // 44773, 27673
    }

    function setA2(uint _a) public {
        a_.push([_a]); // 67192, 50092
    }

    function setA3(uint _b) public {
        _a.push([_b]); // 49556, 32456
    }

    function setA3_(uint[3] memory _b) public {
        _a.push(_b); // 73333, 73333
    }

    function setB(uint _n, uint _a) public {
        b[_n] = (_a); // 22788, 22788
    }

    function setB2(uint _n, uint _a) public {
        b_[_n] = [_a]; // 45221, 8221
    }

    function setB3(uint _a, uint _bb, uint _c) public {
        _b[_a][_bb] = _c; // 22951, 22951
    }
}
profile
개발자가 되어가는 개린이"

0개의 댓글