체인의정석

Express,node.js,solidity)블록체인에 있는 데이터 가져와서 표시하기 본문

개발

Express,node.js,solidity)블록체인에 있는 데이터 가져와서 표시하기

체인의정석 2021. 1. 1. 02:34
728x90
반응형

1. 스마트 컨트렉트

 

파일의 해시값을 저장하고 불러오는 간단한 기능이다.

이때, 한번 저장된 인덱스로는 다시 저장되지 않게 조건을 걸어두었다.

pragma solidity >=0.4.22 <0.8.0;

contract patent{
    
    struct  Patents  {
        string  filehash;
        bool isFirst;
    }
    
    mapping (uint=>Patents) public filesaved;

    event Savefile(address sender, string filehash);
  
    function _savefile(string memory _filehash, uint board_idx) internal {
        require(filesaved[board_idx].isFirst == false);
        filesaved[board_idx].filehash = _filehash;
        filesaved[board_idx].isFirst = true;
        emit Savefile(msg.sender, _filehash);        
    }
    
    function savefile(string memory _filehash, uint board_idx) public returns (bool) {
       _savefile(_filehash, board_idx);
        return true;
    }
    

}

 

이번에는 여기서 mapping으로 되어있는 부분에 게시판 index를 넣고 filesaved구조체에 있는 데이터를 가져와서 사용하도록 할 것이다.

 

2. 블록체인에서 정보를 가져오는 부분

router.post('/get_blockchaindata', async function(req,res){
    let rb = req.body;
    let bidx = rb.bidx;
    let blockchain_result = await fileSaved(bidx); //board_idx로 추후 수정
    console.log("체크3",blockchain_result)
    if(blockchain_result){
        console.log("Blockchain search Success")
    }else{
        res.send(JSONResponse.successFalse({message : "블록체인에 정보가 저장되지 않았습니다."}))
    }
    console.log(blockchain_result);
    res.send(JSONResponse.successTrue({"blockchain_contract_hash":blockchain_result.filehash}));
})

await에서 web3로 블록체인 데이터를 불러오는 부분 

////////call data

const fileSaved = async(board_index) => {
        console.log("fileSaved_앞부분",board_index)
    var web3 = new Web3(new Web3.providers.HttpProvider(endpoint));
    let contract = new web3.eth.Contract(patentABI, contractAddressP); 
    let file_saved = await contract.methods.filesaved(board_index).call();
    console.log( "filesaved 결과1",file_saved);
    return file_saved;
}

3. 가져온 정보를 바탕으로 클라이언트단에서 블록체인에서 가져온 정보를 표시해 주도록 한다.

    function get_blockchaindata(index){
        $.ajax({
            type : "POST",
            url : 'blockchain/get_blockchaindata',
            data : {"bidx": index},
            success: function(r){   
                if(r.success){
                    console.log("결과",r.data[0]);
                    $("#file_hash_blockchain").val(r.data[0].blockchain_contract_hash);
                }else{
                    alert(r.message);
                }
            }  
        })
    }
728x90
반응형
Comments