BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Web3 App Store Protocol: Web3 애플리케이션의 등록 및 배포를 위한 표준을 제공합니다.

W3.Hitchhiker
特邀专栏作者
2022-01-03 11:43
이 기사는 약 6167자로, 전체를 읽는 데 약 9분이 소요됩니다
사용자의 자산 보안 및 클라우드 스토리지 액세스 권한 문제, 신뢰할 수 없고 안전하며 사용하기 쉬운 응용 프로그램 계층을 해결하고 일련의 스마트 계약은 사용자에게 신뢰할 수 없는 프로
AI 요약
펼치기
사용자의 자산 보안 및 클라우드 스토리지 액세스 권한 문제, 신뢰할 수 없고 안전하며 사용하기 쉬운 응용 프로그램 계층을 해결하고 일련의 스마트 계약은 사용자에게 신뢰할 수 없는 프로

첫 번째 레벨 제목

배경

현재 개발자는 블록체인의 스마트 계약 세트를 통해 사용자에게 신뢰할 수 없는 프로토콜 계층 서비스를 제공할 수 있습니다. 그러나 일반적인 일상 사용자는 이러한 스마트 계약을 직접 이해하고 사용할 수 없으므로 신뢰할 수 없고 안전하며 사용하기 쉬운 애플리케이션 계층이 필요합니다.

애플리케이션 계층 개발자는 사용자가 프로토콜 및 토큰과 직접 상호 작용할 수 있도록 사용하기 쉬운 사용자 인터페이스를 배포합니다. 이러한 애플리케이션의 대부분은 사용자의 Web3 지갑에 연결을 시도하고 서명을 직접 요청합니다.

우리는 이러한 응용 프로그램을 다음과 같이 부릅니다."Web3 App". 예를 들어 Uniswap의 공식 웹 애플리케이션은https://app.uniswap.org는 사용자가 블록체인에서 자체 프로토콜과 상호 작용하는 데 도움이 되는 일반적인 Web3 애플리케이션입니다. 다음은 Uniswap의 애플리케이션 및 프로토콜의 기술 구조입니다.

동기 부여

프로토콜 계층의 스마트 계약이 해당 Web3 애플리케이션과 함께 확산됨에 따라 접근성과 보안에 관한 현재 업계 관행에서 여전히 두 가지 주요 문제를 볼 수 있습니다.

접근성

첫째, 오늘날 대부분의 Web3 애플리케이션은 프로젝트 소유자가 제어하는 ​​클라우드 서비스에 코드를 저장합니다. 소유자가 사이트를 오프라인 상태로 만들거나 DDos에 의해 사이트가 종료되거나 국가 정책 요구 사항 등에 대한 응답으로 인해 일반 사용자는 더 이상 자산을 쉽게 관리할 수 없습니다(직접 상호 작용할 만큼 똑똑하지 않은 경우). 프로토콜 계층 포함). 액세스의 불확실성은 사용자 간의 신뢰를 떨어뜨리기 때문에 두려울 수 있습니다.

보안

둘째, 현재 대부분의 사용자는 웹 브라우저와 Web3 플러그인의 조합을 통해 Web3 애플리케이션에 액세스하고 있으며 이 프로세스에는 보안 문제가 가득합니다. 이를 통해 프로젝트 팀과 해커 모두 Web3 애플리케이션에 새로운 악성 코드를 삽입하여 사용자 자산을 훔칠 수 있습니다.

첫 번째 레벨 제목

사양

Web3 앱 스토어 프로토콜

우리는Web3 앱 스토어 프로토콜앞서 언급한 접근성 및 보안 문제를 해결합니다. 이러한 앱 스토어는 스마트 계약 기반을 포함해야 합니다.Web3 앱 레지스트리(Web3 앱 레지스트리), 권한, 버전 설명, 사양 등을 중심으로 오프체인에 저장된 메타데이터를 기반으로 하는 Web3 애플리케이션 패키지 및 사용자의 로컬 장치에 설치된 Web3 애플리케이션 스토어 클라이언트. 그 후, 우리는 또한 필요합니다Web3 감사자사용자가 Web3 애플리케이션의 소스 코드를 감사하도록 지원합니다. 이러한 구성 요소 간의 관계는 다음과 같습니다.

Web3 앱 레지스트리(Web3 앱 레지스트리)를 기반으로 한 세트입니다.Web3 앱 등록 기준(Web3 앱 등록 기준)스마트 계약. 그룹(조직) 및 개인은 허가 없이 자신의 Web3 응용 프로그램 레지스트리를 설정할 수 있습니다. Web3 개발자는 온체인 계정을 사용하여 Web3 애플리케이션을 이 레지스트리에 등록하고 설치 패키지의 배포 및 체크섬에 대한 버전 관리를 수행할 수 있습니다. 감사자는 권한 없이 온체인 계정을 사용하여 이러한 모든 애플리케이션을 감사하고 결과를 레지스트리에 게시할 수 있습니다.

Web3 앱 패키지사용자가 로컬 장치에 Web3 응용 프로그램을 설치할 수 있도록 개발자가 출시한 소프트웨어를 말합니다. 이러한 패키지는 중앙 집중식 또는 분산형 스토리지 서비스에 저장할 수 있으며 패키지의 URL 및 체크섬은 레지스트리에 기록되어야 합니다. 동시에, 기반으로Web3 Application Configuration Standard(웹3 애플리케이션 구성 표준)위에서 패키지의 루트에는 Web3 응용 프로그램에 대한 권한 설명 및 버전 설명이 포함된 구성 파일이 있어야 합니다. 감사자가 감사할 소스 코드를 쉽게 얻을 수 있도록 소스 코드의 저장 경로를 구성 파일에 지정해야 합니다.

Web3 App Store 클라이언트(Web3 App Store 클라이언트)사용자의 로컬 장치에 설치된 소프트웨어입니다. 단체와 개인이 할 수 있는Web3 App Store 클라이언트 표준(**App Store 클라이언트 표준)기반으로 자신의 앱 스토어 클라이언트를 자유롭게 구축 클라이언트는 동시에 하나 이상의 레지스트리에 연결할 수 있습니다. 레지스트리에서 Web3 응용 프로그램 목록, 버전 정보 및 감사 정보를 가져와야 합니다. 사용자가 Web3 애플리케이션을 설치하거나 업데이트할 때 설치 패키지를 자동으로 가져와야 합니다. 그런 다음 패키지의 체크섬이 레지스트리의 체크섬과 같은지 확인합니다. 마지막으로 이 Web3 응용 프로그램에 필요한 권한을 사용자에게 알려야 합니다. 사용자가 권한을 확인한 후 Web3 App이 로컬 장치에 설치됩니다.

이 디자인 프레임워크는 사용자가 이전 로컬 버전을 계속 사용할 수 있고 새 레지스트리 및 새 애플리케이션 패키지에 따라 업그레이드할 수 있는 권한을 갖기 때문에 Web3 애플리케이션의 액세스 가능성을 보장합니다.

동시에 클라이언트는 등록 센터의 체크섬(체크섬)으로 로컬 소프트웨어 패키지의 체크섬을 확인하여 해커 또는 프로젝트 팀이 변경될 가능성을 방지하고 사용자가 사용하는 애플리케이션이 게시된 애플리케이션과 일치하는 체인의 등록 센터. 소프트웨어 패키지의 구성 파일도 소스 코드의 현재 버전을 가리키며 감사자는 체크섬을 사용하여 소프트웨어 패키지가 이러한 소스 코드에서 패키징되었는지 확인할 수 있습니다. 소스 코드와 설치 패키지 간의 일관성을 보장하고 사용자가 감사자가 감사한 보안 패키지를 사용하고 있는지 확인합니다.

사용자가 Web3 응용 프로그램을 사용할 때 클라이언트는 이전에 사용자가 확인한 응용 프로그램의 권한 설명에 따라 이러한 응용 프로그램의 권한도 제한합니다. 그런 다음 로컬 Web3 서비스에 액세스할 때 사용자의 보안을 완전히 보장합니다.

Web3 App 등록 기준(Web3 App 등록 기준)

pragma solidity ^0.8.0;
/**
* @title AppRegistration interface
*/
interface IAppRegistration {
   struct auditorVote {
       address auditor;
       uint8 level;
   }
   function createApp() external returns (uint256);
   function addVersion(uint256 appId, string memory versionId, string memory fileUrl) external;
   function getAppIds() external returns (uint256[] memory);
   function getVersions(uint256 appId) external returns (string[] memory);
   function getVersionFileUrl(uint256 appId, string memory versionId) external view returns (string memory);
   function voteApp(uint256 appId, uint8 level) external;
   function voteAppVersion(uint256 appId, string memory versionId, uint8 level) external;
   function getVotes(uint256 appId, string memory versionId) external returns (auditorVote[] memory);
}

Web3 App Configration Standard (Web3 애플리케이션 구성 표준)

{
 "properties": {
   "name": {
     "title": "Name of the App",
     "type": "string"
   },
   "logoUrl": {
     "title": "Logo of the App",
     "type": "string"
   },
   "description": {
     "title": "Description of the App",
     "type": "string"
   },
   "origin": {
     "title": "Online dapp origin",
     "type": "string",
     "pattern": "^((https|http)?:\\/\\/)[^\\\\s]+"
   },
   "permissions": {
     "properties": {
       "web3Provider": {
         "requestAccount": {
           "title": "If App need permission to connect with wallet",
           "type": "boolean"
         },
         "personalSign": {
           "properties": {
             "request": {
               "type": "boolean",
               "title": "If App need permission to request sign text message"
             },
             "patterns": {
               "type": "array",
               "title": "Patterns of text message"
             }
           },
           "title": "Declaration for sign text message",
           "type": "object"
         },
         "transaction": {
           "properties": {
             "request": {
               "type": "boolean",
               "title": "If App need permission to request transaction"
             },
             "contractCalls": {
               "type": "array",
               "title": "Declaration for contrat transaction"
             },
             "tokenApproves": {
               "type": "array",
               "title": "Declaration for token approval"
             },
             "ERC20TokenTransfer": {
               "type": "array",
               "title": "Declaration for ERC20 token transfer transaction"
             }
           },
           "type": "object",
           "title": "Declaration for transaction"
         },
         "network": {
           "urlPatterns": {
             "type": "array",
             "title": "Patterns of whitelist network request URL"
           },
           "title": "Declaration for APP network request",
           "type": "object"
         },
         "title": "Declaration for Web3Provider permissions",
         "type": "object"
       }
     },
     "title": "Declaration for App permissions",
     "type": "object"
   },
   "app": {
     "properties": {
       "id": {
         "title": "AppId allocated by App Store",
         "type": "string"
       },
       "chainId": {
         "title": "The chainId which App Store deployed",
         "type": "string"
       },
       "contract": {
         "title": "The contract address of App Store",
         "type": "string"
       }
     },
     "type": "object",
     "title": "App information on App Store"
   },
   "source": {
     "properties": {
       "repository": {
         "type": "string",
         "title": "The URL that can access App source code",
         "pattern": "^(https:\\/\\/|git@)[^\\\\s]+"
       },
       "buildScript": {
         "type": "string",
         "title": "The script that can complie source code to bundles"
       },
       "systemEnvironment": {
         "type": "string",
         "title": "The system environment that can make sure auditor can build bundle which has the same SHA256"
       }
     },
     "type": "object",
     "title": "Information of source code for auditor use"
   }
 },
 "title": "Web3 App json config file",
 "type": "object"
}

Web3 App Store 클라이언트 표준(Web3 App Store 클라이언트 표준)

interface App {
 app: {
   id: string
   chainId: string
   contract: string
 }
 permissions: {
   network: {
     urlPatterns: string[]
   },
   web3Provider: {
     requestAccount: boolean
     personalSign: {
       request: boolean
       patterns: string[]
     },
     transaction: {
       request: boolean
       contractCalls: ContractCallItem[]
       tokenApproves: TokenApproveItem[]
       ERC20TokenTransfer: ERC20TokenTransferItem[]
     }
   }
 }
 source: {
   repository: string
   buildScript: string
   systemEnvironment: string
 }
 appId: number
 domain: string
 versionId: string
 files: string[]
 name: string
 description?: string
 logoUrl: string
}
enum VoteLevel {
 DANGER = -1
 UNKNOW = 0
 SAFE = 1
}
class Web3AppStore {
 chainId: string; // The chainId which App Store deployed
 
 contract: string; // The contract address of App Store
 
 getApps(): Promise
 
 getApp(appId: number, version?: string): Promise
 
 getAppVersions(appId: number): Promise

 createApp(): Promise
 
 addVersion(appId: number, fileUrls: string[]): Promise
 
 voteApp(appId: number, level: VoteLevel): Promise
 
 voteAppVersion(appId: number, versionId: string, level: VoteLevel): Promise
 
 // Validate the SHA256 of App file is same as versionId of not
 validateAppVersion(app: App): Promise
 
 // Validate if the domain which declared in domain property has the same web3.json file of current App
 validateAppDomain(app: App): Promise
}

Releases

No releases published

Packages

No packages published

Web3.0
Odaily 공식 커뮤니티에 가입하세요