Orbs 스마트 컨트랙트 개요

Ethereum에 배포된 주요 ORBS 컨트랙트는 다음과 같습니다.

contractsRegistry

contractRegistry는 PoS 컨트랙트 목록과 활성 관리자를 관리합니다. 시스템의 기반으로서 모든 컨트랙트와 사용자가 최신 컨트랙트 목록을 조회할 수 있도록 합니다.

contractRegistry는 관리 중인 PoS 컨트랙트에 주소 변경 사항을 전달합니다. PoS 컨트랙트 업그레이드의 핵심 구성 요소로, 레지스트리 자체를 포함한 시스템의 각 컨트랙트를 새 컨트랙트로 전환할 수 있도록 합니다.

stakingContract

스테이킹 컨트랙트는 참여자가 스테이킹한 토큰을 보관합니다. 스테이킹이나 언스테이킹 등으로 참여자의 지분이 바뀔 때마다 stakingContractHandler에 알립니다.

stakingContractHandler

stakingContractHandler는 스테이킹 컨트랙트를 Orbs PoS 컨트랙트 및 contractRegistry가 관리하는 컨트랙트 관리 체계와 연결합니다.

stakingContractHandler는 추가 스테이킹 컨트랙트를 연결하거나, 필요할 때 스테이킹 작업을 다른 PoS 컨트랙트와 분리하는 기반을 제공합니다.

delegations

delegations 컨트랙트는 각 Orbs PoS 참여자의 위임 정보를 관리합니다. 참여자가 선택한 Guardian, 자체 스테이킹 지분, 참여자에게 위임된 지분을 저장합니다.

위임 관계, 자체 지분, 위임받은 지분이 바뀔 때마다 stakingRewards 컨트랙트에 알려 보상을 다시 계산하도록 합니다. 또한 위임받은 지분이 바뀌면 elections 컨트랙트에 알립니다. 선출 컨트랙트에는 개별 위임자 정보를 드러내지 않습니다.

elections

elections 컨트랙트는 delegations를 committee, Guardians 등록, certification 컨트랙트와 연결합니다. voteUnready와 voteOut 투표 로직을 구현하고, 노드 상태 머신의 readyForCommittee 및 readyToSynct 알림을 관리합니다.

delegations 컨트랙트의 알림을 받으면 참여자의 새 유효 지분을 계산해 committee 컨트랙트를 갱신합니다. Guardian이 readyForCommittee를 알리면 등록 여부와 퇴출 투표 여부를 확인한 후 위원회 추가를 요청합니다. 준비 미완료 또는 퇴출 투표가 적용된 Guardian은 위원회에서 제거하도록 요청합니다.

committee

committee 컨트랙트는 현재 위원회의 구성원과 가중치를 관리합니다. elections에서 유효 지분 변경을 알리면 해당 구성원의 가중치를 갱신하고 업데이트 이벤트를 발생시킵니다.

위원회 참여 요청이 들어오면 후보자의 자격을 확인합니다. 후보자의 가중치가 기존 구성원 중 최저 가중치보다 크면 해당 Guardian을 대신해 위원회에 참여합니다. 구성원 목록이나 인증 상태가 바뀌면 stakingRewards와 FeesAndBootstrap에 가입·탈퇴 구성원을 알려 보상 상태를 갱신합니다.

stakingRewards

stakingRewards 컨트랙트는 PoS 참여자의 스테이킹 보상 상태를 관리합니다. 파밍 풀에서 일반적으로 쓰이는 지분당 보상 구조를 기반으로 합니다. Orbs PoS의 세 단계, 즉 전체 보상 할당, 가중치에 따른 위원회 Guardians의 배분, 지분에 따른 위임자의 Guardian 보상 수령에 맞춰 설계되었습니다.

위임자의 지분 변경 또는 Guardian의 위원회 참여 상태 변경 시 스테이킹 보상을 갱신합니다. 참여자가 보상을 청구하면 스테이킹 컨트랙트에 스테이킹되고 시스템 상태도 갱신됩니다. 보상 자금은 stakingRewardsWallet에서 인출하며, 전체 참여자의 미청구 보상 총액 범위에서 토큰을 보유합니다.

feesAndBootstrapRewards

feesAndBootstrapRewards 컨트랙트는 Guardians의 수수료·부트스트랩 보상 상태를 관리합니다. 보상 구조는 stakingRewards 컨트랙트와 유사합니다.

feesAndBootstrapRewards는 부트스트랩 지갑에서 보상을 인출합니다. 전체 Guardians의 미청구 보상 총액 범위에서 토큰을 보유할 수 있습니다.

프로토콜 지갑: stakingRewardsWallet 및 bootstrapRewardsWallet

stakingRewardsWallet과 bootstrapRewardsWallet은 프로토콜 자금을 보관하며, 관련 보상 컨트랙트가 정해진 최대 인출 속도 안에서 자금을 인출하도록 합니다. 단순한 구조로 프로토콜 자금을 안전하게 보관합니다.

구조는 전체 할당과 위원회 Guardians라는 두 단계로 이루어집니다. feesAndBootstrapRewards는 인증·일반 가상 체인을 위한 두 수수료 지갑에서 수수료를 수집합니다. 프로토콜 지갑은 PoS 컨트랙트의 거버넌스·관리 인프라와 분리됩니다. 지갑을 사용할 클라이언트를 설정하는 기능 관리자와 자금 인출을 제어하는 마이그레이션 관리자가 관리합니다.

수수료 지갑: generalFeesWallet 및 certifiedFeesWallet

수수료 지갑은 가상 체인이 납부한 구독료를 보관합니다. 일반 가상 체인과 인증 가상 체인용으로 각각 별도 지갑이 배포됩니다. 기간별 수수료를 정확히 나눌 수 있도록 30일 단위로 구독료를 관리합니다.

두 수수료 지갑의 클라이언트인 feesAndBootstrapRewards가 직전 수집 이후 기간에 해당하는 납부 수수료를 수집합니다.

GuardiansRegistration

GuardiansRegistration 컨트랙트는 Guardians의 등록 데이터를 저장하며 등록, 정보 수정, 등록 해제를 지원합니다. 각 Guardian이 Orbs 플랫폼에서 조회할 범용 키를 저장할 수 있도록 메타데이터 맵도 제공합니다. 예를 들어 신원 정보는 ‘ID_FORM_URL’ 메타데이터 키에 저장할 수 있습니다.

guardiansRegistration은 Orbs 주소를 Ethereum 주소로 매핑하는 등의 기능을 제공합니다. 다른 컨트랙트가 Orbs 주소를 이용해 함수를 호출할 수 있게 합니다. Guardian의 등록 상태가 바뀌면 elections 컨트랙트에 알립니다.

certification

certification 컨트랙트는 각 Guardian의 인증 상태를 저장합니다. certificationManager가 인증을 설정하거나 해제할 수 있습니다.

Guardian의 인증 상태가 바뀔 때마다 elections 컨트랙트에 알립니다.

subscriptions

subscriptions 컨트랙트는 가상 체인의 구독 상태를 관리합니다. 개발자는 가상 체인을 생성하고, Orbs 플랫폼에서 사용하는 메타데이터 등의 속성을 수정하며, 구독 기간을 연장할 수 있습니다.

가상 체인 생성과 구독 연장은 subscriptions를 직접 호출하지 않고, 이를 갱신하는 구독 요금제 컨트랙트를 통해 처리합니다. subscriptions는 유효한 요금제 컨트랙트 목록을 보관합니다.

구독 요금제

구독 요금제 컨트랙트는 상태를 보관하지 않으며, 가상 체인의 구독 요금제와 수수료 구조를 담당합니다. 가상 체인 소유자가 이를 호출해 체인을 생성하고 구독을 연장합니다.

요금제 컨트랙트는 해당 요금제에 따라 등급과 월 수수료를 정합니다. 시스템에는 여러 구독 요금제 컨트랙트를 배포할 수 있습니다.

protocol

protocol 컨트랙트는 Orbs 플랫폼의 프로토콜 버전 업그레이드를 설정하고 동기화합니다. 운영·카나리 등 여러 배포 그룹을 지원하며, 그룹마다 서로 다른 버전으로 작동할 수 있습니다.

버전을 업그레이드할 때는 향후 특정 시각을 프로토콜 전환 시점으로 설정합니다.

관리 역할

registryAdmin

registryAdmin은 컨트랙트 레지스트리를 관리하는 최상위 관리자입니다. 레지스트리 속성과 컨트랙트를 갱신하고 관리자를 지정할 수 있습니다. 각 관리 대상 컨트랙트에도 registryAdmin 정보가 저장되어, 개별 컨트랙트가 참조하는 레지스트리를 변경할 수 있습니다.

initializationAdmin

initializationAdmin은 관리 매개변수와 위임·Guardians 목록 등 마이그레이션된 네트워크 상태를 포함해 컨트랙트의 초기 상태를 설정합니다. 배포자에게 부여되며 수행 작업은 생성자의 연장으로 볼 수 있습니다. 마이그레이션 기간을 위한 높은 권한의 역할로, 이전할 수 없으며 초기화가 끝나면 해제됩니다.

migrationManager

migrationManager는 레지스트리가 지정하며 모든 마이그레이션 작업을 제어합니다. 레지스트리의 컨트랙트를 설정하고 상태·잔고를 이전할 수 있습니다. 높은 권한을 가지므로 새 버전으로의 전환 등 특정 작업을 위해 지정한 후 권한을 해제하는 것이 권장됩니다.

functionalManager

functionalManager는 레지스트리가 지정하며 컨트랙트의 관리 매개변수와 기능을 제어합니다.

certificationManager

certificationManager는 Guardians의 인증 상태를 관리하며 인증을 설정·해제할 수 있습니다. 인증 여부는 등록 컨트랙트의 ID URL 메타데이터로 공개된 신원 정보를 기준으로 결정합니다.

컨트랙트 관리 및 운영 아키텍처

Orbs PoS 컨트랙트는 개별 컨트랙트를 포함한 향후 마이그레이션을 고려해 설계되었습니다. 다른 컨트랙트와 상호작용하는 PoS 컨트랙트는 상대 컨트랙트의 현재 주소를 저장합니다. 컨트랙트가 이전되면 레지스트리가 모든 관리 대상에 알림을 보내 참조 목록을 갱신합니다.

레지스트리는 시스템 컨트랙트뿐 아니라 최신 관리자 목록도 저장합니다. 동기화를 위해 각 컨트랙트는 관리 작업 전에 담당 관리자를 레지스트리에서 조회합니다. registryAdmin은 관리자 역할을 지정하거나 해제할 수 있습니다.

컨트랙트 주소 변경 또는 레지스트리 이전 시 업데이트 이벤트를 발생시킵니다. 애플리케이션은 최초 레지스트리 주소를 알면 최신 컨트랙트 목록을 추적하고 모든 버전의 이벤트를 통합할 수 있습니다.

프로토콜 지갑 컨트랙트는 예외입니다. 별도 관리자가 기능과 마이그레이션을 관리합니다.

Orbs 개요로 돌아가기