블록체인 TIL-14Week-92Day

디오·2023년 6월 12일
0

블록체인이론&Solidity

목록 보기
26/29

✅오늘은 뭐했니?

🔸 터미널 스마트 컨트랙트 작동 복습.

var {Web3} = require('web3')
var web3 = new Web3('https://goerli.infura.io/v3/apikey')

const privateKey = '0x개인키'
const account = web3.eth.accounts.privateKeyToAccount(privateKey)

account // 계정 정보 잘 나오는지 확인
web3.eth.accounts.wallet.add(account) // 해당 환경에 지갑 정보 추가

var account2 = '돈 받을 지갑주소'
web3.eth.sendTransaction({from : account.address, to : account2, gas : "21000", value : "10000000000000000"})

web3.eth.defaultAccount
web3.eth.defaultAccount = account.address

web3.eth.sendTransaction({to : account2, gas : "21000", value : "10000000000000000"}).then(console.log)







🔸 리믹스에서 코드 입력후 메타마스크를 통해서 goerli 네트워크에 배포 후 컨트랙트의 함수 동작시켜보기

-> 컨트랙트 주소와 abi키 가져와서 터미널에 변수로 입력
c_address = "0xD0b9194F68bBf00C201176709d48dea09238fFF0"
let abi =
-> 컨트랙트화
let contract = new web3.eth.Contract(abi, c_address)
-> 컨트랙트 내 함수 이름 확인 후 동작시켜보기
contract.methods
contract2.methods.myAddress().call().then(console.log)






🔸 vs code (history)

1 cd .\Desktop\
2 cd .\Truffle_LikeLion\
3 cd 0612
4 truffle init
5 truffle create contract A

마이그레이션 파일 생성(이름에 번호 붙이는거 잊지말기)
truffle-config 설정
.env 생성
npm install dotenv
npm install @truffle/hdwallet-provider

truffle compile
truffle migrate --network goerli
truffle console --network goerli







🔸 send

var {Web3} = require('web3')
var web3 = new Web3('INFURA_API_KEY')

var privateKey = 'YOUR PRIVATE KEY'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)

web3.eth.accounts.wallet.add(account)
web3.eth.defaultAccount = account.address

var abi = /*[CONTRACT ABI 여기에 넣기]*/
var c_address = 'CONTRACT ADDRESS 여기에 넣기'
var contract = new web3.eth.Contract(abi, c_addr)

contract.methods.a().call().then(console.log)

var tx = {from : account.address, to : c_address , gas : 300000, gasPrice : 3000000, data : contract.methods.함수이름(input 값).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)})})






🔸 event_emit

로그 생성 가능(편하게 필터링이 가능하짐)
-> 특정 이벤트 값 받아오기 가능
-> 특정 이벤트 값이 내가 원하는 값이 나올때 까지도 가능
pure나 view에서는 event_emit이 불가능
형태: event 이름(변수 ..) 함수 안에서: emit 이름(변수..)






🔸 event subscribe

jsx
// Terminal 1번
var {Web3} = require('web3')
var web3 = new Web3('https://goerli.infura.io/v3/apikey')

var privateKey = '개인키'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)

web3.eth.accounts.wallet.add(account)
web3.eth.defaultAccount = account.address

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

contract.methods.a().call().then(console.log)

var tx = {from : account.address, to : c_addr, gas : 300000, gasPrice : 30000000, data : contract.methods.setA(10000).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)})})

Terminal 2var {Web3} = require('web3')
var web3 = new Web3('wss://mainnet.infura.io/ws/v3/apikey')

var privateKey = '개인키'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)

web3.eth.accounts.wallet.add(account)
web3.eth.defaultAccount = account.address

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

contract.events.ADD(()=>{}).on('data', function(event) {console.log(event);})
contract.events.DIV(()=>{}).on('data', function(event) {console.log(event.returnValues);})
contract.events.SUB(()=>{}).on('data', function(event) {console.log(event.returnValues[1]);})
contract.events.MUL(()=>{}).on('data', function(event) {if(event.returnValues[1]>=100) {console.log("higher than 100")}})

🌜하루를 마치며..

유난히 힘든 하루였다. 목요일에 이론 TEST를 또 보신다고 하는데.. 지난번보다 더 어려워서 걱정이다. 문제도 받아적기는 했는데 급하게 적다보니 말이 안맞는 내용도 많고 정리를 해서 답변을 찾고 올려놓도록 해야겠다.

profile
개발자가 되어가는 개린이"

0개의 댓글