# URAuth(Universal Resource Auth)

**UR-Auth** 는 Universal Resource Auth의 약자로 URI(Uniform Resource Identifier)로 표현되는 웹 데이터 및 저작권이 있는 유무형 자산의 소유권을 블록체인 기술과 DID(Decentralized Identifiers) 기술을 이용하여 인터넷 상에 공개적으로 등록할 수 있도록 하는 프로토콜입니다. URI는 온/오프라인 상의 논리적, 물리적 리소스를 고유하게 식별할 수 있는 웹 기술에서 통용되는 식별자(Identifier)로써 블록체인에 해당 URI의 소유자 DID를 이용하여 그 소유권을 등록하게 되고, 거대 AI가 이를 학습할 때 정당하게 그 소유권을 주장할 수 있는 기술적인 방법을 마련할 수 있게 됩니다.

### Data Ownership Register

![Register Ownership](https://2690783012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSAjPxw4oPZa4ydYufEQe%2Fuploads%2Fgit-blob-5e71b5144f4b54a8a8b12828df19b86b6d7920fe%2Fregister-ownership.png?alt=media)

데이터에 대한 소유권을 **UR-Auth** 블록체인에 등록하는 타입은 크게 세가지로 나뉩니다:

* **도메인**: `https://www.bc-labs.net` 과 같은 일반적인 도메인을 의미합니다.
* **웹 서비스 계정**: `https://instagram.com/user` 과 같이 특정 서비스에 대한 계정을 의미합니다.
* **데이터 파일의 저작권**: 로컬 데이터에 대한 소유권을 의미합니다. 여기서는 ipfs 와 같이 분산형 저장소의 주소값(e.g CID) 이 포함될 수 있습니다.
* **데이터셋**: [UR-Auth Tree](#ur-auth-tree) 에 등록된 URI 혹은 등록되지 않은 URI를 이용하여 만든 데이터셋에 대한 소유권을 의미합니다. 해당 데이터셋이 저장되어있는 저장소에 대한 위치값이 들어갈 수 있습니다.

각 영역별 소유권을 등록하는 방법은 다음과 같습니다:

#### 도메인

1. 도메인 소유자는 자신의 DID를 생성하고 **UR-Auth** 블록체인에 `request_register_ownership` 트랜잭션을 전송합니다.
2. **UR-Auth** 블록체인에서 챌린지 값을 생성합니다.
3. 도메인 소유자는 도메인 검증 정보를 담고 있는 *\*.json* 파일을 생성한 후 해당 도메인의 `root` 디렉토리에 업로드합니다. *예를 들면, `bc-labs.net/root` 에 `challenge.json` 파일을 업로드합니다.*
4. 신뢰할 수 있는 노드로 구성된 오라클 노드들은 해당 *\*.json* 파일을 다운로드 후 **UR-Auth** 블록체인에 `verify_challenge` 트랜잭션을 전송합니다.
5. 정족수 이상의 오라클 노드(e.g 60% 이상)에 의해 검증이 완료되면 해당 도메인은 [UR-Auth Tree](#ur-auth-tree) 에 등록이 되고 소유권 등록이 완료됩니다.

#### 웹 서비스 계정

OAuth 인증을 통하여 계정에 대한 소유권을 인증할 수 있는 경우:

* `claim_ownership` 트랜잭션을 전송하여 해당 URI 를 `UR-Auth Tree` 에 등록합니다.

OAuth 인증이 불가능한 경우:

1. 유저는 자신의 피드에 계정에 대한 소유권을 증명할 수 있는 증명서를 포스팅합니다.
2. 신뢰할 수 있는 노드로 구성된 오라클 노드들에 의해 위와 같이 검증 절차를 거칩니다.
3. 정족수 이상의 오라클 노드에 의한 검증이 완료되면 `UR-Auth Tree` 에 등록합니다.

#### 데이터 파일에 대한 저작권 및 데이터셋

1. 파일 및 데이터셋을 등록하게 되면 `urauth://file/{cid}` 혹은 `urauth://dataset/{cid}` URI 를 발급받게 됩니다.
2. 해당 URI 를 `UR-Auth Tree` 에 등록하게 됩니다.

### UR-Auth Tree

![Ownership Claim on UR-Auth Tree](https://2690783012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSAjPxw4oPZa4ydYufEQe%2Fuploads%2Fgit-blob-de163b4dbb2cc5147421840b7a52869348434f91%2Furauth-tree.png?alt=media)

웹사이트 URL 및 웹사이트 내 하위 페이지 URL들은 블록체인 상에서 Tree 데이터 구조의 각 노드들로 표현될 수 있습니다. 하나의 **UR-Auth Tree** 는 하나의 웹사이트 도메인과 해당 도메인 내 URI로 식별되는 데이터들에 대응하며, **UR-Auth Tree** 의 각 노드는 해당 URI의 소유권자(DID) 정보, 저작권정보, 데이터 접근 규칙 등이 규정된 **UR-Auth Document** 를 저장하고 있습니다.

### UR-Auth Tree 등록 규칙

1. **UR-Auth Tree** 의 모든 하위 노드의 등록은 오라클에 의한 검증이 아니라면 그 상위 노드의 소유자 중 한 소유자에 의해 등록되어야 합니다.
2. `http:` 혹은 `https:` 은 같은 것으로 간주되며 생략되어 등록되어야 하며 그 이외의 프로토콜은 명시되어 등록되어야 합니다.
3. `www` 는 생략되어 등록되며 그 이외의 접두사는 명시되어 등록되어야 합니다.
4. 루트 노드는 오라클에 의해 검증된 후 등록되어야 합니다.

### UR-Auth Document

[**UR-Auth Tree**](#ur-auth-tree) 의 각 노드는 해당 URI와 모든 하위 URI들에 적용되는 소유권 정보, 저작권 정보, 데이터 접근 규칙 등의 정보가 기록된 **UR-Auth Document** 를 갖습니다. **UR-Auth Document** 는 해당 노드의 소유자 DID에 의해서만 내용이 수정될 수 있습니다.

```rust
#[derive(Encode, Decode, Clone, PartialEq, Debug, Eq, TypeInfo)]
pub struct URAuthDoc<Account> {
    pub id: DocId,
    pub created_at: u128,
    pub updated_at: u128,
    pub multi_owner_did: MultiDID<Account>,
    pub identity_info: Option<Vec<IdentityInfo>>,
    pub content_metadata: Option<ContentMetadata>,
    pub copyright_info: Option<CopyrightInfo>,
    pub access_rules: Option<Vec<AccessRule>>,
    pub asset: Option<MultiAsset>,
    pub data_source: Option<URI>,
    pub proofs: Option<Vec<Proof>>,
}
```

#### id

해당 문서의 식별자

#### created\_at

해당 문서가 생성된 시간

#### updated\_at

해당 문서가 업데이트된 시간

#### multi\_owner\_did

해당 문서의 소유자 DID 목록

#### identity\_info

저작권자의 신원 정보 목록

#### contents\_metadta

해당 URI 와 연관된 컨텐츠 메타데이터 정보

#### access\_rules

해당 URI 에 대한 접근 규칙 목록

#### asset

해당 문서가 데이터셋일 경우, 토큰화된 데이터셋에 대한 정보

#### data\_source

해당 문서가 데이터셋일 경우, 데이터셋이 저장되어 있는 URI 정보

#### proofs

해당 문서에 대한 전자서명 목록

### 데이터 마켓(Data Market)

![Data Market Tracking Ownership](https://2690783012-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSAjPxw4oPZa4ydYufEQe%2Fuploads%2Fgit-blob-cf6c09c70665df2c9e5aa3161f590fd7e4d25519%2Fdata-market.png?alt=media)

**UR-Auth** 블록체인 상에 미리 패키징된 웹 데이터셋들도 함께 데이터 마켓에 등록되고 거래 유통되도록 하여, 웹 데이터 수요자들이 웹 데이터 소유자들에게 정당한 데이터 접근 비용을 지불하고 미리 정리된 데이터셋들을 다운로드 받아서 상업용 AI 기계학습 등에 사용하도록 하여 데이터 저작권 문제를 해결할 수 있습니다.

#### 데이터셋 및 AI Model 지분 토큰화

**UR-Auth** 블록체인에는 데이터에 대한 소유권이 명시되어 있기 때문에 해당 URI 로 만들어진 데이터셋 혹은 AI Model에 대한 지분을 토큰화 할 수 있습니다. 실제로 데이터 마켓에서 해당 데이터셋이 판매가 되었을 때, 토큰화된 지분에 따라 보상을 분배할 수 있습니다.

### References

* [UR-Auth White Paper](https://docs.infrablockchain.net/infrablockchain-docs/ko/infrablockchain/service-chains/urauth)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.infrablockchain.net/infrablockchain-docs/ko/infrablockchain/service-chains/urauth.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
