ZooBC 위키
트랜잭션

계정 그룹

계정 그룹은 여러 주소로 도달할 수 있는 하나의 계정입니다. 휴대전화 지갑, 하드웨어 지갑, 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입니다. 그룹의 분배 정책은 어느 구성원에게 보낸 돈에든 적용됩니다(분배 정책과 거래 정책 참조).

모든 권한을 가진 컨트롤러가 있는 그룹 풀. 연결, 권한 설정, 통제권 넘기기 위에 자물쇠가 있고, 구성원들은 수신 전용, 제한 없이 지출 가능, 5,760블록당 5 ZBC까지 지출 가능, 토큰 이동 가능으로 표시되어 있습니다
모든 권한을 가진 컨트롤러가 있는 그룹 풀. 연결, 권한 설정, 통제권 넘기기 위에 자물쇠가 있고, 구성원들은 수신 전용, 제한 없이 지출 가능, 5,760블록당 5 ZBC까지 지출 가능, 토큰 이동 가능으로 표시되어 있습니다

한도가 강제되는 방식

구성원의 한도는 지갑 설정이 아니라 합의 규칙입니다.

  • 받아들일 때 노드는 트랜잭션이 그룹에서 가져갈 수 있는 최대 ZBC(금액, 수수료, 생존 예치금, 에스크로의 커미션과 임대료)를 계산하고, 구성원의 다른 대기 중인 트랜잭션까지 합산하여 그것이 구성원의 윈도우에 남은 양을 넘으면 거부합니다.
  • 한도가 있는 구성원의 트랜잭션이 실행될 때는 세이브포인트 안에서 실행됩니다. 체인은 그룹의 잔액이 실제로 잃은 양을 측정하고, 그것이 한도를 넘으면 트랜잭션을 되돌립니다.
  • 거부된 구성원 트랜잭션을 담은 블록은 모든 노드에서 무효입니다.

각 구성원은 자기 주소로 서명하므로 블록당 계정당 트랜잭션 하나 규칙에서 각자 자기 자리를 가집니다.

토큰과 임대료

구성원이 발행한 토큰은 그룹에 속하며, 그룹을 위해 보낼 수 있도록 허용된 구성원은 누구나 나중에 그 토큰을 추가 발행할 수 있습니다(토큰의 추가 발행과 소각 참조).

그룹은 다른 계정과 마찬가지로 계정 임대료를 내고, 여기에 더해 자기 기록에 대한 저장 임대료를 냅니다. 96바이트와 컨트롤러의 주소, 그리고 구성원마다 40바이트와 그 주소입니다. 구성원은 자기 임대료를 따로 내지 않습니다. 임대료를 낼 수 없는 그룹은 해산되며, 남은 더스트는 롱제비티 풀로 갑니다(ZBC는 결코 소각되지 않는다 참조).

같이 보기