작성
·
201
0
직원 정보를 블록체인에 저장하는 bapp을 실습하고 있는데요
사장마다 smart contract를 하나 갖고 있어, 이 contract에 직원들의 정보를 저장하고 싶은데요...
여기서 여러 smart contract를 만들고 싶은데,
caver를 이용해서 사장마다 고유의 smart contract를 갖게 하는 방법이 있는지 궁금합니다.
답변 2
0
0
안녕하세요. 이 방법보다 좀 더 효율적으로 솔리디티를 활용하시는 방법을 추천합니다. 사장마다 여러개의 컨트랙을 소유하기 보다 한 컨트랙에서 특정 계정(CEO)만이 직원정보를 추가하거나 볼 수 있게 해야하지 않을까요?
예를들어 매핑을 써서
struct Employee { string name;
uint age; }
mapping(address => Employee[]) ceoEmployees;
function addEmployee(string _name, uint _age) public { ceoEmployees[msg.sender].push(Employee (_name, _age));
}
function getEmployeeCount(address _ceo) public view returns (uint) {
return ceoEmployees[_ceo].length;
}function getEmployees(address _ceo) public view returns (string[], uint[]) {
}
uint count = getEmployeeCount(_ceo);
address[] memory names = new address[](count.length);
uint[] memory ages = new uint[](count.length);
for (uint i = 0; i < count.length; i++) {
Employee storage employee = ceoEmployees[_ceo][i];
names[i] = employee.name;
ages[i] = employee.age;
}
return (names, ages);
매핑을 통해서 키값을 사장 계정으로 지정하고 값으로 직원정보 리스트를 불러오는 구조입니다.
getEmployees함수에서 직원이름과 나이 배열을 따로따로 불러와서 리턴하는 이유는 솔리디티에서 아직 struct를 리턴할 수 없기 때문입니다.
효율성을 높이기위해 한 컨트랙에서 진행해보세요. 솔리디티를 더 공부해보시는것도 좋은 방법입니다.
p.s. 위 코드 테스팅해보지는 않았습니다.