인프런 커뮤니티 질문&답변

제이유님의 프로필 이미지
제이유

작성한 질문수

Klaytn 클레이튼 블록체인 어플리케이션 만들기 - 이론과 실습

caver를 통해 contract를 여러개 배포할 수 있나요?

작성

·

201

0

 직원 정보를 블록체인에 저장하는 bapp을 실습하고 있는데요

사장마다 smart contract를 하나 갖고 있어, 이 contract에 직원들의 정보를  저장하고 싶은데요... 

여기서 여러 smart contract를 만들고 싶은데,

caver를 이용해서 사장마다 고유의 smart contract를 갖게 하는 방법이 있는지 궁금합니다.

답변 2

0

제이유님의 프로필 이미지
제이유
질문자

예시로 들어주신 예제를 기반으로 저만의 솔리디티 실습중이였습니다.!! 

답변 감사합니다!

0

SEJONG IT EDU님의 프로필 이미지
SEJONG IT EDU
지식공유자

안녕하세요. 이 방법보다 좀 더 효율적으로 솔리디티를 활용하시는 방법을 추천합니다. 사장마다 여러개의 컨트랙을 소유하기 보다 한 컨트랙에서 특정 계정(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. 위 코드 테스팅해보지는 않았습니다. 

제이유님의 프로필 이미지
제이유

작성한 질문수

질문하기