vue.js로 작성한 코드를 yarn serve로 dev server를 돌릴 때 호스트 네임을 주는 경우 “Invalid Host header”를 낸다.
다음을 vue.config.js의 devServer에 allowedHosts: "all"을 추가하면 된다.
devServer: {
port: 8888, // 변경하려는 포트 번호로 대체
allowedHosts: "all",
}
vue.js로 작성한 코드를 yarn serve로 dev server를 돌릴 때 호스트 네임을 주는 경우 “Invalid Host header”를 낸다.
다음을 vue.config.js의 devServer에 allowedHosts: "all"을 추가하면 된다.
devServer: {
port: 8888, // 변경하려는 포트 번호로 대체
allowedHosts: "all",
}
import { ethers } from 'ethers';
import contract_ABI from './abi/contract_ABI.json';
const provider = new ethers.JsonRpcProvider("http://mainnet.dasomoli.org:8545");
const contract_address = "0x1234567890123456789012345678901234567890";
const contract = new ethers.Contract(contract_address, contract_ABI, provider);
const balanceOf = contract.balanceOf(account_address, { blockTag: 12345678 });
위처럼 호출 시 blockTag: 와 함께 blockNumber를 주면 된다.
ethers.js v5 기준
const contract = await ethers.getContractAt("DasomOLIContract", contract_address);
// DasomEvent(type arg1, ...)
const filter = contract.filters.DasomEvent();
const currentBlock = await ethers.provider.getBlockNumber();
const fromBlock = currentBlock - 86400;
const events = await ethers.provider.getLogs({
...filter,
fromBlock: fromBlock,
toBlock: currentBlock,
});
if (events.length > 0) {
events.forEach((event: Log) => {
console.log(`Dasom event found in block ${event.blockNumber}:`);
console.log(`Transaction Hash: ${event.transactionHash}`);
console.log(`Transaction data: ${event.data}`);
const parsedLog = contract.interface.parseLog(event);
const args = parsedLog.args;
const arg1 = args.arg1;
console.log(`Log Data:`, parsedLog.args);
console.log('--------------------------');
});
}
맥에서 설치는 다음과 같다. 우분투는 아마도 apt-get install 을 사용할 것이다.
$ brew install jq
사용법은 값을 얻고 싶은 필드 키를 주면 된다. 뒤에 입력 파일 이름을 주지 않으면 stdin을 입력으로 받는다.
jq “.key” [intput filename]
따라서 curl 이나 echo, cat 등으로 출력을 파이프로 넘겨서 stdin 입력으로 jq에 넘겨서 원하는 데이터를 얻으면 된다. 예를 들어 다음과 같은 데이터를 curl을 통해 얻었다고 하자.
$ curl -X POST "https://login.dasomoli.org/login/2fa" -H "accept: application/json;charset=UTF-8" -H "X-AUTH-MOBILE: true" -H "Content-Type: application/json;charset=UTF-8" -d "{ \"otpCode\": \"123456\", \"password\": \"PASSWORD\", \"userId\": \"dasomoli\"}"
{
"resultCode": "success",
"resultMessage": "Successful",
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqdXN0aW55IiwiaW5mbyI6eyJ1c2VySWQiOiJqdXN0aW55IiwibmFtZSI6Ikp1c3RpbiIsImFjY291bnQiOiIweEY2NTUwZTk4ZTVDZUFiRjVkRmQ4NTcxYzY3MGI1Zjg0M0U4OTMzNzAiLCJzeW1ib2wiOiJLU1RBX0RFViIsImVtYWlsIjoianVzdGluLnlhbmdAY3J5cHRlZC5jby5rciIsImxvZ2luVGltZSI6MH0sInJvbGVzIjoiUk9MRV9VU0VSIiwiaWF0IjoxNjk3NDQxMTY3LCJleHAiOjE2OTc0NDQ3Njd9.XVT7RIKybB0hgYzcJvZx9voGlolza83RrxuCsK0i-vo",
"refreshToken": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2OTc0NDExNjcsImV4cCI6MTY5ODA0NTk2N30.auHUC75qf-Xz--e8JAKvtosaYnUB_Hx5-RKTUZyC-ZM"
}
}
여기서 data 안에 있는 accessToken 값을 얻고 싶다면, 다음과 같이 하면 된다.
$ curl -X POST "https://login.dasomoli.org/login/2fa" -H "accept: application/json;charset=UTF-8" -H "X-AUTH-MOBILE: true" -H "Content-Type: application/json;charset=UTF-8" -d "{ \"otpCode\": \"123456\", \"password\": \"PASSWORD\", \"userId\": \"dasomoli\"}" | jq ".data.accessToken"
쉘 스크립트 내에서 위의 값을 ACCESS_TOKEN 이라는 변수에 넣었을 때, 앞 뒤로 붙는 ” 문자를 없애고 싶다면 다음과 같이 한다.
ACCESS_TOKEN="${ACCESS_TOKEN//\"/}"
assert with an argument that evaluates to false.unchecked { ... } block.5 / 0 or 23 % 0)..pop() on an empty array.bytesN or an array slice at an out-of-bounds or negative index (i.e. x[i] where i >= x.length or i < 0).(await ethers.provider.getBlock('latest')).timestamp
await ethers.provider.getBlockNumber()
const cf = await ethers.getContractFactory('DasomContract');
const dasomContract = await cf.deploy();
if (!(await dasomContract.deployed())) {
throw new Error(
'Error occurred during deploying the contract',
);
}
const hwwallet = "0xda50da50da50da50da50da50da50da50da50da50";
// impersonating HW wallet
await network.provider.request({
method: "hardhat_impersonateAccount",
params: [hwwallet],
});
const _master = await ethers.getSigner(hwwallet);
_master.getFeeData = async () => {
return {
gasPrice: ethers.BigNumber.from(0),
lastBaseFeePerGas: ethers.BigNumber.from(0),
maxFeePerGas: ethers.utils.parseUnits("800", "gwei"),
maxPriorityFeePerGas: ethers.utils.parseUnits("800", "gwei"),
};
};
master = _master;
console.log('master: ', await master.getAddress());
아래처럼 $'<escaped character>’ 형식으로 escaped character를 입력한다.
$ git mv DasomFactory.sol $'\b'DasomFactory.sol
contract 컴파일 후 bytecode(creationCode)를 얻으려면:
(await ethers.getContractFactory("DasomOLIContract")).bytecode
이걸 keccak256()으로 돌리면(ethersV5 기준)
> ethers.utils.keccak256((await ethers.getContractFactory("DasomOLIContract")).bytecode)
위는 solidity에서 다음을 하는 것과 동일하다.
keccak256(abi.encodePacked(type(DasomOLIContract).creationCode));