일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스마트컨트렉트 예약어 함수이름 중복
- 머신러닝기초
- multicall
- 티스토리챌린지
- git rebase
- 스마트컨트렉트 함수이름 중복 호출
- ethers type
- ethers v6
- ambiguous function description
- nest.js설명
- 스마트컨트렉트테스트
- 체인의정석
- 스마트 컨트렉트 함수이름 중복
- SBT표준
- ethers websocket
- 러스트 기초
- Vue
- vue기초
- chainlink 설명
- Vue.js
- 오블완
- 컨트렉트 배포 자동화
- 러스트기초
- 프록시배포구조
- ethers
- rust 기초
- ethers typescript
- 스마트컨트렉트프록시
- 러스트 기초 학습
- 컨트렉트 동일한 함수이름 호출
- Today
- Total
체인의정석
스마트컨트렉트 배포 프로그램 고도화 및 오류해결) Top-level 'await' expressions are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher 본문
스마트컨트렉트 배포 프로그램 고도화 및 오류해결) Top-level 'await' expressions are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher
체인의정석 2022. 4. 26. 14:42https://www.youtube.com/channel/UCHsRy47P2KlE749oAAjb0Yg
해당 에러가 발생한 계기는 현재 ts 파일 하나당 하나의 트랜잭션으로 분리하여 운영중인데, 이를 상위 1개 폴더에서 inquirer 를 사용하여 한번에 배포를 관리할 수 있는 프로그램을 만들 때 발생하였다.
해당 에러의 경우 해결을 위해서는 ts config파일에서 지원하는 모듈 버전을 올려주거나 아니면 문법을 바꾸어야 했다.
https://github.com/pnp/pnpjs/issues/1278
설정값을 바꾸고 나니 에러가 많이 발생하였으며, 현재 사용중인 모듈이나 환경 또한 hardhat + waffle 이였기 때문에 케이스가 별로 없다. 따라서 다른 부분에 영향을 주지 않고서도 이를 동기화 시켜서 이전 동작이 완료되기 전까지는 다음 트랜잭션이 일어나지 않도록 하였다.
import { deploy_a } from "./deploy_A";
import { deploy_b } from "./deploy_B";
const deployAll = async () => {
const aAddress = await deploy_a(process.env.EXAMPLE_CONTRACT_ADDRESS!)
const bAddress = await deploy_b(aAddress)
console.log(bridgeAddress);
}
이런식으로 각각 파일에서 export를 정의해온 배포 / 세팅 스크립트를 불러올 수 있었다.
이제 여기에 inquirer를 만들면 파일 하나만 실행하면 콘솔에서 관리자가 선택적으로 데이터를 체크해가면서 안정적인 검토 후 자동화 배포가 가능하게 된다.
import { run, ethers } from "hardhat";
export async function deploy_A(aAddress:string) {
await run("compile");
if(process.env.GAS_FIXED == "fixed") {
const a = await ethers.getContractFactory("ERC721Custody");
const A = await a.deploy(bridgeAddress,{gaslimit: process.env.GAS_LIMIT, gasPrice: process.env.GAS_PRICE});
await A.deployed();
console.log(`export const A_CONTRACT_ADDRESS = "${A.address}";`);
const setTx = await A.setTx(A.address,{gasLimit: 100000, gasPrice: '10000000'});
console.log(await setTx.wait());
return erc721Custody.address;
} else {
.
.
.
}
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
const aAddress = process.env.A_ADDRESS!;
deploy_custody(aAddress)
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
해당 파일은 위와 같이 각각 만들면된다.
이렇게하면 총 2가지 방안으로 배포/운영이 가능하다.
1. 파일 실행시 함수가 실행되어 각각 단계별 실행 가능
2. export로 정의해둔 함수를 상위 파일에서 불러와서 한번에 동기식으로 배포.
3. inquirer를 중간에 추가하여서 관리자가 직접 데이터를 체크해 가면서 상황에 맞게 배포
4. direnv를 통해 각 경로별로 서로 다른 변수를 관리
=> 이런식으로 관리하면 크로스체인 환경의 컨트렉트를 계속해서 배포 및 운영하기 용이하다.
나중엔 이런걸 관리해주는 툴이 나올수도 있겠지만, 아직은 없으므로 이러한 프로그램을 자체적으로 만드는 것은 여태까지 만들어본 배포 프로세스중에 가장 깔끔한 방법인거 같다.
'개발 > backend' 카테고리의 다른 글
VS code Ctrl+d 단축키 intelliJ에서는 Ctrl+G (0) | 2022.04.27 |
---|---|
typescript 에서 string을 숫자형으로 바꾸는 법 (0) | 2022.04.26 |
direnv 사용하여 다중 체인 관리하기 (0) | 2022.04.22 |
intelliJ IDEA 사용시작 - 기본세팅 (0) | 2022.04.22 |
Inquirer을 써서 컨트렉트 배포/운영용 프로그램 만들기 여러개의 파일 cmd에서 하나로 체크해서 넘기기 - 사전조사 (0) | 2022.04.22 |