inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편

요약

강의 다 마치고 추가적으로 function을 추가하려고 하는데요

370

홍정아

작성한 질문수 7

0

제가 하고자 하는 것은 컨트랙트 배포한 사람과 현재 메타마스크 연결 계정이 같으면

'admin mode'라고 웹에 표시하고 싶고 아니면 'buyer mode'라고 웹에 표시하고 싶은데

if 문 안의 조건이 !==를 하든 ===을 하든 똑같은 결과를 내보내네요. 그리고 else문을 쓰면 역시 항상 else문이 실행이 되구요..! 아그리고 address는 작은따옴표로 쓸 시 비교가 불가능 한건가요?

listenToEvents: function() {

App.contracts.RealEstate.deployed().then(function(instance){

instance.LogBuyRealEstate({},{fromBlock:0, toBlock:'latest'}).watch(function(error,event){

if(!error){

$('#events').append(''+event.args._buyer+'계정에서'+event.args._id+'번 매물을 매입했습니다.'+'');

        console.log(event.args._buyer);

if(event.args._buyer=="0x461a9dc0c12a9110b07440a148ec5f9e8523c909"){

$('.buyer-or-admin').text("Admin mode");

}else{

$('.buyer-or-admin).text("Buyer mode");

}

}else{

console.error(error);

}

App.loadRealEstates();

})

})

dapp Ethereum blockchain

답변 5

0

SEJONG IT EDU

괜찮아요 ^_^

0

홍정아

감사합니당!!! 내일 한번 해볼게여!!! (귀찮으실텐데 죄송해여?)

0

SEJONG IT EDU

그렇죠. 이 방식은 json파일에서 매물을 불러오는거라 이 방식을 고수하면서 매물을 추가하고싶으면

1. json파일에 새로운 매물을 추가하고 기존의 real-estate.json 파일과 바꾸거나 

2. 매물 추가 버튼을 만들고 real-estate.json 파일에 새로운 오브젝트를 추가하게끔 만드셔야겠네요. (예: https://stackoverflow.com/questions/28661281/add-object-to-json-file-node-js)

간단한 방식의 예제라 json파일을 썼지만 관계형 데이타베이스나(MySql) 몽고디비같은 곳에 매물 데이터를 저장하고 불러와도 되겠죠 :)

자료 저장하는것까지 탈중앙화식으로 하고싶다면 블록체인 기반 파일 저장 프로토콜인 IPFS를 사용할 수도 있어요. 다음 강좌에서 다룰 내용입니다.

0

홍정아

되네요!!!!! 다른 function 추가해보고 싶은데

혹시 만약에 admin 모드에서 매물을 추가 하고 싶으면 어떻게 해야하나요? 예를 들어 admin에서만 보이는 매물추가 버튼이 필요할 거구 real-estate.json 파일에 매물 데이터가 추가되어야 겠죠??? ㅠ 어떻게 해야할까요

0

SEJONG IT EDU

좋은 질문, 좋은 시도입니다. 제가 제대로 이해했다면 일단 사이트를 실행했을 때 현재 메타마스크에 선택된 계정이 배포된 주소로 쓰인 계정이면 admin mode 라고 하고싶으신거 같은데요. 참고로 event.args._buyer는 매물을 매입한 사람의 계정을 불러오는거라 만약 배포된 계정으로 매입하지 않았으면 if문 안으로 절대 들어가지 않겠죠.
web3의 getAccounts를 쓰는게 더 나을 것 같아요. 팁을 드리자면 listenToEvents 함수에서 처리하는 것 보다 아예 다른 함수를 만드시고 예:

checkAdminOrBuyer: function() {
    web3.eth.getAccounts(function(error, accounts) {
         if (error) {
             console.log(error);
         }
         var account = accounts[0];  // 현재 메타마스크에 선택된 계정
         if (account.toUpperCase() === '0x461a9dc0c12a9110b07440a148ec5f9e8523c909'.toUpperCase()) {
             $('.buyer-or-admin').text("Admin mode");
        } else {
            $('.buyer-or-admin').text("Buyer mode");
        }
    });
},

그리고 이 함수를 initContract 함수에서 불러오는걸로 해보세요~!

[긴급] 전체 소스코드 파일 있었던거 같은데 어디서 받나요?

0

240

2

블록체인 강의

0

175

2

강의내용 질문입니다 메타마스크

0

277

1

truffle develop 명령 오류

0

414

0

메타마스크 창이 안뜨네요 ㅜ

0

463

2

전제 소스 코드

1

275

0

miner.stop() 오류

0

298

0

매입 실행 시 메타마스크와 연동이 안되고 창이 안뜨고 있네요

0

654

2

코드가 다운받아지지 않습니다.

0

256

1

git에 올리신 자료 관련

0

329

2

geth rpc 에러입니다.

0

548

2

수업 자료

1

283

1

truffle 버전

2

248

0

Geth의 버전이 업데이트 되면서 실행되지 않았습니다. 의 해결법 (nodestart)

1

386

1

TypeError: Contracts.compile is not a function / powershell에 migrate 시 오류발생

0

367

1

./nodestrart.cmd

0

273

1

truffle migrate 실행 시 오류

0

254

0

nodestart.cmd 파일 실행시 오류

0

758

1

필드 초기화 질문

0

217

0

truffle 이렇다는데,, 업데이트 하게되면 강의를 들을수 있나요..?

0

212

0

puppeth 명령어 실행이 안됩니다.

0

436

1

truffle init 시 에러

0

208

0

nodestart 질문

0

487

1

메타마스크 질문

0

175

0