일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 러스트 기초 학습
- ethers typescript
- ethers v6
- Vue.js
- SBT표준
- 프록시배포구조
- 러스트기초
- 스마트컨트렉트프록시
- nest.js설명
- 컨트렉트 배포 자동화
- chainlink 설명
- ethers
- rust 기초
- 러스트 기초
- vue기초
- ethers websocket
- multicall
- ambiguous function description
- 오블완
- 컨트렉트 동일한 함수이름 호출
- 머신러닝기초
- 스마트컨트렉트테스트
- ethers type
- Vue
- 스마트 컨트렉트 함수이름 중복
- git rebase
- 스마트컨트렉트 예약어 함수이름 중복
- 티스토리챌린지
- 체인의정석
- 스마트컨트렉트 함수이름 중복 호출
- Today
- Total
체인의정석
hardhat 사용법 정리 02- ERC721 배포해보기 본문
이어서 하드햇과 오픈제플린 라이브러리를 연결하는 부분부터 진행을 하도록 한다.
https://docs.openzeppelin.com/upgrades-plugins/1.x/hardhat-upgrades
Error HH411: The library @openzeppelin-solidity/contracts, imported from contracts/exampleERC721.sol, is not installed. Try installing it using npm.
위를 참고하여 시키는 대로 npm install을 해주고 config파일에도 조건을 추가해주엇다. 그러나 위와 같은 에러가 발생한다.
구글 검색을 통해 에러를 확인해보았더니 오픈제플린을 임포트해오는 구문의 문제라고 한다.
다시한번 2.2.0 버전으로 설치를 하고
npm i openzeppelin-solidity@2.2.0
노드모듈에서 @openzeppelin을 들어가서 버전과 경로를 확인 한 후
import "@openzeppelin/contracts/token/ERC721/ERC721Full.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
import "hardhat/console.sol";
이렇게 경로명을 수정하였다.
경로가 openzeppelin-solidity로 되어 있었는데 다른 소스코드를 참고하다보니 이부분이 수정이 안되어서 에러가 난것 같다.
npx hardhatcompile
Compiling 17 files with 0.5.0
Compilation finished successfully
이러한 메세지가 뜨면서 컴파일 성공, 이제 작성된 스크립트대로 배포를 테스트 할 차례이다.
cmd 창을 하나 더 띄우고
(base) % npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
Accounts
========
WARNING: These accounts, and their private keys, are publicly known.
Any funds sent to them on Mainnet or any other live network WILL BE LOST.
Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH)
Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
이렇게 내부적으로 지원하는 프라이빗 네트워크 먼저 구동시킨다.
(base) lambda256@ethan nftBridge % npx hardhat run --network localhost scripts/sample-script.js
Greeter deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3
Error: too many arguments: in Contract constructor (count=3, expectedCount=1, code=UNEXPECTED_ARGUMENT, version=contracts/5.5.0)
파일 이름은 sample-script에서 나중에 deploy이름으로 바꿀 예정이고 일단 생성자의 인자값 부터 알려주어야 하는 상황이다.
(base) @ nftBridge % npx hardhat run --network localhost scripts/sample-script.js
Greeter deployed to: 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
exampleERC721 deployed to: 0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9
일단 인자값을 맞추주니 다음과 같이 배포에 성공하였다.
이제 성공한 배포코드를 따로 파서 deploy.js를 만들어 보도록 하겠다.
// We require the Hardhat Runtime Environment explicitly here. This is optional
// but useful for running the script in a standalone fashion through `node <script>`.
//
// When running the script with `npx hardhat run <script>` you'll find the Hardhat
// Runtime Environment's members available in the global scope.
const hre = require("hardhat");
async function main() {
// Hardhat always runs the compile task when running scripts with its command
// line interface.
//
// If this script is run directly using `node` you may want to call compile
// manually to make sure everything is compiled
// await hre.run('compile');
// We get the contract to deploy
const ExampleERC721 = await hre.ethers.getContractFactory("exampleERC721");
const exampleERC721URI = "http://babyapeclub.io/SecretFolderWithMetadata/1.json"
const exampleERC721 = await ExampleERC721.deploy("ExampleNFT","ENFT",exampleERC721URI);
await exampleERC721.deployed();
console.log("exampleERC721 deployed to:", exampleERC721.address);
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
기본적으로 제공되는 템플릿에 그냥 오픈씨에 있는 아무 메타데이터나 집어와서 만들어 보았다.
이 부분을 빼서 deploy 스크립트를 넣으니 배포가 잘 됨이 확인이 되었다.
(base) % npx hardhat run --network localhost scripts/deploy_exampleERC721.js
exampleERC721 deployed to: 0x5FC8d32690cc91D4c39d9d3abcBD16989F875707
배포를 하고 나니 artifacts에 ABI도 따로 관리가 됨을 볼 수 있었다.
이렇게 json에 ABI 정보가 담겨있다.
그리고 이전에 띄워놓았던 창을 보면 컨트렉트가 배포됨을 확인할 수 있다.
'블록체인 > NFT & BRIDGE' 카테고리의 다른 글
ERC721의 safeTransferFrom (0) | 2022.02.14 |
---|---|
Solidity 에서 token URI 와 toString 라이브러리 (0) | 2022.02.09 |
ERC721 Receiver에 대한 설명 (0) | 2022.02.08 |
ERC721) token URI에 대한 코드 분석 (0) | 2022.02.08 |
Waffle 사용기 - ERC721 테스트 코드 작성하기 (0) | 2022.01.28 |