MỚI: Helius mua lại Light Protocol
Kiểm soát truy cập bằng token trên Solana - Hướng dẫn về Solana Mobile
Blog/Phát triển

Kiểm soát truy cập bằng token trên Solana - Hướng dẫn về Solana Mobile

Kỹ sư tích hợp0xSolanaGirl trên X
Đọc trong 8 phút

Giới thiệu

Đầu năm 2023, Solana Mobile ra mắt một chiếc điện thoại thông minh ứng dụng blockchain. Với hơn 15.000 lượt kích hoạt đến nay, Solana Saga là một thiết bị Android tùy chỉnh giúp tăng cường bảo mật on-chain bằng kho lưu trữ seed ở cấp độ chip được tích hợp vào trải nghiệm ví. Tuy nhiên, trải nghiệm ví di động không chỉ có trên Saga. Cùng một bộ điều hợp ví di động cung cấp quy trình chuẩn để giảm độ phức tạp cho các nhà phát triển phát hành ứng dụng đa nền tảng. Vậy điều gì làm nên sự khác biệt của Saga?

Như một nghi thức để chính thức sở hữu Saga, người dùng mint Saga Genesis Token – một NFT soulbound. Bộ sưu tập token này cung cấp danh sách chính xác các địa chỉ chính của người dùng Solana Saga và hỗ trợ các hoạt động trong cộng đồng. Saga Genesis Token giúp việc airdrop cho cộng đồng trở nên dễ dàng hơn bao giờ hết. Tuy vậy, khi ví của người dùng nhanh chóng đầy lên như một cửa hàng đồ cũ, có lẽ đã đến lúc khám phá các giải pháp chuyên biệt để thu hút cộng đồng người nắm giữ Saga. Một hướng đi khả thi là phát triển các dApp có quyền truy cập được kiểm soát bằng token, mang đến cho người dùng những trải nghiệm tùy chỉnh và độc quyền. 

Kiểm soát truy cập bằng token là cách hiển thị thông tin phía máy khách dựa trên quyền sở hữu token của ví đã kết nối. Cơ chế này xác định một cá nhân có thể truy cập thông tin hay không và có thể được dùng để cấp quyền truy cập độc quyền vào các cộng đồng như Saga DAO. Hướng dẫn này trình bày cách xây dựng một dApp trên Solana có quyền truy cập được kiểm soát bằng token bằng DAS API của Helius và React Native, sử dụng Saga Genesis Token làm bộ sưu tập kiểm soát truy cập mẫu. Bạn có thể điều chỉnh hướng dẫn và bản demo này để kiểm soát quyền truy cập bằng bất kỳ nhóm token nào bằng cách thay đổi địa chỉ token và các điều kiện. Kho lưu trữ GitHub có tại đây: @helius_labs/saga-token-gating-tutorial.

Thiết lập môi trường

Hướng dẫn này sử dụng một PC kết nối với Solana Saga qua cáp USBC. Nếu không có Saga, bạn cũng có thể sử dụng trình giả lập Android hoặc thiết bị Android. Có thể bỏ qua các bước này nếu thử nghiệm trên Saga đã bật chế độ nhà phát triển, đồng thời PC đã cài đặt các công cụ Android SDK và phiên bản NodeJS mới nhất.

Để cấu hình Saga cho việc phát triển ứng dụng di động, hãy mở phần cài đặt và tìm Số bản dựng. Nhấn vào tùy chọn này 7 lần cho đến khi cửa sổ bật lên ‘Bạn hiện là nhà phát triển!’ xuất hiện. Tìm và bật Tùy chọn nhà phát triển, sau đó bật Gỡ lỗi USB trong cùng danh sách thả xuống.

Trên máy tính, hãy đảm bảo NodeJS đã được cài đặt và nâng cấp lên v20.9.0. Cài đặt công cụ Android SDK và thiết lập biến ANDROID_HOME.

Sử dụng Git Bash, sao chép kho lưu trữ demo từ GitHub của Helius và mở trong trình soạn thảo mã. Sử dụng dấu nhắc lệnh Git Bash để cd vào thư mục app, sau đó chạy yarn để cài đặt ứng dụng. Để chạy ứng dụng, hãy nhập lệnh sau khi thiết bị đang được kết nối hoặc trình giả lập Android đang chạy.

Mã
yarn react-native run-android

Kiểm soát truy cập bằng token cho Solana Saga

Tổng quan cấp cao về quy trình kiểm soát truy cập bằng token:

  1. Người dùng cấp quyền cho một phiên bằng ví của họ, qua đó cung cấp khóa công khai cho dApp.
  2. dApp lấy dữ liệu từ endpoint searchAssets của DAS API.
  3. JSON trong phản hồi được phân rã để truy cập kết quả.
  4. Kết quả được xác thực và quyền sở hữu token được xác định.
  5. Trạng thái xác minh được thiết lập và máy khách được hiển thị tương ứng.

Hãy đi sâu vào mã. Trước tiên, ta sẽ tạo yêu cầu gửi đến Helius DAS API để nhận thông tin về người dùng và quyền sở hữu Saga Genesis Token của họ.

Để nhận thông tin về Saga Genesis Token, biến SagaGenesisToken được đặt thành địa chỉ token của bộ sưu tập. Hãy thay biến này bằng một địa chỉ token khác để kiểm soát quyền truy cập cho các bộ sưu tập khác.

Yêu cầu này cần có khóa Helius API và trường đó được chủ ý để trống trong hướng dẫn. Phương pháp bảo mật khóa tối ưu là dùng máy chủ proxy để chuyển tiếp yêu cầu. Kho lưu trữ @helius_labs/helius_rpc_proxy chứa một Cloudflare worker có thể được triển khai chỉ bằng một lần nhấp để dùng làm RPC URL trong khi vẫn ẩn khóa API.

Mã
import { PublicKey } from "@solana/web3.js";

export default async function findSagaGenesisToken(address: PublicKey) {
  // Replace this with the token address you want to gate for
  const SagaGenesisToken = '46pcSL5gmjBrPqGKFaLbbCmR6iVuLJbnQy13hAe7s6CC';

  // Populate your Helius API key
  const HELIUS_APIKEY = '';
  const url = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_APIKEY}`

  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'my-id',
      method: 'searchAssets',
      params: {
        ownerAddress: address.toString(),
        grouping: ["collection", SagaGenesisToken],
        page: 1,
        limit: 10
      },
    }),
  });

  const { result } = await response.json();
  return (result.items)
};

Hàm findSagaGenesisToken nhận địa chỉ ví của người dùng làm đối số và sử dụng địa chỉ đó trong các tham số của yêu cầu POST được gửi đến Helius RPC URL.

Yêu cầu này sử dụng phương thức searchAssets để truy vấn các tài sản thuộc sở hữu của ownerAddress và được nhóm theo một collection cụ thể. Sau đó, phản hồi API được chuyển thành JSON và phân rã để truy cập kết quả.

Dưới đây là phản hồi cho thấy quyền sở hữu Saga Genesis Token:

Mã
{
   "items":[
      {
         "authorities":[Array],
         "burnt":false,
         "compression":[Object],
         "content":[Object],
         "creators":[Array],
         "grouping":[Array],
         "id":[Token_Address],
         "interface":"V1_NFT",
         "mutable":true,
         "ownership":[Object],
         "royalty":[Object],
         "supply":[Object]
      }
   ],
   "limit":10,
   "page":1,
   "total":1
}

Đây là phản hồi của một ví không có Saga Genesis Token:

Mã
{
   "items":[],
   "limit":10,
   "page":1,
   "total":0
}

Để sử dụng hàm này, hãy chuyển đến thư mục screens để tìm MainScreen.tsx. Ứng dụng hiển thị functional component này làm màn hình chính, nơi có thể nhập và sử dụng các component bổ sung như hàm trên trong giao diện người dùng.

Để gọi hàm kiểm soát truy cập bằng token, hãy nhập và đặt hàm findSagaGenesisToken trong một hàm callback. Ở đây, hàm được đặt tên là handleConnectPress() vì hàm callback được gọi khi người dùng nhấn nút kết nối.

Mã
// Checks if the user's wallet has a Saga Genesis Token
const handleConnectPress = useCallback(async () => {
  return await transact(async (wallet: Web3MobileWallet) => {
    const authorizationResult = await authorizeSession(wallet);

    const message = "Confirm that you own this wallet.";
    const messageBuffer = new Uint8Array(
      message.split("").map((c) => c.charCodeAt(0))
    );

    const signedMessages = await wallet.signMessages({
      addresses: [authorizationResult.address],
      payloads: [messageBuffer],
    });

    const verified = sign.detached.verify(
      messageBuffer,
      signedMessages[0],
      authorizationResult.publicKey.toBytes()
    );

    if (verified) {
      const result = await findSagaGenesisToken(authorizationResult.publicKey);

      // Checks that user has exactly 1 Saga Genesis Token
      if (result.length === 1) {
        setVerified(true);
      } else {
        setVerified(false);
      }
    } else {
      setVerified(false);
    }
  });
}, [authorizeSession]);

Trong hàm callback bất đồng bộ, hãy gọi hàm transact từ @solana-mobile/mobile-wallet-adapter để cung cấp đối tượng Web3MobileWallet, đối tượng này có thể được dùng để cấp quyền cho một phiên.

Giao thức sẽ duyệt qua các ví có sẵn (mặc định là Phantom) và bắt đầu một phiên, trong đó người dùng phải cấp quyền cho ứng dụng trên giao diện ví trước khi được chuyển hướng trở lại ứng dụng. Người dùng phải ký một thông điệp để xác thực quyền sở hữu ví.

Trong phạm vi hướng dẫn này, việc xác minh diễn ra ở phía máy chủ. Tuy nhiên, trong các ứng dụng production, thông điệp phải được xác minh ở backend thông qua API để đảm bảo quyền sở hữu tài khoản là hợp lệ.

Khi ví của người dùng được cấp quyền, có thể truy xuất khóa công khai của họ bằng cách phân rã kết quả cấp quyền. Giờ đây, publicKey của họ có thể được dùng để tìm kiếm quyền sở hữu Saga Genesis Token.

Việc gọi findSagaGenesisToken với khóa công khai của người dùng sẽ gửi yêu cầu đến DAS API và trả về kết quả của các token tìm thấy dưới dạng một mảng. Nếu người dùng có đúng một Saga Genesis Token, hãy đặt trạng thái xác minh thành true. Nếu không, trạng thái xác minh được đặt thành false. 

Dựa trên trạng thái xác minh, hãy hiển thị các màn hình và component theo điều kiện. Trong hướng dẫn này, các trạng thái gồm: đang chờ kết nối, đã xác minh và chưa xác minh.

Xem logic hiển thị có điều kiện trong Mainscreen.tsx để thấy một cách biểu diễn đơn giản về việc hiển thị thông tin dựa trên trạng thái xác minh. Bạn có thể sửa đổi hoặc tham khảo kho lưu trữ GitHub để tùy chỉnh thêm. Một cách triển khai mẫu là kết nối cơ chế kiểm soát truy cập bằng token với điều hướng React Native để chuyển đổi có điều kiện giữa các màn hình.

Ứng dụng của cơ chế kiểm soát truy cập bằng token

Kiểm soát truy cập bằng token là một khái niệm mới được Web3 giới thiệu, trong đó quyền sở hữu tài sản cấp quyền truy cập nội dung. Logic này có thể áp dụng cho các lĩnh vực như bảo mật, hàng tiêu dùng, xuất bản và phân phối.

Các công cụ bảo mật Discord sử dụng cơ chế kiểm soát truy cập bằng token cho cộng đồng để cung cấp quyền truy cập giới hạn dựa trên quyền sở hữu token và số lượng token đang nắm giữ.

Trong lĩnh vực hàng hóa và dịch vụ tiêu dùng, cơ chế kiểm soát truy cập bằng token cho phép người bán cung cấp phiếu giảm giá, ưu đãi và cơ hội mua hàng cho cộng đồng.

Điều này tăng thêm giá trị sử dụng cho quyền sở hữu tài sản và tạo ra cách thức cụ thể hơn để dùng tài sản kỹ thuật số cho các chức năng trong thế giới thực.

Quyền sở hữu tài sản thúc đẩy lĩnh vực truyền thông và nội dung bằng cách tạo doanh thu từ quyền sở hữu và cung cấp trải nghiệm tùy chỉnh.

Dưới đây là một số thứ có thể xây dựng với cơ chế kiểm soát truy cập bằng token:

  • Mã giới thiệu và phiếu giảm giá độc quyền
  • Blog theo phong cách Substack
  • Yêu cầu nhận airdrop 
  • Bảng điều khiển riêng tư 
  • dApp kể chuyện được trò chơi hóa
  • Nhóm trò chuyện bí mật 
  • Khảo sát on-chain
  • Đặc quyền và sự kiện trò chơi tùy chỉnh

Điểm nổi bật của việc kiểm soát truy cập bằng token với DAS API là có thể sử dụng bất kỳ token nào. Một ứng dụng DeFi có thể yêu cầu người dùng sở hữu một lượng Solana tối thiểu để được truy cập, tương tự như việc một nhóm trò chuyện NFT yêu cầu thành viên xác minh rằng họ nắm giữ số lượng token tối thiểu. Có thể kiểm soát quyền truy cập dApp bằng SPL token, NFT, SFT, SBT và cNFT với cùng một logic cùng DAS API.

Kết luận

Hướng dẫn này cung cấp cái nhìn tổng quan đơn giản về cách dùng DAS API để kiểm soát quyền truy cập vào các dApp được xây dựng bằng React Native. Logic này có thể áp dụng cho bất kỳ bộ sưu tập hoặc token nào và được điều chỉnh theo từng trường hợp sử dụng cụ thể. Trải nghiệm kiểm soát truy cập bằng token mang lại tính độc quyền và giá trị cho cộng đồng, trong khi Saga Genesis Token cho phép airdrop đến một cộng đồng vững mạnh và mở ra nhiều cơ hội cho cả nhà sáng tạo lẫn người dùng. Web3 giới thiệu quyền tự lưu ký đối với hàng hóa kỹ thuật số. Từ đó, các cộng đồng gắn kết bởi quyền sở hữu tài sản bắt đầu xuất hiện. Khi Solana Saga kết nối công nghệ vật lý và kỹ thuật số để mang lại trải nghiệm dành riêng cho Solana, các ứng dụng phải được xây dựng để nâng cao và tưởng thưởng cho trải nghiệm đó. Ngoài lợi ích tài chính, kiểm soát truy cập bằng token còn thúc đẩy việc sử dụng quyền sở hữu tài sản kỹ thuật số trong kỷ nguyên internet mới.

Bạn muốn xem thêm nội dung về phát triển dApp di động trên Saga? Hãy tham gia cùng hơn 15.000 chủ sở hữu Saga tại Saga DAO và là người đầu tiên biết về các bản phát hành dApp, đặc quyền và phần thưởng mới nhất. Nếu hướng dẫn về kiểm soát truy cập bằng token này truyền cảm hứng cho chiến lược triển khai của bạn, hãy trao đổi với cộng đồng nhà phát triển trên Helius Discord và cập nhật thông tin mới nhất từ Blog Helius. Thúc đẩy việc ứng dụng blockchain và xây dựng trên công nghệ có hiệu năng cao nhất cùng Helius.

Tài nguyên bổ sung

Đăng ký nhận tin từ Helius

Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài

Hình ảnh phóng to