반응형

솔리디티에서는 스트링을 비교하는 방법이 불가능하다.


따라서 우리는 두 스트링을 해쉬로 변환하여 비교하는 방법을 사용해보고자 한다.


해쉬에 이용될 함수는 keccak256함수이다.


해당하는 string A를 keccak256으로 해싱해주고 나머지 string B를 keccak256으로 해싱하여 서로를 비교하는 과정을 만들어보자.


아래 코드는 log 스트링이 왔을 때 아직 어떠한 데이터도 tranlog에 담겨있던 적이 없었다면 tranlog에 tran_data를 넣어주는 코드이다.


이때 require를 통해 스트링 비교를 해싱으로 해주고 있다.



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
32
33
pragma solidity ^0.4.8;
 
 
 
contract TransactionLOGNG{
 
    mapping (uint => mapping (uint => string)) public tranlog;
 
    
 
    event getLog(string _log, bytes32 _kec);
 
    function setTransaction(uint _user_id, uint _project_id, string _tran_data) public{
 
        string log = tranlog[_user_id][_project_id];
 
        getLog(log, keccak256(log));
 
        require(keccak256(log) == keccak256(""));
 
        tranlog[_user_id][_project_id] = _tran_data;
 
    }
 
    
 
    function getTransaction(uint _user_id, uint _project_id) public constant returns (string tran_data) {
 
        return (tranlog[_user_id][_project_id]);
 
    }
 
}
cs



반응형