새로운 Truffle 프로젝트를 위해 새 디렉터리를 생성합니다. 예제에서는 key/value storage를 구현하는 스마트 컨트랙트를 만들어보기로 합니다. 이를 위해 KVStore라는 디렉터리를 생성합니다.
$ mkdir KVStore
$ cd KVStore
Truffle 프로젝트를 초기화 합니다.
$ truffle init
Starting init...
================
> Copying project files to /Users/trident/Projects/DApp/KVstore/Temp
Init successful, sweet!
Try our scaffold commands to get started:
$ truffle create contract YourContractName # scaffold a contract
$ truffle create test YourTestName # scaffold a test
http://trufflesuite.com/docs
다음과 같은 디랙터리와 파일이 생성되니다.
$ tree
.
├── contracts
├── migrations
├── test
└── truffle-config.js
4 directories, 1 file
다음 명령으로 KVStore 컨트랙트를 생성합니다.
$ truffle create contract KVStore
아래와 같이 KVStore.sol 파일이 생성됩니다.
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
contract KVStore {
constructor() public {
}
}
스마트 컨트랙트 작성
Key/Value를 저장하는 set 함수와 Key를 이용하여 저장된 값을 읽어오는 get 함수를 다음과 같이 작성합니다.
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
contract KVStore {
mapping(string => string) store;
function get(string memory key) public view returns(string memory) {
return store[key];
}
function set(string memory key, string memory value) public {
store[key] = value;
}
}
설정
컴파일 및 배포를 위해서 truffle-config.js 파일을 수정합니다.
첫 번째로 지갑 설정이 필요합니다. 코드 상에 개인키를 노출하지 않기 위해 dotenv를 사용하고 PRIVATE_KEY는 .env에 다음과 같이 저장합니다. dotenv를 사용할 경우 npm i dotenv 명령을 사용하여 설치를 해주어야 컴파일 시 에러가 발생하지 않습니다.
PRIVATE_KEY=["YOUR_PRIVATE_KEY"]
두 번째로 네트워크 설정을 진행합니다. Metadium Testnet를 사용하기 위해서는 다음과 같이 네트워크 설정을 추가합니다.