계정 그룹
계정 그룹은 여러 주소로 도달할 수 있는 하나의 계정입니다. 휴대전화 지갑, 하드웨어 지갑, Ethereum 브라우저 지갑이 모두 구성원이 될 수 있으며, 그중 어느 주소로 보낸 결제든 하나의 공유 잔액에 들어옵니다. 구성원 중 한 명인 컨트롤러가 그룹을 관리하고 다른 각 구성원이 얼마를 지출할 수 있는지 정합니다. 이를 통해 사람이나 기기마다 지출 허용량을 둔 가족 계정과 회사 계정을 만들 수 있습니다.
하나의 계정, 여러 주소
그룹의 잔액, 토큰, 그 밖에 그룹이 소유한 모든 것은 그룹을 설립한 트랜잭션에서 도출되는 키 없는 그룹 주소에 있습니다.
group address = 00000000 ‖ SHA3-256( "ZBC-GROUP" ‖ founding transaction hash )
이 주소의 키를 가진 사람은 없습니다. 모든 구성원 주소가 이 주소로 연결됩니다. 어느 구성원에게 보낸 결제든 그룹에 입금되며, 어느 구성원의 잔액을 조회하든 그룹의 잔액이 나옵니다. 각 주소는 자기 논스를 따로 유지합니다.
그룹은 컨트롤러를 포함해 최대 100개의 주소를 담습니다. 구성원은 서명할 수 있는 어떤 키 유형이든 될 수 있으며(ZooBC, Bitcoin, Ethereum, Solana 등. 키와 계정 유형 참조), 다중서명 계정도 구성원이 될 수 있습니다.
합류하기
새 주소는 컨트롤러만 LinkAccount로 연결할 수 있으며, 그 주소의 동의가 있어야 합니다. 동의는 "ZBC-GROUP-LINK" 태그가 붙은 체인 결속 다이제스트에 대한 서명으로, 최대 5,760블록(하루) 앞까지 유효하며 한 번만 쓸 수 있습니다. 동의는 그 주소 자신의 서명, 다중서명 계정의 임계값만큼의 서명, 또는 Ethereum personal_sign일 수 있습니다.
합류하면 그 주소가 소유한 모든 것이 최대 1,000개 항목까지 그룹으로 옮겨집니다. 잔액, 토큰, 발행한 토큰, 데이터셋, 파일, 트리거, 일정, 제안, 주문, 후원, 그리고 노드와 서비스 등록이 포함됩니다.
합류할 수 없는 주소에는 다음이 있습니다.
- 그룹 주소
- 이미 그룹에 속한 주소. 각 주소는 하나의 그룹에만 속할 수 있습니다.
- 분배 정책이 설정된 주소
- 활성 노드, 게이트웨이, 릴레이, 아카이브 키
- 릴리스 권한자
떠나기와 넘겨주기
구성원은 UnlinkAccount로 떠나며 아무것도 가져가지 않습니다. 그 주소는 새롭고 빈 계정으로 다시 시작합니다. 가지고 들어온 것은 모두 그룹에 남습니다.
컨트롤러는 통제권을 넘기기 전에는 떠날 수 없습니다. TransferGroupControl은 통제권을 다른 구성원에게 넘기며, 그 구성원은 "ZBC-GROUP-CONTROL" 태그가 붙은 서명으로 동의해야 합니다. 그러면 이전 컨트롤러는 수신 전용이 됩니다.
권한
새 구성원은 수신 전용입니다. 그룹을 위해 결제를 받을 수 있고 떠날 수 있지만, 지출할 수는 없습니다. 컨트롤러는 SetMemberPermissions로 이를 바꿉니다.
- 비트 0: 구성원이 ZBC를 지출할 수 있습니다.
- 비트 1: 구성원이 그룹의 토큰을 옮길 수 있습니다(비트 0도 필요합니다).
- 기간당 ZBC 한도: 기간은 1블록부터 2,102,400블록(1년)까지이며, 한도 0은 제한 없음을 뜻합니다.
예를 들어 5,760블록당 5 ZBC의 한도는 하루 5 ZBC의 용돈입니다.
어떤 작업은 컨트롤러만 할 수 있습니다. LinkAccount, SetMemberPermissions, TransferGroupControl, SetSplitPolicy, SetTransactPolicy입니다. 그룹의 분배 정책은 어느 구성원에게 보낸 돈에든 적용됩니다(분배 정책과 거래 정책 참조).
한도가 강제되는 방식
구성원의 한도는 지갑 설정이 아니라 합의 규칙입니다.
- 받아들일 때 노드는 트랜잭션이 그룹에서 가져갈 수 있는 최대 ZBC(금액, 수수료, 생존 예치금, 에스크로의 커미션과 임대료)를 계산하고, 구성원의 다른 대기 중인 트랜잭션까지 합산하여 그것이 구성원의 윈도우에 남은 양을 넘으면 거부합니다.
- 한도가 있는 구성원의 트랜잭션이 실행될 때는 세이브포인트 안에서 실행됩니다. 체인은 그룹의 잔액이 실제로 잃은 양을 측정하고, 그것이 한도를 넘으면 트랜잭션을 되돌립니다.
- 거부된 구성원 트랜잭션을 담은 블록은 모든 노드에서 무효입니다.
각 구성원은 자기 주소로 서명하므로 블록당 계정당 트랜잭션 하나 규칙에서 각자 자기 자리를 가집니다.
토큰과 임대료
구성원이 발행한 토큰은 그룹에 속하며, 그룹을 위해 보낼 수 있도록 허용된 구성원은 누구나 나중에 그 토큰을 추가 발행할 수 있습니다(토큰의 추가 발행과 소각 참조).
그룹은 다른 계정과 마찬가지로 계정 임대료를 내고, 여기에 더해 자기 기록에 대한 저장 임대료를 냅니다. 96바이트와 컨트롤러의 주소, 그리고 구성원마다 40바이트와 그 주소입니다. 구성원은 자기 임대료를 따로 내지 않습니다. 임대료를 낼 수 없는 그룹은 해산되며, 남은 더스트는 롱제비티 풀로 갑니다(ZBC는 결코 소각되지 않는다 참조).