Logic(Transaction 수행 작업) 설정
작성일자 2019.03.30
Ver 0.0.3
/**
* @param {org.example.mynetwork.SendMoney} sendMoney
* @transaction
*/
async function sendMoney(tx) {
// 일반 사용자 정보 선언
const normal = tx.normal;
// 회계 사용자 정보 선언
const accoutant = tx.accoutant;
// 회비 납부 그룹 정보 선언
const groupPay = tx.groupPay;
// 일반 사용자 그룹 이름
const norGroup = normal.groupName.toString();
// 회계 사용자 그룹 이름
const accGroup = accoutant.groupName.toString();
// 회비를 납부할 그룹의 이름
const allGroupName = groupPay.groupName.toString();
// 회계로 입력된 사용자 유형 (회계 여부 판단)
const Accoutant = accoutant.account.toString();
// 납부자, 회계, 그룹 이름 일치 확인
if( norGroup == accGroup &&
accGroup == allGroupName &&
allGroupName == norGroup )
{
// 납부자가 현제 회비 납부 여부 확인
if(normal.state){
// 회계로 입력된 사용자의 유형이 회계인지 확인
if(Accoutant == "accoutant"){
// 2중 납부 방지를 위해 납부자의 state를 false로 변경
normal.state = false;
// 그룹 정보에 납부자 수를 1증가
groupPay.participantNum += 1;
// 그룹 정보에 현제 납부 된 회비 금액을 증가
groupPay.nowPay += groupPay.pay;
// registroy에 저장된 Participant 정보를 선언
const participantRegistry = await getParticipantRegistry('org.example.mynetwork.Group');
// Participant정보 업데이트
await participantRegistry.update(tx.normal);
// registroy에 저장된 Asset정보 선언
const assetRegistry = await getAssetRegistry('org.example.mynetwork.GroupPay');
// Asset정보 업데이트
await assetRegistry.update(tx.groupPay);
// 납부가 완료되면 "Success"를 반환
return "Success"
}
// 입력된 회계의 유형이 회계가 아닌 경우 반환
return "Please confirm your accoutant"
}
// 납부자가 이미 회비를 납부 한 경우
return "I already paid my dues."
}
// 그룹의 이름이 일치하지 않는 경우
return "Group is not matching";
}
// 사용자 유형 변경 JS
/**
* @param {org.example.mynetwork.ChangeAccount} changeAccount
* @transaction
*/
async function changeAccount(tx){
// 관리자 정보 선언
const Master = tx.Master;
// 회계 사용자 정보 선언
const Accoutant = tx.Accoutant;
// 일반 사용자 정보 선언
const Normal = tx.Normal;
// 관리자의 그룹 정보
const MaterGroup = Master.groupName.toString();
// 회계 사용자의 그룹 정보
const AccoutantGroup = Accoutant.groupName.toString();
// 일반 사용자의 그룹 정보
const NormalGroup = Normal.groupName.toString();
// 관리자로 선언 된 인원의 그룹이 "admin"인지 판단
if(MaterGroup == "admin"){
// 관리자의 권한이 "master"인지 확인
if(Master.account == "master"){
// 회계 및 일반 사용자의 그룹이 동일한 그룹인지 확인
if(NormalGroup == AccoutantGroup){
// 회계로 선언된 사용자의 유형이 "accoutant"인지 확인
if(Accoutant.account == "accoutant"){
// 일반 사용자 유형을 "accoutant"인 회계로 변경
Normal.account = "accoutant";
// 회계 사용자의 유형을 "normal"로 변경
Accoutant.account = "normal";
// registroy에 저장된 Participant 선언
const participantRegistry = await getParticipantRegistry('org.example.mynetwork.Group');
// Normal로 선언된 Participant정보 업데이트
await participantRegistry.update(tx.Normal);
// Accoutant로 선언된 Participant정보 업데이트
await participantRegistry.update(tx.Accoutant);
// 권한 수정이 완료된 경우 완료 메시지 반환
return "Permission modification successed"
}
// 회계로 선언된 사용자의 권한이 회계가 아닌 경우
return "Please confirm Accoutant";
}
// 각각 선언된 사용자의 그룹이 일치하지 않은 경우
return "Group is not matching";
}
// 관리자로 선언된 정보의 권한이 "master"이 아닌경우
return "Your not have authority";
}
// 관리자로 선언된 정보의 그룹이 "admin"이 아닌 경우
return "You'r group not admin";
}
수정 사항
1. 사용자 권한 변경 트랜잭션 추가
2. 주석 추가
'Blockchain (Hyperledger Fabric) > 작업 중인 Solution' 카테고리의 다른 글
Hyperledger Composer 정리 (0) | 2019.04.19 |
---|---|
Hyperledger Composer 모델링 작업 Ver. 0.0.3 (0) | 2019.03.30 |
Hyperledger Composer Logic(Transaction 수행) Ver. 0.0.2 (0) | 2019.02.27 |
Hyperledger Composer 모델링 작업 Ver. 0.0.2 (0) | 2019.02.27 |
Hyperledger Composer Queries 작성 Ver. 0.0.1 (0) | 2019.02.22 |