writer
채굴자
reader
블록체인을 읽거나 분석하는 사람들 (ex. cryptoquant)
permissionless blockchain - 쉽게 들어오고 떠날 수 있는 체인
permissioned blockchain - 접근 권한을 제한할 수 있는 체인
ttp 가 있다면 블록체인 필요없음 → 책임을 참여자들과 분산시키는 것이 전제인데, 그게 없다면 블록체인은 필요없다
DPoS
모든 writer들이 알려졌다?
Are all writers trusted? - 항상 믿을만한 행동을 할까? 믿을 수 있다면 블록체인이 필요없다.
다 알려지고, 믿을 수 있는 writer들이 있고. 다양한 DB가 있고. 그렇다면 블록체인이 필요없다.
→ 결국 신뢰할 수 없는 상황에 사용하는 것.
distribute → balanceOf { return 1000; } → 실질적으로 전송할 수 있는 가치가 아닌 경우임 (”장난질”)
→ 기업들이 코드를 공개하는 이유는 이러한 상황에 대해 유저들을 안심시켜주기 위해.
var {Web3} = require('web3');
var web3 = new Web3('https://cloudflare-eth.com');
web3
web3.provider
web3.eth.getBlockNumber().then(console.log)
await web3.eth.getBlockNumber()
// block 정보 조회하기
web3.eth.getBlock(12345678).then(console.log)
// 지갑 주소 조회하기
web3.eth.getBalance('0x9228624C3185FCBcf24c1c9dB76D8Bef5f5DAd64').then(console.log)
// 12345678 블록의 두번째 거래 해시번호 (1)
web3.eth.getTransactionFromBlock(12345678, 1).then(console.log)
// 계정 생성
web3.eth.accounts.create()
// 프라이빗키
var privateKey = '0x011111111111';
// 프라이빗키로 계정생성 - 이미 생성되어 있는 계정주소로 가져오게 된다
var account = web3.eth.privateKeyToAccount(privateKey);
web3.eth.defaultAccount = account.address
web3.eth.sendTransaction({to: account2, gas:"21000", value:"10000000000000000"}).then(console.log)
불편하면 불편해질수록 자유도는 올라간다고 생각하면 된다.
// remix에서 배포한 스마트컨트랙트 주소
// Remix에서 배포했지만, 조작은 터미널로 한다
await web3.eth.getCode('0x1fe7d8A358Ea673eB5b7c5eb2D13915c35b7C7cc')
await web3.eth.getStorageAt('0x1fe7d8A358Ea673eB5b7c5eb2D13915c35b7C7cc',1)
상태변수를 private으로 설정해도, 변경하면 값이 바뀐다.
visibility는 접근할 수 있는 주체가 누구냐를 설정하는 것이다.
정말 중요한 기밀 정보는 getStorage를 통해서 조회할 수 있기 때문에 올리지 않는다. owner일 때만 가능하도록 해야 한다. 권한이 있는 사람이 서명해야만 접근할 수 있도록!
16진수 앞자리가 타입과 글자수를 알려준다
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)})})
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)})})
컨트랙트 생성
사인하고
서명한 정보를 보내기
돈이 안드는 함수는 .call() 로 호출했다
돈이 드는 함수, 즉 상태변수를 변경하는 함수는 .send()로 실행한다
// 더 쉽게 배포하는 방법
await contract1.methods.setC(123456789).send({from: account.address, gas: 300000, gasPrice: 3000000})
프로바이더를 제공하는 서비스
active endpoint - goerli (ethereum test network)