Web3 App Store Protocol: เป็นมาตรฐานสำหรับการลงทะเบียนและการแจกจ่ายแอปพลิเคชัน Web3
ชื่อระดับแรก
พื้นหลัง
ปัจจุบัน นักพัฒนาซอฟต์แวร์สามารถให้บริการเลเยอร์โปรโตคอลที่ไม่น่าเชื่อถือแก่ผู้ใช้ผ่านชุดสัญญาอัจฉริยะบนบล็อกเชน อย่างไรก็ตาม ผู้ใช้ทั่วไปในชีวิตประจำวันจะไม่สามารถเข้าใจและใช้สัญญาอัจฉริยะเหล่านี้ได้โดยตรง ดังนั้น พวกเขาจึงต้องการชั้นแอปพลิเคชันที่ไม่น่าเชื่อถือ ปลอดภัย และใช้งานง่าย
นักพัฒนาเลเยอร์แอปพลิเคชันปรับใช้อินเทอร์เฟซผู้ใช้ที่ใช้งานง่ายเพื่อช่วยให้ผู้ใช้โต้ตอบโดยตรงกับโปรโตคอลและโทเค็น แอปพลิเคชันเหล่านี้ส่วนใหญ่จะพยายามเชื่อมต่อกับกระเป๋าเงิน 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
}
No releases published
No packages published


