npm init
npm install web3
node
const {Web3} = require('web3')
const web3 = new Web3('API_KEY')
; Infura에서 goerli api키 발급// 개인키
const privatekey = 'YOUR PRIVATE KEY'
// 개인키로 계정생성 (개인키 => 지갑주소)
const account = web3.eth.accounts.privateKeyToAccount(privatekey)
account // 계정 정보 잘 나오는지 확인
web3.eth.accounts.wallet.add(account) // 해당 환경에 지갑 정보 추가
web3.eth.defaultAccount = account.address // 기본 지갑으로 설정
🔎 defaultAccount 등록 이유
- 가스비 발생 시 등록된 지갑에서 빠져나감
- 지갑 주소로도 등록하고 default로도 설정해서 web3.js에게 어떤 지갑을 사용하면 되는지 알려줌
- defaultAccount 설정하면 from없이 거래 가능
// 거래(to)지갑 등록
var account2 = '돈 받을 지갑주소'
// 거래
web3.eth.sendTransaction({from : account.address, to : account2, gas : "21000", value : "10000000000000000"})
// 기본 지갑이 설정된 경우 거래
web3.eth.sendTransaction({to : account2, gas : "21000", value : "10000000000000000"}).then(console.log)
//사용한 컨트랙트 코드
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
contract A {
uint public a = 1;
uint public b = 2;
function setA(uint _a) public {
a = _a;
}
function setB(uint _b) public {
b = _b;
}
}
//지갑 등록
var privateKey = 'YOUR PRIVATE KEY'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)
//defaultAccount설정
web3.eth.accounts.wallet.add(account)
web3.eth.defaultAccount = account.address
// 사용할 컨트랙트의 abi, 컨트랙트 주소
var abi = [CONTRACT ABI]
var c_address = 'CONTRACT ADDRESS'
// 위의 2개 정보로 contract 변수 선언
var contract = new web3.eth.Contract(abi, c_address)
// 해당 컨트랙트의 모든 함수 조회
contract.methods
contract.methods.함수이름(input 값).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)})})
npm init
npm install web3@1.9.0 //ver1로 설치
node
//package 가져오기
var Web3 = require('web3') //ver1에서는 {}없음
var web3 = new Web3('INFURA_API_KEY')
//지갑주소 등록
var privateKey = 'YOUR PRIVATE KEY'
var account = web3.eth.accounts.privateKeyToAccount(privateKey)
//defaultAccount 설정
web3.eth.accounts.wallet.add(account)
web3.eth.defaultAccount = account.address
//contract 가져오기
var abi = /*[CONTRACT ABI 여기에 넣기]*/
var c_address = 'CONTRACT ADDRESS 여기에 넣기'
var contract = new web3.eth.Contract(abi,c_address)
//call함수, send함수 실행
contract.methods.a().call().then(console.log)
contract.methods.setA(123456).send({from:account.address, gas : 300000}).then(console.log)