[블체스 Part.3] 230613

이현진·2023년 6월 13일
0

BlockChain School

목록 보기
20/20

정말정말 오랜만에 TIL을 적으러 왔당!!
사실 그동안 TIL태기 와서 벨로그 안들어왔었는데 정말정말 오랜만에 드디어 정리하러 왔어용


작업환경 구성

npm init

내가 작업하고자 하는 폴더로 이동해서 터미널을 켠다.
나는 powershell이 편해서 powershell로 켰다.

npm install web3


web3

node 에 들어가서 작업한다.

명령어 정리해 둔 것 !!

var {Web3} = require('web3')
var web3 = new Web3('https://goerli.infura.io/v3/infura 개인키 복사해서 가져오기~')
web3.provider

var privateKey = '메타마스크 개인키'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)
web3.eth.accounts.wallet.add(account)

배포할 컨트랙트의 주소와 abi 복사

var c_address = '컨트랙트 주소'
var abi = 컨트랙트 abi
var contract = new web3.eth.Contract(abi, c_address)

var tx = {from : account.address, to : c_address, gas : 300000, gasPrice : 300000, data : contract.methods.add(3, 5).encodeABI() }

var signPromise = web3.eth.accounts.signTransaction(tx, account.privateKey)

signPromise.then((signedTx) => {var sentTx = web3.eth.sendSignedTransaction(signedTx.raw || signedTx.rawTransaction); sentTx.on("receipt", receipt => {console.log(receipt)})})

web3.eth.getGasPrice().then(console.log)

contract.methods.add(3, 5).estimateGas().then(console.log)


ethers

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

그러면 provider_main과 provider_goerli가 각각 아래와 같이 나온다.

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

각각의 블록넘버를 확인할 수 있다.

지갑주소 주인의 잔액 확인

await provider_main.getBalance('지갑 주소')
await provider_goerli.getBalance('지갑 주소')

main에는 잔액이 없고, goerli에만 잔액이 있는 것을 볼 수 있다.

스마트 컨트랙트 코드 확인 (아래 두 줄의 결과는 똑같이 나온다)

await provider_goerli.getCode('스마트컨트랙트 주소')
provider_goerli.getCode('스마트컨트랙트 주소').then(console.log)

결과 확인

await provider_goerli.getStorage('0x86bC1Aa345Cd31b3274Db1cd43184Af4e9868Ab1', 0)
await provider_goerli.getStorage('0x86bC1Aa345Cd31b3274Db1cd43184Af4e9868Ab1', 1)
await provider_goerli.getStorage('0x86bC1Aa345Cd31b3274Db1cd43184Af4e9868Ab1', 2)

(혹시나 싶어서 주소들은 다 가렸다..!)

await provider_goerli.getBlock(100000)

signer

var signer = new ethers.Wallet(privateKey, provider_goerli)

받을 지갑주소 선언

var acccount2 = '받을 지갑주소'

transaction 생성

var tx = {to : account2, value : 100000000000000}

signer.sendTransaction(tx).then(console.log)

//web3에서는 이렇게 함
web3.eth.sendTransaction(tx).then(console.log)

var abi = 배포할 컨트랙트의 abi
var c_addr = '배포할 컨트랙트의 주소'
var contract = new ethers.Contract(c_addr, abi, signer)

contract.runner.address
contract.target

컨트랙트의 정보를 잘 받아오는 것을 볼 수 있다.

contract.interface.fragments

await contract.a()
await contract.b()
await contract.c()

await provider_goerli.getStorage('배포한 컨트랙트 주소', 0)

contract.target


profile
https://github.com/lhjbg0821

0개의 댓글