솔리디티에서 난수 만드는 게 되게 어려움
난수는 비결정론적인데 그걸 해내기 위한 자원이 부족했음
최대한 탈중앙화스럽게 기능은 충족하게끔 도와주곤 했다 but 오라클 문제
Chainlink : 블록체인 안에서 난수를 만들게끔 도와줌
https://blog.chain.link/verifiable-random-functions-vrf-random-number-generation-rng-feature-korean/
웹드 ether
https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code
contract address, abi 메모장에 복사해놓기
Infura.io에서 mainnet websockets 받아오기
node
var {Web3} = require('web3')
var web3 = new Web3('wss://mainnet.infura.io/ws/v3/apiKey')
var acc = '웹드contract 주소'
var abi = abi
acc
abi
var contract = new web3.eth.Contract(abi, acc)
contract.events
contract.events.Transfer().on('data',function(events){console.log(events)})
``잡 끄적끄적“”
await
var subscription = await web3.eth.subscribe('newHeads')
subscription.on('data',async blockHead => {console.log("New Block Header : ", blockHead)})
‘’ 잡 끄적끄적 ’‘
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract EVENT1 {
event ADD(string name, uint result);
event SUB(string name, uint result);
event MUL(string name, uint result);
event DIV(string name, uint result);
function add(uint _a, uint _b) public returns(uint) {
emit ADD("Plus", _a+_b);
return _a + _b;
} // 얘를 누르면 저 이벤트의 알람이 울린다
function sub(uint _a, uint _b) public returns(uint) {
emit SUB("Minus", _a-_b);
return _a - _b;
}
function mul(uint _a, uint _b) public returns(uint) {
emit MUL("Times", _a*_b);
return _a * _b;
}
function div(uint _a, uint _b) public returns(uint) {
emit DIV("divide", _a/_b);
return _a / _b;
}
}
contract EVENT2 {
event higherThanTen(uint a);
function add(uint _a, uint _b) public {
uint _c = _a + _b;
if(_c >=10) {
emit higherThanTen(_c);
}
}
}
contract CHAINID {
function getChainID() public view returns(uint) {
return block.chainid;
}
} // 전역변수