저는 개발자로 일한 지 10년이 넘었습니다. 저는 운이 좋게도 Apache 커미터이자 PPMC가 되었고, Google에서 연설하고, Manning Publications에 책을 집필하는 등 몇 가지 일을 했습니다. 취업 시장이 좋지 않고 사람들이 좋은 일자리를 찾기 위해 고군분투하고 있기 때문에 저는 블록체인에서 사업 기회를 보기 시작했습니다. 더 구체적으로 말하면 다른 사람들이 자신의 사업을 구축하도록 도울 수 있는 좋은 기회가 있다고 봅니다. 지난 몇 주 동안 제가 배운 몇 가지 기술적인 내용을 공유하고 싶습니다.
저는 분산 애플리케이션(DApp)의 장단점을 이해하면서 작업해 왔습니다. 구축을 시작하기 위해 선택할 수 있는 도구가 많이 있습니다. 이 기사에서는 로컬에서 스마트 계약을 구축, 배포 및 상호 작용하는 독선적인 접근 방식을 제공합니다. 웹 기반 도구는 없고 명령줄만 있습니다.
전제 조건:
저는 Node 18.17을 사용하고 있지만 이후 버전의 Node에서도 작동할 것입니다.
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
$ npm init -y
$ npm install --save-dev hardhat
npx는 프로젝트에 로컬로 설치된 실행 파일을 실행하는 데 사용됩니다. 프로젝트별로 버전을 제어할 수 있도록 각 프로젝트에 로컬로 Hardhat을 설치하는 것이 좋습니다.
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
성공적으로 생성되면 이 내용을 볼 수 있습니다.
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
모든 것이 예상대로 실행되었는지 확인하려면 현재 디렉터리에 두 개의 필드가 표시되어야 합니다.
$ ls -lta package.json hardhat.config.js
Hardhat을 사용하면 Solidity 소스 파일(.sol)을 계약 디렉터리에 저장할 수 있습니다. 우리는 Storage라는 첫 번째 간단한 스마트 계약을 작성할 것입니다. 이를 통해 사람들은 나중에 검색할 수 있는 값을 저장할 수 있습니다. Hardhat과의 또 다른 스타터 계약의 변형입니다. 모든 움직이는 부분을 이해하기 위해 수동으로 프로세스를 진행하고 있습니다.
$ mkdir contracts && vim contracts/Storage.sol
// contracts/Storage.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Storage { uint256 private _value; // Emitted when the stored value changes event ValueChanged(uint256 value); // Stores a new value in the contract function store(uint256 value) public { _value = value; emit ValueChanged(value); } // Reads the last stored value function retrieve() public view returns (uint256) { return _value; } }
위 내용을 파일에 쓴 후 :wq 또는 :x를 사용하여 vim을 닫습니다
EVM(Ethereum Virtual Machine)은 Solidity 코드를 직접 실행할 수 없습니다. 먼저 EVM 바이트코드로 컴파일해야 합니다. Storage.sol 계약은 Solidity 0.8을 사용하므로 먼저 적절한 solc 버전을 사용하도록 Hardhat을 구성해야 합니다. hardhat.config.js에 Solidity 0.8 solc 버전을 지정합니다.
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
스토리지 계약을 배포하기 위한 스크립트를 생성하겠습니다. 이 파일을 scripts/deploy.js로 저장하겠습니다.
$ npm init -y
$ npm install --save-dev hardhat
우리는 스크립트에서 Ether를 사용하므로 Ether와 @nomicfoundation/hardhat-ethers 플러그인을 설치해야 합니다.
$ npm install --save-dev @nomicfoundation/hardhat-ethers 에테르
@nomicfoundation/hardhat-ethers 플러그인을 사용하는 구성을 추가해야 합니다.
이제 안전모 구성은 다음과 같습니다.
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
계약을 배포할 수 있는 환경이 필요합니다. 이더리움 블록체인("메인 네트워크"를 뜻하는 "메인넷"이라고도 함)을 사용하려면 Ether(기본 통화) 형태의 실제 돈을 지출해야 합니다. 이로 인해 새로운 아이디어나 도구를 시험해 볼 때 좋지 않은 선택이 됩니다.
이 문제를 해결하기 위해 다수의 "테스트넷"("테스트 네트워크"용)이 존재합니다. 그러나 여전히 개인 키 관리, 12초 이상의 블록타임 및 실제로 이 무료 Ether를 확보해야 합니다.
개발 중에는 로컬 블록체인을 사용하는 것이 더 좋습니다. 이는 귀하의 컴퓨터에서 실행되고 필요한 모든 Ether를 제공하며 즉시 블록을 채굴합니다.
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
스마트 계약 배포
$ ls -lta package.json hardhat.config.js
스토리지 계약이 배포되면 즉시 사용할 수 있습니다.
우리는 Hardhat 콘솔을 사용하여 로컬 호스트 네트워크에 배포된 스토리지 계약과 상호 작용할 것입니다.
배포 스크립트에 표시한 스토리지 계약의 주소를 지정해야 합니다.
Hardhat이 콘솔 세션을 연결할 네트워크를 명시적으로 설정하는 것이 중요합니다. 그렇지 않으면 Hardhat은 기본적으로 스토리지 계약이 배포되지 않는 새로운 임시 네트워크를 사용하게 됩니다.
$ mkdir contracts && vim contracts/Storage.sol
첫 번째 함수인 store는 정수 값을 받아 계약 저장소에 저장합니다. 이 기능은 블록체인 상태를 수정하므로 이를 실행하려면 계약에 트랜잭션을 보내야 합니다.
숫자 값으로 store 함수를 호출하는 트랜잭션을 보내겠습니다.
$ nvm install 18.17
다른 함수는 검색(retrieve)이라고 하며 계약에 저장된 정수 값을 반환합니다. 이는 블록체인 상태에 대한 쿼리이므로 트랜잭션을 보낼 필요가 없습니다.
$ mkdir hello-world && cd hello-world
쿼리는 상태만 읽고 거래를 보내지 않기 때문에 보고할 거래 해시가 없습니다. 이는 쿼리를 사용하는 데 Ether 비용이 들지 않으며 모든 네트워크에서 무료로 사용할 수 있음을 의미합니다.
블록체인에서 값을 쓰고 읽는 방법을 보여주기 위해 최소한의 스마트 계약을 생성하여 로컬 블록체인 인스턴스에 배포했습니다. 이 기사가 도움이 되었다면 좋아요 및/또는 공유를 부탁드립니다.
제안이나 수정 사항이 있으면 언제든지 댓글로 남겨주세요. 저는 퇴근 전후에 이 기사를 작성하여 최대한 빨리 꺼냅니다.
감사합니다!
참고:
안전모 문서
위 내용은 OpenZepplin 및 Solidity를 사용하여 몇 분 안에 스마트 계약 구축 및 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!