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 App Store

เราขอเสนอกโปรโตคอล Web3 App Storeเพื่อแก้ไขปัญหาการช่วยสำหรับการเข้าถึงและความปลอดภัยดังกล่าวข้างต้น ร้านแอปเหล่านี้ควรมีสัญญาอัจฉริยะตามการลงทะเบียนแอป Web3 (การลงทะเบียนแอป Web3), แพ็คเกจแอปพลิเคชัน Web3 ที่อิงตามข้อมูลเมตาที่เก็บไว้นอกเครือข่ายตามสิทธิ์ คำอธิบายเวอร์ชัน ข้อมูลจำเพาะ ฯลฯ และไคลเอนต์ที่เก็บแอปพลิเคชัน Web3 ที่ติดตั้งบนอุปกรณ์ภายในของผู้ใช้ หลังจากนั้นเรายังต้องการผู้ตรวจสอบ Web3เพื่อช่วยให้ผู้ใช้ตรวจสอบซอร์สโค้ดของแอปพลิเคชัน Web3 ความสัมพันธ์ระหว่างส่วนประกอบเหล่านี้แสดงไว้ด้านล่าง

การลงทะเบียนแอป Web3 (การลงทะเบียนแอป Web3)เป็นชุดตามมาตรฐานการลงทะเบียนแอป Web3 (มาตรฐานการลงทะเบียนแอป Web3)สัญญาที่ชาญฉลาด กลุ่ม (องค์กร) และบุคคลสามารถตั้งค่าการลงทะเบียนแอปพลิเคชัน Web3 ของตนเองได้โดยไม่ต้องขออนุญาต นักพัฒนา Web3 สามารถใช้บัญชีออนเชนเพื่อลงทะเบียนแอปพลิเคชัน Web3 ในรีจิสทรีนี้ และดำเนินการจัดการเวอร์ชันในการแจกจ่ายและตรวจสอบผลรวมของแพ็คเกจการติดตั้ง ผู้ตรวจสอบสามารถใช้บัญชีออนไลน์ของตนโดยไม่ได้รับอนุญาตเพื่อตรวจสอบแอปพลิเคชันเหล่านี้ทั้งหมดและเผยแพร่ผลลัพธ์ในรีจิสทรี

แพ็คเกจแอป Web3หมายถึงซอฟต์แวร์ที่ออกโดยนักพัฒนาเพื่อให้ผู้ใช้ติดตั้งแอปพลิเคชัน Web3 บนอุปกรณ์ท้องถิ่นของตน แพ็คเกจเหล่านี้สามารถจัดเก็บไว้ในบริการจัดเก็บข้อมูลแบบรวมศูนย์หรือแบบกระจายอำนาจ และควรบันทึก URL และผลรวมการตรวจสอบของแพ็คเกจไว้ในรีจิสทรี ในขณะเดียวกันขึ้นอยู่กับมาตรฐานการกำหนดค่าแอปพลิเคชัน Web3 (มาตรฐานการกำหนดค่าแอปพลิเคชัน Web3)ด้านบน ที่รูทของแพ็คเกจควรมีไฟล์การกำหนดค่าที่มีคำชี้แจงสิทธิ์และคำอธิบายเวอร์ชันสำหรับแอปพลิเคชัน Web3 ควรระบุเส้นทางการจัดเก็บของซอร์สโค้ดในไฟล์การกำหนดค่า เพื่อให้ผู้ตรวจสอบสามารถรับซอร์สโค้ดสำหรับการตรวจสอบได้อย่างง่ายดาย

ไคลเอนต์ Web3 App Store (ไคลเอนต์ Web3 App Store)เป็นซอฟต์แวร์ที่ติดตั้งบนอุปกรณ์ของผู้ใช้ กลุ่มและรายบุคคลได้มาตรฐานไคลเอ็นต์ Web3 App Store (**มาตรฐานไคลเอ็นต์ App Store)สร้างไคลเอนต์ app store ของคุณเองได้อย่างอิสระบนพื้นฐานของ ไคลเอนต์สามารถเชื่อมต่อกับหนึ่งหรือหลายการลงทะเบียนพร้อมกัน จำเป็นต้องได้รับรายการแอปพลิเคชัน Web3 ข้อมูลเวอร์ชันและข้อมูลการตรวจสอบจากรีจิสทรี เมื่อผู้ใช้ติดตั้งหรืออัปเดตแอปพลิเคชัน Web3 จะต้องได้รับแพ็คเกจการติดตั้งโดยอัตโนมัติ จากนั้นตรวจสอบว่าค่าตรวจสอบของแพ็คเกจเท่ากับค่าตรวจสอบในรีจิสทรี สุดท้าย ควรแจ้งให้ผู้ใช้ทราบว่าแอปพลิเคชัน Web3 นี้ต้องการการอนุญาตเท่าใด หลังจากที่ผู้ใช้ยืนยันการอนุญาต Web3 App จะถูกติดตั้งบนอุปกรณ์ภายในเครื่อง

เฟรมเวิร์กการออกแบบนี้ช่วยให้มั่นใจได้ถึงการเข้าถึงแอปพลิเคชัน Web3 เนื่องจากผู้ใช้สามารถใช้เวอร์ชันโลคัลเก่าต่อไปได้ และมีสิทธิ์ในการอัปเกรดตามการลงทะเบียนใหม่และแพ็คเกจแอปพลิเคชันใหม่

ในเวลาเดียวกัน ลูกค้าจะตรวจสอบผลรวมการตรวจสอบของแพ็คเกจซอฟต์แวร์ในเครื่องด้วยผลตรวจสอบในศูนย์การลงทะเบียน (ตรวจสอบผลรวม) ซึ่งจะช่วยหลีกเลี่ยงโอกาสที่แฮ็กเกอร์หรือทีมโครงการจะเปลี่ยนแปลง และรับประกันว่าแอปพลิเคชันที่ผู้ใช้ใช้นั้นสอดคล้องกับ ศูนย์การลงทะเบียนในห่วงโซ่ที่สอดคล้องกับการใช้งานที่เผยแพร่ ไฟล์คอนฟิกูเรชันในแพ็คเกจซอฟต์แวร์ยังชี้ไปที่เวอร์ชันปัจจุบันของซอร์สโค้ด และผู้ตรวจสอบสามารถใช้เช็คซัมเพื่อตรวจสอบว่าแพ็คเกจซอฟต์แวร์นั้นทำแพ็คเกจจากซอร์สโค้ดเหล่านี้ ซึ่งจะรับประกันความสอดคล้องกันระหว่างซอร์สโค้ดและแพ็คเกจการติดตั้ง จากนั้นจึงตรวจสอบให้แน่ใจว่าผู้ใช้กำลังใช้แพ็คเกจที่ปลอดภัยซึ่งได้รับการตรวจสอบโดยผู้ตรวจสอบ

เมื่อผู้ใช้ใช้แอปพลิเคชัน Web3 ไคลเอ็นต์จะจำกัดสิทธิ์ของแอปพลิเคชันเหล่านี้ตามคำชี้แจงสิทธิ์ของแอปพลิเคชันที่ยืนยันโดยผู้ใช้ก่อนหน้านี้ จากนั้นรับประกันความปลอดภัยของผู้ใช้อย่างเต็มที่เมื่อเข้าถึงบริการ Web3 ภายในเครื่อง

มาตรฐานการลงทะเบียนแอป Web3 (มาตรฐานการลงทะเบียนแอปพลิเคชัน Web3)

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 (มาตรฐานการกำหนดค่าแอปพลิเคชัน 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
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
ค้นหา
สารบัญบทความ
คลังบทความของผู้เขียน
W3.Hitchhiker
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android