본문 바로가기
  • 인공지능
  • 블록체인
  • 정보보안
신기술분석/블록체인

블록체인 Dapp 만들기 #7

by nathan03 2021. 7. 15.
반응형

# 트러플 & 컨트랙트 배포

1. truffle 폴더 만들기 

2. truffle 초기화 하기 
   - truffle init 명령어 실행시 오류 발생 (파워쉘 관리자 권한 실행) 

Windows에서 정책적으로 Powershell 실행에 제한이 있어서 불가능하다. 관리자 권한이 있는 powershell로 ExecutionPolicy를 RemoteSigned로 변경해주는 것으로 해결이 가능하다. 

 

VSCode 로 열기 

 

파일/폴더명비고

contracts solidity로 개발된 스마튼 컨트랙트 소스 파일 폴더
contracts/Migrations.sol 배포를 도와주는 solidity 파일(삭제 하지 마세요!) 확인필요!
migrations 배포를위한 스크립트 파일 폴더
migrations/1_initial_migration.js Migrations.sol 을 배포하는 스크립트
test 개발된 컨트랙트를 테스트 하기 위한 폴더
truffle.js truffle 설정 파일 (default)
truffle-config.js truffle 설정 파일 (truffle.js 파일이 없는경우 적용됨)

 

Contract 폴더에 MyContract.sol 파일 만들기 

pragma solidity ^0.4.24;

contract MyContract {
    struct Student {
        string studentName;
        string gender;
        uint age;
    }
    
    mapping(uint256 => Student) studentInfo;
    
    function setStudentInfo(uint _studentId, string _name, string _gender, uint _age) public {
        Student storage student = studentInfo[_studentId];
        
        student.studentName = _name;
        student.gender = _gender;
        student.age = _age;
    }
    
    function getStudentInfo(uint256 _studentId) public view returns (string, string, uint) {
        return (studentInfo[_studentId].studentName, studentInfo[_studentId].gender, studentInfo[_studentId].age);
    }
}


Migrations 폴더에 2_deploy_contract.js 파일 만들기 

const MyContract = artifacts.require("./MyContract.sol");

module.exports = function (deployer) {
  deployer.deploy(MyContract);
};

 

truffle develop 실행 

 

파워쉘 하나를 더 띄워서 truffle develop --log 실행 

 

migrate 을 통해 2개의 Contract를 배포 

※ 에러,,,,,,,,, Truffle 버전 0.5.16, 사용 현재 Contract 는 ^0.4.24 버전을 사용

현재 Truffle 버전이 0.5.16 이고 위 Contract 는 ^0.4.24를 사용해서 문제임 

해결책 : Truffle 을 예전 버전으로 설치 하거나, Contract 버전을 올려야함

 삭제 : npm uninstall -g truffle
 이전 버전 설치 : npm install -g truffle@4.1.15 

 

다시 migrate 배포시 문제 발생 (아마도 node.js 버전을 최신 14 이상으로 썼더니 발생한듯...!!)

 

해결책 : 노드 14.16.0 버전을 삭제하고 10 버전으로 재설치 후 truffle develop -> migrate  배포 성공 

Truffle 이더리움 노드에 두개의 컨트랙트 소스 배포 완료 

트랜잭션 해시 값 : 0xc3a968c31c45842325be93276cfb3fdee30f9b6d4aa1db11b5e1084cbe43734c
배포된 주소 : 0x3458393ff378e3cfe9da068643728a34522875f2

최종 로그 확인 

Contract 수정후 재 배포시, 새로운 Contract 주소로 변경된다. (블록체인에서는 수정 불가)

migrate --compile-all --reset  // 모든 컨트랙트를 재컴파일 하고, 마이그레이션 폴더안에 있는 스크립트를 강제적으로 재실행 

VsCode 에서 build 폴더 생성 확인 

# 트러플 콘솔 사용 하기 

1. web3 API 사용 
web3.eth.accounts (계정 10개 확인)

2. 계정에 있는 잔액 확인 하기 
web3.fromWei(web3.eth.getBalance(web3.ethc.accounts[0]), "ether").toNumber()

3. truffle 에 배포한 Contract를 불러오고 사용하기 

MyContract.deployed().then(function(instance) { app = instance; })
// undefined 가 나오면 정상

app 

app.setStudentInfo(1111, "ssss", "male", 7, {from: web3.eth.accounts[1]})

로그 확인 

두번째 계정의 잔액이 100 이더가 아니고 수수료로 소모된걸 확인 

app.getStudentInfo(1111) 를 통해 set으로 입력한 값 확인 

종료 (truffle develop 는 .exit / 모니터링 ctrl+c 2번)

반응형

'신기술분석 > 블록체인' 카테고리의 다른 글

블록체인 Dapp 만들기 #9  (0) 2021.07.15
블록체인 Dapp 만들기 #8  (0) 2021.07.15
블록체인 Dapp 만들기 #6  (0) 2021.07.15
블록체인 Dapp 만들기 #5  (0) 2021.07.15
블록체인 Dapp 만들기 #4  (0) 2021.07.14

댓글