Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 블록체인
- 관계형데이터베이스
- mysql
- Nodejs 프로젝트
- Blockmonkey
- DataStructure
- 컴퓨터사이언스
- Javascript
- hyperledger
- 블록체인개론
- 제로초
- SQL
- 파이썬 알고리즘
- javascirpt
- 하이퍼레저
- 블록몽키
- javascript 초급
- js
- 깃
- hyperledger fabric
- 컴퓨터공학개론
- 생활코딩
- 자바스크립트
- 생활코딩 nodejs
- javascript 게임
- 프로그래밍
- algorithum
- nodejs
- al
- vs code
Archives
- Today
- Total
Blockmonkey
[Ethereum] Truffle 을 활용한 스마트컨트렉트 개발 본문
트러플을 활용한 개발을 실습한다.
개인적인 연습과정을 기록하므로 상세한 설명은 추후 추가하도록 할 예정이다.
0. 사전준비
- Truffle
- Node
- NPM
- Metamask
1. 원하는 폴더에 이동하여 아래 명령어를 통해 트러플로 init한다.
truffle init
2. 기본 구조가 생성된다. contracts 폴더 내에 myContract를 하나 생성하고 테스트를 진행해보자. MyContract 파일에 아래 코드를 입력한다.
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
contract MyContract {
struct Student {
string name;
uint age;
}
mapping(uint256 => Student) studentInfo;
function setStudentInfo(uint _studentId, string memory name, uint age) public {
Student storage student = studentInfo[_studentId];
student.name = name;
student.age = age;
}
function getStudentInfo(uint256 _studentId) public view returns (string memory, uint) {
return (studentInfo[_studentId].name, studentInfo[_studentId].age);
}
}
3. migrations 폴더에 "2_deploy_contracts.js"파일을 생성하고, 아래 코드를 붙여넣어주자.
const MyContract = artifacts.require("MyContract");
module.exports = function (deployer) {
deployer.deploy(MyContract);
};
4. 아래 명령어를 통해 develop 모드로 진입하고 가상의 서버를 트러플이 열어준다. (10개의 Ledgers 를 생성해준다.)
truffle develop
5. 이제 Develop모드에 진입했으니 새로운 터미널을 하나 더 열고, 개발하는 폴더로 이동하여 아래 명령어를 입력해 로그창을 띄워놓자.
truffle develop --log
6. 자, 다시 truffle develop console로 돌아와, 아래 명령어를 입력한다.
migrate
7. [참고]develop console에 다음 명령어를 입력해 존재 원장 목록을 확인할 수 있다.
web3.eth.getAccounts()
8. [참고]첫번째 계정의 잔고를 확인해보자. 주소는 위 명령어로 인해 도출된 10개의 레저(원장) 중 첫번째 주소다. (wei단위로 출력된다.)
web3.eth.getBalance('0x8aC78DCeFB5989E6C190235f84B0b6A9AA60a8Ea')
9. [참고]다음 명령을 통해 출력된 숫자를 ether 단위로 변경해서 볼 수 있다.
web3.utils.fromWei("99998967970000000000", "ether")
10. 배포된 MyContract를 이제 호출해보자.
//배포한 MyContract를 app 전역변수에 담아준다.
MyContract.deployed().then(function(instance) { app = instance })
//setStudentInfo 함수를 사용해 student를 추가해주자. 매개변수값 + 어떤 레저로 불러와서 쓰는 것인지 명시
app.setStudentInfo(1, "monkey", 29, {from : '0x8aC78DCeFB5989E6C190235f84B0b6A9AA60a8Ea'})
//getStudentInfo 함수를 통해 방금 생성한 id 값이 1인 학생 정보를 확인해보자.
app.getStudentInfo(1)
-----
11. 기타 참고 명령어
//배포 후 재 배포할 때 사용 재 컴파일 -> development 서버에 재 배포함.
truffle migrate --compile-all --reset --network development
//truffle console 사용해서 컨트렉트 호출하기
//1. 변수에 할당함. 매개변수 = deployed contract Address
let hello = await HelloWorld.at("0x4Bc83f4dB815EE98479b8245B2f5078aCdba4Dd4")
//2. 호출
hello.say()